From 66570f070229525f1c1b37fc4eb6f51c0fc96dec Mon Sep 17 00:00:00 2001 From: Charles Oliver Nutter Date: Sun, 27 Dec 2015 14:59:42 -0600 Subject: [PATCH] Update stdlib to 2.3.0. --- lib/ruby/stdlib/English.rb | 10 +- lib/ruby/stdlib/abbrev.rb | 1 + lib/ruby/stdlib/base64.rb | 22 +- lib/ruby/stdlib/benchmark.rb | 45 +- lib/ruby/stdlib/bigdecimal/jacobian.rb | 1 + lib/ruby/stdlib/bigdecimal/ludcmp.rb | 1 + lib/ruby/stdlib/bigdecimal/math.rb | 17 +- lib/ruby/stdlib/bigdecimal/newton.rb | 1 + lib/ruby/stdlib/bigdecimal/util.rb | 1 + lib/ruby/stdlib/cgi.rb | 3 +- lib/ruby/stdlib/cgi/cookie.rb | 60 +- lib/ruby/stdlib/cgi/core.rb | 1 + lib/ruby/stdlib/cgi/html.rb | 1 + lib/ruby/stdlib/cgi/session.rb | 27 +- lib/ruby/stdlib/cgi/session/pstore.rb | 1 + lib/ruby/stdlib/cgi/util.rb | 6 + lib/ruby/stdlib/cmath.rb | 171 +- lib/ruby/stdlib/csv.rb | 105 +- lib/ruby/stdlib/date.rb | 13 +- lib/ruby/stdlib/date/format.rb | 6 +- lib/ruby/stdlib/debug.rb | 24 + lib/ruby/stdlib/delegate.rb | 31 +- lib/ruby/stdlib/digest.rb | 1 + lib/ruby/stdlib/digest/sha2.rb | 1 + lib/ruby/stdlib/drb.rb | 1 + lib/ruby/stdlib/drb/acl.rb | 1 + lib/ruby/stdlib/drb/drb.rb | 16 +- lib/ruby/stdlib/drb/eq.rb | 1 + lib/ruby/stdlib/drb/extserv.rb | 1 + lib/ruby/stdlib/drb/extservm.rb | 3 +- lib/ruby/stdlib/drb/gw.rb | 1 + lib/ruby/stdlib/drb/invokemethod.rb | 1 + lib/ruby/stdlib/drb/observer.rb | 1 + lib/ruby/stdlib/drb/ssl.rb | 1 + lib/ruby/stdlib/drb/timeridconv.rb | 1 + lib/ruby/stdlib/drb/unix.rb | 3 +- lib/ruby/stdlib/e2mmap.rb | 1 + lib/ruby/stdlib/erb.rb | 5 +- lib/ruby/stdlib/expect.rb | 1 + lib/ruby/stdlib/fiddle.rb | 1 + lib/ruby/stdlib/fiddle/closure.rb | 1 + lib/ruby/stdlib/fiddle/cparser.rb | 158 +- lib/ruby/stdlib/fiddle/function.rb | 1 + lib/ruby/stdlib/fiddle/import.rb | 1 + lib/ruby/stdlib/fiddle/pack.rb | 1 + lib/ruby/stdlib/fiddle/struct.rb | 1 + lib/ruby/stdlib/fiddle/types.rb | 1 + lib/ruby/stdlib/fiddle/value.rb | 1 + lib/ruby/stdlib/fileutils.rb | 22 +- lib/ruby/stdlib/find.rb | 1 + lib/ruby/stdlib/forwardable.rb | 9 +- lib/ruby/stdlib/getoptlong.rb | 3 +- lib/ruby/stdlib/ipaddr.rb | 5 +- lib/ruby/stdlib/irb.rb | 10 +- lib/ruby/stdlib/irb/cmd/chws.rb | 1 + lib/ruby/stdlib/irb/cmd/fork.rb | 1 + lib/ruby/stdlib/irb/cmd/help.rb | 1 + lib/ruby/stdlib/irb/cmd/load.rb | 1 + lib/ruby/stdlib/irb/cmd/nop.rb | 1 + lib/ruby/stdlib/irb/cmd/pushws.rb | 1 + lib/ruby/stdlib/irb/cmd/subirb.rb | 1 + lib/ruby/stdlib/irb/completion.rb | 1 + lib/ruby/stdlib/irb/context.rb | 1 + lib/ruby/stdlib/irb/ext/change-ws.rb | 1 + lib/ruby/stdlib/irb/ext/history.rb | 1 + lib/ruby/stdlib/irb/ext/loader.rb | 1 + lib/ruby/stdlib/irb/ext/math-mode.rb | 1 + lib/ruby/stdlib/irb/ext/multi-irb.rb | 1 + lib/ruby/stdlib/irb/ext/save-history.rb | 1 + lib/ruby/stdlib/irb/ext/tracer.rb | 1 + lib/ruby/stdlib/irb/ext/use-loader.rb | 1 + lib/ruby/stdlib/irb/ext/workspaces.rb | 1 + lib/ruby/stdlib/irb/extend-command.rb | 1 + lib/ruby/stdlib/irb/frame.rb | 1 + lib/ruby/stdlib/irb/help.rb | 1 + lib/ruby/stdlib/irb/init.rb | 1 + lib/ruby/stdlib/irb/input-method.rb | 1 + lib/ruby/stdlib/irb/inspector.rb | 1 + lib/ruby/stdlib/irb/lc/error.rb | 1 + lib/ruby/stdlib/irb/lc/ja/encoding_aliases.rb | 1 + lib/ruby/stdlib/irb/lc/ja/error.rb | 1 + lib/ruby/stdlib/irb/locale.rb | 1 + lib/ruby/stdlib/irb/magic-file.rb | 1 + lib/ruby/stdlib/irb/notifier.rb | 1 + lib/ruby/stdlib/irb/output-method.rb | 1 + lib/ruby/stdlib/irb/ruby-lex.rb | 5 +- lib/ruby/stdlib/irb/ruby-token.rb | 1 + lib/ruby/stdlib/irb/slex.rb | 1 + lib/ruby/stdlib/irb/src_encoding.rb | 1 + lib/ruby/stdlib/irb/version.rb | 1 + lib/ruby/stdlib/irb/workspace.rb | 1 + lib/ruby/stdlib/irb/ws-for-case-2.rb | 1 + lib/ruby/stdlib/irb/xmp.rb | 1 + lib/ruby/stdlib/kconv.rb | 1 + lib/ruby/stdlib/logger.rb | 129 +- lib/ruby/stdlib/mathn.rb | 1 + lib/ruby/stdlib/matrix.rb | 13 +- .../stdlib/matrix/eigenvalue_decomposition.rb | 209 +- lib/ruby/stdlib/matrix/lup_decomposition.rb | 1 + lib/ruby/stdlib/monitor.rb | 3 + lib/ruby/stdlib/mutex_m.rb | 1 + lib/ruby/stdlib/net/ftp.rb | 386 +++- lib/ruby/stdlib/net/http.rb | 73 +- lib/ruby/stdlib/net/http/backward.rb | 1 + lib/ruby/stdlib/net/http/exceptions.rb | 1 + lib/ruby/stdlib/net/http/generic_request.rb | 3 +- lib/ruby/stdlib/net/http/header.rb | 5 +- lib/ruby/stdlib/net/http/proxy_delta.rb | 1 + lib/ruby/stdlib/net/http/request.rb | 1 + lib/ruby/stdlib/net/http/requests.rb | 1 + lib/ruby/stdlib/net/http/response.rb | 3 +- lib/ruby/stdlib/net/http/responses.rb | 2 + lib/ruby/stdlib/net/https.rb | 3 +- lib/ruby/stdlib/net/imap.rb | 37 +- lib/ruby/stdlib/net/pop.rb | 1 + lib/ruby/stdlib/net/protocol.rb | 30 +- lib/ruby/stdlib/net/smtp.rb | 1 + lib/ruby/stdlib/observer.rb | 1 + lib/ruby/stdlib/open-uri.rb | 3 +- lib/ruby/stdlib/open3.rb | 15 +- lib/ruby/stdlib/optionparser.rb | 1 + lib/ruby/stdlib/optparse.rb | 298 ++- lib/ruby/stdlib/optparse/ac.rb | 1 + lib/ruby/stdlib/optparse/date.rb | 1 + lib/ruby/stdlib/optparse/shellwords.rb | 1 + lib/ruby/stdlib/optparse/time.rb | 1 + lib/ruby/stdlib/optparse/uri.rb | 1 + lib/ruby/stdlib/optparse/version.rb | 1 + lib/ruby/stdlib/ostruct.rb | 5 +- lib/ruby/stdlib/pathname.rb | 24 +- lib/ruby/stdlib/pp.rb | 6 +- lib/ruby/stdlib/prettyprint.rb | 8 +- lib/ruby/stdlib/prime.rb | 99 +- lib/ruby/stdlib/profile.rb | 1 + lib/ruby/stdlib/profiler.rb | 1 + lib/ruby/stdlib/pstore.rb | 3 +- lib/ruby/stdlib/rbconfig/datadir.rb | 1 + lib/ruby/stdlib/resolv-replace.rb | 2 + lib/ruby/stdlib/resolv.rb | 29 +- lib/ruby/stdlib/rexml/attlistdecl.rb | 3 +- lib/ruby/stdlib/rexml/attribute.rb | 1 + lib/ruby/stdlib/rexml/cdata.rb | 1 + lib/ruby/stdlib/rexml/child.rb | 1 + lib/ruby/stdlib/rexml/comment.rb | 1 + lib/ruby/stdlib/rexml/doctype.rb | 1 + lib/ruby/stdlib/rexml/document.rb | 1 + lib/ruby/stdlib/rexml/dtd/attlistdecl.rb | 1 + lib/ruby/stdlib/rexml/dtd/dtd.rb | 1 + lib/ruby/stdlib/rexml/dtd/elementdecl.rb | 1 + lib/ruby/stdlib/rexml/dtd/entitydecl.rb | 1 + lib/ruby/stdlib/rexml/dtd/notationdecl.rb | 1 + lib/ruby/stdlib/rexml/element.rb | 1 + lib/ruby/stdlib/rexml/encoding.rb | 1 + lib/ruby/stdlib/rexml/entity.rb | 1 + lib/ruby/stdlib/rexml/formatters/default.rb | 1 + lib/ruby/stdlib/rexml/formatters/pretty.rb | 1 + .../stdlib/rexml/formatters/transitive.rb | 1 + lib/ruby/stdlib/rexml/functions.rb | 1 + lib/ruby/stdlib/rexml/instruction.rb | 1 + lib/ruby/stdlib/rexml/light/node.rb | 1 + lib/ruby/stdlib/rexml/namespace.rb | 1 + lib/ruby/stdlib/rexml/node.rb | 1 + lib/ruby/stdlib/rexml/output.rb | 1 + lib/ruby/stdlib/rexml/parent.rb | 1 + lib/ruby/stdlib/rexml/parseexception.rb | 1 + lib/ruby/stdlib/rexml/parsers/baseparser.rb | 1 + lib/ruby/stdlib/rexml/parsers/lightparser.rb | 1 + lib/ruby/stdlib/rexml/parsers/pullparser.rb | 1 + lib/ruby/stdlib/rexml/parsers/sax2parser.rb | 1 + lib/ruby/stdlib/rexml/parsers/streamparser.rb | 1 + lib/ruby/stdlib/rexml/parsers/treeparser.rb | 1 + .../stdlib/rexml/parsers/ultralightparser.rb | 1 + lib/ruby/stdlib/rexml/parsers/xpathparser.rb | 1 + lib/ruby/stdlib/rexml/quickpath.rb | 1 + lib/ruby/stdlib/rexml/rexml.rb | 1 + lib/ruby/stdlib/rexml/sax2listener.rb | 1 + lib/ruby/stdlib/rexml/security.rb | 1 + lib/ruby/stdlib/rexml/source.rb | 3 +- lib/ruby/stdlib/rexml/streamlistener.rb | 1 + lib/ruby/stdlib/rexml/syncenumerator.rb | 1 + lib/ruby/stdlib/rexml/text.rb | 1 + .../rexml/undefinednamespaceexception.rb | 1 + lib/ruby/stdlib/rexml/validation/relaxng.rb | 1 + .../stdlib/rexml/validation/validation.rb | 1 + .../rexml/validation/validationexception.rb | 1 + lib/ruby/stdlib/rexml/xmldecl.rb | 1 + lib/ruby/stdlib/rexml/xmltokens.rb | 1 + lib/ruby/stdlib/rexml/xpath.rb | 1 + lib/ruby/stdlib/rexml/xpath_parser.rb | 1 + lib/ruby/stdlib/rinda/rinda.rb | 1 + lib/ruby/stdlib/rinda/ring.rb | 1 + lib/ruby/stdlib/rinda/tuplespace.rb | 2 +- lib/ruby/stdlib/rss.rb | 1 + lib/ruby/stdlib/rss/0.9.rb | 1 + lib/ruby/stdlib/rss/1.0.rb | 1 + lib/ruby/stdlib/rss/2.0.rb | 1 + lib/ruby/stdlib/rss/atom.rb | 1 + lib/ruby/stdlib/rss/content.rb | 1 + lib/ruby/stdlib/rss/content/1.0.rb | 1 + lib/ruby/stdlib/rss/content/2.0.rb | 1 + lib/ruby/stdlib/rss/converter.rb | 1 + lib/ruby/stdlib/rss/dublincore.rb | 1 + lib/ruby/stdlib/rss/dublincore/1.0.rb | 1 + lib/ruby/stdlib/rss/dublincore/2.0.rb | 1 + lib/ruby/stdlib/rss/dublincore/atom.rb | 1 + lib/ruby/stdlib/rss/image.rb | 1 + lib/ruby/stdlib/rss/itunes.rb | 1 + lib/ruby/stdlib/rss/maker.rb | 1 + lib/ruby/stdlib/rss/maker/0.9.rb | 1 + lib/ruby/stdlib/rss/maker/1.0.rb | 1 + lib/ruby/stdlib/rss/maker/2.0.rb | 1 + lib/ruby/stdlib/rss/maker/atom.rb | 1 + lib/ruby/stdlib/rss/maker/base.rb | 1 + lib/ruby/stdlib/rss/maker/content.rb | 1 + lib/ruby/stdlib/rss/maker/dublincore.rb | 1 + lib/ruby/stdlib/rss/maker/entry.rb | 1 + lib/ruby/stdlib/rss/maker/feed.rb | 1 + lib/ruby/stdlib/rss/maker/image.rb | 1 + lib/ruby/stdlib/rss/maker/itunes.rb | 1 + lib/ruby/stdlib/rss/maker/slash.rb | 1 + lib/ruby/stdlib/rss/maker/syndication.rb | 1 + lib/ruby/stdlib/rss/maker/taxonomy.rb | 1 + lib/ruby/stdlib/rss/maker/trackback.rb | 1 + lib/ruby/stdlib/rss/parser.rb | 1 + lib/ruby/stdlib/rss/rexmlparser.rb | 1 + lib/ruby/stdlib/rss/rss.rb | 3 +- lib/ruby/stdlib/rss/slash.rb | 1 + lib/ruby/stdlib/rss/syndication.rb | 3 +- lib/ruby/stdlib/rss/taxonomy.rb | 1 + lib/ruby/stdlib/rss/trackback.rb | 1 + lib/ruby/stdlib/rss/utils.rb | 1 + lib/ruby/stdlib/rss/xml-stylesheet.rb | 1 + lib/ruby/stdlib/rss/xml.rb | 1 + lib/ruby/stdlib/rss/xmlparser.rb | 1 + lib/ruby/stdlib/rss/xmlscanner.rb | 1 + lib/ruby/stdlib/scanf.rb | 6 +- lib/ruby/stdlib/set.rb | 94 +- lib/ruby/stdlib/shell.rb | 1 + lib/ruby/stdlib/shell/builtin-command.rb | 1 + lib/ruby/stdlib/shell/command-processor.rb | 1 + lib/ruby/stdlib/shell/error.rb | 1 + lib/ruby/stdlib/shell/filter.rb | 1 + lib/ruby/stdlib/shell/process-controller.rb | 1 + lib/ruby/stdlib/shell/system-command.rb | 1 + lib/ruby/stdlib/shell/version.rb | 1 + lib/ruby/stdlib/shellwords.rb | 14 +- lib/ruby/stdlib/singleton.rb | 1 + lib/ruby/stdlib/socket.rb | 526 ++++- lib/ruby/stdlib/sync.rb | 1 + lib/ruby/stdlib/thwait.rb | 1 + lib/ruby/stdlib/time.rb | 6 +- lib/ruby/stdlib/tracer.rb | 1 + lib/ruby/stdlib/tsort.rb | 2 + lib/ruby/stdlib/un.rb | 9 +- lib/ruby/stdlib/unicode_normalize.rb | 1 + .../stdlib/unicode_normalize/normalize.rb | 13 +- lib/ruby/stdlib/unicode_normalize/tables.rb | 1819 ++++++++--------- lib/ruby/stdlib/uri.rb | 1 + lib/ruby/stdlib/uri/common.rb | 19 +- lib/ruby/stdlib/uri/ftp.rb | 5 +- lib/ruby/stdlib/uri/generic.rb | 82 +- lib/ruby/stdlib/uri/http.rb | 1 + lib/ruby/stdlib/uri/https.rb | 1 + lib/ruby/stdlib/uri/ldap.rb | 1 + lib/ruby/stdlib/uri/ldaps.rb | 1 + lib/ruby/stdlib/uri/mailto.rb | 5 + lib/ruby/stdlib/uri/rfc2396_parser.rb | 3 +- lib/ruby/stdlib/uri/rfc3986_parser.rb | 1 + lib/ruby/stdlib/webrick.rb | 3 +- lib/ruby/stdlib/webrick/accesslog.rb | 1 + lib/ruby/stdlib/webrick/cgi.rb | 1 + lib/ruby/stdlib/webrick/compat.rb | 1 + lib/ruby/stdlib/webrick/config.rb | 1 + lib/ruby/stdlib/webrick/cookie.rb | 1 + lib/ruby/stdlib/webrick/htmlutils.rb | 1 + lib/ruby/stdlib/webrick/httpauth.rb | 1 + .../stdlib/webrick/httpauth/authenticator.rb | 1 + lib/ruby/stdlib/webrick/httpauth/basicauth.rb | 4 +- .../stdlib/webrick/httpauth/digestauth.rb | 4 +- lib/ruby/stdlib/webrick/httpauth/htdigest.rb | 1 + lib/ruby/stdlib/webrick/httpauth/htgroup.rb | 1 + lib/ruby/stdlib/webrick/httpauth/htpasswd.rb | 1 + lib/ruby/stdlib/webrick/httpauth/userdb.rb | 1 + lib/ruby/stdlib/webrick/httpproxy.rb | 5 +- lib/ruby/stdlib/webrick/httprequest.rb | 1 + lib/ruby/stdlib/webrick/httpresponse.rb | 1 + lib/ruby/stdlib/webrick/https.rb | 1 + lib/ruby/stdlib/webrick/httpserver.rb | 4 +- lib/ruby/stdlib/webrick/httpservlet.rb | 1 + .../stdlib/webrick/httpservlet/abstract.rb | 1 + .../stdlib/webrick/httpservlet/cgi_runner.rb | 1 + .../stdlib/webrick/httpservlet/cgihandler.rb | 1 + .../stdlib/webrick/httpservlet/erbhandler.rb | 1 + .../stdlib/webrick/httpservlet/filehandler.rb | 1 + .../stdlib/webrick/httpservlet/prochandler.rb | 1 + lib/ruby/stdlib/webrick/httpstatus.rb | 1 + lib/ruby/stdlib/webrick/httputils.rb | 1 + lib/ruby/stdlib/webrick/httpversion.rb | 1 + lib/ruby/stdlib/webrick/log.rb | 1 + lib/ruby/stdlib/webrick/server.rb | 51 +- lib/ruby/stdlib/webrick/ssl.rb | 3 +- lib/ruby/stdlib/webrick/utils.rb | 96 +- lib/ruby/stdlib/webrick/version.rb | 1 + lib/ruby/stdlib/win32/importer.rb | 1 + lib/ruby/stdlib/win32/registry.rb | 16 +- lib/ruby/stdlib/win32/resolv.rb | 1 + lib/ruby/stdlib/win32/sspi.rb | 1 + lib/ruby/stdlib/xmlrpc.rb | 15 +- lib/ruby/stdlib/xmlrpc/base64.rb | 1 + lib/ruby/stdlib/xmlrpc/client.rb | 1 + lib/ruby/stdlib/xmlrpc/config.rb | 1 + lib/ruby/stdlib/xmlrpc/create.rb | 1 + lib/ruby/stdlib/xmlrpc/datetime.rb | 1 + lib/ruby/stdlib/xmlrpc/marshal.rb | 1 + lib/ruby/stdlib/xmlrpc/parser.rb | 1 + lib/ruby/stdlib/xmlrpc/server.rb | 1 + lib/ruby/stdlib/xmlrpc/utils.rb | 1 + lib/ruby/stdlib/yaml.rb | 3 +- lib/ruby/stdlib/yaml/dbm.rb | 1 + lib/ruby/stdlib/yaml/store.rb | 1 + tool/{globals_2_2_2.rb => globals_2_3_0.rb} | 0 321 files changed, 3291 insertions(+), 1938 deletions(-) rename tool/{globals_2_2_2.rb => globals_2_3_0.rb} (100%) diff --git a/lib/ruby/stdlib/English.rb b/lib/ruby/stdlib/English.rb index 6111263e10c..108e0b245c5 100644 --- a/lib/ruby/stdlib/English.rb +++ b/lib/ruby/stdlib/English.rb @@ -1,7 +1,9 @@ -# Modified for JRuby -# In JRuby, we define these aliases by default, so this file -# does nothing. - +# frozen_string_literal: false +# +# Modified for JRuby +# In JRuby, we define these aliases by default, so this file +# does nothing. +# # Include the English library file in a Ruby script, and you can # reference the global variables such as \VAR{\$\_} using less # cryptic names, listed in the following table.% \vref{tab:english}. diff --git a/lib/ruby/stdlib/abbrev.rb b/lib/ruby/stdlib/abbrev.rb index 2c07fb5cf9f..2eac293c30d 100644 --- a/lib/ruby/stdlib/abbrev.rb +++ b/lib/ruby/stdlib/abbrev.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false #-- # Copyright (c) 2001,2003 Akinori MUSHA # diff --git a/lib/ruby/stdlib/base64.rb b/lib/ruby/stdlib/base64.rb index 98829f0d96f..a08941af924 100644 --- a/lib/ruby/stdlib/base64.rb +++ b/lib/ruby/stdlib/base64.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # = base64.rb: methods for base64-encoding and -decoding strings # @@ -77,15 +78,30 @@ def strict_decode64(str) # This method complies with ``Base 64 Encoding with URL and Filename Safe # Alphabet'' in RFC 4648. # The alphabet uses '-' instead of '+' and '_' instead of '/'. - def urlsafe_encode64(bin) - strict_encode64(bin).tr("+/", "-_") + # Note that the result can still contain '='. + # You can remove the padding by setting +padding+ as false. + def urlsafe_encode64(bin, padding: true) + str = strict_encode64(bin).tr("+/", "-_") + str = str.delete("=") unless padding + str end # Returns the Base64-decoded version of +str+. # This method complies with ``Base 64 Encoding with URL and Filename Safe # Alphabet'' in RFC 4648. # The alphabet uses '-' instead of '+' and '_' instead of '/'. + # + # The padding character is optional. + # This method accepts both correctly-padded and unpadded input. + # Note that it still rejects incorrectly-padded input. def urlsafe_decode64(str) - strict_decode64(str.tr("-_", "+/")) + # NOTE: RFC 4648 does say nothing about unpadded input, but says that + # "the excess pad characters MAY also be ignored", so it is inferred that + # unpadded input is also acceptable. + str = str.tr("-_", "+/") + if !str.end_with?("=") && str.length % 4 != 0 + str = str.ljust((str.length + 3) & ~3, "=") + end + strict_decode64(str) end end diff --git a/lib/ruby/stdlib/benchmark.rb b/lib/ruby/stdlib/benchmark.rb index 690dff1c284..ec1b658cde9 100644 --- a/lib/ruby/stdlib/benchmark.rb +++ b/lib/ruby/stdlib/benchmark.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false #-- # benchmark.rb - a performance benchmarking library # @@ -25,7 +26,7 @@ # # puts Benchmark.measure { "a"*1_000_000_000 } # -# On my machine (OSX 10.8.3 on i5 1.7 Ghz) this generates: +# On my machine (OSX 10.8.3 on i5 1.7 GHz) this generates: # # 0.350000 0.400000 0.750000 ( 0.835234) # @@ -131,7 +132,7 @@ module Benchmark # # If the block returns an array of # Benchmark::Tms objects, these will be used to format - # additional lines of output. If +label+ parameters are + # additional lines of output. If +labels+ parameter are # given, these are used to label these extra lines. # # _Note_: Other methods provide a simpler interface to this one, and are @@ -180,8 +181,8 @@ def benchmark(caption = "", label_width = nil, format = nil, *labels) # :yield: # A simple interface to the #benchmark method, #bm generates sequential - # reports with labels. The parameters have the same meaning as for - # #benchmark. + # reports with labels. +label_width+ and +labels+ parameters have the same + # meaning as for #benchmark. # # require 'benchmark' # @@ -270,23 +271,27 @@ def bmbm(width = 0) # :yield: job STDOUT.sync = sync unless sync.nil? end - # :stopdoc: - case - when defined?(Process::CLOCK_MONOTONIC) - BENCHMARK_CLOCK = Process::CLOCK_MONOTONIC - else - BENCHMARK_CLOCK = Process::CLOCK_REALTIME - end - # :startdoc: - # # Returns the time used to execute the given block as a - # Benchmark::Tms object. + # Benchmark::Tms object. Takes +label+ option. + # + # require 'benchmark' + # + # n = 1000000 + # + # time = Benchmark.measure do + # n.times { a = "1" } + # end + # puts time + # + # Generates: + # + # 0.220000 0.000000 0.220000 ( 0.227313) # def measure(label = "") # :yield: - t0, r0 = Process.times, Process.clock_gettime(BENCHMARK_CLOCK) + t0, r0 = Process.times, Process.clock_gettime(Process::CLOCK_MONOTONIC) yield - t1, r1 = Process.times, Process.clock_gettime(BENCHMARK_CLOCK) + t1, r1 = Process.times, Process.clock_gettime(Process::CLOCK_MONOTONIC) Benchmark::Tms.new(t1.utime - t0.utime, t1.stime - t0.stime, t1.cutime - t0.cutime, @@ -299,9 +304,9 @@ def measure(label = "") # :yield: # Returns the elapsed real time used to execute the given block. # def realtime # :yield: - r0 = Process.clock_gettime(BENCHMARK_CLOCK) + r0 = Process.clock_gettime(Process::CLOCK_MONOTONIC) yield - Process.clock_gettime(BENCHMARK_CLOCK) - r0 + Process.clock_gettime(Process::CLOCK_MONOTONIC) - r0 end module_function :benchmark, :measure, :realtime, :bm, :bmbm @@ -475,7 +480,7 @@ def /(x); memberwise(:/, x) end # # Returns the contents of this Tms object as - # a formatted string, according to a format string + # a formatted string, according to a +format+ string # like that passed to Kernel.format. In addition, #format # accepts the following extensions: # @@ -487,7 +492,7 @@ def /(x); memberwise(:/, x) end # %r:: Replaced by the elapsed real time, as reported by Tms#real # %n:: Replaced by the label string, as reported by Tms#label (Mnemonic: n of "*n*ame") # - # If _format_ is not given, FORMAT is used as default value, detailing the + # If +format+ is not given, FORMAT is used as default value, detailing the # user, system and real elapsed time. # def format(format = nil, *args) diff --git a/lib/ruby/stdlib/bigdecimal/jacobian.rb b/lib/ruby/stdlib/bigdecimal/jacobian.rb index d56caab0d39..9cad06c09b5 100644 --- a/lib/ruby/stdlib/bigdecimal/jacobian.rb +++ b/lib/ruby/stdlib/bigdecimal/jacobian.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # require 'bigdecimal/jacobian' # diff --git a/lib/ruby/stdlib/bigdecimal/ludcmp.rb b/lib/ruby/stdlib/bigdecimal/ludcmp.rb index 6cbe29b6da0..dd265e482a3 100644 --- a/lib/ruby/stdlib/bigdecimal/ludcmp.rb +++ b/lib/ruby/stdlib/bigdecimal/ludcmp.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'bigdecimal' # diff --git a/lib/ruby/stdlib/bigdecimal/math.rb b/lib/ruby/stdlib/bigdecimal/math.rb index 4a4fcc2b06f..b1d1c19c80e 100644 --- a/lib/ruby/stdlib/bigdecimal/math.rb +++ b/lib/ruby/stdlib/bigdecimal/math.rb @@ -1,4 +1,6 @@ +# frozen_string_literal: false require 'bigdecimal' +require 'bigdecimal/util' # #-- @@ -226,6 +228,19 @@ def PI(prec) # def E(prec) raise ArgumentError, "Zero or negative precision for E" if prec <= 0 - BigMath.exp(1, prec) + n = prec + BigDecimal.double_fig + one = BigDecimal("1") + y = one + d = y + z = one + i = 0 + while d.nonzero? && ((m = n - (y.exponent - d.exponent).abs) > 0) + m = BigDecimal.double_fig if m < BigDecimal.double_fig + i += 1 + z *= i + d = one.div(z,m) + y += d + end + y end end diff --git a/lib/ruby/stdlib/bigdecimal/newton.rb b/lib/ruby/stdlib/bigdecimal/newton.rb index db1a5ad99e6..85bacb7f2ef 100644 --- a/lib/ruby/stdlib/bigdecimal/newton.rb +++ b/lib/ruby/stdlib/bigdecimal/newton.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require "bigdecimal/ludcmp" require "bigdecimal/jacobian" diff --git a/lib/ruby/stdlib/bigdecimal/util.rb b/lib/ruby/stdlib/bigdecimal/util.rb index 82c82c8e1ee..0c4e486c005 100644 --- a/lib/ruby/stdlib/bigdecimal/util.rb +++ b/lib/ruby/stdlib/bigdecimal/util.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # BigDecimal extends the native Integer class to provide the #to_d method. # # When you require the BigDecimal library in your application, this methodwill diff --git a/lib/ruby/stdlib/cgi.rb b/lib/ruby/stdlib/cgi.rb index ae73fe37f6e..167b76cef7e 100644 --- a/lib/ruby/stdlib/cgi.rb +++ b/lib/ruby/stdlib/cgi.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # cgi.rb - cgi support library # @@ -80,7 +81,7 @@ # # For instance, suppose the request contains the parameter # "favourite_colours" with the multiple values "blue" and "green". The -# following behaviour would occur: +# following behavior would occur: # # cgi.params["favourite_colours"] # => ["blue", "green"] # cgi["favourite_colours"] # => "blue" diff --git a/lib/ruby/stdlib/cgi/cookie.rb b/lib/ruby/stdlib/cgi/cookie.rb index 3ec884dffb2..ffd88b8edb0 100644 --- a/lib/ruby/stdlib/cgi/cookie.rb +++ b/lib/ruby/stdlib/cgi/cookie.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'cgi/util' class CGI # Class representing an HTTP cookie. @@ -10,29 +11,32 @@ class CGI # == Examples of use # cookie1 = CGI::Cookie.new("name", "value1", "value2", ...) # cookie1 = CGI::Cookie.new("name" => "name", "value" => "value") - # cookie1 = CGI::Cookie.new('name' => 'name', - # 'value' => ['value1', 'value2', ...], - # 'path' => 'path', # optional - # 'domain' => 'domain', # optional - # 'expires' => Time.now, # optional - # 'secure' => true # optional + # cookie1 = CGI::Cookie.new('name' => 'name', + # 'value' => ['value1', 'value2', ...], + # 'path' => 'path', # optional + # 'domain' => 'domain', # optional + # 'expires' => Time.now, # optional + # 'secure' => true, # optional + # 'httponly' => true # optional # ) # # cgi.out("cookie" => [cookie1, cookie2]) { "string" } # - # name = cookie1.name - # values = cookie1.value - # path = cookie1.path - # domain = cookie1.domain - # expires = cookie1.expires - # secure = cookie1.secure + # name = cookie1.name + # values = cookie1.value + # path = cookie1.path + # domain = cookie1.domain + # expires = cookie1.expires + # secure = cookie1.secure + # httponly = cookie1.httponly # - # cookie1.name = 'name' - # cookie1.value = ['value1', 'value2', ...] - # cookie1.path = 'path' - # cookie1.domain = 'domain' - # cookie1.expires = Time.now + 30 - # cookie1.secure = true + # cookie1.name = 'name' + # cookie1.value = ['value1', 'value2', ...] + # cookie1.path = 'path' + # cookie1.domain = 'domain' + # cookie1.expires = Time.now + 30 + # cookie1.secure = true + # cookie1.httponly = true class Cookie < Array @@accept_charset="UTF-8" unless defined?(@@accept_charset) @@ -60,6 +64,8 @@ class Cookie < Array # secure:: whether this cookie is a secure cookie or not (default to # false). Secure cookies are only transmitted to HTTPS # servers. + # httponly:: whether this cookie is a HttpOnly cookie or not (default to + # false). HttpOnly cookies are not available to javascript. # # These keywords correspond to attributes of the cookie object. def initialize(name = "", *value) @@ -70,6 +76,7 @@ def initialize(name = "", *value) %r|^(.*/)|.match(ENV["SCRIPT_NAME"]) @path = ($1 or "") @secure = false + @httponly = false return super(value) end @@ -89,7 +96,8 @@ def initialize(name = "", *value) end @domain = options["domain"] @expires = options["expires"] - @secure = options["secure"] == true ? true : false + @secure = options["secure"] == true + @httponly = options["httponly"] == true super(value) end @@ -103,7 +111,9 @@ def initialize(name = "", *value) # Time at which this cookie expires, as a +Time+ attr_accessor :expires # True if this cookie is secure; false otherwise - attr_reader("secure") + attr_reader :secure + # True if this cookie is httponly; false otherwise + attr_reader :httponly # Returns the value or list of values for this cookie. def value @@ -123,6 +133,13 @@ def secure=(val) @secure end + # Set whether the Cookie is a httponly cookie or not. + # + # +val+ must be a boolean. + def httponly=(val) + @httponly = !!val + end + # Convert the Cookie to its string representation. def to_s val = collect{|v| CGI.escape(v) }.join("&") @@ -130,7 +147,8 @@ def to_s buf << "; domain=#{@domain}" if @domain buf << "; path=#{@path}" if @path buf << "; expires=#{CGI::rfc1123_date(@expires)}" if @expires - buf << "; secure" if @secure == true + buf << "; secure" if @secure + buf << "; HttpOnly" if @httponly buf end diff --git a/lib/ruby/stdlib/cgi/core.rb b/lib/ruby/stdlib/cgi/core.rb index b81f9153796..1a741dcd766 100644 --- a/lib/ruby/stdlib/cgi/core.rb +++ b/lib/ruby/stdlib/cgi/core.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false #-- # Methods for generating HTML, parsing CGI-related parameters, and # generating HTTP responses. diff --git a/lib/ruby/stdlib/cgi/html.rb b/lib/ruby/stdlib/cgi/html.rb index db47bb82665..4b9e577b328 100644 --- a/lib/ruby/stdlib/cgi/html.rb +++ b/lib/ruby/stdlib/cgi/html.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false class CGI # Base module for HTML-generation mixins. # diff --git a/lib/ruby/stdlib/cgi/session.rb b/lib/ruby/stdlib/cgi/session.rb index 63c5003526e..d44a5f84b08 100644 --- a/lib/ruby/stdlib/cgi/session.rb +++ b/lib/ruby/stdlib/cgi/session.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # cgi/session.rb - session support for cgi scripts # @@ -163,24 +164,26 @@ def Session::callback(dbman) #:nodoc: # Create a new session id. # - # The session id is an MD5 hash based upon the time, - # a random number, and a constant string. This routine - # is used internally for automatically generated - # session ids. + # The session id is a secure random number by SecureRandom + # if possible, otherwise an SHA512 hash based upon the time, + # a random number, and a constant string. This routine is + # used internally for automatically generated session ids. def create_new_id require 'securerandom' begin + # by OpenSSL, or system provided entropy pool session_id = SecureRandom.hex(16) rescue NotImplementedError - require 'digest/md5' - md5 = Digest::MD5::new + # never happens on modern systems + require 'digest' + d = Digest('SHA512').new now = Time::now - md5.update(now.to_s) - md5.update(String(now.usec)) - md5.update(String(rand(0))) - md5.update(String($$)) - md5.update('foobar') - session_id = md5.hexdigest + d.update(now.to_s) + d.update(String(now.usec)) + d.update(String(rand(0))) + d.update(String($$)) + d.update('foobar') + session_id = d.hexdigest[0, 32] end session_id end diff --git a/lib/ruby/stdlib/cgi/session/pstore.rb b/lib/ruby/stdlib/cgi/session/pstore.rb index 75343149e12..2dfb72bdceb 100644 --- a/lib/ruby/stdlib/cgi/session/pstore.rb +++ b/lib/ruby/stdlib/cgi/session/pstore.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # cgi/session/pstore.rb - persistent storage of marshalled session data # diff --git a/lib/ruby/stdlib/cgi/util.rb b/lib/ruby/stdlib/cgi/util.rb index 3d7db8f2c87..83c310b3cb5 100644 --- a/lib/ruby/stdlib/cgi/util.rb +++ b/lib/ruby/stdlib/cgi/util.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false class CGI; module Util; end; extend Util; end module CGI::Util @@accept_charset="UTF-8" unless defined?(@@accept_charset) @@ -37,6 +38,11 @@ def escapeHTML(string) string.gsub(/['&\"<>]/, TABLE_FOR_ESCAPE_HTML__) end + begin + require 'cgi/escape' + rescue LoadError + end + # Unescape a string that has been HTML-escaped # CGI::unescapeHTML("Usage: foo "bar" <baz>") # # => "Usage: foo \"bar\" " diff --git a/lib/ruby/stdlib/cmath.rb b/lib/ruby/stdlib/cmath.rb index 4753c475455..41ab06e77c7 100644 --- a/lib/ruby/stdlib/cmath.rb +++ b/lib/ruby/stdlib/cmath.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false ## # = Trigonometric and transcendental functions for complex numbers. # @@ -11,61 +12,61 @@ # even know what they are. They would rather have Math.sqrt(-1) raise # an exception than return a complex number. # +# For more information you can see Complex class. +# # == Usage # # To start using this library, simply require cmath library: # # require "cmath" -# -# And after call any CMath function. For example: -# -# CMath.sqrt(-9) #=> 0+3.0i -# CMath.exp(0 + 0i) #=> 1.0+0.0i -# CMath.log10(-5.to_c) #=> (0.6989700043360187+1.3643763538418412i) -# -# -# For more information you can see Complec class. module CMath include Math - alias exp! exp - alias log! log - alias log2! log2 - alias log10! log10 - alias sqrt! sqrt - alias cbrt! cbrt - - alias sin! sin - alias cos! cos - alias tan! tan - - alias sinh! sinh - alias cosh! cosh - alias tanh! tanh - - alias asin! asin - alias acos! acos - alias atan! atan - alias atan2! atan2 - - alias asinh! asinh - alias acosh! acosh - alias atanh! atanh + # Backup of Math is needed because mathn.rb replaces Math with CMath. + RealMath = Math # :nodoc: + private_constant :RealMath + + %w[ + exp + log + log2 + log10 + sqrt + cbrt + sin + cos + tan + sinh + cosh + tanh + asin + acos + atan + atan2 + asinh + acosh + atanh + ].each do |meth| + define_method(meth + '!') do |*args, &block| + warn("CMath##{meth}! is deprecated; use CMath##{meth} or Math##{meth}") if $VERBOSE + RealMath.send(meth, *args, &block) + end + end ## # Math::E raised to the +z+ power # - # CMath.exp(2i) #=> (-0.4161468365471424+0.9092974268256817i) + # CMath.exp(1.i * Math::PI) #=> (-1.0+1.2246467991473532e-16i) def exp(z) begin if z.real? - exp!(z) + RealMath.exp(z) else - ere = exp!(z.real) - Complex(ere * cos!(z.imag), - ere * sin!(z.imag)) + ere = RealMath.exp(z.real) + Complex(ere * RealMath.cos(z.imag), + ere * RealMath.sin(z.imag)) end rescue NoMethodError handle_no_method_error @@ -78,20 +79,12 @@ def exp(z) # # CMath.log(1 + 4i) #=> (1.416606672028108+1.3258176636680326i) # CMath.log(1 + 4i, 10) #=> (0.6152244606891369+0.5757952953408879i) - def log(*args) + def log(z, b=::Math::E) begin - z, b = args - unless b.nil? || b.kind_of?(Numeric) - raise TypeError, "Numeric Number required" - end - if z.real? and z >= 0 and (b.nil? or b >= 0) - log!(*args) + if z.real? && z >= 0 && b >= 0 + RealMath.log(z, b) else - a = Complex(log!(z.abs), z.arg) - if b - a /= log(b) - end - a + Complex(RealMath.log(z.abs), z.arg) / log(b) end rescue NoMethodError handle_no_method_error @@ -99,15 +92,15 @@ def log(*args) end ## - # returns the base 2 logarithm of +z+ + # Returns the base 2 logarithm of +z+ # # CMath.log2(-1) => (0.0+4.532360141827194i) def log2(z) begin if z.real? and z >= 0 - log2!(z) + RealMath.log2(z) else - log(z) / log!(2) + log(z) / RealMath.log(2) end rescue NoMethodError handle_no_method_error @@ -115,15 +108,15 @@ def log2(z) end ## - # returns the base 10 logarithm of +z+ + # Returns the base 10 logarithm of +z+ # # CMath.log10(-1) #=> (0.0+1.3643763538418412i) def log10(z) begin if z.real? and z >= 0 - log10!(z) + RealMath.log10(z) else - log(z) / log!(10) + log(z) / RealMath.log(10) end rescue NoMethodError handle_no_method_error @@ -138,9 +131,9 @@ def sqrt(z) begin if z.real? if z < 0 - Complex(0, sqrt!(-z)) + Complex(0, RealMath.sqrt(-z)) else - sqrt!(z) + RealMath.sqrt(z) end else if z.imag < 0 || @@ -149,7 +142,7 @@ def sqrt(z) else r = z.abs x = z.real - Complex(sqrt!((r + x) / 2.0), sqrt!((r - x) / 2.0)) + Complex(RealMath.sqrt((r + x) / 2.0), RealMath.sqrt((r - x) / 2.0)) end end rescue NoMethodError @@ -158,7 +151,7 @@ def sqrt(z) end ## - # returns the principal value of the cube root of +z+ + # Returns the principal value of the cube root of +z+ # # CMath.cbrt(1 + 4i) #=> (1.449461632813119+0.6858152562177092i) def cbrt(z) @@ -166,16 +159,16 @@ def cbrt(z) end ## - # returns the sine of +z+, where +z+ is given in radians + # Returns the sine of +z+, where +z+ is given in radians # # CMath.sin(1 + 1i) #=> (1.2984575814159773+0.6349639147847361i) def sin(z) begin if z.real? - sin!(z) + RealMath.sin(z) else - Complex(sin!(z.real) * cosh!(z.imag), - cos!(z.real) * sinh!(z.imag)) + Complex(RealMath.sin(z.real) * RealMath.cosh(z.imag), + RealMath.cos(z.real) * RealMath.sinh(z.imag)) end rescue NoMethodError handle_no_method_error @@ -183,16 +176,16 @@ def sin(z) end ## - # returns the cosine of +z+, where +z+ is given in radians + # Returns the cosine of +z+, where +z+ is given in radians # # CMath.cos(1 + 1i) #=> (0.8337300251311491-0.9888977057628651i) def cos(z) begin if z.real? - cos!(z) + RealMath.cos(z) else - Complex(cos!(z.real) * cosh!(z.imag), - -sin!(z.real) * sinh!(z.imag)) + Complex(RealMath.cos(z.real) * RealMath.cosh(z.imag), + -RealMath.sin(z.real) * RealMath.sinh(z.imag)) end rescue NoMethodError handle_no_method_error @@ -200,13 +193,13 @@ def cos(z) end ## - # returns the tangent of +z+, where +z+ is given in radians + # Returns the tangent of +z+, where +z+ is given in radians # # CMath.tan(1 + 1i) #=> (0.27175258531951174+1.0839233273386943i) def tan(z) begin if z.real? - tan!(z) + RealMath.tan(z) else sin(z) / cos(z) end @@ -216,16 +209,16 @@ def tan(z) end ## - # returns the hyperbolic sine of +z+, where +z+ is given in radians + # Returns the hyperbolic sine of +z+, where +z+ is given in radians # # CMath.sinh(1 + 1i) #=> (0.6349639147847361+1.2984575814159773i) def sinh(z) begin if z.real? - sinh!(z) + RealMath.sinh(z) else - Complex(sinh!(z.real) * cos!(z.imag), - cosh!(z.real) * sin!(z.imag)) + Complex(RealMath.sinh(z.real) * RealMath.cos(z.imag), + RealMath.cosh(z.real) * RealMath.sin(z.imag)) end rescue NoMethodError handle_no_method_error @@ -233,16 +226,16 @@ def sinh(z) end ## - # returns the hyperbolic cosine of +z+, where +z+ is given in radians + # Returns the hyperbolic cosine of +z+, where +z+ is given in radians # # CMath.cosh(1 + 1i) #=> (0.8337300251311491+0.9888977057628651i) def cosh(z) begin if z.real? - cosh!(z) + RealMath.cosh(z) else - Complex(cosh!(z.real) * cos!(z.imag), - sinh!(z.real) * sin!(z.imag)) + Complex(RealMath.cosh(z.real) * RealMath.cos(z.imag), + RealMath.sinh(z.real) * RealMath.sin(z.imag)) end rescue NoMethodError handle_no_method_error @@ -250,13 +243,13 @@ def cosh(z) end ## - # returns the hyperbolic tangent of +z+, where +z+ is given in radians + # Returns the hyperbolic tangent of +z+, where +z+ is given in radians # # CMath.tanh(1 + 1i) #=> (1.0839233273386943+0.27175258531951174i) def tanh(z) begin if z.real? - tanh!(z) + RealMath.tanh(z) else sinh(z) / cosh(z) end @@ -266,13 +259,13 @@ def tanh(z) end ## - # returns the arc sine of +z+ + # Returns the arc sine of +z+ # # CMath.asin(1 + 1i) #=> (0.6662394324925153+1.0612750619050355i) def asin(z) begin if z.real? and z >= -1 and z <= 1 - asin!(z) + RealMath.asin(z) else (-1.0).i * log(1.0.i * z + sqrt(1.0 - z * z)) end @@ -282,13 +275,13 @@ def asin(z) end ## - # returns the arc cosine of +z+ + # Returns the arc cosine of +z+ # # CMath.acos(1 + 1i) #=> (0.9045568943023813-1.0612750619050357i) def acos(z) begin if z.real? and z >= -1 and z <= 1 - acos!(z) + RealMath.acos(z) else (-1.0).i * log(z + 1.0.i * sqrt(1.0 - z * z)) end @@ -298,13 +291,13 @@ def acos(z) end ## - # returns the arc tangent of +z+ + # Returns the arc tangent of +z+ # # CMath.atan(1 + 1i) #=> (1.0172219678978514+0.4023594781085251i) def atan(z) begin if z.real? - atan!(z) + RealMath.atan(z) else 1.0.i * log((1.0.i + z) / (1.0.i - z)) / 2.0 end @@ -321,7 +314,7 @@ def atan(z) def atan2(y,x) begin if y.real? and x.real? - atan2!(y,x) + RealMath.atan2(y,x) else (-1.0).i * log((x + 1.0.i * y) / sqrt(x * x + y * y)) end @@ -337,7 +330,7 @@ def atan2(y,x) def asinh(z) begin if z.real? - asinh!(z) + RealMath.asinh(z) else log(z + sqrt(1.0 + z * z)) end @@ -353,7 +346,7 @@ def asinh(z) def acosh(z) begin if z.real? and z >= 1 - acosh!(z) + RealMath.acosh(z) else log(z + sqrt(z * z - 1.0)) end @@ -369,7 +362,7 @@ def acosh(z) def atanh(z) begin if z.real? and z >= -1 and z <= 1 - atanh!(z) + RealMath.atanh(z) else log((1.0 + z) / (1.0 - z)) / 2.0 end diff --git a/lib/ruby/stdlib/csv.rb b/lib/ruby/stdlib/csv.rb index 54b820df316..ba9d62c7060 100644 --- a/lib/ruby/stdlib/csv.rb +++ b/lib/ruby/stdlib/csv.rb @@ -1,4 +1,5 @@ # encoding: US-ASCII +# frozen_string_literal: true # = csv.rb -- CSV Reading and Writing # # Created by James Edward Gray II on 2005-10-31. @@ -176,7 +177,7 @@ # support. For example, :col_sep, :row_sep, and # :quote_char must be transcoded to match your data. Hopefully this # makes the entire process feel transparent, since CSV's defaults should just -# magically work for you data. However, you can set these values manually in +# magically work for your data. However, you can set these values manually in # the target Encoding to avoid the translation. # # It's also important to note that while all of CSV's core parser is now @@ -207,7 +208,7 @@ # class CSV # The version of the installed library. - VERSION = "2.4.8".freeze + VERSION = "2.4.8" # # A CSV::Row is part Array and part Hash. It retains an order for the fields @@ -284,11 +285,15 @@ def headers # def field(header_or_index, minimum_index = 0) # locate the pair - finder = header_or_index.is_a?(Integer) ? :[] : :assoc + finder = (header_or_index.is_a?(Integer) || header_or_index.is_a?(Range)) ? :[] : :assoc pair = @row[minimum_index..-1].send(finder, header_or_index) # return the field if we have a pair - pair.nil? ? nil : pair.last + if pair.nil? + nil + else + header_or_index.is_a?(Range) ? pair.map(&:last) : pair.last + end end alias_method :[], :field @@ -517,7 +522,7 @@ def ==(other) end # - # Collapses the row into a simple Hash. Be warning that this discards field + # Collapses the row into a simple Hash. Be warned that this discards field # order and clobbers duplicate fields. # def to_hash @@ -690,7 +695,7 @@ def headers # def [](index_or_header) if @mode == :row or # by index - (@mode == :col_or_row and index_or_header.is_a? Integer) + (@mode == :col_or_row and (index_or_header.is_a?(Integer) or index_or_header.is_a?(Range))) @table[index_or_header] else # by header @table.map { |row| row[index_or_header] } @@ -944,30 +949,32 @@ class MalformedCSVError < RuntimeError; end # To add a combo field, the value should be an Array of names. Combo fields # can be nested with other combo fields. # - Converters = { integer: lambda { |f| - Integer(f.encode(ConverterEncoding)) rescue f - }, - float: lambda { |f| - Float(f.encode(ConverterEncoding)) rescue f - }, - numeric: [:integer, :float], - date: lambda { |f| - begin - e = f.encode(ConverterEncoding) - e =~ DateMatcher ? Date.parse(e) : f - rescue # encoding conversion or date parse errors - f - end - }, - date_time: lambda { |f| - begin - e = f.encode(ConverterEncoding) - e =~ DateTimeMatcher ? DateTime.parse(e) : f - rescue # encoding conversion or date parse errors - f - end - }, - all: [:date_time, :numeric] } + Converters = { + integer: lambda { |f| + Integer(f.encode(ConverterEncoding)) rescue f + }, + float: lambda { |f| + Float(f.encode(ConverterEncoding)) rescue f + }, + numeric: [:integer, :float], + date: lambda { |f| + begin + e = f.encode(ConverterEncoding) + e =~ DateMatcher ? Date.parse(e) : f + rescue # encoding conversion or date parse errors + f + end + }, + date_time: lambda { |f| + begin + e = f.encode(ConverterEncoding) + e =~ DateTimeMatcher ? DateTime.parse(e) : f + rescue # encoding conversion or date parse errors + f + end + }, + all: [:date_time, :numeric], + } # # This Hash holds the built-in header converters of CSV that can be accessed @@ -1013,18 +1020,20 @@ class MalformedCSVError < RuntimeError; end # :force_quotes:: +false+ # :skip_lines:: +nil+ # - DEFAULT_OPTIONS = { col_sep: ",", - row_sep: :auto, - quote_char: '"', - field_size_limit: nil, - converters: nil, - unconverted_fields: nil, - headers: false, - return_headers: false, - header_converters: nil, - skip_blanks: false, - force_quotes: false, - skip_lines: nil }.freeze + DEFAULT_OPTIONS = { + col_sep: ",", + row_sep: :auto, + quote_char: '"', + field_size_limit: nil, + converters: nil, + unconverted_fields: nil, + headers: false, + return_headers: false, + header_converters: nil, + skip_blanks: false, + force_quotes: false, + skip_lines: nil, + }.freeze # # This method will return a CSV instance, just like CSV::new(), but the @@ -1149,7 +1158,7 @@ def self.generate(*args) args.unshift(io) else encoding = args[-1][:encoding] if args.last.is_a?(Hash) - str = "" + str = String.new str.force_encoding(encoding) if encoding args.unshift(str) end @@ -1174,7 +1183,7 @@ def self.generate(*args) def self.generate_line(row, options = Hash.new) options = {row_sep: $INPUT_RECORD_SEPARATOR}.merge(options) encoding = options.delete(:encoding) - str = "" + str = String.new if encoding str.force_encoding(encoding) elsif field = row.find { |f| not f.nil? } @@ -1355,7 +1364,7 @@ def self.table(path, options = Hash.new) # a String for +data+, you can later retrieve it (after writing to it, for # example) with CSV.string(). # - # Note that a wrapped String will be positioned at at the beginning (for + # Note that a wrapped String will be positioned at the beginning (for # reading). If you want it at the end (for writing), use CSV::generate(). # If you want any other positioning, pass a preset StringIO object instead. # @@ -1523,7 +1532,7 @@ def initialize(data, options = Hash.new) # prepare for building safe regular expressions in the target encoding, # if we can transcode the needed characters # - @re_esc = "\\".encode(@encoding) rescue "" + @re_esc = "\\".encode(@encoding).freeze rescue "" @re_chars = /#{%"[-\\]\\[\\.^$?*+{}()|# \r\n\t\f\v]".encode(@encoding)}/ init_separators(options) @@ -1850,7 +1859,7 @@ def shift csv.last << @col_sep end elsif part[0] == @quote_char - # If we are staring a new quoted column + # If we are starting a new quoted column if part[-1] != @quote_char || part.count(@quote_char) % 2 != 0 # start an extended column csv << part[1..-1] @@ -2094,7 +2103,7 @@ def init_parsers(options) # are set. When +field_name+ is :header_converters header converters # are added instead. # - # The :unconverted_fields option is also actived for + # The :unconverted_fields option is also activated for # :converters calls, if requested. # def init_converters(options, field_name = :converters) diff --git a/lib/ruby/stdlib/date.rb b/lib/ruby/stdlib/date.rb index 8e0b43c734c..4532bbdda33 100644 --- a/lib/ruby/stdlib/date.rb +++ b/lib/ruby/stdlib/date.rb @@ -882,7 +882,6 @@ def self.nth_kday(y=-4712, m=1, n=1, k=1, sg=ITALY) def self.rewrite_frags(elem) # :nodoc: elem ||= {} if seconds = elem[:seconds] - seconds += elem[:offset] unless elem[:offset].nil? d, fr = seconds.divmod(86400) h, fr = fr.divmod(3600) min, fr = fr.divmod(60) @@ -893,6 +892,7 @@ def self.rewrite_frags(elem) # :nodoc: elem[:sec] = s elem[:sec_fraction] = fr elem.delete(:seconds) + elem.delete(:offset) end elem end @@ -1454,14 +1454,7 @@ def next() next_day end # of the returned Date will be the last day of the target month. def >> (n) n = n.to_int rescue raise(TypeError, "n must be a Fixnum") - y, m = ((year * 12) + (mon - 1) + n).divmod(12) - m, = (m + 1).divmod(1) - d = mday - until cd = _valid_civil?(y, m, d, start) - d -= 1 - raise ArgumentError, "invalid date" unless d > 0 - end - self + (cd - jd) + self.class.new!(@dt.plusMonths(n), @of, @sg, @sub_millis) end # Return a new Date object that is +n+ months earlier than @@ -1476,7 +1469,7 @@ def next_month(n=1) self >> n end def prev_month(n=1) self << n end def next_year(n=1) - self >> (n * 12) + self.class.new!(@dt.plusYears(n.to_i), @of, @sg, @sub_millis) end def prev_year(n=1) diff --git a/lib/ruby/stdlib/date/format.rb b/lib/ruby/stdlib/date/format.rb index 29bca09cb86..4c7f8d060b1 100644 --- a/lib/ruby/stdlib/date/format.rb +++ b/lib/ruby/stdlib/date/format.rb @@ -939,7 +939,7 @@ def self._iso8601(str) # :nodoc: h[:sec] = i sec if sec end - h[:sec_fraction] = Rational(sec_fraction.to_i, 10**sec_fraction.size) if sec_fraction + h[:sec_fraction] = sec_fraction if sec_fraction set_zone(h, zone) elsif /\A\s* @@ -981,7 +981,7 @@ def self._iso8601(str) # :nodoc: h[:sec] = i sec if sec end - h[:sec_fraction] = Rational(sec_fraction.to_i, 10**sec_fraction.size) if sec_fraction + h[:sec_fraction] = sec_fraction if sec_fraction set_zone(h, zone) elsif /\A\s* @@ -1004,7 +1004,7 @@ def self._iso8601(str) # :nodoc: h[:hour] = i hour h[:min] = i min h[:sec] = i sec if sec - h[:sec_fraction] = Rational(sec_fraction.to_i, 10**sec_fraction.size) if sec_fraction + h[:sec_fraction] = i sec_fraction if sec_fraction set_zone(h, zone) end h diff --git a/lib/ruby/stdlib/debug.rb b/lib/ruby/stdlib/debug.rb index 32810adada0..8cdbfed4cea 100644 --- a/lib/ruby/stdlib/debug.rb +++ b/lib/ruby/stdlib/debug.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # Copyright (C) 2000 Network Applied Communication Laboratory, Inc. # Copyright (C) 2000 Information-technology Promotion Agency, Japan # Copyright (C) 2000-2003 NAKAMURA, Hiroshi @@ -1014,6 +1015,29 @@ def thread_list(num) @stdout.print "\n" end + # Prints all threads in @thread_list to @stdout. Returns a sorted array of + # values from the @thread_list hash. + # + # While in the debugger you can list all of + # the threads with: DEBUGGER__.thread_list_all + # + # (rdb:1) DEBUGGER__.thread_list_all + # +1 # debug_me.rb.rb:3 + # 2 # + # 3 # + # [1, 2, 3] + # + # Your current thread is indicated by a + + # + # Additionally you can list all threads with th l + # + # (rdb:1) th l + # +1 # debug_me.rb:3 + # 2 # debug_me.rb:3 + # 3 # debug_me.rb:3 + # + # See DEBUGGER__ for more usage. + def thread_list_all for th in @thread_list.values.sort thread_list(th) diff --git a/lib/ruby/stdlib/delegate.rb b/lib/ruby/stdlib/delegate.rb index f2b13881076..4ce3c53cc9d 100644 --- a/lib/ruby/stdlib/delegate.rb +++ b/lib/ruby/stdlib/delegate.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # = delegate -- Support for the Delegation Pattern # # Documentation by James Edward Gray II and Gavin Sinclair @@ -17,15 +18,10 @@ # yourself needing this control, have a look at Forwardable which is also in # the standard library. It may suit your needs better.) # -# SimpleDelegator's implementation serves as a nice example if the use of +# SimpleDelegator's implementation serves as a nice example of the use of # Delegator: # # class SimpleDelegator < Delegator -# def initialize(obj) -# super # pass obj to Delegator constructor, required -# @delegate_sd_obj = obj # store obj for future use -# end -# # def __getobj__ # @delegate_sd_obj # return object we are delegating to, required # end @@ -82,16 +78,13 @@ def initialize(obj) def method_missing(m, *args, &block) r = true target = self.__getobj__ {r = false} - begin - if r && target.respond_to?(m) - target.__send__(m, *args, &block) - elsif ::Kernel.respond_to?(m, true) - ::Kernel.instance_method(m).bind(self).(*args, &block) - else - super(m, *args, &block) - end - ensure - $@.delete_if {|t| %r"\A#{Regexp.quote(__FILE__)}:(?:#{[__LINE__-7, __LINE__-5, __LINE__-3].join('|')}):"o =~ t} if $@ + + if r && target.respond_to?(m) + target.__send__(m, *args, &block) + elsif ::Kernel.respond_to?(m, true) + ::Kernel.instance_method(m).bind(self).(*args, &block) + else + super(m, *args, &block) end end @@ -345,11 +338,7 @@ def __setobj__(obj) def Delegator.delegating_block(mid) # :nodoc: lambda do |*args, &block| target = self.__getobj__ - begin - target.__send__(mid, *args, &block) - ensure - $@.delete_if {|t| /\A#{Regexp.quote(__FILE__)}:#{__LINE__-2}:/o =~ t} if $@ - end + target.__send__(mid, *args, &block) end end diff --git a/lib/ruby/stdlib/digest.rb b/lib/ruby/stdlib/digest.rb index ef43c46ac38..d6daf36f805 100644 --- a/lib/ruby/stdlib/digest.rb +++ b/lib/ruby/stdlib/digest.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'digest.so' module Digest diff --git a/lib/ruby/stdlib/digest/sha2.rb b/lib/ruby/stdlib/digest/sha2.rb index 58d12e9b09f..58ff9f5cf03 100644 --- a/lib/ruby/stdlib/digest/sha2.rb +++ b/lib/ruby/stdlib/digest/sha2.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false #-- # sha2.rb - defines Digest::SHA2 class which wraps up the SHA256, # SHA384, and SHA512 classes. diff --git a/lib/ruby/stdlib/drb.rb b/lib/ruby/stdlib/drb.rb index 93cc811e14c..2bb4716fa22 100644 --- a/lib/ruby/stdlib/drb.rb +++ b/lib/ruby/stdlib/drb.rb @@ -1,2 +1,3 @@ +# frozen_string_literal: false require 'drb/drb' diff --git a/lib/ruby/stdlib/drb/acl.rb b/lib/ruby/stdlib/drb/acl.rb index 72e034e960e..520b7df71d1 100644 --- a/lib/ruby/stdlib/drb/acl.rb +++ b/lib/ruby/stdlib/drb/acl.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # Copyright (c) 2000,2002,2003 Masatoshi SEKI # # acl.rb is copyrighted free software by Masatoshi SEKI. diff --git a/lib/ruby/stdlib/drb/drb.rb b/lib/ruby/stdlib/drb/drb.rb index 48f747bd9f9..ecab68d7921 100644 --- a/lib/ruby/stdlib/drb/drb.rb +++ b/lib/ruby/stdlib/drb/drb.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # = drb/drb.rb # @@ -47,7 +48,7 @@ require 'socket' require 'thread' -require 'fcntl' +require 'io/wait' require 'weakref' require 'drb/eq' @@ -786,7 +787,7 @@ def open(uri, config, first=true) end end if first && (config[:auto_load] != false) - auto_load(uri, config) + auto_load(uri) return open(uri, config, false) end raise DRbBadURI, 'can\'t parse uri:' + uri @@ -810,7 +811,7 @@ def open_server(uri, config, first=true) end end if first && (config[:auto_load] != false) - auto_load(uri, config) + auto_load(uri) return open_server(uri, config, false) end raise DRbBadURI, 'can\'t parse uri:' + uri @@ -833,14 +834,14 @@ def uri_option(uri, config, first=true) end end if first && (config[:auto_load] != false) - auto_load(uri, config) + auto_load(uri) return uri_option(uri, config, false) end raise DRbBadURI, 'can\'t parse uri:' + uri end module_function :uri_option - def auto_load(uri, config) # :nodoc: + def auto_load(uri) # :nodoc: if uri =~ /^drb([a-z0-9]+):/ require("drb/#{$1}") rescue nil end @@ -1044,7 +1045,7 @@ def shutdown # Check to see if this connection is alive. def alive? return false unless @socket - if IO.select([@socket], nil, nil, 0) + if @socket.to_io.wait_readable(0) close return false end @@ -1053,7 +1054,6 @@ def alive? def set_sockopt(soc) # :nodoc: soc.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1) - soc.fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC) if defined? Fcntl::FD_CLOEXEC end end @@ -1511,7 +1511,7 @@ def stop_service if @protocol.respond_to? :shutdown @protocol.shutdown else - @thread.kill # xxx: Thread#kill + [@thread, *@grp.list].each {|thread| thread.kill} # xxx: Thread#kill end @thread.join end diff --git a/lib/ruby/stdlib/drb/eq.rb b/lib/ruby/stdlib/drb/eq.rb index 553f30c598a..15ca5cae42a 100644 --- a/lib/ruby/stdlib/drb/eq.rb +++ b/lib/ruby/stdlib/drb/eq.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false module DRb class DRbObject # :nodoc: def ==(other) diff --git a/lib/ruby/stdlib/drb/extserv.rb b/lib/ruby/stdlib/drb/extserv.rb index 327b553a25f..1cb1be47099 100644 --- a/lib/ruby/stdlib/drb/extserv.rb +++ b/lib/ruby/stdlib/drb/extserv.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false =begin external service Copyright (c) 2000,2002 Masatoshi SEKI diff --git a/lib/ruby/stdlib/drb/extservm.rb b/lib/ruby/stdlib/drb/extservm.rb index 8a7fc316af2..e2637aa62c2 100644 --- a/lib/ruby/stdlib/drb/extservm.rb +++ b/lib/ruby/stdlib/drb/extservm.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false =begin external service manager Copyright (c) 2000 Masatoshi SEKI @@ -37,7 +38,7 @@ def service(name) synchronize do while true server = @servers[name] - return server if server && server.alive? + return server if server&.alive? invoke_service(name) @cond.wait end diff --git a/lib/ruby/stdlib/drb/gw.rb b/lib/ruby/stdlib/drb/gw.rb index b3568ab08d6..d0005076445 100644 --- a/lib/ruby/stdlib/drb/gw.rb +++ b/lib/ruby/stdlib/drb/gw.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'drb/drb' require 'monitor' diff --git a/lib/ruby/stdlib/drb/invokemethod.rb b/lib/ruby/stdlib/drb/invokemethod.rb index 71ebec11f61..0fae6d52b6a 100644 --- a/lib/ruby/stdlib/drb/invokemethod.rb +++ b/lib/ruby/stdlib/drb/invokemethod.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # for ruby-1.8.0 module DRb # :nodoc: all diff --git a/lib/ruby/stdlib/drb/observer.rb b/lib/ruby/stdlib/drb/observer.rb index cab9ebc60b0..3ee15331a1f 100644 --- a/lib/ruby/stdlib/drb/observer.rb +++ b/lib/ruby/stdlib/drb/observer.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'observer' module DRb diff --git a/lib/ruby/stdlib/drb/ssl.rb b/lib/ruby/stdlib/drb/ssl.rb index efd8271a781..8d2724e736e 100644 --- a/lib/ruby/stdlib/drb/ssl.rb +++ b/lib/ruby/stdlib/drb/ssl.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'socket' require 'openssl' require 'drb/drb' diff --git a/lib/ruby/stdlib/drb/timeridconv.rb b/lib/ruby/stdlib/drb/timeridconv.rb index 4ea3035f39e..e83eb727657 100644 --- a/lib/ruby/stdlib/drb/timeridconv.rb +++ b/lib/ruby/stdlib/drb/timeridconv.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'drb/drb' require 'monitor' diff --git a/lib/ruby/stdlib/drb/unix.rb b/lib/ruby/stdlib/drb/unix.rb index 3fb8d0ecceb..adacf6df5b7 100644 --- a/lib/ruby/stdlib/drb/unix.rb +++ b/lib/ruby/stdlib/drb/unix.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'socket' require 'drb/drb' require 'tmpdir' @@ -108,7 +109,7 @@ def accept end def set_sockopt(soc) - soc.fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC) if defined? Fcntl::FD_CLOEXEC + # no-op for now end end diff --git a/lib/ruby/stdlib/e2mmap.rb b/lib/ruby/stdlib/e2mmap.rb index 1eb5b51678e..a9990b5ec56 100644 --- a/lib/ruby/stdlib/e2mmap.rb +++ b/lib/ruby/stdlib/e2mmap.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # #-- # e2mmap.rb - for Ruby 1.1 diff --git a/lib/ruby/stdlib/erb.rb b/lib/ruby/stdlib/erb.rb index 25654d62c57..73fc574314e 100644 --- a/lib/ruby/stdlib/erb.rb +++ b/lib/ruby/stdlib/erb.rb @@ -1,4 +1,5 @@ # -*- coding: us-ascii -*- +# frozen_string_literal: false # = ERB -- Ruby Templating # # Author:: Masatoshi SEKI @@ -506,8 +507,8 @@ def scan require 'strscan' class SimpleScanner2 < Scanner # :nodoc: def scan - stag_reg = /(.*?)(<%%|<%=|<%#|<%|\z)/m - etag_reg = /(.*?)(%%>|%>|\z)/m + stag_reg = /(.*?)(<%[%=#]?|\z)/m + etag_reg = /(.*?)(%%?>|\z)/m scanner = StringScanner.new(@src) while ! scanner.eos? scanner.scan(@stag ? etag_reg : stag_reg) diff --git a/lib/ruby/stdlib/expect.rb b/lib/ruby/stdlib/expect.rb index c3f3925be7d..122562127d2 100644 --- a/lib/ruby/stdlib/expect.rb +++ b/lib/ruby/stdlib/expect.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false $expect_verbose = false # Expect library adds the IO instance method #expect, which does similar act to diff --git a/lib/ruby/stdlib/fiddle.rb b/lib/ruby/stdlib/fiddle.rb index 981e45428b7..1f314d06e69 100644 --- a/lib/ruby/stdlib/fiddle.rb +++ b/lib/ruby/stdlib/fiddle.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'fiddle.so' unless RUBY_ENGINE == 'jruby' require 'fiddle/jruby' if RUBY_ENGINE == 'jruby' require 'fiddle/function' diff --git a/lib/ruby/stdlib/fiddle/closure.rb b/lib/ruby/stdlib/fiddle/closure.rb index beb90ecbe5d..0b9adbb60a8 100644 --- a/lib/ruby/stdlib/fiddle/closure.rb +++ b/lib/ruby/stdlib/fiddle/closure.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false module Fiddle class Closure diff --git a/lib/ruby/stdlib/fiddle/cparser.rb b/lib/ruby/stdlib/fiddle/cparser.rb index 43fb184a121..6b9da9fa7c8 100644 --- a/lib/ruby/stdlib/fiddle/cparser.rb +++ b/lib/ruby/stdlib/fiddle/cparser.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false module Fiddle # A mixin that provides methods for parsing C struct and prototype signatures. # @@ -7,8 +8,14 @@ module Fiddle # include Fiddle::CParser # #=> Object # - # parse_ctype('int increment(int)') - # #=> ["increment", Fiddle::TYPE_INT, [Fiddle::TYPE_INT]] + # parse_ctype('int') + # #=> Fiddle::TYPE_INT + # + # parse_struct_signature(['int i', 'char c']) + # #=> [[Fiddle::TYPE_INT, Fiddle::TYPE_CHAR], ["i", "c"]] + # + # parse_signature('double sum(double, double)') + # #=> ["sum", Fiddle::TYPE_DOUBLE, [Fiddle::TYPE_DOUBLE, Fiddle::TYPE_DOUBLE]] # module CParser # Parses a C struct's members @@ -21,37 +28,33 @@ module CParser # parse_struct_signature(['int i', 'char c']) # #=> [[Fiddle::TYPE_INT, Fiddle::TYPE_CHAR], ["i", "c"]] # + # parse_struct_signature(['char buffer[80]']) + # #=> [[[Fiddle::TYPE_CHAR, 80]], ["buffer"]] + # def parse_struct_signature(signature, tymap=nil) - if( signature.is_a?(String) ) - signature = signature.split(/\s*,\s*/) + if signature.is_a?(String) + signature = split_arguments(signature, /[,;]/) end mems = [] tys = [] signature.each{|msig| - tks = msig.split(/\s+(\*)?/) - ty = tks[0..-2].join(" ") - member = tks[-1] - - case ty - when /\[(\d+)\]/ - n = $1.to_i - ty.gsub!(/\s*\[\d+\]/,"") - ty = [ty, n] - when /\[\]/ - ty.gsub!(/\s*\[\]/, "*") - end - - case member - when /\[(\d+)\]/ - ty = [ty, $1.to_i] - member.gsub!(/\s*\[\d+\]/,"") - when /\[\]/ - ty = ty + "*" - member.gsub!(/\s*\[\]/, "") + msig = compact(msig) + case msig + when /^[\w\*\s]+[\*\s](\w+)$/ + mems.push($1) + tys.push(parse_ctype(msig, tymap)) + when /^[\w\*\s]+\(\*(\w+)\)\(.*?\)$/ + mems.push($1) + tys.push(parse_ctype(msig, tymap)) + when /^([\w\*\s]+[\*\s])(\w+)\[(\d+)\]$/ + mems.push($2) + tys.push([parse_ctype($1.strip, tymap), $3.to_i]) + when /^([\w\*\s]+)\[(\d+)\](\w+)$/ + mems.push($3) + tys.push([parse_ctype($1.strip, tymap), $2.to_i]) + else + raise(RuntimeError,"can't parse the struct member: #{msig}") end - - mems.push(member) - tys.push(parse_ctype(ty,tymap)) } return tys, mems end @@ -70,22 +73,21 @@ def parse_struct_signature(signature, tymap=nil) # parse_signature('double sum(double, double)') # #=> ["sum", Fiddle::TYPE_DOUBLE, [Fiddle::TYPE_DOUBLE, Fiddle::TYPE_DOUBLE]] # + # parse_signature('void update(void (*cb)(int code))') + # #=> ["update", Fiddle::TYPE_VOID, [Fiddle::TYPE_VOIDP]] + # + # parse_signature('char (*getbuffer(void))[80]') + # #=> ["getbuffer", Fiddle::TYPE_VOIDP, []] + # def parse_signature(signature, tymap=nil) tymap ||= {} - signature = signature.gsub(/\s+/, " ").strip - case signature - when /^([\w@\*\s]+)\(([\w\*\s\,\[\]]*)\)$/ - ret = $1 - (args = $2).strip! - ret = ret.split(/\s+/) - args = args.split(/\s*,\s*/) - func = ret.pop - if( func =~ /^\*/ ) - func.gsub!(/^\*+/,"") - ret.push("*") - end - ret = ret.join(" ") - return [func, parse_ctype(ret, tymap), args.collect{|arg| parse_ctype(arg, tymap)}] + case compact(signature) + when /^(?:[\w\*\s]+)\(\*(\w+)\((.*?)\)\)(?:\[\w*\]|\(.*?\));?$/ + func, args = $1, $2 + return [func, TYPE_VOIDP, split_arguments(args).collect {|arg| parse_ctype(arg, tymap)}] + when /^([\w\*\s]+[\*\s])(\w+)\((.*?)\);?$/ + ret, func, args = $1.strip, $2, $3 + return [func, parse_ctype(ret, tymap), split_arguments(args).collect {|arg| parse_ctype(arg, tymap)}] else raise(RuntimeError,"can't parse the function prototype: #{signature}") end @@ -107,64 +109,68 @@ def parse_signature(signature, tymap=nil) # parse_ctype('int') # #=> Fiddle::TYPE_INT # - # parse_ctype('double') + # parse_ctype('double diff') # #=> Fiddle::TYPE_DOUBLE # - # parse_ctype('unsigned char') + # parse_ctype('unsigned char byte') # #=> -Fiddle::TYPE_CHAR # + # parse_ctype('const char* const argv[]') + # #=> -Fiddle::TYPE_VOIDP + # def parse_ctype(ty, tymap=nil) tymap ||= {} case ty when Array return [parse_ctype(ty[0], tymap), ty[1]] - when "void" + when 'void' return TYPE_VOID - when "char" - return TYPE_CHAR - when "unsigned char" - return -TYPE_CHAR - when "short" - return TYPE_SHORT - when "unsigned short" - return -TYPE_SHORT - when "int" - return TYPE_INT - when "unsigned int", 'uint' - return -TYPE_INT - when "long" - return TYPE_LONG - when "unsigned long" - return -TYPE_LONG - when "long long" + when /^(?:(?:signed\s+)?long\s+long(?:\s+int\s+)?|int64_t)(?:\s+\w+)?$/ if( defined?(TYPE_LONG_LONG) ) return TYPE_LONG_LONG else raise(RuntimeError, "unsupported type: #{ty}") end - when "unsigned long long" + when /^(?:unsigned\s+long\s+long(?:\s+int\s+)?|uint64_t)(?:\s+\w+)?$/ if( defined?(TYPE_LONG_LONG) ) return -TYPE_LONG_LONG else raise(RuntimeError, "unsupported type: #{ty}") end - when "float" + when /^(?:signed\s+)?long(?:\s+int\s+)?(?:\s+\w+)?$/ + return TYPE_LONG + when /^unsigned\s+long(?:\s+int\s+)?(?:\s+\w+)?$/ + return -TYPE_LONG + when /^(?:signed\s+)?int(?:\s+\w+)?$/ + return TYPE_INT + when /^(?:unsigned\s+int|uint)(?:\s+\w+)?$/ + return -TYPE_INT + when /^(?:signed\s+)?short(?:\s+int\s+)?(?:\s+\w+)?$/ + return TYPE_SHORT + when /^unsigned\s+short(?:\s+int\s+)?(?:\s+\w+)?$/ + return -TYPE_SHORT + when /^(?:signed\s+)?char(?:\s+\w+)?$/ + return TYPE_CHAR + when /^unsigned\s+char(?:\s+\w+)?$/ + return -TYPE_CHAR + when /^float(?:\s+\w+)?$/ return TYPE_FLOAT - when "double" + when /^double(?:\s+\w+)?$/ return TYPE_DOUBLE - when "size_t" + when /^size_t(?:\s+\w+)?$/ return TYPE_SIZE_T - when "ssize_t" + when /^ssize_t(?:\s+\w+)?$/ return TYPE_SSIZE_T - when "ptrdiff_t" + when /^ptrdiff_t(?:\s+\w+)?$/ return TYPE_PTRDIFF_T - when "intptr_t" + when /^intptr_t(?:\s+\w+)?$/ return TYPE_INTPTR_T - when "uintptr_t" + when /^uintptr_t(?:\s+\w+)?$/ return TYPE_UINTPTR_T - when /\*/, /\[\s*\]/ + when /\*/, /\[[\s\d]*\]/ return TYPE_VOIDP else + ty = ty.split(' ', 2)[0] if( tymap[ty] ) return parse_ctype(tymap[ty], tymap) else @@ -172,5 +178,17 @@ def parse_ctype(ty, tymap=nil) end end end + + private + + def split_arguments(arguments, sep=',') + return [] if arguments.strip == 'void' + arguments.scan(/([\w\*\s]+\(\*\w*\)\(.*?\)|[\w\*\s\[\]]+)(?:#{sep}\s*|$)/).collect {|m| m[0]} + end + + def compact(signature) + signature.gsub(/\s+/, ' ').gsub(/\s*([\(\)\[\]\*,;])\s*/, '\1').strip + end + end end diff --git a/lib/ruby/stdlib/fiddle/function.rb b/lib/ruby/stdlib/fiddle/function.rb index ab7496e944c..fcd90dfd26a 100644 --- a/lib/ruby/stdlib/fiddle/function.rb +++ b/lib/ruby/stdlib/fiddle/function.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false module Fiddle class Function # The ABI of the Function. diff --git a/lib/ruby/stdlib/fiddle/import.rb b/lib/ruby/stdlib/fiddle/import.rb index 34f5d7f81c7..7f959ed20b3 100644 --- a/lib/ruby/stdlib/fiddle/import.rb +++ b/lib/ruby/stdlib/fiddle/import.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'fiddle' require 'fiddle/struct' require 'fiddle/cparser' diff --git a/lib/ruby/stdlib/fiddle/pack.rb b/lib/ruby/stdlib/fiddle/pack.rb index e4e9542cc0a..63010684505 100644 --- a/lib/ruby/stdlib/fiddle/pack.rb +++ b/lib/ruby/stdlib/fiddle/pack.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'fiddle' module Fiddle diff --git a/lib/ruby/stdlib/fiddle/struct.rb b/lib/ruby/stdlib/fiddle/struct.rb index 695a4d22471..233a9872697 100644 --- a/lib/ruby/stdlib/fiddle/struct.rb +++ b/lib/ruby/stdlib/fiddle/struct.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'fiddle' require 'fiddle/value' require 'fiddle/pack' diff --git a/lib/ruby/stdlib/fiddle/types.rb b/lib/ruby/stdlib/fiddle/types.rb index 02c1d25a37c..8a72635a698 100644 --- a/lib/ruby/stdlib/fiddle/types.rb +++ b/lib/ruby/stdlib/fiddle/types.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false module Fiddle # Adds Windows type aliases to the including class for use with # Fiddle::Importer. diff --git a/lib/ruby/stdlib/fiddle/value.rb b/lib/ruby/stdlib/fiddle/value.rb index 8d71e47ce60..ac318cf2c44 100644 --- a/lib/ruby/stdlib/fiddle/value.rb +++ b/lib/ruby/stdlib/fiddle/value.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'fiddle' module Fiddle diff --git a/lib/ruby/stdlib/fileutils.rb b/lib/ruby/stdlib/fileutils.rb index 7aff9465765..3c350a5ca2e 100644 --- a/lib/ruby/stdlib/fileutils.rb +++ b/lib/ruby/stdlib/fileutils.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # = fileutils.rb # @@ -156,10 +157,10 @@ def uptodate?(new, old_list) end module_function :uptodate? - def remove_tailing_slash(dir) + def remove_trailing_slash(dir) dir == '/' ? dir : dir.chomp(?/) end - private_module_function :remove_tailing_slash + private_module_function :remove_trailing_slash # # Options: mode noop verbose @@ -207,7 +208,7 @@ def mkdir_p(list, options = {}) fu_output_message "mkdir -p #{options[:mode] ? ('-m %03o ' % options[:mode]) : ''}#{list.join ' '}" if options[:verbose] return *list if options[:noop] - list.map {|path| remove_tailing_slash(path)}.each do |path| + list.map {|path| remove_trailing_slash(path)}.each do |path| # optimize for the most common case begin fu_mkdir path, options[:mode] @@ -244,7 +245,7 @@ def mkdir_p(list, options = {}) OPT_TABLE['makedirs'] = [:mode, :noop, :verbose] def fu_mkdir(path, mode) #:nodoc: - path = remove_tailing_slash(path) + path = remove_trailing_slash(path) if mode Dir.mkdir path, mode File.chmod mode, path @@ -272,7 +273,7 @@ def rmdir(list, options = {}) return if options[:noop] list.each do |dir| begin - Dir.rmdir(dir = remove_tailing_slash(dir)) + Dir.rmdir(dir = remove_trailing_slash(dir)) if parents until (parent = File.dirname(dir)) == '.' or parent == dir dir = parent @@ -556,7 +557,7 @@ def mv(src, dest, options = {}) OPT_TABLE['move'] = [:force, :noop, :verbose, :secure] def rename_cannot_overwrite_file? #:nodoc: - /cygwin|mswin|mingw|bccwin|emx/ =~ RUBY_PLATFORM + /emx/ =~ RUBY_PLATFORM end private_module_function :rename_cannot_overwrite_file? @@ -726,14 +727,15 @@ def remove_entry_secure(path, force = false) end # freeze tree root euid = Process.euid - File.open(fullpath + '/.') {|f| - unless fu_stat_identical_entry?(st, f.stat) + dot_file = fullpath + "/." + File.lstat(dot_file).tap {|fstat| + unless fu_stat_identical_entry?(st, fstat) # symlink (TOC-to-TOU attack?) File.unlink fullpath return end - f.chown euid, -1 - f.chmod 0700 + File.chown euid, -1, dot_file + File.chmod 0700, dot_file unless fu_stat_identical_entry?(st, File.lstat(fullpath)) # TOC-to-TOU attack? File.unlink fullpath diff --git a/lib/ruby/stdlib/find.rb b/lib/ruby/stdlib/find.rb index 55783a56950..aa7a3c082b3 100644 --- a/lib/ruby/stdlib/find.rb +++ b/lib/ruby/stdlib/find.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # find.rb: the Find module for processing all files under a given directory. # diff --git a/lib/ruby/stdlib/forwardable.rb b/lib/ruby/stdlib/forwardable.rb index ecc5f03843d..cd15eeab0c5 100644 --- a/lib/ruby/stdlib/forwardable.rb +++ b/lib/ruby/stdlib/forwardable.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # forwardable.rb - # $Release Version: 1.1$ @@ -181,8 +182,8 @@ def def_instance_delegator(accessor, method, ali = method) def #{ali}(*args, &block) begin #{accessor}.__send__(:#{method}, *args, &block) - rescue Exception - $@.delete_if{|s| Forwardable::FILE_REGEXP =~ s} unless Forwardable::debug + rescue ::Exception + $@.delete_if{|s| ::Forwardable::FILE_REGEXP =~ s} unless ::Forwardable::debug ::Kernel::raise end end @@ -273,8 +274,8 @@ def def_single_delegator(accessor, method, ali = method) def #{ali}(*args, &block) begin #{accessor}.__send__(:#{method}, *args, &block) - rescue Exception - $@.delete_if{|s| Forwardable::FILE_REGEXP =~ s} unless Forwardable::debug + rescue ::Exception + $@.delete_if{|s| ::Forwardable::FILE_REGEXP =~ s} unless ::Forwardable::debug ::Kernel::raise end end diff --git a/lib/ruby/stdlib/getoptlong.rb b/lib/ruby/stdlib/getoptlong.rb index cf635f04389..8aa91b82e0b 100644 --- a/lib/ruby/stdlib/getoptlong.rb +++ b/lib/ruby/stdlib/getoptlong.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # GetoptLong for Ruby # @@ -574,7 +575,7 @@ def get else # # This is a non-option argument. - # Only RETURN_IN_ORDER falled into here. + # Only RETURN_IN_ORDER fell into here. # return '', argument end diff --git a/lib/ruby/stdlib/ipaddr.rb b/lib/ruby/stdlib/ipaddr.rb index 4b5f784ae01..64d2a8162d5 100644 --- a/lib/ruby/stdlib/ipaddr.rb +++ b/lib/ruby/stdlib/ipaddr.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # ipaddr.rb - A class to manipulate an IP address # @@ -410,7 +411,7 @@ def set(addr, *family) # Set current netmask to given mask. def mask!(mask) if mask.kind_of?(String) - if mask =~ /^\d+$/ + if mask =~ /\A\d+\z/ prefixlen = mask.to_i else m = IPAddr.new(mask) @@ -478,7 +479,7 @@ def initialize(addr = '::', family = Socket::AF_UNSPEC) end end prefix, prefixlen = addr.split('/') - if prefix =~ /^\[(.*)\]$/i + if prefix =~ /\A\[(.*)\]\z/i prefix = $1 family = Socket::AF_INET6 end diff --git a/lib/ruby/stdlib/irb.rb b/lib/ruby/stdlib/irb.rb index 09556c8bc50..45f328008c7 100644 --- a/lib/ruby/stdlib/irb.rb +++ b/lib/ruby/stdlib/irb.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # irb.rb - irb main module # $Release Version: 0.9.6 $ @@ -18,8 +19,6 @@ require "irb/input-method" require "irb/locale" -STDOUT.sync = true - # IRB stands for "interactive Ruby" and is a tool to interactively execute Ruby # expressions read from the standard input. # @@ -158,7 +157,7 @@ # %M # inspect of main object (self) # %l # type of string(", ', /, ]), `]' is inner %w[...] # %NNi # indent level. NN is digits and means as same as printf("%NNd"). -# # It can be ommited +# # It can be omitted # %NNn # line number. # %% # % # @@ -330,7 +329,7 @@ # irb.3():003:0> bar #=> bar => nil # # kill jobs 1, 2, and 3 # irb.3():004:0> kill 1, 2, 3 -# # list open sesssions, should only include main session +# # list open sessions, should only include main session # irb(main):009:0> jobs # #0->irb on main (# : running) # # quit irb @@ -345,7 +344,7 @@ class Abort < Exception;end # Displays current configuration. # - # Modifing the configuration is achieved by sending a message to IRB.conf. + # Modifying the configuration is achieved by sending a message to IRB.conf. # # See IRB@Configuration for more information. def IRB.conf @@ -373,6 +372,7 @@ def IRB.CurrentContext # Initializes IRB and creates a new Irb.irb object at the +TOPLEVEL_BINDING+ def IRB.start(ap_path = nil) + STDOUT.sync = true $0 = File::basename(ap_path, ".rb") if ap_path IRB.setup(ap_path) diff --git a/lib/ruby/stdlib/irb/cmd/chws.rb b/lib/ruby/stdlib/irb/cmd/chws.rb index 8c0260627e4..606e0c52a97 100644 --- a/lib/ruby/stdlib/irb/cmd/chws.rb +++ b/lib/ruby/stdlib/irb/cmd/chws.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # change-ws.rb - # $Release Version: 0.9.6$ diff --git a/lib/ruby/stdlib/irb/cmd/fork.rb b/lib/ruby/stdlib/irb/cmd/fork.rb index 1e02edac638..552c3962f61 100644 --- a/lib/ruby/stdlib/irb/cmd/fork.rb +++ b/lib/ruby/stdlib/irb/cmd/fork.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # fork.rb - # $Release Version: 0.9.6 $ diff --git a/lib/ruby/stdlib/irb/cmd/help.rb b/lib/ruby/stdlib/irb/cmd/help.rb index 76e299fc20f..7a09c396e11 100644 --- a/lib/ruby/stdlib/irb/cmd/help.rb +++ b/lib/ruby/stdlib/irb/cmd/help.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # help.rb - helper using ri # $Release Version: 0.9.6$ diff --git a/lib/ruby/stdlib/irb/cmd/load.rb b/lib/ruby/stdlib/irb/cmd/load.rb index acda9d0c8c8..e3b84dad79c 100644 --- a/lib/ruby/stdlib/irb/cmd/load.rb +++ b/lib/ruby/stdlib/irb/cmd/load.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # load.rb - # $Release Version: 0.9.6$ diff --git a/lib/ruby/stdlib/irb/cmd/nop.rb b/lib/ruby/stdlib/irb/cmd/nop.rb index 60379f016a4..9cf4337c286 100644 --- a/lib/ruby/stdlib/irb/cmd/nop.rb +++ b/lib/ruby/stdlib/irb/cmd/nop.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # nop.rb - # $Release Version: 0.9.6$ diff --git a/lib/ruby/stdlib/irb/cmd/pushws.rb b/lib/ruby/stdlib/irb/cmd/pushws.rb index 0726a4377e5..aa14430ce4c 100644 --- a/lib/ruby/stdlib/irb/cmd/pushws.rb +++ b/lib/ruby/stdlib/irb/cmd/pushws.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # change-ws.rb - # $Release Version: 0.9.6$ diff --git a/lib/ruby/stdlib/irb/cmd/subirb.rb b/lib/ruby/stdlib/irb/cmd/subirb.rb index ccf4fc4bcd4..f29548b88fd 100644 --- a/lib/ruby/stdlib/irb/cmd/subirb.rb +++ b/lib/ruby/stdlib/irb/cmd/subirb.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # multi.rb - # $Release Version: 0.9.6$ # $Revision$ diff --git a/lib/ruby/stdlib/irb/completion.rb b/lib/ruby/stdlib/irb/completion.rb index b6259561f83..3656e3f944a 100644 --- a/lib/ruby/stdlib/irb/completion.rb +++ b/lib/ruby/stdlib/irb/completion.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # irb/completor.rb - # $Release Version: 0.9$ diff --git a/lib/ruby/stdlib/irb/context.rb b/lib/ruby/stdlib/irb/context.rb index 9cf9600f021..4cf61289307 100644 --- a/lib/ruby/stdlib/irb/context.rb +++ b/lib/ruby/stdlib/irb/context.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # irb/context.rb - irb context # $Release Version: 0.9.6$ diff --git a/lib/ruby/stdlib/irb/ext/change-ws.rb b/lib/ruby/stdlib/irb/ext/change-ws.rb index 0ae9097285a..94bfe62bc00 100644 --- a/lib/ruby/stdlib/irb/ext/change-ws.rb +++ b/lib/ruby/stdlib/irb/ext/change-ws.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # irb/ext/cb.rb - # $Release Version: 0.9.6$ diff --git a/lib/ruby/stdlib/irb/ext/history.rb b/lib/ruby/stdlib/irb/ext/history.rb index d8378753f2e..62363b13f43 100644 --- a/lib/ruby/stdlib/irb/ext/history.rb +++ b/lib/ruby/stdlib/irb/ext/history.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # history.rb - # $Release Version: 0.9.6$ diff --git a/lib/ruby/stdlib/irb/ext/loader.rb b/lib/ruby/stdlib/irb/ext/loader.rb index 821538cd447..840226db30d 100644 --- a/lib/ruby/stdlib/irb/ext/loader.rb +++ b/lib/ruby/stdlib/irb/ext/loader.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # loader.rb - # $Release Version: 0.9.6$ diff --git a/lib/ruby/stdlib/irb/ext/math-mode.rb b/lib/ruby/stdlib/irb/ext/math-mode.rb index 01bd24a1574..e409dbdc6a8 100644 --- a/lib/ruby/stdlib/irb/ext/math-mode.rb +++ b/lib/ruby/stdlib/irb/ext/math-mode.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # math-mode.rb - # $Release Version: 0.9.6$ diff --git a/lib/ruby/stdlib/irb/ext/multi-irb.rb b/lib/ruby/stdlib/irb/ext/multi-irb.rb index 52f6fda733d..982a319611f 100644 --- a/lib/ruby/stdlib/irb/ext/multi-irb.rb +++ b/lib/ruby/stdlib/irb/ext/multi-irb.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # irb/multi-irb.rb - multiple irb module # $Release Version: 0.9.6$ diff --git a/lib/ruby/stdlib/irb/ext/save-history.rb b/lib/ruby/stdlib/irb/ext/save-history.rb index 4477d18e1a6..236f00fb930 100644 --- a/lib/ruby/stdlib/irb/ext/save-history.rb +++ b/lib/ruby/stdlib/irb/ext/save-history.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # save-history.rb - # $Release Version: 0.9.6$ # $Revision$ diff --git a/lib/ruby/stdlib/irb/ext/tracer.rb b/lib/ruby/stdlib/irb/ext/tracer.rb index c145cf5b4f5..200f77e3412 100644 --- a/lib/ruby/stdlib/irb/ext/tracer.rb +++ b/lib/ruby/stdlib/irb/ext/tracer.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # irb/lib/tracer.rb - # $Release Version: 0.9.6$ diff --git a/lib/ruby/stdlib/irb/ext/use-loader.rb b/lib/ruby/stdlib/irb/ext/use-loader.rb index 99e76b722f7..571dd25d17a 100644 --- a/lib/ruby/stdlib/irb/ext/use-loader.rb +++ b/lib/ruby/stdlib/irb/ext/use-loader.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # use-loader.rb - # $Release Version: 0.9.6$ diff --git a/lib/ruby/stdlib/irb/ext/workspaces.rb b/lib/ruby/stdlib/irb/ext/workspaces.rb index 4237037271f..5bd72c194f1 100644 --- a/lib/ruby/stdlib/irb/ext/workspaces.rb +++ b/lib/ruby/stdlib/irb/ext/workspaces.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # push-ws.rb - # $Release Version: 0.9.6$ diff --git a/lib/ruby/stdlib/irb/extend-command.rb b/lib/ruby/stdlib/irb/extend-command.rb index a9326272ffb..6f15e6403a4 100644 --- a/lib/ruby/stdlib/irb/extend-command.rb +++ b/lib/ruby/stdlib/irb/extend-command.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # irb/extend-command.rb - irb extend command # $Release Version: 0.9.6$ diff --git a/lib/ruby/stdlib/irb/frame.rb b/lib/ruby/stdlib/irb/frame.rb index 64dd63dddf9..60738092491 100644 --- a/lib/ruby/stdlib/irb/frame.rb +++ b/lib/ruby/stdlib/irb/frame.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # frame.rb - # $Release Version: 0.9$ diff --git a/lib/ruby/stdlib/irb/help.rb b/lib/ruby/stdlib/irb/help.rb index b9ebfb1ae57..a4264ab4abb 100644 --- a/lib/ruby/stdlib/irb/help.rb +++ b/lib/ruby/stdlib/irb/help.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # irb/help.rb - print usage module # $Release Version: 0.9.6$ diff --git a/lib/ruby/stdlib/irb/init.rb b/lib/ruby/stdlib/irb/init.rb index af9c363a977..1184db15ea7 100644 --- a/lib/ruby/stdlib/irb/init.rb +++ b/lib/ruby/stdlib/irb/init.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # irb/init.rb - irb initialize module # $Release Version: 0.9.6$ diff --git a/lib/ruby/stdlib/irb/input-method.rb b/lib/ruby/stdlib/irb/input-method.rb index 4ea3f585f8f..f7b1aac3bf3 100644 --- a/lib/ruby/stdlib/irb/input-method.rb +++ b/lib/ruby/stdlib/irb/input-method.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # irb/input-method.rb - input methods used irb # $Release Version: 0.9.6$ diff --git a/lib/ruby/stdlib/irb/inspector.rb b/lib/ruby/stdlib/irb/inspector.rb index f09b12927af..f6f76712b81 100644 --- a/lib/ruby/stdlib/irb/inspector.rb +++ b/lib/ruby/stdlib/irb/inspector.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # irb/inspector.rb - inspect methods # $Release Version: 0.9.6$ diff --git a/lib/ruby/stdlib/irb/lc/error.rb b/lib/ruby/stdlib/irb/lc/error.rb index c0c6c30d79d..6623f82d847 100644 --- a/lib/ruby/stdlib/irb/lc/error.rb +++ b/lib/ruby/stdlib/irb/lc/error.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # irb/lc/error.rb - # $Release Version: 0.9.6$ diff --git a/lib/ruby/stdlib/irb/lc/ja/encoding_aliases.rb b/lib/ruby/stdlib/irb/lc/ja/encoding_aliases.rb index 5bef32e20e6..c534bf0feff 100644 --- a/lib/ruby/stdlib/irb/lc/ja/encoding_aliases.rb +++ b/lib/ruby/stdlib/irb/lc/ja/encoding_aliases.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # :stopdoc: module IRB class Locale diff --git a/lib/ruby/stdlib/irb/lc/ja/error.rb b/lib/ruby/stdlib/irb/lc/ja/error.rb index 4f09d781cbe..919363154c0 100644 --- a/lib/ruby/stdlib/irb/lc/ja/error.rb +++ b/lib/ruby/stdlib/irb/lc/ja/error.rb @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- +# frozen_string_literal: false # irb/lc/ja/error.rb - # $Release Version: 0.9.6$ # $Revision$ diff --git a/lib/ruby/stdlib/irb/locale.rb b/lib/ruby/stdlib/irb/locale.rb index 9f40188171a..df540c8cbb1 100644 --- a/lib/ruby/stdlib/irb/locale.rb +++ b/lib/ruby/stdlib/irb/locale.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # irb/locale.rb - internationalization module # $Release Version: 0.9.6$ diff --git a/lib/ruby/stdlib/irb/magic-file.rb b/lib/ruby/stdlib/irb/magic-file.rb index 160681cd6d4..4178e674bc8 100644 --- a/lib/ruby/stdlib/irb/magic-file.rb +++ b/lib/ruby/stdlib/irb/magic-file.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false module IRB class << (MagicFile = Object.new) # see parser_magic_comment in parse.y diff --git a/lib/ruby/stdlib/irb/notifier.rb b/lib/ruby/stdlib/irb/notifier.rb index d5981df2bf4..9d8de82e695 100644 --- a/lib/ruby/stdlib/irb/notifier.rb +++ b/lib/ruby/stdlib/irb/notifier.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # notifier.rb - output methods used by irb # $Release Version: 0.9.6$ diff --git a/lib/ruby/stdlib/irb/output-method.rb b/lib/ruby/stdlib/irb/output-method.rb index e0ba25f3e41..7d648516987 100644 --- a/lib/ruby/stdlib/irb/output-method.rb +++ b/lib/ruby/stdlib/irb/output-method.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # output-method.rb - output methods used by irb # $Release Version: 0.9.6$ diff --git a/lib/ruby/stdlib/irb/ruby-lex.rb b/lib/ruby/stdlib/irb/ruby-lex.rb index 7189307e0ac..879c45c565e 100644 --- a/lib/ruby/stdlib/irb/ruby-lex.rb +++ b/lib/ruby/stdlib/irb/ruby-lex.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # irb/ruby-lex.rb - ruby lexcal analyzer # $Release Version: 0.9.6$ @@ -405,7 +406,7 @@ def lex_init() if @lex_state != EXPR_END && @lex_state != EXPR_CLASS && (@lex_state != EXPR_ARG || @space_seen) c = peek(0) - if /\S/ =~ c && (/["'`]/ =~ c || /\w/ =~ c || c == "-") + if /\S/ =~ c && (/["'`]/ =~ c || /\w/ =~ c || c == "-" || c == "~") tk = identify_here_document end end @@ -854,7 +855,7 @@ def identify_identifier def identify_here_document ch = getc - if ch == "-" + if ch == "-" || ch == "~" ch = getc indent = true end diff --git a/lib/ruby/stdlib/irb/ruby-token.rb b/lib/ruby/stdlib/irb/ruby-token.rb index a80d81c9a55..af53d3c93b6 100644 --- a/lib/ruby/stdlib/irb/ruby-token.rb +++ b/lib/ruby/stdlib/irb/ruby-token.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # irb/ruby-token.rb - ruby tokens # $Release Version: 0.9.6$ diff --git a/lib/ruby/stdlib/irb/slex.rb b/lib/ruby/stdlib/irb/slex.rb index f6c2bd92f55..68174771a70 100644 --- a/lib/ruby/stdlib/irb/slex.rb +++ b/lib/ruby/stdlib/irb/slex.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # irb/slex.rb - simple lex analyzer # $Release Version: 0.9.6$ diff --git a/lib/ruby/stdlib/irb/src_encoding.rb b/lib/ruby/stdlib/irb/src_encoding.rb index 958cef104c6..32f997fc7c7 100644 --- a/lib/ruby/stdlib/irb/src_encoding.rb +++ b/lib/ruby/stdlib/irb/src_encoding.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # DO NOT WRITE ANY MAGIC COMMENT HERE. def default_src_encoding return __ENCODING__ diff --git a/lib/ruby/stdlib/irb/version.rb b/lib/ruby/stdlib/irb/version.rb index bb998db3dd2..094cb33c05e 100644 --- a/lib/ruby/stdlib/irb/version.rb +++ b/lib/ruby/stdlib/irb/version.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # irb/version.rb - irb version definition file # $Release Version: 0.9.6$ diff --git a/lib/ruby/stdlib/irb/workspace.rb b/lib/ruby/stdlib/irb/workspace.rb index e05c3bbc96d..ac3e369430f 100644 --- a/lib/ruby/stdlib/irb/workspace.rb +++ b/lib/ruby/stdlib/irb/workspace.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # irb/workspace-binding.rb - # $Release Version: 0.9.6$ diff --git a/lib/ruby/stdlib/irb/ws-for-case-2.rb b/lib/ruby/stdlib/irb/ws-for-case-2.rb index 9f3af49f30a..eb173fddca4 100644 --- a/lib/ruby/stdlib/irb/ws-for-case-2.rb +++ b/lib/ruby/stdlib/irb/ws-for-case-2.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # irb/ws-for-case-2.rb - # $Release Version: 0.9.6$ diff --git a/lib/ruby/stdlib/irb/xmp.rb b/lib/ruby/stdlib/irb/xmp.rb index 449f04328ba..3234cff7f3f 100644 --- a/lib/ruby/stdlib/irb/xmp.rb +++ b/lib/ruby/stdlib/irb/xmp.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # xmp.rb - irb version of gotoken xmp # $Release Version: 0.9$ diff --git a/lib/ruby/stdlib/kconv.rb b/lib/ruby/stdlib/kconv.rb index f8c1ae8f595..f52b755288b 100644 --- a/lib/ruby/stdlib/kconv.rb +++ b/lib/ruby/stdlib/kconv.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # kconv.rb - Kanji Converter. # diff --git a/lib/ruby/stdlib/logger.rb b/lib/ruby/stdlib/logger.rb index 530b718cde2..2246673b097 100644 --- a/lib/ruby/stdlib/logger.rb +++ b/lib/ruby/stdlib/logger.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # logger.rb - simple logging utility # Copyright (C) 2000-2003, 2005, 2008, 2011 NAKAMURA, Hiroshi . # @@ -176,6 +177,13 @@ # # # DEBUG < INFO < WARN < ERROR < FATAL < UNKNOWN # +# 3. Symbol or String (case insensitive) +# +# logger.level = :info +# logger.level = 'INFO' +# +# # :debug < :info < :warn < :error < :fatal < :unknown +# # == Format # # Log messages are rendered in the output stream in a certain format by @@ -208,7 +216,7 @@ class Logger name = File.basename(__FILE__) end rev ||= "v#{VERSION}" - ProgName = "#{name}/#{rev}" + ProgName = "#{name}/#{rev}".freeze class Error < RuntimeError # :nodoc: end @@ -234,7 +242,34 @@ module Severity include Severity # Logging severity threshold (e.g. Logger::INFO). - attr_accessor :level + attr_reader :level + + # Set logging severity threshold. + # + # +severity+:: The Severity of the log message. + def level=(severity) + if severity.is_a?(Integer) + @level = severity + else + _severity = severity.to_s.downcase + case _severity + when 'debug'.freeze + @level = DEBUG + when 'info'.freeze + @level = INFO + when 'warn'.freeze + @level = WARN + when 'error'.freeze + @level = ERROR + when 'fatal'.freeze + @level = FATAL + when 'unknown'.freeze + @level = UNKNOWN + else + raise ArgumentError, "invalid log level: #{severity}" + end + end + end # Program name to include in log messages. attr_accessor :progname @@ -320,6 +355,26 @@ def initialize(logdev, shift_age = 0, shift_size = 1048576) end end + # + # :call-seq: + # Logger#reopen + # Logger#reopen(logdev) + # + # === Args + # + # +logdev+:: + # The log device. This is a filename (String) or IO object (typically + # +STDOUT+, +STDERR+, or an open file). + # + # === Description + # + # Reopen a log device. + # + def reopen(logdev = nil) + @logdev.reopen(logdev) + self + end + # # :call-seq: # Logger#add(severity, message = nil, progname = nil) { ... } @@ -481,7 +536,7 @@ def close private # Severity label for logging (max 5 chars). - SEV_LABEL = %w(DEBUG INFO WARN ERROR FATAL ANY) + SEV_LABEL = %w(DEBUG INFO WARN ERROR FATAL ANY).each(&:freeze).freeze def format_severity(severity) SEV_LABEL[severity] || 'ANY' @@ -494,7 +549,7 @@ def format_message(severity, datetime, progname, msg) # Default formatter for log messages. class Formatter - Format = "%s, [%s#%d] %5s -- %s: %s\n" + Format = "%s, [%s#%d] %5s -- %s: %s\n".freeze attr_accessor :datetime_format @@ -533,29 +588,31 @@ module Period def next_rotate_time(now, shift_age) case shift_age - when /^daily$/ + when 'daily' t = Time.mktime(now.year, now.month, now.mday) + SiD - when /^weekly$/ + when 'weekly' t = Time.mktime(now.year, now.month, now.mday) + SiD * (7 - now.wday) - when /^monthly$/ + when 'monthly' t = Time.mktime(now.year, now.month, 1) + SiD * 31 - mday = (1 if t.mday > 1) + return Time.mktime(t.year, t.month, 1) if t.mday > 1 else return now end - if mday or t.hour.nonzero? or t.min.nonzero? or t.sec.nonzero? - t = Time.mktime(t.year, t.month, mday || (t.mday + (t.hour > 12 ? 1 : 0))) + if t.hour.nonzero? or t.min.nonzero? or t.sec.nonzero? + hour = t.hour + t = Time.mktime(t.year, t.month, t.mday) + t += SiD if hour > 12 end t end def previous_period_end(now, shift_age) case shift_age - when /^daily$/ + when 'daily' t = Time.mktime(now.year, now.month, now.mday) - SiD / 2 - when /^weekly$/ - t = Time.mktime(now.year, now.month, now.mday) - (SiD * (now.wday + 1) + SiD / 2) - when /^monthly$/ + when 'weekly' + t = Time.mktime(now.year, now.month, now.mday) - (SiD * now.wday + SiD / 2) + when 'monthly' t = Time.mktime(now.year, now.month, 1) - SiD / 2 else return now @@ -570,20 +627,13 @@ class LogDevice attr_reader :dev attr_reader :filename - - class LogDeviceMutex - include MonitorMixin - end + include MonitorMixin def initialize(log = nil, opt = {}) @dev = @filename = @shift_age = @shift_size = nil - @mutex = LogDeviceMutex.new - if log.respond_to?(:write) and log.respond_to?(:close) - @dev = log - else - @dev = open_logfile(log) - @dev.sync = true - @filename = log + mon_initialize + set_dev(log) + if @filename @shift_age = opt[:shift_age] || 7 @shift_size = opt[:shift_size] || 1048576 @next_rotate_time = next_rotate_time(Time.now, @shift_age) unless @shift_age.is_a?(Integer) @@ -592,7 +642,7 @@ def initialize(log = nil, opt = {}) def write(message) begin - @mutex.synchronize do + synchronize do if @shift_age and @dev.respond_to?(:stat) begin check_shift_log @@ -613,7 +663,7 @@ def write(message) def close begin - @mutex.synchronize do + synchronize do @dev.close rescue nil end rescue Exception @@ -621,8 +671,33 @@ def close end end + def reopen(log = nil) + # reopen the same filename if no argument, do nothing for IO + log ||= @filename if @filename + if log + synchronize do + if @filename and @dev + @dev.close rescue nil # close only file opened by Logger + @filename = nil + end + set_dev(log) + end + end + self + end + private + def set_dev(log) + if log.respond_to?(:write) and log.respond_to?(:close) + @dev = log + else + @dev = open_logfile(log) + @dev.sync = true + @filename = log + end + end + def open_logfile(filename) begin open(filename, (File::WRONLY | File::APPEND)) diff --git a/lib/ruby/stdlib/mathn.rb b/lib/ruby/stdlib/mathn.rb index 315e5438d77..d07388bc26b 100644 --- a/lib/ruby/stdlib/mathn.rb +++ b/lib/ruby/stdlib/mathn.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false #-- # $Release Version: 0.5 $ # $Revision: 1.1.1.1.4.1 $ diff --git a/lib/ruby/stdlib/matrix.rb b/lib/ruby/stdlib/matrix.rb index fb98d09323c..fe61b6d120b 100644 --- a/lib/ruby/stdlib/matrix.rb +++ b/lib/ruby/stdlib/matrix.rb @@ -1,4 +1,5 @@ # encoding: utf-8 +# frozen_string_literal: false # # = matrix.rb # @@ -45,6 +46,7 @@ module ExceptionForMatrix # :nodoc: # * Matrix.zero(n) # * Matrix.row_vector(row) # * Matrix.column_vector(column) +# * Matrix.empty(row_count, column_count) # * Matrix.hstack(*matrices) # * Matrix.vstack(*matrices) # @@ -1700,6 +1702,7 @@ def ** (other) # * #*(x) "is matrix or number" # * #+(v) # * #-(v) +# * #/(v) # * #+@ # * #-@ # @@ -1713,6 +1716,7 @@ def ** (other) # * #norm # * #normalize # * #r +# * #round # * #size # # Conversion to other data types: @@ -1790,6 +1794,13 @@ def []=(i, v) alias set_component []= private :[]=, :set_element, :set_component + # Returns a vector with entries rounded to the given precision + # (see Float#round) + # + def round(ndigits=0) + map{|e| e.round(ndigits)} + end + # # Returns the number of elements in the vector. # @@ -1907,7 +1918,7 @@ def hash #++ # - # Multiplies the vector by +x+, where +x+ is a number or another vector. + # Multiplies the vector by +x+, where +x+ is a number or a matrix. # def *(x) case x diff --git a/lib/ruby/stdlib/matrix/eigenvalue_decomposition.rb b/lib/ruby/stdlib/matrix/eigenvalue_decomposition.rb index ab353ecf611..919db9e83d2 100644 --- a/lib/ruby/stdlib/matrix/eigenvalue_decomposition.rb +++ b/lib/ruby/stdlib/matrix/eigenvalue_decomposition.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false class Matrix # Adapted from JAMA: http://math.nist.gov/javanumerics/jama/ @@ -119,113 +120,113 @@ def tridiagonalize # Auto. Comp., Vol.ii-Linear Algebra, and the corresponding # Fortran subroutine in EISPACK. - @size.times do |j| - @d[j] = @v[@size-1][j] - end + @size.times do |j| + @d[j] = @v[@size-1][j] + end - # Householder reduction to tridiagonal form. + # Householder reduction to tridiagonal form. - (@size-1).downto(0+1) do |i| + (@size-1).downto(0+1) do |i| - # Scale to avoid under/overflow. + # Scale to avoid under/overflow. - scale = 0.0 - h = 0.0 - i.times do |k| - scale = scale + @d[k].abs - end - if (scale == 0.0) - @e[i] = @d[i-1] - i.times do |j| - @d[j] = @v[i-1][j] - @v[i][j] = 0.0 - @v[j][i] = 0.0 - end - else + scale = 0.0 + h = 0.0 + i.times do |k| + scale = scale + @d[k].abs + end + if (scale == 0.0) + @e[i] = @d[i-1] + i.times do |j| + @d[j] = @v[i-1][j] + @v[i][j] = 0.0 + @v[j][i] = 0.0 + end + else - # Generate Householder vector. + # Generate Householder vector. - i.times do |k| - @d[k] /= scale - h += @d[k] * @d[k] - end - f = @d[i-1] - g = Math.sqrt(h) - if (f > 0) - g = -g - end - @e[i] = scale * g - h -= f * g - @d[i-1] = f - g - i.times do |j| - @e[j] = 0.0 - end + i.times do |k| + @d[k] /= scale + h += @d[k] * @d[k] + end + f = @d[i-1] + g = Math.sqrt(h) + if (f > 0) + g = -g + end + @e[i] = scale * g + h -= f * g + @d[i-1] = f - g + i.times do |j| + @e[j] = 0.0 + end - # Apply similarity transformation to remaining columns. + # Apply similarity transformation to remaining columns. - i.times do |j| - f = @d[j] - @v[j][i] = f - g = @e[j] + @v[j][j] * f - (j+1).upto(i-1) do |k| - g += @v[k][j] * @d[k] - @e[k] += @v[k][j] * f - end - @e[j] = g - end - f = 0.0 - i.times do |j| - @e[j] /= h - f += @e[j] * @d[j] - end - hh = f / (h + h) - i.times do |j| - @e[j] -= hh * @d[j] - end - i.times do |j| - f = @d[j] - g = @e[j] - j.upto(i-1) do |k| - @v[k][j] -= (f * @e[k] + g * @d[k]) - end - @d[j] = @v[i-1][j] - @v[i][j] = 0.0 + i.times do |j| + f = @d[j] + @v[j][i] = f + g = @e[j] + @v[j][j] * f + (j+1).upto(i-1) do |k| + g += @v[k][j] * @d[k] + @e[k] += @v[k][j] * f end + @e[j] = g + end + f = 0.0 + i.times do |j| + @e[j] /= h + f += @e[j] * @d[j] + end + hh = f / (h + h) + i.times do |j| + @e[j] -= hh * @d[j] + end + i.times do |j| + f = @d[j] + g = @e[j] + j.upto(i-1) do |k| + @v[k][j] -= (f * @e[k] + g * @d[k]) + end + @d[j] = @v[i-1][j] + @v[i][j] = 0.0 end - @d[i] = h end + @d[i] = h + end - # Accumulate transformations. + # Accumulate transformations. - 0.upto(@size-1-1) do |i| - @v[@size-1][i] = @v[i][i] - @v[i][i] = 1.0 - h = @d[i+1] - if (h != 0.0) + 0.upto(@size-1-1) do |i| + @v[@size-1][i] = @v[i][i] + @v[i][i] = 1.0 + h = @d[i+1] + if (h != 0.0) + 0.upto(i) do |k| + @d[k] = @v[k][i+1] / h + end + 0.upto(i) do |j| + g = 0.0 0.upto(i) do |k| - @d[k] = @v[k][i+1] / h + g += @v[k][i+1] * @v[k][j] end - 0.upto(i) do |j| - g = 0.0 - 0.upto(i) do |k| - g += @v[k][i+1] * @v[k][j] - end - 0.upto(i) do |k| - @v[k][j] -= g * @d[k] - end + 0.upto(i) do |k| + @v[k][j] -= g * @d[k] end end - 0.upto(i) do |k| - @v[k][i+1] = 0.0 - end end - @size.times do |j| - @d[j] = @v[@size-1][j] - @v[@size-1][j] = 0.0 + 0.upto(i) do |k| + @v[k][i+1] = 0.0 end - @v[@size-1][@size-1] = 1.0 - @e[0] = 0.0 end + @size.times do |j| + @d[j] = @v[@size-1][j] + @v[@size-1][j] = 0.0 + end + @v[@size-1][@size-1] = 1.0 + @e[0] = 0.0 + end # Symmetric tridiagonal QL algorithm. @@ -458,7 +459,7 @@ def hessenberg_to_real_schur high = nn-1 eps = Float::EPSILON exshift = 0.0 - p=q=r=s=z=0 + p = q = r = s = z = 0 # Store roots isolated by balanc and compute matrix norm @@ -727,20 +728,20 @@ def hessenberg_to_real_schur return end - (nn-1).downto(0) do |n| - p = @d[n] - q = @e[n] + (nn-1).downto(0) do |k| + p = @d[k] + q = @e[k] # Real vector if (q == 0) - l = n - @h[n][n] = 1.0 - (n-1).downto(0) do |i| + l = k + @h[k][k] = 1.0 + (k-1).downto(0) do |i| w = @h[i][i] - p r = 0.0 - l.upto(n) do |j| - r += @h[i][j] * @h[j][n] + l.upto(k) do |j| + r += @h[i][j] * @h[j][k] end if (@e[i] < 0.0) z = w @@ -749,9 +750,9 @@ def hessenberg_to_real_schur l = i if (@e[i] == 0.0) if (w != 0.0) - @h[i][n] = -r / w + @h[i][k] = -r / w else - @h[i][n] = -r / (eps * norm) + @h[i][k] = -r / (eps * norm) end # Solve real equations @@ -761,20 +762,20 @@ def hessenberg_to_real_schur y = @h[i+1][i] q = (@d[i] - p) * (@d[i] - p) + @e[i] * @e[i] t = (x * s - z * r) / q - @h[i][n] = t + @h[i][k] = t if (x.abs > z.abs) - @h[i+1][n] = (-r - w * t) / x + @h[i+1][k] = (-r - w * t) / x else - @h[i+1][n] = (-s - y * t) / z + @h[i+1][k] = (-s - y * t) / z end end # Overflow control - t = @h[i][n].abs + t = @h[i][k].abs if ((eps * t) * t > 1) - i.upto(n) do |j| - @h[j][n] = @h[j][n] / t + i.upto(k) do |j| + @h[j][k] = @h[j][k] / t end end end diff --git a/lib/ruby/stdlib/matrix/lup_decomposition.rb b/lib/ruby/stdlib/matrix/lup_decomposition.rb index 30f32762535..9c1998fd360 100644 --- a/lib/ruby/stdlib/matrix/lup_decomposition.rb +++ b/lib/ruby/stdlib/matrix/lup_decomposition.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false class Matrix # Adapted from JAMA: http://math.nist.gov/javanumerics/jama/ diff --git a/lib/ruby/stdlib/monitor.rb b/lib/ruby/stdlib/monitor.rb index 07394b59003..73741f8ddb6 100644 --- a/lib/ruby/stdlib/monitor.rb +++ b/lib/ruby/stdlib/monitor.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # = monitor.rb # # Copyright (C) 2001 Shugo Maeda @@ -170,6 +171,7 @@ def mon_try_enter return false end @mon_owner = Thread.current + @mon_count = 0 end @mon_count += 1 return true @@ -184,6 +186,7 @@ def mon_enter if @mon_owner != Thread.current @mon_mutex.lock @mon_owner = Thread.current + @mon_count = 0 end @mon_count += 1 end diff --git a/lib/ruby/stdlib/mutex_m.rb b/lib/ruby/stdlib/mutex_m.rb index 6698cb5ac61..627355151e7 100644 --- a/lib/ruby/stdlib/mutex_m.rb +++ b/lib/ruby/stdlib/mutex_m.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # mutex_m.rb - # $Release Version: 3.0$ diff --git a/lib/ruby/stdlib/net/ftp.rb b/lib/ruby/stdlib/net/ftp.rb index f513ca6ee8d..26bca1a54a7 100644 --- a/lib/ruby/stdlib/net/ftp.rb +++ b/lib/ruby/stdlib/net/ftp.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: true # # = net/ftp.rb - FTP Client Library # @@ -17,6 +18,7 @@ require "socket" require "monitor" require "net/protocol" +require "time" module Net @@ -78,12 +80,13 @@ class FTP FTP_PORT = 21 CRLF = "\r\n" DEFAULT_BLOCKSIZE = BufferedIO::BUFSIZE + @@default_passive = true # :startdoc: # When +true+, transfers are performed in binary mode. Default: +true+. attr_reader :binary - # When +true+, the connection is in passive mode. Default: +false+. + # When +true+, the connection is in passive mode. Default: +true+. attr_accessor :passive # When +true+, all traffic to and from the server is written @@ -122,6 +125,18 @@ def read_timeout=(sec) # The server's last response. attr_reader :last_response + # When +true+, connections are in passive mode per default. + # Default: +true+. + def self.default_passive=(value) + @@default_passive = value + end + + # When +true+, connections are in passive mode per default. + # Default: +true+. + def self.default_passive + @@default_passive + end + # # A synonym for FTP.new, but with a mandatory host parameter. # @@ -149,7 +164,7 @@ def FTP.open(host, user = nil, passwd = nil, acct = nil) def initialize(host = nil, user = nil, passwd = nil, acct = nil) super() @binary = true - @passive = false + @passive = @@default_passive @debug_mode = false @resume = false @sock = NullSocket.new @@ -298,16 +313,16 @@ def getline # :nodoc: # Receive a section of lines until the response code's match. def getmultiline # :nodoc: - line = getline - buff = line - if line[3] == ?- - code = line[0, 3] + lines = [] + lines << getline + code = lines.last.slice(/\A([0-9a-zA-Z]{3})-/, 1) + if code + delimiter = code + " " begin - line = getline - buff << "\n" << line - end until line[0, 3] == code and line[3] != ?- + lines << getline + end until lines.last.start_with?(delimiter) end - return buff << "\n" + return lines.join("\n") + "\n" end private :getmultiline @@ -337,7 +352,7 @@ def getresp # :nodoc: # equal 2. def voidresp # :nodoc: resp = getresp - if resp[0] != ?2 + if !resp.start_with?("2") raise FTPReplyError, resp end end @@ -402,14 +417,14 @@ def transfercmd(cmd, rest_offset = nil) # :nodoc: conn = open_socket(host, port) if @resume and rest_offset resp = sendcmd("REST " + rest_offset.to_s) - if resp[0] != ?3 + if !resp.start_with?("3") raise FTPReplyError, resp end end resp = sendcmd(cmd) # skip 2XX for some ftp servers - resp = getresp if resp[0] == ?2 - if resp[0] != ?1 + resp = getresp if resp.start_with?("2") + if !resp.start_with?("1") raise FTPReplyError, resp end else @@ -418,14 +433,14 @@ def transfercmd(cmd, rest_offset = nil) # :nodoc: sendport(sock.addr[3], sock.addr[1]) if @resume and rest_offset resp = sendcmd("REST " + rest_offset.to_s) - if resp[0] != ?3 + if !resp.start_with?("3") raise FTPReplyError, resp end end resp = sendcmd(cmd) # skip 2XX for some ftp servers - resp = getresp if resp[0] == ?2 - if resp[0] != ?1 + resp = getresp if resp.start_with?("2") + if !resp.start_with?("1") raise FTPReplyError, resp end conn = BufferedSocket.new(sock.accept) @@ -456,16 +471,16 @@ def login(user = "anonymous", passwd = nil, acct = nil) resp = "" synchronize do resp = sendcmd('USER ' + user) - if resp[0] == ?3 + if resp.start_with?("3") raise FTPReplyError, resp if passwd.nil? resp = sendcmd('PASS ' + passwd) end - if resp[0] == ?3 + if resp.start_with?("3") raise FTPReplyError, resp if acct.nil? resp = sendcmd('ACCT ' + acct) end end - if resp[0] != ?2 + if !resp.start_with?("2") raise FTPReplyError, resp end @welcome = resp @@ -598,7 +613,8 @@ def storlines(cmd, file) # :yield: line # chunks. # def getbinaryfile(remotefile, localfile = File.basename(remotefile), - blocksize = DEFAULT_BLOCKSIZE) # :yield: data + blocksize = DEFAULT_BLOCKSIZE, &block) # :yield: data + f = nil result = nil if localfile if @resume @@ -609,18 +625,18 @@ def getbinaryfile(remotefile, localfile = File.basename(remotefile), f = open(localfile, "w") end elsif !block_given? - result = "" + result = String.new end begin - f.binmode if localfile - retrbinary("RETR " + remotefile.to_s, blocksize, rest_offset) do |data| - f.write(data) if localfile - yield(data) if block_given? - result.concat(data) if result + f&.binmode + retrbinary("RETR #{remotefile}", blocksize, rest_offset) do |data| + f&.write(data) + block&.(data) + result&.concat(data) end return result ensure - f.close if localfile + f&.close end end @@ -631,23 +647,25 @@ def getbinaryfile(remotefile, localfile = File.basename(remotefile), # If a block is supplied, it is passed the retrieved data one # line at a time. # - def gettextfile(remotefile, localfile = File.basename(remotefile)) # :yield: line + def gettextfile(remotefile, localfile = File.basename(remotefile), + &block) # :yield: line + f = nil result = nil if localfile f = open(localfile, "w") elsif !block_given? - result = "" + result = String.new end begin - retrlines("RETR " + remotefile) do |line, newline| + retrlines("RETR #{remotefile}") do |line, newline| l = newline ? line + "\n" : line - f.print(l) if localfile - yield(line, newline) if block_given? - result.concat(l) if result + f&.print(l) + block&.(line, newline) + result&.concat(l) end return result ensure - f.close if localfile + f&.close end end @@ -684,9 +702,9 @@ def putbinaryfile(localfile, remotefile = File.basename(localfile), begin f.binmode if rest_offset - storbinary("APPE " + remotefile, f, blocksize, rest_offset, &block) + storbinary("APPE #{remotefile}", f, blocksize, rest_offset, &block) else - storbinary("STOR " + remotefile, f, blocksize, rest_offset, &block) + storbinary("STOR #{remotefile}", f, blocksize, rest_offset, &block) end ensure f.close @@ -701,7 +719,7 @@ def putbinaryfile(localfile, remotefile = File.basename(localfile), def puttextfile(localfile, remotefile = File.basename(localfile), &block) # :yield: line f = open(localfile) begin - storlines("STOR " + remotefile, f, &block) + storlines("STOR #{remotefile}", f, &block) ensure f.close end @@ -737,7 +755,7 @@ def acct(account) def nlst(dir = nil) cmd = "NLST" if dir - cmd = cmd + " " + dir + cmd = "#{cmd} #{dir}" end files = [] retrlines(cmd) do |line| @@ -753,40 +771,238 @@ def nlst(dir = nil) def list(*args, &block) # :yield: line cmd = "LIST" args.each do |arg| - cmd = cmd + " " + arg.to_s + cmd = "#{cmd} #{arg}" + end + lines = [] + retrlines(cmd) do |line| + lines << line end if block - retrlines(cmd, &block) - else - lines = [] - retrlines(cmd) do |line| - lines << line - end - return lines + lines.each(&block) end + return lines end alias ls list alias dir list + # + # MLSxEntry represents an entry in responses of MLST/MLSD. + # Each entry has the facts (e.g., size, last modification time, etc.) + # and the pathname. + # + class MLSxEntry + attr_reader :facts, :pathname + + def initialize(facts, pathname) + @facts = facts + @pathname = pathname + end + + standard_facts = %w(size modify create type unique perm + lang media-type charset) + standard_facts.each do |factname| + define_method factname.gsub(/-/, "_") do + facts[factname] + end + end + + # + # Returns +true+ if the entry is a file (i.e., the value of the type + # fact is file). + # + def file? + return facts["type"] == "file" + end + + # + # Returns +true+ if the entry is a directory (i.e., the value of the + # type fact is dir, cdir, or pdir). + # + def directory? + if /\A[cp]?dir\z/.match(facts["type"]) + return true + else + return false + end + end + + # + # Returns +true+ if the APPE command may be applied to the file. + # + def appendable? + return facts["perm"].include?(?a) + end + + # + # Returns +true+ if files may be created in the directory by STOU, + # STOR, APPE, and RNTO. + # + def creatable? + return facts["perm"].include?(?c) + end + + # + # Returns +true+ if the file or directory may be deleted by DELE/RMD. + # + def deletable? + return facts["perm"].include?(?d) + end + + # + # Returns +true+ if the directory may be entered by CWD/CDUP. + # + def enterable? + return facts["perm"].include?(?e) + end + + # + # Returns +true+ if the file or directory may be renamed by RNFR. + # + def renamable? + return facts["perm"].include?(?f) + end + + # + # Returns +true+ if the listing commands, LIST, NLST, and MLSD are + # applied to the directory. + # + def listable? + return facts["perm"].include?(?l) + end + + # + # Returns +true+ if the MKD command may be used to create a new + # directory within the directory. + # + def directory_makable? + return facts["perm"].include?(?m) + end + + # + # Returns +true+ if the objects in the directory may be deleted, or + # the directory may be purged. + # + def purgeable? + return facts["perm"].include?(?p) + end + + # + # Returns +true+ if the RETR command may be applied to the file. + # + def readable? + return facts["perm"].include?(?r) + end + + # + # Returns +true+ if the STOR command may be applied to the file. + # + def writable? + return facts["perm"].include?(?w) + end + end + + CASE_DEPENDENT_PARSER = ->(value) { value } + CASE_INDEPENDENT_PARSER = ->(value) { value.downcase } + DECIMAL_PARSER = ->(value) { value.to_i } + OCTAL_PARSER = ->(value) { value.to_i(8) } + TIME_PARSER = ->(value, local = false) { + unless /\A(?\d{4})(?\d{2})(?\d{2}) + (?\d{2})(?\d{2})(?\d{2}) + (\.(?\d+))?/x =~ value + raise FTPProtoError, "invalid time-val: #{value}" + end + usec = fractions.to_i * 10 ** (6 - fractions.to_s.size) + Time.send(local ? :local : :utc, year, month, day, hour, min, sec, usec) + } + FACT_PARSERS = Hash.new(CASE_DEPENDENT_PARSER) + FACT_PARSERS["size"] = DECIMAL_PARSER + FACT_PARSERS["modify"] = TIME_PARSER + FACT_PARSERS["create"] = TIME_PARSER + FACT_PARSERS["type"] = CASE_INDEPENDENT_PARSER + FACT_PARSERS["unique"] = CASE_DEPENDENT_PARSER + FACT_PARSERS["perm"] = CASE_INDEPENDENT_PARSER + FACT_PARSERS["lang"] = CASE_INDEPENDENT_PARSER + FACT_PARSERS["media-type"] = CASE_INDEPENDENT_PARSER + FACT_PARSERS["charset"] = CASE_INDEPENDENT_PARSER + FACT_PARSERS["unix.mode"] = OCTAL_PARSER + FACT_PARSERS["unix.owner"] = DECIMAL_PARSER + FACT_PARSERS["unix.group"] = DECIMAL_PARSER + FACT_PARSERS["unix.ctime"] = TIME_PARSER + FACT_PARSERS["unix.atime"] = TIME_PARSER + + def parse_mlsx_entry(entry) + facts, pathname = entry.chomp.split(/ /, 2) + unless pathname + raise FTPProtoError, entry + end + return MLSxEntry.new( + facts.scan(/(.*?)=(.*?);/).each_with_object({}) { + |(factname, value), h| + name = factname.downcase + h[name] = FACT_PARSERS[name].(value) + }, + pathname) + end + private :parse_mlsx_entry + + # + # Returns data (e.g., size, last modification time, entry type, etc.) + # about the file or directory specified by +pathname+. + # If +pathname+ is omitted, the current directory is assumed. + # + def mlst(pathname = nil) + cmd = pathname ? "MLST #{pathname}" : "MLST" + resp = sendcmd(cmd) + if !resp.start_with?("250") + raise FTPReplyError, resp + end + line = resp.lines[1] + unless line + raise FTPProtoError, resp + end + entry = line.sub(/\A(250-| *)/, "") + return parse_mlsx_entry(entry) + end + + # + # Returns an array of the entries of the directory specified by + # +pathname+. + # Each entry has the facts (e.g., size, last modification time, etc.) + # and the pathname. + # If a block is given, it iterates through the listing. + # If +pathname+ is omitted, the current directory is assumed. + # + def mlsd(pathname = nil, &block) # :yield: entry + cmd = pathname ? "MLSD #{pathname}" : "MLSD" + entries = [] + retrlines(cmd) do |line| + entries << parse_mlsx_entry(line) + end + if block + entries.each(&block) + end + return entries + end + # # Renames a file on the server. # def rename(fromname, toname) - resp = sendcmd("RNFR " + fromname) - if resp[0] != ?3 + resp = sendcmd("RNFR #{fromname}") + if !resp.start_with?("3") raise FTPReplyError, resp end - voidcmd("RNTO " + toname) + voidcmd("RNTO #{toname}") end # # Deletes a file on the server. # def delete(filename) - resp = sendcmd("DELE " + filename) - if resp[0, 3] == "250" + resp = sendcmd("DELE #{filename}") + if resp.start_with?("250") return - elsif resp[0] == ?5 + elsif resp.start_with?("5") raise FTPPermError, resp else raise FTPReplyError, resp @@ -807,40 +1023,41 @@ def chdir(dirname) end end end - cmd = "CWD " + dirname + cmd = "CWD #{dirname}" voidcmd(cmd) end + def get_body(resp) # :nodoc: + resp.slice(/\A[0-9a-zA-Z]{3} (.*)$/, 1) + end + private :get_body + # # Returns the size of the given (remote) filename. # def size(filename) with_binary(true) do - resp = sendcmd("SIZE " + filename) - if resp[0, 3] != "213" + resp = sendcmd("SIZE #{filename}") + if !resp.start_with?("213") raise FTPReplyError, resp end - return resp[3..-1].strip.to_i + return get_body(resp).to_i end end - MDTM_REGEXP = /^(\d\d\d\d)(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)/ # :nodoc: - # # Returns the last modification time of the (remote) file. If +local+ is # +true+, it is returned as a local time, otherwise it's a UTC time. # def mtime(filename, local = false) - str = mdtm(filename) - ary = str.scan(MDTM_REGEXP)[0].collect {|i| i.to_i} - return local ? Time.local(*ary) : Time.gm(*ary) + return TIME_PARSER.(mdtm(filename), local) end # # Creates a remote directory. # def mkdir(dirname) - resp = sendcmd("MKD " + dirname) + resp = sendcmd("MKD #{dirname}") return parse257(resp) end @@ -848,7 +1065,7 @@ def mkdir(dirname) # Removes a remote directory. # def rmdir(dirname) - voidcmd("RMD " + dirname) + voidcmd("RMD #{dirname}") end # @@ -865,10 +1082,10 @@ def pwd # def system resp = sendcmd("SYST") - if resp[0, 3] != "215" + if !resp.start_with?("215") raise FTPReplyError, resp end - return resp[4 .. -1] + return get_body(resp) end # @@ -902,9 +1119,9 @@ def status # Use +mtime+ if you want a parsed Time instance. # def mdtm(filename) - resp = sendcmd("MDTM " + filename) - if resp[0, 3] == "213" - return resp[3 .. -1].strip + resp = sendcmd("MDTM #{filename}") + if resp.start_with?("213") + return get_body(resp) end end @@ -972,7 +1189,7 @@ def closed? # # Returns host and port. def parse227(resp) # :nodoc: - if resp[0, 3] != "227" + if !resp.start_with?("227") raise FTPReplyError, resp end if m = /\((?\d+(,\d+){3}),(?\d+,\d+)\)/.match(resp) @@ -988,7 +1205,7 @@ def parse227(resp) # :nodoc: # # Returns host and port. def parse228(resp) # :nodoc: - if resp[0, 3] != "228" + if !resp.start_with?("228") raise FTPReplyError, resp end if m = /\(4,4,(?\d+(,\d+){3}),2,(?\d+,\d+)\)/.match(resp) @@ -1025,7 +1242,7 @@ def parse_pasv_port(s) # # Returns host and port. def parse229(resp) # :nodoc: - if resp[0, 3] != "229" + if !resp.start_with?("229") raise FTPReplyError, resp end if m = /\((?[!-~])\k\k(?\d+)\k\)/.match(resp) @@ -1041,27 +1258,10 @@ def parse229(resp) # :nodoc: # # Returns host and port. def parse257(resp) # :nodoc: - if resp[0, 3] != "257" + if !resp.start_with?("257") raise FTPReplyError, resp end - if resp[3, 2] != ' "' - return "" - end - dirname = "" - i = 5 - n = resp.length - while i < n - c = resp[i, 1] - i = i + 1 - if c == '"' - if i > n or resp[i, 1] != '"' - break - end - i = i + 1 - end - dirname = dirname + c - end - return dirname + return resp.slice(/"(([^"]|"")*)"/, 1).to_s.gsub(/""/, '"') end private :parse257 @@ -1087,11 +1287,11 @@ class BufferedSocket < BufferedIO def read(len = nil) if len - s = super(len, "", true) + s = super(len, String.new, true) return s.empty? ? nil : s else result = "" - while s = super(DEFAULT_BLOCKSIZE, "", true) + while s = super(DEFAULT_BLOCKSIZE, String.new, true) break if s.empty? result << s end diff --git a/lib/ruby/stdlib/net/http.rb b/lib/ruby/stdlib/net/http.rb index 99ae65e7c7a..0207452bad8 100644 --- a/lib/ruby/stdlib/net/http.rb +++ b/lib/ruby/stdlib/net/http.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # = net/http.rb # @@ -610,7 +611,7 @@ class << HTTP # 'http.proxyHost' and 'http.proxyPort' Java system properties, if they # are set and no alternative proxy has been provided. # - def HTTP.new(address, port = nil, p_addr = :ENV, p_port = nil, p_user = nil, p_pass = nil) + def HTTP.new(address, port = nil, p_addr = ENV_JAVA['http.proxyHost'], p_port = ENV_JAVA['http.proxyPort'], p_user = nil, p_pass = nil) http = super address, port if proxy_class? then # from Net::HTTP::Proxy() @@ -645,7 +646,7 @@ def initialize(address, port = nil) @close_on_empty_response = false @socket = nil @started = false - @open_timeout = nil + @open_timeout = 60 @read_timeout = 60 @continue_timeout = nil @debug_output = nil @@ -660,7 +661,6 @@ def initialize(address, port = nil) @use_ssl = false @ssl_context = nil @ssl_session = nil - @enable_post_connection_check = true @sspi_enabled = false SSL_IVNAMES.each do |ivname| instance_variable_set ivname, nil @@ -706,7 +706,7 @@ def set_debug_output(output) # Number of seconds to wait for the connection to open. Any number # may be used, including Floats for fractional seconds. If the HTTP # object cannot open a connection in this many seconds, it raises a - # Net::OpenTimeout exception. The default value is +nil+. + # Net::OpenTimeout exception. The default value is 60 seconds. attr_accessor :open_timeout # Number of seconds to wait for one block to be read (via one read(2) @@ -880,7 +880,12 @@ def connect D "opening connection to #{conn_address}:#{conn_port}..." s = Timeout.timeout(@open_timeout, Net::OpenTimeout) { - TCPSocket.open(conn_address, conn_port, @local_host, @local_port) + begin + TCPSocket.open(conn_address, conn_port, @local_host, @local_port) + rescue => e + raise e, "Failed to open TCP connection to " + + "#{conn_address}:#{conn_port} (#{e.message})" + end } s.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1) D "opened" @@ -918,17 +923,32 @@ def connect @socket.write(buf) HTTPResponse.read_new(@socket).value end + # Server Name Indication (SNI) RFC 3546 + s.hostname = @address if s.respond_to? :hostname= if @ssl_session and Process.clock_gettime(Process::CLOCK_REALTIME) < @ssl_session.time.to_f + @ssl_session.timeout s.session = @ssl_session if @ssl_session end - # Server Name Indication (SNI) RFC 3546 - s.hostname = @address if s.respond_to? :hostname= - Timeout.timeout(@open_timeout, Net::OpenTimeout) { s.connect } + if timeout = @open_timeout + while true + raise Net::OpenTimeout if timeout <= 0 + start = Process.clock_gettime Process::CLOCK_MONOTONIC + # to_io is required because SSLSocket doesn't have wait_readable yet + case s.connect_nonblock(exception: false) + when :wait_readable; s.to_io.wait_readable(timeout) + when :wait_writable; s.to_io.wait_writable(timeout) + else; break + end + timeout -= Process.clock_gettime(Process::CLOCK_MONOTONIC) - start + end + else + s.connect + end if @ssl_context.verify_mode != OpenSSL::SSL::VERIFY_NONE s.post_connection_check(@address) end - @ssl_session = s.session + # Commented out until JRuby implements OpenSSL::SSL::Session + #@ssl_session = s.session rescue => exception D "Conn close because of connect error #{exception}" @socket.close if @socket and not @socket.closed? @@ -1050,7 +1070,7 @@ def proxy_uri # :nodoc: # The address of the proxy server, if one is configured. def proxy_address if @proxy_from_env then - proxy_uri && proxy_uri.hostname + proxy_uri&.hostname else @proxy_address end @@ -1059,7 +1079,7 @@ def proxy_address # The port of the proxy server, if one is configured. def proxy_port if @proxy_from_env then - proxy_uri && proxy_uri.port + proxy_uri&.port else @proxy_port end @@ -1091,8 +1111,12 @@ def conn_port # :nodoc: end def edit_path(path) - if proxy? and not use_ssl? then - "http://#{addr_port}#{path}" + if proxy? + if path.start_with?("ftp://") || use_ssl? + path + else + "http://#{addr_port}#{path}" + end else path end @@ -1430,11 +1454,11 @@ def transport_request(req) res.uri = req.uri - res.reading_body(@socket, req.response_body_permitted?) { - yield res if block_given? - } res } + res.reading_body(@socket, req.response_body_permitted?) { + yield res if block_given? + } rescue Net::OpenTimeout raise rescue Net::ReadTimeout, IOError, EOFError, @@ -1464,10 +1488,16 @@ def transport_request(req) def begin_transport(req) if @socket.closed? connect - elsif @last_communicated && @last_communicated + @keep_alive_timeout < Time.now - D 'Conn close because of keep_alive_timeout' - @socket.close - connect + elsif @last_communicated + if @last_communicated + @keep_alive_timeout < Process.clock_gettime(Process::CLOCK_MONOTONIC) + D 'Conn close because of keep_alive_timeout' + @socket.close + connect + elsif @socket.io.to_io.wait_readable(0) && @socket.eof? + D "Conn close because of EOF" + @socket.close + connect + end end if not req.response_body_permitted? and @close_on_empty_response @@ -1488,7 +1518,7 @@ def end_transport(req, res) @socket.close elsif keep_alive?(req, res) D 'Conn keep-alive' - @last_communicated = Time.now + @last_communicated = Process.clock_gettime(Process::CLOCK_MONOTONIC) else D 'Conn close' @socket.close @@ -1569,4 +1599,3 @@ def D(msg) require 'net/http/proxy_delta' require 'net/http/backward' - diff --git a/lib/ruby/stdlib/net/http/backward.rb b/lib/ruby/stdlib/net/http/backward.rb index faf47b8489e..9e24eae32c4 100644 --- a/lib/ruby/stdlib/net/http/backward.rb +++ b/lib/ruby/stdlib/net/http/backward.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # for backward compatibility # :enddoc: diff --git a/lib/ruby/stdlib/net/http/exceptions.rb b/lib/ruby/stdlib/net/http/exceptions.rb index 6c5d81cb044..0d345266167 100644 --- a/lib/ruby/stdlib/net/http/exceptions.rb +++ b/lib/ruby/stdlib/net/http/exceptions.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # Net::HTTP exception class. # You cannot use Net::HTTPExceptions directly; instead, you must use # its subclasses. diff --git a/lib/ruby/stdlib/net/http/generic_request.rb b/lib/ruby/stdlib/net/http/generic_request.rb index 00ff434ccfe..19602da27cb 100644 --- a/lib/ruby/stdlib/net/http/generic_request.rb +++ b/lib/ruby/stdlib/net/http/generic_request.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # HTTPGenericRequest is the parent of the HTTPRequest class. # Do not use this directly; use a subclass of HTTPRequest. # @@ -309,7 +310,7 @@ def supply_default_content_type def wait_for_continue(sock, ver) if ver >= '1.1' and @header['expect'] and @header['expect'].include?('100-continue') - if IO.select([sock.io], nil, nil, sock.continue_timeout) + if sock.io.to_io.wait_readable(sock.continue_timeout) res = Net::HTTPResponse.read_new(sock) unless res.kind_of?(Net::HTTPContinue) res.decode_content = @decode_content diff --git a/lib/ruby/stdlib/net/http/header.rb b/lib/ruby/stdlib/net/http/header.rb index 912419df55b..5d99e8f0708 100644 --- a/lib/ruby/stdlib/net/http/header.rb +++ b/lib/ruby/stdlib/net/http/header.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # The HTTPHeader module defines methods for reading and writing # HTTP headers. # @@ -169,7 +170,7 @@ def each_capitalized alias canonical_each each_capitalized def capitalize(name) - name.split(/-/).map {|s| s.capitalize }.join('-') + name.to_s.split(/-/).map {|s| s.capitalize }.join('-') end private :capitalize @@ -377,7 +378,7 @@ def set_form_data(params, sep = '&') # +params+ is the form data set; it is an Array of Arrays or a Hash # +enctype is the type to encode the form data set. # It is application/x-www-form-urlencoded or multipart/form-data. - # +formpot+ is an optional hash to specify the detail. + # +formopt+ is an optional hash to specify the detail. # # boundary:: the boundary of the multipart message # charset:: the charset of the message. All names and the values of diff --git a/lib/ruby/stdlib/net/http/proxy_delta.rb b/lib/ruby/stdlib/net/http/proxy_delta.rb index b16c9f1ed8d..a2f770ebdb1 100644 --- a/lib/ruby/stdlib/net/http/proxy_delta.rb +++ b/lib/ruby/stdlib/net/http/proxy_delta.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false module Net::HTTP::ProxyDelta #:nodoc: internal use only private diff --git a/lib/ruby/stdlib/net/http/request.rb b/lib/ruby/stdlib/net/http/request.rb index e8b0f48fccf..1e86f3e4b47 100644 --- a/lib/ruby/stdlib/net/http/request.rb +++ b/lib/ruby/stdlib/net/http/request.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # HTTP request class. # This class wraps together the request header and the request path. # You cannot use this class directly. Instead, you should use one of its diff --git a/lib/ruby/stdlib/net/http/requests.rb b/lib/ruby/stdlib/net/http/requests.rb index c1f83604798..d4c80a3812c 100644 --- a/lib/ruby/stdlib/net/http/requests.rb +++ b/lib/ruby/stdlib/net/http/requests.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # HTTP/1.1 methods --- RFC2616 # diff --git a/lib/ruby/stdlib/net/http/response.rb b/lib/ruby/stdlib/net/http/response.rb index 126c22160d3..349812834fe 100644 --- a/lib/ruby/stdlib/net/http/response.rb +++ b/lib/ruby/stdlib/net/http/response.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # HTTP response class. # # This class wraps together the response header and the response body (the @@ -251,7 +252,7 @@ def inflater # :nodoc: return yield @socket if self['content-range'] v = self['content-encoding'] - case v && v.downcase + case v&.downcase when 'deflate', 'gzip', 'x-gzip' then self.delete 'content-encoding' diff --git a/lib/ruby/stdlib/net/http/responses.rb b/lib/ruby/stdlib/net/http/responses.rb index 1454a27a3e4..a5b8ddc68b7 100644 --- a/lib/ruby/stdlib/net/http/responses.rb +++ b/lib/ruby/stdlib/net/http/responses.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # :stopdoc: class Net::HTTPUnknownResponse < Net::HTTPResponse HAS_BODY = true @@ -231,6 +232,7 @@ class Net::HTTPResponse '304' => Net::HTTPNotModified, '305' => Net::HTTPUseProxy, '307' => Net::HTTPTemporaryRedirect, + '308' => Net::HTTPPermanentRedirect, '400' => Net::HTTPBadRequest, '401' => Net::HTTPUnauthorized, diff --git a/lib/ruby/stdlib/net/https.rb b/lib/ruby/stdlib/net/https.rb index d36f82002de..58cb6ddf192 100644 --- a/lib/ruby/stdlib/net/https.rb +++ b/lib/ruby/stdlib/net/https.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false =begin = net/https -- SSL/TLS enhancement for Net::HTTP. @@ -13,7 +14,7 @@ All rights reserved. == Licence - This program is licenced under the same licence as Ruby. + This program is licensed under the same licence as Ruby. (See the file 'LICENCE'.) =end diff --git a/lib/ruby/stdlib/net/imap.rb b/lib/ruby/stdlib/net/imap.rb index 0517ca1385c..439ca132060 100644 --- a/lib/ruby/stdlib/net/imap.rb +++ b/lib/ruby/stdlib/net/imap.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: true # # = net/imap.rb # @@ -778,7 +779,7 @@ def uid_search(keys, charset = nil) # # The +set+ parameter is a number or a range between two numbers, # or an array of those. The number is a message sequence number, - # where -1 repesents a '*' for use in range notation like 100..-1 + # where -1 represents a '*' for use in range notation like 100..-1 # being interpreted as '100:*'. Beware that the +exclude_end?+ # property of a Range object is ignored, and the contents of a # range are independent of the order of the range endpoints as per @@ -853,6 +854,20 @@ def uid_copy(set, mailbox) copy_internal("UID COPY", set, mailbox) end + # Sends a MOVE command to move the specified message(s) to the end + # of the specified destination +mailbox+. The +set+ parameter is + # a number, an array of numbers, or a Range object. The number is + # a message sequence number. + # The IMAP MOVE extension is described in [RFC-6851]. + def move(set, mailbox) + copy_internal("MOVE", set, mailbox) + end + + # Similar to #move(), but +set+ contains unique identifiers. + def uid_move(set, mailbox) + copy_internal("UID MOVE", set, mailbox) + end + # Sends a SORT command to sort messages in the mailbox. # Returns an array of message sequence numbers. For example: # @@ -919,7 +934,17 @@ def uid_thread(algorithm, search_keys, charset) # messages. Yields responses from the server during the IDLE. # # Use #idle_done() to leave IDLE. - def idle(&response_handler) + # + # If +timeout+ is given, this method returns after +timeout+ seconds passed. + # +timeout+ can be used for keep-alive. For example, the following code + # checks the connection for each 60 seconds. + # + # loop do + # imap.idle(60) do |res| + # ... + # end + # end + def idle(timeout = nil, &response_handler) raise LocalJumpError, "no block given" unless response_handler response = nil @@ -931,7 +956,7 @@ def idle(&response_handler) begin add_response_handler(response_handler) @idle_done_cond = new_cond - @idle_done_cond.wait + @idle_done_cond.wait(timeout) @idle_done_cond = nil if @receiver_thread_terminating raise Net::IMAP::Error, "connection closed" @@ -1177,7 +1202,7 @@ def get_tagged_response(tag, cmd) end def get_response - buff = "" + buff = String.new while true s = @sock.gets(CRLF) break unless s @@ -2715,7 +2740,7 @@ def body_extension end def section - str = "" + str = String.new token = match(T_LBRA) str.concat(token.value) token = match(T_ATOM, T_NUMBER, T_RBRA) @@ -3196,7 +3221,7 @@ def case_insensitive_string end def atom - result = "" + result = String.new while true token = lookahead if atom_token?(token) diff --git a/lib/ruby/stdlib/net/pop.rb b/lib/ruby/stdlib/net/pop.rb index db7192c95ad..00209fec469 100644 --- a/lib/ruby/stdlib/net/pop.rb +++ b/lib/ruby/stdlib/net/pop.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # = net/pop.rb # # Copyright (c) 1999-2007 Yukihiro Matsumoto. diff --git a/lib/ruby/stdlib/net/protocol.rb b/lib/ruby/stdlib/net/protocol.rb index 25477014fb0..b53370931ab 100644 --- a/lib/ruby/stdlib/net/protocol.rb +++ b/lib/ruby/stdlib/net/protocol.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # = net/protocol.rb # @@ -20,6 +21,7 @@ require 'socket' require 'timeout' +require 'io/wait' module Net # :nodoc: @@ -149,23 +151,21 @@ def readline BUFSIZE = 1024 * 16 def rbuf_fill - begin - @rbuf << @io.read_nonblock(BUFSIZE) - rescue IO::WaitReadable - if IO.select([@io], nil, nil, @read_timeout) - retry - else - raise Net::ReadTimeout - end - rescue IO::WaitWritable + case rv = @io.read_nonblock(BUFSIZE, exception: false) + when String + return @rbuf << rv + when :wait_readable + @io.to_io.wait_readable(@read_timeout) or raise Net::ReadTimeout + # continue looping + when :wait_writable # OpenSSL::Buffering#read_nonblock may fail with IO::WaitWritable. # http://www.openssl.org/support/faq.html#PROG10 - if IO.select(nil, [@io], nil, @read_timeout) - retry - else - raise Net::ReadTimeout - end - end + @io.to_io.wait_writable(@read_timeout) or raise Net::ReadTimeout + # continue looping + when nil + # callers do not care about backtrace, so avoid allocating for it + raise EOFError, 'end of file reached', [] + end while true end def rbuf_consume(len) diff --git a/lib/ruby/stdlib/net/smtp.rb b/lib/ruby/stdlib/net/smtp.rb index 64e536a12a8..d634274c3ee 100644 --- a/lib/ruby/stdlib/net/smtp.rb +++ b/lib/ruby/stdlib/net/smtp.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # = net/smtp.rb # # Copyright (c) 1999-2007 Yukihiro Matsumoto. diff --git a/lib/ruby/stdlib/observer.rb b/lib/ruby/stdlib/observer.rb index 10f2eb0db5a..fa7446f3847 100644 --- a/lib/ruby/stdlib/observer.rb +++ b/lib/ruby/stdlib/observer.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # Implementation of the _Observer_ object-oriented design pattern. The # following documentation is copied, with modifications, from "Programming diff --git a/lib/ruby/stdlib/open-uri.rb b/lib/ruby/stdlib/open-uri.rb index e49a09b192b..9e4a5e24c17 100644 --- a/lib/ruby/stdlib/open-uri.rb +++ b/lib/ruby/stdlib/open-uri.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: true require 'uri' require 'stringio' require 'time' @@ -772,7 +773,7 @@ def buffer_open(buf, proxy, options) # :nodoc: # The access sequence is defined by RFC 1738 ftp = Net::FTP.new ftp.connect(self.hostname, self.port) - ftp.passive = true if !options[:ftp_active_mode] + ftp.passive = !options[:ftp_active_mode] # todo: extract user/passwd from .netrc. user = 'anonymous' passwd = nil diff --git a/lib/ruby/stdlib/open3.rb b/lib/ruby/stdlib/open3.rb index fefc19c31a5..3c9d4507371 100644 --- a/lib/ruby/stdlib/open3.rb +++ b/lib/ruby/stdlib/open3.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # # = open3.rb: Popen, but with stderr, too # @@ -27,14 +29,7 @@ # - Open3.pipeline : run a pipeline and wait for its completion # -# Because spawn does not yet work on Windows, we fall back on the older open3 there. -real_open3 = true -if defined?(org) && org.jruby.platform.Platform::IS_WINDOWS - require 'jruby/open3_windows' - real_open3 = false -end - -real_open3 && module Open3 +module Open3 # Open stdin, stdout, and stderr streams and start external executable. # In addition, a thread to wait for the started process is created. @@ -197,6 +192,10 @@ def popen2e(*cmd, **opts, &block) module_function :popen2e def popen_run(cmd, opts, child_io, parent_io) # :nodoc: + if last = Hash.try_convert(cmd.last) + opts = opts.merge(last) + cmd.pop + end pid = spawn(*cmd, opts) wait_thr = Process.detach(pid) child_io.each {|io| io.close } diff --git a/lib/ruby/stdlib/optionparser.rb b/lib/ruby/stdlib/optionparser.rb index d89a4d22fb0..4b9b40d82a7 100644 --- a/lib/ruby/stdlib/optionparser.rb +++ b/lib/ruby/stdlib/optionparser.rb @@ -1 +1,2 @@ +# frozen_string_literal: false require_relative 'optparse' diff --git a/lib/ruby/stdlib/optparse.rb b/lib/ruby/stdlib/optparse.rb index 4ec891e3aef..b33d4cb3957 100644 --- a/lib/ruby/stdlib/optparse.rb +++ b/lib/ruby/stdlib/optparse.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # optparse.rb - command-line option analysis with the OptionParser class. # @@ -117,8 +118,120 @@ # #=> # # Usage: example.rb [options] # # -n, --name=NAME Name to say hello to -# # -h, --help Prints this help# +# # -h, --help Prints this help # +# === Required Arguments +# +# For options that require an argument, option specification strings may include an +# option name in all caps. If an option is used without the required argument, +# an exception will be raised. +# require 'optparse' +# +# options = {} +# OptionParser.new do |parser| +# parser.on("-r", "--require LIBRARY", +# "Require the LIBRARY before executing your script") do |lib| +# puts "You required #{lib}!" +# end +# end.parse! +# +# Used: +# +# bash-3.2$ ruby optparse-test.rb -r +# optparse-test.rb:9:in `
': missing argument: -r (OptionParser::MissingArgument) +# bash-3.2$ ruby optparse-test.rb -r my-library +# You required my-library! +# +# === Type Coercion +# +# OptionParser supports the ability to coerce command line arguments +# into objects for us. +# +# OptionParser comes with a few ready-to-use kinds of type +# coercion. They are: +# +# - Date -- Anything accepted by +Date.parse+ +# - DateTime -- Anything accepted by +DateTime.parse+ +# - Time -- Anything accepted by +Time.httpdate+ or +Time.parse+ +# - URI -- Anything accepted by +URI.parse+ +# - Shellwords -- Anything accepted by +Shellwords.shellwords+ +# - String -- Any non-empty string +# - Integer -- Any integer. Will convert octal. (e.g. 124, -3, 040) +# - Float -- Any float. (e.g. 10, 3.14, -100E+13) +# - Numeric -- Any integer, float, or rational (1, 3.4, 1/3) +# - DecimalInteger -- Like +Integer+, but no octal format. +# - OctalInteger -- Like +Integer+, but no decimal format. +# - DecimalNumeric -- Decimal integer or float. +# - TrueClass -- Accepts '+, yes, true, -, no, false' and +# defaults as +true+ +# - FalseClass -- Same as +TrueClass+, but defaults to +false+ +# - Array -- Strings separated by ',' (e.g. 1,2,3) +# - Regexp -- Regular expressions. Also includes options. +# +# We can also add our own coercions, which we will cover soon. +# +# ==== Using Built-in Conversions +# +# As an example, the built-in +Time+ conversion is used. The other built-in +# conversions behave in the same way. +# OptionParser will attempt to parse the argument +# as a +Time+. If it succeeds, that time will be passed to the +# handler block. Otherwise, an exception will be raised. +# +# require 'optparse' +# require 'optparse/time' +# OptionParser.new do |parser| +# parser.on("-t", "--time [TIME]", Time, "Begin execution at given time") do |time| +# p time +# end +# end.parse! +# +# Used: +# bash-3.2$ ruby optparse-test.rb -t nonsense +# ... invalid argument: -t nonsense (OptionParser::InvalidArgument) +# from ... time.rb:5:in `block in ' +# from optparse-test.rb:31:in `
' +# bash-3.2$ ruby optparse-test.rb -t 10-11-12 +# 2010-11-12 00:00:00 -0500 +# bash-3.2$ ruby optparse-test.rb -t 9:30 +# 2014-08-13 09:30:00 -0400 +# +# ==== Creating Custom Conversions +# +# The +accept+ method on OptionParser may be used to create converters. +# It specifies which conversion block to call whenever a class is specified. +# The example below uses it to fetch a +User+ object before the +on+ handler receives it. +# +# require 'optparse' +# +# User = Struct.new(:id, :name) +# +# def find_user id +# not_found = ->{ raise "No User Found for id #{id}" } +# [ User.new(1, "Sam"), +# User.new(2, "Gandalf") ].find(not_found) do |u| +# u.id == id +# end +# end +# +# op = OptionParser.new +# op.accept(User) do |user_id| +# find_user user_id.to_i +# end +# +# op.on("--user ID", User) do |user| +# puts user +# end +# +# op.parse! +# +# output: +# bash-3.2$ ruby optparse-test.rb --user 1 +# # +# bash-3.2$ ruby optparse-test.rb --user 2 +# # +# bash-3.2$ ruby optparse-test.rb --user 3 +# optparse-test.rb:15:in `block in find_user': No User Found for id 3 (RuntimeError) # === Complete example # # The following example is a complete Ruby program. You can run it and see the @@ -131,108 +244,139 @@ # require 'pp' # # class OptparseExample +# Version = '1.0.0' # # CODES = %w[iso-2022-jp shift_jis euc-jp utf8 binary] # CODE_ALIASES = { "jis" => "iso-2022-jp", "sjis" => "shift_jis" } # +# class ScriptOptions +# attr_accessor :library, :inplace, :encoding, :transfer_type, +# :verbose +# def initialize +# self.library = [] +# self.inplace = false +# self.encoding = "utf8" +# self.transfer_type = :auto +# self.verbose = false +# end +# end +# # # # # Return a structure describing the options. # # # def self.parse(args) -# # The options specified on the command line will be collected in *options*. -# # We set default values here. -# options = OpenStruct.new -# options.library = [] -# options.inplace = false -# options.encoding = "utf8" -# options.transfer_type = :auto -# options.verbose = false +# # The options specified on the command line will be collected in +# # *options*. # -# opt_parser = OptionParser.new do |opts| -# opts.banner = "Usage: example.rb [options]" +# @options = ScriptOptions.new +# option_parser.parse!(args) +# @options +# end # -# opts.separator "" -# opts.separator "Specific options:" +# attr_reader :parser, :options # -# # Mandatory argument. -# opts.on("-r", "--require LIBRARY", -# "Require the LIBRARY before executing your script") do |lib| -# options.library << lib -# end +# def option_parser +# @parser ||= OptionParser.new do |parser| +# parser.banner = "Usage: example.rb [options]" +# parser.separator "" +# parser.separator "Specific options:" # -# # Optional argument; multi-line description. -# opts.on("-i", "--inplace [EXTENSION]", -# "Edit ARGV files in place", -# " (make backup if EXTENSION supplied)") do |ext| -# options.inplace = true -# options.extension = ext || '' -# options.extension.sub!(/\A\.?(?=.)/, ".") # Ensure extension begins with dot. -# end +# # add additional options +# perform_inplace_option +# delay_execution_option +# execute_at_time_option +# specify_record_separator_option +# list_example_option +# specify_encoding_option +# optional_option_argument_with_keyword_completion_option +# boolean_verbose_option # -# # Cast 'delay' argument to a Float. -# opts.on("--delay N", Float, "Delay N seconds before executing") do |n| -# options.delay = n +# parser.separator "" +# parser.separator "Common options:" +# # No argument, shows at tail. This will print an options summary. +# # Try it and see! +# parser.on_tail("-h", "--help", "Show this message") do +# puts parser +# exit # end -# -# # Cast 'time' argument to a Time object. -# opts.on("-t", "--time [TIME]", Time, "Begin execution at given time") do |time| -# options.time = time +# # Another typical switch to print the version. +# parser.on_tail("--version", "Show version") do +# puts Version +# exit # end +# end +# end # -# # Cast to octal integer. -# opts.on("-F", "--irs [OCTAL]", OptionParser::OctalInteger, -# "Specify record separator (default \\0)") do |rs| -# options.record_separator = rs -# end +# def perform_inplace_option +# # Specifies an optional option argument +# parser.on("-i", "--inplace [EXTENSION]", +# "Edit ARGV files in place", +# " (make backup if EXTENSION supplied)") do |ext| +# options.inplace = true +# options.extension = ext || '' +# options.extension.sub!(/\A\.?(?=.)/, ".") # Ensure extension begins with dot. +# end +# end # -# # List of arguments. -# opts.on("--list x,y,z", Array, "Example 'list' of arguments") do |list| -# options.list = list -# end +# def delay_execution_option +# # Cast 'delay' argument to a Float. +# parser.on("--delay N", Float, "Delay N seconds before executing") do |n| +# options.delay = n +# end +# end # -# # Keyword completion. We are specifying a specific set of arguments (CODES -# # and CODE_ALIASES - notice the latter is a Hash), and the user may provide -# # the shortest unambiguous text. -# code_list = (CODE_ALIASES.keys + CODES).join(',') -# opts.on("--code CODE", CODES, CODE_ALIASES, "Select encoding", -# " (#{code_list})") do |encoding| -# options.encoding = encoding -# end +# def execute_at_time_option +# # Cast 'time' argument to a Time object. +# parser.on("-t", "--time [TIME]", Time, "Begin execution at given time") do |time| +# options.time = time +# end +# end # -# # Optional argument with keyword completion. -# opts.on("--type [TYPE]", [:text, :binary, :auto], -# "Select transfer type (text, binary, auto)") do |t| -# options.transfer_type = t -# end # -# # Boolean switch. -# opts.on("-v", "--[no-]verbose", "Run verbosely") do |v| -# options.verbose = v -# end +# def specify_record_separator_option +# # Cast to octal integer. +# parser.on("-F", "--irs [OCTAL]", OptionParser::OctalInteger, +# "Specify record separator (default \\0)") do |rs| +# options.record_separator = rs +# end +# end # -# opts.separator "" -# opts.separator "Common options:" +# def list_example_option +# # List of arguments. +# parser.on("--list x,y,z", Array, "Example 'list' of arguments") do |list| +# options.list = list +# end +# end # -# # No argument, shows at tail. This will print an options summary. -# # Try it and see! -# opts.on_tail("-h", "--help", "Show this message") do -# puts opts -# exit -# end +# def specify_encoding_option +# # Keyword completion. We are specifying a specific set of arguments (CODES +# # and CODE_ALIASES - notice the latter is a Hash), and the user may provide +# # the shortest unambiguous text. +# code_list = (CODE_ALIASES.keys + CODES).join(',') +# parser.on("--code CODE", CODES, CODE_ALIASES, "Select encoding", +# " (#{code_list})") do |encoding| +# options.encoding = encoding +# end +# end # -# # Another typical switch to print the version. -# opts.on_tail("--version", "Show version") do -# puts ::Version.join('.') -# exit -# end +# +# def optional_option_argument_with_keyword_completion_option +# # Optional '--type' option argument with keyword completion. +# parser.on("--type [TYPE]", [:text, :binary, :auto], +# "Select transfer type (text, binary, auto)") do |t| +# options.transfer_type = t # end +# end # -# opt_parser.parse!(args) -# options -# end # parse() # -# end # class OptparseExample +# def boolean_verbose_option +# # Boolean switch. +# parser.on("-v", "--[no-]verbose", "Run verbosely") do |v| +# options.verbose = v +# end +# end # +# end # class OptparseExample # options = OptparseExample.parse(ARGV) # pp options # pp ARGV @@ -1568,7 +1712,7 @@ def search(id, key) # Completes shortened long style option switch and returns pair of # canonical switch and switch descriptor OptionParser::Switch. # - # +id+:: Searching table. + # +typ+:: Searching table. # +opt+:: Searching key. # +icase+:: Search case insensitive if true. # +pat+:: Optional pattern for completion. diff --git a/lib/ruby/stdlib/optparse/ac.rb b/lib/ruby/stdlib/optparse/ac.rb index 6a8626094d1..fb0883f97a6 100644 --- a/lib/ruby/stdlib/optparse/ac.rb +++ b/lib/ruby/stdlib/optparse/ac.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'optparse' class OptionParser::AC < OptionParser diff --git a/lib/ruby/stdlib/optparse/date.rb b/lib/ruby/stdlib/optparse/date.rb index d680559f370..d6649c83f1a 100644 --- a/lib/ruby/stdlib/optparse/date.rb +++ b/lib/ruby/stdlib/optparse/date.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'optparse' require 'date' diff --git a/lib/ruby/stdlib/optparse/shellwords.rb b/lib/ruby/stdlib/optparse/shellwords.rb index 0422d7c887d..bf31701b963 100644 --- a/lib/ruby/stdlib/optparse/shellwords.rb +++ b/lib/ruby/stdlib/optparse/shellwords.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # -*- ruby -*- require 'shellwords' diff --git a/lib/ruby/stdlib/optparse/time.rb b/lib/ruby/stdlib/optparse/time.rb index 402cadcf167..ffc6ff000d9 100644 --- a/lib/ruby/stdlib/optparse/time.rb +++ b/lib/ruby/stdlib/optparse/time.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'optparse' require 'time' diff --git a/lib/ruby/stdlib/optparse/uri.rb b/lib/ruby/stdlib/optparse/uri.rb index 024dc69eac4..51550cf91b1 100644 --- a/lib/ruby/stdlib/optparse/uri.rb +++ b/lib/ruby/stdlib/optparse/uri.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # -*- ruby -*- require 'optparse' diff --git a/lib/ruby/stdlib/optparse/version.rb b/lib/ruby/stdlib/optparse/version.rb index 85256774185..b869d8fe51e 100644 --- a/lib/ruby/stdlib/optparse/version.rb +++ b/lib/ruby/stdlib/optparse/version.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # OptionParser internal utility class << OptionParser diff --git a/lib/ruby/stdlib/ostruct.rb b/lib/ruby/stdlib/ostruct.rb index 6c3c548aad9..5aea0465bda 100644 --- a/lib/ruby/stdlib/ostruct.rb +++ b/lib/ruby/stdlib/ostruct.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # = ostruct.rb: OpenStruct implementation # @@ -227,7 +228,7 @@ def dig(name, *names) begin name = name.to_sym rescue NoMethodError - return + raise TypeError, "#{name} is not a symbol nor a string" end @table.dig(name, *names) end @@ -310,4 +311,4 @@ def eql?(other) def hash @table.hash end -end \ No newline at end of file +end diff --git a/lib/ruby/stdlib/pathname.rb b/lib/ruby/stdlib/pathname.rb index 8f03631fbbd..5e0261c931a 100644 --- a/lib/ruby/stdlib/pathname.rb +++ b/lib/ruby/stdlib/pathname.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: true # # = pathname.rb # @@ -13,13 +14,8 @@ class Pathname - # :stopdoc: - if RUBY_VERSION < "1.9" - TO_PATH = :to_str - else - # to_path is implemented so Pathname objects are usable with File.open, etc. - TO_PATH = :to_path - end + # to_path is implemented so Pathname objects are usable with File.open, etc. + TO_PATH = :to_path SAME_PATHS = if File::FNM_SYSCASE.nonzero? # Avoid #zero? here because #casecmp can return nil. @@ -290,13 +286,6 @@ def each_filename # :yield: filename # enum.each { |e| ... } # # yields Pathnames /, /usr, /usr/bin, and /usr/bin/ruby. # - # Returns an Enumerator if no block was given. - # - # enum = Pathname.new("/usr/bin/ruby").ascend - # # ... do stuff ... - # enum.each { |e| ... } - # # yields Pathnames /usr/bin/ruby, /usr/bin, /usr, and /. - # # It doesn't access the filesystem. # def descend @@ -323,6 +312,13 @@ def descend # # # # # + # Returns an Enumerator if no block was given. + # + # enum = Pathname.new("/usr/bin/ruby").ascend + # # ... do stuff ... + # enum.each { |e| ... } + # # yields Pathnames /usr/bin/ruby, /usr/bin, /usr, and /. + # # It doesn't access the filesystem. # def ascend diff --git a/lib/ruby/stdlib/pp.rb b/lib/ruby/stdlib/pp.rb index 3c73463c9c5..9678774b8ca 100644 --- a/lib/ruby/stdlib/pp.rb +++ b/lib/ruby/stdlib/pp.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'prettyprint' module Kernel @@ -9,7 +11,7 @@ module Kernel # # See the PP module for more information. def pretty_inspect - PP.pp(self, '') + PP.pp(self, ''.dup) end private @@ -347,7 +349,7 @@ def pretty_print_inspect if /\(PP::ObjectMixin\)#/ =~ Object.instance_method(:method).bind(self).call(:pretty_print).inspect raise "pretty_print is not overridden for #{self.class}" end - PP.singleline_pp(self, '') + PP.singleline_pp(self, ''.dup) end end end diff --git a/lib/ruby/stdlib/prettyprint.rb b/lib/ruby/stdlib/prettyprint.rb index 7e989374b72..2a3ca90dc1a 100644 --- a/lib/ruby/stdlib/prettyprint.rb +++ b/lib/ruby/stdlib/prettyprint.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true +# # This class implements a pretty printing algorithm. It finds line breaks and # nice indentations for grouped structure. # @@ -40,7 +42,7 @@ class PrettyPrint # output # end # - def PrettyPrint.format(output='', maxwidth=79, newline="\n", genspace=lambda {|n| ' ' * n}) + def PrettyPrint.format(output=''.dup, maxwidth=79, newline="\n", genspace=lambda {|n| ' ' * n}) q = PrettyPrint.new(output, maxwidth, newline, &genspace) yield q q.flush @@ -54,7 +56,7 @@ def PrettyPrint.format(output='', maxwidth=79, newline="\n", genspace=lambda {|n # The invocation of +breakable+ in the block doesn't break a line and is # treated as just an invocation of +text+. # - def PrettyPrint.singleline_format(output='', maxwidth=nil, newline=nil, genspace=nil) + def PrettyPrint.singleline_format(output=''.dup, maxwidth=nil, newline=nil, genspace=nil) q = SingleLine.new(output) yield q output @@ -77,7 +79,7 @@ def PrettyPrint.singleline_format(output='', maxwidth=nil, newline=nil, genspace # The block is used to generate spaces. {|width| ' ' * width} is used if it # is not given. # - def initialize(output='', maxwidth=79, newline="\n", &genspace) + def initialize(output=''.dup, maxwidth=79, newline="\n", &genspace) @output = output @maxwidth = maxwidth @newline = newline diff --git a/lib/ruby/stdlib/prime.rb b/lib/ruby/stdlib/prime.rb index b2b55f1f2e3..c64c0c2cf18 100644 --- a/lib/ruby/stdlib/prime.rb +++ b/lib/ruby/stdlib/prime.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # = prime.rb # @@ -31,7 +32,14 @@ def prime_division(generator = Prime::Generator23.new) # Returns true if +self+ is a prime number, else returns false. def prime? - Prime.prime?(self) + return self >= 2 if self <= 3 + return false if self % 2 == 0 or self % 3 == 0 + (5..(self**0.5).floor).step(6).each do |i| + if self % i == 0 || self % (i + 2) == 0 + return false + end + end + true end # Iterates the given block over all prime numbers. @@ -57,9 +65,6 @@ def Integer.each_prime(ubound, &block) # :yields: prime # # == Retrieving the instance # -# +Prime+.new is obsolete. Now +Prime+ has the default instance and you can -# access it as +Prime+.instance. -# # For convenience, each instance method of +Prime+.instance can be accessed # as a class method of +Prime+. # @@ -90,20 +95,11 @@ def Integer.each_prime(ubound, &block) # :yields: prime class Prime include Enumerable - @the_instance = Prime.new - - # obsolete. Use +Prime+::+instance+ or class methods of +Prime+. - def initialize - @generator = EratosthenesGenerator.new - extend OldCompatibility - warn "Prime::new is obsolete. use Prime::instance or class methods of Prime." - end + include Singleton class << self extend Forwardable include Enumerable - # Returns the default instance of Prime. - def instance; @the_instance end def method_added(method) # :nodoc: (class<< self;self;end).def_delegator :instance, method @@ -136,14 +132,6 @@ def method_added(method) # :nodoc: # Upper bound of prime numbers. The iterator stops after it # yields all prime numbers p <= +ubound+. # - # == Note - # - # +Prime+.+new+ returns an object extended by +Prime+::+OldCompatibility+ - # in order to be compatible with Ruby 1.8, and +Prime+#each is overwritten - # by +Prime+::+OldCompatibility+#+each+. - # - # +Prime+.+new+ is now obsolete. Use +Prime+.+instance+.+each+ or simply - # +Prime+.+each+. def each(ubound = nil, generator = EratosthenesGenerator.new, &block) generator.upper_bound = ubound generator.each(&block) @@ -157,8 +145,10 @@ def each(ubound = nil, generator = EratosthenesGenerator.new, &block) # +value+:: an arbitrary integer to be checked. # +generator+:: optional. A pseudo-prime generator. def prime?(value, generator = Prime::Generator23.new) + raise ArgumentError, "Expected a prime generator, got #{generator}" unless generator.respond_to? :each + raise ArgumentError, "Expected an integer, got #{value}" unless value.respond_to?(:integer?) && value.integer? return false if value < 2 - for num in generator + generator.each do |num| q,r = value.divmod num return true if q < num return false if r == 0 @@ -216,7 +206,7 @@ def prime_division(value, generator = Prime::Generator23.new) else pv = [] end - for prime in generator + generator.each do |prime| count = 0 while (value1, mod = value.divmod(prime) mod) == 0 @@ -231,7 +221,7 @@ def prime_division(value, generator = Prime::Generator23.new) if value > 1 pv.push [value, 1] end - return pv + pv end # An abstract class for enumerating pseudo-prime numbers. @@ -289,15 +279,27 @@ def each end # see +Enumerator+#with_index. - alias with_index each_with_index + def with_index(offset = 0) + return enum_for(:with_index, offset) { Float::INFINITY } unless block_given? + return each_with_index(&proc) if offset == 0 + + each do |prime| + yield prime, offset + offset += 1 + end + end # see +Enumerator+#with_object. def with_object(obj) - return enum_for(:with_object) unless block_given? + return enum_for(:with_object, obj) { Float::INFINITY } unless block_given? each do |prime| yield prime, obj end end + + def size + Float::INFINITY + end end # An implementation of +PseudoPrimeGenerator+. @@ -360,7 +362,7 @@ def succ when 3; @prime = 5; @step = 2 end end - return @prime + @prime end alias next succ def rewind @@ -387,7 +389,7 @@ def initialize # :nodoc: # Returns the cached prime numbers. def cache - return @primes + @primes end alias primes cache alias primes_so_far cache @@ -412,7 +414,7 @@ def [](index) @primes.push @next_to_check if @primes[2..@ulticheck_index].find {|prime| @next_to_check % prime == 0 }.nil? @next_to_check += 2 end - return @primes[index] + @primes[index] end end @@ -444,44 +446,21 @@ def compute_primes segment_max = [segment_min + max_segment_size, max_cached_prime * 2].min root = Integer(Math.sqrt(segment_max).floor) - sieving_primes = @primes[1 .. -1].take_while { |prime| prime <= root } - offsets = Array.new(sieving_primes.size) do |i| - (-(segment_min + 1 + sieving_primes[i]) / 2) % sieving_primes[i] - end - segment = ((segment_min + 1) .. segment_max).step(2).to_a - sieving_primes.each_with_index do |prime, index| - composite_index = offsets[index] + + (1..Float::INFINITY).each do |sieving| + prime = @primes[sieving] + break if prime > root + composite_index = (-(segment_min + 1 + prime) / 2) % prime while composite_index < segment.size do segment[composite_index] = nil composite_index += prime end end - segment.each do |prime| - @primes.push prime unless prime.nil? - end - @max_checked = segment_max - end - end - - # Provides a +Prime+ object with compatibility to Ruby 1.8 when instantiated via +Prime+.+new+. - module OldCompatibility - # Returns the next prime number and forwards internal pointer. - def succ - @generator.succ - end - alias next succ + @primes.concat(segment.compact!) - # Overwrites Prime#each. - # - # Iterates the given block over all prime numbers. Note that enumeration - # starts from the current position of internal pointer, not rewound. - def each - return @generator.dup unless block_given? - loop do - yield succ - end + @max_checked = segment_max end end end diff --git a/lib/ruby/stdlib/profile.rb b/lib/ruby/stdlib/profile.rb index aea72c51720..b87ff5da156 100644 --- a/lib/ruby/stdlib/profile.rb +++ b/lib/ruby/stdlib/profile.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'profiler' # Commented out since JRuby doesn't have RubyVM namespace. diff --git a/lib/ruby/stdlib/profiler.rb b/lib/ruby/stdlib/profiler.rb index e53951cbe6e..ab55e1fe481 100644 --- a/lib/ruby/stdlib/profiler.rb +++ b/lib/ruby/stdlib/profiler.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # Profile provides a way to Profile your Ruby application. # # Profiling your program is a way of determining which methods are called and diff --git a/lib/ruby/stdlib/pstore.rb b/lib/ruby/stdlib/pstore.rb index 02c20c91c79..8dfcaec7df6 100644 --- a/lib/ruby/stdlib/pstore.rb +++ b/lib/ruby/stdlib/pstore.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # = PStore -- Transactional File Storage for Ruby Objects # # pstore.rb - @@ -189,7 +190,7 @@ def fetch(name, default=PStore::Error) # store.transaction do # begin transaction # # load some data into the store... # store[:single_object] = "My data..." - # store[:obj_heirarchy] = { "Kev Jackson" => ["rational.rb", "pstore.rb"], + # store[:obj_hierarchy] = { "Kev Jackson" => ["rational.rb", "pstore.rb"], # "James Gray" => ["erb.rb", "pstore.rb"] } # end # commit changes to data store file # diff --git a/lib/ruby/stdlib/rbconfig/datadir.rb b/lib/ruby/stdlib/rbconfig/datadir.rb index 9b7eabb4730..136162da445 100644 --- a/lib/ruby/stdlib/rbconfig/datadir.rb +++ b/lib/ruby/stdlib/rbconfig/datadir.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false #-- # Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others. # All rights reserved. diff --git a/lib/ruby/stdlib/resolv-replace.rb b/lib/ruby/stdlib/resolv-replace.rb index 3e28a843fd9..a83e79d9960 100644 --- a/lib/ruby/stdlib/resolv-replace.rb +++ b/lib/ruby/stdlib/resolv-replace.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'socket' require 'resolv' diff --git a/lib/ruby/stdlib/resolv.rb b/lib/ruby/stdlib/resolv.rb index 1efa27ec202..eb158c631ad 100644 --- a/lib/ruby/stdlib/resolv.rb +++ b/lib/ruby/stdlib/resolv.rb @@ -1,6 +1,9 @@ +# frozen_string_literal: true + require 'socket' require 'timeout' require 'thread' +require 'io/wait' begin require 'securerandom' @@ -34,10 +37,10 @@ # * /etc/nsswitch.conf is not supported. class Resolv - + ## # Tests whether we're running on Windows - + WINDOWS = /mswin|cygwin|mingw|bccwin/ =~ RUBY_PLATFORM || ::RbConfig::CONFIG['host_os'] =~ /mswin/ ## @@ -670,7 +673,7 @@ def initialize end def request(sender, tout) - start = Time.now + start = Process.clock_gettime(Process::CLOCK_MONOTONIC) timelimit = start + tout begin sender.send @@ -679,14 +682,18 @@ def request(sender, tout) raise ResolvTimeout end while true - before_select = Time.now + before_select = Process.clock_gettime(Process::CLOCK_MONOTONIC) timeout = timelimit - before_select if timeout <= 0 raise ResolvTimeout end - select_result = IO.select(@socks, nil, nil, timeout) + if @socks.size == 1 + select_result = @socks[0].wait_readable(timeout) ? [ @socks ] : nil + else + select_result = IO.select(@socks, nil, nil, timeout) + end if !select_result - after_select = Time.now + after_select = Process.clock_gettime(Process::CLOCK_MONOTONIC) next if after_select < timelimit raise ResolvTimeout end @@ -1174,7 +1181,9 @@ def self.split(arg) class Str # :nodoc: def initialize(string) @string = string - @downcase = string.downcase + # case insensivity of DNS labels doesn't apply non-ASCII characters. [RFC 4343] + # This assumes @string is given in ASCII compatible encoding. + @downcase = string.b.downcase end attr_reader :string, :downcase @@ -1423,7 +1432,7 @@ def encode class MessageEncoder # :nodoc: def initialize - @data = '' + @data = ''.dup @names = {} yield self end @@ -1471,7 +1480,9 @@ def put_labels(d) self.put_pack("n", 0xc000 | idx) return else - @names[domain] = @data.length + if @data.length < 0x4000 + @names[domain] = @data.length + end self.put_label(d[i]) end } diff --git a/lib/ruby/stdlib/rexml/attlistdecl.rb b/lib/ruby/stdlib/rexml/attlistdecl.rb index ec4e6c3b8db..dc1d2add0b8 100644 --- a/lib/ruby/stdlib/rexml/attlistdecl.rb +++ b/lib/ruby/stdlib/rexml/attlistdecl.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false #vim:ts=2 sw=2 noexpandtab: require 'rexml/child' require 'rexml/source' @@ -23,7 +24,7 @@ class AttlistDecl < Child # Create an AttlistDecl, pulling the information from a Source. Notice # that this isn't very convenient; to create an AttlistDecl, you basically # have to format it yourself, and then have the initializer parse it. - # Sorry, but for the forseeable future, DTD support in REXML is pretty + # Sorry, but for the foreseeable future, DTD support in REXML is pretty # weak on convenience. Have I mentioned how much I hate DTDs? def initialize(source) super() diff --git a/lib/ruby/stdlib/rexml/attribute.rb b/lib/ruby/stdlib/rexml/attribute.rb index ef9e5442943..e9917cf52d8 100644 --- a/lib/ruby/stdlib/rexml/attribute.rb +++ b/lib/ruby/stdlib/rexml/attribute.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require "rexml/namespace" require 'rexml/text' diff --git a/lib/ruby/stdlib/rexml/cdata.rb b/lib/ruby/stdlib/rexml/cdata.rb index 73358edc289..fe9b49b5f7c 100644 --- a/lib/ruby/stdlib/rexml/cdata.rb +++ b/lib/ruby/stdlib/rexml/cdata.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require "rexml/text" module REXML diff --git a/lib/ruby/stdlib/rexml/child.rb b/lib/ruby/stdlib/rexml/child.rb index bf97d5f903e..d23451e71ec 100644 --- a/lib/ruby/stdlib/rexml/child.rb +++ b/lib/ruby/stdlib/rexml/child.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require "rexml/node" module REXML diff --git a/lib/ruby/stdlib/rexml/comment.rb b/lib/ruby/stdlib/rexml/comment.rb index 000b03dddd9..746af772969 100644 --- a/lib/ruby/stdlib/rexml/comment.rb +++ b/lib/ruby/stdlib/rexml/comment.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require "rexml/child" module REXML diff --git a/lib/ruby/stdlib/rexml/doctype.rb b/lib/ruby/stdlib/rexml/doctype.rb index 0b3c533bb46..1eb1f5b4e18 100644 --- a/lib/ruby/stdlib/rexml/doctype.rb +++ b/lib/ruby/stdlib/rexml/doctype.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require "rexml/parent" require "rexml/parseexception" require "rexml/namespace" diff --git a/lib/ruby/stdlib/rexml/document.rb b/lib/ruby/stdlib/rexml/document.rb index d7d24f47323..806bc499cde 100644 --- a/lib/ruby/stdlib/rexml/document.rb +++ b/lib/ruby/stdlib/rexml/document.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require "rexml/security" require "rexml/element" require "rexml/xmldecl" diff --git a/lib/ruby/stdlib/rexml/dtd/attlistdecl.rb b/lib/ruby/stdlib/rexml/dtd/attlistdecl.rb index 25955ee2749..32847daadb2 100644 --- a/lib/ruby/stdlib/rexml/dtd/attlistdecl.rb +++ b/lib/ruby/stdlib/rexml/dtd/attlistdecl.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require "rexml/child" module REXML module DTD diff --git a/lib/ruby/stdlib/rexml/dtd/dtd.rb b/lib/ruby/stdlib/rexml/dtd/dtd.rb index 62317bac9e9..927d5d847b1 100644 --- a/lib/ruby/stdlib/rexml/dtd/dtd.rb +++ b/lib/ruby/stdlib/rexml/dtd/dtd.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require "rexml/dtd/elementdecl" require "rexml/dtd/entitydecl" require "rexml/comment" diff --git a/lib/ruby/stdlib/rexml/dtd/elementdecl.rb b/lib/ruby/stdlib/rexml/dtd/elementdecl.rb index f90b27d7614..119fd41a8f6 100644 --- a/lib/ruby/stdlib/rexml/dtd/elementdecl.rb +++ b/lib/ruby/stdlib/rexml/dtd/elementdecl.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require "rexml/child" module REXML module DTD diff --git a/lib/ruby/stdlib/rexml/dtd/entitydecl.rb b/lib/ruby/stdlib/rexml/dtd/entitydecl.rb index a9286b2b90c..45707e2f42d 100644 --- a/lib/ruby/stdlib/rexml/dtd/entitydecl.rb +++ b/lib/ruby/stdlib/rexml/dtd/entitydecl.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require "rexml/child" module REXML module DTD diff --git a/lib/ruby/stdlib/rexml/dtd/notationdecl.rb b/lib/ruby/stdlib/rexml/dtd/notationdecl.rb index 17d1b9ef293..cfdf0b9b74a 100644 --- a/lib/ruby/stdlib/rexml/dtd/notationdecl.rb +++ b/lib/ruby/stdlib/rexml/dtd/notationdecl.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require "rexml/child" module REXML module DTD diff --git a/lib/ruby/stdlib/rexml/element.rb b/lib/ruby/stdlib/rexml/element.rb index e459704d3cc..f725d5a2be5 100644 --- a/lib/ruby/stdlib/rexml/element.rb +++ b/lib/ruby/stdlib/rexml/element.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require "rexml/parent" require "rexml/namespace" require "rexml/attribute" diff --git a/lib/ruby/stdlib/rexml/encoding.rb b/lib/ruby/stdlib/rexml/encoding.rb index 1c7e79a124a..da2d70d6c9d 100644 --- a/lib/ruby/stdlib/rexml/encoding.rb +++ b/lib/ruby/stdlib/rexml/encoding.rb @@ -1,4 +1,5 @@ # coding: US-ASCII +# frozen_string_literal: false module REXML module Encoding # ID ---> Encoding name diff --git a/lib/ruby/stdlib/rexml/entity.rb b/lib/ruby/stdlib/rexml/entity.rb index 3a35ec6b947..d9a72cc8fa1 100644 --- a/lib/ruby/stdlib/rexml/entity.rb +++ b/lib/ruby/stdlib/rexml/entity.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'rexml/child' require 'rexml/source' require 'rexml/xmltokens' diff --git a/lib/ruby/stdlib/rexml/formatters/default.rb b/lib/ruby/stdlib/rexml/formatters/default.rb index 574c821f964..b84759d2ff5 100644 --- a/lib/ruby/stdlib/rexml/formatters/default.rb +++ b/lib/ruby/stdlib/rexml/formatters/default.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false module REXML module Formatters class Default diff --git a/lib/ruby/stdlib/rexml/formatters/pretty.rb b/lib/ruby/stdlib/rexml/formatters/pretty.rb index e5ba561a584..a80274bdad5 100644 --- a/lib/ruby/stdlib/rexml/formatters/pretty.rb +++ b/lib/ruby/stdlib/rexml/formatters/pretty.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'rexml/formatters/default' module REXML diff --git a/lib/ruby/stdlib/rexml/formatters/transitive.rb b/lib/ruby/stdlib/rexml/formatters/transitive.rb index 6cc690d9228..81e67f3274e 100644 --- a/lib/ruby/stdlib/rexml/formatters/transitive.rb +++ b/lib/ruby/stdlib/rexml/formatters/transitive.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'rexml/formatters/pretty' module REXML diff --git a/lib/ruby/stdlib/rexml/functions.rb b/lib/ruby/stdlib/rexml/functions.rb index 2010be14e01..ee73b28881a 100644 --- a/lib/ruby/stdlib/rexml/functions.rb +++ b/lib/ruby/stdlib/rexml/functions.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false module REXML # If you add a method, keep in mind two things: # (1) the first argument will always be a list of nodes from which to diff --git a/lib/ruby/stdlib/rexml/instruction.rb b/lib/ruby/stdlib/rexml/instruction.rb index f8b734a5b54..576939ca2b9 100644 --- a/lib/ruby/stdlib/rexml/instruction.rb +++ b/lib/ruby/stdlib/rexml/instruction.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require "rexml/child" require "rexml/source" diff --git a/lib/ruby/stdlib/rexml/light/node.rb b/lib/ruby/stdlib/rexml/light/node.rb index b33f78f7ceb..d58119a3a44 100644 --- a/lib/ruby/stdlib/rexml/light/node.rb +++ b/lib/ruby/stdlib/rexml/light/node.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'rexml/xmltokens' # [ :element, parent, name, attributes, children* ] diff --git a/lib/ruby/stdlib/rexml/namespace.rb b/lib/ruby/stdlib/rexml/namespace.rb index aeb339ee839..90ba7cc635b 100644 --- a/lib/ruby/stdlib/rexml/namespace.rb +++ b/lib/ruby/stdlib/rexml/namespace.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'rexml/xmltokens' module REXML diff --git a/lib/ruby/stdlib/rexml/node.rb b/lib/ruby/stdlib/rexml/node.rb index cab6e9fddb5..c7a39367990 100644 --- a/lib/ruby/stdlib/rexml/node.rb +++ b/lib/ruby/stdlib/rexml/node.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require "rexml/parseexception" require "rexml/formatters/pretty" require "rexml/formatters/default" diff --git a/lib/ruby/stdlib/rexml/output.rb b/lib/ruby/stdlib/rexml/output.rb index 0c6cc7a7f84..96dfea570ed 100644 --- a/lib/ruby/stdlib/rexml/output.rb +++ b/lib/ruby/stdlib/rexml/output.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'rexml/encoding' module REXML diff --git a/lib/ruby/stdlib/rexml/parent.rb b/lib/ruby/stdlib/rexml/parent.rb index 2a07fcacbda..3bd0a962555 100644 --- a/lib/ruby/stdlib/rexml/parent.rb +++ b/lib/ruby/stdlib/rexml/parent.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require "rexml/child" module REXML diff --git a/lib/ruby/stdlib/rexml/parseexception.rb b/lib/ruby/stdlib/rexml/parseexception.rb index 0c4d55abdaa..7b16cd1a411 100644 --- a/lib/ruby/stdlib/rexml/parseexception.rb +++ b/lib/ruby/stdlib/rexml/parseexception.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false module REXML class ParseException < RuntimeError attr_accessor :source, :parser, :continued_exception diff --git a/lib/ruby/stdlib/rexml/parsers/baseparser.rb b/lib/ruby/stdlib/rexml/parsers/baseparser.rb index 6a08b8661d6..80eeb0fa79c 100644 --- a/lib/ruby/stdlib/rexml/parsers/baseparser.rb +++ b/lib/ruby/stdlib/rexml/parsers/baseparser.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'rexml/parseexception' require 'rexml/undefinednamespaceexception' require 'rexml/source' diff --git a/lib/ruby/stdlib/rexml/parsers/lightparser.rb b/lib/ruby/stdlib/rexml/parsers/lightparser.rb index 81041681c2e..f0601ae51b1 100644 --- a/lib/ruby/stdlib/rexml/parsers/lightparser.rb +++ b/lib/ruby/stdlib/rexml/parsers/lightparser.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'rexml/parsers/streamparser' require 'rexml/parsers/baseparser' require 'rexml/light/node' diff --git a/lib/ruby/stdlib/rexml/parsers/pullparser.rb b/lib/ruby/stdlib/rexml/parsers/pullparser.rb index 68a4ff7eaed..8c492175533 100644 --- a/lib/ruby/stdlib/rexml/parsers/pullparser.rb +++ b/lib/ruby/stdlib/rexml/parsers/pullparser.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'forwardable' require 'rexml/parseexception' diff --git a/lib/ruby/stdlib/rexml/parsers/sax2parser.rb b/lib/ruby/stdlib/rexml/parsers/sax2parser.rb index a72c0a79714..1386f69c83f 100644 --- a/lib/ruby/stdlib/rexml/parsers/sax2parser.rb +++ b/lib/ruby/stdlib/rexml/parsers/sax2parser.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'rexml/parsers/baseparser' require 'rexml/parseexception' require 'rexml/namespace' diff --git a/lib/ruby/stdlib/rexml/parsers/streamparser.rb b/lib/ruby/stdlib/rexml/parsers/streamparser.rb index 9ea65ed3d11..b271e6743e1 100644 --- a/lib/ruby/stdlib/rexml/parsers/streamparser.rb +++ b/lib/ruby/stdlib/rexml/parsers/streamparser.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require "rexml/parsers/baseparser" module REXML diff --git a/lib/ruby/stdlib/rexml/parsers/treeparser.rb b/lib/ruby/stdlib/rexml/parsers/treeparser.rb index 68edb777593..fc0993c72a5 100644 --- a/lib/ruby/stdlib/rexml/parsers/treeparser.rb +++ b/lib/ruby/stdlib/rexml/parsers/treeparser.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'rexml/validation/validationexception' require 'rexml/undefinednamespaceexception' diff --git a/lib/ruby/stdlib/rexml/parsers/ultralightparser.rb b/lib/ruby/stdlib/rexml/parsers/ultralightparser.rb index 4e2d7a81cf6..6571d119bd6 100644 --- a/lib/ruby/stdlib/rexml/parsers/ultralightparser.rb +++ b/lib/ruby/stdlib/rexml/parsers/ultralightparser.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'rexml/parsers/streamparser' require 'rexml/parsers/baseparser' diff --git a/lib/ruby/stdlib/rexml/parsers/xpathparser.rb b/lib/ruby/stdlib/rexml/parsers/xpathparser.rb index 57767fbcd1b..32b70bb7989 100644 --- a/lib/ruby/stdlib/rexml/parsers/xpathparser.rb +++ b/lib/ruby/stdlib/rexml/parsers/xpathparser.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'rexml/namespace' require 'rexml/xmltokens' diff --git a/lib/ruby/stdlib/rexml/quickpath.rb b/lib/ruby/stdlib/rexml/quickpath.rb index 9bec2158dd0..f3ad29a93a0 100644 --- a/lib/ruby/stdlib/rexml/quickpath.rb +++ b/lib/ruby/stdlib/rexml/quickpath.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'rexml/functions' require 'rexml/xmltokens' diff --git a/lib/ruby/stdlib/rexml/rexml.rb b/lib/ruby/stdlib/rexml/rexml.rb index f89951171a7..fbc0d339d88 100644 --- a/lib/ruby/stdlib/rexml/rexml.rb +++ b/lib/ruby/stdlib/rexml/rexml.rb @@ -1,4 +1,5 @@ # -*- encoding: utf-8 -*- +# frozen_string_literal: false # REXML is an XML toolkit for Ruby[http://www.ruby-lang.org], in Ruby. # # REXML is a _pure_ Ruby, XML 1.0 conforming, diff --git a/lib/ruby/stdlib/rexml/sax2listener.rb b/lib/ruby/stdlib/rexml/sax2listener.rb index 9f276eb4ed8..5afdc80890e 100644 --- a/lib/ruby/stdlib/rexml/sax2listener.rb +++ b/lib/ruby/stdlib/rexml/sax2listener.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false module REXML # A template for stream parser listeners. # Note that the declarations (attlistdecl, elementdecl, etc) are trivially diff --git a/lib/ruby/stdlib/rexml/security.rb b/lib/ruby/stdlib/rexml/security.rb index 593b652dc66..99b74607728 100644 --- a/lib/ruby/stdlib/rexml/security.rb +++ b/lib/ruby/stdlib/rexml/security.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false module REXML module Security @@entity_expansion_limit = 10_000 diff --git a/lib/ruby/stdlib/rexml/source.rb b/lib/ruby/stdlib/rexml/source.rb index cfafdbd67ac..af65cf4751a 100644 --- a/lib/ruby/stdlib/rexml/source.rb +++ b/lib/ruby/stdlib/rexml/source.rb @@ -1,4 +1,5 @@ # coding: US-ASCII +# frozen_string_literal: false require 'rexml/encoding' module REXML @@ -185,7 +186,7 @@ def scan(pattern, cons=false) # You'll notice that this next section is very similar to the same # section in match(), but just a liiittle different. This is # because it is a touch faster to do it this way with scan() - # than the way match() does it; enough faster to warrent duplicating + # than the way match() does it; enough faster to warrant duplicating # some code if rv.size == 0 until @buffer =~ pattern or @source.nil? diff --git a/lib/ruby/stdlib/rexml/streamlistener.rb b/lib/ruby/stdlib/rexml/streamlistener.rb index 3a0528c1023..30c89451795 100644 --- a/lib/ruby/stdlib/rexml/streamlistener.rb +++ b/lib/ruby/stdlib/rexml/streamlistener.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false module REXML # A template for stream parser listeners. # Note that the declarations (attlistdecl, elementdecl, etc) are trivially diff --git a/lib/ruby/stdlib/rexml/syncenumerator.rb b/lib/ruby/stdlib/rexml/syncenumerator.rb index 11609bdf3da..a9d2ad7f9c2 100644 --- a/lib/ruby/stdlib/rexml/syncenumerator.rb +++ b/lib/ruby/stdlib/rexml/syncenumerator.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false module REXML class SyncEnumerator include Enumerable diff --git a/lib/ruby/stdlib/rexml/text.rb b/lib/ruby/stdlib/rexml/text.rb index d3242ee46db..b132bab8f46 100644 --- a/lib/ruby/stdlib/rexml/text.rb +++ b/lib/ruby/stdlib/rexml/text.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'rexml/security' require 'rexml/entity' require 'rexml/doctype' diff --git a/lib/ruby/stdlib/rexml/undefinednamespaceexception.rb b/lib/ruby/stdlib/rexml/undefinednamespaceexception.rb index 8ebfdfd0a95..e522ed57eaa 100644 --- a/lib/ruby/stdlib/rexml/undefinednamespaceexception.rb +++ b/lib/ruby/stdlib/rexml/undefinednamespaceexception.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'rexml/parseexception' module REXML class UndefinedNamespaceException < ParseException diff --git a/lib/ruby/stdlib/rexml/validation/relaxng.rb b/lib/ruby/stdlib/rexml/validation/relaxng.rb index 370efd5a980..fb52438290d 100644 --- a/lib/ruby/stdlib/rexml/validation/relaxng.rb +++ b/lib/ruby/stdlib/rexml/validation/relaxng.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require "rexml/validation/validation" require "rexml/parsers/baseparser" diff --git a/lib/ruby/stdlib/rexml/validation/validation.rb b/lib/ruby/stdlib/rexml/validation/validation.rb index bab7f225a54..f0c76f976ca 100644 --- a/lib/ruby/stdlib/rexml/validation/validation.rb +++ b/lib/ruby/stdlib/rexml/validation/validation.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'rexml/validation/validationexception' module REXML diff --git a/lib/ruby/stdlib/rexml/validation/validationexception.rb b/lib/ruby/stdlib/rexml/validation/validationexception.rb index 4723d9e4d3c..78cd63fd046 100644 --- a/lib/ruby/stdlib/rexml/validation/validationexception.rb +++ b/lib/ruby/stdlib/rexml/validation/validationexception.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false module REXML module Validation class ValidationException < RuntimeError diff --git a/lib/ruby/stdlib/rexml/xmldecl.rb b/lib/ruby/stdlib/rexml/xmldecl.rb index 465e6abeb76..a37e9f3ddc6 100644 --- a/lib/ruby/stdlib/rexml/xmldecl.rb +++ b/lib/ruby/stdlib/rexml/xmldecl.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'rexml/encoding' require 'rexml/source' diff --git a/lib/ruby/stdlib/rexml/xmltokens.rb b/lib/ruby/stdlib/rexml/xmltokens.rb index 4d4dd27f2da..392b47b1d33 100644 --- a/lib/ruby/stdlib/rexml/xmltokens.rb +++ b/lib/ruby/stdlib/rexml/xmltokens.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false module REXML # Defines a number of tokens used for parsing XML. Not for general # consumption. diff --git a/lib/ruby/stdlib/rexml/xpath.rb b/lib/ruby/stdlib/rexml/xpath.rb index 0f99808defe..f1cb99baea0 100644 --- a/lib/ruby/stdlib/rexml/xpath.rb +++ b/lib/ruby/stdlib/rexml/xpath.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'rexml/functions' require 'rexml/xpath_parser' diff --git a/lib/ruby/stdlib/rexml/xpath_parser.rb b/lib/ruby/stdlib/rexml/xpath_parser.rb index ef49a32fbaf..edd11277353 100644 --- a/lib/ruby/stdlib/rexml/xpath_parser.rb +++ b/lib/ruby/stdlib/rexml/xpath_parser.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'rexml/namespace' require 'rexml/xmltokens' require 'rexml/attribute' diff --git a/lib/ruby/stdlib/rinda/rinda.rb b/lib/ruby/stdlib/rinda/rinda.rb index d9cd3782a0f..36c3503aa8a 100644 --- a/lib/ruby/stdlib/rinda/rinda.rb +++ b/lib/ruby/stdlib/rinda/rinda.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'drb/drb' require 'thread' diff --git a/lib/ruby/stdlib/rinda/ring.rb b/lib/ruby/stdlib/rinda/ring.rb index fe33420494f..9ec8a2fb2fe 100644 --- a/lib/ruby/stdlib/rinda/ring.rb +++ b/lib/ruby/stdlib/rinda/ring.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # Note: Rinda::Ring API is unstable. # diff --git a/lib/ruby/stdlib/rinda/tuplespace.rb b/lib/ruby/stdlib/rinda/tuplespace.rb index 11532fd1619..e29bd63126a 100644 --- a/lib/ruby/stdlib/rinda/tuplespace.rb +++ b/lib/ruby/stdlib/rinda/tuplespace.rb @@ -1,8 +1,8 @@ +# frozen_string_literal: false require 'monitor' require 'thread' require 'drb/drb' require 'rinda/rinda' -require 'enumerator' require 'forwardable' module Rinda diff --git a/lib/ruby/stdlib/rss.rb b/lib/ruby/stdlib/rss.rb index fd7364645bf..1c7d72b9f7e 100644 --- a/lib/ruby/stdlib/rss.rb +++ b/lib/ruby/stdlib/rss.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false ## # = RSS reading and writing # diff --git a/lib/ruby/stdlib/rss/0.9.rb b/lib/ruby/stdlib/rss/0.9.rb index 77b2de131c8..d852a6a85e9 100644 --- a/lib/ruby/stdlib/rss/0.9.rb +++ b/lib/ruby/stdlib/rss/0.9.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require "rss/parser" module RSS diff --git a/lib/ruby/stdlib/rss/1.0.rb b/lib/ruby/stdlib/rss/1.0.rb index a2d88d459e0..fb63937c5e1 100644 --- a/lib/ruby/stdlib/rss/1.0.rb +++ b/lib/ruby/stdlib/rss/1.0.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require "rss/parser" module RSS diff --git a/lib/ruby/stdlib/rss/2.0.rb b/lib/ruby/stdlib/rss/2.0.rb index 5c0caecd73e..13f9ade918a 100644 --- a/lib/ruby/stdlib/rss/2.0.rb +++ b/lib/ruby/stdlib/rss/2.0.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require "rss/0.9" module RSS diff --git a/lib/ruby/stdlib/rss/atom.rb b/lib/ruby/stdlib/rss/atom.rb index d3524231ff0..a232e358be0 100644 --- a/lib/ruby/stdlib/rss/atom.rb +++ b/lib/ruby/stdlib/rss/atom.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'rss/parser' module RSS diff --git a/lib/ruby/stdlib/rss/content.rb b/lib/ruby/stdlib/rss/content.rb index 5a2120c0671..d35311075a2 100644 --- a/lib/ruby/stdlib/rss/content.rb +++ b/lib/ruby/stdlib/rss/content.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require "rss/rss" module RSS diff --git a/lib/ruby/stdlib/rss/content/1.0.rb b/lib/ruby/stdlib/rss/content/1.0.rb index e5dc8579303..1367dfe0924 100644 --- a/lib/ruby/stdlib/rss/content/1.0.rb +++ b/lib/ruby/stdlib/rss/content/1.0.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'rss/1.0' module RSS diff --git a/lib/ruby/stdlib/rss/content/2.0.rb b/lib/ruby/stdlib/rss/content/2.0.rb index 8491a999377..3b468248ace 100644 --- a/lib/ruby/stdlib/rss/content/2.0.rb +++ b/lib/ruby/stdlib/rss/content/2.0.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require "rss/2.0" module RSS diff --git a/lib/ruby/stdlib/rss/converter.rb b/lib/ruby/stdlib/rss/converter.rb index 3e79eba4fb3..b92e35a051d 100644 --- a/lib/ruby/stdlib/rss/converter.rb +++ b/lib/ruby/stdlib/rss/converter.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require "rss/utils" module RSS diff --git a/lib/ruby/stdlib/rss/dublincore.rb b/lib/ruby/stdlib/rss/dublincore.rb index 58424141cdc..8d1a5519472 100644 --- a/lib/ruby/stdlib/rss/dublincore.rb +++ b/lib/ruby/stdlib/rss/dublincore.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require "rss/rss" module RSS diff --git a/lib/ruby/stdlib/rss/dublincore/1.0.rb b/lib/ruby/stdlib/rss/dublincore/1.0.rb index efe2f5dad48..1d96fab9b91 100644 --- a/lib/ruby/stdlib/rss/dublincore/1.0.rb +++ b/lib/ruby/stdlib/rss/dublincore/1.0.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require "rss/1.0" module RSS diff --git a/lib/ruby/stdlib/rss/dublincore/2.0.rb b/lib/ruby/stdlib/rss/dublincore/2.0.rb index a79c1e84a4d..e3011fef6a3 100644 --- a/lib/ruby/stdlib/rss/dublincore/2.0.rb +++ b/lib/ruby/stdlib/rss/dublincore/2.0.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require "rss/2.0" module RSS diff --git a/lib/ruby/stdlib/rss/dublincore/atom.rb b/lib/ruby/stdlib/rss/dublincore/atom.rb index 8db9066bb8a..0b8b11e440b 100644 --- a/lib/ruby/stdlib/rss/dublincore/atom.rb +++ b/lib/ruby/stdlib/rss/dublincore/atom.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require "rss/atom" module RSS diff --git a/lib/ruby/stdlib/rss/image.rb b/lib/ruby/stdlib/rss/image.rb index b0619141bbd..6b86ec0e5b6 100644 --- a/lib/ruby/stdlib/rss/image.rb +++ b/lib/ruby/stdlib/rss/image.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'rss/1.0' require 'rss/dublincore' diff --git a/lib/ruby/stdlib/rss/itunes.rb b/lib/ruby/stdlib/rss/itunes.rb index e6de5c1ca28..827970c2097 100644 --- a/lib/ruby/stdlib/rss/itunes.rb +++ b/lib/ruby/stdlib/rss/itunes.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'rss/2.0' module RSS diff --git a/lib/ruby/stdlib/rss/maker.rb b/lib/ruby/stdlib/rss/maker.rb index 824b2b2dcd1..33d285f6afb 100644 --- a/lib/ruby/stdlib/rss/maker.rb +++ b/lib/ruby/stdlib/rss/maker.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require "rss/rss" module RSS diff --git a/lib/ruby/stdlib/rss/maker/0.9.rb b/lib/ruby/stdlib/rss/maker/0.9.rb index c398343ec43..622a4c30b4c 100644 --- a/lib/ruby/stdlib/rss/maker/0.9.rb +++ b/lib/ruby/stdlib/rss/maker/0.9.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require "rss/0.9" require "rss/maker/base" diff --git a/lib/ruby/stdlib/rss/maker/1.0.rb b/lib/ruby/stdlib/rss/maker/1.0.rb index 1b9f7c3b796..3aee77e913b 100644 --- a/lib/ruby/stdlib/rss/maker/1.0.rb +++ b/lib/ruby/stdlib/rss/maker/1.0.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require "rss/1.0" require "rss/maker/base" diff --git a/lib/ruby/stdlib/rss/maker/2.0.rb b/lib/ruby/stdlib/rss/maker/2.0.rb index 15b1349c2a6..1f77a014d12 100644 --- a/lib/ruby/stdlib/rss/maker/2.0.rb +++ b/lib/ruby/stdlib/rss/maker/2.0.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require "rss/2.0" require "rss/maker/0.9" diff --git a/lib/ruby/stdlib/rss/maker/atom.rb b/lib/ruby/stdlib/rss/maker/atom.rb index fd3198cd9e6..e0cd7623c86 100644 --- a/lib/ruby/stdlib/rss/maker/atom.rb +++ b/lib/ruby/stdlib/rss/maker/atom.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require "rss/atom" require "rss/maker/base" diff --git a/lib/ruby/stdlib/rss/maker/base.rb b/lib/ruby/stdlib/rss/maker/base.rb index 0f2fc11103e..bc4ca841419 100644 --- a/lib/ruby/stdlib/rss/maker/base.rb +++ b/lib/ruby/stdlib/rss/maker/base.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'forwardable' require 'rss/rss' diff --git a/lib/ruby/stdlib/rss/maker/content.rb b/lib/ruby/stdlib/rss/maker/content.rb index 46c4911f737..3559a45ad02 100644 --- a/lib/ruby/stdlib/rss/maker/content.rb +++ b/lib/ruby/stdlib/rss/maker/content.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'rss/content' require 'rss/maker/1.0' require 'rss/maker/2.0' diff --git a/lib/ruby/stdlib/rss/maker/dublincore.rb b/lib/ruby/stdlib/rss/maker/dublincore.rb index 717b074fae8..988209c045b 100644 --- a/lib/ruby/stdlib/rss/maker/dublincore.rb +++ b/lib/ruby/stdlib/rss/maker/dublincore.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'rss/dublincore' require 'rss/maker/1.0' diff --git a/lib/ruby/stdlib/rss/maker/entry.rb b/lib/ruby/stdlib/rss/maker/entry.rb index f8f5469f2cb..f806cbcaae8 100644 --- a/lib/ruby/stdlib/rss/maker/entry.rb +++ b/lib/ruby/stdlib/rss/maker/entry.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require "rss/maker/atom" require "rss/maker/feed" diff --git a/lib/ruby/stdlib/rss/maker/feed.rb b/lib/ruby/stdlib/rss/maker/feed.rb index 0129218b0c5..fdef7ad6430 100644 --- a/lib/ruby/stdlib/rss/maker/feed.rb +++ b/lib/ruby/stdlib/rss/maker/feed.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require "rss/maker/atom" module RSS diff --git a/lib/ruby/stdlib/rss/maker/image.rb b/lib/ruby/stdlib/rss/maker/image.rb index 06084b4af46..1957ba86891 100644 --- a/lib/ruby/stdlib/rss/maker/image.rb +++ b/lib/ruby/stdlib/rss/maker/image.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'rss/image' require 'rss/maker/1.0' require 'rss/maker/dublincore' diff --git a/lib/ruby/stdlib/rss/maker/itunes.rb b/lib/ruby/stdlib/rss/maker/itunes.rb index 8b7420da3ce..cc1051ae0c2 100644 --- a/lib/ruby/stdlib/rss/maker/itunes.rb +++ b/lib/ruby/stdlib/rss/maker/itunes.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'rss/itunes' require 'rss/maker/2.0' diff --git a/lib/ruby/stdlib/rss/maker/slash.rb b/lib/ruby/stdlib/rss/maker/slash.rb index 27adef38329..3bd82d30570 100644 --- a/lib/ruby/stdlib/rss/maker/slash.rb +++ b/lib/ruby/stdlib/rss/maker/slash.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'rss/slash' require 'rss/maker/1.0' diff --git a/lib/ruby/stdlib/rss/maker/syndication.rb b/lib/ruby/stdlib/rss/maker/syndication.rb index b81230457ce..840b70229ab 100644 --- a/lib/ruby/stdlib/rss/maker/syndication.rb +++ b/lib/ruby/stdlib/rss/maker/syndication.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'rss/syndication' require 'rss/maker/1.0' diff --git a/lib/ruby/stdlib/rss/maker/taxonomy.rb b/lib/ruby/stdlib/rss/maker/taxonomy.rb index 13ae9aa8052..76a2d1600d4 100644 --- a/lib/ruby/stdlib/rss/maker/taxonomy.rb +++ b/lib/ruby/stdlib/rss/maker/taxonomy.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'rss/taxonomy' require 'rss/maker/1.0' require 'rss/maker/dublincore' diff --git a/lib/ruby/stdlib/rss/maker/trackback.rb b/lib/ruby/stdlib/rss/maker/trackback.rb index 00f001cb855..f97691c608e 100644 --- a/lib/ruby/stdlib/rss/maker/trackback.rb +++ b/lib/ruby/stdlib/rss/maker/trackback.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'rss/trackback' require 'rss/maker/1.0' require 'rss/maker/2.0' diff --git a/lib/ruby/stdlib/rss/parser.rb b/lib/ruby/stdlib/rss/parser.rb index 1b6e4e95965..a9842e6d408 100644 --- a/lib/ruby/stdlib/rss/parser.rb +++ b/lib/ruby/stdlib/rss/parser.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require "forwardable" require "open-uri" diff --git a/lib/ruby/stdlib/rss/rexmlparser.rb b/lib/ruby/stdlib/rss/rexmlparser.rb index a5a2a2edbe4..ef0595e447f 100644 --- a/lib/ruby/stdlib/rss/rexmlparser.rb +++ b/lib/ruby/stdlib/rss/rexmlparser.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require "rexml/document" require "rexml/streamlistener" diff --git a/lib/ruby/stdlib/rss/rss.rb b/lib/ruby/stdlib/rss/rss.rb index 4f6732b4d25..1bb0f6e8265 100644 --- a/lib/ruby/stdlib/rss/rss.rb +++ b/lib/ruby/stdlib/rss/rss.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require "time" class Time @@ -53,7 +54,7 @@ def w3cdtf if usec.zero? fraction_digits = 0 else - fraction_digits = Math.log10(usec.to_s.sub(/0*$/, '').to_i).floor + 1 + fraction_digits = strftime('%6N').index(/0*\z/) end xmlschema(fraction_digits) end diff --git a/lib/ruby/stdlib/rss/slash.rb b/lib/ruby/stdlib/rss/slash.rb index 65c61142e13..0055fc9f885 100644 --- a/lib/ruby/stdlib/rss/slash.rb +++ b/lib/ruby/stdlib/rss/slash.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'rss/1.0' module RSS diff --git a/lib/ruby/stdlib/rss/syndication.rb b/lib/ruby/stdlib/rss/syndication.rb index 77a84b9a2ae..8f9620f9f3f 100644 --- a/lib/ruby/stdlib/rss/syndication.rb +++ b/lib/ruby/stdlib/rss/syndication.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require "rss/1.0" module RSS @@ -47,7 +48,7 @@ def sy_updatePeriod=(new_value) private SY_UPDATEPERIOD_AVAILABLE_VALUES = %w(hourly daily weekly monthly yearly) - def validate_sy_updatePeriod(value) + def validate_sy_updatePeriod(value) # :nodoc: unless SY_UPDATEPERIOD_AVAILABLE_VALUES.include?(value) raise NotAvailableValueError.new("updatePeriod", value) end diff --git a/lib/ruby/stdlib/rss/taxonomy.rb b/lib/ruby/stdlib/rss/taxonomy.rb index b7fbe6b0de0..b7ea219e8cb 100644 --- a/lib/ruby/stdlib/rss/taxonomy.rb +++ b/lib/ruby/stdlib/rss/taxonomy.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require "rss/1.0" require "rss/dublincore" diff --git a/lib/ruby/stdlib/rss/trackback.rb b/lib/ruby/stdlib/rss/trackback.rb index 577bf0cef7c..1a3c3849b57 100644 --- a/lib/ruby/stdlib/rss/trackback.rb +++ b/lib/ruby/stdlib/rss/trackback.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # This file contains the implementation of trackbacks. It is entirely internal # and not useful to outside developers. require 'rss/1.0' diff --git a/lib/ruby/stdlib/rss/utils.rb b/lib/ruby/stdlib/rss/utils.rb index b420e6b24cd..ce7dbf1b02b 100644 --- a/lib/ruby/stdlib/rss/utils.rb +++ b/lib/ruby/stdlib/rss/utils.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false module RSS ## diff --git a/lib/ruby/stdlib/rss/xml-stylesheet.rb b/lib/ruby/stdlib/rss/xml-stylesheet.rb index 96ee95050ec..be9cfaaf64b 100644 --- a/lib/ruby/stdlib/rss/xml-stylesheet.rb +++ b/lib/ruby/stdlib/rss/xml-stylesheet.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require "rss/utils" module RSS diff --git a/lib/ruby/stdlib/rss/xml.rb b/lib/ruby/stdlib/rss/xml.rb index 1ae878b7721..cda8668044f 100644 --- a/lib/ruby/stdlib/rss/xml.rb +++ b/lib/ruby/stdlib/rss/xml.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require "rss/utils" module RSS diff --git a/lib/ruby/stdlib/rss/xmlparser.rb b/lib/ruby/stdlib/rss/xmlparser.rb index 46df94a3203..cb2dd2afdd9 100644 --- a/lib/ruby/stdlib/rss/xmlparser.rb +++ b/lib/ruby/stdlib/rss/xmlparser.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false begin require "xml/parser" rescue LoadError diff --git a/lib/ruby/stdlib/rss/xmlscanner.rb b/lib/ruby/stdlib/rss/xmlscanner.rb index 1cdf81c0c3b..6e3b13d2f57 100644 --- a/lib/ruby/stdlib/rss/xmlscanner.rb +++ b/lib/ruby/stdlib/rss/xmlscanner.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'xmlscan/scanner' require 'stringio' diff --git a/lib/ruby/stdlib/scanf.rb b/lib/ruby/stdlib/scanf.rb index b6c52876640..a98c3595735 100644 --- a/lib/ruby/stdlib/scanf.rb +++ b/lib/ruby/stdlib/scanf.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # scanf for Ruby # #-- @@ -471,8 +472,7 @@ def letter end def width - w = @spec_string[/%\*?(\d+)/, 1] - w && w.to_i + @spec_string[/%\*?(\d+)/, 1]&.to_i end def mid_match? @@ -610,7 +610,7 @@ class IO # # See Scanf for details on creating a format string. # - # You will need to require 'scanf' to use use IO#scanf. + # You will need to require 'scanf' to use IO#scanf. def scanf(str,&b) #:yield: current_match return block_scanf(str,&b) if b return [] unless str.size > 0 diff --git a/lib/ruby/stdlib/set.rb b/lib/ruby/stdlib/set.rb index f00cfac0c56..a8f4345f352 100644 --- a/lib/ruby/stdlib/set.rb +++ b/lib/ruby/stdlib/set.rb @@ -1,4 +1,6 @@ #-- +# frozen_string_literal: true +# # set.rb - defines the Set class #++ # Copyright (c) 2002-2013 Akinori MUSHA @@ -78,7 +80,7 @@ def self.[](*ary) # If a block is given, the elements of enum are preprocessed by the # given block. def initialize(enum = nil, &block) # :yields: o - @hash ||= Hash.new + @hash ||= Hash.new(false) enum.nil? and return @@ -151,7 +153,7 @@ def replace(enum) @hash.replace(enum.instance_variable_get(:@hash)) self else - do_with_enum(enum) + do_with_enum(enum) # make sure enum is enumerable before calling clear clear merge(enum) end @@ -200,48 +202,69 @@ def flatten # Equivalent to Set#flatten, but replaces the receiver with the # result in place. Returns nil if no modifications were made. def flatten! - if detect { |e| e.is_a?(Set) } - replace(flatten()) - else - nil - end + replace(flatten()) if any? { |e| e.is_a?(Set) } end # Returns true if the set contains the given object. + # + # Note that include? and member? do not test member + # equality using == as do other Enumerables. + # + # See also Enumerable#include? def include?(o) - @hash.include?(o) + @hash[o] end alias member? include? # Returns true if the set is a superset of the given set. def superset?(set) - set.is_a?(Set) or raise ArgumentError, "value must be a set" - return false if size < set.size - set.all? { |o| include?(o) } + case + when set.instance_of?(self.class) + @hash >= set.instance_variable_get(:@hash) + when set.is_a?(Set) + size >= set.size && set.all? { |o| include?(o) } + else + raise ArgumentError, "value must be a set" + end end alias >= superset? # Returns true if the set is a proper superset of the given set. def proper_superset?(set) - set.is_a?(Set) or raise ArgumentError, "value must be a set" - return false if size <= set.size - set.all? { |o| include?(o) } + case + when set.instance_of?(self.class) + @hash > set.instance_variable_get(:@hash) + when set.is_a?(Set) + size > set.size && set.all? { |o| include?(o) } + else + raise ArgumentError, "value must be a set" + end end alias > proper_superset? # Returns true if the set is a subset of the given set. def subset?(set) - set.is_a?(Set) or raise ArgumentError, "value must be a set" - return false if set.size < size - all? { |o| set.include?(o) } + case + when set.instance_of?(self.class) + @hash <= set.instance_variable_get(:@hash) + when set.is_a?(Set) + size <= set.size && all? { |o| set.include?(o) } + else + raise ArgumentError, "value must be a set" + end end alias <= subset? # Returns true if the set is a proper subset of the given set. def proper_subset?(set) - set.is_a?(Set) or raise ArgumentError, "value must be a set" - return false if set.size <= size - all? { |o| set.include?(o) } + case + when set.instance_of?(self.class) + @hash < set.instance_variable_get(:@hash) + when set.is_a?(Set) + size < set.size && all? { |o| set.include?(o) } + else + raise ArgumentError, "value must be a set" + end end alias < proper_subset? @@ -279,7 +302,7 @@ def disjoint?(set) # the element as parameter. Returns an enumerator if no block is # given. def each(&block) - block or return enum_for(__method__) + block or return enum_for(__method__) { size } @hash.each_key(&block) self end @@ -295,11 +318,7 @@ def add(o) # Adds the given object to the set and returns self. If the # object is already in the set, returns nil. def add?(o) - if include?(o) - nil - else - add(o) - end + add(o) unless include?(o) end # Deletes the given object from the set and returns self. Use +subtract+ to @@ -312,11 +331,7 @@ def delete(o) # Deletes the given object from the set and returns self. If the # object is not in the set, returns nil. def delete?(o) - if include?(o) - delete(o) - else - nil - end + delete(o) if include?(o) end # Deletes every element of the set for which block evaluates to @@ -342,9 +357,7 @@ def keep_if # Replaces the elements with ones returned by collect(). def collect! block_given? or return enum_for(__method__) - set = self.class.new - each { |o| set << yield(o) } - replace(set) + replace(self.class.new(self) { |o| yield(o) }) end alias map! collect! @@ -354,7 +367,7 @@ def reject!(&block) block or return enum_for(__method__) n = size delete_if(&block) - size == n ? nil : self + self if size != n end # Equivalent to Set#keep_if, but returns nil if no changes were @@ -363,7 +376,7 @@ def select!(&block) block or return enum_for(__method__) n = size keep_if(&block) - size == n ? nil : self + self if size != n end # Merges the elements of the given enumerable object to the set and @@ -414,7 +427,7 @@ def &(enum) # ((set | enum) - (set & enum)). def ^(enum) n = Set.new(enum) - each { |o| if n.include?(o) then n.delete(o) else n.add(o) end } + each { |o| n.add(o) unless n.delete?(o) } n end @@ -460,8 +473,7 @@ def classify # :yields: o h = {} each { |i| - x = yield(i) - (h[x] ||= self.class.new).add(i) + (h[yield(i)] ||= self.class.new).add(i) } h @@ -524,8 +536,8 @@ def inspect return sprintf('#<%s: {...}>', self.class.name) end + ids << object_id begin - ids << object_id return sprintf('#<%s: {%s}>', self.class, to_a.inspect[1..-2]) ensure ids.pop @@ -658,7 +670,7 @@ def merge(enum) end def each(&block) - block or return enum_for(__method__) + block or return enum_for(__method__) { size } to_a.each(&block) self end diff --git a/lib/ruby/stdlib/shell.rb b/lib/ruby/stdlib/shell.rb index db2d6879083..bf389795b78 100644 --- a/lib/ruby/stdlib/shell.rb +++ b/lib/ruby/stdlib/shell.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # shell.rb - # $Release Version: 0.7 $ diff --git a/lib/ruby/stdlib/shell/builtin-command.rb b/lib/ruby/stdlib/shell/builtin-command.rb index 80a0ce5534b..c76fa81ee13 100644 --- a/lib/ruby/stdlib/shell/builtin-command.rb +++ b/lib/ruby/stdlib/shell/builtin-command.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # shell/builtin-command.rb - # $Release Version: 0.7 $ diff --git a/lib/ruby/stdlib/shell/command-processor.rb b/lib/ruby/stdlib/shell/command-processor.rb index 13bc50c3fe0..2239ca98f63 100644 --- a/lib/ruby/stdlib/shell/command-processor.rb +++ b/lib/ruby/stdlib/shell/command-processor.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # shell/command-controller.rb - # $Release Version: 0.7 $ diff --git a/lib/ruby/stdlib/shell/error.rb b/lib/ruby/stdlib/shell/error.rb index 2701338b5a0..677c424baf6 100644 --- a/lib/ruby/stdlib/shell/error.rb +++ b/lib/ruby/stdlib/shell/error.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # shell/error.rb - # $Release Version: 0.7 $ diff --git a/lib/ruby/stdlib/shell/filter.rb b/lib/ruby/stdlib/shell/filter.rb index 9fae07d23ec..c1f4b28a45e 100644 --- a/lib/ruby/stdlib/shell/filter.rb +++ b/lib/ruby/stdlib/shell/filter.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # shell/filter.rb - # $Release Version: 0.7 $ diff --git a/lib/ruby/stdlib/shell/process-controller.rb b/lib/ruby/stdlib/shell/process-controller.rb index d0cad0ec056..a100727aa63 100644 --- a/lib/ruby/stdlib/shell/process-controller.rb +++ b/lib/ruby/stdlib/shell/process-controller.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # shell/process-controller.rb - # $Release Version: 0.7 $ diff --git a/lib/ruby/stdlib/shell/system-command.rb b/lib/ruby/stdlib/shell/system-command.rb index 1fe37333d64..2a8ffd6ed92 100644 --- a/lib/ruby/stdlib/shell/system-command.rb +++ b/lib/ruby/stdlib/shell/system-command.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # shell/system-command.rb - # $Release Version: 0.7 $ diff --git a/lib/ruby/stdlib/shell/version.rb b/lib/ruby/stdlib/shell/version.rb index 2568627e2b0..bb4e7dfb8ed 100644 --- a/lib/ruby/stdlib/shell/version.rb +++ b/lib/ruby/stdlib/shell/version.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # version.rb - shell version definition file # $Release Version: 0.7$ diff --git a/lib/ruby/stdlib/shellwords.rb b/lib/ruby/stdlib/shellwords.rb index 2b72750a6b1..0030f0784fb 100644 --- a/lib/ruby/stdlib/shellwords.rb +++ b/lib/ruby/stdlib/shellwords.rb @@ -1,3 +1,4 @@ +# frozen-string-literal: true ## # == Manipulates strings like the UNIX Bourne shell # @@ -63,20 +64,27 @@ module Shellwords # argv = Shellwords.split('here are "two words"') # argv #=> ["here", "are", "two words"] # + # Note, however, that this is not a command line parser. Shell + # metacharacters except for the single and double quotes and + # backslash are not treated as such. + # + # argv = Shellwords.split('ruby my_prog.rb | less') + # argv #=> ["ruby", "my_prog.rb", "|", "less"] + # # String#shellsplit is a shortcut for this function. # # argv = 'here are "two words"'.shellsplit # argv #=> ["here", "are", "two words"] def shellsplit(line) words = [] - field = '' + field = String.new line.scan(/\G\s*(?>([^\s\\\'\"]+)|'([^\']*)'|"((?:[^\"\\]|\\.)*)"|(\\.?)|(\S))(\s|\z)?/m) do |word, sq, dq, esc, garbage, sep| raise ArgumentError, "Unmatched double quote: #{line.inspect}" if garbage field << (word || sq || (dq || esc).gsub(/\\(.)/, '\\1')) if sep words << field - field = '' + field = String.new end end words @@ -124,7 +132,7 @@ def shellescape(str) str = str.to_s # An empty argument will be skipped, so return empty quotes. - return "''" if str.empty? + return "''".dup if str.empty? str = str.dup diff --git a/lib/ruby/stdlib/singleton.rb b/lib/ruby/stdlib/singleton.rb index be1f7ff6cac..2ee9b5b3b55 100644 --- a/lib/ruby/stdlib/singleton.rb +++ b/lib/ruby/stdlib/singleton.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'thread' # The Singleton module implements the Singleton pattern. diff --git a/lib/ruby/stdlib/socket.rb b/lib/ruby/stdlib/socket.rb index aa6210f9894..576601509ae 100644 --- a/lib/ruby/stdlib/socket.rb +++ b/lib/ruby/stdlib/socket.rb @@ -1,4 +1,7 @@ -require 'socket.jar' +# frozen_string_literal: true + +require 'socket.so' +require 'io/wait' class Addrinfo # creates an Addrinfo object from the arguments. @@ -50,17 +53,13 @@ def connect_internal(local_addrinfo, timeout=nil) # :yields: socket sock.ipv6only! if self.ipv6? sock.bind local_addrinfo if local_addrinfo if timeout - begin - sock.connect_nonblock(self) - rescue IO::WaitWritable - if !IO.select(nil, [sock], nil, timeout) + case sock.connect_nonblock(self, exception: false) + when 0 # success or EISCONN, other errors raise + break + when :wait_writable + sock.wait_writable(timeout) or raise Errno::ETIMEDOUT, 'user specified timeout' - end - begin - sock.connect_nonblock(self) # check connection failure - rescue Errno::EISCONN - end - end + end while true else sock.connect(self) end @@ -275,6 +274,178 @@ def connect_address end addr end + + # call-seq: + # basicsocket.sendmsg(mesg, flags=0, dest_sockaddr=nil, *controls) => numbytes_sent + # + # sendmsg sends a message using sendmsg(2) system call in blocking manner. + # + # _mesg_ is a string to send. + # + # _flags_ is bitwise OR of MSG_* constants such as Socket::MSG_OOB. + # + # _dest_sockaddr_ is a destination socket address for connection-less socket. + # It should be a sockaddr such as a result of Socket.sockaddr_in. + # An Addrinfo object can be used too. + # + # _controls_ is a list of ancillary data. + # The element of _controls_ should be Socket::AncillaryData or + # 3-elements array. + # The 3-element array should contains cmsg_level, cmsg_type and data. + # + # The return value, _numbytes_sent_ is an integer which is the number of bytes sent. + # + # sendmsg can be used to implement send_io as follows: + # + # # use Socket::AncillaryData. + # ancdata = Socket::AncillaryData.int(:UNIX, :SOCKET, :RIGHTS, io.fileno) + # sock.sendmsg("a", 0, nil, ancdata) + # + # # use 3-element array. + # ancdata = [:SOCKET, :RIGHTS, [io.fileno].pack("i!")] + # sock.sendmsg("\0", 0, nil, ancdata) + def sendmsg(mesg, flags = 0, dest_sockaddr = nil, *controls) + __sendmsg(mesg, flags, dest_sockaddr, controls) + end + + # call-seq: + # basicsocket.sendmsg_nonblock(mesg, flags=0, dest_sockaddr=nil, *controls, opts={}) => numbytes_sent + # + # sendmsg_nonblock sends a message using sendmsg(2) system call in non-blocking manner. + # + # It is similar to BasicSocket#sendmsg + # but the non-blocking flag is set before the system call + # and it doesn't retry the system call. + # + # By specifying `exception: false`, the _opts_ hash allows you to indicate + # that sendmsg_nonblock should not raise an IO::WaitWritable exception, but + # return the symbol :wait_writable instead. + def sendmsg_nonblock(mesg, flags = 0, dest_sockaddr = nil, *controls, + exception: true) + __sendmsg_nonblock(mesg, flags, dest_sockaddr, controls, exception) + end + + # call-seq: + # basicsocket.recv_nonblock(maxlen [, flags [, buf [, options ]]]) => mesg + # + # Receives up to _maxlen_ bytes from +socket+ using recvfrom(2) after + # O_NONBLOCK is set for the underlying file descriptor. + # _flags_ is zero or more of the +MSG_+ options. + # The result, _mesg_, is the data received. + # + # When recvfrom(2) returns 0, Socket#recv_nonblock returns + # an empty string as data. + # The meaning depends on the socket: EOF on TCP, empty packet on UDP, etc. + # + # === Parameters + # * +maxlen+ - the number of bytes to receive from the socket + # * +flags+ - zero or more of the +MSG_+ options + # * +options+ - keyword hash, supporting `exception: false` + # + # === Example + # serv = TCPServer.new("127.0.0.1", 0) + # af, port, host, addr = serv.addr + # c = TCPSocket.new(addr, port) + # s = serv.accept + # c.send "aaa", 0 + # begin # emulate blocking recv. + # p s.recv_nonblock(10) #=> "aaa" + # rescue IO::WaitReadable + # IO.select([s]) + # retry + # end + # + # Refer to Socket#recvfrom for the exceptions that may be thrown if the call + # to _recv_nonblock_ fails. + # + # BasicSocket#recv_nonblock may raise any error corresponding to recvfrom(2) failure, + # including Errno::EWOULDBLOCK. + # + # If the exception is Errno::EWOULDBLOCK or Errno::EAGAIN, + # it is extended by IO::WaitReadable. + # So IO::WaitReadable can be used to rescue the exceptions for retrying recv_nonblock. + # + # By specifying `exception: false`, the options hash allows you to indicate + # that recv_nonblock should not raise an IO::WaitWritable exception, but + # return the symbol :wait_writable instead. + # + # === See + # * Socket#recvfrom + def recv_nonblock(len, flag = 0, str = nil, exception: true) + __recv_nonblock(len, flag, str, exception) + end + + # call-seq: + # basicsocket.recvmsg(maxmesglen=nil, flags=0, maxcontrollen=nil, opts={}) => [mesg, sender_addrinfo, rflags, *controls] + # + # recvmsg receives a message using recvmsg(2) system call in blocking manner. + # + # _maxmesglen_ is the maximum length of mesg to receive. + # + # _flags_ is bitwise OR of MSG_* constants such as Socket::MSG_PEEK. + # + # _maxcontrollen_ is the maximum length of controls (ancillary data) to receive. + # + # _opts_ is option hash. + # Currently :scm_rights=>bool is the only option. + # + # :scm_rights option specifies that application expects SCM_RIGHTS control message. + # If the value is nil or false, application don't expects SCM_RIGHTS control message. + # In this case, recvmsg closes the passed file descriptors immediately. + # This is the default behavior. + # + # If :scm_rights value is neither nil nor false, application expects SCM_RIGHTS control message. + # In this case, recvmsg creates IO objects for each file descriptors for + # Socket::AncillaryData#unix_rights method. + # + # The return value is 4-elements array. + # + # _mesg_ is a string of the received message. + # + # _sender_addrinfo_ is a sender socket address for connection-less socket. + # It is an Addrinfo object. + # For connection-oriented socket such as TCP, sender_addrinfo is platform dependent. + # + # _rflags_ is a flags on the received message which is bitwise OR of MSG_* constants such as Socket::MSG_TRUNC. + # It will be nil if the system uses 4.3BSD style old recvmsg system call. + # + # _controls_ is ancillary data which is an array of Socket::AncillaryData objects such as: + # + # # + # + # _maxmesglen_ and _maxcontrollen_ can be nil. + # In that case, the buffer will be grown until the message is not truncated. + # Internally, MSG_PEEK is used. + # Buffer full and MSG_CTRUNC are checked for truncation. + # + # recvmsg can be used to implement recv_io as follows: + # + # mesg, sender_sockaddr, rflags, *controls = sock.recvmsg(:scm_rights=>true) + # controls.each {|ancdata| + # if ancdata.cmsg_is?(:SOCKET, :RIGHTS) + # return ancdata.unix_rights[0] + # end + # } + def recvmsg(dlen = nil, flags = 0, clen = nil, scm_rights: false) + __recvmsg(dlen, flags, clen, scm_rights) + end + + # call-seq: + # basicsocket.recvmsg_nonblock(maxdatalen=nil, flags=0, maxcontrollen=nil, opts={}) => [data, sender_addrinfo, rflags, *controls] + # + # recvmsg receives a message using recvmsg(2) system call in non-blocking manner. + # + # It is similar to BasicSocket#recvmsg + # but non-blocking flag is set before the system call + # and it doesn't retry the system call. + # + # By specifying `exception: false`, the _opts_ hash allows you to indicate + # that recvmsg_nonblock should not raise an IO::WaitWritable exception, but + # return the symbol :wait_writable instead. + def recvmsg_nonblock(dlen = nil, flags = 0, clen = nil, + scm_rights: false, exception: true) + __recvmsg_nonblock(dlen, flags, clen, scm_rights, exception) + end end class Socket < BasicSocket @@ -285,6 +456,133 @@ def ipv6only! end end + # call-seq: + # socket.recvfrom_nonblock(maxlen[, flags[, outbuf[, opts]]]) => [mesg, sender_addrinfo] + # + # Receives up to _maxlen_ bytes from +socket+ using recvfrom(2) after + # O_NONBLOCK is set for the underlying file descriptor. + # _flags_ is zero or more of the +MSG_+ options. + # The first element of the results, _mesg_, is the data received. + # The second element, _sender_addrinfo_, contains protocol-specific address + # information of the sender. + # + # When recvfrom(2) returns 0, Socket#recvfrom_nonblock returns + # an empty string as data. + # The meaning depends on the socket: EOF on TCP, empty packet on UDP, etc. + # + # === Parameters + # * +maxlen+ - the maximum number of bytes to receive from the socket + # * +flags+ - zero or more of the +MSG_+ options + # * +outbuf+ - destination String buffer + # * +opts+ - keyword hash, supporting `exception: false` + # + # === Example + # # In one file, start this first + # require 'socket' + # include Socket::Constants + # socket = Socket.new(AF_INET, SOCK_STREAM, 0) + # sockaddr = Socket.sockaddr_in(2200, 'localhost') + # socket.bind(sockaddr) + # socket.listen(5) + # client, client_addrinfo = socket.accept + # begin # emulate blocking recvfrom + # pair = client.recvfrom_nonblock(20) + # rescue IO::WaitReadable + # IO.select([client]) + # retry + # end + # data = pair[0].chomp + # puts "I only received 20 bytes '#{data}'" + # sleep 1 + # socket.close + # + # # In another file, start this second + # require 'socket' + # include Socket::Constants + # socket = Socket.new(AF_INET, SOCK_STREAM, 0) + # sockaddr = Socket.sockaddr_in(2200, 'localhost') + # socket.connect(sockaddr) + # socket.puts "Watch this get cut short!" + # socket.close + # + # Refer to Socket#recvfrom for the exceptions that may be thrown if the call + # to _recvfrom_nonblock_ fails. + # + # Socket#recvfrom_nonblock may raise any error corresponding to recvfrom(2) failure, + # including Errno::EWOULDBLOCK. + # + # If the exception is Errno::EWOULDBLOCK or Errno::EAGAIN, + # it is extended by IO::WaitReadable. + # So IO::WaitReadable can be used to rescue the exceptions for retrying + # recvfrom_nonblock. + # + # By specifying `exception: false`, the options hash allows you to indicate + # that accept_nonblock should not raise an IO::WaitReadable exception, but + # return the symbol :wait_readable instead. + # + # === See + # * Socket#recvfrom + def recvfrom_nonblock(len, flag = 0, str = nil, exception: true) + __recvfrom_nonblock(len, flag, str, exception) + end + + # call-seq: + # socket.accept_nonblock([options]) => [client_socket, client_addrinfo] + # + # Accepts an incoming connection using accept(2) after + # O_NONBLOCK is set for the underlying file descriptor. + # It returns an array containing the accepted socket + # for the incoming connection, _client_socket_, + # and an Addrinfo, _client_addrinfo_. + # + # === Example + # # In one script, start this first + # require 'socket' + # include Socket::Constants + # socket = Socket.new(AF_INET, SOCK_STREAM, 0) + # sockaddr = Socket.sockaddr_in(2200, 'localhost') + # socket.bind(sockaddr) + # socket.listen(5) + # begin # emulate blocking accept + # client_socket, client_addrinfo = socket.accept_nonblock + # rescue IO::WaitReadable, Errno::EINTR + # IO.select([socket]) + # retry + # end + # puts "The client said, '#{client_socket.readline.chomp}'" + # client_socket.puts "Hello from script one!" + # socket.close + # + # # In another script, start this second + # require 'socket' + # include Socket::Constants + # socket = Socket.new(AF_INET, SOCK_STREAM, 0) + # sockaddr = Socket.sockaddr_in(2200, 'localhost') + # socket.connect(sockaddr) + # socket.puts "Hello from script 2." + # puts "The server said, '#{socket.readline.chomp}'" + # socket.close + # + # Refer to Socket#accept for the exceptions that may be thrown if the call + # to _accept_nonblock_ fails. + # + # Socket#accept_nonblock may raise any error corresponding to accept(2) failure, + # including Errno::EWOULDBLOCK. + # + # If the exception is Errno::EWOULDBLOCK, Errno::EAGAIN, Errno::ECONNABORTED or Errno::EPROTO, + # it is extended by IO::WaitReadable. + # So IO::WaitReadable can be used to rescue the exceptions for retrying accept_nonblock. + # + # By specifying `exception: false`, the options hash allows you to indicate + # that accept_nonblock should not raise an IO::WaitReadable exception, but + # return the symbol :wait_readable instead. + # + # === See + # * Socket#accept + def accept_nonblock(exception: true) + __accept_nonblock(exception) + end + # :call-seq: # Socket.tcp(host, port, local_host=nil, local_port=nil, [opts]) {|socket| ... } # Socket.tcp(host, port, local_host=nil, local_port=nil, [opts]) @@ -501,11 +799,8 @@ def self.accept_loop(*sockets) # :yield: socket, client_addrinfo loop { readable, _, _ = IO.select(sockets) readable.each {|r| - begin - sock, addr = r.accept_nonblock - rescue IO::WaitReadable - next - end + sock, addr = r.accept_nonblock(exception: false) + next if sock == :wait_readable yield sock, addr } } @@ -669,11 +964,8 @@ def self.udp_server_sockets(host=nil, port) # def self.udp_server_recv(sockets) sockets.each {|r| - begin - msg, sender_addrinfo, _, *controls = r.recvmsg_nonblock - rescue IO::WaitReadable - next - end + msg, sender_addrinfo, _, *controls = r.recvmsg_nonblock(exception: false) + next if msg == :wait_readable ai = r.local_address if ai.ipv6? and pktinfo = controls.find {|c| c.cmsg_is?(:IPV6, :PKTINFO) } ai = Addrinfo.udp(pktinfo.ipv6_pktinfo_addr.ip_address, ai.ip_port) @@ -750,7 +1042,7 @@ def initialize(remote_address, local_address, &reply_proc) attr_reader :local_address def inspect # :nodoc: - "\#<#{self.class}: #{@remote_address.inspect_sockaddr} to #{@local_address.inspect_sockaddr}>" + "\#<#{self.class}: #{@remote_address.inspect_sockaddr} to #{@local_address.inspect_sockaddr}>".dup end # Sends the String +msg+ to the source @@ -810,7 +1102,7 @@ def self.unix_server_socket(path) st = File.lstat(path) rescue Errno::ENOENT end - if st && st.socket? && st.owned? + if st&.socket? && st.owned? File.unlink path end end @@ -867,5 +1159,193 @@ def self.unix_server_loop(path, &b) # :yield: socket, client_addrinfo } end + # call-seq: + # socket.connect_nonblock(remote_sockaddr, [options]) => 0 + # + # Requests a connection to be made on the given +remote_sockaddr+ after + # O_NONBLOCK is set for the underlying file descriptor. + # Returns 0 if successful, otherwise an exception is raised. + # + # === Parameter + # # +remote_sockaddr+ - the +struct+ sockaddr contained in a string or Addrinfo object + # + # === Example: + # # Pull down Google's web page + # require 'socket' + # include Socket::Constants + # socket = Socket.new(AF_INET, SOCK_STREAM, 0) + # sockaddr = Socket.sockaddr_in(80, 'www.google.com') + # begin # emulate blocking connect + # socket.connect_nonblock(sockaddr) + # rescue IO::WaitWritable + # IO.select(nil, [socket]) # wait 3-way handshake completion + # begin + # socket.connect_nonblock(sockaddr) # check connection failure + # rescue Errno::EISCONN + # end + # end + # socket.write("GET / HTTP/1.0\r\n\r\n") + # results = socket.read + # + # Refer to Socket#connect for the exceptions that may be thrown if the call + # to _connect_nonblock_ fails. + # + # Socket#connect_nonblock may raise any error corresponding to connect(2) failure, + # including Errno::EINPROGRESS. + # + # If the exception is Errno::EINPROGRESS, + # it is extended by IO::WaitWritable. + # So IO::WaitWritable can be used to rescue the exceptions for retrying connect_nonblock. + # + # By specifying `exception: false`, the options hash allows you to indicate + # that connect_nonblock should not raise an IO::WaitWritable exception, but + # return the symbol :wait_writable instead. + # + # === See + # # Socket#connect + def connect_nonblock(addr, exception: true) + __connect_nonblock(addr, exception) + end end +class UDPSocket < IPSocket + + # call-seq: + # udpsocket.recvfrom_nonblock(maxlen [, flags[, outbuf [, options]]]) => [mesg, sender_inet_addr] + # + # Receives up to _maxlen_ bytes from +udpsocket+ using recvfrom(2) after + # O_NONBLOCK is set for the underlying file descriptor. + # If _maxlen_ is omitted, its default value is 65536. + # _flags_ is zero or more of the +MSG_+ options. + # The first element of the results, _mesg_, is the data received. + # The second element, _sender_inet_addr_, is an array to represent the sender address. + # + # When recvfrom(2) returns 0, + # Socket#recvfrom_nonblock returns an empty string as data. + # It means an empty packet. + # + # === Parameters + # * +maxlen+ - the number of bytes to receive from the socket + # * +flags+ - zero or more of the +MSG_+ options + # * +outbuf+ - destination String buffer + # * +options+ - keyword hash, supporting `exception: false` + # + # === Example + # require 'socket' + # s1 = UDPSocket.new + # s1.bind("127.0.0.1", 0) + # s2 = UDPSocket.new + # s2.bind("127.0.0.1", 0) + # s2.connect(*s1.addr.values_at(3,1)) + # s1.connect(*s2.addr.values_at(3,1)) + # s1.send "aaa", 0 + # begin # emulate blocking recvfrom + # p s2.recvfrom_nonblock(10) #=> ["aaa", ["AF_INET", 33302, "localhost.localdomain", "127.0.0.1"]] + # rescue IO::WaitReadable + # IO.select([s2]) + # retry + # end + # + # Refer to Socket#recvfrom for the exceptions that may be thrown if the call + # to _recvfrom_nonblock_ fails. + # + # UDPSocket#recvfrom_nonblock may raise any error corresponding to recvfrom(2) failure, + # including Errno::EWOULDBLOCK. + # + # If the exception is Errno::EWOULDBLOCK or Errno::EAGAIN, + # it is extended by IO::WaitReadable. + # So IO::WaitReadable can be used to rescue the exceptions for retrying recvfrom_nonblock. + # + # By specifying `exception: false`, the options hash allows you to indicate + # that recvmsg_nonblock should not raise an IO::WaitWritable exception, but + # return the symbol :wait_writable instead. + # + # === See + # * Socket#recvfrom + def recvfrom_nonblock(len, flag = 0, outbuf = nil, exception: true) + __recvfrom_nonblock(len, flag, outbuf, exception) + end +end + +class TCPServer < TCPSocket + + # call-seq: + # tcpserver.accept_nonblock([options]) => tcpsocket + # + # Accepts an incoming connection using accept(2) after + # O_NONBLOCK is set for the underlying file descriptor. + # It returns an accepted TCPSocket for the incoming connection. + # + # === Example + # require 'socket' + # serv = TCPServer.new(2202) + # begin # emulate blocking accept + # sock = serv.accept_nonblock + # rescue IO::WaitReadable, Errno::EINTR + # IO.select([serv]) + # retry + # end + # # sock is an accepted socket. + # + # Refer to Socket#accept for the exceptions that may be thrown if the call + # to TCPServer#accept_nonblock fails. + # + # TCPServer#accept_nonblock may raise any error corresponding to accept(2) failure, + # including Errno::EWOULDBLOCK. + # + # If the exception is Errno::EWOULDBLOCK, Errno::EAGAIN, Errno::ECONNABORTED, Errno::EPROTO, + # it is extended by IO::WaitReadable. + # So IO::WaitReadable can be used to rescue the exceptions for retrying accept_nonblock. + # + # By specifying `exception: false`, the options hash allows you to indicate + # that accept_nonblock should not raise an IO::WaitReadable exception, but + # return the symbol :wait_readable instead. + # + # === See + # * TCPServer#accept + # * Socket#accept + def accept_nonblock(exception: true) + __accept_nonblock(exception) + end +end + +class UNIXServer < UNIXSocket + # call-seq: + # unixserver.accept_nonblock([options]) => unixsocket + # + # Accepts an incoming connection using accept(2) after + # O_NONBLOCK is set for the underlying file descriptor. + # It returns an accepted UNIXSocket for the incoming connection. + # + # === Example + # require 'socket' + # serv = UNIXServer.new("/tmp/sock") + # begin # emulate blocking accept + # sock = serv.accept_nonblock + # rescue IO::WaitReadable, Errno::EINTR + # IO.select([serv]) + # retry + # end + # # sock is an accepted socket. + # + # Refer to Socket#accept for the exceptions that may be thrown if the call + # to UNIXServer#accept_nonblock fails. + # + # UNIXServer#accept_nonblock may raise any error corresponding to accept(2) failure, + # including Errno::EWOULDBLOCK. + # + # If the exception is Errno::EWOULDBLOCK, Errno::EAGAIN, Errno::ECONNABORTED or Errno::EPROTO, + # it is extended by IO::WaitReadable. + # So IO::WaitReadable can be used to rescue the exceptions for retrying accept_nonblock. + # + # By specifying `exception: false`, the options hash allows you to indicate + # that accept_nonblock should not raise an IO::WaitReadable exception, but + # return the symbol :wait_readable instead. + # + # === See + # * UNIXServer#accept + # * Socket#accept + def accept_nonblock(exception: true) + __accept_nonblock(exception) + end +end if defined?(UNIXSocket) diff --git a/lib/ruby/stdlib/sync.rb b/lib/ruby/stdlib/sync.rb index 09542d59f94..ad6caf07435 100644 --- a/lib/ruby/stdlib/sync.rb +++ b/lib/ruby/stdlib/sync.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # sync.rb - 2 phase lock with counter # $Release Version: 1.0$ diff --git a/lib/ruby/stdlib/thwait.rb b/lib/ruby/stdlib/thwait.rb index d9750a406b2..db7e6b1ce5c 100644 --- a/lib/ruby/stdlib/thwait.rb +++ b/lib/ruby/stdlib/thwait.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # thwait.rb - thread synchronization class # $Release Version: 0.9 $ diff --git a/lib/ruby/stdlib/time.rb b/lib/ruby/stdlib/time.rb index 134d0af0ac0..69e524fd613 100644 --- a/lib/ruby/stdlib/time.rb +++ b/lib/ruby/stdlib/time.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'date' # = time.rb @@ -37,7 +39,7 @@ # #parse takes a string representation of a Time and attempts to parse it # using a heuristic. # -# Date.parse("2010-10-31") #=> 2010-10-31 00:00:00 -0500 +# Time.parse("2010-10-31") #=> 2010-10-31 00:00:00 -0500 # # Any missing pieces of the date are inferred based on the current date. # @@ -614,7 +616,7 @@ def rfc2822 sprintf('%s, %02d %s %0*d %02d:%02d:%02d ', RFC2822_DAY_NAME[wday], day, RFC2822_MONTH_NAME[mon-1], year < 0 ? 5 : 4, year, - hour, min, sec) + + hour, min, sec) << if utc? '-0000' else diff --git a/lib/ruby/stdlib/tracer.rb b/lib/ruby/stdlib/tracer.rb index 1d6b019bcf8..fd45f003c89 100644 --- a/lib/ruby/stdlib/tracer.rb +++ b/lib/ruby/stdlib/tracer.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false #-- # $Release Version: 0.3$ # $Revision: 1.12 $ diff --git a/lib/ruby/stdlib/tsort.rb b/lib/ruby/stdlib/tsort.rb index c40f9c41b2b..2760b7d57fe 100644 --- a/lib/ruby/stdlib/tsort.rb +++ b/lib/ruby/stdlib/tsort.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + #-- # tsort.rb - provides a module for topological sorting and strongly connected components. #++ diff --git a/lib/ruby/stdlib/un.rb b/lib/ruby/stdlib/un.rb index 487ba9eb751..9c1ce624a58 100644 --- a/lib/ruby/stdlib/un.rb +++ b/lib/ruby/stdlib/un.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # = un.rb # @@ -319,10 +320,8 @@ def httpd [:Port, :MaxClients].each do |name| opt = options[name] and (options[name] = Integer(opt)) rescue nil end - unless argv.size == 1 - raise ArgumentError, "DocumentRoot is mandatory" - end - options[:DocumentRoot] = argv.shift + options[:Port] ||= 8080 # HTTP Alternate + options[:DocumentRoot] = argv.shift || '.' s = WEBrick::HTTPServer.new(options) shut = proc {s.shutdown} siglist = %w"TERM QUIT" @@ -369,7 +368,7 @@ def help(argv, output: $stdout) end end if messages - argv.each {|cmd| output << messages[cmd]} + argv.each {|arg| output << messages[arg]} end end end diff --git a/lib/ruby/stdlib/unicode_normalize.rb b/lib/ruby/stdlib/unicode_normalize.rb index e79f41d1a27..8daf7b301a8 100644 --- a/lib/ruby/stdlib/unicode_normalize.rb +++ b/lib/ruby/stdlib/unicode_normalize.rb @@ -1,4 +1,5 @@ # coding: utf-8 +# frozen_string_literal: false # Copyright Ayumu Nojima (野島 歩) and Martin J. Dürst (duerst@it.aoyama.ac.jp) diff --git a/lib/ruby/stdlib/unicode_normalize/normalize.rb b/lib/ruby/stdlib/unicode_normalize/normalize.rb index 1511f75f8aa..8f0e8a20d11 100644 --- a/lib/ruby/stdlib/unicode_normalize/normalize.rb +++ b/lib/ruby/stdlib/unicode_normalize/normalize.rb @@ -1,4 +1,5 @@ # coding: utf-8 +# frozen_string_literal: false # Copyright Ayumu Nojima (野島 歩) and Martin J. Dürst (duerst@it.aoyama.ac.jp) @@ -21,10 +22,6 @@ module UnicodeNormalize hash.shift if hash.length>MAX_HASH_LENGTH # prevent DoS attack hash[key] = nfc_one(key) end - NF_HASH_K = Hash.new do |hash, key| - hash.shift if hash.length>MAX_HASH_LENGTH # prevent DoS attack - hash[key] = nfkd_one(key) - end ## Constants For Hangul # for details such as the meaning of the identifiers below, please see @@ -88,10 +85,6 @@ def self.nfd_one(string) canonical_ordering_one(hangul_decomp_one(string)) end - def self.nfkd_one(string) - string.chars.map! {|c| KOMPATIBLE_TABLE[c] || c}.join('') - end - def self.nfc_one(string) nfd_string = nfd_one string start = nfd_string[0] @@ -119,9 +112,9 @@ def self.normalize(string, form = :nfc) when :nfd then string.gsub REGEXP_D, NF_HASH_D when :nfkc then - string.gsub(REGEXP_K, NF_HASH_K).gsub REGEXP_C, NF_HASH_C + string.gsub(REGEXP_K, KOMPATIBLE_TABLE).gsub(REGEXP_C, NF_HASH_C) when :nfkd then - string.gsub(REGEXP_K, NF_HASH_K).gsub REGEXP_D, NF_HASH_D + string.gsub(REGEXP_K, KOMPATIBLE_TABLE).gsub(REGEXP_D, NF_HASH_D) else raise ArgumentError, "Invalid normalization form #{form}." end diff --git a/lib/ruby/stdlib/unicode_normalize/tables.rb b/lib/ruby/stdlib/unicode_normalize/tables.rb index 8720898389e..06d92714fe8 100644 --- a/lib/ruby/stdlib/unicode_normalize/tables.rb +++ b/lib/ruby/stdlib/unicode_normalize/tables.rb @@ -1,14 +1,15 @@ # coding: us-ascii +# frozen_string_literal: true # automatically generated by template/unicode_norm_gen.tmpl module UnicodeNormalize - UNICODE_VERSION = "7.0.0".freeze + UNICODE_VERSION = "8.0.0" accents = "" \ "[\u0300-\u034E\u0350-\u036F\u0483-\u0487\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7" \ "\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711" \ - "\u0730-\u074A\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08E4-\u08FF" \ + "\u0730-\u074A\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08E3-\u08FF" \ "\u093C\u094D\u0951-\u0954\u09BC\u09BE\u09CD\u09D7\u0A3C" \ "\u0A4D\u0ABC\u0ACD\u0B3C\u0B3E\u0B4D\u0B56\u0B57\u0BBE" \ "\u0BCD\u0BD7\u0C4D\u0C55\u0C56\u0CBC\u0CC2\u0CCD\u0CD5\u0CD6" \ @@ -19,17 +20,16 @@ module UnicodeNormalize "\u1A17\u1A18\u1A60\u1A75-\u1A7C\u1A7F\u1AB0-\u1ABD\u1B34\u1B35\u1B44\u1B6B-\u1B73" \ "\u1BAA\u1BAB\u1BE6\u1BF2\u1BF3\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE0\u1CE2-\u1CE8\u1CED" \ "\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF5\u1DFC-\u1DFF\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2CEF-\u2CF1" \ - "\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F\uA674-\uA67D\uA69F\uA6F0\uA6F1" \ + "\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1" \ "\uA806\uA8C4\uA8E0-\uA8F1\uA92B-\uA92D\uA953\uA9B3\uA9C0\uAAB0" \ - "\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAF6\uABED\uFB1E\uFE20-\uFE2D" \ + "\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAF6\uABED\uFB1E\uFE20-\uFE2F" \ "\u{101FD}\u{102E0}\u{10376}-\u{1037A}\u{10A0D}\u{10A0F}\u{10A38}-\u{10A3A}\u{10A3F}\u{10AE5}\u{10AE6}" \ "\u{11046}\u{1107F}\u{110B9}\u{110BA}\u{11100}-\u{11102}\u{11127}\u{11133}\u{11134}\u{11173}\u{111C0}" \ - "\u{11235}\u{11236}\u{112E9}\u{112EA}\u{1133C}\u{1133E}\u{1134D}\u{11357}\u{11366}-\u{1136C}\u{11370}-\u{11374}" \ - "\u{114B0}\u{114BA}\u{114BD}\u{114C2}\u{114C3}\u{115AF}\u{115BF}\u{115C0}\u{1163F}\u{116B6}\u{116B7}" \ - "\u{16AF0}-\u{16AF4}\u{16B30}-\u{16B36}\u{1BC9E}\u{1D165}-\u{1D169}\u{1D16D}-\u{1D172}\u{1D17B}-\u{1D182}\u{1D185}-\u{1D18B}\u{1D1AA}-\u{1D1AD}" \ - "\u{1D242}-\u{1D244}\u{1E8D0}-\u{1E8D6}" \ - "]" \ - "".freeze + "\u{111CA}\u{11235}\u{11236}\u{112E9}\u{112EA}\u{1133C}\u{1133E}\u{1134D}\u{11357}\u{11366}-\u{1136C}" \ + "\u{11370}-\u{11374}\u{114B0}\u{114BA}\u{114BD}\u{114C2}\u{114C3}\u{115AF}\u{115BF}\u{115C0}\u{1163F}" \ + "\u{116B6}\u{116B7}\u{1172B}\u{16AF0}-\u{16AF4}\u{16B30}-\u{16B36}\u{1BC9E}\u{1D165}-\u{1D169}\u{1D16D}-\u{1D172}\u{1D17B}-\u{1D182}" \ + "\u{1D185}-\u{1D18B}\u{1D1AA}-\u{1D1AD}\u{1D242}-\u{1D244}\u{1E8D0}-\u{1E8D6}" \ + "]" ACCENTS = accents REGEXP_D_STRING = "#{'' # composition starters and composition exclusions }" \ @@ -89,8 +89,7 @@ module UnicodeNormalize "]?#{accents}+" \ "|#{'' # precomposed Hangul syllables }" \ - "[\u{AC00}-\u{D7A4}]" \ - "".freeze + "[\u{AC00}-\u{D7A4}]" REGEXP_C_STRING = "#{'' # composition exclusions }" \ "[\u0340\u0341\u0343\u0344\u0374\u037E\u0387\u0958-\u095F\u09DC\u09DD\u09DF" \ @@ -187,8 +186,7 @@ module UnicodeNormalize "][\u11A8-\u11C2]" \ "|#{'' # decomposed Hangul syllables }" \ - "[\u1100-\u1112][\u1161-\u1175][\u11A8-\u11C2]?" \ - "".freeze + "[\u1100-\u1112][\u1161-\u1175][\u11A8-\u11C2]?" REGEXP_K_STRING = "" \ "[\u00A0\u00A8\u00AA\u00AF\u00B2-\u00B5\u00B8-\u00BA\u00BC-\u00BE\u0132\u0133" \ "\u013F\u0140\u0149\u017F\u01C4-\u01CC\u01F1-\u01F3\u02B0-\u02B8\u02D8-\u02DD\u02E0-\u02E4" \ @@ -214,8 +212,7 @@ module UnicodeNormalize "\u{1EE64}\u{1EE67}-\u{1EE6A}\u{1EE6C}-\u{1EE72}\u{1EE74}-\u{1EE77}\u{1EE79}-\u{1EE7C}\u{1EE7E}\u{1EE80}-\u{1EE89}\u{1EE8B}-\u{1EE9B}" \ "\u{1EEA1}-\u{1EEA3}\u{1EEA5}-\u{1EEA9}\u{1EEAB}-\u{1EEBB}\u{1F100}-\u{1F10A}\u{1F110}-\u{1F12E}\u{1F130}-\u{1F14F}\u{1F16A}\u{1F16B}\u{1F190}" \ "\u{1F200}-\u{1F202}\u{1F210}-\u{1F23A}\u{1F240}-\u{1F248}\u{1F250}\u{1F251}" \ - "]" \ - "".freeze + "]" class_table = { "\u0300"=>230, "\u0301"=>230, "\u0302"=>230, "\u0303"=>230, "\u0304"=>230, "\u0305"=>230, "\u0306"=>230, "\u0307"=>230, @@ -253,911 +250,911 @@ module UnicodeNormalize "\u0816"=>230, "\u0817"=>230, "\u0818"=>230, "\u0819"=>230, "\u081B"=>230, "\u081C"=>230, "\u081D"=>230, "\u081E"=>230, "\u081F"=>230, "\u0820"=>230, "\u0821"=>230, "\u0822"=>230, "\u0823"=>230, "\u0825"=>230, "\u0826"=>230, "\u0827"=>230, "\u0829"=>230, "\u082A"=>230, "\u082B"=>230, "\u082C"=>230, "\u082D"=>230, "\u0859"=>220, "\u085A"=>220, "\u085B"=>220, - "\u08E4"=>230, "\u08E5"=>230, "\u08E6"=>220, "\u08E7"=>230, "\u08E8"=>230, "\u08E9"=>220, "\u08EA"=>230, "\u08EB"=>230, - "\u08EC"=>230, "\u08ED"=>220, "\u08EE"=>220, "\u08EF"=>220, "\u08F0"=>27, "\u08F1"=>28, "\u08F2"=>29, "\u08F3"=>230, - "\u08F4"=>230, "\u08F5"=>230, "\u08F6"=>220, "\u08F7"=>230, "\u08F8"=>230, "\u08F9"=>220, "\u08FA"=>220, "\u08FB"=>230, - "\u08FC"=>230, "\u08FD"=>230, "\u08FE"=>230, "\u08FF"=>230, "\u093C"=>7, "\u094D"=>9, "\u0951"=>230, "\u0952"=>220, - "\u0953"=>230, "\u0954"=>230, "\u09BC"=>7, "\u09CD"=>9, "\u0A3C"=>7, "\u0A4D"=>9, "\u0ABC"=>7, "\u0ACD"=>9, - "\u0B3C"=>7, "\u0B4D"=>9, "\u0BCD"=>9, "\u0C4D"=>9, "\u0C55"=>84, "\u0C56"=>91, "\u0CBC"=>7, "\u0CCD"=>9, - "\u0D4D"=>9, "\u0DCA"=>9, "\u0E38"=>103, "\u0E39"=>103, "\u0E3A"=>9, "\u0E48"=>107, "\u0E49"=>107, "\u0E4A"=>107, - "\u0E4B"=>107, "\u0EB8"=>118, "\u0EB9"=>118, "\u0EC8"=>122, "\u0EC9"=>122, "\u0ECA"=>122, "\u0ECB"=>122, "\u0F18"=>220, - "\u0F19"=>220, "\u0F35"=>220, "\u0F37"=>220, "\u0F39"=>216, "\u0F71"=>129, "\u0F72"=>130, "\u0F74"=>132, "\u0F7A"=>130, - "\u0F7B"=>130, "\u0F7C"=>130, "\u0F7D"=>130, "\u0F80"=>130, "\u0F82"=>230, "\u0F83"=>230, "\u0F84"=>9, "\u0F86"=>230, - "\u0F87"=>230, "\u0FC6"=>220, "\u1037"=>7, "\u1039"=>9, "\u103A"=>9, "\u108D"=>220, "\u135D"=>230, "\u135E"=>230, - "\u135F"=>230, "\u1714"=>9, "\u1734"=>9, "\u17D2"=>9, "\u17DD"=>230, "\u18A9"=>228, "\u1939"=>222, "\u193A"=>230, - "\u193B"=>220, "\u1A17"=>230, "\u1A18"=>220, "\u1A60"=>9, "\u1A75"=>230, "\u1A76"=>230, "\u1A77"=>230, "\u1A78"=>230, - "\u1A79"=>230, "\u1A7A"=>230, "\u1A7B"=>230, "\u1A7C"=>230, "\u1A7F"=>220, "\u1AB0"=>230, "\u1AB1"=>230, "\u1AB2"=>230, - "\u1AB3"=>230, "\u1AB4"=>230, "\u1AB5"=>220, "\u1AB6"=>220, "\u1AB7"=>220, "\u1AB8"=>220, "\u1AB9"=>220, "\u1ABA"=>220, - "\u1ABB"=>230, "\u1ABC"=>230, "\u1ABD"=>220, "\u1B34"=>7, "\u1B44"=>9, "\u1B6B"=>230, "\u1B6C"=>220, "\u1B6D"=>230, - "\u1B6E"=>230, "\u1B6F"=>230, "\u1B70"=>230, "\u1B71"=>230, "\u1B72"=>230, "\u1B73"=>230, "\u1BAA"=>9, "\u1BAB"=>9, - "\u1BE6"=>7, "\u1BF2"=>9, "\u1BF3"=>9, "\u1C37"=>7, "\u1CD0"=>230, "\u1CD1"=>230, "\u1CD2"=>230, "\u1CD4"=>1, - "\u1CD5"=>220, "\u1CD6"=>220, "\u1CD7"=>220, "\u1CD8"=>220, "\u1CD9"=>220, "\u1CDA"=>230, "\u1CDB"=>230, "\u1CDC"=>220, - "\u1CDD"=>220, "\u1CDE"=>220, "\u1CDF"=>220, "\u1CE0"=>230, "\u1CE2"=>1, "\u1CE3"=>1, "\u1CE4"=>1, "\u1CE5"=>1, - "\u1CE6"=>1, "\u1CE7"=>1, "\u1CE8"=>1, "\u1CED"=>220, "\u1CF4"=>230, "\u1CF8"=>230, "\u1CF9"=>230, "\u1DC0"=>230, - "\u1DC1"=>230, "\u1DC2"=>220, "\u1DC3"=>230, "\u1DC4"=>230, "\u1DC5"=>230, "\u1DC6"=>230, "\u1DC7"=>230, "\u1DC8"=>230, - "\u1DC9"=>230, "\u1DCA"=>220, "\u1DCB"=>230, "\u1DCC"=>230, "\u1DCD"=>234, "\u1DCE"=>214, "\u1DCF"=>220, "\u1DD0"=>202, - "\u1DD1"=>230, "\u1DD2"=>230, "\u1DD3"=>230, "\u1DD4"=>230, "\u1DD5"=>230, "\u1DD6"=>230, "\u1DD7"=>230, "\u1DD8"=>230, - "\u1DD9"=>230, "\u1DDA"=>230, "\u1DDB"=>230, "\u1DDC"=>230, "\u1DDD"=>230, "\u1DDE"=>230, "\u1DDF"=>230, "\u1DE0"=>230, - "\u1DE1"=>230, "\u1DE2"=>230, "\u1DE3"=>230, "\u1DE4"=>230, "\u1DE5"=>230, "\u1DE6"=>230, "\u1DE7"=>230, "\u1DE8"=>230, - "\u1DE9"=>230, "\u1DEA"=>230, "\u1DEB"=>230, "\u1DEC"=>230, "\u1DED"=>230, "\u1DEE"=>230, "\u1DEF"=>230, "\u1DF0"=>230, - "\u1DF1"=>230, "\u1DF2"=>230, "\u1DF3"=>230, "\u1DF4"=>230, "\u1DF5"=>230, "\u1DFC"=>233, "\u1DFD"=>220, "\u1DFE"=>230, - "\u1DFF"=>220, "\u20D0"=>230, "\u20D1"=>230, "\u20D2"=>1, "\u20D3"=>1, "\u20D4"=>230, "\u20D5"=>230, "\u20D6"=>230, - "\u20D7"=>230, "\u20D8"=>1, "\u20D9"=>1, "\u20DA"=>1, "\u20DB"=>230, "\u20DC"=>230, "\u20E1"=>230, "\u20E5"=>1, - "\u20E6"=>1, "\u20E7"=>230, "\u20E8"=>220, "\u20E9"=>230, "\u20EA"=>1, "\u20EB"=>1, "\u20EC"=>220, "\u20ED"=>220, - "\u20EE"=>220, "\u20EF"=>220, "\u20F0"=>230, "\u2CEF"=>230, "\u2CF0"=>230, "\u2CF1"=>230, "\u2D7F"=>9, "\u2DE0"=>230, - "\u2DE1"=>230, "\u2DE2"=>230, "\u2DE3"=>230, "\u2DE4"=>230, "\u2DE5"=>230, "\u2DE6"=>230, "\u2DE7"=>230, "\u2DE8"=>230, - "\u2DE9"=>230, "\u2DEA"=>230, "\u2DEB"=>230, "\u2DEC"=>230, "\u2DED"=>230, "\u2DEE"=>230, "\u2DEF"=>230, "\u2DF0"=>230, - "\u2DF1"=>230, "\u2DF2"=>230, "\u2DF3"=>230, "\u2DF4"=>230, "\u2DF5"=>230, "\u2DF6"=>230, "\u2DF7"=>230, "\u2DF8"=>230, - "\u2DF9"=>230, "\u2DFA"=>230, "\u2DFB"=>230, "\u2DFC"=>230, "\u2DFD"=>230, "\u2DFE"=>230, "\u2DFF"=>230, "\u302A"=>218, - "\u302B"=>228, "\u302C"=>232, "\u302D"=>222, "\u302E"=>224, "\u302F"=>224, "\u3099"=>8, "\u309A"=>8, "\uA66F"=>230, - "\uA674"=>230, "\uA675"=>230, "\uA676"=>230, "\uA677"=>230, "\uA678"=>230, "\uA679"=>230, "\uA67A"=>230, "\uA67B"=>230, - "\uA67C"=>230, "\uA67D"=>230, "\uA69F"=>230, "\uA6F0"=>230, "\uA6F1"=>230, "\uA806"=>9, "\uA8C4"=>9, "\uA8E0"=>230, - "\uA8E1"=>230, "\uA8E2"=>230, "\uA8E3"=>230, "\uA8E4"=>230, "\uA8E5"=>230, "\uA8E6"=>230, "\uA8E7"=>230, "\uA8E8"=>230, - "\uA8E9"=>230, "\uA8EA"=>230, "\uA8EB"=>230, "\uA8EC"=>230, "\uA8ED"=>230, "\uA8EE"=>230, "\uA8EF"=>230, "\uA8F0"=>230, - "\uA8F1"=>230, "\uA92B"=>220, "\uA92C"=>220, "\uA92D"=>220, "\uA953"=>9, "\uA9B3"=>7, "\uA9C0"=>9, "\uAAB0"=>230, - "\uAAB2"=>230, "\uAAB3"=>230, "\uAAB4"=>220, "\uAAB7"=>230, "\uAAB8"=>230, "\uAABE"=>230, "\uAABF"=>230, "\uAAC1"=>230, - "\uAAF6"=>9, "\uABED"=>9, "\uFB1E"=>26, "\uFE20"=>230, "\uFE21"=>230, "\uFE22"=>230, "\uFE23"=>230, "\uFE24"=>230, - "\uFE25"=>230, "\uFE26"=>230, "\uFE27"=>220, "\uFE28"=>220, "\uFE29"=>220, "\uFE2A"=>220, "\uFE2B"=>220, "\uFE2C"=>220, - "\uFE2D"=>220, "\u{101FD}"=>220, "\u{102E0}"=>220, "\u{10376}"=>230, "\u{10377}"=>230, "\u{10378}"=>230, "\u{10379}"=>230, "\u{1037A}"=>230, - "\u{10A0D}"=>220, "\u{10A0F}"=>230, "\u{10A38}"=>230, "\u{10A39}"=>1, "\u{10A3A}"=>220, "\u{10A3F}"=>9, "\u{10AE5}"=>230, "\u{10AE6}"=>220, - "\u{11046}"=>9, "\u{1107F}"=>9, "\u{110B9}"=>9, "\u{110BA}"=>7, "\u{11100}"=>230, "\u{11101}"=>230, "\u{11102}"=>230, "\u{11133}"=>9, - "\u{11134}"=>9, "\u{11173}"=>7, "\u{111C0}"=>9, "\u{11235}"=>9, "\u{11236}"=>7, "\u{112E9}"=>7, "\u{112EA}"=>9, "\u{1133C}"=>7, - "\u{1134D}"=>9, "\u{11366}"=>230, "\u{11367}"=>230, "\u{11368}"=>230, "\u{11369}"=>230, "\u{1136A}"=>230, "\u{1136B}"=>230, "\u{1136C}"=>230, - "\u{11370}"=>230, "\u{11371}"=>230, "\u{11372}"=>230, "\u{11373}"=>230, "\u{11374}"=>230, "\u{114C2}"=>9, "\u{114C3}"=>7, "\u{115BF}"=>9, - "\u{115C0}"=>7, "\u{1163F}"=>9, "\u{116B6}"=>9, "\u{116B7}"=>7, "\u{16AF0}"=>1, "\u{16AF1}"=>1, "\u{16AF2}"=>1, "\u{16AF3}"=>1, - "\u{16AF4}"=>1, "\u{16B30}"=>230, "\u{16B31}"=>230, "\u{16B32}"=>230, "\u{16B33}"=>230, "\u{16B34}"=>230, "\u{16B35}"=>230, "\u{16B36}"=>230, - "\u{1BC9E}"=>1, "\u{1D165}"=>216, "\u{1D166}"=>216, "\u{1D167}"=>1, "\u{1D168}"=>1, "\u{1D169}"=>1, "\u{1D16D}"=>226, "\u{1D16E}"=>216, - "\u{1D16F}"=>216, "\u{1D170}"=>216, "\u{1D171}"=>216, "\u{1D172}"=>216, "\u{1D17B}"=>220, "\u{1D17C}"=>220, "\u{1D17D}"=>220, "\u{1D17E}"=>220, - "\u{1D17F}"=>220, "\u{1D180}"=>220, "\u{1D181}"=>220, "\u{1D182}"=>220, "\u{1D185}"=>230, "\u{1D186}"=>230, "\u{1D187}"=>230, "\u{1D188}"=>230, - "\u{1D189}"=>230, "\u{1D18A}"=>220, "\u{1D18B}"=>220, "\u{1D1AA}"=>230, "\u{1D1AB}"=>230, "\u{1D1AC}"=>230, "\u{1D1AD}"=>230, "\u{1D242}"=>230, - "\u{1D243}"=>230, "\u{1D244}"=>230, "\u{1E8D0}"=>220, "\u{1E8D1}"=>220, "\u{1E8D2}"=>220, "\u{1E8D3}"=>220, "\u{1E8D4}"=>220, "\u{1E8D5}"=>220, - "\u{1E8D6}"=>220, + "\u08E3"=>220, "\u08E4"=>230, "\u08E5"=>230, "\u08E6"=>220, "\u08E7"=>230, "\u08E8"=>230, "\u08E9"=>220, "\u08EA"=>230, + "\u08EB"=>230, "\u08EC"=>230, "\u08ED"=>220, "\u08EE"=>220, "\u08EF"=>220, "\u08F0"=>27, "\u08F1"=>28, "\u08F2"=>29, + "\u08F3"=>230, "\u08F4"=>230, "\u08F5"=>230, "\u08F6"=>220, "\u08F7"=>230, "\u08F8"=>230, "\u08F9"=>220, "\u08FA"=>220, + "\u08FB"=>230, "\u08FC"=>230, "\u08FD"=>230, "\u08FE"=>230, "\u08FF"=>230, "\u093C"=>7, "\u094D"=>9, "\u0951"=>230, + "\u0952"=>220, "\u0953"=>230, "\u0954"=>230, "\u09BC"=>7, "\u09CD"=>9, "\u0A3C"=>7, "\u0A4D"=>9, "\u0ABC"=>7, + "\u0ACD"=>9, "\u0B3C"=>7, "\u0B4D"=>9, "\u0BCD"=>9, "\u0C4D"=>9, "\u0C55"=>84, "\u0C56"=>91, "\u0CBC"=>7, + "\u0CCD"=>9, "\u0D4D"=>9, "\u0DCA"=>9, "\u0E38"=>103, "\u0E39"=>103, "\u0E3A"=>9, "\u0E48"=>107, "\u0E49"=>107, + "\u0E4A"=>107, "\u0E4B"=>107, "\u0EB8"=>118, "\u0EB9"=>118, "\u0EC8"=>122, "\u0EC9"=>122, "\u0ECA"=>122, "\u0ECB"=>122, + "\u0F18"=>220, "\u0F19"=>220, "\u0F35"=>220, "\u0F37"=>220, "\u0F39"=>216, "\u0F71"=>129, "\u0F72"=>130, "\u0F74"=>132, + "\u0F7A"=>130, "\u0F7B"=>130, "\u0F7C"=>130, "\u0F7D"=>130, "\u0F80"=>130, "\u0F82"=>230, "\u0F83"=>230, "\u0F84"=>9, + "\u0F86"=>230, "\u0F87"=>230, "\u0FC6"=>220, "\u1037"=>7, "\u1039"=>9, "\u103A"=>9, "\u108D"=>220, "\u135D"=>230, + "\u135E"=>230, "\u135F"=>230, "\u1714"=>9, "\u1734"=>9, "\u17D2"=>9, "\u17DD"=>230, "\u18A9"=>228, "\u1939"=>222, + "\u193A"=>230, "\u193B"=>220, "\u1A17"=>230, "\u1A18"=>220, "\u1A60"=>9, "\u1A75"=>230, "\u1A76"=>230, "\u1A77"=>230, + "\u1A78"=>230, "\u1A79"=>230, "\u1A7A"=>230, "\u1A7B"=>230, "\u1A7C"=>230, "\u1A7F"=>220, "\u1AB0"=>230, "\u1AB1"=>230, + "\u1AB2"=>230, "\u1AB3"=>230, "\u1AB4"=>230, "\u1AB5"=>220, "\u1AB6"=>220, "\u1AB7"=>220, "\u1AB8"=>220, "\u1AB9"=>220, + "\u1ABA"=>220, "\u1ABB"=>230, "\u1ABC"=>230, "\u1ABD"=>220, "\u1B34"=>7, "\u1B44"=>9, "\u1B6B"=>230, "\u1B6C"=>220, + "\u1B6D"=>230, "\u1B6E"=>230, "\u1B6F"=>230, "\u1B70"=>230, "\u1B71"=>230, "\u1B72"=>230, "\u1B73"=>230, "\u1BAA"=>9, + "\u1BAB"=>9, "\u1BE6"=>7, "\u1BF2"=>9, "\u1BF3"=>9, "\u1C37"=>7, "\u1CD0"=>230, "\u1CD1"=>230, "\u1CD2"=>230, + "\u1CD4"=>1, "\u1CD5"=>220, "\u1CD6"=>220, "\u1CD7"=>220, "\u1CD8"=>220, "\u1CD9"=>220, "\u1CDA"=>230, "\u1CDB"=>230, + "\u1CDC"=>220, "\u1CDD"=>220, "\u1CDE"=>220, "\u1CDF"=>220, "\u1CE0"=>230, "\u1CE2"=>1, "\u1CE3"=>1, "\u1CE4"=>1, + "\u1CE5"=>1, "\u1CE6"=>1, "\u1CE7"=>1, "\u1CE8"=>1, "\u1CED"=>220, "\u1CF4"=>230, "\u1CF8"=>230, "\u1CF9"=>230, + "\u1DC0"=>230, "\u1DC1"=>230, "\u1DC2"=>220, "\u1DC3"=>230, "\u1DC4"=>230, "\u1DC5"=>230, "\u1DC6"=>230, "\u1DC7"=>230, + "\u1DC8"=>230, "\u1DC9"=>230, "\u1DCA"=>220, "\u1DCB"=>230, "\u1DCC"=>230, "\u1DCD"=>234, "\u1DCE"=>214, "\u1DCF"=>220, + "\u1DD0"=>202, "\u1DD1"=>230, "\u1DD2"=>230, "\u1DD3"=>230, "\u1DD4"=>230, "\u1DD5"=>230, "\u1DD6"=>230, "\u1DD7"=>230, + "\u1DD8"=>230, "\u1DD9"=>230, "\u1DDA"=>230, "\u1DDB"=>230, "\u1DDC"=>230, "\u1DDD"=>230, "\u1DDE"=>230, "\u1DDF"=>230, + "\u1DE0"=>230, "\u1DE1"=>230, "\u1DE2"=>230, "\u1DE3"=>230, "\u1DE4"=>230, "\u1DE5"=>230, "\u1DE6"=>230, "\u1DE7"=>230, + "\u1DE8"=>230, "\u1DE9"=>230, "\u1DEA"=>230, "\u1DEB"=>230, "\u1DEC"=>230, "\u1DED"=>230, "\u1DEE"=>230, "\u1DEF"=>230, + "\u1DF0"=>230, "\u1DF1"=>230, "\u1DF2"=>230, "\u1DF3"=>230, "\u1DF4"=>230, "\u1DF5"=>230, "\u1DFC"=>233, "\u1DFD"=>220, + "\u1DFE"=>230, "\u1DFF"=>220, "\u20D0"=>230, "\u20D1"=>230, "\u20D2"=>1, "\u20D3"=>1, "\u20D4"=>230, "\u20D5"=>230, + "\u20D6"=>230, "\u20D7"=>230, "\u20D8"=>1, "\u20D9"=>1, "\u20DA"=>1, "\u20DB"=>230, "\u20DC"=>230, "\u20E1"=>230, + "\u20E5"=>1, "\u20E6"=>1, "\u20E7"=>230, "\u20E8"=>220, "\u20E9"=>230, "\u20EA"=>1, "\u20EB"=>1, "\u20EC"=>220, + "\u20ED"=>220, "\u20EE"=>220, "\u20EF"=>220, "\u20F0"=>230, "\u2CEF"=>230, "\u2CF0"=>230, "\u2CF1"=>230, "\u2D7F"=>9, + "\u2DE0"=>230, "\u2DE1"=>230, "\u2DE2"=>230, "\u2DE3"=>230, "\u2DE4"=>230, "\u2DE5"=>230, "\u2DE6"=>230, "\u2DE7"=>230, + "\u2DE8"=>230, "\u2DE9"=>230, "\u2DEA"=>230, "\u2DEB"=>230, "\u2DEC"=>230, "\u2DED"=>230, "\u2DEE"=>230, "\u2DEF"=>230, + "\u2DF0"=>230, "\u2DF1"=>230, "\u2DF2"=>230, "\u2DF3"=>230, "\u2DF4"=>230, "\u2DF5"=>230, "\u2DF6"=>230, "\u2DF7"=>230, + "\u2DF8"=>230, "\u2DF9"=>230, "\u2DFA"=>230, "\u2DFB"=>230, "\u2DFC"=>230, "\u2DFD"=>230, "\u2DFE"=>230, "\u2DFF"=>230, + "\u302A"=>218, "\u302B"=>228, "\u302C"=>232, "\u302D"=>222, "\u302E"=>224, "\u302F"=>224, "\u3099"=>8, "\u309A"=>8, + "\uA66F"=>230, "\uA674"=>230, "\uA675"=>230, "\uA676"=>230, "\uA677"=>230, "\uA678"=>230, "\uA679"=>230, "\uA67A"=>230, + "\uA67B"=>230, "\uA67C"=>230, "\uA67D"=>230, "\uA69E"=>230, "\uA69F"=>230, "\uA6F0"=>230, "\uA6F1"=>230, "\uA806"=>9, + "\uA8C4"=>9, "\uA8E0"=>230, "\uA8E1"=>230, "\uA8E2"=>230, "\uA8E3"=>230, "\uA8E4"=>230, "\uA8E5"=>230, "\uA8E6"=>230, + "\uA8E7"=>230, "\uA8E8"=>230, "\uA8E9"=>230, "\uA8EA"=>230, "\uA8EB"=>230, "\uA8EC"=>230, "\uA8ED"=>230, "\uA8EE"=>230, + "\uA8EF"=>230, "\uA8F0"=>230, "\uA8F1"=>230, "\uA92B"=>220, "\uA92C"=>220, "\uA92D"=>220, "\uA953"=>9, "\uA9B3"=>7, + "\uA9C0"=>9, "\uAAB0"=>230, "\uAAB2"=>230, "\uAAB3"=>230, "\uAAB4"=>220, "\uAAB7"=>230, "\uAAB8"=>230, "\uAABE"=>230, + "\uAABF"=>230, "\uAAC1"=>230, "\uAAF6"=>9, "\uABED"=>9, "\uFB1E"=>26, "\uFE20"=>230, "\uFE21"=>230, "\uFE22"=>230, + "\uFE23"=>230, "\uFE24"=>230, "\uFE25"=>230, "\uFE26"=>230, "\uFE27"=>220, "\uFE28"=>220, "\uFE29"=>220, "\uFE2A"=>220, + "\uFE2B"=>220, "\uFE2C"=>220, "\uFE2D"=>220, "\uFE2E"=>230, "\uFE2F"=>230, "\u{101FD}"=>220, "\u{102E0}"=>220, "\u{10376}"=>230, + "\u{10377}"=>230, "\u{10378}"=>230, "\u{10379}"=>230, "\u{1037A}"=>230, "\u{10A0D}"=>220, "\u{10A0F}"=>230, "\u{10A38}"=>230, "\u{10A39}"=>1, + "\u{10A3A}"=>220, "\u{10A3F}"=>9, "\u{10AE5}"=>230, "\u{10AE6}"=>220, "\u{11046}"=>9, "\u{1107F}"=>9, "\u{110B9}"=>9, "\u{110BA}"=>7, + "\u{11100}"=>230, "\u{11101}"=>230, "\u{11102}"=>230, "\u{11133}"=>9, "\u{11134}"=>9, "\u{11173}"=>7, "\u{111C0}"=>9, "\u{111CA}"=>7, + "\u{11235}"=>9, "\u{11236}"=>7, "\u{112E9}"=>7, "\u{112EA}"=>9, "\u{1133C}"=>7, "\u{1134D}"=>9, "\u{11366}"=>230, "\u{11367}"=>230, + "\u{11368}"=>230, "\u{11369}"=>230, "\u{1136A}"=>230, "\u{1136B}"=>230, "\u{1136C}"=>230, "\u{11370}"=>230, "\u{11371}"=>230, "\u{11372}"=>230, + "\u{11373}"=>230, "\u{11374}"=>230, "\u{114C2}"=>9, "\u{114C3}"=>7, "\u{115BF}"=>9, "\u{115C0}"=>7, "\u{1163F}"=>9, "\u{116B6}"=>9, + "\u{116B7}"=>7, "\u{1172B}"=>9, "\u{16AF0}"=>1, "\u{16AF1}"=>1, "\u{16AF2}"=>1, "\u{16AF3}"=>1, "\u{16AF4}"=>1, "\u{16B30}"=>230, + "\u{16B31}"=>230, "\u{16B32}"=>230, "\u{16B33}"=>230, "\u{16B34}"=>230, "\u{16B35}"=>230, "\u{16B36}"=>230, "\u{1BC9E}"=>1, "\u{1D165}"=>216, + "\u{1D166}"=>216, "\u{1D167}"=>1, "\u{1D168}"=>1, "\u{1D169}"=>1, "\u{1D16D}"=>226, "\u{1D16E}"=>216, "\u{1D16F}"=>216, "\u{1D170}"=>216, + "\u{1D171}"=>216, "\u{1D172}"=>216, "\u{1D17B}"=>220, "\u{1D17C}"=>220, "\u{1D17D}"=>220, "\u{1D17E}"=>220, "\u{1D17F}"=>220, "\u{1D180}"=>220, + "\u{1D181}"=>220, "\u{1D182}"=>220, "\u{1D185}"=>230, "\u{1D186}"=>230, "\u{1D187}"=>230, "\u{1D188}"=>230, "\u{1D189}"=>230, "\u{1D18A}"=>220, + "\u{1D18B}"=>220, "\u{1D1AA}"=>230, "\u{1D1AB}"=>230, "\u{1D1AC}"=>230, "\u{1D1AD}"=>230, "\u{1D242}"=>230, "\u{1D243}"=>230, "\u{1D244}"=>230, + "\u{1E8D0}"=>220, "\u{1E8D1}"=>220, "\u{1E8D2}"=>220, "\u{1E8D3}"=>220, "\u{1E8D4}"=>220, "\u{1E8D5}"=>220, "\u{1E8D6}"=>220, } class_table.default = 0 CLASS_TABLE = class_table.freeze DECOMPOSITION_TABLE = { - "\u00C0"=>"A\u0300".freeze, "\u00C1"=>"A\u0301".freeze, "\u00C2"=>"A\u0302".freeze, "\u00C3"=>"A\u0303".freeze, "\u00C4"=>"A\u0308".freeze, "\u00C5"=>"A\u030A".freeze, "\u00C7"=>"C\u0327".freeze, "\u00C8"=>"E\u0300".freeze, - "\u00C9"=>"E\u0301".freeze, "\u00CA"=>"E\u0302".freeze, "\u00CB"=>"E\u0308".freeze, "\u00CC"=>"I\u0300".freeze, "\u00CD"=>"I\u0301".freeze, "\u00CE"=>"I\u0302".freeze, "\u00CF"=>"I\u0308".freeze, "\u00D1"=>"N\u0303".freeze, - "\u00D2"=>"O\u0300".freeze, "\u00D3"=>"O\u0301".freeze, "\u00D4"=>"O\u0302".freeze, "\u00D5"=>"O\u0303".freeze, "\u00D6"=>"O\u0308".freeze, "\u00D9"=>"U\u0300".freeze, "\u00DA"=>"U\u0301".freeze, "\u00DB"=>"U\u0302".freeze, - "\u00DC"=>"U\u0308".freeze, "\u00DD"=>"Y\u0301".freeze, "\u00E0"=>"a\u0300".freeze, "\u00E1"=>"a\u0301".freeze, "\u00E2"=>"a\u0302".freeze, "\u00E3"=>"a\u0303".freeze, "\u00E4"=>"a\u0308".freeze, "\u00E5"=>"a\u030A".freeze, - "\u00E7"=>"c\u0327".freeze, "\u00E8"=>"e\u0300".freeze, "\u00E9"=>"e\u0301".freeze, "\u00EA"=>"e\u0302".freeze, "\u00EB"=>"e\u0308".freeze, "\u00EC"=>"i\u0300".freeze, "\u00ED"=>"i\u0301".freeze, "\u00EE"=>"i\u0302".freeze, - "\u00EF"=>"i\u0308".freeze, "\u00F1"=>"n\u0303".freeze, "\u00F2"=>"o\u0300".freeze, "\u00F3"=>"o\u0301".freeze, "\u00F4"=>"o\u0302".freeze, "\u00F5"=>"o\u0303".freeze, "\u00F6"=>"o\u0308".freeze, "\u00F9"=>"u\u0300".freeze, - "\u00FA"=>"u\u0301".freeze, "\u00FB"=>"u\u0302".freeze, "\u00FC"=>"u\u0308".freeze, "\u00FD"=>"y\u0301".freeze, "\u00FF"=>"y\u0308".freeze, "\u0100"=>"A\u0304".freeze, "\u0101"=>"a\u0304".freeze, "\u0102"=>"A\u0306".freeze, - "\u0103"=>"a\u0306".freeze, "\u0104"=>"A\u0328".freeze, "\u0105"=>"a\u0328".freeze, "\u0106"=>"C\u0301".freeze, "\u0107"=>"c\u0301".freeze, "\u0108"=>"C\u0302".freeze, "\u0109"=>"c\u0302".freeze, "\u010A"=>"C\u0307".freeze, - "\u010B"=>"c\u0307".freeze, "\u010C"=>"C\u030C".freeze, "\u010D"=>"c\u030C".freeze, "\u010E"=>"D\u030C".freeze, "\u010F"=>"d\u030C".freeze, "\u0112"=>"E\u0304".freeze, "\u0113"=>"e\u0304".freeze, "\u0114"=>"E\u0306".freeze, - "\u0115"=>"e\u0306".freeze, "\u0116"=>"E\u0307".freeze, "\u0117"=>"e\u0307".freeze, "\u0118"=>"E\u0328".freeze, "\u0119"=>"e\u0328".freeze, "\u011A"=>"E\u030C".freeze, "\u011B"=>"e\u030C".freeze, "\u011C"=>"G\u0302".freeze, - "\u011D"=>"g\u0302".freeze, "\u011E"=>"G\u0306".freeze, "\u011F"=>"g\u0306".freeze, "\u0120"=>"G\u0307".freeze, "\u0121"=>"g\u0307".freeze, "\u0122"=>"G\u0327".freeze, "\u0123"=>"g\u0327".freeze, "\u0124"=>"H\u0302".freeze, - "\u0125"=>"h\u0302".freeze, "\u0128"=>"I\u0303".freeze, "\u0129"=>"i\u0303".freeze, "\u012A"=>"I\u0304".freeze, "\u012B"=>"i\u0304".freeze, "\u012C"=>"I\u0306".freeze, "\u012D"=>"i\u0306".freeze, "\u012E"=>"I\u0328".freeze, - "\u012F"=>"i\u0328".freeze, "\u0130"=>"I\u0307".freeze, "\u0134"=>"J\u0302".freeze, "\u0135"=>"j\u0302".freeze, "\u0136"=>"K\u0327".freeze, "\u0137"=>"k\u0327".freeze, "\u0139"=>"L\u0301".freeze, "\u013A"=>"l\u0301".freeze, - "\u013B"=>"L\u0327".freeze, "\u013C"=>"l\u0327".freeze, "\u013D"=>"L\u030C".freeze, "\u013E"=>"l\u030C".freeze, "\u0143"=>"N\u0301".freeze, "\u0144"=>"n\u0301".freeze, "\u0145"=>"N\u0327".freeze, "\u0146"=>"n\u0327".freeze, - "\u0147"=>"N\u030C".freeze, "\u0148"=>"n\u030C".freeze, "\u014C"=>"O\u0304".freeze, "\u014D"=>"o\u0304".freeze, "\u014E"=>"O\u0306".freeze, "\u014F"=>"o\u0306".freeze, "\u0150"=>"O\u030B".freeze, "\u0151"=>"o\u030B".freeze, - "\u0154"=>"R\u0301".freeze, "\u0155"=>"r\u0301".freeze, "\u0156"=>"R\u0327".freeze, "\u0157"=>"r\u0327".freeze, "\u0158"=>"R\u030C".freeze, "\u0159"=>"r\u030C".freeze, "\u015A"=>"S\u0301".freeze, "\u015B"=>"s\u0301".freeze, - "\u015C"=>"S\u0302".freeze, "\u015D"=>"s\u0302".freeze, "\u015E"=>"S\u0327".freeze, "\u015F"=>"s\u0327".freeze, "\u0160"=>"S\u030C".freeze, "\u0161"=>"s\u030C".freeze, "\u0162"=>"T\u0327".freeze, "\u0163"=>"t\u0327".freeze, - "\u0164"=>"T\u030C".freeze, "\u0165"=>"t\u030C".freeze, "\u0168"=>"U\u0303".freeze, "\u0169"=>"u\u0303".freeze, "\u016A"=>"U\u0304".freeze, "\u016B"=>"u\u0304".freeze, "\u016C"=>"U\u0306".freeze, "\u016D"=>"u\u0306".freeze, - "\u016E"=>"U\u030A".freeze, "\u016F"=>"u\u030A".freeze, "\u0170"=>"U\u030B".freeze, "\u0171"=>"u\u030B".freeze, "\u0172"=>"U\u0328".freeze, "\u0173"=>"u\u0328".freeze, "\u0174"=>"W\u0302".freeze, "\u0175"=>"w\u0302".freeze, - "\u0176"=>"Y\u0302".freeze, "\u0177"=>"y\u0302".freeze, "\u0178"=>"Y\u0308".freeze, "\u0179"=>"Z\u0301".freeze, "\u017A"=>"z\u0301".freeze, "\u017B"=>"Z\u0307".freeze, "\u017C"=>"z\u0307".freeze, "\u017D"=>"Z\u030C".freeze, - "\u017E"=>"z\u030C".freeze, "\u01A0"=>"O\u031B".freeze, "\u01A1"=>"o\u031B".freeze, "\u01AF"=>"U\u031B".freeze, "\u01B0"=>"u\u031B".freeze, "\u01CD"=>"A\u030C".freeze, "\u01CE"=>"a\u030C".freeze, "\u01CF"=>"I\u030C".freeze, - "\u01D0"=>"i\u030C".freeze, "\u01D1"=>"O\u030C".freeze, "\u01D2"=>"o\u030C".freeze, "\u01D3"=>"U\u030C".freeze, "\u01D4"=>"u\u030C".freeze, "\u01D5"=>"U\u0308\u0304".freeze, "\u01D6"=>"u\u0308\u0304".freeze, "\u01D7"=>"U\u0308\u0301".freeze, - "\u01D8"=>"u\u0308\u0301".freeze, "\u01D9"=>"U\u0308\u030C".freeze, "\u01DA"=>"u\u0308\u030C".freeze, "\u01DB"=>"U\u0308\u0300".freeze, "\u01DC"=>"u\u0308\u0300".freeze, "\u01DE"=>"A\u0308\u0304".freeze, "\u01DF"=>"a\u0308\u0304".freeze, "\u01E0"=>"A\u0307\u0304".freeze, - "\u01E1"=>"a\u0307\u0304".freeze, "\u01E2"=>"\u00C6\u0304".freeze, "\u01E3"=>"\u00E6\u0304".freeze, "\u01E6"=>"G\u030C".freeze, "\u01E7"=>"g\u030C".freeze, "\u01E8"=>"K\u030C".freeze, "\u01E9"=>"k\u030C".freeze, "\u01EA"=>"O\u0328".freeze, - "\u01EB"=>"o\u0328".freeze, "\u01EC"=>"O\u0328\u0304".freeze, "\u01ED"=>"o\u0328\u0304".freeze, "\u01EE"=>"\u01B7\u030C".freeze, "\u01EF"=>"\u0292\u030C".freeze, "\u01F0"=>"j\u030C".freeze, "\u01F4"=>"G\u0301".freeze, "\u01F5"=>"g\u0301".freeze, - "\u01F8"=>"N\u0300".freeze, "\u01F9"=>"n\u0300".freeze, "\u01FA"=>"A\u030A\u0301".freeze, "\u01FB"=>"a\u030A\u0301".freeze, "\u01FC"=>"\u00C6\u0301".freeze, "\u01FD"=>"\u00E6\u0301".freeze, "\u01FE"=>"\u00D8\u0301".freeze, "\u01FF"=>"\u00F8\u0301".freeze, - "\u0200"=>"A\u030F".freeze, "\u0201"=>"a\u030F".freeze, "\u0202"=>"A\u0311".freeze, "\u0203"=>"a\u0311".freeze, "\u0204"=>"E\u030F".freeze, "\u0205"=>"e\u030F".freeze, "\u0206"=>"E\u0311".freeze, "\u0207"=>"e\u0311".freeze, - "\u0208"=>"I\u030F".freeze, "\u0209"=>"i\u030F".freeze, "\u020A"=>"I\u0311".freeze, "\u020B"=>"i\u0311".freeze, "\u020C"=>"O\u030F".freeze, "\u020D"=>"o\u030F".freeze, "\u020E"=>"O\u0311".freeze, "\u020F"=>"o\u0311".freeze, - "\u0210"=>"R\u030F".freeze, "\u0211"=>"r\u030F".freeze, "\u0212"=>"R\u0311".freeze, "\u0213"=>"r\u0311".freeze, "\u0214"=>"U\u030F".freeze, "\u0215"=>"u\u030F".freeze, "\u0216"=>"U\u0311".freeze, "\u0217"=>"u\u0311".freeze, - "\u0218"=>"S\u0326".freeze, "\u0219"=>"s\u0326".freeze, "\u021A"=>"T\u0326".freeze, "\u021B"=>"t\u0326".freeze, "\u021E"=>"H\u030C".freeze, "\u021F"=>"h\u030C".freeze, "\u0226"=>"A\u0307".freeze, "\u0227"=>"a\u0307".freeze, - "\u0228"=>"E\u0327".freeze, "\u0229"=>"e\u0327".freeze, "\u022A"=>"O\u0308\u0304".freeze, "\u022B"=>"o\u0308\u0304".freeze, "\u022C"=>"O\u0303\u0304".freeze, "\u022D"=>"o\u0303\u0304".freeze, "\u022E"=>"O\u0307".freeze, "\u022F"=>"o\u0307".freeze, - "\u0230"=>"O\u0307\u0304".freeze, "\u0231"=>"o\u0307\u0304".freeze, "\u0232"=>"Y\u0304".freeze, "\u0233"=>"y\u0304".freeze, "\u0340"=>"\u0300".freeze, "\u0341"=>"\u0301".freeze, "\u0343"=>"\u0313".freeze, "\u0344"=>"\u0308\u0301".freeze, - "\u0374"=>"\u02B9".freeze, "\u037E"=>";".freeze, "\u0385"=>"\u00A8\u0301".freeze, "\u0386"=>"\u0391\u0301".freeze, "\u0387"=>"\u00B7".freeze, "\u0388"=>"\u0395\u0301".freeze, "\u0389"=>"\u0397\u0301".freeze, "\u038A"=>"\u0399\u0301".freeze, - "\u038C"=>"\u039F\u0301".freeze, "\u038E"=>"\u03A5\u0301".freeze, "\u038F"=>"\u03A9\u0301".freeze, "\u0390"=>"\u03B9\u0308\u0301".freeze, "\u03AA"=>"\u0399\u0308".freeze, "\u03AB"=>"\u03A5\u0308".freeze, "\u03AC"=>"\u03B1\u0301".freeze, "\u03AD"=>"\u03B5\u0301".freeze, - "\u03AE"=>"\u03B7\u0301".freeze, "\u03AF"=>"\u03B9\u0301".freeze, "\u03B0"=>"\u03C5\u0308\u0301".freeze, "\u03CA"=>"\u03B9\u0308".freeze, "\u03CB"=>"\u03C5\u0308".freeze, "\u03CC"=>"\u03BF\u0301".freeze, "\u03CD"=>"\u03C5\u0301".freeze, "\u03CE"=>"\u03C9\u0301".freeze, - "\u03D3"=>"\u03D2\u0301".freeze, "\u03D4"=>"\u03D2\u0308".freeze, "\u0400"=>"\u0415\u0300".freeze, "\u0401"=>"\u0415\u0308".freeze, "\u0403"=>"\u0413\u0301".freeze, "\u0407"=>"\u0406\u0308".freeze, "\u040C"=>"\u041A\u0301".freeze, "\u040D"=>"\u0418\u0300".freeze, - "\u040E"=>"\u0423\u0306".freeze, "\u0419"=>"\u0418\u0306".freeze, "\u0439"=>"\u0438\u0306".freeze, "\u0450"=>"\u0435\u0300".freeze, "\u0451"=>"\u0435\u0308".freeze, "\u0453"=>"\u0433\u0301".freeze, "\u0457"=>"\u0456\u0308".freeze, "\u045C"=>"\u043A\u0301".freeze, - "\u045D"=>"\u0438\u0300".freeze, "\u045E"=>"\u0443\u0306".freeze, "\u0476"=>"\u0474\u030F".freeze, "\u0477"=>"\u0475\u030F".freeze, "\u04C1"=>"\u0416\u0306".freeze, "\u04C2"=>"\u0436\u0306".freeze, "\u04D0"=>"\u0410\u0306".freeze, "\u04D1"=>"\u0430\u0306".freeze, - "\u04D2"=>"\u0410\u0308".freeze, "\u04D3"=>"\u0430\u0308".freeze, "\u04D6"=>"\u0415\u0306".freeze, "\u04D7"=>"\u0435\u0306".freeze, "\u04DA"=>"\u04D8\u0308".freeze, "\u04DB"=>"\u04D9\u0308".freeze, "\u04DC"=>"\u0416\u0308".freeze, "\u04DD"=>"\u0436\u0308".freeze, - "\u04DE"=>"\u0417\u0308".freeze, "\u04DF"=>"\u0437\u0308".freeze, "\u04E2"=>"\u0418\u0304".freeze, "\u04E3"=>"\u0438\u0304".freeze, "\u04E4"=>"\u0418\u0308".freeze, "\u04E5"=>"\u0438\u0308".freeze, "\u04E6"=>"\u041E\u0308".freeze, "\u04E7"=>"\u043E\u0308".freeze, - "\u04EA"=>"\u04E8\u0308".freeze, "\u04EB"=>"\u04E9\u0308".freeze, "\u04EC"=>"\u042D\u0308".freeze, "\u04ED"=>"\u044D\u0308".freeze, "\u04EE"=>"\u0423\u0304".freeze, "\u04EF"=>"\u0443\u0304".freeze, "\u04F0"=>"\u0423\u0308".freeze, "\u04F1"=>"\u0443\u0308".freeze, - "\u04F2"=>"\u0423\u030B".freeze, "\u04F3"=>"\u0443\u030B".freeze, "\u04F4"=>"\u0427\u0308".freeze, "\u04F5"=>"\u0447\u0308".freeze, "\u04F8"=>"\u042B\u0308".freeze, "\u04F9"=>"\u044B\u0308".freeze, "\u0622"=>"\u0627\u0653".freeze, "\u0623"=>"\u0627\u0654".freeze, - "\u0624"=>"\u0648\u0654".freeze, "\u0625"=>"\u0627\u0655".freeze, "\u0626"=>"\u064A\u0654".freeze, "\u06C0"=>"\u06D5\u0654".freeze, "\u06C2"=>"\u06C1\u0654".freeze, "\u06D3"=>"\u06D2\u0654".freeze, "\u0929"=>"\u0928\u093C".freeze, "\u0931"=>"\u0930\u093C".freeze, - "\u0934"=>"\u0933\u093C".freeze, "\u0958"=>"\u0915\u093C".freeze, "\u0959"=>"\u0916\u093C".freeze, "\u095A"=>"\u0917\u093C".freeze, "\u095B"=>"\u091C\u093C".freeze, "\u095C"=>"\u0921\u093C".freeze, "\u095D"=>"\u0922\u093C".freeze, "\u095E"=>"\u092B\u093C".freeze, - "\u095F"=>"\u092F\u093C".freeze, "\u09CB"=>"\u09C7\u09BE".freeze, "\u09CC"=>"\u09C7\u09D7".freeze, "\u09DC"=>"\u09A1\u09BC".freeze, "\u09DD"=>"\u09A2\u09BC".freeze, "\u09DF"=>"\u09AF\u09BC".freeze, "\u0A33"=>"\u0A32\u0A3C".freeze, "\u0A36"=>"\u0A38\u0A3C".freeze, - "\u0A59"=>"\u0A16\u0A3C".freeze, "\u0A5A"=>"\u0A17\u0A3C".freeze, "\u0A5B"=>"\u0A1C\u0A3C".freeze, "\u0A5E"=>"\u0A2B\u0A3C".freeze, "\u0B48"=>"\u0B47\u0B56".freeze, "\u0B4B"=>"\u0B47\u0B3E".freeze, "\u0B4C"=>"\u0B47\u0B57".freeze, "\u0B5C"=>"\u0B21\u0B3C".freeze, - "\u0B5D"=>"\u0B22\u0B3C".freeze, "\u0B94"=>"\u0B92\u0BD7".freeze, "\u0BCA"=>"\u0BC6\u0BBE".freeze, "\u0BCB"=>"\u0BC7\u0BBE".freeze, "\u0BCC"=>"\u0BC6\u0BD7".freeze, "\u0C48"=>"\u0C46\u0C56".freeze, "\u0CC0"=>"\u0CBF\u0CD5".freeze, "\u0CC7"=>"\u0CC6\u0CD5".freeze, - "\u0CC8"=>"\u0CC6\u0CD6".freeze, "\u0CCA"=>"\u0CC6\u0CC2".freeze, "\u0CCB"=>"\u0CC6\u0CC2\u0CD5".freeze, "\u0D4A"=>"\u0D46\u0D3E".freeze, "\u0D4B"=>"\u0D47\u0D3E".freeze, "\u0D4C"=>"\u0D46\u0D57".freeze, "\u0DDA"=>"\u0DD9\u0DCA".freeze, "\u0DDC"=>"\u0DD9\u0DCF".freeze, - "\u0DDD"=>"\u0DD9\u0DCF\u0DCA".freeze, "\u0DDE"=>"\u0DD9\u0DDF".freeze, "\u0F43"=>"\u0F42\u0FB7".freeze, "\u0F4D"=>"\u0F4C\u0FB7".freeze, "\u0F52"=>"\u0F51\u0FB7".freeze, "\u0F57"=>"\u0F56\u0FB7".freeze, "\u0F5C"=>"\u0F5B\u0FB7".freeze, "\u0F69"=>"\u0F40\u0FB5".freeze, - "\u0F73"=>"\u0F71\u0F72".freeze, "\u0F75"=>"\u0F71\u0F74".freeze, "\u0F76"=>"\u0FB2\u0F80".freeze, "\u0F78"=>"\u0FB3\u0F80".freeze, "\u0F81"=>"\u0F71\u0F80".freeze, "\u0F93"=>"\u0F92\u0FB7".freeze, "\u0F9D"=>"\u0F9C\u0FB7".freeze, "\u0FA2"=>"\u0FA1\u0FB7".freeze, - "\u0FA7"=>"\u0FA6\u0FB7".freeze, "\u0FAC"=>"\u0FAB\u0FB7".freeze, "\u0FB9"=>"\u0F90\u0FB5".freeze, "\u1026"=>"\u1025\u102E".freeze, "\u1B06"=>"\u1B05\u1B35".freeze, "\u1B08"=>"\u1B07\u1B35".freeze, "\u1B0A"=>"\u1B09\u1B35".freeze, "\u1B0C"=>"\u1B0B\u1B35".freeze, - "\u1B0E"=>"\u1B0D\u1B35".freeze, "\u1B12"=>"\u1B11\u1B35".freeze, "\u1B3B"=>"\u1B3A\u1B35".freeze, "\u1B3D"=>"\u1B3C\u1B35".freeze, "\u1B40"=>"\u1B3E\u1B35".freeze, "\u1B41"=>"\u1B3F\u1B35".freeze, "\u1B43"=>"\u1B42\u1B35".freeze, "\u1E00"=>"A\u0325".freeze, - "\u1E01"=>"a\u0325".freeze, "\u1E02"=>"B\u0307".freeze, "\u1E03"=>"b\u0307".freeze, "\u1E04"=>"B\u0323".freeze, "\u1E05"=>"b\u0323".freeze, "\u1E06"=>"B\u0331".freeze, "\u1E07"=>"b\u0331".freeze, "\u1E08"=>"C\u0327\u0301".freeze, - "\u1E09"=>"c\u0327\u0301".freeze, "\u1E0A"=>"D\u0307".freeze, "\u1E0B"=>"d\u0307".freeze, "\u1E0C"=>"D\u0323".freeze, "\u1E0D"=>"d\u0323".freeze, "\u1E0E"=>"D\u0331".freeze, "\u1E0F"=>"d\u0331".freeze, "\u1E10"=>"D\u0327".freeze, - "\u1E11"=>"d\u0327".freeze, "\u1E12"=>"D\u032D".freeze, "\u1E13"=>"d\u032D".freeze, "\u1E14"=>"E\u0304\u0300".freeze, "\u1E15"=>"e\u0304\u0300".freeze, "\u1E16"=>"E\u0304\u0301".freeze, "\u1E17"=>"e\u0304\u0301".freeze, "\u1E18"=>"E\u032D".freeze, - "\u1E19"=>"e\u032D".freeze, "\u1E1A"=>"E\u0330".freeze, "\u1E1B"=>"e\u0330".freeze, "\u1E1C"=>"E\u0327\u0306".freeze, "\u1E1D"=>"e\u0327\u0306".freeze, "\u1E1E"=>"F\u0307".freeze, "\u1E1F"=>"f\u0307".freeze, "\u1E20"=>"G\u0304".freeze, - "\u1E21"=>"g\u0304".freeze, "\u1E22"=>"H\u0307".freeze, "\u1E23"=>"h\u0307".freeze, "\u1E24"=>"H\u0323".freeze, "\u1E25"=>"h\u0323".freeze, "\u1E26"=>"H\u0308".freeze, "\u1E27"=>"h\u0308".freeze, "\u1E28"=>"H\u0327".freeze, - "\u1E29"=>"h\u0327".freeze, "\u1E2A"=>"H\u032E".freeze, "\u1E2B"=>"h\u032E".freeze, "\u1E2C"=>"I\u0330".freeze, "\u1E2D"=>"i\u0330".freeze, "\u1E2E"=>"I\u0308\u0301".freeze, "\u1E2F"=>"i\u0308\u0301".freeze, "\u1E30"=>"K\u0301".freeze, - "\u1E31"=>"k\u0301".freeze, "\u1E32"=>"K\u0323".freeze, "\u1E33"=>"k\u0323".freeze, "\u1E34"=>"K\u0331".freeze, "\u1E35"=>"k\u0331".freeze, "\u1E36"=>"L\u0323".freeze, "\u1E37"=>"l\u0323".freeze, "\u1E38"=>"L\u0323\u0304".freeze, - "\u1E39"=>"l\u0323\u0304".freeze, "\u1E3A"=>"L\u0331".freeze, "\u1E3B"=>"l\u0331".freeze, "\u1E3C"=>"L\u032D".freeze, "\u1E3D"=>"l\u032D".freeze, "\u1E3E"=>"M\u0301".freeze, "\u1E3F"=>"m\u0301".freeze, "\u1E40"=>"M\u0307".freeze, - "\u1E41"=>"m\u0307".freeze, "\u1E42"=>"M\u0323".freeze, "\u1E43"=>"m\u0323".freeze, "\u1E44"=>"N\u0307".freeze, "\u1E45"=>"n\u0307".freeze, "\u1E46"=>"N\u0323".freeze, "\u1E47"=>"n\u0323".freeze, "\u1E48"=>"N\u0331".freeze, - "\u1E49"=>"n\u0331".freeze, "\u1E4A"=>"N\u032D".freeze, "\u1E4B"=>"n\u032D".freeze, "\u1E4C"=>"O\u0303\u0301".freeze, "\u1E4D"=>"o\u0303\u0301".freeze, "\u1E4E"=>"O\u0303\u0308".freeze, "\u1E4F"=>"o\u0303\u0308".freeze, "\u1E50"=>"O\u0304\u0300".freeze, - "\u1E51"=>"o\u0304\u0300".freeze, "\u1E52"=>"O\u0304\u0301".freeze, "\u1E53"=>"o\u0304\u0301".freeze, "\u1E54"=>"P\u0301".freeze, "\u1E55"=>"p\u0301".freeze, "\u1E56"=>"P\u0307".freeze, "\u1E57"=>"p\u0307".freeze, "\u1E58"=>"R\u0307".freeze, - "\u1E59"=>"r\u0307".freeze, "\u1E5A"=>"R\u0323".freeze, "\u1E5B"=>"r\u0323".freeze, "\u1E5C"=>"R\u0323\u0304".freeze, "\u1E5D"=>"r\u0323\u0304".freeze, "\u1E5E"=>"R\u0331".freeze, "\u1E5F"=>"r\u0331".freeze, "\u1E60"=>"S\u0307".freeze, - "\u1E61"=>"s\u0307".freeze, "\u1E62"=>"S\u0323".freeze, "\u1E63"=>"s\u0323".freeze, "\u1E64"=>"S\u0301\u0307".freeze, "\u1E65"=>"s\u0301\u0307".freeze, "\u1E66"=>"S\u030C\u0307".freeze, "\u1E67"=>"s\u030C\u0307".freeze, "\u1E68"=>"S\u0323\u0307".freeze, - "\u1E69"=>"s\u0323\u0307".freeze, "\u1E6A"=>"T\u0307".freeze, "\u1E6B"=>"t\u0307".freeze, "\u1E6C"=>"T\u0323".freeze, "\u1E6D"=>"t\u0323".freeze, "\u1E6E"=>"T\u0331".freeze, "\u1E6F"=>"t\u0331".freeze, "\u1E70"=>"T\u032D".freeze, - "\u1E71"=>"t\u032D".freeze, "\u1E72"=>"U\u0324".freeze, "\u1E73"=>"u\u0324".freeze, "\u1E74"=>"U\u0330".freeze, "\u1E75"=>"u\u0330".freeze, "\u1E76"=>"U\u032D".freeze, "\u1E77"=>"u\u032D".freeze, "\u1E78"=>"U\u0303\u0301".freeze, - "\u1E79"=>"u\u0303\u0301".freeze, "\u1E7A"=>"U\u0304\u0308".freeze, "\u1E7B"=>"u\u0304\u0308".freeze, "\u1E7C"=>"V\u0303".freeze, "\u1E7D"=>"v\u0303".freeze, "\u1E7E"=>"V\u0323".freeze, "\u1E7F"=>"v\u0323".freeze, "\u1E80"=>"W\u0300".freeze, - "\u1E81"=>"w\u0300".freeze, "\u1E82"=>"W\u0301".freeze, "\u1E83"=>"w\u0301".freeze, "\u1E84"=>"W\u0308".freeze, "\u1E85"=>"w\u0308".freeze, "\u1E86"=>"W\u0307".freeze, "\u1E87"=>"w\u0307".freeze, "\u1E88"=>"W\u0323".freeze, - "\u1E89"=>"w\u0323".freeze, "\u1E8A"=>"X\u0307".freeze, "\u1E8B"=>"x\u0307".freeze, "\u1E8C"=>"X\u0308".freeze, "\u1E8D"=>"x\u0308".freeze, "\u1E8E"=>"Y\u0307".freeze, "\u1E8F"=>"y\u0307".freeze, "\u1E90"=>"Z\u0302".freeze, - "\u1E91"=>"z\u0302".freeze, "\u1E92"=>"Z\u0323".freeze, "\u1E93"=>"z\u0323".freeze, "\u1E94"=>"Z\u0331".freeze, "\u1E95"=>"z\u0331".freeze, "\u1E96"=>"h\u0331".freeze, "\u1E97"=>"t\u0308".freeze, "\u1E98"=>"w\u030A".freeze, - "\u1E99"=>"y\u030A".freeze, "\u1E9B"=>"\u017F\u0307".freeze, "\u1EA0"=>"A\u0323".freeze, "\u1EA1"=>"a\u0323".freeze, "\u1EA2"=>"A\u0309".freeze, "\u1EA3"=>"a\u0309".freeze, "\u1EA4"=>"A\u0302\u0301".freeze, "\u1EA5"=>"a\u0302\u0301".freeze, - "\u1EA6"=>"A\u0302\u0300".freeze, "\u1EA7"=>"a\u0302\u0300".freeze, "\u1EA8"=>"A\u0302\u0309".freeze, "\u1EA9"=>"a\u0302\u0309".freeze, "\u1EAA"=>"A\u0302\u0303".freeze, "\u1EAB"=>"a\u0302\u0303".freeze, "\u1EAC"=>"A\u0323\u0302".freeze, "\u1EAD"=>"a\u0323\u0302".freeze, - "\u1EAE"=>"A\u0306\u0301".freeze, "\u1EAF"=>"a\u0306\u0301".freeze, "\u1EB0"=>"A\u0306\u0300".freeze, "\u1EB1"=>"a\u0306\u0300".freeze, "\u1EB2"=>"A\u0306\u0309".freeze, "\u1EB3"=>"a\u0306\u0309".freeze, "\u1EB4"=>"A\u0306\u0303".freeze, "\u1EB5"=>"a\u0306\u0303".freeze, - "\u1EB6"=>"A\u0323\u0306".freeze, "\u1EB7"=>"a\u0323\u0306".freeze, "\u1EB8"=>"E\u0323".freeze, "\u1EB9"=>"e\u0323".freeze, "\u1EBA"=>"E\u0309".freeze, "\u1EBB"=>"e\u0309".freeze, "\u1EBC"=>"E\u0303".freeze, "\u1EBD"=>"e\u0303".freeze, - "\u1EBE"=>"E\u0302\u0301".freeze, "\u1EBF"=>"e\u0302\u0301".freeze, "\u1EC0"=>"E\u0302\u0300".freeze, "\u1EC1"=>"e\u0302\u0300".freeze, "\u1EC2"=>"E\u0302\u0309".freeze, "\u1EC3"=>"e\u0302\u0309".freeze, "\u1EC4"=>"E\u0302\u0303".freeze, "\u1EC5"=>"e\u0302\u0303".freeze, - "\u1EC6"=>"E\u0323\u0302".freeze, "\u1EC7"=>"e\u0323\u0302".freeze, "\u1EC8"=>"I\u0309".freeze, "\u1EC9"=>"i\u0309".freeze, "\u1ECA"=>"I\u0323".freeze, "\u1ECB"=>"i\u0323".freeze, "\u1ECC"=>"O\u0323".freeze, "\u1ECD"=>"o\u0323".freeze, - "\u1ECE"=>"O\u0309".freeze, "\u1ECF"=>"o\u0309".freeze, "\u1ED0"=>"O\u0302\u0301".freeze, "\u1ED1"=>"o\u0302\u0301".freeze, "\u1ED2"=>"O\u0302\u0300".freeze, "\u1ED3"=>"o\u0302\u0300".freeze, "\u1ED4"=>"O\u0302\u0309".freeze, "\u1ED5"=>"o\u0302\u0309".freeze, - "\u1ED6"=>"O\u0302\u0303".freeze, "\u1ED7"=>"o\u0302\u0303".freeze, "\u1ED8"=>"O\u0323\u0302".freeze, "\u1ED9"=>"o\u0323\u0302".freeze, "\u1EDA"=>"O\u031B\u0301".freeze, "\u1EDB"=>"o\u031B\u0301".freeze, "\u1EDC"=>"O\u031B\u0300".freeze, "\u1EDD"=>"o\u031B\u0300".freeze, - "\u1EDE"=>"O\u031B\u0309".freeze, "\u1EDF"=>"o\u031B\u0309".freeze, "\u1EE0"=>"O\u031B\u0303".freeze, "\u1EE1"=>"o\u031B\u0303".freeze, "\u1EE2"=>"O\u031B\u0323".freeze, "\u1EE3"=>"o\u031B\u0323".freeze, "\u1EE4"=>"U\u0323".freeze, "\u1EE5"=>"u\u0323".freeze, - "\u1EE6"=>"U\u0309".freeze, "\u1EE7"=>"u\u0309".freeze, "\u1EE8"=>"U\u031B\u0301".freeze, "\u1EE9"=>"u\u031B\u0301".freeze, "\u1EEA"=>"U\u031B\u0300".freeze, "\u1EEB"=>"u\u031B\u0300".freeze, "\u1EEC"=>"U\u031B\u0309".freeze, "\u1EED"=>"u\u031B\u0309".freeze, - "\u1EEE"=>"U\u031B\u0303".freeze, "\u1EEF"=>"u\u031B\u0303".freeze, "\u1EF0"=>"U\u031B\u0323".freeze, "\u1EF1"=>"u\u031B\u0323".freeze, "\u1EF2"=>"Y\u0300".freeze, "\u1EF3"=>"y\u0300".freeze, "\u1EF4"=>"Y\u0323".freeze, "\u1EF5"=>"y\u0323".freeze, - "\u1EF6"=>"Y\u0309".freeze, "\u1EF7"=>"y\u0309".freeze, "\u1EF8"=>"Y\u0303".freeze, "\u1EF9"=>"y\u0303".freeze, "\u1F00"=>"\u03B1\u0313".freeze, "\u1F01"=>"\u03B1\u0314".freeze, "\u1F02"=>"\u03B1\u0313\u0300".freeze, "\u1F03"=>"\u03B1\u0314\u0300".freeze, - "\u1F04"=>"\u03B1\u0313\u0301".freeze, "\u1F05"=>"\u03B1\u0314\u0301".freeze, "\u1F06"=>"\u03B1\u0313\u0342".freeze, "\u1F07"=>"\u03B1\u0314\u0342".freeze, "\u1F08"=>"\u0391\u0313".freeze, "\u1F09"=>"\u0391\u0314".freeze, "\u1F0A"=>"\u0391\u0313\u0300".freeze, "\u1F0B"=>"\u0391\u0314\u0300".freeze, - "\u1F0C"=>"\u0391\u0313\u0301".freeze, "\u1F0D"=>"\u0391\u0314\u0301".freeze, "\u1F0E"=>"\u0391\u0313\u0342".freeze, "\u1F0F"=>"\u0391\u0314\u0342".freeze, "\u1F10"=>"\u03B5\u0313".freeze, "\u1F11"=>"\u03B5\u0314".freeze, "\u1F12"=>"\u03B5\u0313\u0300".freeze, "\u1F13"=>"\u03B5\u0314\u0300".freeze, - "\u1F14"=>"\u03B5\u0313\u0301".freeze, "\u1F15"=>"\u03B5\u0314\u0301".freeze, "\u1F18"=>"\u0395\u0313".freeze, "\u1F19"=>"\u0395\u0314".freeze, "\u1F1A"=>"\u0395\u0313\u0300".freeze, "\u1F1B"=>"\u0395\u0314\u0300".freeze, "\u1F1C"=>"\u0395\u0313\u0301".freeze, "\u1F1D"=>"\u0395\u0314\u0301".freeze, - "\u1F20"=>"\u03B7\u0313".freeze, "\u1F21"=>"\u03B7\u0314".freeze, "\u1F22"=>"\u03B7\u0313\u0300".freeze, "\u1F23"=>"\u03B7\u0314\u0300".freeze, "\u1F24"=>"\u03B7\u0313\u0301".freeze, "\u1F25"=>"\u03B7\u0314\u0301".freeze, "\u1F26"=>"\u03B7\u0313\u0342".freeze, "\u1F27"=>"\u03B7\u0314\u0342".freeze, - "\u1F28"=>"\u0397\u0313".freeze, "\u1F29"=>"\u0397\u0314".freeze, "\u1F2A"=>"\u0397\u0313\u0300".freeze, "\u1F2B"=>"\u0397\u0314\u0300".freeze, "\u1F2C"=>"\u0397\u0313\u0301".freeze, "\u1F2D"=>"\u0397\u0314\u0301".freeze, "\u1F2E"=>"\u0397\u0313\u0342".freeze, "\u1F2F"=>"\u0397\u0314\u0342".freeze, - "\u1F30"=>"\u03B9\u0313".freeze, "\u1F31"=>"\u03B9\u0314".freeze, "\u1F32"=>"\u03B9\u0313\u0300".freeze, "\u1F33"=>"\u03B9\u0314\u0300".freeze, "\u1F34"=>"\u03B9\u0313\u0301".freeze, "\u1F35"=>"\u03B9\u0314\u0301".freeze, "\u1F36"=>"\u03B9\u0313\u0342".freeze, "\u1F37"=>"\u03B9\u0314\u0342".freeze, - "\u1F38"=>"\u0399\u0313".freeze, "\u1F39"=>"\u0399\u0314".freeze, "\u1F3A"=>"\u0399\u0313\u0300".freeze, "\u1F3B"=>"\u0399\u0314\u0300".freeze, "\u1F3C"=>"\u0399\u0313\u0301".freeze, "\u1F3D"=>"\u0399\u0314\u0301".freeze, "\u1F3E"=>"\u0399\u0313\u0342".freeze, "\u1F3F"=>"\u0399\u0314\u0342".freeze, - "\u1F40"=>"\u03BF\u0313".freeze, "\u1F41"=>"\u03BF\u0314".freeze, "\u1F42"=>"\u03BF\u0313\u0300".freeze, "\u1F43"=>"\u03BF\u0314\u0300".freeze, "\u1F44"=>"\u03BF\u0313\u0301".freeze, "\u1F45"=>"\u03BF\u0314\u0301".freeze, "\u1F48"=>"\u039F\u0313".freeze, "\u1F49"=>"\u039F\u0314".freeze, - "\u1F4A"=>"\u039F\u0313\u0300".freeze, "\u1F4B"=>"\u039F\u0314\u0300".freeze, "\u1F4C"=>"\u039F\u0313\u0301".freeze, "\u1F4D"=>"\u039F\u0314\u0301".freeze, "\u1F50"=>"\u03C5\u0313".freeze, "\u1F51"=>"\u03C5\u0314".freeze, "\u1F52"=>"\u03C5\u0313\u0300".freeze, "\u1F53"=>"\u03C5\u0314\u0300".freeze, - "\u1F54"=>"\u03C5\u0313\u0301".freeze, "\u1F55"=>"\u03C5\u0314\u0301".freeze, "\u1F56"=>"\u03C5\u0313\u0342".freeze, "\u1F57"=>"\u03C5\u0314\u0342".freeze, "\u1F59"=>"\u03A5\u0314".freeze, "\u1F5B"=>"\u03A5\u0314\u0300".freeze, "\u1F5D"=>"\u03A5\u0314\u0301".freeze, "\u1F5F"=>"\u03A5\u0314\u0342".freeze, - "\u1F60"=>"\u03C9\u0313".freeze, "\u1F61"=>"\u03C9\u0314".freeze, "\u1F62"=>"\u03C9\u0313\u0300".freeze, "\u1F63"=>"\u03C9\u0314\u0300".freeze, "\u1F64"=>"\u03C9\u0313\u0301".freeze, "\u1F65"=>"\u03C9\u0314\u0301".freeze, "\u1F66"=>"\u03C9\u0313\u0342".freeze, "\u1F67"=>"\u03C9\u0314\u0342".freeze, - "\u1F68"=>"\u03A9\u0313".freeze, "\u1F69"=>"\u03A9\u0314".freeze, "\u1F6A"=>"\u03A9\u0313\u0300".freeze, "\u1F6B"=>"\u03A9\u0314\u0300".freeze, "\u1F6C"=>"\u03A9\u0313\u0301".freeze, "\u1F6D"=>"\u03A9\u0314\u0301".freeze, "\u1F6E"=>"\u03A9\u0313\u0342".freeze, "\u1F6F"=>"\u03A9\u0314\u0342".freeze, - "\u1F70"=>"\u03B1\u0300".freeze, "\u1F71"=>"\u03B1\u0301".freeze, "\u1F72"=>"\u03B5\u0300".freeze, "\u1F73"=>"\u03B5\u0301".freeze, "\u1F74"=>"\u03B7\u0300".freeze, "\u1F75"=>"\u03B7\u0301".freeze, "\u1F76"=>"\u03B9\u0300".freeze, "\u1F77"=>"\u03B9\u0301".freeze, - "\u1F78"=>"\u03BF\u0300".freeze, "\u1F79"=>"\u03BF\u0301".freeze, "\u1F7A"=>"\u03C5\u0300".freeze, "\u1F7B"=>"\u03C5\u0301".freeze, "\u1F7C"=>"\u03C9\u0300".freeze, "\u1F7D"=>"\u03C9\u0301".freeze, "\u1F80"=>"\u03B1\u0313\u0345".freeze, "\u1F81"=>"\u03B1\u0314\u0345".freeze, - "\u1F82"=>"\u03B1\u0313\u0300\u0345".freeze, "\u1F83"=>"\u03B1\u0314\u0300\u0345".freeze, "\u1F84"=>"\u03B1\u0313\u0301\u0345".freeze, "\u1F85"=>"\u03B1\u0314\u0301\u0345".freeze, "\u1F86"=>"\u03B1\u0313\u0342\u0345".freeze, "\u1F87"=>"\u03B1\u0314\u0342\u0345".freeze, "\u1F88"=>"\u0391\u0313\u0345".freeze, "\u1F89"=>"\u0391\u0314\u0345".freeze, - "\u1F8A"=>"\u0391\u0313\u0300\u0345".freeze, "\u1F8B"=>"\u0391\u0314\u0300\u0345".freeze, "\u1F8C"=>"\u0391\u0313\u0301\u0345".freeze, "\u1F8D"=>"\u0391\u0314\u0301\u0345".freeze, "\u1F8E"=>"\u0391\u0313\u0342\u0345".freeze, "\u1F8F"=>"\u0391\u0314\u0342\u0345".freeze, "\u1F90"=>"\u03B7\u0313\u0345".freeze, "\u1F91"=>"\u03B7\u0314\u0345".freeze, - "\u1F92"=>"\u03B7\u0313\u0300\u0345".freeze, "\u1F93"=>"\u03B7\u0314\u0300\u0345".freeze, "\u1F94"=>"\u03B7\u0313\u0301\u0345".freeze, "\u1F95"=>"\u03B7\u0314\u0301\u0345".freeze, "\u1F96"=>"\u03B7\u0313\u0342\u0345".freeze, "\u1F97"=>"\u03B7\u0314\u0342\u0345".freeze, "\u1F98"=>"\u0397\u0313\u0345".freeze, "\u1F99"=>"\u0397\u0314\u0345".freeze, - "\u1F9A"=>"\u0397\u0313\u0300\u0345".freeze, "\u1F9B"=>"\u0397\u0314\u0300\u0345".freeze, "\u1F9C"=>"\u0397\u0313\u0301\u0345".freeze, "\u1F9D"=>"\u0397\u0314\u0301\u0345".freeze, "\u1F9E"=>"\u0397\u0313\u0342\u0345".freeze, "\u1F9F"=>"\u0397\u0314\u0342\u0345".freeze, "\u1FA0"=>"\u03C9\u0313\u0345".freeze, "\u1FA1"=>"\u03C9\u0314\u0345".freeze, - "\u1FA2"=>"\u03C9\u0313\u0300\u0345".freeze, "\u1FA3"=>"\u03C9\u0314\u0300\u0345".freeze, "\u1FA4"=>"\u03C9\u0313\u0301\u0345".freeze, "\u1FA5"=>"\u03C9\u0314\u0301\u0345".freeze, "\u1FA6"=>"\u03C9\u0313\u0342\u0345".freeze, "\u1FA7"=>"\u03C9\u0314\u0342\u0345".freeze, "\u1FA8"=>"\u03A9\u0313\u0345".freeze, "\u1FA9"=>"\u03A9\u0314\u0345".freeze, - "\u1FAA"=>"\u03A9\u0313\u0300\u0345".freeze, "\u1FAB"=>"\u03A9\u0314\u0300\u0345".freeze, "\u1FAC"=>"\u03A9\u0313\u0301\u0345".freeze, "\u1FAD"=>"\u03A9\u0314\u0301\u0345".freeze, "\u1FAE"=>"\u03A9\u0313\u0342\u0345".freeze, "\u1FAF"=>"\u03A9\u0314\u0342\u0345".freeze, "\u1FB0"=>"\u03B1\u0306".freeze, "\u1FB1"=>"\u03B1\u0304".freeze, - "\u1FB2"=>"\u03B1\u0300\u0345".freeze, "\u1FB3"=>"\u03B1\u0345".freeze, "\u1FB4"=>"\u03B1\u0301\u0345".freeze, "\u1FB6"=>"\u03B1\u0342".freeze, "\u1FB7"=>"\u03B1\u0342\u0345".freeze, "\u1FB8"=>"\u0391\u0306".freeze, "\u1FB9"=>"\u0391\u0304".freeze, "\u1FBA"=>"\u0391\u0300".freeze, - "\u1FBB"=>"\u0391\u0301".freeze, "\u1FBC"=>"\u0391\u0345".freeze, "\u1FBE"=>"\u03B9".freeze, "\u1FC1"=>"\u00A8\u0342".freeze, "\u1FC2"=>"\u03B7\u0300\u0345".freeze, "\u1FC3"=>"\u03B7\u0345".freeze, "\u1FC4"=>"\u03B7\u0301\u0345".freeze, "\u1FC6"=>"\u03B7\u0342".freeze, - "\u1FC7"=>"\u03B7\u0342\u0345".freeze, "\u1FC8"=>"\u0395\u0300".freeze, "\u1FC9"=>"\u0395\u0301".freeze, "\u1FCA"=>"\u0397\u0300".freeze, "\u1FCB"=>"\u0397\u0301".freeze, "\u1FCC"=>"\u0397\u0345".freeze, "\u1FCD"=>"\u1FBF\u0300".freeze, "\u1FCE"=>"\u1FBF\u0301".freeze, - "\u1FCF"=>"\u1FBF\u0342".freeze, "\u1FD0"=>"\u03B9\u0306".freeze, "\u1FD1"=>"\u03B9\u0304".freeze, "\u1FD2"=>"\u03B9\u0308\u0300".freeze, "\u1FD3"=>"\u03B9\u0308\u0301".freeze, "\u1FD6"=>"\u03B9\u0342".freeze, "\u1FD7"=>"\u03B9\u0308\u0342".freeze, "\u1FD8"=>"\u0399\u0306".freeze, - "\u1FD9"=>"\u0399\u0304".freeze, "\u1FDA"=>"\u0399\u0300".freeze, "\u1FDB"=>"\u0399\u0301".freeze, "\u1FDD"=>"\u1FFE\u0300".freeze, "\u1FDE"=>"\u1FFE\u0301".freeze, "\u1FDF"=>"\u1FFE\u0342".freeze, "\u1FE0"=>"\u03C5\u0306".freeze, "\u1FE1"=>"\u03C5\u0304".freeze, - "\u1FE2"=>"\u03C5\u0308\u0300".freeze, "\u1FE3"=>"\u03C5\u0308\u0301".freeze, "\u1FE4"=>"\u03C1\u0313".freeze, "\u1FE5"=>"\u03C1\u0314".freeze, "\u1FE6"=>"\u03C5\u0342".freeze, "\u1FE7"=>"\u03C5\u0308\u0342".freeze, "\u1FE8"=>"\u03A5\u0306".freeze, "\u1FE9"=>"\u03A5\u0304".freeze, - "\u1FEA"=>"\u03A5\u0300".freeze, "\u1FEB"=>"\u03A5\u0301".freeze, "\u1FEC"=>"\u03A1\u0314".freeze, "\u1FED"=>"\u00A8\u0300".freeze, "\u1FEE"=>"\u00A8\u0301".freeze, "\u1FEF"=>"`".freeze, "\u1FF2"=>"\u03C9\u0300\u0345".freeze, "\u1FF3"=>"\u03C9\u0345".freeze, - "\u1FF4"=>"\u03C9\u0301\u0345".freeze, "\u1FF6"=>"\u03C9\u0342".freeze, "\u1FF7"=>"\u03C9\u0342\u0345".freeze, "\u1FF8"=>"\u039F\u0300".freeze, "\u1FF9"=>"\u039F\u0301".freeze, "\u1FFA"=>"\u03A9\u0300".freeze, "\u1FFB"=>"\u03A9\u0301".freeze, "\u1FFC"=>"\u03A9\u0345".freeze, - "\u1FFD"=>"\u00B4".freeze, "\u2000"=>"\u2002".freeze, "\u2001"=>"\u2003".freeze, "\u2126"=>"\u03A9".freeze, "\u212A"=>"K".freeze, "\u212B"=>"A\u030A".freeze, "\u219A"=>"\u2190\u0338".freeze, "\u219B"=>"\u2192\u0338".freeze, - "\u21AE"=>"\u2194\u0338".freeze, "\u21CD"=>"\u21D0\u0338".freeze, "\u21CE"=>"\u21D4\u0338".freeze, "\u21CF"=>"\u21D2\u0338".freeze, "\u2204"=>"\u2203\u0338".freeze, "\u2209"=>"\u2208\u0338".freeze, "\u220C"=>"\u220B\u0338".freeze, "\u2224"=>"\u2223\u0338".freeze, - "\u2226"=>"\u2225\u0338".freeze, "\u2241"=>"\u223C\u0338".freeze, "\u2244"=>"\u2243\u0338".freeze, "\u2247"=>"\u2245\u0338".freeze, "\u2249"=>"\u2248\u0338".freeze, "\u2260"=>"=\u0338".freeze, "\u2262"=>"\u2261\u0338".freeze, "\u226D"=>"\u224D\u0338".freeze, - "\u226E"=>"<\u0338".freeze, "\u226F"=>">\u0338".freeze, "\u2270"=>"\u2264\u0338".freeze, "\u2271"=>"\u2265\u0338".freeze, "\u2274"=>"\u2272\u0338".freeze, "\u2275"=>"\u2273\u0338".freeze, "\u2278"=>"\u2276\u0338".freeze, "\u2279"=>"\u2277\u0338".freeze, - "\u2280"=>"\u227A\u0338".freeze, "\u2281"=>"\u227B\u0338".freeze, "\u2284"=>"\u2282\u0338".freeze, "\u2285"=>"\u2283\u0338".freeze, "\u2288"=>"\u2286\u0338".freeze, "\u2289"=>"\u2287\u0338".freeze, "\u22AC"=>"\u22A2\u0338".freeze, "\u22AD"=>"\u22A8\u0338".freeze, - "\u22AE"=>"\u22A9\u0338".freeze, "\u22AF"=>"\u22AB\u0338".freeze, "\u22E0"=>"\u227C\u0338".freeze, "\u22E1"=>"\u227D\u0338".freeze, "\u22E2"=>"\u2291\u0338".freeze, "\u22E3"=>"\u2292\u0338".freeze, "\u22EA"=>"\u22B2\u0338".freeze, "\u22EB"=>"\u22B3\u0338".freeze, - "\u22EC"=>"\u22B4\u0338".freeze, "\u22ED"=>"\u22B5\u0338".freeze, "\u2329"=>"\u3008".freeze, "\u232A"=>"\u3009".freeze, "\u2ADC"=>"\u2ADD\u0338".freeze, "\u304C"=>"\u304B\u3099".freeze, "\u304E"=>"\u304D\u3099".freeze, "\u3050"=>"\u304F\u3099".freeze, - "\u3052"=>"\u3051\u3099".freeze, "\u3054"=>"\u3053\u3099".freeze, "\u3056"=>"\u3055\u3099".freeze, "\u3058"=>"\u3057\u3099".freeze, "\u305A"=>"\u3059\u3099".freeze, "\u305C"=>"\u305B\u3099".freeze, "\u305E"=>"\u305D\u3099".freeze, "\u3060"=>"\u305F\u3099".freeze, - "\u3062"=>"\u3061\u3099".freeze, "\u3065"=>"\u3064\u3099".freeze, "\u3067"=>"\u3066\u3099".freeze, "\u3069"=>"\u3068\u3099".freeze, "\u3070"=>"\u306F\u3099".freeze, "\u3071"=>"\u306F\u309A".freeze, "\u3073"=>"\u3072\u3099".freeze, "\u3074"=>"\u3072\u309A".freeze, - "\u3076"=>"\u3075\u3099".freeze, "\u3077"=>"\u3075\u309A".freeze, "\u3079"=>"\u3078\u3099".freeze, "\u307A"=>"\u3078\u309A".freeze, "\u307C"=>"\u307B\u3099".freeze, "\u307D"=>"\u307B\u309A".freeze, "\u3094"=>"\u3046\u3099".freeze, "\u309E"=>"\u309D\u3099".freeze, - "\u30AC"=>"\u30AB\u3099".freeze, "\u30AE"=>"\u30AD\u3099".freeze, "\u30B0"=>"\u30AF\u3099".freeze, "\u30B2"=>"\u30B1\u3099".freeze, "\u30B4"=>"\u30B3\u3099".freeze, "\u30B6"=>"\u30B5\u3099".freeze, "\u30B8"=>"\u30B7\u3099".freeze, "\u30BA"=>"\u30B9\u3099".freeze, - "\u30BC"=>"\u30BB\u3099".freeze, "\u30BE"=>"\u30BD\u3099".freeze, "\u30C0"=>"\u30BF\u3099".freeze, "\u30C2"=>"\u30C1\u3099".freeze, "\u30C5"=>"\u30C4\u3099".freeze, "\u30C7"=>"\u30C6\u3099".freeze, "\u30C9"=>"\u30C8\u3099".freeze, "\u30D0"=>"\u30CF\u3099".freeze, - "\u30D1"=>"\u30CF\u309A".freeze, "\u30D3"=>"\u30D2\u3099".freeze, "\u30D4"=>"\u30D2\u309A".freeze, "\u30D6"=>"\u30D5\u3099".freeze, "\u30D7"=>"\u30D5\u309A".freeze, "\u30D9"=>"\u30D8\u3099".freeze, "\u30DA"=>"\u30D8\u309A".freeze, "\u30DC"=>"\u30DB\u3099".freeze, - "\u30DD"=>"\u30DB\u309A".freeze, "\u30F4"=>"\u30A6\u3099".freeze, "\u30F7"=>"\u30EF\u3099".freeze, "\u30F8"=>"\u30F0\u3099".freeze, "\u30F9"=>"\u30F1\u3099".freeze, "\u30FA"=>"\u30F2\u3099".freeze, "\u30FE"=>"\u30FD\u3099".freeze, "\uF900"=>"\u8C48".freeze, - "\uF901"=>"\u66F4".freeze, "\uF902"=>"\u8ECA".freeze, "\uF903"=>"\u8CC8".freeze, "\uF904"=>"\u6ED1".freeze, "\uF905"=>"\u4E32".freeze, "\uF906"=>"\u53E5".freeze, "\uF907"=>"\u9F9C".freeze, "\uF908"=>"\u9F9C".freeze, - "\uF909"=>"\u5951".freeze, "\uF90A"=>"\u91D1".freeze, "\uF90B"=>"\u5587".freeze, "\uF90C"=>"\u5948".freeze, "\uF90D"=>"\u61F6".freeze, "\uF90E"=>"\u7669".freeze, "\uF90F"=>"\u7F85".freeze, "\uF910"=>"\u863F".freeze, - "\uF911"=>"\u87BA".freeze, "\uF912"=>"\u88F8".freeze, "\uF913"=>"\u908F".freeze, "\uF914"=>"\u6A02".freeze, "\uF915"=>"\u6D1B".freeze, "\uF916"=>"\u70D9".freeze, "\uF917"=>"\u73DE".freeze, "\uF918"=>"\u843D".freeze, - "\uF919"=>"\u916A".freeze, "\uF91A"=>"\u99F1".freeze, "\uF91B"=>"\u4E82".freeze, "\uF91C"=>"\u5375".freeze, "\uF91D"=>"\u6B04".freeze, "\uF91E"=>"\u721B".freeze, "\uF91F"=>"\u862D".freeze, "\uF920"=>"\u9E1E".freeze, - "\uF921"=>"\u5D50".freeze, "\uF922"=>"\u6FEB".freeze, "\uF923"=>"\u85CD".freeze, "\uF924"=>"\u8964".freeze, "\uF925"=>"\u62C9".freeze, "\uF926"=>"\u81D8".freeze, "\uF927"=>"\u881F".freeze, "\uF928"=>"\u5ECA".freeze, - "\uF929"=>"\u6717".freeze, "\uF92A"=>"\u6D6A".freeze, "\uF92B"=>"\u72FC".freeze, "\uF92C"=>"\u90CE".freeze, "\uF92D"=>"\u4F86".freeze, "\uF92E"=>"\u51B7".freeze, "\uF92F"=>"\u52DE".freeze, "\uF930"=>"\u64C4".freeze, - "\uF931"=>"\u6AD3".freeze, "\uF932"=>"\u7210".freeze, "\uF933"=>"\u76E7".freeze, "\uF934"=>"\u8001".freeze, "\uF935"=>"\u8606".freeze, "\uF936"=>"\u865C".freeze, "\uF937"=>"\u8DEF".freeze, "\uF938"=>"\u9732".freeze, - "\uF939"=>"\u9B6F".freeze, "\uF93A"=>"\u9DFA".freeze, "\uF93B"=>"\u788C".freeze, "\uF93C"=>"\u797F".freeze, "\uF93D"=>"\u7DA0".freeze, "\uF93E"=>"\u83C9".freeze, "\uF93F"=>"\u9304".freeze, "\uF940"=>"\u9E7F".freeze, - "\uF941"=>"\u8AD6".freeze, "\uF942"=>"\u58DF".freeze, "\uF943"=>"\u5F04".freeze, "\uF944"=>"\u7C60".freeze, "\uF945"=>"\u807E".freeze, "\uF946"=>"\u7262".freeze, "\uF947"=>"\u78CA".freeze, "\uF948"=>"\u8CC2".freeze, - "\uF949"=>"\u96F7".freeze, "\uF94A"=>"\u58D8".freeze, "\uF94B"=>"\u5C62".freeze, "\uF94C"=>"\u6A13".freeze, "\uF94D"=>"\u6DDA".freeze, "\uF94E"=>"\u6F0F".freeze, "\uF94F"=>"\u7D2F".freeze, "\uF950"=>"\u7E37".freeze, - "\uF951"=>"\u964B".freeze, "\uF952"=>"\u52D2".freeze, "\uF953"=>"\u808B".freeze, "\uF954"=>"\u51DC".freeze, "\uF955"=>"\u51CC".freeze, "\uF956"=>"\u7A1C".freeze, "\uF957"=>"\u7DBE".freeze, "\uF958"=>"\u83F1".freeze, - "\uF959"=>"\u9675".freeze, "\uF95A"=>"\u8B80".freeze, "\uF95B"=>"\u62CF".freeze, "\uF95C"=>"\u6A02".freeze, "\uF95D"=>"\u8AFE".freeze, "\uF95E"=>"\u4E39".freeze, "\uF95F"=>"\u5BE7".freeze, "\uF960"=>"\u6012".freeze, - "\uF961"=>"\u7387".freeze, "\uF962"=>"\u7570".freeze, "\uF963"=>"\u5317".freeze, "\uF964"=>"\u78FB".freeze, "\uF965"=>"\u4FBF".freeze, "\uF966"=>"\u5FA9".freeze, "\uF967"=>"\u4E0D".freeze, "\uF968"=>"\u6CCC".freeze, - "\uF969"=>"\u6578".freeze, "\uF96A"=>"\u7D22".freeze, "\uF96B"=>"\u53C3".freeze, "\uF96C"=>"\u585E".freeze, "\uF96D"=>"\u7701".freeze, "\uF96E"=>"\u8449".freeze, "\uF96F"=>"\u8AAA".freeze, "\uF970"=>"\u6BBA".freeze, - "\uF971"=>"\u8FB0".freeze, "\uF972"=>"\u6C88".freeze, "\uF973"=>"\u62FE".freeze, "\uF974"=>"\u82E5".freeze, "\uF975"=>"\u63A0".freeze, "\uF976"=>"\u7565".freeze, "\uF977"=>"\u4EAE".freeze, "\uF978"=>"\u5169".freeze, - "\uF979"=>"\u51C9".freeze, "\uF97A"=>"\u6881".freeze, "\uF97B"=>"\u7CE7".freeze, "\uF97C"=>"\u826F".freeze, "\uF97D"=>"\u8AD2".freeze, "\uF97E"=>"\u91CF".freeze, "\uF97F"=>"\u52F5".freeze, "\uF980"=>"\u5442".freeze, - "\uF981"=>"\u5973".freeze, "\uF982"=>"\u5EEC".freeze, "\uF983"=>"\u65C5".freeze, "\uF984"=>"\u6FFE".freeze, "\uF985"=>"\u792A".freeze, "\uF986"=>"\u95AD".freeze, "\uF987"=>"\u9A6A".freeze, "\uF988"=>"\u9E97".freeze, - "\uF989"=>"\u9ECE".freeze, "\uF98A"=>"\u529B".freeze, "\uF98B"=>"\u66C6".freeze, "\uF98C"=>"\u6B77".freeze, "\uF98D"=>"\u8F62".freeze, "\uF98E"=>"\u5E74".freeze, "\uF98F"=>"\u6190".freeze, "\uF990"=>"\u6200".freeze, - "\uF991"=>"\u649A".freeze, "\uF992"=>"\u6F23".freeze, "\uF993"=>"\u7149".freeze, "\uF994"=>"\u7489".freeze, "\uF995"=>"\u79CA".freeze, "\uF996"=>"\u7DF4".freeze, "\uF997"=>"\u806F".freeze, "\uF998"=>"\u8F26".freeze, - "\uF999"=>"\u84EE".freeze, "\uF99A"=>"\u9023".freeze, "\uF99B"=>"\u934A".freeze, "\uF99C"=>"\u5217".freeze, "\uF99D"=>"\u52A3".freeze, "\uF99E"=>"\u54BD".freeze, "\uF99F"=>"\u70C8".freeze, "\uF9A0"=>"\u88C2".freeze, - "\uF9A1"=>"\u8AAA".freeze, "\uF9A2"=>"\u5EC9".freeze, "\uF9A3"=>"\u5FF5".freeze, "\uF9A4"=>"\u637B".freeze, "\uF9A5"=>"\u6BAE".freeze, "\uF9A6"=>"\u7C3E".freeze, "\uF9A7"=>"\u7375".freeze, "\uF9A8"=>"\u4EE4".freeze, - "\uF9A9"=>"\u56F9".freeze, "\uF9AA"=>"\u5BE7".freeze, "\uF9AB"=>"\u5DBA".freeze, "\uF9AC"=>"\u601C".freeze, "\uF9AD"=>"\u73B2".freeze, "\uF9AE"=>"\u7469".freeze, "\uF9AF"=>"\u7F9A".freeze, "\uF9B0"=>"\u8046".freeze, - "\uF9B1"=>"\u9234".freeze, "\uF9B2"=>"\u96F6".freeze, "\uF9B3"=>"\u9748".freeze, "\uF9B4"=>"\u9818".freeze, "\uF9B5"=>"\u4F8B".freeze, "\uF9B6"=>"\u79AE".freeze, "\uF9B7"=>"\u91B4".freeze, "\uF9B8"=>"\u96B8".freeze, - "\uF9B9"=>"\u60E1".freeze, "\uF9BA"=>"\u4E86".freeze, "\uF9BB"=>"\u50DA".freeze, "\uF9BC"=>"\u5BEE".freeze, "\uF9BD"=>"\u5C3F".freeze, "\uF9BE"=>"\u6599".freeze, "\uF9BF"=>"\u6A02".freeze, "\uF9C0"=>"\u71CE".freeze, - "\uF9C1"=>"\u7642".freeze, "\uF9C2"=>"\u84FC".freeze, "\uF9C3"=>"\u907C".freeze, "\uF9C4"=>"\u9F8D".freeze, "\uF9C5"=>"\u6688".freeze, "\uF9C6"=>"\u962E".freeze, "\uF9C7"=>"\u5289".freeze, "\uF9C8"=>"\u677B".freeze, - "\uF9C9"=>"\u67F3".freeze, "\uF9CA"=>"\u6D41".freeze, "\uF9CB"=>"\u6E9C".freeze, "\uF9CC"=>"\u7409".freeze, "\uF9CD"=>"\u7559".freeze, "\uF9CE"=>"\u786B".freeze, "\uF9CF"=>"\u7D10".freeze, "\uF9D0"=>"\u985E".freeze, - "\uF9D1"=>"\u516D".freeze, "\uF9D2"=>"\u622E".freeze, "\uF9D3"=>"\u9678".freeze, "\uF9D4"=>"\u502B".freeze, "\uF9D5"=>"\u5D19".freeze, "\uF9D6"=>"\u6DEA".freeze, "\uF9D7"=>"\u8F2A".freeze, "\uF9D8"=>"\u5F8B".freeze, - "\uF9D9"=>"\u6144".freeze, "\uF9DA"=>"\u6817".freeze, "\uF9DB"=>"\u7387".freeze, "\uF9DC"=>"\u9686".freeze, "\uF9DD"=>"\u5229".freeze, "\uF9DE"=>"\u540F".freeze, "\uF9DF"=>"\u5C65".freeze, "\uF9E0"=>"\u6613".freeze, - "\uF9E1"=>"\u674E".freeze, "\uF9E2"=>"\u68A8".freeze, "\uF9E3"=>"\u6CE5".freeze, "\uF9E4"=>"\u7406".freeze, "\uF9E5"=>"\u75E2".freeze, "\uF9E6"=>"\u7F79".freeze, "\uF9E7"=>"\u88CF".freeze, "\uF9E8"=>"\u88E1".freeze, - "\uF9E9"=>"\u91CC".freeze, "\uF9EA"=>"\u96E2".freeze, "\uF9EB"=>"\u533F".freeze, "\uF9EC"=>"\u6EBA".freeze, "\uF9ED"=>"\u541D".freeze, "\uF9EE"=>"\u71D0".freeze, "\uF9EF"=>"\u7498".freeze, "\uF9F0"=>"\u85FA".freeze, - "\uF9F1"=>"\u96A3".freeze, "\uF9F2"=>"\u9C57".freeze, "\uF9F3"=>"\u9E9F".freeze, "\uF9F4"=>"\u6797".freeze, "\uF9F5"=>"\u6DCB".freeze, "\uF9F6"=>"\u81E8".freeze, "\uF9F7"=>"\u7ACB".freeze, "\uF9F8"=>"\u7B20".freeze, - "\uF9F9"=>"\u7C92".freeze, "\uF9FA"=>"\u72C0".freeze, "\uF9FB"=>"\u7099".freeze, "\uF9FC"=>"\u8B58".freeze, "\uF9FD"=>"\u4EC0".freeze, "\uF9FE"=>"\u8336".freeze, "\uF9FF"=>"\u523A".freeze, "\uFA00"=>"\u5207".freeze, - "\uFA01"=>"\u5EA6".freeze, "\uFA02"=>"\u62D3".freeze, "\uFA03"=>"\u7CD6".freeze, "\uFA04"=>"\u5B85".freeze, "\uFA05"=>"\u6D1E".freeze, "\uFA06"=>"\u66B4".freeze, "\uFA07"=>"\u8F3B".freeze, "\uFA08"=>"\u884C".freeze, - "\uFA09"=>"\u964D".freeze, "\uFA0A"=>"\u898B".freeze, "\uFA0B"=>"\u5ED3".freeze, "\uFA0C"=>"\u5140".freeze, "\uFA0D"=>"\u55C0".freeze, "\uFA10"=>"\u585A".freeze, "\uFA12"=>"\u6674".freeze, "\uFA15"=>"\u51DE".freeze, - "\uFA16"=>"\u732A".freeze, "\uFA17"=>"\u76CA".freeze, "\uFA18"=>"\u793C".freeze, "\uFA19"=>"\u795E".freeze, "\uFA1A"=>"\u7965".freeze, "\uFA1B"=>"\u798F".freeze, "\uFA1C"=>"\u9756".freeze, "\uFA1D"=>"\u7CBE".freeze, - "\uFA1E"=>"\u7FBD".freeze, "\uFA20"=>"\u8612".freeze, "\uFA22"=>"\u8AF8".freeze, "\uFA25"=>"\u9038".freeze, "\uFA26"=>"\u90FD".freeze, "\uFA2A"=>"\u98EF".freeze, "\uFA2B"=>"\u98FC".freeze, "\uFA2C"=>"\u9928".freeze, - "\uFA2D"=>"\u9DB4".freeze, "\uFA2E"=>"\u90DE".freeze, "\uFA2F"=>"\u96B7".freeze, "\uFA30"=>"\u4FAE".freeze, "\uFA31"=>"\u50E7".freeze, "\uFA32"=>"\u514D".freeze, "\uFA33"=>"\u52C9".freeze, "\uFA34"=>"\u52E4".freeze, - "\uFA35"=>"\u5351".freeze, "\uFA36"=>"\u559D".freeze, "\uFA37"=>"\u5606".freeze, "\uFA38"=>"\u5668".freeze, "\uFA39"=>"\u5840".freeze, "\uFA3A"=>"\u58A8".freeze, "\uFA3B"=>"\u5C64".freeze, "\uFA3C"=>"\u5C6E".freeze, - "\uFA3D"=>"\u6094".freeze, "\uFA3E"=>"\u6168".freeze, "\uFA3F"=>"\u618E".freeze, "\uFA40"=>"\u61F2".freeze, "\uFA41"=>"\u654F".freeze, "\uFA42"=>"\u65E2".freeze, "\uFA43"=>"\u6691".freeze, "\uFA44"=>"\u6885".freeze, - "\uFA45"=>"\u6D77".freeze, "\uFA46"=>"\u6E1A".freeze, "\uFA47"=>"\u6F22".freeze, "\uFA48"=>"\u716E".freeze, "\uFA49"=>"\u722B".freeze, "\uFA4A"=>"\u7422".freeze, "\uFA4B"=>"\u7891".freeze, "\uFA4C"=>"\u793E".freeze, - "\uFA4D"=>"\u7949".freeze, "\uFA4E"=>"\u7948".freeze, "\uFA4F"=>"\u7950".freeze, "\uFA50"=>"\u7956".freeze, "\uFA51"=>"\u795D".freeze, "\uFA52"=>"\u798D".freeze, "\uFA53"=>"\u798E".freeze, "\uFA54"=>"\u7A40".freeze, - "\uFA55"=>"\u7A81".freeze, "\uFA56"=>"\u7BC0".freeze, "\uFA57"=>"\u7DF4".freeze, "\uFA58"=>"\u7E09".freeze, "\uFA59"=>"\u7E41".freeze, "\uFA5A"=>"\u7F72".freeze, "\uFA5B"=>"\u8005".freeze, "\uFA5C"=>"\u81ED".freeze, - "\uFA5D"=>"\u8279".freeze, "\uFA5E"=>"\u8279".freeze, "\uFA5F"=>"\u8457".freeze, "\uFA60"=>"\u8910".freeze, "\uFA61"=>"\u8996".freeze, "\uFA62"=>"\u8B01".freeze, "\uFA63"=>"\u8B39".freeze, "\uFA64"=>"\u8CD3".freeze, - "\uFA65"=>"\u8D08".freeze, "\uFA66"=>"\u8FB6".freeze, "\uFA67"=>"\u9038".freeze, "\uFA68"=>"\u96E3".freeze, "\uFA69"=>"\u97FF".freeze, "\uFA6A"=>"\u983B".freeze, "\uFA6B"=>"\u6075".freeze, "\uFA6C"=>"\u{242EE}".freeze, - "\uFA6D"=>"\u8218".freeze, "\uFA70"=>"\u4E26".freeze, "\uFA71"=>"\u51B5".freeze, "\uFA72"=>"\u5168".freeze, "\uFA73"=>"\u4F80".freeze, "\uFA74"=>"\u5145".freeze, "\uFA75"=>"\u5180".freeze, "\uFA76"=>"\u52C7".freeze, - "\uFA77"=>"\u52FA".freeze, "\uFA78"=>"\u559D".freeze, "\uFA79"=>"\u5555".freeze, "\uFA7A"=>"\u5599".freeze, "\uFA7B"=>"\u55E2".freeze, "\uFA7C"=>"\u585A".freeze, "\uFA7D"=>"\u58B3".freeze, "\uFA7E"=>"\u5944".freeze, - "\uFA7F"=>"\u5954".freeze, "\uFA80"=>"\u5A62".freeze, "\uFA81"=>"\u5B28".freeze, "\uFA82"=>"\u5ED2".freeze, "\uFA83"=>"\u5ED9".freeze, "\uFA84"=>"\u5F69".freeze, "\uFA85"=>"\u5FAD".freeze, "\uFA86"=>"\u60D8".freeze, - "\uFA87"=>"\u614E".freeze, "\uFA88"=>"\u6108".freeze, "\uFA89"=>"\u618E".freeze, "\uFA8A"=>"\u6160".freeze, "\uFA8B"=>"\u61F2".freeze, "\uFA8C"=>"\u6234".freeze, "\uFA8D"=>"\u63C4".freeze, "\uFA8E"=>"\u641C".freeze, - "\uFA8F"=>"\u6452".freeze, "\uFA90"=>"\u6556".freeze, "\uFA91"=>"\u6674".freeze, "\uFA92"=>"\u6717".freeze, "\uFA93"=>"\u671B".freeze, "\uFA94"=>"\u6756".freeze, "\uFA95"=>"\u6B79".freeze, "\uFA96"=>"\u6BBA".freeze, - "\uFA97"=>"\u6D41".freeze, "\uFA98"=>"\u6EDB".freeze, "\uFA99"=>"\u6ECB".freeze, "\uFA9A"=>"\u6F22".freeze, "\uFA9B"=>"\u701E".freeze, "\uFA9C"=>"\u716E".freeze, "\uFA9D"=>"\u77A7".freeze, "\uFA9E"=>"\u7235".freeze, - "\uFA9F"=>"\u72AF".freeze, "\uFAA0"=>"\u732A".freeze, "\uFAA1"=>"\u7471".freeze, "\uFAA2"=>"\u7506".freeze, "\uFAA3"=>"\u753B".freeze, "\uFAA4"=>"\u761D".freeze, "\uFAA5"=>"\u761F".freeze, "\uFAA6"=>"\u76CA".freeze, - "\uFAA7"=>"\u76DB".freeze, "\uFAA8"=>"\u76F4".freeze, "\uFAA9"=>"\u774A".freeze, "\uFAAA"=>"\u7740".freeze, "\uFAAB"=>"\u78CC".freeze, "\uFAAC"=>"\u7AB1".freeze, "\uFAAD"=>"\u7BC0".freeze, "\uFAAE"=>"\u7C7B".freeze, - "\uFAAF"=>"\u7D5B".freeze, "\uFAB0"=>"\u7DF4".freeze, "\uFAB1"=>"\u7F3E".freeze, "\uFAB2"=>"\u8005".freeze, "\uFAB3"=>"\u8352".freeze, "\uFAB4"=>"\u83EF".freeze, "\uFAB5"=>"\u8779".freeze, "\uFAB6"=>"\u8941".freeze, - "\uFAB7"=>"\u8986".freeze, "\uFAB8"=>"\u8996".freeze, "\uFAB9"=>"\u8ABF".freeze, "\uFABA"=>"\u8AF8".freeze, "\uFABB"=>"\u8ACB".freeze, "\uFABC"=>"\u8B01".freeze, "\uFABD"=>"\u8AFE".freeze, "\uFABE"=>"\u8AED".freeze, - "\uFABF"=>"\u8B39".freeze, "\uFAC0"=>"\u8B8A".freeze, "\uFAC1"=>"\u8D08".freeze, "\uFAC2"=>"\u8F38".freeze, "\uFAC3"=>"\u9072".freeze, "\uFAC4"=>"\u9199".freeze, "\uFAC5"=>"\u9276".freeze, "\uFAC6"=>"\u967C".freeze, - "\uFAC7"=>"\u96E3".freeze, "\uFAC8"=>"\u9756".freeze, "\uFAC9"=>"\u97DB".freeze, "\uFACA"=>"\u97FF".freeze, "\uFACB"=>"\u980B".freeze, "\uFACC"=>"\u983B".freeze, "\uFACD"=>"\u9B12".freeze, "\uFACE"=>"\u9F9C".freeze, - "\uFACF"=>"\u{2284A}".freeze, "\uFAD0"=>"\u{22844}".freeze, "\uFAD1"=>"\u{233D5}".freeze, "\uFAD2"=>"\u3B9D".freeze, "\uFAD3"=>"\u4018".freeze, "\uFAD4"=>"\u4039".freeze, "\uFAD5"=>"\u{25249}".freeze, "\uFAD6"=>"\u{25CD0}".freeze, - "\uFAD7"=>"\u{27ED3}".freeze, "\uFAD8"=>"\u9F43".freeze, "\uFAD9"=>"\u9F8E".freeze, "\uFB1D"=>"\u05D9\u05B4".freeze, "\uFB1F"=>"\u05F2\u05B7".freeze, "\uFB2A"=>"\u05E9\u05C1".freeze, "\uFB2B"=>"\u05E9\u05C2".freeze, "\uFB2C"=>"\u05E9\u05BC\u05C1".freeze, - "\uFB2D"=>"\u05E9\u05BC\u05C2".freeze, "\uFB2E"=>"\u05D0\u05B7".freeze, "\uFB2F"=>"\u05D0\u05B8".freeze, "\uFB30"=>"\u05D0\u05BC".freeze, "\uFB31"=>"\u05D1\u05BC".freeze, "\uFB32"=>"\u05D2\u05BC".freeze, "\uFB33"=>"\u05D3\u05BC".freeze, "\uFB34"=>"\u05D4\u05BC".freeze, - "\uFB35"=>"\u05D5\u05BC".freeze, "\uFB36"=>"\u05D6\u05BC".freeze, "\uFB38"=>"\u05D8\u05BC".freeze, "\uFB39"=>"\u05D9\u05BC".freeze, "\uFB3A"=>"\u05DA\u05BC".freeze, "\uFB3B"=>"\u05DB\u05BC".freeze, "\uFB3C"=>"\u05DC\u05BC".freeze, "\uFB3E"=>"\u05DE\u05BC".freeze, - "\uFB40"=>"\u05E0\u05BC".freeze, "\uFB41"=>"\u05E1\u05BC".freeze, "\uFB43"=>"\u05E3\u05BC".freeze, "\uFB44"=>"\u05E4\u05BC".freeze, "\uFB46"=>"\u05E6\u05BC".freeze, "\uFB47"=>"\u05E7\u05BC".freeze, "\uFB48"=>"\u05E8\u05BC".freeze, "\uFB49"=>"\u05E9\u05BC".freeze, - "\uFB4A"=>"\u05EA\u05BC".freeze, "\uFB4B"=>"\u05D5\u05B9".freeze, "\uFB4C"=>"\u05D1\u05BF".freeze, "\uFB4D"=>"\u05DB\u05BF".freeze, "\uFB4E"=>"\u05E4\u05BF".freeze, "\u{1109A}"=>"\u{11099}\u{110BA}".freeze, "\u{1109C}"=>"\u{1109B}\u{110BA}".freeze, "\u{110AB}"=>"\u{110A5}\u{110BA}".freeze, - "\u{1112E}"=>"\u{11131}\u{11127}".freeze, "\u{1112F}"=>"\u{11132}\u{11127}".freeze, "\u{1134B}"=>"\u{11347}\u{1133E}".freeze, "\u{1134C}"=>"\u{11347}\u{11357}".freeze, "\u{114BB}"=>"\u{114B9}\u{114BA}".freeze, "\u{114BC}"=>"\u{114B9}\u{114B0}".freeze, "\u{114BE}"=>"\u{114B9}\u{114BD}".freeze, "\u{115BA}"=>"\u{115B8}\u{115AF}".freeze, - "\u{115BB}"=>"\u{115B9}\u{115AF}".freeze, "\u{1D15E}"=>"\u{1D157}\u{1D165}".freeze, "\u{1D15F}"=>"\u{1D158}\u{1D165}".freeze, "\u{1D160}"=>"\u{1D158}\u{1D165}\u{1D16E}".freeze, "\u{1D161}"=>"\u{1D158}\u{1D165}\u{1D16F}".freeze, "\u{1D162}"=>"\u{1D158}\u{1D165}\u{1D170}".freeze, "\u{1D163}"=>"\u{1D158}\u{1D165}\u{1D171}".freeze, "\u{1D164}"=>"\u{1D158}\u{1D165}\u{1D172}".freeze, - "\u{1D1BB}"=>"\u{1D1B9}\u{1D165}".freeze, "\u{1D1BC}"=>"\u{1D1BA}\u{1D165}".freeze, "\u{1D1BD}"=>"\u{1D1B9}\u{1D165}\u{1D16E}".freeze, "\u{1D1BE}"=>"\u{1D1BA}\u{1D165}\u{1D16E}".freeze, "\u{1D1BF}"=>"\u{1D1B9}\u{1D165}\u{1D16F}".freeze, "\u{1D1C0}"=>"\u{1D1BA}\u{1D165}\u{1D16F}".freeze, "\u{2F800}"=>"\u4E3D".freeze, "\u{2F801}"=>"\u4E38".freeze, - "\u{2F802}"=>"\u4E41".freeze, "\u{2F803}"=>"\u{20122}".freeze, "\u{2F804}"=>"\u4F60".freeze, "\u{2F805}"=>"\u4FAE".freeze, "\u{2F806}"=>"\u4FBB".freeze, "\u{2F807}"=>"\u5002".freeze, "\u{2F808}"=>"\u507A".freeze, "\u{2F809}"=>"\u5099".freeze, - "\u{2F80A}"=>"\u50E7".freeze, "\u{2F80B}"=>"\u50CF".freeze, "\u{2F80C}"=>"\u349E".freeze, "\u{2F80D}"=>"\u{2063A}".freeze, "\u{2F80E}"=>"\u514D".freeze, "\u{2F80F}"=>"\u5154".freeze, "\u{2F810}"=>"\u5164".freeze, "\u{2F811}"=>"\u5177".freeze, - "\u{2F812}"=>"\u{2051C}".freeze, "\u{2F813}"=>"\u34B9".freeze, "\u{2F814}"=>"\u5167".freeze, "\u{2F815}"=>"\u518D".freeze, "\u{2F816}"=>"\u{2054B}".freeze, "\u{2F817}"=>"\u5197".freeze, "\u{2F818}"=>"\u51A4".freeze, "\u{2F819}"=>"\u4ECC".freeze, - "\u{2F81A}"=>"\u51AC".freeze, "\u{2F81B}"=>"\u51B5".freeze, "\u{2F81C}"=>"\u{291DF}".freeze, "\u{2F81D}"=>"\u51F5".freeze, "\u{2F81E}"=>"\u5203".freeze, "\u{2F81F}"=>"\u34DF".freeze, "\u{2F820}"=>"\u523B".freeze, "\u{2F821}"=>"\u5246".freeze, - "\u{2F822}"=>"\u5272".freeze, "\u{2F823}"=>"\u5277".freeze, "\u{2F824}"=>"\u3515".freeze, "\u{2F825}"=>"\u52C7".freeze, "\u{2F826}"=>"\u52C9".freeze, "\u{2F827}"=>"\u52E4".freeze, "\u{2F828}"=>"\u52FA".freeze, "\u{2F829}"=>"\u5305".freeze, - "\u{2F82A}"=>"\u5306".freeze, "\u{2F82B}"=>"\u5317".freeze, "\u{2F82C}"=>"\u5349".freeze, "\u{2F82D}"=>"\u5351".freeze, "\u{2F82E}"=>"\u535A".freeze, "\u{2F82F}"=>"\u5373".freeze, "\u{2F830}"=>"\u537D".freeze, "\u{2F831}"=>"\u537F".freeze, - "\u{2F832}"=>"\u537F".freeze, "\u{2F833}"=>"\u537F".freeze, "\u{2F834}"=>"\u{20A2C}".freeze, "\u{2F835}"=>"\u7070".freeze, "\u{2F836}"=>"\u53CA".freeze, "\u{2F837}"=>"\u53DF".freeze, "\u{2F838}"=>"\u{20B63}".freeze, "\u{2F839}"=>"\u53EB".freeze, - "\u{2F83A}"=>"\u53F1".freeze, "\u{2F83B}"=>"\u5406".freeze, "\u{2F83C}"=>"\u549E".freeze, "\u{2F83D}"=>"\u5438".freeze, "\u{2F83E}"=>"\u5448".freeze, "\u{2F83F}"=>"\u5468".freeze, "\u{2F840}"=>"\u54A2".freeze, "\u{2F841}"=>"\u54F6".freeze, - "\u{2F842}"=>"\u5510".freeze, "\u{2F843}"=>"\u5553".freeze, "\u{2F844}"=>"\u5563".freeze, "\u{2F845}"=>"\u5584".freeze, "\u{2F846}"=>"\u5584".freeze, "\u{2F847}"=>"\u5599".freeze, "\u{2F848}"=>"\u55AB".freeze, "\u{2F849}"=>"\u55B3".freeze, - "\u{2F84A}"=>"\u55C2".freeze, "\u{2F84B}"=>"\u5716".freeze, "\u{2F84C}"=>"\u5606".freeze, "\u{2F84D}"=>"\u5717".freeze, "\u{2F84E}"=>"\u5651".freeze, "\u{2F84F}"=>"\u5674".freeze, "\u{2F850}"=>"\u5207".freeze, "\u{2F851}"=>"\u58EE".freeze, - "\u{2F852}"=>"\u57CE".freeze, "\u{2F853}"=>"\u57F4".freeze, "\u{2F854}"=>"\u580D".freeze, "\u{2F855}"=>"\u578B".freeze, "\u{2F856}"=>"\u5832".freeze, "\u{2F857}"=>"\u5831".freeze, "\u{2F858}"=>"\u58AC".freeze, "\u{2F859}"=>"\u{214E4}".freeze, - "\u{2F85A}"=>"\u58F2".freeze, "\u{2F85B}"=>"\u58F7".freeze, "\u{2F85C}"=>"\u5906".freeze, "\u{2F85D}"=>"\u591A".freeze, "\u{2F85E}"=>"\u5922".freeze, "\u{2F85F}"=>"\u5962".freeze, "\u{2F860}"=>"\u{216A8}".freeze, "\u{2F861}"=>"\u{216EA}".freeze, - "\u{2F862}"=>"\u59EC".freeze, "\u{2F863}"=>"\u5A1B".freeze, "\u{2F864}"=>"\u5A27".freeze, "\u{2F865}"=>"\u59D8".freeze, "\u{2F866}"=>"\u5A66".freeze, "\u{2F867}"=>"\u36EE".freeze, "\u{2F868}"=>"\u36FC".freeze, "\u{2F869}"=>"\u5B08".freeze, - "\u{2F86A}"=>"\u5B3E".freeze, "\u{2F86B}"=>"\u5B3E".freeze, "\u{2F86C}"=>"\u{219C8}".freeze, "\u{2F86D}"=>"\u5BC3".freeze, "\u{2F86E}"=>"\u5BD8".freeze, "\u{2F86F}"=>"\u5BE7".freeze, "\u{2F870}"=>"\u5BF3".freeze, "\u{2F871}"=>"\u{21B18}".freeze, - "\u{2F872}"=>"\u5BFF".freeze, "\u{2F873}"=>"\u5C06".freeze, "\u{2F874}"=>"\u5F53".freeze, "\u{2F875}"=>"\u5C22".freeze, "\u{2F876}"=>"\u3781".freeze, "\u{2F877}"=>"\u5C60".freeze, "\u{2F878}"=>"\u5C6E".freeze, "\u{2F879}"=>"\u5CC0".freeze, - "\u{2F87A}"=>"\u5C8D".freeze, "\u{2F87B}"=>"\u{21DE4}".freeze, "\u{2F87C}"=>"\u5D43".freeze, "\u{2F87D}"=>"\u{21DE6}".freeze, "\u{2F87E}"=>"\u5D6E".freeze, "\u{2F87F}"=>"\u5D6B".freeze, "\u{2F880}"=>"\u5D7C".freeze, "\u{2F881}"=>"\u5DE1".freeze, - "\u{2F882}"=>"\u5DE2".freeze, "\u{2F883}"=>"\u382F".freeze, "\u{2F884}"=>"\u5DFD".freeze, "\u{2F885}"=>"\u5E28".freeze, "\u{2F886}"=>"\u5E3D".freeze, "\u{2F887}"=>"\u5E69".freeze, "\u{2F888}"=>"\u3862".freeze, "\u{2F889}"=>"\u{22183}".freeze, - "\u{2F88A}"=>"\u387C".freeze, "\u{2F88B}"=>"\u5EB0".freeze, "\u{2F88C}"=>"\u5EB3".freeze, "\u{2F88D}"=>"\u5EB6".freeze, "\u{2F88E}"=>"\u5ECA".freeze, "\u{2F88F}"=>"\u{2A392}".freeze, "\u{2F890}"=>"\u5EFE".freeze, "\u{2F891}"=>"\u{22331}".freeze, - "\u{2F892}"=>"\u{22331}".freeze, "\u{2F893}"=>"\u8201".freeze, "\u{2F894}"=>"\u5F22".freeze, "\u{2F895}"=>"\u5F22".freeze, "\u{2F896}"=>"\u38C7".freeze, "\u{2F897}"=>"\u{232B8}".freeze, "\u{2F898}"=>"\u{261DA}".freeze, "\u{2F899}"=>"\u5F62".freeze, - "\u{2F89A}"=>"\u5F6B".freeze, "\u{2F89B}"=>"\u38E3".freeze, "\u{2F89C}"=>"\u5F9A".freeze, "\u{2F89D}"=>"\u5FCD".freeze, "\u{2F89E}"=>"\u5FD7".freeze, "\u{2F89F}"=>"\u5FF9".freeze, "\u{2F8A0}"=>"\u6081".freeze, "\u{2F8A1}"=>"\u393A".freeze, - "\u{2F8A2}"=>"\u391C".freeze, "\u{2F8A3}"=>"\u6094".freeze, "\u{2F8A4}"=>"\u{226D4}".freeze, "\u{2F8A5}"=>"\u60C7".freeze, "\u{2F8A6}"=>"\u6148".freeze, "\u{2F8A7}"=>"\u614C".freeze, "\u{2F8A8}"=>"\u614E".freeze, "\u{2F8A9}"=>"\u614C".freeze, - "\u{2F8AA}"=>"\u617A".freeze, "\u{2F8AB}"=>"\u618E".freeze, "\u{2F8AC}"=>"\u61B2".freeze, "\u{2F8AD}"=>"\u61A4".freeze, "\u{2F8AE}"=>"\u61AF".freeze, "\u{2F8AF}"=>"\u61DE".freeze, "\u{2F8B0}"=>"\u61F2".freeze, "\u{2F8B1}"=>"\u61F6".freeze, - "\u{2F8B2}"=>"\u6210".freeze, "\u{2F8B3}"=>"\u621B".freeze, "\u{2F8B4}"=>"\u625D".freeze, "\u{2F8B5}"=>"\u62B1".freeze, "\u{2F8B6}"=>"\u62D4".freeze, "\u{2F8B7}"=>"\u6350".freeze, "\u{2F8B8}"=>"\u{22B0C}".freeze, "\u{2F8B9}"=>"\u633D".freeze, - "\u{2F8BA}"=>"\u62FC".freeze, "\u{2F8BB}"=>"\u6368".freeze, "\u{2F8BC}"=>"\u6383".freeze, "\u{2F8BD}"=>"\u63E4".freeze, "\u{2F8BE}"=>"\u{22BF1}".freeze, "\u{2F8BF}"=>"\u6422".freeze, "\u{2F8C0}"=>"\u63C5".freeze, "\u{2F8C1}"=>"\u63A9".freeze, - "\u{2F8C2}"=>"\u3A2E".freeze, "\u{2F8C3}"=>"\u6469".freeze, "\u{2F8C4}"=>"\u647E".freeze, "\u{2F8C5}"=>"\u649D".freeze, "\u{2F8C6}"=>"\u6477".freeze, "\u{2F8C7}"=>"\u3A6C".freeze, "\u{2F8C8}"=>"\u654F".freeze, "\u{2F8C9}"=>"\u656C".freeze, - "\u{2F8CA}"=>"\u{2300A}".freeze, "\u{2F8CB}"=>"\u65E3".freeze, "\u{2F8CC}"=>"\u66F8".freeze, "\u{2F8CD}"=>"\u6649".freeze, "\u{2F8CE}"=>"\u3B19".freeze, "\u{2F8CF}"=>"\u6691".freeze, "\u{2F8D0}"=>"\u3B08".freeze, "\u{2F8D1}"=>"\u3AE4".freeze, - "\u{2F8D2}"=>"\u5192".freeze, "\u{2F8D3}"=>"\u5195".freeze, "\u{2F8D4}"=>"\u6700".freeze, "\u{2F8D5}"=>"\u669C".freeze, "\u{2F8D6}"=>"\u80AD".freeze, "\u{2F8D7}"=>"\u43D9".freeze, "\u{2F8D8}"=>"\u6717".freeze, "\u{2F8D9}"=>"\u671B".freeze, - "\u{2F8DA}"=>"\u6721".freeze, "\u{2F8DB}"=>"\u675E".freeze, "\u{2F8DC}"=>"\u6753".freeze, "\u{2F8DD}"=>"\u{233C3}".freeze, "\u{2F8DE}"=>"\u3B49".freeze, "\u{2F8DF}"=>"\u67FA".freeze, "\u{2F8E0}"=>"\u6785".freeze, "\u{2F8E1}"=>"\u6852".freeze, - "\u{2F8E2}"=>"\u6885".freeze, "\u{2F8E3}"=>"\u{2346D}".freeze, "\u{2F8E4}"=>"\u688E".freeze, "\u{2F8E5}"=>"\u681F".freeze, "\u{2F8E6}"=>"\u6914".freeze, "\u{2F8E7}"=>"\u3B9D".freeze, "\u{2F8E8}"=>"\u6942".freeze, "\u{2F8E9}"=>"\u69A3".freeze, - "\u{2F8EA}"=>"\u69EA".freeze, "\u{2F8EB}"=>"\u6AA8".freeze, "\u{2F8EC}"=>"\u{236A3}".freeze, "\u{2F8ED}"=>"\u6ADB".freeze, "\u{2F8EE}"=>"\u3C18".freeze, "\u{2F8EF}"=>"\u6B21".freeze, "\u{2F8F0}"=>"\u{238A7}".freeze, "\u{2F8F1}"=>"\u6B54".freeze, - "\u{2F8F2}"=>"\u3C4E".freeze, "\u{2F8F3}"=>"\u6B72".freeze, "\u{2F8F4}"=>"\u6B9F".freeze, "\u{2F8F5}"=>"\u6BBA".freeze, "\u{2F8F6}"=>"\u6BBB".freeze, "\u{2F8F7}"=>"\u{23A8D}".freeze, "\u{2F8F8}"=>"\u{21D0B}".freeze, "\u{2F8F9}"=>"\u{23AFA}".freeze, - "\u{2F8FA}"=>"\u6C4E".freeze, "\u{2F8FB}"=>"\u{23CBC}".freeze, "\u{2F8FC}"=>"\u6CBF".freeze, "\u{2F8FD}"=>"\u6CCD".freeze, "\u{2F8FE}"=>"\u6C67".freeze, "\u{2F8FF}"=>"\u6D16".freeze, "\u{2F900}"=>"\u6D3E".freeze, "\u{2F901}"=>"\u6D77".freeze, - "\u{2F902}"=>"\u6D41".freeze, "\u{2F903}"=>"\u6D69".freeze, "\u{2F904}"=>"\u6D78".freeze, "\u{2F905}"=>"\u6D85".freeze, "\u{2F906}"=>"\u{23D1E}".freeze, "\u{2F907}"=>"\u6D34".freeze, "\u{2F908}"=>"\u6E2F".freeze, "\u{2F909}"=>"\u6E6E".freeze, - "\u{2F90A}"=>"\u3D33".freeze, "\u{2F90B}"=>"\u6ECB".freeze, "\u{2F90C}"=>"\u6EC7".freeze, "\u{2F90D}"=>"\u{23ED1}".freeze, "\u{2F90E}"=>"\u6DF9".freeze, "\u{2F90F}"=>"\u6F6E".freeze, "\u{2F910}"=>"\u{23F5E}".freeze, "\u{2F911}"=>"\u{23F8E}".freeze, - "\u{2F912}"=>"\u6FC6".freeze, "\u{2F913}"=>"\u7039".freeze, "\u{2F914}"=>"\u701E".freeze, "\u{2F915}"=>"\u701B".freeze, "\u{2F916}"=>"\u3D96".freeze, "\u{2F917}"=>"\u704A".freeze, "\u{2F918}"=>"\u707D".freeze, "\u{2F919}"=>"\u7077".freeze, - "\u{2F91A}"=>"\u70AD".freeze, "\u{2F91B}"=>"\u{20525}".freeze, "\u{2F91C}"=>"\u7145".freeze, "\u{2F91D}"=>"\u{24263}".freeze, "\u{2F91E}"=>"\u719C".freeze, "\u{2F91F}"=>"\u{243AB}".freeze, "\u{2F920}"=>"\u7228".freeze, "\u{2F921}"=>"\u7235".freeze, - "\u{2F922}"=>"\u7250".freeze, "\u{2F923}"=>"\u{24608}".freeze, "\u{2F924}"=>"\u7280".freeze, "\u{2F925}"=>"\u7295".freeze, "\u{2F926}"=>"\u{24735}".freeze, "\u{2F927}"=>"\u{24814}".freeze, "\u{2F928}"=>"\u737A".freeze, "\u{2F929}"=>"\u738B".freeze, - "\u{2F92A}"=>"\u3EAC".freeze, "\u{2F92B}"=>"\u73A5".freeze, "\u{2F92C}"=>"\u3EB8".freeze, "\u{2F92D}"=>"\u3EB8".freeze, "\u{2F92E}"=>"\u7447".freeze, "\u{2F92F}"=>"\u745C".freeze, "\u{2F930}"=>"\u7471".freeze, "\u{2F931}"=>"\u7485".freeze, - "\u{2F932}"=>"\u74CA".freeze, "\u{2F933}"=>"\u3F1B".freeze, "\u{2F934}"=>"\u7524".freeze, "\u{2F935}"=>"\u{24C36}".freeze, "\u{2F936}"=>"\u753E".freeze, "\u{2F937}"=>"\u{24C92}".freeze, "\u{2F938}"=>"\u7570".freeze, "\u{2F939}"=>"\u{2219F}".freeze, - "\u{2F93A}"=>"\u7610".freeze, "\u{2F93B}"=>"\u{24FA1}".freeze, "\u{2F93C}"=>"\u{24FB8}".freeze, "\u{2F93D}"=>"\u{25044}".freeze, "\u{2F93E}"=>"\u3FFC".freeze, "\u{2F93F}"=>"\u4008".freeze, "\u{2F940}"=>"\u76F4".freeze, "\u{2F941}"=>"\u{250F3}".freeze, - "\u{2F942}"=>"\u{250F2}".freeze, "\u{2F943}"=>"\u{25119}".freeze, "\u{2F944}"=>"\u{25133}".freeze, "\u{2F945}"=>"\u771E".freeze, "\u{2F946}"=>"\u771F".freeze, "\u{2F947}"=>"\u771F".freeze, "\u{2F948}"=>"\u774A".freeze, "\u{2F949}"=>"\u4039".freeze, - "\u{2F94A}"=>"\u778B".freeze, "\u{2F94B}"=>"\u4046".freeze, "\u{2F94C}"=>"\u4096".freeze, "\u{2F94D}"=>"\u{2541D}".freeze, "\u{2F94E}"=>"\u784E".freeze, "\u{2F94F}"=>"\u788C".freeze, "\u{2F950}"=>"\u78CC".freeze, "\u{2F951}"=>"\u40E3".freeze, - "\u{2F952}"=>"\u{25626}".freeze, "\u{2F953}"=>"\u7956".freeze, "\u{2F954}"=>"\u{2569A}".freeze, "\u{2F955}"=>"\u{256C5}".freeze, "\u{2F956}"=>"\u798F".freeze, "\u{2F957}"=>"\u79EB".freeze, "\u{2F958}"=>"\u412F".freeze, "\u{2F959}"=>"\u7A40".freeze, - "\u{2F95A}"=>"\u7A4A".freeze, "\u{2F95B}"=>"\u7A4F".freeze, "\u{2F95C}"=>"\u{2597C}".freeze, "\u{2F95D}"=>"\u{25AA7}".freeze, "\u{2F95E}"=>"\u{25AA7}".freeze, "\u{2F95F}"=>"\u7AEE".freeze, "\u{2F960}"=>"\u4202".freeze, "\u{2F961}"=>"\u{25BAB}".freeze, - "\u{2F962}"=>"\u7BC6".freeze, "\u{2F963}"=>"\u7BC9".freeze, "\u{2F964}"=>"\u4227".freeze, "\u{2F965}"=>"\u{25C80}".freeze, "\u{2F966}"=>"\u7CD2".freeze, "\u{2F967}"=>"\u42A0".freeze, "\u{2F968}"=>"\u7CE8".freeze, "\u{2F969}"=>"\u7CE3".freeze, - "\u{2F96A}"=>"\u7D00".freeze, "\u{2F96B}"=>"\u{25F86}".freeze, "\u{2F96C}"=>"\u7D63".freeze, "\u{2F96D}"=>"\u4301".freeze, "\u{2F96E}"=>"\u7DC7".freeze, "\u{2F96F}"=>"\u7E02".freeze, "\u{2F970}"=>"\u7E45".freeze, "\u{2F971}"=>"\u4334".freeze, - "\u{2F972}"=>"\u{26228}".freeze, "\u{2F973}"=>"\u{26247}".freeze, "\u{2F974}"=>"\u4359".freeze, "\u{2F975}"=>"\u{262D9}".freeze, "\u{2F976}"=>"\u7F7A".freeze, "\u{2F977}"=>"\u{2633E}".freeze, "\u{2F978}"=>"\u7F95".freeze, "\u{2F979}"=>"\u7FFA".freeze, - "\u{2F97A}"=>"\u8005".freeze, "\u{2F97B}"=>"\u{264DA}".freeze, "\u{2F97C}"=>"\u{26523}".freeze, "\u{2F97D}"=>"\u8060".freeze, "\u{2F97E}"=>"\u{265A8}".freeze, "\u{2F97F}"=>"\u8070".freeze, "\u{2F980}"=>"\u{2335F}".freeze, "\u{2F981}"=>"\u43D5".freeze, - "\u{2F982}"=>"\u80B2".freeze, "\u{2F983}"=>"\u8103".freeze, "\u{2F984}"=>"\u440B".freeze, "\u{2F985}"=>"\u813E".freeze, "\u{2F986}"=>"\u5AB5".freeze, "\u{2F987}"=>"\u{267A7}".freeze, "\u{2F988}"=>"\u{267B5}".freeze, "\u{2F989}"=>"\u{23393}".freeze, - "\u{2F98A}"=>"\u{2339C}".freeze, "\u{2F98B}"=>"\u8201".freeze, "\u{2F98C}"=>"\u8204".freeze, "\u{2F98D}"=>"\u8F9E".freeze, "\u{2F98E}"=>"\u446B".freeze, "\u{2F98F}"=>"\u8291".freeze, "\u{2F990}"=>"\u828B".freeze, "\u{2F991}"=>"\u829D".freeze, - "\u{2F992}"=>"\u52B3".freeze, "\u{2F993}"=>"\u82B1".freeze, "\u{2F994}"=>"\u82B3".freeze, "\u{2F995}"=>"\u82BD".freeze, "\u{2F996}"=>"\u82E6".freeze, "\u{2F997}"=>"\u{26B3C}".freeze, "\u{2F998}"=>"\u82E5".freeze, "\u{2F999}"=>"\u831D".freeze, - "\u{2F99A}"=>"\u8363".freeze, "\u{2F99B}"=>"\u83AD".freeze, "\u{2F99C}"=>"\u8323".freeze, "\u{2F99D}"=>"\u83BD".freeze, "\u{2F99E}"=>"\u83E7".freeze, "\u{2F99F}"=>"\u8457".freeze, "\u{2F9A0}"=>"\u8353".freeze, "\u{2F9A1}"=>"\u83CA".freeze, - "\u{2F9A2}"=>"\u83CC".freeze, "\u{2F9A3}"=>"\u83DC".freeze, "\u{2F9A4}"=>"\u{26C36}".freeze, "\u{2F9A5}"=>"\u{26D6B}".freeze, "\u{2F9A6}"=>"\u{26CD5}".freeze, "\u{2F9A7}"=>"\u452B".freeze, "\u{2F9A8}"=>"\u84F1".freeze, "\u{2F9A9}"=>"\u84F3".freeze, - "\u{2F9AA}"=>"\u8516".freeze, "\u{2F9AB}"=>"\u{273CA}".freeze, "\u{2F9AC}"=>"\u8564".freeze, "\u{2F9AD}"=>"\u{26F2C}".freeze, "\u{2F9AE}"=>"\u455D".freeze, "\u{2F9AF}"=>"\u4561".freeze, "\u{2F9B0}"=>"\u{26FB1}".freeze, "\u{2F9B1}"=>"\u{270D2}".freeze, - "\u{2F9B2}"=>"\u456B".freeze, "\u{2F9B3}"=>"\u8650".freeze, "\u{2F9B4}"=>"\u865C".freeze, "\u{2F9B5}"=>"\u8667".freeze, "\u{2F9B6}"=>"\u8669".freeze, "\u{2F9B7}"=>"\u86A9".freeze, "\u{2F9B8}"=>"\u8688".freeze, "\u{2F9B9}"=>"\u870E".freeze, - "\u{2F9BA}"=>"\u86E2".freeze, "\u{2F9BB}"=>"\u8779".freeze, "\u{2F9BC}"=>"\u8728".freeze, "\u{2F9BD}"=>"\u876B".freeze, "\u{2F9BE}"=>"\u8786".freeze, "\u{2F9BF}"=>"\u45D7".freeze, "\u{2F9C0}"=>"\u87E1".freeze, "\u{2F9C1}"=>"\u8801".freeze, - "\u{2F9C2}"=>"\u45F9".freeze, "\u{2F9C3}"=>"\u8860".freeze, "\u{2F9C4}"=>"\u8863".freeze, "\u{2F9C5}"=>"\u{27667}".freeze, "\u{2F9C6}"=>"\u88D7".freeze, "\u{2F9C7}"=>"\u88DE".freeze, "\u{2F9C8}"=>"\u4635".freeze, "\u{2F9C9}"=>"\u88FA".freeze, - "\u{2F9CA}"=>"\u34BB".freeze, "\u{2F9CB}"=>"\u{278AE}".freeze, "\u{2F9CC}"=>"\u{27966}".freeze, "\u{2F9CD}"=>"\u46BE".freeze, "\u{2F9CE}"=>"\u46C7".freeze, "\u{2F9CF}"=>"\u8AA0".freeze, "\u{2F9D0}"=>"\u8AED".freeze, "\u{2F9D1}"=>"\u8B8A".freeze, - "\u{2F9D2}"=>"\u8C55".freeze, "\u{2F9D3}"=>"\u{27CA8}".freeze, "\u{2F9D4}"=>"\u8CAB".freeze, "\u{2F9D5}"=>"\u8CC1".freeze, "\u{2F9D6}"=>"\u8D1B".freeze, "\u{2F9D7}"=>"\u8D77".freeze, "\u{2F9D8}"=>"\u{27F2F}".freeze, "\u{2F9D9}"=>"\u{20804}".freeze, - "\u{2F9DA}"=>"\u8DCB".freeze, "\u{2F9DB}"=>"\u8DBC".freeze, "\u{2F9DC}"=>"\u8DF0".freeze, "\u{2F9DD}"=>"\u{208DE}".freeze, "\u{2F9DE}"=>"\u8ED4".freeze, "\u{2F9DF}"=>"\u8F38".freeze, "\u{2F9E0}"=>"\u{285D2}".freeze, "\u{2F9E1}"=>"\u{285ED}".freeze, - "\u{2F9E2}"=>"\u9094".freeze, "\u{2F9E3}"=>"\u90F1".freeze, "\u{2F9E4}"=>"\u9111".freeze, "\u{2F9E5}"=>"\u{2872E}".freeze, "\u{2F9E6}"=>"\u911B".freeze, "\u{2F9E7}"=>"\u9238".freeze, "\u{2F9E8}"=>"\u92D7".freeze, "\u{2F9E9}"=>"\u92D8".freeze, - "\u{2F9EA}"=>"\u927C".freeze, "\u{2F9EB}"=>"\u93F9".freeze, "\u{2F9EC}"=>"\u9415".freeze, "\u{2F9ED}"=>"\u{28BFA}".freeze, "\u{2F9EE}"=>"\u958B".freeze, "\u{2F9EF}"=>"\u4995".freeze, "\u{2F9F0}"=>"\u95B7".freeze, "\u{2F9F1}"=>"\u{28D77}".freeze, - "\u{2F9F2}"=>"\u49E6".freeze, "\u{2F9F3}"=>"\u96C3".freeze, "\u{2F9F4}"=>"\u5DB2".freeze, "\u{2F9F5}"=>"\u9723".freeze, "\u{2F9F6}"=>"\u{29145}".freeze, "\u{2F9F7}"=>"\u{2921A}".freeze, "\u{2F9F8}"=>"\u4A6E".freeze, "\u{2F9F9}"=>"\u4A76".freeze, - "\u{2F9FA}"=>"\u97E0".freeze, "\u{2F9FB}"=>"\u{2940A}".freeze, "\u{2F9FC}"=>"\u4AB2".freeze, "\u{2F9FD}"=>"\u{29496}".freeze, "\u{2F9FE}"=>"\u980B".freeze, "\u{2F9FF}"=>"\u980B".freeze, "\u{2FA00}"=>"\u9829".freeze, "\u{2FA01}"=>"\u{295B6}".freeze, - "\u{2FA02}"=>"\u98E2".freeze, "\u{2FA03}"=>"\u4B33".freeze, "\u{2FA04}"=>"\u9929".freeze, "\u{2FA05}"=>"\u99A7".freeze, "\u{2FA06}"=>"\u99C2".freeze, "\u{2FA07}"=>"\u99FE".freeze, "\u{2FA08}"=>"\u4BCE".freeze, "\u{2FA09}"=>"\u{29B30}".freeze, - "\u{2FA0A}"=>"\u9B12".freeze, "\u{2FA0B}"=>"\u9C40".freeze, "\u{2FA0C}"=>"\u9CFD".freeze, "\u{2FA0D}"=>"\u4CCE".freeze, "\u{2FA0E}"=>"\u4CED".freeze, "\u{2FA0F}"=>"\u9D67".freeze, "\u{2FA10}"=>"\u{2A0CE}".freeze, "\u{2FA11}"=>"\u4CF8".freeze, - "\u{2FA12}"=>"\u{2A105}".freeze, "\u{2FA13}"=>"\u{2A20E}".freeze, "\u{2FA14}"=>"\u{2A291}".freeze, "\u{2FA15}"=>"\u9EBB".freeze, "\u{2FA16}"=>"\u4D56".freeze, "\u{2FA17}"=>"\u9EF9".freeze, "\u{2FA18}"=>"\u9EFE".freeze, "\u{2FA19}"=>"\u9F05".freeze, - "\u{2FA1A}"=>"\u9F0F".freeze, "\u{2FA1B}"=>"\u9F16".freeze, "\u{2FA1C}"=>"\u9F3B".freeze, "\u{2FA1D}"=>"\u{2A600}".freeze, + "\u00C0"=>"A\u0300", "\u00C1"=>"A\u0301", "\u00C2"=>"A\u0302", "\u00C3"=>"A\u0303", "\u00C4"=>"A\u0308", "\u00C5"=>"A\u030A", "\u00C7"=>"C\u0327", "\u00C8"=>"E\u0300", + "\u00C9"=>"E\u0301", "\u00CA"=>"E\u0302", "\u00CB"=>"E\u0308", "\u00CC"=>"I\u0300", "\u00CD"=>"I\u0301", "\u00CE"=>"I\u0302", "\u00CF"=>"I\u0308", "\u00D1"=>"N\u0303", + "\u00D2"=>"O\u0300", "\u00D3"=>"O\u0301", "\u00D4"=>"O\u0302", "\u00D5"=>"O\u0303", "\u00D6"=>"O\u0308", "\u00D9"=>"U\u0300", "\u00DA"=>"U\u0301", "\u00DB"=>"U\u0302", + "\u00DC"=>"U\u0308", "\u00DD"=>"Y\u0301", "\u00E0"=>"a\u0300", "\u00E1"=>"a\u0301", "\u00E2"=>"a\u0302", "\u00E3"=>"a\u0303", "\u00E4"=>"a\u0308", "\u00E5"=>"a\u030A", + "\u00E7"=>"c\u0327", "\u00E8"=>"e\u0300", "\u00E9"=>"e\u0301", "\u00EA"=>"e\u0302", "\u00EB"=>"e\u0308", "\u00EC"=>"i\u0300", "\u00ED"=>"i\u0301", "\u00EE"=>"i\u0302", + "\u00EF"=>"i\u0308", "\u00F1"=>"n\u0303", "\u00F2"=>"o\u0300", "\u00F3"=>"o\u0301", "\u00F4"=>"o\u0302", "\u00F5"=>"o\u0303", "\u00F6"=>"o\u0308", "\u00F9"=>"u\u0300", + "\u00FA"=>"u\u0301", "\u00FB"=>"u\u0302", "\u00FC"=>"u\u0308", "\u00FD"=>"y\u0301", "\u00FF"=>"y\u0308", "\u0100"=>"A\u0304", "\u0101"=>"a\u0304", "\u0102"=>"A\u0306", + "\u0103"=>"a\u0306", "\u0104"=>"A\u0328", "\u0105"=>"a\u0328", "\u0106"=>"C\u0301", "\u0107"=>"c\u0301", "\u0108"=>"C\u0302", "\u0109"=>"c\u0302", "\u010A"=>"C\u0307", + "\u010B"=>"c\u0307", "\u010C"=>"C\u030C", "\u010D"=>"c\u030C", "\u010E"=>"D\u030C", "\u010F"=>"d\u030C", "\u0112"=>"E\u0304", "\u0113"=>"e\u0304", "\u0114"=>"E\u0306", + "\u0115"=>"e\u0306", "\u0116"=>"E\u0307", "\u0117"=>"e\u0307", "\u0118"=>"E\u0328", "\u0119"=>"e\u0328", "\u011A"=>"E\u030C", "\u011B"=>"e\u030C", "\u011C"=>"G\u0302", + "\u011D"=>"g\u0302", "\u011E"=>"G\u0306", "\u011F"=>"g\u0306", "\u0120"=>"G\u0307", "\u0121"=>"g\u0307", "\u0122"=>"G\u0327", "\u0123"=>"g\u0327", "\u0124"=>"H\u0302", + "\u0125"=>"h\u0302", "\u0128"=>"I\u0303", "\u0129"=>"i\u0303", "\u012A"=>"I\u0304", "\u012B"=>"i\u0304", "\u012C"=>"I\u0306", "\u012D"=>"i\u0306", "\u012E"=>"I\u0328", + "\u012F"=>"i\u0328", "\u0130"=>"I\u0307", "\u0134"=>"J\u0302", "\u0135"=>"j\u0302", "\u0136"=>"K\u0327", "\u0137"=>"k\u0327", "\u0139"=>"L\u0301", "\u013A"=>"l\u0301", + "\u013B"=>"L\u0327", "\u013C"=>"l\u0327", "\u013D"=>"L\u030C", "\u013E"=>"l\u030C", "\u0143"=>"N\u0301", "\u0144"=>"n\u0301", "\u0145"=>"N\u0327", "\u0146"=>"n\u0327", + "\u0147"=>"N\u030C", "\u0148"=>"n\u030C", "\u014C"=>"O\u0304", "\u014D"=>"o\u0304", "\u014E"=>"O\u0306", "\u014F"=>"o\u0306", "\u0150"=>"O\u030B", "\u0151"=>"o\u030B", + "\u0154"=>"R\u0301", "\u0155"=>"r\u0301", "\u0156"=>"R\u0327", "\u0157"=>"r\u0327", "\u0158"=>"R\u030C", "\u0159"=>"r\u030C", "\u015A"=>"S\u0301", "\u015B"=>"s\u0301", + "\u015C"=>"S\u0302", "\u015D"=>"s\u0302", "\u015E"=>"S\u0327", "\u015F"=>"s\u0327", "\u0160"=>"S\u030C", "\u0161"=>"s\u030C", "\u0162"=>"T\u0327", "\u0163"=>"t\u0327", + "\u0164"=>"T\u030C", "\u0165"=>"t\u030C", "\u0168"=>"U\u0303", "\u0169"=>"u\u0303", "\u016A"=>"U\u0304", "\u016B"=>"u\u0304", "\u016C"=>"U\u0306", "\u016D"=>"u\u0306", + "\u016E"=>"U\u030A", "\u016F"=>"u\u030A", "\u0170"=>"U\u030B", "\u0171"=>"u\u030B", "\u0172"=>"U\u0328", "\u0173"=>"u\u0328", "\u0174"=>"W\u0302", "\u0175"=>"w\u0302", + "\u0176"=>"Y\u0302", "\u0177"=>"y\u0302", "\u0178"=>"Y\u0308", "\u0179"=>"Z\u0301", "\u017A"=>"z\u0301", "\u017B"=>"Z\u0307", "\u017C"=>"z\u0307", "\u017D"=>"Z\u030C", + "\u017E"=>"z\u030C", "\u01A0"=>"O\u031B", "\u01A1"=>"o\u031B", "\u01AF"=>"U\u031B", "\u01B0"=>"u\u031B", "\u01CD"=>"A\u030C", "\u01CE"=>"a\u030C", "\u01CF"=>"I\u030C", + "\u01D0"=>"i\u030C", "\u01D1"=>"O\u030C", "\u01D2"=>"o\u030C", "\u01D3"=>"U\u030C", "\u01D4"=>"u\u030C", "\u01D5"=>"U\u0308\u0304", "\u01D6"=>"u\u0308\u0304", "\u01D7"=>"U\u0308\u0301", + "\u01D8"=>"u\u0308\u0301", "\u01D9"=>"U\u0308\u030C", "\u01DA"=>"u\u0308\u030C", "\u01DB"=>"U\u0308\u0300", "\u01DC"=>"u\u0308\u0300", "\u01DE"=>"A\u0308\u0304", "\u01DF"=>"a\u0308\u0304", "\u01E0"=>"A\u0307\u0304", + "\u01E1"=>"a\u0307\u0304", "\u01E2"=>"\u00C6\u0304", "\u01E3"=>"\u00E6\u0304", "\u01E6"=>"G\u030C", "\u01E7"=>"g\u030C", "\u01E8"=>"K\u030C", "\u01E9"=>"k\u030C", "\u01EA"=>"O\u0328", + "\u01EB"=>"o\u0328", "\u01EC"=>"O\u0328\u0304", "\u01ED"=>"o\u0328\u0304", "\u01EE"=>"\u01B7\u030C", "\u01EF"=>"\u0292\u030C", "\u01F0"=>"j\u030C", "\u01F4"=>"G\u0301", "\u01F5"=>"g\u0301", + "\u01F8"=>"N\u0300", "\u01F9"=>"n\u0300", "\u01FA"=>"A\u030A\u0301", "\u01FB"=>"a\u030A\u0301", "\u01FC"=>"\u00C6\u0301", "\u01FD"=>"\u00E6\u0301", "\u01FE"=>"\u00D8\u0301", "\u01FF"=>"\u00F8\u0301", + "\u0200"=>"A\u030F", "\u0201"=>"a\u030F", "\u0202"=>"A\u0311", "\u0203"=>"a\u0311", "\u0204"=>"E\u030F", "\u0205"=>"e\u030F", "\u0206"=>"E\u0311", "\u0207"=>"e\u0311", + "\u0208"=>"I\u030F", "\u0209"=>"i\u030F", "\u020A"=>"I\u0311", "\u020B"=>"i\u0311", "\u020C"=>"O\u030F", "\u020D"=>"o\u030F", "\u020E"=>"O\u0311", "\u020F"=>"o\u0311", + "\u0210"=>"R\u030F", "\u0211"=>"r\u030F", "\u0212"=>"R\u0311", "\u0213"=>"r\u0311", "\u0214"=>"U\u030F", "\u0215"=>"u\u030F", "\u0216"=>"U\u0311", "\u0217"=>"u\u0311", + "\u0218"=>"S\u0326", "\u0219"=>"s\u0326", "\u021A"=>"T\u0326", "\u021B"=>"t\u0326", "\u021E"=>"H\u030C", "\u021F"=>"h\u030C", "\u0226"=>"A\u0307", "\u0227"=>"a\u0307", + "\u0228"=>"E\u0327", "\u0229"=>"e\u0327", "\u022A"=>"O\u0308\u0304", "\u022B"=>"o\u0308\u0304", "\u022C"=>"O\u0303\u0304", "\u022D"=>"o\u0303\u0304", "\u022E"=>"O\u0307", "\u022F"=>"o\u0307", + "\u0230"=>"O\u0307\u0304", "\u0231"=>"o\u0307\u0304", "\u0232"=>"Y\u0304", "\u0233"=>"y\u0304", "\u0340"=>"\u0300", "\u0341"=>"\u0301", "\u0343"=>"\u0313", "\u0344"=>"\u0308\u0301", + "\u0374"=>"\u02B9", "\u037E"=>";", "\u0385"=>"\u00A8\u0301", "\u0386"=>"\u0391\u0301", "\u0387"=>"\u00B7", "\u0388"=>"\u0395\u0301", "\u0389"=>"\u0397\u0301", "\u038A"=>"\u0399\u0301", + "\u038C"=>"\u039F\u0301", "\u038E"=>"\u03A5\u0301", "\u038F"=>"\u03A9\u0301", "\u0390"=>"\u03B9\u0308\u0301", "\u03AA"=>"\u0399\u0308", "\u03AB"=>"\u03A5\u0308", "\u03AC"=>"\u03B1\u0301", "\u03AD"=>"\u03B5\u0301", + "\u03AE"=>"\u03B7\u0301", "\u03AF"=>"\u03B9\u0301", "\u03B0"=>"\u03C5\u0308\u0301", "\u03CA"=>"\u03B9\u0308", "\u03CB"=>"\u03C5\u0308", "\u03CC"=>"\u03BF\u0301", "\u03CD"=>"\u03C5\u0301", "\u03CE"=>"\u03C9\u0301", + "\u03D3"=>"\u03D2\u0301", "\u03D4"=>"\u03D2\u0308", "\u0400"=>"\u0415\u0300", "\u0401"=>"\u0415\u0308", "\u0403"=>"\u0413\u0301", "\u0407"=>"\u0406\u0308", "\u040C"=>"\u041A\u0301", "\u040D"=>"\u0418\u0300", + "\u040E"=>"\u0423\u0306", "\u0419"=>"\u0418\u0306", "\u0439"=>"\u0438\u0306", "\u0450"=>"\u0435\u0300", "\u0451"=>"\u0435\u0308", "\u0453"=>"\u0433\u0301", "\u0457"=>"\u0456\u0308", "\u045C"=>"\u043A\u0301", + "\u045D"=>"\u0438\u0300", "\u045E"=>"\u0443\u0306", "\u0476"=>"\u0474\u030F", "\u0477"=>"\u0475\u030F", "\u04C1"=>"\u0416\u0306", "\u04C2"=>"\u0436\u0306", "\u04D0"=>"\u0410\u0306", "\u04D1"=>"\u0430\u0306", + "\u04D2"=>"\u0410\u0308", "\u04D3"=>"\u0430\u0308", "\u04D6"=>"\u0415\u0306", "\u04D7"=>"\u0435\u0306", "\u04DA"=>"\u04D8\u0308", "\u04DB"=>"\u04D9\u0308", "\u04DC"=>"\u0416\u0308", "\u04DD"=>"\u0436\u0308", + "\u04DE"=>"\u0417\u0308", "\u04DF"=>"\u0437\u0308", "\u04E2"=>"\u0418\u0304", "\u04E3"=>"\u0438\u0304", "\u04E4"=>"\u0418\u0308", "\u04E5"=>"\u0438\u0308", "\u04E6"=>"\u041E\u0308", "\u04E7"=>"\u043E\u0308", + "\u04EA"=>"\u04E8\u0308", "\u04EB"=>"\u04E9\u0308", "\u04EC"=>"\u042D\u0308", "\u04ED"=>"\u044D\u0308", "\u04EE"=>"\u0423\u0304", "\u04EF"=>"\u0443\u0304", "\u04F0"=>"\u0423\u0308", "\u04F1"=>"\u0443\u0308", + "\u04F2"=>"\u0423\u030B", "\u04F3"=>"\u0443\u030B", "\u04F4"=>"\u0427\u0308", "\u04F5"=>"\u0447\u0308", "\u04F8"=>"\u042B\u0308", "\u04F9"=>"\u044B\u0308", "\u0622"=>"\u0627\u0653", "\u0623"=>"\u0627\u0654", + "\u0624"=>"\u0648\u0654", "\u0625"=>"\u0627\u0655", "\u0626"=>"\u064A\u0654", "\u06C0"=>"\u06D5\u0654", "\u06C2"=>"\u06C1\u0654", "\u06D3"=>"\u06D2\u0654", "\u0929"=>"\u0928\u093C", "\u0931"=>"\u0930\u093C", + "\u0934"=>"\u0933\u093C", "\u0958"=>"\u0915\u093C", "\u0959"=>"\u0916\u093C", "\u095A"=>"\u0917\u093C", "\u095B"=>"\u091C\u093C", "\u095C"=>"\u0921\u093C", "\u095D"=>"\u0922\u093C", "\u095E"=>"\u092B\u093C", + "\u095F"=>"\u092F\u093C", "\u09CB"=>"\u09C7\u09BE", "\u09CC"=>"\u09C7\u09D7", "\u09DC"=>"\u09A1\u09BC", "\u09DD"=>"\u09A2\u09BC", "\u09DF"=>"\u09AF\u09BC", "\u0A33"=>"\u0A32\u0A3C", "\u0A36"=>"\u0A38\u0A3C", + "\u0A59"=>"\u0A16\u0A3C", "\u0A5A"=>"\u0A17\u0A3C", "\u0A5B"=>"\u0A1C\u0A3C", "\u0A5E"=>"\u0A2B\u0A3C", "\u0B48"=>"\u0B47\u0B56", "\u0B4B"=>"\u0B47\u0B3E", "\u0B4C"=>"\u0B47\u0B57", "\u0B5C"=>"\u0B21\u0B3C", + "\u0B5D"=>"\u0B22\u0B3C", "\u0B94"=>"\u0B92\u0BD7", "\u0BCA"=>"\u0BC6\u0BBE", "\u0BCB"=>"\u0BC7\u0BBE", "\u0BCC"=>"\u0BC6\u0BD7", "\u0C48"=>"\u0C46\u0C56", "\u0CC0"=>"\u0CBF\u0CD5", "\u0CC7"=>"\u0CC6\u0CD5", + "\u0CC8"=>"\u0CC6\u0CD6", "\u0CCA"=>"\u0CC6\u0CC2", "\u0CCB"=>"\u0CC6\u0CC2\u0CD5", "\u0D4A"=>"\u0D46\u0D3E", "\u0D4B"=>"\u0D47\u0D3E", "\u0D4C"=>"\u0D46\u0D57", "\u0DDA"=>"\u0DD9\u0DCA", "\u0DDC"=>"\u0DD9\u0DCF", + "\u0DDD"=>"\u0DD9\u0DCF\u0DCA", "\u0DDE"=>"\u0DD9\u0DDF", "\u0F43"=>"\u0F42\u0FB7", "\u0F4D"=>"\u0F4C\u0FB7", "\u0F52"=>"\u0F51\u0FB7", "\u0F57"=>"\u0F56\u0FB7", "\u0F5C"=>"\u0F5B\u0FB7", "\u0F69"=>"\u0F40\u0FB5", + "\u0F73"=>"\u0F71\u0F72", "\u0F75"=>"\u0F71\u0F74", "\u0F76"=>"\u0FB2\u0F80", "\u0F78"=>"\u0FB3\u0F80", "\u0F81"=>"\u0F71\u0F80", "\u0F93"=>"\u0F92\u0FB7", "\u0F9D"=>"\u0F9C\u0FB7", "\u0FA2"=>"\u0FA1\u0FB7", + "\u0FA7"=>"\u0FA6\u0FB7", "\u0FAC"=>"\u0FAB\u0FB7", "\u0FB9"=>"\u0F90\u0FB5", "\u1026"=>"\u1025\u102E", "\u1B06"=>"\u1B05\u1B35", "\u1B08"=>"\u1B07\u1B35", "\u1B0A"=>"\u1B09\u1B35", "\u1B0C"=>"\u1B0B\u1B35", + "\u1B0E"=>"\u1B0D\u1B35", "\u1B12"=>"\u1B11\u1B35", "\u1B3B"=>"\u1B3A\u1B35", "\u1B3D"=>"\u1B3C\u1B35", "\u1B40"=>"\u1B3E\u1B35", "\u1B41"=>"\u1B3F\u1B35", "\u1B43"=>"\u1B42\u1B35", "\u1E00"=>"A\u0325", + "\u1E01"=>"a\u0325", "\u1E02"=>"B\u0307", "\u1E03"=>"b\u0307", "\u1E04"=>"B\u0323", "\u1E05"=>"b\u0323", "\u1E06"=>"B\u0331", "\u1E07"=>"b\u0331", "\u1E08"=>"C\u0327\u0301", + "\u1E09"=>"c\u0327\u0301", "\u1E0A"=>"D\u0307", "\u1E0B"=>"d\u0307", "\u1E0C"=>"D\u0323", "\u1E0D"=>"d\u0323", "\u1E0E"=>"D\u0331", "\u1E0F"=>"d\u0331", "\u1E10"=>"D\u0327", + "\u1E11"=>"d\u0327", "\u1E12"=>"D\u032D", "\u1E13"=>"d\u032D", "\u1E14"=>"E\u0304\u0300", "\u1E15"=>"e\u0304\u0300", "\u1E16"=>"E\u0304\u0301", "\u1E17"=>"e\u0304\u0301", "\u1E18"=>"E\u032D", + "\u1E19"=>"e\u032D", "\u1E1A"=>"E\u0330", "\u1E1B"=>"e\u0330", "\u1E1C"=>"E\u0327\u0306", "\u1E1D"=>"e\u0327\u0306", "\u1E1E"=>"F\u0307", "\u1E1F"=>"f\u0307", "\u1E20"=>"G\u0304", + "\u1E21"=>"g\u0304", "\u1E22"=>"H\u0307", "\u1E23"=>"h\u0307", "\u1E24"=>"H\u0323", "\u1E25"=>"h\u0323", "\u1E26"=>"H\u0308", "\u1E27"=>"h\u0308", "\u1E28"=>"H\u0327", + "\u1E29"=>"h\u0327", "\u1E2A"=>"H\u032E", "\u1E2B"=>"h\u032E", "\u1E2C"=>"I\u0330", "\u1E2D"=>"i\u0330", "\u1E2E"=>"I\u0308\u0301", "\u1E2F"=>"i\u0308\u0301", "\u1E30"=>"K\u0301", + "\u1E31"=>"k\u0301", "\u1E32"=>"K\u0323", "\u1E33"=>"k\u0323", "\u1E34"=>"K\u0331", "\u1E35"=>"k\u0331", "\u1E36"=>"L\u0323", "\u1E37"=>"l\u0323", "\u1E38"=>"L\u0323\u0304", + "\u1E39"=>"l\u0323\u0304", "\u1E3A"=>"L\u0331", "\u1E3B"=>"l\u0331", "\u1E3C"=>"L\u032D", "\u1E3D"=>"l\u032D", "\u1E3E"=>"M\u0301", "\u1E3F"=>"m\u0301", "\u1E40"=>"M\u0307", + "\u1E41"=>"m\u0307", "\u1E42"=>"M\u0323", "\u1E43"=>"m\u0323", "\u1E44"=>"N\u0307", "\u1E45"=>"n\u0307", "\u1E46"=>"N\u0323", "\u1E47"=>"n\u0323", "\u1E48"=>"N\u0331", + "\u1E49"=>"n\u0331", "\u1E4A"=>"N\u032D", "\u1E4B"=>"n\u032D", "\u1E4C"=>"O\u0303\u0301", "\u1E4D"=>"o\u0303\u0301", "\u1E4E"=>"O\u0303\u0308", "\u1E4F"=>"o\u0303\u0308", "\u1E50"=>"O\u0304\u0300", + "\u1E51"=>"o\u0304\u0300", "\u1E52"=>"O\u0304\u0301", "\u1E53"=>"o\u0304\u0301", "\u1E54"=>"P\u0301", "\u1E55"=>"p\u0301", "\u1E56"=>"P\u0307", "\u1E57"=>"p\u0307", "\u1E58"=>"R\u0307", + "\u1E59"=>"r\u0307", "\u1E5A"=>"R\u0323", "\u1E5B"=>"r\u0323", "\u1E5C"=>"R\u0323\u0304", "\u1E5D"=>"r\u0323\u0304", "\u1E5E"=>"R\u0331", "\u1E5F"=>"r\u0331", "\u1E60"=>"S\u0307", + "\u1E61"=>"s\u0307", "\u1E62"=>"S\u0323", "\u1E63"=>"s\u0323", "\u1E64"=>"S\u0301\u0307", "\u1E65"=>"s\u0301\u0307", "\u1E66"=>"S\u030C\u0307", "\u1E67"=>"s\u030C\u0307", "\u1E68"=>"S\u0323\u0307", + "\u1E69"=>"s\u0323\u0307", "\u1E6A"=>"T\u0307", "\u1E6B"=>"t\u0307", "\u1E6C"=>"T\u0323", "\u1E6D"=>"t\u0323", "\u1E6E"=>"T\u0331", "\u1E6F"=>"t\u0331", "\u1E70"=>"T\u032D", + "\u1E71"=>"t\u032D", "\u1E72"=>"U\u0324", "\u1E73"=>"u\u0324", "\u1E74"=>"U\u0330", "\u1E75"=>"u\u0330", "\u1E76"=>"U\u032D", "\u1E77"=>"u\u032D", "\u1E78"=>"U\u0303\u0301", + "\u1E79"=>"u\u0303\u0301", "\u1E7A"=>"U\u0304\u0308", "\u1E7B"=>"u\u0304\u0308", "\u1E7C"=>"V\u0303", "\u1E7D"=>"v\u0303", "\u1E7E"=>"V\u0323", "\u1E7F"=>"v\u0323", "\u1E80"=>"W\u0300", + "\u1E81"=>"w\u0300", "\u1E82"=>"W\u0301", "\u1E83"=>"w\u0301", "\u1E84"=>"W\u0308", "\u1E85"=>"w\u0308", "\u1E86"=>"W\u0307", "\u1E87"=>"w\u0307", "\u1E88"=>"W\u0323", + "\u1E89"=>"w\u0323", "\u1E8A"=>"X\u0307", "\u1E8B"=>"x\u0307", "\u1E8C"=>"X\u0308", "\u1E8D"=>"x\u0308", "\u1E8E"=>"Y\u0307", "\u1E8F"=>"y\u0307", "\u1E90"=>"Z\u0302", + "\u1E91"=>"z\u0302", "\u1E92"=>"Z\u0323", "\u1E93"=>"z\u0323", "\u1E94"=>"Z\u0331", "\u1E95"=>"z\u0331", "\u1E96"=>"h\u0331", "\u1E97"=>"t\u0308", "\u1E98"=>"w\u030A", + "\u1E99"=>"y\u030A", "\u1E9B"=>"\u017F\u0307", "\u1EA0"=>"A\u0323", "\u1EA1"=>"a\u0323", "\u1EA2"=>"A\u0309", "\u1EA3"=>"a\u0309", "\u1EA4"=>"A\u0302\u0301", "\u1EA5"=>"a\u0302\u0301", + "\u1EA6"=>"A\u0302\u0300", "\u1EA7"=>"a\u0302\u0300", "\u1EA8"=>"A\u0302\u0309", "\u1EA9"=>"a\u0302\u0309", "\u1EAA"=>"A\u0302\u0303", "\u1EAB"=>"a\u0302\u0303", "\u1EAC"=>"A\u0323\u0302", "\u1EAD"=>"a\u0323\u0302", + "\u1EAE"=>"A\u0306\u0301", "\u1EAF"=>"a\u0306\u0301", "\u1EB0"=>"A\u0306\u0300", "\u1EB1"=>"a\u0306\u0300", "\u1EB2"=>"A\u0306\u0309", "\u1EB3"=>"a\u0306\u0309", "\u1EB4"=>"A\u0306\u0303", "\u1EB5"=>"a\u0306\u0303", + "\u1EB6"=>"A\u0323\u0306", "\u1EB7"=>"a\u0323\u0306", "\u1EB8"=>"E\u0323", "\u1EB9"=>"e\u0323", "\u1EBA"=>"E\u0309", "\u1EBB"=>"e\u0309", "\u1EBC"=>"E\u0303", "\u1EBD"=>"e\u0303", + "\u1EBE"=>"E\u0302\u0301", "\u1EBF"=>"e\u0302\u0301", "\u1EC0"=>"E\u0302\u0300", "\u1EC1"=>"e\u0302\u0300", "\u1EC2"=>"E\u0302\u0309", "\u1EC3"=>"e\u0302\u0309", "\u1EC4"=>"E\u0302\u0303", "\u1EC5"=>"e\u0302\u0303", + "\u1EC6"=>"E\u0323\u0302", "\u1EC7"=>"e\u0323\u0302", "\u1EC8"=>"I\u0309", "\u1EC9"=>"i\u0309", "\u1ECA"=>"I\u0323", "\u1ECB"=>"i\u0323", "\u1ECC"=>"O\u0323", "\u1ECD"=>"o\u0323", + "\u1ECE"=>"O\u0309", "\u1ECF"=>"o\u0309", "\u1ED0"=>"O\u0302\u0301", "\u1ED1"=>"o\u0302\u0301", "\u1ED2"=>"O\u0302\u0300", "\u1ED3"=>"o\u0302\u0300", "\u1ED4"=>"O\u0302\u0309", "\u1ED5"=>"o\u0302\u0309", + "\u1ED6"=>"O\u0302\u0303", "\u1ED7"=>"o\u0302\u0303", "\u1ED8"=>"O\u0323\u0302", "\u1ED9"=>"o\u0323\u0302", "\u1EDA"=>"O\u031B\u0301", "\u1EDB"=>"o\u031B\u0301", "\u1EDC"=>"O\u031B\u0300", "\u1EDD"=>"o\u031B\u0300", + "\u1EDE"=>"O\u031B\u0309", "\u1EDF"=>"o\u031B\u0309", "\u1EE0"=>"O\u031B\u0303", "\u1EE1"=>"o\u031B\u0303", "\u1EE2"=>"O\u031B\u0323", "\u1EE3"=>"o\u031B\u0323", "\u1EE4"=>"U\u0323", "\u1EE5"=>"u\u0323", + "\u1EE6"=>"U\u0309", "\u1EE7"=>"u\u0309", "\u1EE8"=>"U\u031B\u0301", "\u1EE9"=>"u\u031B\u0301", "\u1EEA"=>"U\u031B\u0300", "\u1EEB"=>"u\u031B\u0300", "\u1EEC"=>"U\u031B\u0309", "\u1EED"=>"u\u031B\u0309", + "\u1EEE"=>"U\u031B\u0303", "\u1EEF"=>"u\u031B\u0303", "\u1EF0"=>"U\u031B\u0323", "\u1EF1"=>"u\u031B\u0323", "\u1EF2"=>"Y\u0300", "\u1EF3"=>"y\u0300", "\u1EF4"=>"Y\u0323", "\u1EF5"=>"y\u0323", + "\u1EF6"=>"Y\u0309", "\u1EF7"=>"y\u0309", "\u1EF8"=>"Y\u0303", "\u1EF9"=>"y\u0303", "\u1F00"=>"\u03B1\u0313", "\u1F01"=>"\u03B1\u0314", "\u1F02"=>"\u03B1\u0313\u0300", "\u1F03"=>"\u03B1\u0314\u0300", + "\u1F04"=>"\u03B1\u0313\u0301", "\u1F05"=>"\u03B1\u0314\u0301", "\u1F06"=>"\u03B1\u0313\u0342", "\u1F07"=>"\u03B1\u0314\u0342", "\u1F08"=>"\u0391\u0313", "\u1F09"=>"\u0391\u0314", "\u1F0A"=>"\u0391\u0313\u0300", "\u1F0B"=>"\u0391\u0314\u0300", + "\u1F0C"=>"\u0391\u0313\u0301", "\u1F0D"=>"\u0391\u0314\u0301", "\u1F0E"=>"\u0391\u0313\u0342", "\u1F0F"=>"\u0391\u0314\u0342", "\u1F10"=>"\u03B5\u0313", "\u1F11"=>"\u03B5\u0314", "\u1F12"=>"\u03B5\u0313\u0300", "\u1F13"=>"\u03B5\u0314\u0300", + "\u1F14"=>"\u03B5\u0313\u0301", "\u1F15"=>"\u03B5\u0314\u0301", "\u1F18"=>"\u0395\u0313", "\u1F19"=>"\u0395\u0314", "\u1F1A"=>"\u0395\u0313\u0300", "\u1F1B"=>"\u0395\u0314\u0300", "\u1F1C"=>"\u0395\u0313\u0301", "\u1F1D"=>"\u0395\u0314\u0301", + "\u1F20"=>"\u03B7\u0313", "\u1F21"=>"\u03B7\u0314", "\u1F22"=>"\u03B7\u0313\u0300", "\u1F23"=>"\u03B7\u0314\u0300", "\u1F24"=>"\u03B7\u0313\u0301", "\u1F25"=>"\u03B7\u0314\u0301", "\u1F26"=>"\u03B7\u0313\u0342", "\u1F27"=>"\u03B7\u0314\u0342", + "\u1F28"=>"\u0397\u0313", "\u1F29"=>"\u0397\u0314", "\u1F2A"=>"\u0397\u0313\u0300", "\u1F2B"=>"\u0397\u0314\u0300", "\u1F2C"=>"\u0397\u0313\u0301", "\u1F2D"=>"\u0397\u0314\u0301", "\u1F2E"=>"\u0397\u0313\u0342", "\u1F2F"=>"\u0397\u0314\u0342", + "\u1F30"=>"\u03B9\u0313", "\u1F31"=>"\u03B9\u0314", "\u1F32"=>"\u03B9\u0313\u0300", "\u1F33"=>"\u03B9\u0314\u0300", "\u1F34"=>"\u03B9\u0313\u0301", "\u1F35"=>"\u03B9\u0314\u0301", "\u1F36"=>"\u03B9\u0313\u0342", "\u1F37"=>"\u03B9\u0314\u0342", + "\u1F38"=>"\u0399\u0313", "\u1F39"=>"\u0399\u0314", "\u1F3A"=>"\u0399\u0313\u0300", "\u1F3B"=>"\u0399\u0314\u0300", "\u1F3C"=>"\u0399\u0313\u0301", "\u1F3D"=>"\u0399\u0314\u0301", "\u1F3E"=>"\u0399\u0313\u0342", "\u1F3F"=>"\u0399\u0314\u0342", + "\u1F40"=>"\u03BF\u0313", "\u1F41"=>"\u03BF\u0314", "\u1F42"=>"\u03BF\u0313\u0300", "\u1F43"=>"\u03BF\u0314\u0300", "\u1F44"=>"\u03BF\u0313\u0301", "\u1F45"=>"\u03BF\u0314\u0301", "\u1F48"=>"\u039F\u0313", "\u1F49"=>"\u039F\u0314", + "\u1F4A"=>"\u039F\u0313\u0300", "\u1F4B"=>"\u039F\u0314\u0300", "\u1F4C"=>"\u039F\u0313\u0301", "\u1F4D"=>"\u039F\u0314\u0301", "\u1F50"=>"\u03C5\u0313", "\u1F51"=>"\u03C5\u0314", "\u1F52"=>"\u03C5\u0313\u0300", "\u1F53"=>"\u03C5\u0314\u0300", + "\u1F54"=>"\u03C5\u0313\u0301", "\u1F55"=>"\u03C5\u0314\u0301", "\u1F56"=>"\u03C5\u0313\u0342", "\u1F57"=>"\u03C5\u0314\u0342", "\u1F59"=>"\u03A5\u0314", "\u1F5B"=>"\u03A5\u0314\u0300", "\u1F5D"=>"\u03A5\u0314\u0301", "\u1F5F"=>"\u03A5\u0314\u0342", + "\u1F60"=>"\u03C9\u0313", "\u1F61"=>"\u03C9\u0314", "\u1F62"=>"\u03C9\u0313\u0300", "\u1F63"=>"\u03C9\u0314\u0300", "\u1F64"=>"\u03C9\u0313\u0301", "\u1F65"=>"\u03C9\u0314\u0301", "\u1F66"=>"\u03C9\u0313\u0342", "\u1F67"=>"\u03C9\u0314\u0342", + "\u1F68"=>"\u03A9\u0313", "\u1F69"=>"\u03A9\u0314", "\u1F6A"=>"\u03A9\u0313\u0300", "\u1F6B"=>"\u03A9\u0314\u0300", "\u1F6C"=>"\u03A9\u0313\u0301", "\u1F6D"=>"\u03A9\u0314\u0301", "\u1F6E"=>"\u03A9\u0313\u0342", "\u1F6F"=>"\u03A9\u0314\u0342", + "\u1F70"=>"\u03B1\u0300", "\u1F71"=>"\u03B1\u0301", "\u1F72"=>"\u03B5\u0300", "\u1F73"=>"\u03B5\u0301", "\u1F74"=>"\u03B7\u0300", "\u1F75"=>"\u03B7\u0301", "\u1F76"=>"\u03B9\u0300", "\u1F77"=>"\u03B9\u0301", + "\u1F78"=>"\u03BF\u0300", "\u1F79"=>"\u03BF\u0301", "\u1F7A"=>"\u03C5\u0300", "\u1F7B"=>"\u03C5\u0301", "\u1F7C"=>"\u03C9\u0300", "\u1F7D"=>"\u03C9\u0301", "\u1F80"=>"\u03B1\u0313\u0345", "\u1F81"=>"\u03B1\u0314\u0345", + "\u1F82"=>"\u03B1\u0313\u0300\u0345", "\u1F83"=>"\u03B1\u0314\u0300\u0345", "\u1F84"=>"\u03B1\u0313\u0301\u0345", "\u1F85"=>"\u03B1\u0314\u0301\u0345", "\u1F86"=>"\u03B1\u0313\u0342\u0345", "\u1F87"=>"\u03B1\u0314\u0342\u0345", "\u1F88"=>"\u0391\u0313\u0345", "\u1F89"=>"\u0391\u0314\u0345", + "\u1F8A"=>"\u0391\u0313\u0300\u0345", "\u1F8B"=>"\u0391\u0314\u0300\u0345", "\u1F8C"=>"\u0391\u0313\u0301\u0345", "\u1F8D"=>"\u0391\u0314\u0301\u0345", "\u1F8E"=>"\u0391\u0313\u0342\u0345", "\u1F8F"=>"\u0391\u0314\u0342\u0345", "\u1F90"=>"\u03B7\u0313\u0345", "\u1F91"=>"\u03B7\u0314\u0345", + "\u1F92"=>"\u03B7\u0313\u0300\u0345", "\u1F93"=>"\u03B7\u0314\u0300\u0345", "\u1F94"=>"\u03B7\u0313\u0301\u0345", "\u1F95"=>"\u03B7\u0314\u0301\u0345", "\u1F96"=>"\u03B7\u0313\u0342\u0345", "\u1F97"=>"\u03B7\u0314\u0342\u0345", "\u1F98"=>"\u0397\u0313\u0345", "\u1F99"=>"\u0397\u0314\u0345", + "\u1F9A"=>"\u0397\u0313\u0300\u0345", "\u1F9B"=>"\u0397\u0314\u0300\u0345", "\u1F9C"=>"\u0397\u0313\u0301\u0345", "\u1F9D"=>"\u0397\u0314\u0301\u0345", "\u1F9E"=>"\u0397\u0313\u0342\u0345", "\u1F9F"=>"\u0397\u0314\u0342\u0345", "\u1FA0"=>"\u03C9\u0313\u0345", "\u1FA1"=>"\u03C9\u0314\u0345", + "\u1FA2"=>"\u03C9\u0313\u0300\u0345", "\u1FA3"=>"\u03C9\u0314\u0300\u0345", "\u1FA4"=>"\u03C9\u0313\u0301\u0345", "\u1FA5"=>"\u03C9\u0314\u0301\u0345", "\u1FA6"=>"\u03C9\u0313\u0342\u0345", "\u1FA7"=>"\u03C9\u0314\u0342\u0345", "\u1FA8"=>"\u03A9\u0313\u0345", "\u1FA9"=>"\u03A9\u0314\u0345", + "\u1FAA"=>"\u03A9\u0313\u0300\u0345", "\u1FAB"=>"\u03A9\u0314\u0300\u0345", "\u1FAC"=>"\u03A9\u0313\u0301\u0345", "\u1FAD"=>"\u03A9\u0314\u0301\u0345", "\u1FAE"=>"\u03A9\u0313\u0342\u0345", "\u1FAF"=>"\u03A9\u0314\u0342\u0345", "\u1FB0"=>"\u03B1\u0306", "\u1FB1"=>"\u03B1\u0304", + "\u1FB2"=>"\u03B1\u0300\u0345", "\u1FB3"=>"\u03B1\u0345", "\u1FB4"=>"\u03B1\u0301\u0345", "\u1FB6"=>"\u03B1\u0342", "\u1FB7"=>"\u03B1\u0342\u0345", "\u1FB8"=>"\u0391\u0306", "\u1FB9"=>"\u0391\u0304", "\u1FBA"=>"\u0391\u0300", + "\u1FBB"=>"\u0391\u0301", "\u1FBC"=>"\u0391\u0345", "\u1FBE"=>"\u03B9", "\u1FC1"=>"\u00A8\u0342", "\u1FC2"=>"\u03B7\u0300\u0345", "\u1FC3"=>"\u03B7\u0345", "\u1FC4"=>"\u03B7\u0301\u0345", "\u1FC6"=>"\u03B7\u0342", + "\u1FC7"=>"\u03B7\u0342\u0345", "\u1FC8"=>"\u0395\u0300", "\u1FC9"=>"\u0395\u0301", "\u1FCA"=>"\u0397\u0300", "\u1FCB"=>"\u0397\u0301", "\u1FCC"=>"\u0397\u0345", "\u1FCD"=>"\u1FBF\u0300", "\u1FCE"=>"\u1FBF\u0301", + "\u1FCF"=>"\u1FBF\u0342", "\u1FD0"=>"\u03B9\u0306", "\u1FD1"=>"\u03B9\u0304", "\u1FD2"=>"\u03B9\u0308\u0300", "\u1FD3"=>"\u03B9\u0308\u0301", "\u1FD6"=>"\u03B9\u0342", "\u1FD7"=>"\u03B9\u0308\u0342", "\u1FD8"=>"\u0399\u0306", + "\u1FD9"=>"\u0399\u0304", "\u1FDA"=>"\u0399\u0300", "\u1FDB"=>"\u0399\u0301", "\u1FDD"=>"\u1FFE\u0300", "\u1FDE"=>"\u1FFE\u0301", "\u1FDF"=>"\u1FFE\u0342", "\u1FE0"=>"\u03C5\u0306", "\u1FE1"=>"\u03C5\u0304", + "\u1FE2"=>"\u03C5\u0308\u0300", "\u1FE3"=>"\u03C5\u0308\u0301", "\u1FE4"=>"\u03C1\u0313", "\u1FE5"=>"\u03C1\u0314", "\u1FE6"=>"\u03C5\u0342", "\u1FE7"=>"\u03C5\u0308\u0342", "\u1FE8"=>"\u03A5\u0306", "\u1FE9"=>"\u03A5\u0304", + "\u1FEA"=>"\u03A5\u0300", "\u1FEB"=>"\u03A5\u0301", "\u1FEC"=>"\u03A1\u0314", "\u1FED"=>"\u00A8\u0300", "\u1FEE"=>"\u00A8\u0301", "\u1FEF"=>"`", "\u1FF2"=>"\u03C9\u0300\u0345", "\u1FF3"=>"\u03C9\u0345", + "\u1FF4"=>"\u03C9\u0301\u0345", "\u1FF6"=>"\u03C9\u0342", "\u1FF7"=>"\u03C9\u0342\u0345", "\u1FF8"=>"\u039F\u0300", "\u1FF9"=>"\u039F\u0301", "\u1FFA"=>"\u03A9\u0300", "\u1FFB"=>"\u03A9\u0301", "\u1FFC"=>"\u03A9\u0345", + "\u1FFD"=>"\u00B4", "\u2000"=>"\u2002", "\u2001"=>"\u2003", "\u2126"=>"\u03A9", "\u212A"=>"K", "\u212B"=>"A\u030A", "\u219A"=>"\u2190\u0338", "\u219B"=>"\u2192\u0338", + "\u21AE"=>"\u2194\u0338", "\u21CD"=>"\u21D0\u0338", "\u21CE"=>"\u21D4\u0338", "\u21CF"=>"\u21D2\u0338", "\u2204"=>"\u2203\u0338", "\u2209"=>"\u2208\u0338", "\u220C"=>"\u220B\u0338", "\u2224"=>"\u2223\u0338", + "\u2226"=>"\u2225\u0338", "\u2241"=>"\u223C\u0338", "\u2244"=>"\u2243\u0338", "\u2247"=>"\u2245\u0338", "\u2249"=>"\u2248\u0338", "\u2260"=>"=\u0338", "\u2262"=>"\u2261\u0338", "\u226D"=>"\u224D\u0338", + "\u226E"=>"<\u0338", "\u226F"=>">\u0338", "\u2270"=>"\u2264\u0338", "\u2271"=>"\u2265\u0338", "\u2274"=>"\u2272\u0338", "\u2275"=>"\u2273\u0338", "\u2278"=>"\u2276\u0338", "\u2279"=>"\u2277\u0338", + "\u2280"=>"\u227A\u0338", "\u2281"=>"\u227B\u0338", "\u2284"=>"\u2282\u0338", "\u2285"=>"\u2283\u0338", "\u2288"=>"\u2286\u0338", "\u2289"=>"\u2287\u0338", "\u22AC"=>"\u22A2\u0338", "\u22AD"=>"\u22A8\u0338", + "\u22AE"=>"\u22A9\u0338", "\u22AF"=>"\u22AB\u0338", "\u22E0"=>"\u227C\u0338", "\u22E1"=>"\u227D\u0338", "\u22E2"=>"\u2291\u0338", "\u22E3"=>"\u2292\u0338", "\u22EA"=>"\u22B2\u0338", "\u22EB"=>"\u22B3\u0338", + "\u22EC"=>"\u22B4\u0338", "\u22ED"=>"\u22B5\u0338", "\u2329"=>"\u3008", "\u232A"=>"\u3009", "\u2ADC"=>"\u2ADD\u0338", "\u304C"=>"\u304B\u3099", "\u304E"=>"\u304D\u3099", "\u3050"=>"\u304F\u3099", + "\u3052"=>"\u3051\u3099", "\u3054"=>"\u3053\u3099", "\u3056"=>"\u3055\u3099", "\u3058"=>"\u3057\u3099", "\u305A"=>"\u3059\u3099", "\u305C"=>"\u305B\u3099", "\u305E"=>"\u305D\u3099", "\u3060"=>"\u305F\u3099", + "\u3062"=>"\u3061\u3099", "\u3065"=>"\u3064\u3099", "\u3067"=>"\u3066\u3099", "\u3069"=>"\u3068\u3099", "\u3070"=>"\u306F\u3099", "\u3071"=>"\u306F\u309A", "\u3073"=>"\u3072\u3099", "\u3074"=>"\u3072\u309A", + "\u3076"=>"\u3075\u3099", "\u3077"=>"\u3075\u309A", "\u3079"=>"\u3078\u3099", "\u307A"=>"\u3078\u309A", "\u307C"=>"\u307B\u3099", "\u307D"=>"\u307B\u309A", "\u3094"=>"\u3046\u3099", "\u309E"=>"\u309D\u3099", + "\u30AC"=>"\u30AB\u3099", "\u30AE"=>"\u30AD\u3099", "\u30B0"=>"\u30AF\u3099", "\u30B2"=>"\u30B1\u3099", "\u30B4"=>"\u30B3\u3099", "\u30B6"=>"\u30B5\u3099", "\u30B8"=>"\u30B7\u3099", "\u30BA"=>"\u30B9\u3099", + "\u30BC"=>"\u30BB\u3099", "\u30BE"=>"\u30BD\u3099", "\u30C0"=>"\u30BF\u3099", "\u30C2"=>"\u30C1\u3099", "\u30C5"=>"\u30C4\u3099", "\u30C7"=>"\u30C6\u3099", "\u30C9"=>"\u30C8\u3099", "\u30D0"=>"\u30CF\u3099", + "\u30D1"=>"\u30CF\u309A", "\u30D3"=>"\u30D2\u3099", "\u30D4"=>"\u30D2\u309A", "\u30D6"=>"\u30D5\u3099", "\u30D7"=>"\u30D5\u309A", "\u30D9"=>"\u30D8\u3099", "\u30DA"=>"\u30D8\u309A", "\u30DC"=>"\u30DB\u3099", + "\u30DD"=>"\u30DB\u309A", "\u30F4"=>"\u30A6\u3099", "\u30F7"=>"\u30EF\u3099", "\u30F8"=>"\u30F0\u3099", "\u30F9"=>"\u30F1\u3099", "\u30FA"=>"\u30F2\u3099", "\u30FE"=>"\u30FD\u3099", "\uF900"=>"\u8C48", + "\uF901"=>"\u66F4", "\uF902"=>"\u8ECA", "\uF903"=>"\u8CC8", "\uF904"=>"\u6ED1", "\uF905"=>"\u4E32", "\uF906"=>"\u53E5", "\uF907"=>"\u9F9C", "\uF908"=>"\u9F9C", + "\uF909"=>"\u5951", "\uF90A"=>"\u91D1", "\uF90B"=>"\u5587", "\uF90C"=>"\u5948", "\uF90D"=>"\u61F6", "\uF90E"=>"\u7669", "\uF90F"=>"\u7F85", "\uF910"=>"\u863F", + "\uF911"=>"\u87BA", "\uF912"=>"\u88F8", "\uF913"=>"\u908F", "\uF914"=>"\u6A02", "\uF915"=>"\u6D1B", "\uF916"=>"\u70D9", "\uF917"=>"\u73DE", "\uF918"=>"\u843D", + "\uF919"=>"\u916A", "\uF91A"=>"\u99F1", "\uF91B"=>"\u4E82", "\uF91C"=>"\u5375", "\uF91D"=>"\u6B04", "\uF91E"=>"\u721B", "\uF91F"=>"\u862D", "\uF920"=>"\u9E1E", + "\uF921"=>"\u5D50", "\uF922"=>"\u6FEB", "\uF923"=>"\u85CD", "\uF924"=>"\u8964", "\uF925"=>"\u62C9", "\uF926"=>"\u81D8", "\uF927"=>"\u881F", "\uF928"=>"\u5ECA", + "\uF929"=>"\u6717", "\uF92A"=>"\u6D6A", "\uF92B"=>"\u72FC", "\uF92C"=>"\u90CE", "\uF92D"=>"\u4F86", "\uF92E"=>"\u51B7", "\uF92F"=>"\u52DE", "\uF930"=>"\u64C4", + "\uF931"=>"\u6AD3", "\uF932"=>"\u7210", "\uF933"=>"\u76E7", "\uF934"=>"\u8001", "\uF935"=>"\u8606", "\uF936"=>"\u865C", "\uF937"=>"\u8DEF", "\uF938"=>"\u9732", + "\uF939"=>"\u9B6F", "\uF93A"=>"\u9DFA", "\uF93B"=>"\u788C", "\uF93C"=>"\u797F", "\uF93D"=>"\u7DA0", "\uF93E"=>"\u83C9", "\uF93F"=>"\u9304", "\uF940"=>"\u9E7F", + "\uF941"=>"\u8AD6", "\uF942"=>"\u58DF", "\uF943"=>"\u5F04", "\uF944"=>"\u7C60", "\uF945"=>"\u807E", "\uF946"=>"\u7262", "\uF947"=>"\u78CA", "\uF948"=>"\u8CC2", + "\uF949"=>"\u96F7", "\uF94A"=>"\u58D8", "\uF94B"=>"\u5C62", "\uF94C"=>"\u6A13", "\uF94D"=>"\u6DDA", "\uF94E"=>"\u6F0F", "\uF94F"=>"\u7D2F", "\uF950"=>"\u7E37", + "\uF951"=>"\u964B", "\uF952"=>"\u52D2", "\uF953"=>"\u808B", "\uF954"=>"\u51DC", "\uF955"=>"\u51CC", "\uF956"=>"\u7A1C", "\uF957"=>"\u7DBE", "\uF958"=>"\u83F1", + "\uF959"=>"\u9675", "\uF95A"=>"\u8B80", "\uF95B"=>"\u62CF", "\uF95C"=>"\u6A02", "\uF95D"=>"\u8AFE", "\uF95E"=>"\u4E39", "\uF95F"=>"\u5BE7", "\uF960"=>"\u6012", + "\uF961"=>"\u7387", "\uF962"=>"\u7570", "\uF963"=>"\u5317", "\uF964"=>"\u78FB", "\uF965"=>"\u4FBF", "\uF966"=>"\u5FA9", "\uF967"=>"\u4E0D", "\uF968"=>"\u6CCC", + "\uF969"=>"\u6578", "\uF96A"=>"\u7D22", "\uF96B"=>"\u53C3", "\uF96C"=>"\u585E", "\uF96D"=>"\u7701", "\uF96E"=>"\u8449", "\uF96F"=>"\u8AAA", "\uF970"=>"\u6BBA", + "\uF971"=>"\u8FB0", "\uF972"=>"\u6C88", "\uF973"=>"\u62FE", "\uF974"=>"\u82E5", "\uF975"=>"\u63A0", "\uF976"=>"\u7565", "\uF977"=>"\u4EAE", "\uF978"=>"\u5169", + "\uF979"=>"\u51C9", "\uF97A"=>"\u6881", "\uF97B"=>"\u7CE7", "\uF97C"=>"\u826F", "\uF97D"=>"\u8AD2", "\uF97E"=>"\u91CF", "\uF97F"=>"\u52F5", "\uF980"=>"\u5442", + "\uF981"=>"\u5973", "\uF982"=>"\u5EEC", "\uF983"=>"\u65C5", "\uF984"=>"\u6FFE", "\uF985"=>"\u792A", "\uF986"=>"\u95AD", "\uF987"=>"\u9A6A", "\uF988"=>"\u9E97", + "\uF989"=>"\u9ECE", "\uF98A"=>"\u529B", "\uF98B"=>"\u66C6", "\uF98C"=>"\u6B77", "\uF98D"=>"\u8F62", "\uF98E"=>"\u5E74", "\uF98F"=>"\u6190", "\uF990"=>"\u6200", + "\uF991"=>"\u649A", "\uF992"=>"\u6F23", "\uF993"=>"\u7149", "\uF994"=>"\u7489", "\uF995"=>"\u79CA", "\uF996"=>"\u7DF4", "\uF997"=>"\u806F", "\uF998"=>"\u8F26", + "\uF999"=>"\u84EE", "\uF99A"=>"\u9023", "\uF99B"=>"\u934A", "\uF99C"=>"\u5217", "\uF99D"=>"\u52A3", "\uF99E"=>"\u54BD", "\uF99F"=>"\u70C8", "\uF9A0"=>"\u88C2", + "\uF9A1"=>"\u8AAA", "\uF9A2"=>"\u5EC9", "\uF9A3"=>"\u5FF5", "\uF9A4"=>"\u637B", "\uF9A5"=>"\u6BAE", "\uF9A6"=>"\u7C3E", "\uF9A7"=>"\u7375", "\uF9A8"=>"\u4EE4", + "\uF9A9"=>"\u56F9", "\uF9AA"=>"\u5BE7", "\uF9AB"=>"\u5DBA", "\uF9AC"=>"\u601C", "\uF9AD"=>"\u73B2", "\uF9AE"=>"\u7469", "\uF9AF"=>"\u7F9A", "\uF9B0"=>"\u8046", + "\uF9B1"=>"\u9234", "\uF9B2"=>"\u96F6", "\uF9B3"=>"\u9748", "\uF9B4"=>"\u9818", "\uF9B5"=>"\u4F8B", "\uF9B6"=>"\u79AE", "\uF9B7"=>"\u91B4", "\uF9B8"=>"\u96B8", + "\uF9B9"=>"\u60E1", "\uF9BA"=>"\u4E86", "\uF9BB"=>"\u50DA", "\uF9BC"=>"\u5BEE", "\uF9BD"=>"\u5C3F", "\uF9BE"=>"\u6599", "\uF9BF"=>"\u6A02", "\uF9C0"=>"\u71CE", + "\uF9C1"=>"\u7642", "\uF9C2"=>"\u84FC", "\uF9C3"=>"\u907C", "\uF9C4"=>"\u9F8D", "\uF9C5"=>"\u6688", "\uF9C6"=>"\u962E", "\uF9C7"=>"\u5289", "\uF9C8"=>"\u677B", + "\uF9C9"=>"\u67F3", "\uF9CA"=>"\u6D41", "\uF9CB"=>"\u6E9C", "\uF9CC"=>"\u7409", "\uF9CD"=>"\u7559", "\uF9CE"=>"\u786B", "\uF9CF"=>"\u7D10", "\uF9D0"=>"\u985E", + "\uF9D1"=>"\u516D", "\uF9D2"=>"\u622E", "\uF9D3"=>"\u9678", "\uF9D4"=>"\u502B", "\uF9D5"=>"\u5D19", "\uF9D6"=>"\u6DEA", "\uF9D7"=>"\u8F2A", "\uF9D8"=>"\u5F8B", + "\uF9D9"=>"\u6144", "\uF9DA"=>"\u6817", "\uF9DB"=>"\u7387", "\uF9DC"=>"\u9686", "\uF9DD"=>"\u5229", "\uF9DE"=>"\u540F", "\uF9DF"=>"\u5C65", "\uF9E0"=>"\u6613", + "\uF9E1"=>"\u674E", "\uF9E2"=>"\u68A8", "\uF9E3"=>"\u6CE5", "\uF9E4"=>"\u7406", "\uF9E5"=>"\u75E2", "\uF9E6"=>"\u7F79", "\uF9E7"=>"\u88CF", "\uF9E8"=>"\u88E1", + "\uF9E9"=>"\u91CC", "\uF9EA"=>"\u96E2", "\uF9EB"=>"\u533F", "\uF9EC"=>"\u6EBA", "\uF9ED"=>"\u541D", "\uF9EE"=>"\u71D0", "\uF9EF"=>"\u7498", "\uF9F0"=>"\u85FA", + "\uF9F1"=>"\u96A3", "\uF9F2"=>"\u9C57", "\uF9F3"=>"\u9E9F", "\uF9F4"=>"\u6797", "\uF9F5"=>"\u6DCB", "\uF9F6"=>"\u81E8", "\uF9F7"=>"\u7ACB", "\uF9F8"=>"\u7B20", + "\uF9F9"=>"\u7C92", "\uF9FA"=>"\u72C0", "\uF9FB"=>"\u7099", "\uF9FC"=>"\u8B58", "\uF9FD"=>"\u4EC0", "\uF9FE"=>"\u8336", "\uF9FF"=>"\u523A", "\uFA00"=>"\u5207", + "\uFA01"=>"\u5EA6", "\uFA02"=>"\u62D3", "\uFA03"=>"\u7CD6", "\uFA04"=>"\u5B85", "\uFA05"=>"\u6D1E", "\uFA06"=>"\u66B4", "\uFA07"=>"\u8F3B", "\uFA08"=>"\u884C", + "\uFA09"=>"\u964D", "\uFA0A"=>"\u898B", "\uFA0B"=>"\u5ED3", "\uFA0C"=>"\u5140", "\uFA0D"=>"\u55C0", "\uFA10"=>"\u585A", "\uFA12"=>"\u6674", "\uFA15"=>"\u51DE", + "\uFA16"=>"\u732A", "\uFA17"=>"\u76CA", "\uFA18"=>"\u793C", "\uFA19"=>"\u795E", "\uFA1A"=>"\u7965", "\uFA1B"=>"\u798F", "\uFA1C"=>"\u9756", "\uFA1D"=>"\u7CBE", + "\uFA1E"=>"\u7FBD", "\uFA20"=>"\u8612", "\uFA22"=>"\u8AF8", "\uFA25"=>"\u9038", "\uFA26"=>"\u90FD", "\uFA2A"=>"\u98EF", "\uFA2B"=>"\u98FC", "\uFA2C"=>"\u9928", + "\uFA2D"=>"\u9DB4", "\uFA2E"=>"\u90DE", "\uFA2F"=>"\u96B7", "\uFA30"=>"\u4FAE", "\uFA31"=>"\u50E7", "\uFA32"=>"\u514D", "\uFA33"=>"\u52C9", "\uFA34"=>"\u52E4", + "\uFA35"=>"\u5351", "\uFA36"=>"\u559D", "\uFA37"=>"\u5606", "\uFA38"=>"\u5668", "\uFA39"=>"\u5840", "\uFA3A"=>"\u58A8", "\uFA3B"=>"\u5C64", "\uFA3C"=>"\u5C6E", + "\uFA3D"=>"\u6094", "\uFA3E"=>"\u6168", "\uFA3F"=>"\u618E", "\uFA40"=>"\u61F2", "\uFA41"=>"\u654F", "\uFA42"=>"\u65E2", "\uFA43"=>"\u6691", "\uFA44"=>"\u6885", + "\uFA45"=>"\u6D77", "\uFA46"=>"\u6E1A", "\uFA47"=>"\u6F22", "\uFA48"=>"\u716E", "\uFA49"=>"\u722B", "\uFA4A"=>"\u7422", "\uFA4B"=>"\u7891", "\uFA4C"=>"\u793E", + "\uFA4D"=>"\u7949", "\uFA4E"=>"\u7948", "\uFA4F"=>"\u7950", "\uFA50"=>"\u7956", "\uFA51"=>"\u795D", "\uFA52"=>"\u798D", "\uFA53"=>"\u798E", "\uFA54"=>"\u7A40", + "\uFA55"=>"\u7A81", "\uFA56"=>"\u7BC0", "\uFA57"=>"\u7DF4", "\uFA58"=>"\u7E09", "\uFA59"=>"\u7E41", "\uFA5A"=>"\u7F72", "\uFA5B"=>"\u8005", "\uFA5C"=>"\u81ED", + "\uFA5D"=>"\u8279", "\uFA5E"=>"\u8279", "\uFA5F"=>"\u8457", "\uFA60"=>"\u8910", "\uFA61"=>"\u8996", "\uFA62"=>"\u8B01", "\uFA63"=>"\u8B39", "\uFA64"=>"\u8CD3", + "\uFA65"=>"\u8D08", "\uFA66"=>"\u8FB6", "\uFA67"=>"\u9038", "\uFA68"=>"\u96E3", "\uFA69"=>"\u97FF", "\uFA6A"=>"\u983B", "\uFA6B"=>"\u6075", "\uFA6C"=>"\u{242EE}", + "\uFA6D"=>"\u8218", "\uFA70"=>"\u4E26", "\uFA71"=>"\u51B5", "\uFA72"=>"\u5168", "\uFA73"=>"\u4F80", "\uFA74"=>"\u5145", "\uFA75"=>"\u5180", "\uFA76"=>"\u52C7", + "\uFA77"=>"\u52FA", "\uFA78"=>"\u559D", "\uFA79"=>"\u5555", "\uFA7A"=>"\u5599", "\uFA7B"=>"\u55E2", "\uFA7C"=>"\u585A", "\uFA7D"=>"\u58B3", "\uFA7E"=>"\u5944", + "\uFA7F"=>"\u5954", "\uFA80"=>"\u5A62", "\uFA81"=>"\u5B28", "\uFA82"=>"\u5ED2", "\uFA83"=>"\u5ED9", "\uFA84"=>"\u5F69", "\uFA85"=>"\u5FAD", "\uFA86"=>"\u60D8", + "\uFA87"=>"\u614E", "\uFA88"=>"\u6108", "\uFA89"=>"\u618E", "\uFA8A"=>"\u6160", "\uFA8B"=>"\u61F2", "\uFA8C"=>"\u6234", "\uFA8D"=>"\u63C4", "\uFA8E"=>"\u641C", + "\uFA8F"=>"\u6452", "\uFA90"=>"\u6556", "\uFA91"=>"\u6674", "\uFA92"=>"\u6717", "\uFA93"=>"\u671B", "\uFA94"=>"\u6756", "\uFA95"=>"\u6B79", "\uFA96"=>"\u6BBA", + "\uFA97"=>"\u6D41", "\uFA98"=>"\u6EDB", "\uFA99"=>"\u6ECB", "\uFA9A"=>"\u6F22", "\uFA9B"=>"\u701E", "\uFA9C"=>"\u716E", "\uFA9D"=>"\u77A7", "\uFA9E"=>"\u7235", + "\uFA9F"=>"\u72AF", "\uFAA0"=>"\u732A", "\uFAA1"=>"\u7471", "\uFAA2"=>"\u7506", "\uFAA3"=>"\u753B", "\uFAA4"=>"\u761D", "\uFAA5"=>"\u761F", "\uFAA6"=>"\u76CA", + "\uFAA7"=>"\u76DB", "\uFAA8"=>"\u76F4", "\uFAA9"=>"\u774A", "\uFAAA"=>"\u7740", "\uFAAB"=>"\u78CC", "\uFAAC"=>"\u7AB1", "\uFAAD"=>"\u7BC0", "\uFAAE"=>"\u7C7B", + "\uFAAF"=>"\u7D5B", "\uFAB0"=>"\u7DF4", "\uFAB1"=>"\u7F3E", "\uFAB2"=>"\u8005", "\uFAB3"=>"\u8352", "\uFAB4"=>"\u83EF", "\uFAB5"=>"\u8779", "\uFAB6"=>"\u8941", + "\uFAB7"=>"\u8986", "\uFAB8"=>"\u8996", "\uFAB9"=>"\u8ABF", "\uFABA"=>"\u8AF8", "\uFABB"=>"\u8ACB", "\uFABC"=>"\u8B01", "\uFABD"=>"\u8AFE", "\uFABE"=>"\u8AED", + "\uFABF"=>"\u8B39", "\uFAC0"=>"\u8B8A", "\uFAC1"=>"\u8D08", "\uFAC2"=>"\u8F38", "\uFAC3"=>"\u9072", "\uFAC4"=>"\u9199", "\uFAC5"=>"\u9276", "\uFAC6"=>"\u967C", + "\uFAC7"=>"\u96E3", "\uFAC8"=>"\u9756", "\uFAC9"=>"\u97DB", "\uFACA"=>"\u97FF", "\uFACB"=>"\u980B", "\uFACC"=>"\u983B", "\uFACD"=>"\u9B12", "\uFACE"=>"\u9F9C", + "\uFACF"=>"\u{2284A}", "\uFAD0"=>"\u{22844}", "\uFAD1"=>"\u{233D5}", "\uFAD2"=>"\u3B9D", "\uFAD3"=>"\u4018", "\uFAD4"=>"\u4039", "\uFAD5"=>"\u{25249}", "\uFAD6"=>"\u{25CD0}", + "\uFAD7"=>"\u{27ED3}", "\uFAD8"=>"\u9F43", "\uFAD9"=>"\u9F8E", "\uFB1D"=>"\u05D9\u05B4", "\uFB1F"=>"\u05F2\u05B7", "\uFB2A"=>"\u05E9\u05C1", "\uFB2B"=>"\u05E9\u05C2", "\uFB2C"=>"\u05E9\u05BC\u05C1", + "\uFB2D"=>"\u05E9\u05BC\u05C2", "\uFB2E"=>"\u05D0\u05B7", "\uFB2F"=>"\u05D0\u05B8", "\uFB30"=>"\u05D0\u05BC", "\uFB31"=>"\u05D1\u05BC", "\uFB32"=>"\u05D2\u05BC", "\uFB33"=>"\u05D3\u05BC", "\uFB34"=>"\u05D4\u05BC", + "\uFB35"=>"\u05D5\u05BC", "\uFB36"=>"\u05D6\u05BC", "\uFB38"=>"\u05D8\u05BC", "\uFB39"=>"\u05D9\u05BC", "\uFB3A"=>"\u05DA\u05BC", "\uFB3B"=>"\u05DB\u05BC", "\uFB3C"=>"\u05DC\u05BC", "\uFB3E"=>"\u05DE\u05BC", + "\uFB40"=>"\u05E0\u05BC", "\uFB41"=>"\u05E1\u05BC", "\uFB43"=>"\u05E3\u05BC", "\uFB44"=>"\u05E4\u05BC", "\uFB46"=>"\u05E6\u05BC", "\uFB47"=>"\u05E7\u05BC", "\uFB48"=>"\u05E8\u05BC", "\uFB49"=>"\u05E9\u05BC", + "\uFB4A"=>"\u05EA\u05BC", "\uFB4B"=>"\u05D5\u05B9", "\uFB4C"=>"\u05D1\u05BF", "\uFB4D"=>"\u05DB\u05BF", "\uFB4E"=>"\u05E4\u05BF", "\u{1109A}"=>"\u{11099}\u{110BA}", "\u{1109C}"=>"\u{1109B}\u{110BA}", "\u{110AB}"=>"\u{110A5}\u{110BA}", + "\u{1112E}"=>"\u{11131}\u{11127}", "\u{1112F}"=>"\u{11132}\u{11127}", "\u{1134B}"=>"\u{11347}\u{1133E}", "\u{1134C}"=>"\u{11347}\u{11357}", "\u{114BB}"=>"\u{114B9}\u{114BA}", "\u{114BC}"=>"\u{114B9}\u{114B0}", "\u{114BE}"=>"\u{114B9}\u{114BD}", "\u{115BA}"=>"\u{115B8}\u{115AF}", + "\u{115BB}"=>"\u{115B9}\u{115AF}", "\u{1D15E}"=>"\u{1D157}\u{1D165}", "\u{1D15F}"=>"\u{1D158}\u{1D165}", "\u{1D160}"=>"\u{1D158}\u{1D165}\u{1D16E}", "\u{1D161}"=>"\u{1D158}\u{1D165}\u{1D16F}", "\u{1D162}"=>"\u{1D158}\u{1D165}\u{1D170}", "\u{1D163}"=>"\u{1D158}\u{1D165}\u{1D171}", "\u{1D164}"=>"\u{1D158}\u{1D165}\u{1D172}", + "\u{1D1BB}"=>"\u{1D1B9}\u{1D165}", "\u{1D1BC}"=>"\u{1D1BA}\u{1D165}", "\u{1D1BD}"=>"\u{1D1B9}\u{1D165}\u{1D16E}", "\u{1D1BE}"=>"\u{1D1BA}\u{1D165}\u{1D16E}", "\u{1D1BF}"=>"\u{1D1B9}\u{1D165}\u{1D16F}", "\u{1D1C0}"=>"\u{1D1BA}\u{1D165}\u{1D16F}", "\u{2F800}"=>"\u4E3D", "\u{2F801}"=>"\u4E38", + "\u{2F802}"=>"\u4E41", "\u{2F803}"=>"\u{20122}", "\u{2F804}"=>"\u4F60", "\u{2F805}"=>"\u4FAE", "\u{2F806}"=>"\u4FBB", "\u{2F807}"=>"\u5002", "\u{2F808}"=>"\u507A", "\u{2F809}"=>"\u5099", + "\u{2F80A}"=>"\u50E7", "\u{2F80B}"=>"\u50CF", "\u{2F80C}"=>"\u349E", "\u{2F80D}"=>"\u{2063A}", "\u{2F80E}"=>"\u514D", "\u{2F80F}"=>"\u5154", "\u{2F810}"=>"\u5164", "\u{2F811}"=>"\u5177", + "\u{2F812}"=>"\u{2051C}", "\u{2F813}"=>"\u34B9", "\u{2F814}"=>"\u5167", "\u{2F815}"=>"\u518D", "\u{2F816}"=>"\u{2054B}", "\u{2F817}"=>"\u5197", "\u{2F818}"=>"\u51A4", "\u{2F819}"=>"\u4ECC", + "\u{2F81A}"=>"\u51AC", "\u{2F81B}"=>"\u51B5", "\u{2F81C}"=>"\u{291DF}", "\u{2F81D}"=>"\u51F5", "\u{2F81E}"=>"\u5203", "\u{2F81F}"=>"\u34DF", "\u{2F820}"=>"\u523B", "\u{2F821}"=>"\u5246", + "\u{2F822}"=>"\u5272", "\u{2F823}"=>"\u5277", "\u{2F824}"=>"\u3515", "\u{2F825}"=>"\u52C7", "\u{2F826}"=>"\u52C9", "\u{2F827}"=>"\u52E4", "\u{2F828}"=>"\u52FA", "\u{2F829}"=>"\u5305", + "\u{2F82A}"=>"\u5306", "\u{2F82B}"=>"\u5317", "\u{2F82C}"=>"\u5349", "\u{2F82D}"=>"\u5351", "\u{2F82E}"=>"\u535A", "\u{2F82F}"=>"\u5373", "\u{2F830}"=>"\u537D", "\u{2F831}"=>"\u537F", + "\u{2F832}"=>"\u537F", "\u{2F833}"=>"\u537F", "\u{2F834}"=>"\u{20A2C}", "\u{2F835}"=>"\u7070", "\u{2F836}"=>"\u53CA", "\u{2F837}"=>"\u53DF", "\u{2F838}"=>"\u{20B63}", "\u{2F839}"=>"\u53EB", + "\u{2F83A}"=>"\u53F1", "\u{2F83B}"=>"\u5406", "\u{2F83C}"=>"\u549E", "\u{2F83D}"=>"\u5438", "\u{2F83E}"=>"\u5448", "\u{2F83F}"=>"\u5468", "\u{2F840}"=>"\u54A2", "\u{2F841}"=>"\u54F6", + "\u{2F842}"=>"\u5510", "\u{2F843}"=>"\u5553", "\u{2F844}"=>"\u5563", "\u{2F845}"=>"\u5584", "\u{2F846}"=>"\u5584", "\u{2F847}"=>"\u5599", "\u{2F848}"=>"\u55AB", "\u{2F849}"=>"\u55B3", + "\u{2F84A}"=>"\u55C2", "\u{2F84B}"=>"\u5716", "\u{2F84C}"=>"\u5606", "\u{2F84D}"=>"\u5717", "\u{2F84E}"=>"\u5651", "\u{2F84F}"=>"\u5674", "\u{2F850}"=>"\u5207", "\u{2F851}"=>"\u58EE", + "\u{2F852}"=>"\u57CE", "\u{2F853}"=>"\u57F4", "\u{2F854}"=>"\u580D", "\u{2F855}"=>"\u578B", "\u{2F856}"=>"\u5832", "\u{2F857}"=>"\u5831", "\u{2F858}"=>"\u58AC", "\u{2F859}"=>"\u{214E4}", + "\u{2F85A}"=>"\u58F2", "\u{2F85B}"=>"\u58F7", "\u{2F85C}"=>"\u5906", "\u{2F85D}"=>"\u591A", "\u{2F85E}"=>"\u5922", "\u{2F85F}"=>"\u5962", "\u{2F860}"=>"\u{216A8}", "\u{2F861}"=>"\u{216EA}", + "\u{2F862}"=>"\u59EC", "\u{2F863}"=>"\u5A1B", "\u{2F864}"=>"\u5A27", "\u{2F865}"=>"\u59D8", "\u{2F866}"=>"\u5A66", "\u{2F867}"=>"\u36EE", "\u{2F868}"=>"\u36FC", "\u{2F869}"=>"\u5B08", + "\u{2F86A}"=>"\u5B3E", "\u{2F86B}"=>"\u5B3E", "\u{2F86C}"=>"\u{219C8}", "\u{2F86D}"=>"\u5BC3", "\u{2F86E}"=>"\u5BD8", "\u{2F86F}"=>"\u5BE7", "\u{2F870}"=>"\u5BF3", "\u{2F871}"=>"\u{21B18}", + "\u{2F872}"=>"\u5BFF", "\u{2F873}"=>"\u5C06", "\u{2F874}"=>"\u5F53", "\u{2F875}"=>"\u5C22", "\u{2F876}"=>"\u3781", "\u{2F877}"=>"\u5C60", "\u{2F878}"=>"\u5C6E", "\u{2F879}"=>"\u5CC0", + "\u{2F87A}"=>"\u5C8D", "\u{2F87B}"=>"\u{21DE4}", "\u{2F87C}"=>"\u5D43", "\u{2F87D}"=>"\u{21DE6}", "\u{2F87E}"=>"\u5D6E", "\u{2F87F}"=>"\u5D6B", "\u{2F880}"=>"\u5D7C", "\u{2F881}"=>"\u5DE1", + "\u{2F882}"=>"\u5DE2", "\u{2F883}"=>"\u382F", "\u{2F884}"=>"\u5DFD", "\u{2F885}"=>"\u5E28", "\u{2F886}"=>"\u5E3D", "\u{2F887}"=>"\u5E69", "\u{2F888}"=>"\u3862", "\u{2F889}"=>"\u{22183}", + "\u{2F88A}"=>"\u387C", "\u{2F88B}"=>"\u5EB0", "\u{2F88C}"=>"\u5EB3", "\u{2F88D}"=>"\u5EB6", "\u{2F88E}"=>"\u5ECA", "\u{2F88F}"=>"\u{2A392}", "\u{2F890}"=>"\u5EFE", "\u{2F891}"=>"\u{22331}", + "\u{2F892}"=>"\u{22331}", "\u{2F893}"=>"\u8201", "\u{2F894}"=>"\u5F22", "\u{2F895}"=>"\u5F22", "\u{2F896}"=>"\u38C7", "\u{2F897}"=>"\u{232B8}", "\u{2F898}"=>"\u{261DA}", "\u{2F899}"=>"\u5F62", + "\u{2F89A}"=>"\u5F6B", "\u{2F89B}"=>"\u38E3", "\u{2F89C}"=>"\u5F9A", "\u{2F89D}"=>"\u5FCD", "\u{2F89E}"=>"\u5FD7", "\u{2F89F}"=>"\u5FF9", "\u{2F8A0}"=>"\u6081", "\u{2F8A1}"=>"\u393A", + "\u{2F8A2}"=>"\u391C", "\u{2F8A3}"=>"\u6094", "\u{2F8A4}"=>"\u{226D4}", "\u{2F8A5}"=>"\u60C7", "\u{2F8A6}"=>"\u6148", "\u{2F8A7}"=>"\u614C", "\u{2F8A8}"=>"\u614E", "\u{2F8A9}"=>"\u614C", + "\u{2F8AA}"=>"\u617A", "\u{2F8AB}"=>"\u618E", "\u{2F8AC}"=>"\u61B2", "\u{2F8AD}"=>"\u61A4", "\u{2F8AE}"=>"\u61AF", "\u{2F8AF}"=>"\u61DE", "\u{2F8B0}"=>"\u61F2", "\u{2F8B1}"=>"\u61F6", + "\u{2F8B2}"=>"\u6210", "\u{2F8B3}"=>"\u621B", "\u{2F8B4}"=>"\u625D", "\u{2F8B5}"=>"\u62B1", "\u{2F8B6}"=>"\u62D4", "\u{2F8B7}"=>"\u6350", "\u{2F8B8}"=>"\u{22B0C}", "\u{2F8B9}"=>"\u633D", + "\u{2F8BA}"=>"\u62FC", "\u{2F8BB}"=>"\u6368", "\u{2F8BC}"=>"\u6383", "\u{2F8BD}"=>"\u63E4", "\u{2F8BE}"=>"\u{22BF1}", "\u{2F8BF}"=>"\u6422", "\u{2F8C0}"=>"\u63C5", "\u{2F8C1}"=>"\u63A9", + "\u{2F8C2}"=>"\u3A2E", "\u{2F8C3}"=>"\u6469", "\u{2F8C4}"=>"\u647E", "\u{2F8C5}"=>"\u649D", "\u{2F8C6}"=>"\u6477", "\u{2F8C7}"=>"\u3A6C", "\u{2F8C8}"=>"\u654F", "\u{2F8C9}"=>"\u656C", + "\u{2F8CA}"=>"\u{2300A}", "\u{2F8CB}"=>"\u65E3", "\u{2F8CC}"=>"\u66F8", "\u{2F8CD}"=>"\u6649", "\u{2F8CE}"=>"\u3B19", "\u{2F8CF}"=>"\u6691", "\u{2F8D0}"=>"\u3B08", "\u{2F8D1}"=>"\u3AE4", + "\u{2F8D2}"=>"\u5192", "\u{2F8D3}"=>"\u5195", "\u{2F8D4}"=>"\u6700", "\u{2F8D5}"=>"\u669C", "\u{2F8D6}"=>"\u80AD", "\u{2F8D7}"=>"\u43D9", "\u{2F8D8}"=>"\u6717", "\u{2F8D9}"=>"\u671B", + "\u{2F8DA}"=>"\u6721", "\u{2F8DB}"=>"\u675E", "\u{2F8DC}"=>"\u6753", "\u{2F8DD}"=>"\u{233C3}", "\u{2F8DE}"=>"\u3B49", "\u{2F8DF}"=>"\u67FA", "\u{2F8E0}"=>"\u6785", "\u{2F8E1}"=>"\u6852", + "\u{2F8E2}"=>"\u6885", "\u{2F8E3}"=>"\u{2346D}", "\u{2F8E4}"=>"\u688E", "\u{2F8E5}"=>"\u681F", "\u{2F8E6}"=>"\u6914", "\u{2F8E7}"=>"\u3B9D", "\u{2F8E8}"=>"\u6942", "\u{2F8E9}"=>"\u69A3", + "\u{2F8EA}"=>"\u69EA", "\u{2F8EB}"=>"\u6AA8", "\u{2F8EC}"=>"\u{236A3}", "\u{2F8ED}"=>"\u6ADB", "\u{2F8EE}"=>"\u3C18", "\u{2F8EF}"=>"\u6B21", "\u{2F8F0}"=>"\u{238A7}", "\u{2F8F1}"=>"\u6B54", + "\u{2F8F2}"=>"\u3C4E", "\u{2F8F3}"=>"\u6B72", "\u{2F8F4}"=>"\u6B9F", "\u{2F8F5}"=>"\u6BBA", "\u{2F8F6}"=>"\u6BBB", "\u{2F8F7}"=>"\u{23A8D}", "\u{2F8F8}"=>"\u{21D0B}", "\u{2F8F9}"=>"\u{23AFA}", + "\u{2F8FA}"=>"\u6C4E", "\u{2F8FB}"=>"\u{23CBC}", "\u{2F8FC}"=>"\u6CBF", "\u{2F8FD}"=>"\u6CCD", "\u{2F8FE}"=>"\u6C67", "\u{2F8FF}"=>"\u6D16", "\u{2F900}"=>"\u6D3E", "\u{2F901}"=>"\u6D77", + "\u{2F902}"=>"\u6D41", "\u{2F903}"=>"\u6D69", "\u{2F904}"=>"\u6D78", "\u{2F905}"=>"\u6D85", "\u{2F906}"=>"\u{23D1E}", "\u{2F907}"=>"\u6D34", "\u{2F908}"=>"\u6E2F", "\u{2F909}"=>"\u6E6E", + "\u{2F90A}"=>"\u3D33", "\u{2F90B}"=>"\u6ECB", "\u{2F90C}"=>"\u6EC7", "\u{2F90D}"=>"\u{23ED1}", "\u{2F90E}"=>"\u6DF9", "\u{2F90F}"=>"\u6F6E", "\u{2F910}"=>"\u{23F5E}", "\u{2F911}"=>"\u{23F8E}", + "\u{2F912}"=>"\u6FC6", "\u{2F913}"=>"\u7039", "\u{2F914}"=>"\u701E", "\u{2F915}"=>"\u701B", "\u{2F916}"=>"\u3D96", "\u{2F917}"=>"\u704A", "\u{2F918}"=>"\u707D", "\u{2F919}"=>"\u7077", + "\u{2F91A}"=>"\u70AD", "\u{2F91B}"=>"\u{20525}", "\u{2F91C}"=>"\u7145", "\u{2F91D}"=>"\u{24263}", "\u{2F91E}"=>"\u719C", "\u{2F91F}"=>"\u{243AB}", "\u{2F920}"=>"\u7228", "\u{2F921}"=>"\u7235", + "\u{2F922}"=>"\u7250", "\u{2F923}"=>"\u{24608}", "\u{2F924}"=>"\u7280", "\u{2F925}"=>"\u7295", "\u{2F926}"=>"\u{24735}", "\u{2F927}"=>"\u{24814}", "\u{2F928}"=>"\u737A", "\u{2F929}"=>"\u738B", + "\u{2F92A}"=>"\u3EAC", "\u{2F92B}"=>"\u73A5", "\u{2F92C}"=>"\u3EB8", "\u{2F92D}"=>"\u3EB8", "\u{2F92E}"=>"\u7447", "\u{2F92F}"=>"\u745C", "\u{2F930}"=>"\u7471", "\u{2F931}"=>"\u7485", + "\u{2F932}"=>"\u74CA", "\u{2F933}"=>"\u3F1B", "\u{2F934}"=>"\u7524", "\u{2F935}"=>"\u{24C36}", "\u{2F936}"=>"\u753E", "\u{2F937}"=>"\u{24C92}", "\u{2F938}"=>"\u7570", "\u{2F939}"=>"\u{2219F}", + "\u{2F93A}"=>"\u7610", "\u{2F93B}"=>"\u{24FA1}", "\u{2F93C}"=>"\u{24FB8}", "\u{2F93D}"=>"\u{25044}", "\u{2F93E}"=>"\u3FFC", "\u{2F93F}"=>"\u4008", "\u{2F940}"=>"\u76F4", "\u{2F941}"=>"\u{250F3}", + "\u{2F942}"=>"\u{250F2}", "\u{2F943}"=>"\u{25119}", "\u{2F944}"=>"\u{25133}", "\u{2F945}"=>"\u771E", "\u{2F946}"=>"\u771F", "\u{2F947}"=>"\u771F", "\u{2F948}"=>"\u774A", "\u{2F949}"=>"\u4039", + "\u{2F94A}"=>"\u778B", "\u{2F94B}"=>"\u4046", "\u{2F94C}"=>"\u4096", "\u{2F94D}"=>"\u{2541D}", "\u{2F94E}"=>"\u784E", "\u{2F94F}"=>"\u788C", "\u{2F950}"=>"\u78CC", "\u{2F951}"=>"\u40E3", + "\u{2F952}"=>"\u{25626}", "\u{2F953}"=>"\u7956", "\u{2F954}"=>"\u{2569A}", "\u{2F955}"=>"\u{256C5}", "\u{2F956}"=>"\u798F", "\u{2F957}"=>"\u79EB", "\u{2F958}"=>"\u412F", "\u{2F959}"=>"\u7A40", + "\u{2F95A}"=>"\u7A4A", "\u{2F95B}"=>"\u7A4F", "\u{2F95C}"=>"\u{2597C}", "\u{2F95D}"=>"\u{25AA7}", "\u{2F95E}"=>"\u{25AA7}", "\u{2F95F}"=>"\u7AEE", "\u{2F960}"=>"\u4202", "\u{2F961}"=>"\u{25BAB}", + "\u{2F962}"=>"\u7BC6", "\u{2F963}"=>"\u7BC9", "\u{2F964}"=>"\u4227", "\u{2F965}"=>"\u{25C80}", "\u{2F966}"=>"\u7CD2", "\u{2F967}"=>"\u42A0", "\u{2F968}"=>"\u7CE8", "\u{2F969}"=>"\u7CE3", + "\u{2F96A}"=>"\u7D00", "\u{2F96B}"=>"\u{25F86}", "\u{2F96C}"=>"\u7D63", "\u{2F96D}"=>"\u4301", "\u{2F96E}"=>"\u7DC7", "\u{2F96F}"=>"\u7E02", "\u{2F970}"=>"\u7E45", "\u{2F971}"=>"\u4334", + "\u{2F972}"=>"\u{26228}", "\u{2F973}"=>"\u{26247}", "\u{2F974}"=>"\u4359", "\u{2F975}"=>"\u{262D9}", "\u{2F976}"=>"\u7F7A", "\u{2F977}"=>"\u{2633E}", "\u{2F978}"=>"\u7F95", "\u{2F979}"=>"\u7FFA", + "\u{2F97A}"=>"\u8005", "\u{2F97B}"=>"\u{264DA}", "\u{2F97C}"=>"\u{26523}", "\u{2F97D}"=>"\u8060", "\u{2F97E}"=>"\u{265A8}", "\u{2F97F}"=>"\u8070", "\u{2F980}"=>"\u{2335F}", "\u{2F981}"=>"\u43D5", + "\u{2F982}"=>"\u80B2", "\u{2F983}"=>"\u8103", "\u{2F984}"=>"\u440B", "\u{2F985}"=>"\u813E", "\u{2F986}"=>"\u5AB5", "\u{2F987}"=>"\u{267A7}", "\u{2F988}"=>"\u{267B5}", "\u{2F989}"=>"\u{23393}", + "\u{2F98A}"=>"\u{2339C}", "\u{2F98B}"=>"\u8201", "\u{2F98C}"=>"\u8204", "\u{2F98D}"=>"\u8F9E", "\u{2F98E}"=>"\u446B", "\u{2F98F}"=>"\u8291", "\u{2F990}"=>"\u828B", "\u{2F991}"=>"\u829D", + "\u{2F992}"=>"\u52B3", "\u{2F993}"=>"\u82B1", "\u{2F994}"=>"\u82B3", "\u{2F995}"=>"\u82BD", "\u{2F996}"=>"\u82E6", "\u{2F997}"=>"\u{26B3C}", "\u{2F998}"=>"\u82E5", "\u{2F999}"=>"\u831D", + "\u{2F99A}"=>"\u8363", "\u{2F99B}"=>"\u83AD", "\u{2F99C}"=>"\u8323", "\u{2F99D}"=>"\u83BD", "\u{2F99E}"=>"\u83E7", "\u{2F99F}"=>"\u8457", "\u{2F9A0}"=>"\u8353", "\u{2F9A1}"=>"\u83CA", + "\u{2F9A2}"=>"\u83CC", "\u{2F9A3}"=>"\u83DC", "\u{2F9A4}"=>"\u{26C36}", "\u{2F9A5}"=>"\u{26D6B}", "\u{2F9A6}"=>"\u{26CD5}", "\u{2F9A7}"=>"\u452B", "\u{2F9A8}"=>"\u84F1", "\u{2F9A9}"=>"\u84F3", + "\u{2F9AA}"=>"\u8516", "\u{2F9AB}"=>"\u{273CA}", "\u{2F9AC}"=>"\u8564", "\u{2F9AD}"=>"\u{26F2C}", "\u{2F9AE}"=>"\u455D", "\u{2F9AF}"=>"\u4561", "\u{2F9B0}"=>"\u{26FB1}", "\u{2F9B1}"=>"\u{270D2}", + "\u{2F9B2}"=>"\u456B", "\u{2F9B3}"=>"\u8650", "\u{2F9B4}"=>"\u865C", "\u{2F9B5}"=>"\u8667", "\u{2F9B6}"=>"\u8669", "\u{2F9B7}"=>"\u86A9", "\u{2F9B8}"=>"\u8688", "\u{2F9B9}"=>"\u870E", + "\u{2F9BA}"=>"\u86E2", "\u{2F9BB}"=>"\u8779", "\u{2F9BC}"=>"\u8728", "\u{2F9BD}"=>"\u876B", "\u{2F9BE}"=>"\u8786", "\u{2F9BF}"=>"\u45D7", "\u{2F9C0}"=>"\u87E1", "\u{2F9C1}"=>"\u8801", + "\u{2F9C2}"=>"\u45F9", "\u{2F9C3}"=>"\u8860", "\u{2F9C4}"=>"\u8863", "\u{2F9C5}"=>"\u{27667}", "\u{2F9C6}"=>"\u88D7", "\u{2F9C7}"=>"\u88DE", "\u{2F9C8}"=>"\u4635", "\u{2F9C9}"=>"\u88FA", + "\u{2F9CA}"=>"\u34BB", "\u{2F9CB}"=>"\u{278AE}", "\u{2F9CC}"=>"\u{27966}", "\u{2F9CD}"=>"\u46BE", "\u{2F9CE}"=>"\u46C7", "\u{2F9CF}"=>"\u8AA0", "\u{2F9D0}"=>"\u8AED", "\u{2F9D1}"=>"\u8B8A", + "\u{2F9D2}"=>"\u8C55", "\u{2F9D3}"=>"\u{27CA8}", "\u{2F9D4}"=>"\u8CAB", "\u{2F9D5}"=>"\u8CC1", "\u{2F9D6}"=>"\u8D1B", "\u{2F9D7}"=>"\u8D77", "\u{2F9D8}"=>"\u{27F2F}", "\u{2F9D9}"=>"\u{20804}", + "\u{2F9DA}"=>"\u8DCB", "\u{2F9DB}"=>"\u8DBC", "\u{2F9DC}"=>"\u8DF0", "\u{2F9DD}"=>"\u{208DE}", "\u{2F9DE}"=>"\u8ED4", "\u{2F9DF}"=>"\u8F38", "\u{2F9E0}"=>"\u{285D2}", "\u{2F9E1}"=>"\u{285ED}", + "\u{2F9E2}"=>"\u9094", "\u{2F9E3}"=>"\u90F1", "\u{2F9E4}"=>"\u9111", "\u{2F9E5}"=>"\u{2872E}", "\u{2F9E6}"=>"\u911B", "\u{2F9E7}"=>"\u9238", "\u{2F9E8}"=>"\u92D7", "\u{2F9E9}"=>"\u92D8", + "\u{2F9EA}"=>"\u927C", "\u{2F9EB}"=>"\u93F9", "\u{2F9EC}"=>"\u9415", "\u{2F9ED}"=>"\u{28BFA}", "\u{2F9EE}"=>"\u958B", "\u{2F9EF}"=>"\u4995", "\u{2F9F0}"=>"\u95B7", "\u{2F9F1}"=>"\u{28D77}", + "\u{2F9F2}"=>"\u49E6", "\u{2F9F3}"=>"\u96C3", "\u{2F9F4}"=>"\u5DB2", "\u{2F9F5}"=>"\u9723", "\u{2F9F6}"=>"\u{29145}", "\u{2F9F7}"=>"\u{2921A}", "\u{2F9F8}"=>"\u4A6E", "\u{2F9F9}"=>"\u4A76", + "\u{2F9FA}"=>"\u97E0", "\u{2F9FB}"=>"\u{2940A}", "\u{2F9FC}"=>"\u4AB2", "\u{2F9FD}"=>"\u{29496}", "\u{2F9FE}"=>"\u980B", "\u{2F9FF}"=>"\u980B", "\u{2FA00}"=>"\u9829", "\u{2FA01}"=>"\u{295B6}", + "\u{2FA02}"=>"\u98E2", "\u{2FA03}"=>"\u4B33", "\u{2FA04}"=>"\u9929", "\u{2FA05}"=>"\u99A7", "\u{2FA06}"=>"\u99C2", "\u{2FA07}"=>"\u99FE", "\u{2FA08}"=>"\u4BCE", "\u{2FA09}"=>"\u{29B30}", + "\u{2FA0A}"=>"\u9B12", "\u{2FA0B}"=>"\u9C40", "\u{2FA0C}"=>"\u9CFD", "\u{2FA0D}"=>"\u4CCE", "\u{2FA0E}"=>"\u4CED", "\u{2FA0F}"=>"\u9D67", "\u{2FA10}"=>"\u{2A0CE}", "\u{2FA11}"=>"\u4CF8", + "\u{2FA12}"=>"\u{2A105}", "\u{2FA13}"=>"\u{2A20E}", "\u{2FA14}"=>"\u{2A291}", "\u{2FA15}"=>"\u9EBB", "\u{2FA16}"=>"\u4D56", "\u{2FA17}"=>"\u9EF9", "\u{2FA18}"=>"\u9EFE", "\u{2FA19}"=>"\u9F05", + "\u{2FA1A}"=>"\u9F0F", "\u{2FA1B}"=>"\u9F16", "\u{2FA1C}"=>"\u9F3B", "\u{2FA1D}"=>"\u{2A600}", }.freeze KOMPATIBLE_TABLE = { - "\u00A0"=>" ".freeze, "\u00A8"=>" \u0308".freeze, "\u00AA"=>"a".freeze, "\u00AF"=>" \u0304".freeze, "\u00B2"=>"2".freeze, "\u00B3"=>"3".freeze, "\u00B4"=>" \u0301".freeze, "\u00B5"=>"\u03BC".freeze, - "\u00B8"=>" \u0327".freeze, "\u00B9"=>"1".freeze, "\u00BA"=>"o".freeze, "\u00BC"=>"1\u20444".freeze, "\u00BD"=>"1\u20442".freeze, "\u00BE"=>"3\u20444".freeze, "\u0132"=>"IJ".freeze, "\u0133"=>"ij".freeze, - "\u013F"=>"L\u00B7".freeze, "\u0140"=>"l\u00B7".freeze, "\u0149"=>"\u02BCn".freeze, "\u017F"=>"s".freeze, "\u01C4"=>"D\u017D".freeze, "\u01C5"=>"D\u017E".freeze, "\u01C6"=>"d\u017E".freeze, "\u01C7"=>"LJ".freeze, - "\u01C8"=>"Lj".freeze, "\u01C9"=>"lj".freeze, "\u01CA"=>"NJ".freeze, "\u01CB"=>"Nj".freeze, "\u01CC"=>"nj".freeze, "\u01F1"=>"DZ".freeze, "\u01F2"=>"Dz".freeze, "\u01F3"=>"dz".freeze, - "\u02B0"=>"h".freeze, "\u02B1"=>"\u0266".freeze, "\u02B2"=>"j".freeze, "\u02B3"=>"r".freeze, "\u02B4"=>"\u0279".freeze, "\u02B5"=>"\u027B".freeze, "\u02B6"=>"\u0281".freeze, "\u02B7"=>"w".freeze, - "\u02B8"=>"y".freeze, "\u02D8"=>" \u0306".freeze, "\u02D9"=>" \u0307".freeze, "\u02DA"=>" \u030A".freeze, "\u02DB"=>" \u0328".freeze, "\u02DC"=>" \u0303".freeze, "\u02DD"=>" \u030B".freeze, "\u02E0"=>"\u0263".freeze, - "\u02E1"=>"l".freeze, "\u02E2"=>"s".freeze, "\u02E3"=>"x".freeze, "\u02E4"=>"\u0295".freeze, "\u037A"=>" \u0345".freeze, "\u0384"=>" \u0301".freeze, "\u03D0"=>"\u03B2".freeze, "\u03D1"=>"\u03B8".freeze, - "\u03D2"=>"\u03A5".freeze, "\u03D5"=>"\u03C6".freeze, "\u03D6"=>"\u03C0".freeze, "\u03F0"=>"\u03BA".freeze, "\u03F1"=>"\u03C1".freeze, "\u03F2"=>"\u03C2".freeze, "\u03F4"=>"\u0398".freeze, "\u03F5"=>"\u03B5".freeze, - "\u03F9"=>"\u03A3".freeze, "\u0587"=>"\u0565\u0582".freeze, "\u0675"=>"\u0627\u0674".freeze, "\u0676"=>"\u0648\u0674".freeze, "\u0677"=>"\u06C7\u0674".freeze, "\u0678"=>"\u064A\u0674".freeze, "\u0E33"=>"\u0E4D\u0E32".freeze, "\u0EB3"=>"\u0ECD\u0EB2".freeze, - "\u0EDC"=>"\u0EAB\u0E99".freeze, "\u0EDD"=>"\u0EAB\u0EA1".freeze, "\u0F0C"=>"\u0F0B".freeze, "\u0F77"=>"\u0FB2\u0F81".freeze, "\u0F79"=>"\u0FB3\u0F81".freeze, "\u10FC"=>"\u10DC".freeze, "\u1D2C"=>"A".freeze, "\u1D2D"=>"\u00C6".freeze, - "\u1D2E"=>"B".freeze, "\u1D30"=>"D".freeze, "\u1D31"=>"E".freeze, "\u1D32"=>"\u018E".freeze, "\u1D33"=>"G".freeze, "\u1D34"=>"H".freeze, "\u1D35"=>"I".freeze, "\u1D36"=>"J".freeze, - "\u1D37"=>"K".freeze, "\u1D38"=>"L".freeze, "\u1D39"=>"M".freeze, "\u1D3A"=>"N".freeze, "\u1D3C"=>"O".freeze, "\u1D3D"=>"\u0222".freeze, "\u1D3E"=>"P".freeze, "\u1D3F"=>"R".freeze, - "\u1D40"=>"T".freeze, "\u1D41"=>"U".freeze, "\u1D42"=>"W".freeze, "\u1D43"=>"a".freeze, "\u1D44"=>"\u0250".freeze, "\u1D45"=>"\u0251".freeze, "\u1D46"=>"\u1D02".freeze, "\u1D47"=>"b".freeze, - "\u1D48"=>"d".freeze, "\u1D49"=>"e".freeze, "\u1D4A"=>"\u0259".freeze, "\u1D4B"=>"\u025B".freeze, "\u1D4C"=>"\u025C".freeze, "\u1D4D"=>"g".freeze, "\u1D4F"=>"k".freeze, "\u1D50"=>"m".freeze, - "\u1D51"=>"\u014B".freeze, "\u1D52"=>"o".freeze, "\u1D53"=>"\u0254".freeze, "\u1D54"=>"\u1D16".freeze, "\u1D55"=>"\u1D17".freeze, "\u1D56"=>"p".freeze, "\u1D57"=>"t".freeze, "\u1D58"=>"u".freeze, - "\u1D59"=>"\u1D1D".freeze, "\u1D5A"=>"\u026F".freeze, "\u1D5B"=>"v".freeze, "\u1D5C"=>"\u1D25".freeze, "\u1D5D"=>"\u03B2".freeze, "\u1D5E"=>"\u03B3".freeze, "\u1D5F"=>"\u03B4".freeze, "\u1D60"=>"\u03C6".freeze, - "\u1D61"=>"\u03C7".freeze, "\u1D62"=>"i".freeze, "\u1D63"=>"r".freeze, "\u1D64"=>"u".freeze, "\u1D65"=>"v".freeze, "\u1D66"=>"\u03B2".freeze, "\u1D67"=>"\u03B3".freeze, "\u1D68"=>"\u03C1".freeze, - "\u1D69"=>"\u03C6".freeze, "\u1D6A"=>"\u03C7".freeze, "\u1D78"=>"\u043D".freeze, "\u1D9B"=>"\u0252".freeze, "\u1D9C"=>"c".freeze, "\u1D9D"=>"\u0255".freeze, "\u1D9E"=>"\u00F0".freeze, "\u1D9F"=>"\u025C".freeze, - "\u1DA0"=>"f".freeze, "\u1DA1"=>"\u025F".freeze, "\u1DA2"=>"\u0261".freeze, "\u1DA3"=>"\u0265".freeze, "\u1DA4"=>"\u0268".freeze, "\u1DA5"=>"\u0269".freeze, "\u1DA6"=>"\u026A".freeze, "\u1DA7"=>"\u1D7B".freeze, - "\u1DA8"=>"\u029D".freeze, "\u1DA9"=>"\u026D".freeze, "\u1DAA"=>"\u1D85".freeze, "\u1DAB"=>"\u029F".freeze, "\u1DAC"=>"\u0271".freeze, "\u1DAD"=>"\u0270".freeze, "\u1DAE"=>"\u0272".freeze, "\u1DAF"=>"\u0273".freeze, - "\u1DB0"=>"\u0274".freeze, "\u1DB1"=>"\u0275".freeze, "\u1DB2"=>"\u0278".freeze, "\u1DB3"=>"\u0282".freeze, "\u1DB4"=>"\u0283".freeze, "\u1DB5"=>"\u01AB".freeze, "\u1DB6"=>"\u0289".freeze, "\u1DB7"=>"\u028A".freeze, - "\u1DB8"=>"\u1D1C".freeze, "\u1DB9"=>"\u028B".freeze, "\u1DBA"=>"\u028C".freeze, "\u1DBB"=>"z".freeze, "\u1DBC"=>"\u0290".freeze, "\u1DBD"=>"\u0291".freeze, "\u1DBE"=>"\u0292".freeze, "\u1DBF"=>"\u03B8".freeze, - "\u1E9A"=>"a\u02BE".freeze, "\u1FBD"=>" \u0313".freeze, "\u1FBF"=>" \u0313".freeze, "\u1FC0"=>" \u0342".freeze, "\u1FFE"=>" \u0314".freeze, "\u2002"=>" ".freeze, "\u2003"=>" ".freeze, "\u2004"=>" ".freeze, - "\u2005"=>" ".freeze, "\u2006"=>" ".freeze, "\u2007"=>" ".freeze, "\u2008"=>" ".freeze, "\u2009"=>" ".freeze, "\u200A"=>" ".freeze, "\u2011"=>"\u2010".freeze, "\u2017"=>" \u0333".freeze, - "\u2024"=>".".freeze, "\u2025"=>"..".freeze, "\u2026"=>"...".freeze, "\u202F"=>" ".freeze, "\u2033"=>"\u2032\u2032".freeze, "\u2034"=>"\u2032\u2032\u2032".freeze, "\u2036"=>"\u2035\u2035".freeze, "\u2037"=>"\u2035\u2035\u2035".freeze, - "\u203C"=>"!!".freeze, "\u203E"=>" \u0305".freeze, "\u2047"=>"??".freeze, "\u2048"=>"?!".freeze, "\u2049"=>"!?".freeze, "\u2057"=>"\u2032\u2032\u2032\u2032".freeze, "\u205F"=>" ".freeze, "\u2070"=>"0".freeze, - "\u2071"=>"i".freeze, "\u2074"=>"4".freeze, "\u2075"=>"5".freeze, "\u2076"=>"6".freeze, "\u2077"=>"7".freeze, "\u2078"=>"8".freeze, "\u2079"=>"9".freeze, "\u207A"=>"+".freeze, - "\u207B"=>"\u2212".freeze, "\u207C"=>"=".freeze, "\u207D"=>"(".freeze, "\u207E"=>")".freeze, "\u207F"=>"n".freeze, "\u2080"=>"0".freeze, "\u2081"=>"1".freeze, "\u2082"=>"2".freeze, - "\u2083"=>"3".freeze, "\u2084"=>"4".freeze, "\u2085"=>"5".freeze, "\u2086"=>"6".freeze, "\u2087"=>"7".freeze, "\u2088"=>"8".freeze, "\u2089"=>"9".freeze, "\u208A"=>"+".freeze, - "\u208B"=>"\u2212".freeze, "\u208C"=>"=".freeze, "\u208D"=>"(".freeze, "\u208E"=>")".freeze, "\u2090"=>"a".freeze, "\u2091"=>"e".freeze, "\u2092"=>"o".freeze, "\u2093"=>"x".freeze, - "\u2094"=>"\u0259".freeze, "\u2095"=>"h".freeze, "\u2096"=>"k".freeze, "\u2097"=>"l".freeze, "\u2098"=>"m".freeze, "\u2099"=>"n".freeze, "\u209A"=>"p".freeze, "\u209B"=>"s".freeze, - "\u209C"=>"t".freeze, "\u20A8"=>"Rs".freeze, "\u2100"=>"a/c".freeze, "\u2101"=>"a/s".freeze, "\u2102"=>"C".freeze, "\u2103"=>"\u00B0C".freeze, "\u2105"=>"c/o".freeze, "\u2106"=>"c/u".freeze, - "\u2107"=>"\u0190".freeze, "\u2109"=>"\u00B0F".freeze, "\u210A"=>"g".freeze, "\u210B"=>"H".freeze, "\u210C"=>"H".freeze, "\u210D"=>"H".freeze, "\u210E"=>"h".freeze, "\u210F"=>"\u0127".freeze, - "\u2110"=>"I".freeze, "\u2111"=>"I".freeze, "\u2112"=>"L".freeze, "\u2113"=>"l".freeze, "\u2115"=>"N".freeze, "\u2116"=>"No".freeze, "\u2119"=>"P".freeze, "\u211A"=>"Q".freeze, - "\u211B"=>"R".freeze, "\u211C"=>"R".freeze, "\u211D"=>"R".freeze, "\u2120"=>"SM".freeze, "\u2121"=>"TEL".freeze, "\u2122"=>"TM".freeze, "\u2124"=>"Z".freeze, "\u2128"=>"Z".freeze, - "\u212C"=>"B".freeze, "\u212D"=>"C".freeze, "\u212F"=>"e".freeze, "\u2130"=>"E".freeze, "\u2131"=>"F".freeze, "\u2133"=>"M".freeze, "\u2134"=>"o".freeze, "\u2135"=>"\u05D0".freeze, - "\u2136"=>"\u05D1".freeze, "\u2137"=>"\u05D2".freeze, "\u2138"=>"\u05D3".freeze, "\u2139"=>"i".freeze, "\u213B"=>"FAX".freeze, "\u213C"=>"\u03C0".freeze, "\u213D"=>"\u03B3".freeze, "\u213E"=>"\u0393".freeze, - "\u213F"=>"\u03A0".freeze, "\u2140"=>"\u2211".freeze, "\u2145"=>"D".freeze, "\u2146"=>"d".freeze, "\u2147"=>"e".freeze, "\u2148"=>"i".freeze, "\u2149"=>"j".freeze, "\u2150"=>"1\u20447".freeze, - "\u2151"=>"1\u20449".freeze, "\u2152"=>"1\u204410".freeze, "\u2153"=>"1\u20443".freeze, "\u2154"=>"2\u20443".freeze, "\u2155"=>"1\u20445".freeze, "\u2156"=>"2\u20445".freeze, "\u2157"=>"3\u20445".freeze, "\u2158"=>"4\u20445".freeze, - "\u2159"=>"1\u20446".freeze, "\u215A"=>"5\u20446".freeze, "\u215B"=>"1\u20448".freeze, "\u215C"=>"3\u20448".freeze, "\u215D"=>"5\u20448".freeze, "\u215E"=>"7\u20448".freeze, "\u215F"=>"1\u2044".freeze, "\u2160"=>"I".freeze, - "\u2161"=>"II".freeze, "\u2162"=>"III".freeze, "\u2163"=>"IV".freeze, "\u2164"=>"V".freeze, "\u2165"=>"VI".freeze, "\u2166"=>"VII".freeze, "\u2167"=>"VIII".freeze, "\u2168"=>"IX".freeze, - "\u2169"=>"X".freeze, "\u216A"=>"XI".freeze, "\u216B"=>"XII".freeze, "\u216C"=>"L".freeze, "\u216D"=>"C".freeze, "\u216E"=>"D".freeze, "\u216F"=>"M".freeze, "\u2170"=>"i".freeze, - "\u2171"=>"ii".freeze, "\u2172"=>"iii".freeze, "\u2173"=>"iv".freeze, "\u2174"=>"v".freeze, "\u2175"=>"vi".freeze, "\u2176"=>"vii".freeze, "\u2177"=>"viii".freeze, "\u2178"=>"ix".freeze, - "\u2179"=>"x".freeze, "\u217A"=>"xi".freeze, "\u217B"=>"xii".freeze, "\u217C"=>"l".freeze, "\u217D"=>"c".freeze, "\u217E"=>"d".freeze, "\u217F"=>"m".freeze, "\u2189"=>"0\u20443".freeze, - "\u222C"=>"\u222B\u222B".freeze, "\u222D"=>"\u222B\u222B\u222B".freeze, "\u222F"=>"\u222E\u222E".freeze, "\u2230"=>"\u222E\u222E\u222E".freeze, "\u2460"=>"1".freeze, "\u2461"=>"2".freeze, "\u2462"=>"3".freeze, "\u2463"=>"4".freeze, - "\u2464"=>"5".freeze, "\u2465"=>"6".freeze, "\u2466"=>"7".freeze, "\u2467"=>"8".freeze, "\u2468"=>"9".freeze, "\u2469"=>"10".freeze, "\u246A"=>"11".freeze, "\u246B"=>"12".freeze, - "\u246C"=>"13".freeze, "\u246D"=>"14".freeze, "\u246E"=>"15".freeze, "\u246F"=>"16".freeze, "\u2470"=>"17".freeze, "\u2471"=>"18".freeze, "\u2472"=>"19".freeze, "\u2473"=>"20".freeze, - "\u2474"=>"(1)".freeze, "\u2475"=>"(2)".freeze, "\u2476"=>"(3)".freeze, "\u2477"=>"(4)".freeze, "\u2478"=>"(5)".freeze, "\u2479"=>"(6)".freeze, "\u247A"=>"(7)".freeze, "\u247B"=>"(8)".freeze, - "\u247C"=>"(9)".freeze, "\u247D"=>"(10)".freeze, "\u247E"=>"(11)".freeze, "\u247F"=>"(12)".freeze, "\u2480"=>"(13)".freeze, "\u2481"=>"(14)".freeze, "\u2482"=>"(15)".freeze, "\u2483"=>"(16)".freeze, - "\u2484"=>"(17)".freeze, "\u2485"=>"(18)".freeze, "\u2486"=>"(19)".freeze, "\u2487"=>"(20)".freeze, "\u2488"=>"1.".freeze, "\u2489"=>"2.".freeze, "\u248A"=>"3.".freeze, "\u248B"=>"4.".freeze, - "\u248C"=>"5.".freeze, "\u248D"=>"6.".freeze, "\u248E"=>"7.".freeze, "\u248F"=>"8.".freeze, "\u2490"=>"9.".freeze, "\u2491"=>"10.".freeze, "\u2492"=>"11.".freeze, "\u2493"=>"12.".freeze, - "\u2494"=>"13.".freeze, "\u2495"=>"14.".freeze, "\u2496"=>"15.".freeze, "\u2497"=>"16.".freeze, "\u2498"=>"17.".freeze, "\u2499"=>"18.".freeze, "\u249A"=>"19.".freeze, "\u249B"=>"20.".freeze, - "\u249C"=>"(a)".freeze, "\u249D"=>"(b)".freeze, "\u249E"=>"(c)".freeze, "\u249F"=>"(d)".freeze, "\u24A0"=>"(e)".freeze, "\u24A1"=>"(f)".freeze, "\u24A2"=>"(g)".freeze, "\u24A3"=>"(h)".freeze, - "\u24A4"=>"(i)".freeze, "\u24A5"=>"(j)".freeze, "\u24A6"=>"(k)".freeze, "\u24A7"=>"(l)".freeze, "\u24A8"=>"(m)".freeze, "\u24A9"=>"(n)".freeze, "\u24AA"=>"(o)".freeze, "\u24AB"=>"(p)".freeze, - "\u24AC"=>"(q)".freeze, "\u24AD"=>"(r)".freeze, "\u24AE"=>"(s)".freeze, "\u24AF"=>"(t)".freeze, "\u24B0"=>"(u)".freeze, "\u24B1"=>"(v)".freeze, "\u24B2"=>"(w)".freeze, "\u24B3"=>"(x)".freeze, - "\u24B4"=>"(y)".freeze, "\u24B5"=>"(z)".freeze, "\u24B6"=>"A".freeze, "\u24B7"=>"B".freeze, "\u24B8"=>"C".freeze, "\u24B9"=>"D".freeze, "\u24BA"=>"E".freeze, "\u24BB"=>"F".freeze, - "\u24BC"=>"G".freeze, "\u24BD"=>"H".freeze, "\u24BE"=>"I".freeze, "\u24BF"=>"J".freeze, "\u24C0"=>"K".freeze, "\u24C1"=>"L".freeze, "\u24C2"=>"M".freeze, "\u24C3"=>"N".freeze, - "\u24C4"=>"O".freeze, "\u24C5"=>"P".freeze, "\u24C6"=>"Q".freeze, "\u24C7"=>"R".freeze, "\u24C8"=>"S".freeze, "\u24C9"=>"T".freeze, "\u24CA"=>"U".freeze, "\u24CB"=>"V".freeze, - "\u24CC"=>"W".freeze, "\u24CD"=>"X".freeze, "\u24CE"=>"Y".freeze, "\u24CF"=>"Z".freeze, "\u24D0"=>"a".freeze, "\u24D1"=>"b".freeze, "\u24D2"=>"c".freeze, "\u24D3"=>"d".freeze, - "\u24D4"=>"e".freeze, "\u24D5"=>"f".freeze, "\u24D6"=>"g".freeze, "\u24D7"=>"h".freeze, "\u24D8"=>"i".freeze, "\u24D9"=>"j".freeze, "\u24DA"=>"k".freeze, "\u24DB"=>"l".freeze, - "\u24DC"=>"m".freeze, "\u24DD"=>"n".freeze, "\u24DE"=>"o".freeze, "\u24DF"=>"p".freeze, "\u24E0"=>"q".freeze, "\u24E1"=>"r".freeze, "\u24E2"=>"s".freeze, "\u24E3"=>"t".freeze, - "\u24E4"=>"u".freeze, "\u24E5"=>"v".freeze, "\u24E6"=>"w".freeze, "\u24E7"=>"x".freeze, "\u24E8"=>"y".freeze, "\u24E9"=>"z".freeze, "\u24EA"=>"0".freeze, "\u2A0C"=>"\u222B\u222B\u222B\u222B".freeze, - "\u2A74"=>"::=".freeze, "\u2A75"=>"==".freeze, "\u2A76"=>"===".freeze, "\u2C7C"=>"j".freeze, "\u2C7D"=>"V".freeze, "\u2D6F"=>"\u2D61".freeze, "\u2E9F"=>"\u6BCD".freeze, "\u2EF3"=>"\u9F9F".freeze, - "\u2F00"=>"\u4E00".freeze, "\u2F01"=>"\u4E28".freeze, "\u2F02"=>"\u4E36".freeze, "\u2F03"=>"\u4E3F".freeze, "\u2F04"=>"\u4E59".freeze, "\u2F05"=>"\u4E85".freeze, "\u2F06"=>"\u4E8C".freeze, "\u2F07"=>"\u4EA0".freeze, - "\u2F08"=>"\u4EBA".freeze, "\u2F09"=>"\u513F".freeze, "\u2F0A"=>"\u5165".freeze, "\u2F0B"=>"\u516B".freeze, "\u2F0C"=>"\u5182".freeze, "\u2F0D"=>"\u5196".freeze, "\u2F0E"=>"\u51AB".freeze, "\u2F0F"=>"\u51E0".freeze, - "\u2F10"=>"\u51F5".freeze, "\u2F11"=>"\u5200".freeze, "\u2F12"=>"\u529B".freeze, "\u2F13"=>"\u52F9".freeze, "\u2F14"=>"\u5315".freeze, "\u2F15"=>"\u531A".freeze, "\u2F16"=>"\u5338".freeze, "\u2F17"=>"\u5341".freeze, - "\u2F18"=>"\u535C".freeze, "\u2F19"=>"\u5369".freeze, "\u2F1A"=>"\u5382".freeze, "\u2F1B"=>"\u53B6".freeze, "\u2F1C"=>"\u53C8".freeze, "\u2F1D"=>"\u53E3".freeze, "\u2F1E"=>"\u56D7".freeze, "\u2F1F"=>"\u571F".freeze, - "\u2F20"=>"\u58EB".freeze, "\u2F21"=>"\u5902".freeze, "\u2F22"=>"\u590A".freeze, "\u2F23"=>"\u5915".freeze, "\u2F24"=>"\u5927".freeze, "\u2F25"=>"\u5973".freeze, "\u2F26"=>"\u5B50".freeze, "\u2F27"=>"\u5B80".freeze, - "\u2F28"=>"\u5BF8".freeze, "\u2F29"=>"\u5C0F".freeze, "\u2F2A"=>"\u5C22".freeze, "\u2F2B"=>"\u5C38".freeze, "\u2F2C"=>"\u5C6E".freeze, "\u2F2D"=>"\u5C71".freeze, "\u2F2E"=>"\u5DDB".freeze, "\u2F2F"=>"\u5DE5".freeze, - "\u2F30"=>"\u5DF1".freeze, "\u2F31"=>"\u5DFE".freeze, "\u2F32"=>"\u5E72".freeze, "\u2F33"=>"\u5E7A".freeze, "\u2F34"=>"\u5E7F".freeze, "\u2F35"=>"\u5EF4".freeze, "\u2F36"=>"\u5EFE".freeze, "\u2F37"=>"\u5F0B".freeze, - "\u2F38"=>"\u5F13".freeze, "\u2F39"=>"\u5F50".freeze, "\u2F3A"=>"\u5F61".freeze, "\u2F3B"=>"\u5F73".freeze, "\u2F3C"=>"\u5FC3".freeze, "\u2F3D"=>"\u6208".freeze, "\u2F3E"=>"\u6236".freeze, "\u2F3F"=>"\u624B".freeze, - "\u2F40"=>"\u652F".freeze, "\u2F41"=>"\u6534".freeze, "\u2F42"=>"\u6587".freeze, "\u2F43"=>"\u6597".freeze, "\u2F44"=>"\u65A4".freeze, "\u2F45"=>"\u65B9".freeze, "\u2F46"=>"\u65E0".freeze, "\u2F47"=>"\u65E5".freeze, - "\u2F48"=>"\u66F0".freeze, "\u2F49"=>"\u6708".freeze, "\u2F4A"=>"\u6728".freeze, "\u2F4B"=>"\u6B20".freeze, "\u2F4C"=>"\u6B62".freeze, "\u2F4D"=>"\u6B79".freeze, "\u2F4E"=>"\u6BB3".freeze, "\u2F4F"=>"\u6BCB".freeze, - "\u2F50"=>"\u6BD4".freeze, "\u2F51"=>"\u6BDB".freeze, "\u2F52"=>"\u6C0F".freeze, "\u2F53"=>"\u6C14".freeze, "\u2F54"=>"\u6C34".freeze, "\u2F55"=>"\u706B".freeze, "\u2F56"=>"\u722A".freeze, "\u2F57"=>"\u7236".freeze, - "\u2F58"=>"\u723B".freeze, "\u2F59"=>"\u723F".freeze, "\u2F5A"=>"\u7247".freeze, "\u2F5B"=>"\u7259".freeze, "\u2F5C"=>"\u725B".freeze, "\u2F5D"=>"\u72AC".freeze, "\u2F5E"=>"\u7384".freeze, "\u2F5F"=>"\u7389".freeze, - "\u2F60"=>"\u74DC".freeze, "\u2F61"=>"\u74E6".freeze, "\u2F62"=>"\u7518".freeze, "\u2F63"=>"\u751F".freeze, "\u2F64"=>"\u7528".freeze, "\u2F65"=>"\u7530".freeze, "\u2F66"=>"\u758B".freeze, "\u2F67"=>"\u7592".freeze, - "\u2F68"=>"\u7676".freeze, "\u2F69"=>"\u767D".freeze, "\u2F6A"=>"\u76AE".freeze, "\u2F6B"=>"\u76BF".freeze, "\u2F6C"=>"\u76EE".freeze, "\u2F6D"=>"\u77DB".freeze, "\u2F6E"=>"\u77E2".freeze, "\u2F6F"=>"\u77F3".freeze, - "\u2F70"=>"\u793A".freeze, "\u2F71"=>"\u79B8".freeze, "\u2F72"=>"\u79BE".freeze, "\u2F73"=>"\u7A74".freeze, "\u2F74"=>"\u7ACB".freeze, "\u2F75"=>"\u7AF9".freeze, "\u2F76"=>"\u7C73".freeze, "\u2F77"=>"\u7CF8".freeze, - "\u2F78"=>"\u7F36".freeze, "\u2F79"=>"\u7F51".freeze, "\u2F7A"=>"\u7F8A".freeze, "\u2F7B"=>"\u7FBD".freeze, "\u2F7C"=>"\u8001".freeze, "\u2F7D"=>"\u800C".freeze, "\u2F7E"=>"\u8012".freeze, "\u2F7F"=>"\u8033".freeze, - "\u2F80"=>"\u807F".freeze, "\u2F81"=>"\u8089".freeze, "\u2F82"=>"\u81E3".freeze, "\u2F83"=>"\u81EA".freeze, "\u2F84"=>"\u81F3".freeze, "\u2F85"=>"\u81FC".freeze, "\u2F86"=>"\u820C".freeze, "\u2F87"=>"\u821B".freeze, - "\u2F88"=>"\u821F".freeze, "\u2F89"=>"\u826E".freeze, "\u2F8A"=>"\u8272".freeze, "\u2F8B"=>"\u8278".freeze, "\u2F8C"=>"\u864D".freeze, "\u2F8D"=>"\u866B".freeze, "\u2F8E"=>"\u8840".freeze, "\u2F8F"=>"\u884C".freeze, - "\u2F90"=>"\u8863".freeze, "\u2F91"=>"\u897E".freeze, "\u2F92"=>"\u898B".freeze, "\u2F93"=>"\u89D2".freeze, "\u2F94"=>"\u8A00".freeze, "\u2F95"=>"\u8C37".freeze, "\u2F96"=>"\u8C46".freeze, "\u2F97"=>"\u8C55".freeze, - "\u2F98"=>"\u8C78".freeze, "\u2F99"=>"\u8C9D".freeze, "\u2F9A"=>"\u8D64".freeze, "\u2F9B"=>"\u8D70".freeze, "\u2F9C"=>"\u8DB3".freeze, "\u2F9D"=>"\u8EAB".freeze, "\u2F9E"=>"\u8ECA".freeze, "\u2F9F"=>"\u8F9B".freeze, - "\u2FA0"=>"\u8FB0".freeze, "\u2FA1"=>"\u8FB5".freeze, "\u2FA2"=>"\u9091".freeze, "\u2FA3"=>"\u9149".freeze, "\u2FA4"=>"\u91C6".freeze, "\u2FA5"=>"\u91CC".freeze, "\u2FA6"=>"\u91D1".freeze, "\u2FA7"=>"\u9577".freeze, - "\u2FA8"=>"\u9580".freeze, "\u2FA9"=>"\u961C".freeze, "\u2FAA"=>"\u96B6".freeze, "\u2FAB"=>"\u96B9".freeze, "\u2FAC"=>"\u96E8".freeze, "\u2FAD"=>"\u9751".freeze, "\u2FAE"=>"\u975E".freeze, "\u2FAF"=>"\u9762".freeze, - "\u2FB0"=>"\u9769".freeze, "\u2FB1"=>"\u97CB".freeze, "\u2FB2"=>"\u97ED".freeze, "\u2FB3"=>"\u97F3".freeze, "\u2FB4"=>"\u9801".freeze, "\u2FB5"=>"\u98A8".freeze, "\u2FB6"=>"\u98DB".freeze, "\u2FB7"=>"\u98DF".freeze, - "\u2FB8"=>"\u9996".freeze, "\u2FB9"=>"\u9999".freeze, "\u2FBA"=>"\u99AC".freeze, "\u2FBB"=>"\u9AA8".freeze, "\u2FBC"=>"\u9AD8".freeze, "\u2FBD"=>"\u9ADF".freeze, "\u2FBE"=>"\u9B25".freeze, "\u2FBF"=>"\u9B2F".freeze, - "\u2FC0"=>"\u9B32".freeze, "\u2FC1"=>"\u9B3C".freeze, "\u2FC2"=>"\u9B5A".freeze, "\u2FC3"=>"\u9CE5".freeze, "\u2FC4"=>"\u9E75".freeze, "\u2FC5"=>"\u9E7F".freeze, "\u2FC6"=>"\u9EA5".freeze, "\u2FC7"=>"\u9EBB".freeze, - "\u2FC8"=>"\u9EC3".freeze, "\u2FC9"=>"\u9ECD".freeze, "\u2FCA"=>"\u9ED1".freeze, "\u2FCB"=>"\u9EF9".freeze, "\u2FCC"=>"\u9EFD".freeze, "\u2FCD"=>"\u9F0E".freeze, "\u2FCE"=>"\u9F13".freeze, "\u2FCF"=>"\u9F20".freeze, - "\u2FD0"=>"\u9F3B".freeze, "\u2FD1"=>"\u9F4A".freeze, "\u2FD2"=>"\u9F52".freeze, "\u2FD3"=>"\u9F8D".freeze, "\u2FD4"=>"\u9F9C".freeze, "\u2FD5"=>"\u9FA0".freeze, "\u3000"=>" ".freeze, "\u3036"=>"\u3012".freeze, - "\u3038"=>"\u5341".freeze, "\u3039"=>"\u5344".freeze, "\u303A"=>"\u5345".freeze, "\u309B"=>" \u3099".freeze, "\u309C"=>" \u309A".freeze, "\u309F"=>"\u3088\u308A".freeze, "\u30FF"=>"\u30B3\u30C8".freeze, "\u3131"=>"\u1100".freeze, - "\u3132"=>"\u1101".freeze, "\u3133"=>"\u11AA".freeze, "\u3134"=>"\u1102".freeze, "\u3135"=>"\u11AC".freeze, "\u3136"=>"\u11AD".freeze, "\u3137"=>"\u1103".freeze, "\u3138"=>"\u1104".freeze, "\u3139"=>"\u1105".freeze, - "\u313A"=>"\u11B0".freeze, "\u313B"=>"\u11B1".freeze, "\u313C"=>"\u11B2".freeze, "\u313D"=>"\u11B3".freeze, "\u313E"=>"\u11B4".freeze, "\u313F"=>"\u11B5".freeze, "\u3140"=>"\u111A".freeze, "\u3141"=>"\u1106".freeze, - "\u3142"=>"\u1107".freeze, "\u3143"=>"\u1108".freeze, "\u3144"=>"\u1121".freeze, "\u3145"=>"\u1109".freeze, "\u3146"=>"\u110A".freeze, "\u3147"=>"\u110B".freeze, "\u3148"=>"\u110C".freeze, "\u3149"=>"\u110D".freeze, - "\u314A"=>"\u110E".freeze, "\u314B"=>"\u110F".freeze, "\u314C"=>"\u1110".freeze, "\u314D"=>"\u1111".freeze, "\u314E"=>"\u1112".freeze, "\u314F"=>"\u1161".freeze, "\u3150"=>"\u1162".freeze, "\u3151"=>"\u1163".freeze, - "\u3152"=>"\u1164".freeze, "\u3153"=>"\u1165".freeze, "\u3154"=>"\u1166".freeze, "\u3155"=>"\u1167".freeze, "\u3156"=>"\u1168".freeze, "\u3157"=>"\u1169".freeze, "\u3158"=>"\u116A".freeze, "\u3159"=>"\u116B".freeze, - "\u315A"=>"\u116C".freeze, "\u315B"=>"\u116D".freeze, "\u315C"=>"\u116E".freeze, "\u315D"=>"\u116F".freeze, "\u315E"=>"\u1170".freeze, "\u315F"=>"\u1171".freeze, "\u3160"=>"\u1172".freeze, "\u3161"=>"\u1173".freeze, - "\u3162"=>"\u1174".freeze, "\u3163"=>"\u1175".freeze, "\u3164"=>"\u1160".freeze, "\u3165"=>"\u1114".freeze, "\u3166"=>"\u1115".freeze, "\u3167"=>"\u11C7".freeze, "\u3168"=>"\u11C8".freeze, "\u3169"=>"\u11CC".freeze, - "\u316A"=>"\u11CE".freeze, "\u316B"=>"\u11D3".freeze, "\u316C"=>"\u11D7".freeze, "\u316D"=>"\u11D9".freeze, "\u316E"=>"\u111C".freeze, "\u316F"=>"\u11DD".freeze, "\u3170"=>"\u11DF".freeze, "\u3171"=>"\u111D".freeze, - "\u3172"=>"\u111E".freeze, "\u3173"=>"\u1120".freeze, "\u3174"=>"\u1122".freeze, "\u3175"=>"\u1123".freeze, "\u3176"=>"\u1127".freeze, "\u3177"=>"\u1129".freeze, "\u3178"=>"\u112B".freeze, "\u3179"=>"\u112C".freeze, - "\u317A"=>"\u112D".freeze, "\u317B"=>"\u112E".freeze, "\u317C"=>"\u112F".freeze, "\u317D"=>"\u1132".freeze, "\u317E"=>"\u1136".freeze, "\u317F"=>"\u1140".freeze, "\u3180"=>"\u1147".freeze, "\u3181"=>"\u114C".freeze, - "\u3182"=>"\u11F1".freeze, "\u3183"=>"\u11F2".freeze, "\u3184"=>"\u1157".freeze, "\u3185"=>"\u1158".freeze, "\u3186"=>"\u1159".freeze, "\u3187"=>"\u1184".freeze, "\u3188"=>"\u1185".freeze, "\u3189"=>"\u1188".freeze, - "\u318A"=>"\u1191".freeze, "\u318B"=>"\u1192".freeze, "\u318C"=>"\u1194".freeze, "\u318D"=>"\u119E".freeze, "\u318E"=>"\u11A1".freeze, "\u3192"=>"\u4E00".freeze, "\u3193"=>"\u4E8C".freeze, "\u3194"=>"\u4E09".freeze, - "\u3195"=>"\u56DB".freeze, "\u3196"=>"\u4E0A".freeze, "\u3197"=>"\u4E2D".freeze, "\u3198"=>"\u4E0B".freeze, "\u3199"=>"\u7532".freeze, "\u319A"=>"\u4E59".freeze, "\u319B"=>"\u4E19".freeze, "\u319C"=>"\u4E01".freeze, - "\u319D"=>"\u5929".freeze, "\u319E"=>"\u5730".freeze, "\u319F"=>"\u4EBA".freeze, "\u3200"=>"(\u1100)".freeze, "\u3201"=>"(\u1102)".freeze, "\u3202"=>"(\u1103)".freeze, "\u3203"=>"(\u1105)".freeze, "\u3204"=>"(\u1106)".freeze, - "\u3205"=>"(\u1107)".freeze, "\u3206"=>"(\u1109)".freeze, "\u3207"=>"(\u110B)".freeze, "\u3208"=>"(\u110C)".freeze, "\u3209"=>"(\u110E)".freeze, "\u320A"=>"(\u110F)".freeze, "\u320B"=>"(\u1110)".freeze, "\u320C"=>"(\u1111)".freeze, - "\u320D"=>"(\u1112)".freeze, "\u320E"=>"(\u1100\u1161)".freeze, "\u320F"=>"(\u1102\u1161)".freeze, "\u3210"=>"(\u1103\u1161)".freeze, "\u3211"=>"(\u1105\u1161)".freeze, "\u3212"=>"(\u1106\u1161)".freeze, "\u3213"=>"(\u1107\u1161)".freeze, "\u3214"=>"(\u1109\u1161)".freeze, - "\u3215"=>"(\u110B\u1161)".freeze, "\u3216"=>"(\u110C\u1161)".freeze, "\u3217"=>"(\u110E\u1161)".freeze, "\u3218"=>"(\u110F\u1161)".freeze, "\u3219"=>"(\u1110\u1161)".freeze, "\u321A"=>"(\u1111\u1161)".freeze, "\u321B"=>"(\u1112\u1161)".freeze, "\u321C"=>"(\u110C\u116E)".freeze, - "\u321D"=>"(\u110B\u1169\u110C\u1165\u11AB)".freeze, "\u321E"=>"(\u110B\u1169\u1112\u116E)".freeze, "\u3220"=>"(\u4E00)".freeze, "\u3221"=>"(\u4E8C)".freeze, "\u3222"=>"(\u4E09)".freeze, "\u3223"=>"(\u56DB)".freeze, "\u3224"=>"(\u4E94)".freeze, "\u3225"=>"(\u516D)".freeze, - "\u3226"=>"(\u4E03)".freeze, "\u3227"=>"(\u516B)".freeze, "\u3228"=>"(\u4E5D)".freeze, "\u3229"=>"(\u5341)".freeze, "\u322A"=>"(\u6708)".freeze, "\u322B"=>"(\u706B)".freeze, "\u322C"=>"(\u6C34)".freeze, "\u322D"=>"(\u6728)".freeze, - "\u322E"=>"(\u91D1)".freeze, "\u322F"=>"(\u571F)".freeze, "\u3230"=>"(\u65E5)".freeze, "\u3231"=>"(\u682A)".freeze, "\u3232"=>"(\u6709)".freeze, "\u3233"=>"(\u793E)".freeze, "\u3234"=>"(\u540D)".freeze, "\u3235"=>"(\u7279)".freeze, - "\u3236"=>"(\u8CA1)".freeze, "\u3237"=>"(\u795D)".freeze, "\u3238"=>"(\u52B4)".freeze, "\u3239"=>"(\u4EE3)".freeze, "\u323A"=>"(\u547C)".freeze, "\u323B"=>"(\u5B66)".freeze, "\u323C"=>"(\u76E3)".freeze, "\u323D"=>"(\u4F01)".freeze, - "\u323E"=>"(\u8CC7)".freeze, "\u323F"=>"(\u5354)".freeze, "\u3240"=>"(\u796D)".freeze, "\u3241"=>"(\u4F11)".freeze, "\u3242"=>"(\u81EA)".freeze, "\u3243"=>"(\u81F3)".freeze, "\u3244"=>"\u554F".freeze, "\u3245"=>"\u5E7C".freeze, - "\u3246"=>"\u6587".freeze, "\u3247"=>"\u7B8F".freeze, "\u3250"=>"PTE".freeze, "\u3251"=>"21".freeze, "\u3252"=>"22".freeze, "\u3253"=>"23".freeze, "\u3254"=>"24".freeze, "\u3255"=>"25".freeze, - "\u3256"=>"26".freeze, "\u3257"=>"27".freeze, "\u3258"=>"28".freeze, "\u3259"=>"29".freeze, "\u325A"=>"30".freeze, "\u325B"=>"31".freeze, "\u325C"=>"32".freeze, "\u325D"=>"33".freeze, - "\u325E"=>"34".freeze, "\u325F"=>"35".freeze, "\u3260"=>"\u1100".freeze, "\u3261"=>"\u1102".freeze, "\u3262"=>"\u1103".freeze, "\u3263"=>"\u1105".freeze, "\u3264"=>"\u1106".freeze, "\u3265"=>"\u1107".freeze, - "\u3266"=>"\u1109".freeze, "\u3267"=>"\u110B".freeze, "\u3268"=>"\u110C".freeze, "\u3269"=>"\u110E".freeze, "\u326A"=>"\u110F".freeze, "\u326B"=>"\u1110".freeze, "\u326C"=>"\u1111".freeze, "\u326D"=>"\u1112".freeze, - "\u326E"=>"\u1100\u1161".freeze, "\u326F"=>"\u1102\u1161".freeze, "\u3270"=>"\u1103\u1161".freeze, "\u3271"=>"\u1105\u1161".freeze, "\u3272"=>"\u1106\u1161".freeze, "\u3273"=>"\u1107\u1161".freeze, "\u3274"=>"\u1109\u1161".freeze, "\u3275"=>"\u110B\u1161".freeze, - "\u3276"=>"\u110C\u1161".freeze, "\u3277"=>"\u110E\u1161".freeze, "\u3278"=>"\u110F\u1161".freeze, "\u3279"=>"\u1110\u1161".freeze, "\u327A"=>"\u1111\u1161".freeze, "\u327B"=>"\u1112\u1161".freeze, "\u327C"=>"\u110E\u1161\u11B7\u1100\u1169".freeze, "\u327D"=>"\u110C\u116E\u110B\u1174".freeze, - "\u327E"=>"\u110B\u116E".freeze, "\u3280"=>"\u4E00".freeze, "\u3281"=>"\u4E8C".freeze, "\u3282"=>"\u4E09".freeze, "\u3283"=>"\u56DB".freeze, "\u3284"=>"\u4E94".freeze, "\u3285"=>"\u516D".freeze, "\u3286"=>"\u4E03".freeze, - "\u3287"=>"\u516B".freeze, "\u3288"=>"\u4E5D".freeze, "\u3289"=>"\u5341".freeze, "\u328A"=>"\u6708".freeze, "\u328B"=>"\u706B".freeze, "\u328C"=>"\u6C34".freeze, "\u328D"=>"\u6728".freeze, "\u328E"=>"\u91D1".freeze, - "\u328F"=>"\u571F".freeze, "\u3290"=>"\u65E5".freeze, "\u3291"=>"\u682A".freeze, "\u3292"=>"\u6709".freeze, "\u3293"=>"\u793E".freeze, "\u3294"=>"\u540D".freeze, "\u3295"=>"\u7279".freeze, "\u3296"=>"\u8CA1".freeze, - "\u3297"=>"\u795D".freeze, "\u3298"=>"\u52B4".freeze, "\u3299"=>"\u79D8".freeze, "\u329A"=>"\u7537".freeze, "\u329B"=>"\u5973".freeze, "\u329C"=>"\u9069".freeze, "\u329D"=>"\u512A".freeze, "\u329E"=>"\u5370".freeze, - "\u329F"=>"\u6CE8".freeze, "\u32A0"=>"\u9805".freeze, "\u32A1"=>"\u4F11".freeze, "\u32A2"=>"\u5199".freeze, "\u32A3"=>"\u6B63".freeze, "\u32A4"=>"\u4E0A".freeze, "\u32A5"=>"\u4E2D".freeze, "\u32A6"=>"\u4E0B".freeze, - "\u32A7"=>"\u5DE6".freeze, "\u32A8"=>"\u53F3".freeze, "\u32A9"=>"\u533B".freeze, "\u32AA"=>"\u5B97".freeze, "\u32AB"=>"\u5B66".freeze, "\u32AC"=>"\u76E3".freeze, "\u32AD"=>"\u4F01".freeze, "\u32AE"=>"\u8CC7".freeze, - "\u32AF"=>"\u5354".freeze, "\u32B0"=>"\u591C".freeze, "\u32B1"=>"36".freeze, "\u32B2"=>"37".freeze, "\u32B3"=>"38".freeze, "\u32B4"=>"39".freeze, "\u32B5"=>"40".freeze, "\u32B6"=>"41".freeze, - "\u32B7"=>"42".freeze, "\u32B8"=>"43".freeze, "\u32B9"=>"44".freeze, "\u32BA"=>"45".freeze, "\u32BB"=>"46".freeze, "\u32BC"=>"47".freeze, "\u32BD"=>"48".freeze, "\u32BE"=>"49".freeze, - "\u32BF"=>"50".freeze, "\u32C0"=>"1\u6708".freeze, "\u32C1"=>"2\u6708".freeze, "\u32C2"=>"3\u6708".freeze, "\u32C3"=>"4\u6708".freeze, "\u32C4"=>"5\u6708".freeze, "\u32C5"=>"6\u6708".freeze, "\u32C6"=>"7\u6708".freeze, - "\u32C7"=>"8\u6708".freeze, "\u32C8"=>"9\u6708".freeze, "\u32C9"=>"10\u6708".freeze, "\u32CA"=>"11\u6708".freeze, "\u32CB"=>"12\u6708".freeze, "\u32CC"=>"Hg".freeze, "\u32CD"=>"erg".freeze, "\u32CE"=>"eV".freeze, - "\u32CF"=>"LTD".freeze, "\u32D0"=>"\u30A2".freeze, "\u32D1"=>"\u30A4".freeze, "\u32D2"=>"\u30A6".freeze, "\u32D3"=>"\u30A8".freeze, "\u32D4"=>"\u30AA".freeze, "\u32D5"=>"\u30AB".freeze, "\u32D6"=>"\u30AD".freeze, - "\u32D7"=>"\u30AF".freeze, "\u32D8"=>"\u30B1".freeze, "\u32D9"=>"\u30B3".freeze, "\u32DA"=>"\u30B5".freeze, "\u32DB"=>"\u30B7".freeze, "\u32DC"=>"\u30B9".freeze, "\u32DD"=>"\u30BB".freeze, "\u32DE"=>"\u30BD".freeze, - "\u32DF"=>"\u30BF".freeze, "\u32E0"=>"\u30C1".freeze, "\u32E1"=>"\u30C4".freeze, "\u32E2"=>"\u30C6".freeze, "\u32E3"=>"\u30C8".freeze, "\u32E4"=>"\u30CA".freeze, "\u32E5"=>"\u30CB".freeze, "\u32E6"=>"\u30CC".freeze, - "\u32E7"=>"\u30CD".freeze, "\u32E8"=>"\u30CE".freeze, "\u32E9"=>"\u30CF".freeze, "\u32EA"=>"\u30D2".freeze, "\u32EB"=>"\u30D5".freeze, "\u32EC"=>"\u30D8".freeze, "\u32ED"=>"\u30DB".freeze, "\u32EE"=>"\u30DE".freeze, - "\u32EF"=>"\u30DF".freeze, "\u32F0"=>"\u30E0".freeze, "\u32F1"=>"\u30E1".freeze, "\u32F2"=>"\u30E2".freeze, "\u32F3"=>"\u30E4".freeze, "\u32F4"=>"\u30E6".freeze, "\u32F5"=>"\u30E8".freeze, "\u32F6"=>"\u30E9".freeze, - "\u32F7"=>"\u30EA".freeze, "\u32F8"=>"\u30EB".freeze, "\u32F9"=>"\u30EC".freeze, "\u32FA"=>"\u30ED".freeze, "\u32FB"=>"\u30EF".freeze, "\u32FC"=>"\u30F0".freeze, "\u32FD"=>"\u30F1".freeze, "\u32FE"=>"\u30F2".freeze, - "\u3300"=>"\u30A2\u30D1\u30FC\u30C8".freeze, "\u3301"=>"\u30A2\u30EB\u30D5\u30A1".freeze, "\u3302"=>"\u30A2\u30F3\u30DA\u30A2".freeze, "\u3303"=>"\u30A2\u30FC\u30EB".freeze, "\u3304"=>"\u30A4\u30CB\u30F3\u30B0".freeze, "\u3305"=>"\u30A4\u30F3\u30C1".freeze, "\u3306"=>"\u30A6\u30A9\u30F3".freeze, "\u3307"=>"\u30A8\u30B9\u30AF\u30FC\u30C9".freeze, - "\u3308"=>"\u30A8\u30FC\u30AB\u30FC".freeze, "\u3309"=>"\u30AA\u30F3\u30B9".freeze, "\u330A"=>"\u30AA\u30FC\u30E0".freeze, "\u330B"=>"\u30AB\u30A4\u30EA".freeze, "\u330C"=>"\u30AB\u30E9\u30C3\u30C8".freeze, "\u330D"=>"\u30AB\u30ED\u30EA\u30FC".freeze, "\u330E"=>"\u30AC\u30ED\u30F3".freeze, "\u330F"=>"\u30AC\u30F3\u30DE".freeze, - "\u3310"=>"\u30AE\u30AC".freeze, "\u3311"=>"\u30AE\u30CB\u30FC".freeze, "\u3312"=>"\u30AD\u30E5\u30EA\u30FC".freeze, "\u3313"=>"\u30AE\u30EB\u30C0\u30FC".freeze, "\u3314"=>"\u30AD\u30ED".freeze, "\u3315"=>"\u30AD\u30ED\u30B0\u30E9\u30E0".freeze, "\u3316"=>"\u30AD\u30ED\u30E1\u30FC\u30C8\u30EB".freeze, "\u3317"=>"\u30AD\u30ED\u30EF\u30C3\u30C8".freeze, - "\u3318"=>"\u30B0\u30E9\u30E0".freeze, "\u3319"=>"\u30B0\u30E9\u30E0\u30C8\u30F3".freeze, "\u331A"=>"\u30AF\u30EB\u30BC\u30A4\u30ED".freeze, "\u331B"=>"\u30AF\u30ED\u30FC\u30CD".freeze, "\u331C"=>"\u30B1\u30FC\u30B9".freeze, "\u331D"=>"\u30B3\u30EB\u30CA".freeze, "\u331E"=>"\u30B3\u30FC\u30DD".freeze, "\u331F"=>"\u30B5\u30A4\u30AF\u30EB".freeze, - "\u3320"=>"\u30B5\u30F3\u30C1\u30FC\u30E0".freeze, "\u3321"=>"\u30B7\u30EA\u30F3\u30B0".freeze, "\u3322"=>"\u30BB\u30F3\u30C1".freeze, "\u3323"=>"\u30BB\u30F3\u30C8".freeze, "\u3324"=>"\u30C0\u30FC\u30B9".freeze, "\u3325"=>"\u30C7\u30B7".freeze, "\u3326"=>"\u30C9\u30EB".freeze, "\u3327"=>"\u30C8\u30F3".freeze, - "\u3328"=>"\u30CA\u30CE".freeze, "\u3329"=>"\u30CE\u30C3\u30C8".freeze, "\u332A"=>"\u30CF\u30A4\u30C4".freeze, "\u332B"=>"\u30D1\u30FC\u30BB\u30F3\u30C8".freeze, "\u332C"=>"\u30D1\u30FC\u30C4".freeze, "\u332D"=>"\u30D0\u30FC\u30EC\u30EB".freeze, "\u332E"=>"\u30D4\u30A2\u30B9\u30C8\u30EB".freeze, "\u332F"=>"\u30D4\u30AF\u30EB".freeze, - "\u3330"=>"\u30D4\u30B3".freeze, "\u3331"=>"\u30D3\u30EB".freeze, "\u3332"=>"\u30D5\u30A1\u30E9\u30C3\u30C9".freeze, "\u3333"=>"\u30D5\u30A3\u30FC\u30C8".freeze, "\u3334"=>"\u30D6\u30C3\u30B7\u30A7\u30EB".freeze, "\u3335"=>"\u30D5\u30E9\u30F3".freeze, "\u3336"=>"\u30D8\u30AF\u30BF\u30FC\u30EB".freeze, "\u3337"=>"\u30DA\u30BD".freeze, - "\u3338"=>"\u30DA\u30CB\u30D2".freeze, "\u3339"=>"\u30D8\u30EB\u30C4".freeze, "\u333A"=>"\u30DA\u30F3\u30B9".freeze, "\u333B"=>"\u30DA\u30FC\u30B8".freeze, "\u333C"=>"\u30D9\u30FC\u30BF".freeze, "\u333D"=>"\u30DD\u30A4\u30F3\u30C8".freeze, "\u333E"=>"\u30DC\u30EB\u30C8".freeze, "\u333F"=>"\u30DB\u30F3".freeze, - "\u3340"=>"\u30DD\u30F3\u30C9".freeze, "\u3341"=>"\u30DB\u30FC\u30EB".freeze, "\u3342"=>"\u30DB\u30FC\u30F3".freeze, "\u3343"=>"\u30DE\u30A4\u30AF\u30ED".freeze, "\u3344"=>"\u30DE\u30A4\u30EB".freeze, "\u3345"=>"\u30DE\u30C3\u30CF".freeze, "\u3346"=>"\u30DE\u30EB\u30AF".freeze, "\u3347"=>"\u30DE\u30F3\u30B7\u30E7\u30F3".freeze, - "\u3348"=>"\u30DF\u30AF\u30ED\u30F3".freeze, "\u3349"=>"\u30DF\u30EA".freeze, "\u334A"=>"\u30DF\u30EA\u30D0\u30FC\u30EB".freeze, "\u334B"=>"\u30E1\u30AC".freeze, "\u334C"=>"\u30E1\u30AC\u30C8\u30F3".freeze, "\u334D"=>"\u30E1\u30FC\u30C8\u30EB".freeze, "\u334E"=>"\u30E4\u30FC\u30C9".freeze, "\u334F"=>"\u30E4\u30FC\u30EB".freeze, - "\u3350"=>"\u30E6\u30A2\u30F3".freeze, "\u3351"=>"\u30EA\u30C3\u30C8\u30EB".freeze, "\u3352"=>"\u30EA\u30E9".freeze, "\u3353"=>"\u30EB\u30D4\u30FC".freeze, "\u3354"=>"\u30EB\u30FC\u30D6\u30EB".freeze, "\u3355"=>"\u30EC\u30E0".freeze, "\u3356"=>"\u30EC\u30F3\u30C8\u30B2\u30F3".freeze, "\u3357"=>"\u30EF\u30C3\u30C8".freeze, - "\u3358"=>"0\u70B9".freeze, "\u3359"=>"1\u70B9".freeze, "\u335A"=>"2\u70B9".freeze, "\u335B"=>"3\u70B9".freeze, "\u335C"=>"4\u70B9".freeze, "\u335D"=>"5\u70B9".freeze, "\u335E"=>"6\u70B9".freeze, "\u335F"=>"7\u70B9".freeze, - "\u3360"=>"8\u70B9".freeze, "\u3361"=>"9\u70B9".freeze, "\u3362"=>"10\u70B9".freeze, "\u3363"=>"11\u70B9".freeze, "\u3364"=>"12\u70B9".freeze, "\u3365"=>"13\u70B9".freeze, "\u3366"=>"14\u70B9".freeze, "\u3367"=>"15\u70B9".freeze, - "\u3368"=>"16\u70B9".freeze, "\u3369"=>"17\u70B9".freeze, "\u336A"=>"18\u70B9".freeze, "\u336B"=>"19\u70B9".freeze, "\u336C"=>"20\u70B9".freeze, "\u336D"=>"21\u70B9".freeze, "\u336E"=>"22\u70B9".freeze, "\u336F"=>"23\u70B9".freeze, - "\u3370"=>"24\u70B9".freeze, "\u3371"=>"hPa".freeze, "\u3372"=>"da".freeze, "\u3373"=>"AU".freeze, "\u3374"=>"bar".freeze, "\u3375"=>"oV".freeze, "\u3376"=>"pc".freeze, "\u3377"=>"dm".freeze, - "\u3378"=>"dm2".freeze, "\u3379"=>"dm3".freeze, "\u337A"=>"IU".freeze, "\u337B"=>"\u5E73\u6210".freeze, "\u337C"=>"\u662D\u548C".freeze, "\u337D"=>"\u5927\u6B63".freeze, "\u337E"=>"\u660E\u6CBB".freeze, "\u337F"=>"\u682A\u5F0F\u4F1A\u793E".freeze, - "\u3380"=>"pA".freeze, "\u3381"=>"nA".freeze, "\u3382"=>"\u03BCA".freeze, "\u3383"=>"mA".freeze, "\u3384"=>"kA".freeze, "\u3385"=>"KB".freeze, "\u3386"=>"MB".freeze, "\u3387"=>"GB".freeze, - "\u3388"=>"cal".freeze, "\u3389"=>"kcal".freeze, "\u338A"=>"pF".freeze, "\u338B"=>"nF".freeze, "\u338C"=>"\u03BCF".freeze, "\u338D"=>"\u03BCg".freeze, "\u338E"=>"mg".freeze, "\u338F"=>"kg".freeze, - "\u3390"=>"Hz".freeze, "\u3391"=>"kHz".freeze, "\u3392"=>"MHz".freeze, "\u3393"=>"GHz".freeze, "\u3394"=>"THz".freeze, "\u3395"=>"\u03BCl".freeze, "\u3396"=>"ml".freeze, "\u3397"=>"dl".freeze, - "\u3398"=>"kl".freeze, "\u3399"=>"fm".freeze, "\u339A"=>"nm".freeze, "\u339B"=>"\u03BCm".freeze, "\u339C"=>"mm".freeze, "\u339D"=>"cm".freeze, "\u339E"=>"km".freeze, "\u339F"=>"mm2".freeze, - "\u33A0"=>"cm2".freeze, "\u33A1"=>"m2".freeze, "\u33A2"=>"km2".freeze, "\u33A3"=>"mm3".freeze, "\u33A4"=>"cm3".freeze, "\u33A5"=>"m3".freeze, "\u33A6"=>"km3".freeze, "\u33A7"=>"m\u2215s".freeze, - "\u33A8"=>"m\u2215s2".freeze, "\u33A9"=>"Pa".freeze, "\u33AA"=>"kPa".freeze, "\u33AB"=>"MPa".freeze, "\u33AC"=>"GPa".freeze, "\u33AD"=>"rad".freeze, "\u33AE"=>"rad\u2215s".freeze, "\u33AF"=>"rad\u2215s2".freeze, - "\u33B0"=>"ps".freeze, "\u33B1"=>"ns".freeze, "\u33B2"=>"\u03BCs".freeze, "\u33B3"=>"ms".freeze, "\u33B4"=>"pV".freeze, "\u33B5"=>"nV".freeze, "\u33B6"=>"\u03BCV".freeze, "\u33B7"=>"mV".freeze, - "\u33B8"=>"kV".freeze, "\u33B9"=>"MV".freeze, "\u33BA"=>"pW".freeze, "\u33BB"=>"nW".freeze, "\u33BC"=>"\u03BCW".freeze, "\u33BD"=>"mW".freeze, "\u33BE"=>"kW".freeze, "\u33BF"=>"MW".freeze, - "\u33C0"=>"k\u03A9".freeze, "\u33C1"=>"M\u03A9".freeze, "\u33C2"=>"a.m.".freeze, "\u33C3"=>"Bq".freeze, "\u33C4"=>"cc".freeze, "\u33C5"=>"cd".freeze, "\u33C6"=>"C\u2215kg".freeze, "\u33C7"=>"Co.".freeze, - "\u33C8"=>"dB".freeze, "\u33C9"=>"Gy".freeze, "\u33CA"=>"ha".freeze, "\u33CB"=>"HP".freeze, "\u33CC"=>"in".freeze, "\u33CD"=>"KK".freeze, "\u33CE"=>"KM".freeze, "\u33CF"=>"kt".freeze, - "\u33D0"=>"lm".freeze, "\u33D1"=>"ln".freeze, "\u33D2"=>"log".freeze, "\u33D3"=>"lx".freeze, "\u33D4"=>"mb".freeze, "\u33D5"=>"mil".freeze, "\u33D6"=>"mol".freeze, "\u33D7"=>"PH".freeze, - "\u33D8"=>"p.m.".freeze, "\u33D9"=>"PPM".freeze, "\u33DA"=>"PR".freeze, "\u33DB"=>"sr".freeze, "\u33DC"=>"Sv".freeze, "\u33DD"=>"Wb".freeze, "\u33DE"=>"V\u2215m".freeze, "\u33DF"=>"A\u2215m".freeze, - "\u33E0"=>"1\u65E5".freeze, "\u33E1"=>"2\u65E5".freeze, "\u33E2"=>"3\u65E5".freeze, "\u33E3"=>"4\u65E5".freeze, "\u33E4"=>"5\u65E5".freeze, "\u33E5"=>"6\u65E5".freeze, "\u33E6"=>"7\u65E5".freeze, "\u33E7"=>"8\u65E5".freeze, - "\u33E8"=>"9\u65E5".freeze, "\u33E9"=>"10\u65E5".freeze, "\u33EA"=>"11\u65E5".freeze, "\u33EB"=>"12\u65E5".freeze, "\u33EC"=>"13\u65E5".freeze, "\u33ED"=>"14\u65E5".freeze, "\u33EE"=>"15\u65E5".freeze, "\u33EF"=>"16\u65E5".freeze, - "\u33F0"=>"17\u65E5".freeze, "\u33F1"=>"18\u65E5".freeze, "\u33F2"=>"19\u65E5".freeze, "\u33F3"=>"20\u65E5".freeze, "\u33F4"=>"21\u65E5".freeze, "\u33F5"=>"22\u65E5".freeze, "\u33F6"=>"23\u65E5".freeze, "\u33F7"=>"24\u65E5".freeze, - "\u33F8"=>"25\u65E5".freeze, "\u33F9"=>"26\u65E5".freeze, "\u33FA"=>"27\u65E5".freeze, "\u33FB"=>"28\u65E5".freeze, "\u33FC"=>"29\u65E5".freeze, "\u33FD"=>"30\u65E5".freeze, "\u33FE"=>"31\u65E5".freeze, "\u33FF"=>"gal".freeze, - "\uA69C"=>"\u044A".freeze, "\uA69D"=>"\u044C".freeze, "\uA770"=>"\uA76F".freeze, "\uA7F8"=>"\u0126".freeze, "\uA7F9"=>"\u0153".freeze, "\uAB5C"=>"\uA727".freeze, "\uAB5D"=>"\uAB37".freeze, "\uAB5E"=>"\u026B".freeze, - "\uAB5F"=>"\uAB52".freeze, "\uFB00"=>"ff".freeze, "\uFB01"=>"fi".freeze, "\uFB02"=>"fl".freeze, "\uFB03"=>"ffi".freeze, "\uFB04"=>"ffl".freeze, "\uFB05"=>"st".freeze, "\uFB06"=>"st".freeze, - "\uFB13"=>"\u0574\u0576".freeze, "\uFB14"=>"\u0574\u0565".freeze, "\uFB15"=>"\u0574\u056B".freeze, "\uFB16"=>"\u057E\u0576".freeze, "\uFB17"=>"\u0574\u056D".freeze, "\uFB20"=>"\u05E2".freeze, "\uFB21"=>"\u05D0".freeze, "\uFB22"=>"\u05D3".freeze, - "\uFB23"=>"\u05D4".freeze, "\uFB24"=>"\u05DB".freeze, "\uFB25"=>"\u05DC".freeze, "\uFB26"=>"\u05DD".freeze, "\uFB27"=>"\u05E8".freeze, "\uFB28"=>"\u05EA".freeze, "\uFB29"=>"+".freeze, "\uFB4F"=>"\u05D0\u05DC".freeze, - "\uFB50"=>"\u0671".freeze, "\uFB51"=>"\u0671".freeze, "\uFB52"=>"\u067B".freeze, "\uFB53"=>"\u067B".freeze, "\uFB54"=>"\u067B".freeze, "\uFB55"=>"\u067B".freeze, "\uFB56"=>"\u067E".freeze, "\uFB57"=>"\u067E".freeze, - "\uFB58"=>"\u067E".freeze, "\uFB59"=>"\u067E".freeze, "\uFB5A"=>"\u0680".freeze, "\uFB5B"=>"\u0680".freeze, "\uFB5C"=>"\u0680".freeze, "\uFB5D"=>"\u0680".freeze, "\uFB5E"=>"\u067A".freeze, "\uFB5F"=>"\u067A".freeze, - "\uFB60"=>"\u067A".freeze, "\uFB61"=>"\u067A".freeze, "\uFB62"=>"\u067F".freeze, "\uFB63"=>"\u067F".freeze, "\uFB64"=>"\u067F".freeze, "\uFB65"=>"\u067F".freeze, "\uFB66"=>"\u0679".freeze, "\uFB67"=>"\u0679".freeze, - "\uFB68"=>"\u0679".freeze, "\uFB69"=>"\u0679".freeze, "\uFB6A"=>"\u06A4".freeze, "\uFB6B"=>"\u06A4".freeze, "\uFB6C"=>"\u06A4".freeze, "\uFB6D"=>"\u06A4".freeze, "\uFB6E"=>"\u06A6".freeze, "\uFB6F"=>"\u06A6".freeze, - "\uFB70"=>"\u06A6".freeze, "\uFB71"=>"\u06A6".freeze, "\uFB72"=>"\u0684".freeze, "\uFB73"=>"\u0684".freeze, "\uFB74"=>"\u0684".freeze, "\uFB75"=>"\u0684".freeze, "\uFB76"=>"\u0683".freeze, "\uFB77"=>"\u0683".freeze, - "\uFB78"=>"\u0683".freeze, "\uFB79"=>"\u0683".freeze, "\uFB7A"=>"\u0686".freeze, "\uFB7B"=>"\u0686".freeze, "\uFB7C"=>"\u0686".freeze, "\uFB7D"=>"\u0686".freeze, "\uFB7E"=>"\u0687".freeze, "\uFB7F"=>"\u0687".freeze, - "\uFB80"=>"\u0687".freeze, "\uFB81"=>"\u0687".freeze, "\uFB82"=>"\u068D".freeze, "\uFB83"=>"\u068D".freeze, "\uFB84"=>"\u068C".freeze, "\uFB85"=>"\u068C".freeze, "\uFB86"=>"\u068E".freeze, "\uFB87"=>"\u068E".freeze, - "\uFB88"=>"\u0688".freeze, "\uFB89"=>"\u0688".freeze, "\uFB8A"=>"\u0698".freeze, "\uFB8B"=>"\u0698".freeze, "\uFB8C"=>"\u0691".freeze, "\uFB8D"=>"\u0691".freeze, "\uFB8E"=>"\u06A9".freeze, "\uFB8F"=>"\u06A9".freeze, - "\uFB90"=>"\u06A9".freeze, "\uFB91"=>"\u06A9".freeze, "\uFB92"=>"\u06AF".freeze, "\uFB93"=>"\u06AF".freeze, "\uFB94"=>"\u06AF".freeze, "\uFB95"=>"\u06AF".freeze, "\uFB96"=>"\u06B3".freeze, "\uFB97"=>"\u06B3".freeze, - "\uFB98"=>"\u06B3".freeze, "\uFB99"=>"\u06B3".freeze, "\uFB9A"=>"\u06B1".freeze, "\uFB9B"=>"\u06B1".freeze, "\uFB9C"=>"\u06B1".freeze, "\uFB9D"=>"\u06B1".freeze, "\uFB9E"=>"\u06BA".freeze, "\uFB9F"=>"\u06BA".freeze, - "\uFBA0"=>"\u06BB".freeze, "\uFBA1"=>"\u06BB".freeze, "\uFBA2"=>"\u06BB".freeze, "\uFBA3"=>"\u06BB".freeze, "\uFBA4"=>"\u06C0".freeze, "\uFBA5"=>"\u06C0".freeze, "\uFBA6"=>"\u06C1".freeze, "\uFBA7"=>"\u06C1".freeze, - "\uFBA8"=>"\u06C1".freeze, "\uFBA9"=>"\u06C1".freeze, "\uFBAA"=>"\u06BE".freeze, "\uFBAB"=>"\u06BE".freeze, "\uFBAC"=>"\u06BE".freeze, "\uFBAD"=>"\u06BE".freeze, "\uFBAE"=>"\u06D2".freeze, "\uFBAF"=>"\u06D2".freeze, - "\uFBB0"=>"\u06D3".freeze, "\uFBB1"=>"\u06D3".freeze, "\uFBD3"=>"\u06AD".freeze, "\uFBD4"=>"\u06AD".freeze, "\uFBD5"=>"\u06AD".freeze, "\uFBD6"=>"\u06AD".freeze, "\uFBD7"=>"\u06C7".freeze, "\uFBD8"=>"\u06C7".freeze, - "\uFBD9"=>"\u06C6".freeze, "\uFBDA"=>"\u06C6".freeze, "\uFBDB"=>"\u06C8".freeze, "\uFBDC"=>"\u06C8".freeze, "\uFBDD"=>"\u06C7\u0674".freeze, "\uFBDE"=>"\u06CB".freeze, "\uFBDF"=>"\u06CB".freeze, "\uFBE0"=>"\u06C5".freeze, - "\uFBE1"=>"\u06C5".freeze, "\uFBE2"=>"\u06C9".freeze, "\uFBE3"=>"\u06C9".freeze, "\uFBE4"=>"\u06D0".freeze, "\uFBE5"=>"\u06D0".freeze, "\uFBE6"=>"\u06D0".freeze, "\uFBE7"=>"\u06D0".freeze, "\uFBE8"=>"\u0649".freeze, - "\uFBE9"=>"\u0649".freeze, "\uFBEA"=>"\u0626\u0627".freeze, "\uFBEB"=>"\u0626\u0627".freeze, "\uFBEC"=>"\u0626\u06D5".freeze, "\uFBED"=>"\u0626\u06D5".freeze, "\uFBEE"=>"\u0626\u0648".freeze, "\uFBEF"=>"\u0626\u0648".freeze, "\uFBF0"=>"\u0626\u06C7".freeze, - "\uFBF1"=>"\u0626\u06C7".freeze, "\uFBF2"=>"\u0626\u06C6".freeze, "\uFBF3"=>"\u0626\u06C6".freeze, "\uFBF4"=>"\u0626\u06C8".freeze, "\uFBF5"=>"\u0626\u06C8".freeze, "\uFBF6"=>"\u0626\u06D0".freeze, "\uFBF7"=>"\u0626\u06D0".freeze, "\uFBF8"=>"\u0626\u06D0".freeze, - "\uFBF9"=>"\u0626\u0649".freeze, "\uFBFA"=>"\u0626\u0649".freeze, "\uFBFB"=>"\u0626\u0649".freeze, "\uFBFC"=>"\u06CC".freeze, "\uFBFD"=>"\u06CC".freeze, "\uFBFE"=>"\u06CC".freeze, "\uFBFF"=>"\u06CC".freeze, "\uFC00"=>"\u0626\u062C".freeze, - "\uFC01"=>"\u0626\u062D".freeze, "\uFC02"=>"\u0626\u0645".freeze, "\uFC03"=>"\u0626\u0649".freeze, "\uFC04"=>"\u0626\u064A".freeze, "\uFC05"=>"\u0628\u062C".freeze, "\uFC06"=>"\u0628\u062D".freeze, "\uFC07"=>"\u0628\u062E".freeze, "\uFC08"=>"\u0628\u0645".freeze, - "\uFC09"=>"\u0628\u0649".freeze, "\uFC0A"=>"\u0628\u064A".freeze, "\uFC0B"=>"\u062A\u062C".freeze, "\uFC0C"=>"\u062A\u062D".freeze, "\uFC0D"=>"\u062A\u062E".freeze, "\uFC0E"=>"\u062A\u0645".freeze, "\uFC0F"=>"\u062A\u0649".freeze, "\uFC10"=>"\u062A\u064A".freeze, - "\uFC11"=>"\u062B\u062C".freeze, "\uFC12"=>"\u062B\u0645".freeze, "\uFC13"=>"\u062B\u0649".freeze, "\uFC14"=>"\u062B\u064A".freeze, "\uFC15"=>"\u062C\u062D".freeze, "\uFC16"=>"\u062C\u0645".freeze, "\uFC17"=>"\u062D\u062C".freeze, "\uFC18"=>"\u062D\u0645".freeze, - "\uFC19"=>"\u062E\u062C".freeze, "\uFC1A"=>"\u062E\u062D".freeze, "\uFC1B"=>"\u062E\u0645".freeze, "\uFC1C"=>"\u0633\u062C".freeze, "\uFC1D"=>"\u0633\u062D".freeze, "\uFC1E"=>"\u0633\u062E".freeze, "\uFC1F"=>"\u0633\u0645".freeze, "\uFC20"=>"\u0635\u062D".freeze, - "\uFC21"=>"\u0635\u0645".freeze, "\uFC22"=>"\u0636\u062C".freeze, "\uFC23"=>"\u0636\u062D".freeze, "\uFC24"=>"\u0636\u062E".freeze, "\uFC25"=>"\u0636\u0645".freeze, "\uFC26"=>"\u0637\u062D".freeze, "\uFC27"=>"\u0637\u0645".freeze, "\uFC28"=>"\u0638\u0645".freeze, - "\uFC29"=>"\u0639\u062C".freeze, "\uFC2A"=>"\u0639\u0645".freeze, "\uFC2B"=>"\u063A\u062C".freeze, "\uFC2C"=>"\u063A\u0645".freeze, "\uFC2D"=>"\u0641\u062C".freeze, "\uFC2E"=>"\u0641\u062D".freeze, "\uFC2F"=>"\u0641\u062E".freeze, "\uFC30"=>"\u0641\u0645".freeze, - "\uFC31"=>"\u0641\u0649".freeze, "\uFC32"=>"\u0641\u064A".freeze, "\uFC33"=>"\u0642\u062D".freeze, "\uFC34"=>"\u0642\u0645".freeze, "\uFC35"=>"\u0642\u0649".freeze, "\uFC36"=>"\u0642\u064A".freeze, "\uFC37"=>"\u0643\u0627".freeze, "\uFC38"=>"\u0643\u062C".freeze, - "\uFC39"=>"\u0643\u062D".freeze, "\uFC3A"=>"\u0643\u062E".freeze, "\uFC3B"=>"\u0643\u0644".freeze, "\uFC3C"=>"\u0643\u0645".freeze, "\uFC3D"=>"\u0643\u0649".freeze, "\uFC3E"=>"\u0643\u064A".freeze, "\uFC3F"=>"\u0644\u062C".freeze, "\uFC40"=>"\u0644\u062D".freeze, - "\uFC41"=>"\u0644\u062E".freeze, "\uFC42"=>"\u0644\u0645".freeze, "\uFC43"=>"\u0644\u0649".freeze, "\uFC44"=>"\u0644\u064A".freeze, "\uFC45"=>"\u0645\u062C".freeze, "\uFC46"=>"\u0645\u062D".freeze, "\uFC47"=>"\u0645\u062E".freeze, "\uFC48"=>"\u0645\u0645".freeze, - "\uFC49"=>"\u0645\u0649".freeze, "\uFC4A"=>"\u0645\u064A".freeze, "\uFC4B"=>"\u0646\u062C".freeze, "\uFC4C"=>"\u0646\u062D".freeze, "\uFC4D"=>"\u0646\u062E".freeze, "\uFC4E"=>"\u0646\u0645".freeze, "\uFC4F"=>"\u0646\u0649".freeze, "\uFC50"=>"\u0646\u064A".freeze, - "\uFC51"=>"\u0647\u062C".freeze, "\uFC52"=>"\u0647\u0645".freeze, "\uFC53"=>"\u0647\u0649".freeze, "\uFC54"=>"\u0647\u064A".freeze, "\uFC55"=>"\u064A\u062C".freeze, "\uFC56"=>"\u064A\u062D".freeze, "\uFC57"=>"\u064A\u062E".freeze, "\uFC58"=>"\u064A\u0645".freeze, - "\uFC59"=>"\u064A\u0649".freeze, "\uFC5A"=>"\u064A\u064A".freeze, "\uFC5B"=>"\u0630\u0670".freeze, "\uFC5C"=>"\u0631\u0670".freeze, "\uFC5D"=>"\u0649\u0670".freeze, "\uFC5E"=>" \u064C\u0651".freeze, "\uFC5F"=>" \u064D\u0651".freeze, "\uFC60"=>" \u064E\u0651".freeze, - "\uFC61"=>" \u064F\u0651".freeze, "\uFC62"=>" \u0650\u0651".freeze, "\uFC63"=>" \u0651\u0670".freeze, "\uFC64"=>"\u0626\u0631".freeze, "\uFC65"=>"\u0626\u0632".freeze, "\uFC66"=>"\u0626\u0645".freeze, "\uFC67"=>"\u0626\u0646".freeze, "\uFC68"=>"\u0626\u0649".freeze, - "\uFC69"=>"\u0626\u064A".freeze, "\uFC6A"=>"\u0628\u0631".freeze, "\uFC6B"=>"\u0628\u0632".freeze, "\uFC6C"=>"\u0628\u0645".freeze, "\uFC6D"=>"\u0628\u0646".freeze, "\uFC6E"=>"\u0628\u0649".freeze, "\uFC6F"=>"\u0628\u064A".freeze, "\uFC70"=>"\u062A\u0631".freeze, - "\uFC71"=>"\u062A\u0632".freeze, "\uFC72"=>"\u062A\u0645".freeze, "\uFC73"=>"\u062A\u0646".freeze, "\uFC74"=>"\u062A\u0649".freeze, "\uFC75"=>"\u062A\u064A".freeze, "\uFC76"=>"\u062B\u0631".freeze, "\uFC77"=>"\u062B\u0632".freeze, "\uFC78"=>"\u062B\u0645".freeze, - "\uFC79"=>"\u062B\u0646".freeze, "\uFC7A"=>"\u062B\u0649".freeze, "\uFC7B"=>"\u062B\u064A".freeze, "\uFC7C"=>"\u0641\u0649".freeze, "\uFC7D"=>"\u0641\u064A".freeze, "\uFC7E"=>"\u0642\u0649".freeze, "\uFC7F"=>"\u0642\u064A".freeze, "\uFC80"=>"\u0643\u0627".freeze, - "\uFC81"=>"\u0643\u0644".freeze, "\uFC82"=>"\u0643\u0645".freeze, "\uFC83"=>"\u0643\u0649".freeze, "\uFC84"=>"\u0643\u064A".freeze, "\uFC85"=>"\u0644\u0645".freeze, "\uFC86"=>"\u0644\u0649".freeze, "\uFC87"=>"\u0644\u064A".freeze, "\uFC88"=>"\u0645\u0627".freeze, - "\uFC89"=>"\u0645\u0645".freeze, "\uFC8A"=>"\u0646\u0631".freeze, "\uFC8B"=>"\u0646\u0632".freeze, "\uFC8C"=>"\u0646\u0645".freeze, "\uFC8D"=>"\u0646\u0646".freeze, "\uFC8E"=>"\u0646\u0649".freeze, "\uFC8F"=>"\u0646\u064A".freeze, "\uFC90"=>"\u0649\u0670".freeze, - "\uFC91"=>"\u064A\u0631".freeze, "\uFC92"=>"\u064A\u0632".freeze, "\uFC93"=>"\u064A\u0645".freeze, "\uFC94"=>"\u064A\u0646".freeze, "\uFC95"=>"\u064A\u0649".freeze, "\uFC96"=>"\u064A\u064A".freeze, "\uFC97"=>"\u0626\u062C".freeze, "\uFC98"=>"\u0626\u062D".freeze, - "\uFC99"=>"\u0626\u062E".freeze, "\uFC9A"=>"\u0626\u0645".freeze, "\uFC9B"=>"\u0626\u0647".freeze, "\uFC9C"=>"\u0628\u062C".freeze, "\uFC9D"=>"\u0628\u062D".freeze, "\uFC9E"=>"\u0628\u062E".freeze, "\uFC9F"=>"\u0628\u0645".freeze, "\uFCA0"=>"\u0628\u0647".freeze, - "\uFCA1"=>"\u062A\u062C".freeze, "\uFCA2"=>"\u062A\u062D".freeze, "\uFCA3"=>"\u062A\u062E".freeze, "\uFCA4"=>"\u062A\u0645".freeze, "\uFCA5"=>"\u062A\u0647".freeze, "\uFCA6"=>"\u062B\u0645".freeze, "\uFCA7"=>"\u062C\u062D".freeze, "\uFCA8"=>"\u062C\u0645".freeze, - "\uFCA9"=>"\u062D\u062C".freeze, "\uFCAA"=>"\u062D\u0645".freeze, "\uFCAB"=>"\u062E\u062C".freeze, "\uFCAC"=>"\u062E\u0645".freeze, "\uFCAD"=>"\u0633\u062C".freeze, "\uFCAE"=>"\u0633\u062D".freeze, "\uFCAF"=>"\u0633\u062E".freeze, "\uFCB0"=>"\u0633\u0645".freeze, - "\uFCB1"=>"\u0635\u062D".freeze, "\uFCB2"=>"\u0635\u062E".freeze, "\uFCB3"=>"\u0635\u0645".freeze, "\uFCB4"=>"\u0636\u062C".freeze, "\uFCB5"=>"\u0636\u062D".freeze, "\uFCB6"=>"\u0636\u062E".freeze, "\uFCB7"=>"\u0636\u0645".freeze, "\uFCB8"=>"\u0637\u062D".freeze, - "\uFCB9"=>"\u0638\u0645".freeze, "\uFCBA"=>"\u0639\u062C".freeze, "\uFCBB"=>"\u0639\u0645".freeze, "\uFCBC"=>"\u063A\u062C".freeze, "\uFCBD"=>"\u063A\u0645".freeze, "\uFCBE"=>"\u0641\u062C".freeze, "\uFCBF"=>"\u0641\u062D".freeze, "\uFCC0"=>"\u0641\u062E".freeze, - "\uFCC1"=>"\u0641\u0645".freeze, "\uFCC2"=>"\u0642\u062D".freeze, "\uFCC3"=>"\u0642\u0645".freeze, "\uFCC4"=>"\u0643\u062C".freeze, "\uFCC5"=>"\u0643\u062D".freeze, "\uFCC6"=>"\u0643\u062E".freeze, "\uFCC7"=>"\u0643\u0644".freeze, "\uFCC8"=>"\u0643\u0645".freeze, - "\uFCC9"=>"\u0644\u062C".freeze, "\uFCCA"=>"\u0644\u062D".freeze, "\uFCCB"=>"\u0644\u062E".freeze, "\uFCCC"=>"\u0644\u0645".freeze, "\uFCCD"=>"\u0644\u0647".freeze, "\uFCCE"=>"\u0645\u062C".freeze, "\uFCCF"=>"\u0645\u062D".freeze, "\uFCD0"=>"\u0645\u062E".freeze, - "\uFCD1"=>"\u0645\u0645".freeze, "\uFCD2"=>"\u0646\u062C".freeze, "\uFCD3"=>"\u0646\u062D".freeze, "\uFCD4"=>"\u0646\u062E".freeze, "\uFCD5"=>"\u0646\u0645".freeze, "\uFCD6"=>"\u0646\u0647".freeze, "\uFCD7"=>"\u0647\u062C".freeze, "\uFCD8"=>"\u0647\u0645".freeze, - "\uFCD9"=>"\u0647\u0670".freeze, "\uFCDA"=>"\u064A\u062C".freeze, "\uFCDB"=>"\u064A\u062D".freeze, "\uFCDC"=>"\u064A\u062E".freeze, "\uFCDD"=>"\u064A\u0645".freeze, "\uFCDE"=>"\u064A\u0647".freeze, "\uFCDF"=>"\u0626\u0645".freeze, "\uFCE0"=>"\u0626\u0647".freeze, - "\uFCE1"=>"\u0628\u0645".freeze, "\uFCE2"=>"\u0628\u0647".freeze, "\uFCE3"=>"\u062A\u0645".freeze, "\uFCE4"=>"\u062A\u0647".freeze, "\uFCE5"=>"\u062B\u0645".freeze, "\uFCE6"=>"\u062B\u0647".freeze, "\uFCE7"=>"\u0633\u0645".freeze, "\uFCE8"=>"\u0633\u0647".freeze, - "\uFCE9"=>"\u0634\u0645".freeze, "\uFCEA"=>"\u0634\u0647".freeze, "\uFCEB"=>"\u0643\u0644".freeze, "\uFCEC"=>"\u0643\u0645".freeze, "\uFCED"=>"\u0644\u0645".freeze, "\uFCEE"=>"\u0646\u0645".freeze, "\uFCEF"=>"\u0646\u0647".freeze, "\uFCF0"=>"\u064A\u0645".freeze, - "\uFCF1"=>"\u064A\u0647".freeze, "\uFCF2"=>"\u0640\u064E\u0651".freeze, "\uFCF3"=>"\u0640\u064F\u0651".freeze, "\uFCF4"=>"\u0640\u0650\u0651".freeze, "\uFCF5"=>"\u0637\u0649".freeze, "\uFCF6"=>"\u0637\u064A".freeze, "\uFCF7"=>"\u0639\u0649".freeze, "\uFCF8"=>"\u0639\u064A".freeze, - "\uFCF9"=>"\u063A\u0649".freeze, "\uFCFA"=>"\u063A\u064A".freeze, "\uFCFB"=>"\u0633\u0649".freeze, "\uFCFC"=>"\u0633\u064A".freeze, "\uFCFD"=>"\u0634\u0649".freeze, "\uFCFE"=>"\u0634\u064A".freeze, "\uFCFF"=>"\u062D\u0649".freeze, "\uFD00"=>"\u062D\u064A".freeze, - "\uFD01"=>"\u062C\u0649".freeze, "\uFD02"=>"\u062C\u064A".freeze, "\uFD03"=>"\u062E\u0649".freeze, "\uFD04"=>"\u062E\u064A".freeze, "\uFD05"=>"\u0635\u0649".freeze, "\uFD06"=>"\u0635\u064A".freeze, "\uFD07"=>"\u0636\u0649".freeze, "\uFD08"=>"\u0636\u064A".freeze, - "\uFD09"=>"\u0634\u062C".freeze, "\uFD0A"=>"\u0634\u062D".freeze, "\uFD0B"=>"\u0634\u062E".freeze, "\uFD0C"=>"\u0634\u0645".freeze, "\uFD0D"=>"\u0634\u0631".freeze, "\uFD0E"=>"\u0633\u0631".freeze, "\uFD0F"=>"\u0635\u0631".freeze, "\uFD10"=>"\u0636\u0631".freeze, - "\uFD11"=>"\u0637\u0649".freeze, "\uFD12"=>"\u0637\u064A".freeze, "\uFD13"=>"\u0639\u0649".freeze, "\uFD14"=>"\u0639\u064A".freeze, "\uFD15"=>"\u063A\u0649".freeze, "\uFD16"=>"\u063A\u064A".freeze, "\uFD17"=>"\u0633\u0649".freeze, "\uFD18"=>"\u0633\u064A".freeze, - "\uFD19"=>"\u0634\u0649".freeze, "\uFD1A"=>"\u0634\u064A".freeze, "\uFD1B"=>"\u062D\u0649".freeze, "\uFD1C"=>"\u062D\u064A".freeze, "\uFD1D"=>"\u062C\u0649".freeze, "\uFD1E"=>"\u062C\u064A".freeze, "\uFD1F"=>"\u062E\u0649".freeze, "\uFD20"=>"\u062E\u064A".freeze, - "\uFD21"=>"\u0635\u0649".freeze, "\uFD22"=>"\u0635\u064A".freeze, "\uFD23"=>"\u0636\u0649".freeze, "\uFD24"=>"\u0636\u064A".freeze, "\uFD25"=>"\u0634\u062C".freeze, "\uFD26"=>"\u0634\u062D".freeze, "\uFD27"=>"\u0634\u062E".freeze, "\uFD28"=>"\u0634\u0645".freeze, - "\uFD29"=>"\u0634\u0631".freeze, "\uFD2A"=>"\u0633\u0631".freeze, "\uFD2B"=>"\u0635\u0631".freeze, "\uFD2C"=>"\u0636\u0631".freeze, "\uFD2D"=>"\u0634\u062C".freeze, "\uFD2E"=>"\u0634\u062D".freeze, "\uFD2F"=>"\u0634\u062E".freeze, "\uFD30"=>"\u0634\u0645".freeze, - "\uFD31"=>"\u0633\u0647".freeze, "\uFD32"=>"\u0634\u0647".freeze, "\uFD33"=>"\u0637\u0645".freeze, "\uFD34"=>"\u0633\u062C".freeze, "\uFD35"=>"\u0633\u062D".freeze, "\uFD36"=>"\u0633\u062E".freeze, "\uFD37"=>"\u0634\u062C".freeze, "\uFD38"=>"\u0634\u062D".freeze, - "\uFD39"=>"\u0634\u062E".freeze, "\uFD3A"=>"\u0637\u0645".freeze, "\uFD3B"=>"\u0638\u0645".freeze, "\uFD3C"=>"\u0627\u064B".freeze, "\uFD3D"=>"\u0627\u064B".freeze, "\uFD50"=>"\u062A\u062C\u0645".freeze, "\uFD51"=>"\u062A\u062D\u062C".freeze, "\uFD52"=>"\u062A\u062D\u062C".freeze, - "\uFD53"=>"\u062A\u062D\u0645".freeze, "\uFD54"=>"\u062A\u062E\u0645".freeze, "\uFD55"=>"\u062A\u0645\u062C".freeze, "\uFD56"=>"\u062A\u0645\u062D".freeze, "\uFD57"=>"\u062A\u0645\u062E".freeze, "\uFD58"=>"\u062C\u0645\u062D".freeze, "\uFD59"=>"\u062C\u0645\u062D".freeze, "\uFD5A"=>"\u062D\u0645\u064A".freeze, - "\uFD5B"=>"\u062D\u0645\u0649".freeze, "\uFD5C"=>"\u0633\u062D\u062C".freeze, "\uFD5D"=>"\u0633\u062C\u062D".freeze, "\uFD5E"=>"\u0633\u062C\u0649".freeze, "\uFD5F"=>"\u0633\u0645\u062D".freeze, "\uFD60"=>"\u0633\u0645\u062D".freeze, "\uFD61"=>"\u0633\u0645\u062C".freeze, "\uFD62"=>"\u0633\u0645\u0645".freeze, - "\uFD63"=>"\u0633\u0645\u0645".freeze, "\uFD64"=>"\u0635\u062D\u062D".freeze, "\uFD65"=>"\u0635\u062D\u062D".freeze, "\uFD66"=>"\u0635\u0645\u0645".freeze, "\uFD67"=>"\u0634\u062D\u0645".freeze, "\uFD68"=>"\u0634\u062D\u0645".freeze, "\uFD69"=>"\u0634\u062C\u064A".freeze, "\uFD6A"=>"\u0634\u0645\u062E".freeze, - "\uFD6B"=>"\u0634\u0645\u062E".freeze, "\uFD6C"=>"\u0634\u0645\u0645".freeze, "\uFD6D"=>"\u0634\u0645\u0645".freeze, "\uFD6E"=>"\u0636\u062D\u0649".freeze, "\uFD6F"=>"\u0636\u062E\u0645".freeze, "\uFD70"=>"\u0636\u062E\u0645".freeze, "\uFD71"=>"\u0637\u0645\u062D".freeze, "\uFD72"=>"\u0637\u0645\u062D".freeze, - "\uFD73"=>"\u0637\u0645\u0645".freeze, "\uFD74"=>"\u0637\u0645\u064A".freeze, "\uFD75"=>"\u0639\u062C\u0645".freeze, "\uFD76"=>"\u0639\u0645\u0645".freeze, "\uFD77"=>"\u0639\u0645\u0645".freeze, "\uFD78"=>"\u0639\u0645\u0649".freeze, "\uFD79"=>"\u063A\u0645\u0645".freeze, "\uFD7A"=>"\u063A\u0645\u064A".freeze, - "\uFD7B"=>"\u063A\u0645\u0649".freeze, "\uFD7C"=>"\u0641\u062E\u0645".freeze, "\uFD7D"=>"\u0641\u062E\u0645".freeze, "\uFD7E"=>"\u0642\u0645\u062D".freeze, "\uFD7F"=>"\u0642\u0645\u0645".freeze, "\uFD80"=>"\u0644\u062D\u0645".freeze, "\uFD81"=>"\u0644\u062D\u064A".freeze, "\uFD82"=>"\u0644\u062D\u0649".freeze, - "\uFD83"=>"\u0644\u062C\u062C".freeze, "\uFD84"=>"\u0644\u062C\u062C".freeze, "\uFD85"=>"\u0644\u062E\u0645".freeze, "\uFD86"=>"\u0644\u062E\u0645".freeze, "\uFD87"=>"\u0644\u0645\u062D".freeze, "\uFD88"=>"\u0644\u0645\u062D".freeze, "\uFD89"=>"\u0645\u062D\u062C".freeze, "\uFD8A"=>"\u0645\u062D\u0645".freeze, - "\uFD8B"=>"\u0645\u062D\u064A".freeze, "\uFD8C"=>"\u0645\u062C\u062D".freeze, "\uFD8D"=>"\u0645\u062C\u0645".freeze, "\uFD8E"=>"\u0645\u062E\u062C".freeze, "\uFD8F"=>"\u0645\u062E\u0645".freeze, "\uFD92"=>"\u0645\u062C\u062E".freeze, "\uFD93"=>"\u0647\u0645\u062C".freeze, "\uFD94"=>"\u0647\u0645\u0645".freeze, - "\uFD95"=>"\u0646\u062D\u0645".freeze, "\uFD96"=>"\u0646\u062D\u0649".freeze, "\uFD97"=>"\u0646\u062C\u0645".freeze, "\uFD98"=>"\u0646\u062C\u0645".freeze, "\uFD99"=>"\u0646\u062C\u0649".freeze, "\uFD9A"=>"\u0646\u0645\u064A".freeze, "\uFD9B"=>"\u0646\u0645\u0649".freeze, "\uFD9C"=>"\u064A\u0645\u0645".freeze, - "\uFD9D"=>"\u064A\u0645\u0645".freeze, "\uFD9E"=>"\u0628\u062E\u064A".freeze, "\uFD9F"=>"\u062A\u062C\u064A".freeze, "\uFDA0"=>"\u062A\u062C\u0649".freeze, "\uFDA1"=>"\u062A\u062E\u064A".freeze, "\uFDA2"=>"\u062A\u062E\u0649".freeze, "\uFDA3"=>"\u062A\u0645\u064A".freeze, "\uFDA4"=>"\u062A\u0645\u0649".freeze, - "\uFDA5"=>"\u062C\u0645\u064A".freeze, "\uFDA6"=>"\u062C\u062D\u0649".freeze, "\uFDA7"=>"\u062C\u0645\u0649".freeze, "\uFDA8"=>"\u0633\u062E\u0649".freeze, "\uFDA9"=>"\u0635\u062D\u064A".freeze, "\uFDAA"=>"\u0634\u062D\u064A".freeze, "\uFDAB"=>"\u0636\u062D\u064A".freeze, "\uFDAC"=>"\u0644\u062C\u064A".freeze, - "\uFDAD"=>"\u0644\u0645\u064A".freeze, "\uFDAE"=>"\u064A\u062D\u064A".freeze, "\uFDAF"=>"\u064A\u062C\u064A".freeze, "\uFDB0"=>"\u064A\u0645\u064A".freeze, "\uFDB1"=>"\u0645\u0645\u064A".freeze, "\uFDB2"=>"\u0642\u0645\u064A".freeze, "\uFDB3"=>"\u0646\u062D\u064A".freeze, "\uFDB4"=>"\u0642\u0645\u062D".freeze, - "\uFDB5"=>"\u0644\u062D\u0645".freeze, "\uFDB6"=>"\u0639\u0645\u064A".freeze, "\uFDB7"=>"\u0643\u0645\u064A".freeze, "\uFDB8"=>"\u0646\u062C\u062D".freeze, "\uFDB9"=>"\u0645\u062E\u064A".freeze, "\uFDBA"=>"\u0644\u062C\u0645".freeze, "\uFDBB"=>"\u0643\u0645\u0645".freeze, "\uFDBC"=>"\u0644\u062C\u0645".freeze, - "\uFDBD"=>"\u0646\u062C\u062D".freeze, "\uFDBE"=>"\u062C\u062D\u064A".freeze, "\uFDBF"=>"\u062D\u062C\u064A".freeze, "\uFDC0"=>"\u0645\u062C\u064A".freeze, "\uFDC1"=>"\u0641\u0645\u064A".freeze, "\uFDC2"=>"\u0628\u062D\u064A".freeze, "\uFDC3"=>"\u0643\u0645\u0645".freeze, "\uFDC4"=>"\u0639\u062C\u0645".freeze, - "\uFDC5"=>"\u0635\u0645\u0645".freeze, "\uFDC6"=>"\u0633\u062E\u064A".freeze, "\uFDC7"=>"\u0646\u062C\u064A".freeze, "\uFDF0"=>"\u0635\u0644\u06D2".freeze, "\uFDF1"=>"\u0642\u0644\u06D2".freeze, "\uFDF2"=>"\u0627\u0644\u0644\u0647".freeze, "\uFDF3"=>"\u0627\u0643\u0628\u0631".freeze, "\uFDF4"=>"\u0645\u062D\u0645\u062F".freeze, - "\uFDF5"=>"\u0635\u0644\u0639\u0645".freeze, "\uFDF6"=>"\u0631\u0633\u0648\u0644".freeze, "\uFDF7"=>"\u0639\u0644\u064A\u0647".freeze, "\uFDF8"=>"\u0648\u0633\u0644\u0645".freeze, "\uFDF9"=>"\u0635\u0644\u0649".freeze, "\uFDFA"=>"\u0635\u0644\u0649 \u0627\u0644\u0644\u0647 \u0639\u0644\u064A\u0647 \u0648\u0633\u0644\u0645".freeze, "\uFDFB"=>"\u062C\u0644 \u062C\u0644\u0627\u0644\u0647".freeze, "\uFDFC"=>"\u0631\u06CC\u0627\u0644".freeze, - "\uFE10"=>",".freeze, "\uFE11"=>"\u3001".freeze, "\uFE12"=>"\u3002".freeze, "\uFE13"=>":".freeze, "\uFE14"=>";".freeze, "\uFE15"=>"!".freeze, "\uFE16"=>"?".freeze, "\uFE17"=>"\u3016".freeze, - "\uFE18"=>"\u3017".freeze, "\uFE19"=>"...".freeze, "\uFE30"=>"..".freeze, "\uFE31"=>"\u2014".freeze, "\uFE32"=>"\u2013".freeze, "\uFE33"=>"_".freeze, "\uFE34"=>"_".freeze, "\uFE35"=>"(".freeze, - "\uFE36"=>")".freeze, "\uFE37"=>"{".freeze, "\uFE38"=>"}".freeze, "\uFE39"=>"\u3014".freeze, "\uFE3A"=>"\u3015".freeze, "\uFE3B"=>"\u3010".freeze, "\uFE3C"=>"\u3011".freeze, "\uFE3D"=>"\u300A".freeze, - "\uFE3E"=>"\u300B".freeze, "\uFE3F"=>"\u3008".freeze, "\uFE40"=>"\u3009".freeze, "\uFE41"=>"\u300C".freeze, "\uFE42"=>"\u300D".freeze, "\uFE43"=>"\u300E".freeze, "\uFE44"=>"\u300F".freeze, "\uFE47"=>"[".freeze, - "\uFE48"=>"]".freeze, "\uFE49"=>" \u0305".freeze, "\uFE4A"=>" \u0305".freeze, "\uFE4B"=>" \u0305".freeze, "\uFE4C"=>" \u0305".freeze, "\uFE4D"=>"_".freeze, "\uFE4E"=>"_".freeze, "\uFE4F"=>"_".freeze, - "\uFE50"=>",".freeze, "\uFE51"=>"\u3001".freeze, "\uFE52"=>".".freeze, "\uFE54"=>";".freeze, "\uFE55"=>":".freeze, "\uFE56"=>"?".freeze, "\uFE57"=>"!".freeze, "\uFE58"=>"\u2014".freeze, - "\uFE59"=>"(".freeze, "\uFE5A"=>")".freeze, "\uFE5B"=>"{".freeze, "\uFE5C"=>"}".freeze, "\uFE5D"=>"\u3014".freeze, "\uFE5E"=>"\u3015".freeze, "\uFE5F"=>"#".freeze, "\uFE60"=>"&".freeze, - "\uFE61"=>"*".freeze, "\uFE62"=>"+".freeze, "\uFE63"=>"-".freeze, "\uFE64"=>"<".freeze, "\uFE65"=>">".freeze, "\uFE66"=>"=".freeze, "\uFE68"=>"\\".freeze, "\uFE69"=>"$".freeze, - "\uFE6A"=>"%".freeze, "\uFE6B"=>"@".freeze, "\uFE70"=>" \u064B".freeze, "\uFE71"=>"\u0640\u064B".freeze, "\uFE72"=>" \u064C".freeze, "\uFE74"=>" \u064D".freeze, "\uFE76"=>" \u064E".freeze, "\uFE77"=>"\u0640\u064E".freeze, - "\uFE78"=>" \u064F".freeze, "\uFE79"=>"\u0640\u064F".freeze, "\uFE7A"=>" \u0650".freeze, "\uFE7B"=>"\u0640\u0650".freeze, "\uFE7C"=>" \u0651".freeze, "\uFE7D"=>"\u0640\u0651".freeze, "\uFE7E"=>" \u0652".freeze, "\uFE7F"=>"\u0640\u0652".freeze, - "\uFE80"=>"\u0621".freeze, "\uFE81"=>"\u0622".freeze, "\uFE82"=>"\u0622".freeze, "\uFE83"=>"\u0623".freeze, "\uFE84"=>"\u0623".freeze, "\uFE85"=>"\u0624".freeze, "\uFE86"=>"\u0624".freeze, "\uFE87"=>"\u0625".freeze, - "\uFE88"=>"\u0625".freeze, "\uFE89"=>"\u0626".freeze, "\uFE8A"=>"\u0626".freeze, "\uFE8B"=>"\u0626".freeze, "\uFE8C"=>"\u0626".freeze, "\uFE8D"=>"\u0627".freeze, "\uFE8E"=>"\u0627".freeze, "\uFE8F"=>"\u0628".freeze, - "\uFE90"=>"\u0628".freeze, "\uFE91"=>"\u0628".freeze, "\uFE92"=>"\u0628".freeze, "\uFE93"=>"\u0629".freeze, "\uFE94"=>"\u0629".freeze, "\uFE95"=>"\u062A".freeze, "\uFE96"=>"\u062A".freeze, "\uFE97"=>"\u062A".freeze, - "\uFE98"=>"\u062A".freeze, "\uFE99"=>"\u062B".freeze, "\uFE9A"=>"\u062B".freeze, "\uFE9B"=>"\u062B".freeze, "\uFE9C"=>"\u062B".freeze, "\uFE9D"=>"\u062C".freeze, "\uFE9E"=>"\u062C".freeze, "\uFE9F"=>"\u062C".freeze, - "\uFEA0"=>"\u062C".freeze, "\uFEA1"=>"\u062D".freeze, "\uFEA2"=>"\u062D".freeze, "\uFEA3"=>"\u062D".freeze, "\uFEA4"=>"\u062D".freeze, "\uFEA5"=>"\u062E".freeze, "\uFEA6"=>"\u062E".freeze, "\uFEA7"=>"\u062E".freeze, - "\uFEA8"=>"\u062E".freeze, "\uFEA9"=>"\u062F".freeze, "\uFEAA"=>"\u062F".freeze, "\uFEAB"=>"\u0630".freeze, "\uFEAC"=>"\u0630".freeze, "\uFEAD"=>"\u0631".freeze, "\uFEAE"=>"\u0631".freeze, "\uFEAF"=>"\u0632".freeze, - "\uFEB0"=>"\u0632".freeze, "\uFEB1"=>"\u0633".freeze, "\uFEB2"=>"\u0633".freeze, "\uFEB3"=>"\u0633".freeze, "\uFEB4"=>"\u0633".freeze, "\uFEB5"=>"\u0634".freeze, "\uFEB6"=>"\u0634".freeze, "\uFEB7"=>"\u0634".freeze, - "\uFEB8"=>"\u0634".freeze, "\uFEB9"=>"\u0635".freeze, "\uFEBA"=>"\u0635".freeze, "\uFEBB"=>"\u0635".freeze, "\uFEBC"=>"\u0635".freeze, "\uFEBD"=>"\u0636".freeze, "\uFEBE"=>"\u0636".freeze, "\uFEBF"=>"\u0636".freeze, - "\uFEC0"=>"\u0636".freeze, "\uFEC1"=>"\u0637".freeze, "\uFEC2"=>"\u0637".freeze, "\uFEC3"=>"\u0637".freeze, "\uFEC4"=>"\u0637".freeze, "\uFEC5"=>"\u0638".freeze, "\uFEC6"=>"\u0638".freeze, "\uFEC7"=>"\u0638".freeze, - "\uFEC8"=>"\u0638".freeze, "\uFEC9"=>"\u0639".freeze, "\uFECA"=>"\u0639".freeze, "\uFECB"=>"\u0639".freeze, "\uFECC"=>"\u0639".freeze, "\uFECD"=>"\u063A".freeze, "\uFECE"=>"\u063A".freeze, "\uFECF"=>"\u063A".freeze, - "\uFED0"=>"\u063A".freeze, "\uFED1"=>"\u0641".freeze, "\uFED2"=>"\u0641".freeze, "\uFED3"=>"\u0641".freeze, "\uFED4"=>"\u0641".freeze, "\uFED5"=>"\u0642".freeze, "\uFED6"=>"\u0642".freeze, "\uFED7"=>"\u0642".freeze, - "\uFED8"=>"\u0642".freeze, "\uFED9"=>"\u0643".freeze, "\uFEDA"=>"\u0643".freeze, "\uFEDB"=>"\u0643".freeze, "\uFEDC"=>"\u0643".freeze, "\uFEDD"=>"\u0644".freeze, "\uFEDE"=>"\u0644".freeze, "\uFEDF"=>"\u0644".freeze, - "\uFEE0"=>"\u0644".freeze, "\uFEE1"=>"\u0645".freeze, "\uFEE2"=>"\u0645".freeze, "\uFEE3"=>"\u0645".freeze, "\uFEE4"=>"\u0645".freeze, "\uFEE5"=>"\u0646".freeze, "\uFEE6"=>"\u0646".freeze, "\uFEE7"=>"\u0646".freeze, - "\uFEE8"=>"\u0646".freeze, "\uFEE9"=>"\u0647".freeze, "\uFEEA"=>"\u0647".freeze, "\uFEEB"=>"\u0647".freeze, "\uFEEC"=>"\u0647".freeze, "\uFEED"=>"\u0648".freeze, "\uFEEE"=>"\u0648".freeze, "\uFEEF"=>"\u0649".freeze, - "\uFEF0"=>"\u0649".freeze, "\uFEF1"=>"\u064A".freeze, "\uFEF2"=>"\u064A".freeze, "\uFEF3"=>"\u064A".freeze, "\uFEF4"=>"\u064A".freeze, "\uFEF5"=>"\u0644\u0622".freeze, "\uFEF6"=>"\u0644\u0622".freeze, "\uFEF7"=>"\u0644\u0623".freeze, - "\uFEF8"=>"\u0644\u0623".freeze, "\uFEF9"=>"\u0644\u0625".freeze, "\uFEFA"=>"\u0644\u0625".freeze, "\uFEFB"=>"\u0644\u0627".freeze, "\uFEFC"=>"\u0644\u0627".freeze, "\uFF01"=>"!".freeze, "\uFF02"=>"\"".freeze, "\uFF03"=>"#".freeze, - "\uFF04"=>"$".freeze, "\uFF05"=>"%".freeze, "\uFF06"=>"&".freeze, "\uFF07"=>"'".freeze, "\uFF08"=>"(".freeze, "\uFF09"=>")".freeze, "\uFF0A"=>"*".freeze, "\uFF0B"=>"+".freeze, - "\uFF0C"=>",".freeze, "\uFF0D"=>"-".freeze, "\uFF0E"=>".".freeze, "\uFF0F"=>"/".freeze, "\uFF10"=>"0".freeze, "\uFF11"=>"1".freeze, "\uFF12"=>"2".freeze, "\uFF13"=>"3".freeze, - "\uFF14"=>"4".freeze, "\uFF15"=>"5".freeze, "\uFF16"=>"6".freeze, "\uFF17"=>"7".freeze, "\uFF18"=>"8".freeze, "\uFF19"=>"9".freeze, "\uFF1A"=>":".freeze, "\uFF1B"=>";".freeze, - "\uFF1C"=>"<".freeze, "\uFF1D"=>"=".freeze, "\uFF1E"=>">".freeze, "\uFF1F"=>"?".freeze, "\uFF20"=>"@".freeze, "\uFF21"=>"A".freeze, "\uFF22"=>"B".freeze, "\uFF23"=>"C".freeze, - "\uFF24"=>"D".freeze, "\uFF25"=>"E".freeze, "\uFF26"=>"F".freeze, "\uFF27"=>"G".freeze, "\uFF28"=>"H".freeze, "\uFF29"=>"I".freeze, "\uFF2A"=>"J".freeze, "\uFF2B"=>"K".freeze, - "\uFF2C"=>"L".freeze, "\uFF2D"=>"M".freeze, "\uFF2E"=>"N".freeze, "\uFF2F"=>"O".freeze, "\uFF30"=>"P".freeze, "\uFF31"=>"Q".freeze, "\uFF32"=>"R".freeze, "\uFF33"=>"S".freeze, - "\uFF34"=>"T".freeze, "\uFF35"=>"U".freeze, "\uFF36"=>"V".freeze, "\uFF37"=>"W".freeze, "\uFF38"=>"X".freeze, "\uFF39"=>"Y".freeze, "\uFF3A"=>"Z".freeze, "\uFF3B"=>"[".freeze, - "\uFF3C"=>"\\".freeze, "\uFF3D"=>"]".freeze, "\uFF3E"=>"^".freeze, "\uFF3F"=>"_".freeze, "\uFF40"=>"`".freeze, "\uFF41"=>"a".freeze, "\uFF42"=>"b".freeze, "\uFF43"=>"c".freeze, - "\uFF44"=>"d".freeze, "\uFF45"=>"e".freeze, "\uFF46"=>"f".freeze, "\uFF47"=>"g".freeze, "\uFF48"=>"h".freeze, "\uFF49"=>"i".freeze, "\uFF4A"=>"j".freeze, "\uFF4B"=>"k".freeze, - "\uFF4C"=>"l".freeze, "\uFF4D"=>"m".freeze, "\uFF4E"=>"n".freeze, "\uFF4F"=>"o".freeze, "\uFF50"=>"p".freeze, "\uFF51"=>"q".freeze, "\uFF52"=>"r".freeze, "\uFF53"=>"s".freeze, - "\uFF54"=>"t".freeze, "\uFF55"=>"u".freeze, "\uFF56"=>"v".freeze, "\uFF57"=>"w".freeze, "\uFF58"=>"x".freeze, "\uFF59"=>"y".freeze, "\uFF5A"=>"z".freeze, "\uFF5B"=>"{".freeze, - "\uFF5C"=>"|".freeze, "\uFF5D"=>"}".freeze, "\uFF5E"=>"~".freeze, "\uFF5F"=>"\u2985".freeze, "\uFF60"=>"\u2986".freeze, "\uFF61"=>"\u3002".freeze, "\uFF62"=>"\u300C".freeze, "\uFF63"=>"\u300D".freeze, - "\uFF64"=>"\u3001".freeze, "\uFF65"=>"\u30FB".freeze, "\uFF66"=>"\u30F2".freeze, "\uFF67"=>"\u30A1".freeze, "\uFF68"=>"\u30A3".freeze, "\uFF69"=>"\u30A5".freeze, "\uFF6A"=>"\u30A7".freeze, "\uFF6B"=>"\u30A9".freeze, - "\uFF6C"=>"\u30E3".freeze, "\uFF6D"=>"\u30E5".freeze, "\uFF6E"=>"\u30E7".freeze, "\uFF6F"=>"\u30C3".freeze, "\uFF70"=>"\u30FC".freeze, "\uFF71"=>"\u30A2".freeze, "\uFF72"=>"\u30A4".freeze, "\uFF73"=>"\u30A6".freeze, - "\uFF74"=>"\u30A8".freeze, "\uFF75"=>"\u30AA".freeze, "\uFF76"=>"\u30AB".freeze, "\uFF77"=>"\u30AD".freeze, "\uFF78"=>"\u30AF".freeze, "\uFF79"=>"\u30B1".freeze, "\uFF7A"=>"\u30B3".freeze, "\uFF7B"=>"\u30B5".freeze, - "\uFF7C"=>"\u30B7".freeze, "\uFF7D"=>"\u30B9".freeze, "\uFF7E"=>"\u30BB".freeze, "\uFF7F"=>"\u30BD".freeze, "\uFF80"=>"\u30BF".freeze, "\uFF81"=>"\u30C1".freeze, "\uFF82"=>"\u30C4".freeze, "\uFF83"=>"\u30C6".freeze, - "\uFF84"=>"\u30C8".freeze, "\uFF85"=>"\u30CA".freeze, "\uFF86"=>"\u30CB".freeze, "\uFF87"=>"\u30CC".freeze, "\uFF88"=>"\u30CD".freeze, "\uFF89"=>"\u30CE".freeze, "\uFF8A"=>"\u30CF".freeze, "\uFF8B"=>"\u30D2".freeze, - "\uFF8C"=>"\u30D5".freeze, "\uFF8D"=>"\u30D8".freeze, "\uFF8E"=>"\u30DB".freeze, "\uFF8F"=>"\u30DE".freeze, "\uFF90"=>"\u30DF".freeze, "\uFF91"=>"\u30E0".freeze, "\uFF92"=>"\u30E1".freeze, "\uFF93"=>"\u30E2".freeze, - "\uFF94"=>"\u30E4".freeze, "\uFF95"=>"\u30E6".freeze, "\uFF96"=>"\u30E8".freeze, "\uFF97"=>"\u30E9".freeze, "\uFF98"=>"\u30EA".freeze, "\uFF99"=>"\u30EB".freeze, "\uFF9A"=>"\u30EC".freeze, "\uFF9B"=>"\u30ED".freeze, - "\uFF9C"=>"\u30EF".freeze, "\uFF9D"=>"\u30F3".freeze, "\uFF9E"=>"\u3099".freeze, "\uFF9F"=>"\u309A".freeze, "\uFFA0"=>"\u1160".freeze, "\uFFA1"=>"\u1100".freeze, "\uFFA2"=>"\u1101".freeze, "\uFFA3"=>"\u11AA".freeze, - "\uFFA4"=>"\u1102".freeze, "\uFFA5"=>"\u11AC".freeze, "\uFFA6"=>"\u11AD".freeze, "\uFFA7"=>"\u1103".freeze, "\uFFA8"=>"\u1104".freeze, "\uFFA9"=>"\u1105".freeze, "\uFFAA"=>"\u11B0".freeze, "\uFFAB"=>"\u11B1".freeze, - "\uFFAC"=>"\u11B2".freeze, "\uFFAD"=>"\u11B3".freeze, "\uFFAE"=>"\u11B4".freeze, "\uFFAF"=>"\u11B5".freeze, "\uFFB0"=>"\u111A".freeze, "\uFFB1"=>"\u1106".freeze, "\uFFB2"=>"\u1107".freeze, "\uFFB3"=>"\u1108".freeze, - "\uFFB4"=>"\u1121".freeze, "\uFFB5"=>"\u1109".freeze, "\uFFB6"=>"\u110A".freeze, "\uFFB7"=>"\u110B".freeze, "\uFFB8"=>"\u110C".freeze, "\uFFB9"=>"\u110D".freeze, "\uFFBA"=>"\u110E".freeze, "\uFFBB"=>"\u110F".freeze, - "\uFFBC"=>"\u1110".freeze, "\uFFBD"=>"\u1111".freeze, "\uFFBE"=>"\u1112".freeze, "\uFFC2"=>"\u1161".freeze, "\uFFC3"=>"\u1162".freeze, "\uFFC4"=>"\u1163".freeze, "\uFFC5"=>"\u1164".freeze, "\uFFC6"=>"\u1165".freeze, - "\uFFC7"=>"\u1166".freeze, "\uFFCA"=>"\u1167".freeze, "\uFFCB"=>"\u1168".freeze, "\uFFCC"=>"\u1169".freeze, "\uFFCD"=>"\u116A".freeze, "\uFFCE"=>"\u116B".freeze, "\uFFCF"=>"\u116C".freeze, "\uFFD2"=>"\u116D".freeze, - "\uFFD3"=>"\u116E".freeze, "\uFFD4"=>"\u116F".freeze, "\uFFD5"=>"\u1170".freeze, "\uFFD6"=>"\u1171".freeze, "\uFFD7"=>"\u1172".freeze, "\uFFDA"=>"\u1173".freeze, "\uFFDB"=>"\u1174".freeze, "\uFFDC"=>"\u1175".freeze, - "\uFFE0"=>"\u00A2".freeze, "\uFFE1"=>"\u00A3".freeze, "\uFFE2"=>"\u00AC".freeze, "\uFFE3"=>" \u0304".freeze, "\uFFE4"=>"\u00A6".freeze, "\uFFE5"=>"\u00A5".freeze, "\uFFE6"=>"\u20A9".freeze, "\uFFE8"=>"\u2502".freeze, - "\uFFE9"=>"\u2190".freeze, "\uFFEA"=>"\u2191".freeze, "\uFFEB"=>"\u2192".freeze, "\uFFEC"=>"\u2193".freeze, "\uFFED"=>"\u25A0".freeze, "\uFFEE"=>"\u25CB".freeze, "\u{1D400}"=>"A".freeze, "\u{1D401}"=>"B".freeze, - "\u{1D402}"=>"C".freeze, "\u{1D403}"=>"D".freeze, "\u{1D404}"=>"E".freeze, "\u{1D405}"=>"F".freeze, "\u{1D406}"=>"G".freeze, "\u{1D407}"=>"H".freeze, "\u{1D408}"=>"I".freeze, "\u{1D409}"=>"J".freeze, - "\u{1D40A}"=>"K".freeze, "\u{1D40B}"=>"L".freeze, "\u{1D40C}"=>"M".freeze, "\u{1D40D}"=>"N".freeze, "\u{1D40E}"=>"O".freeze, "\u{1D40F}"=>"P".freeze, "\u{1D410}"=>"Q".freeze, "\u{1D411}"=>"R".freeze, - "\u{1D412}"=>"S".freeze, "\u{1D413}"=>"T".freeze, "\u{1D414}"=>"U".freeze, "\u{1D415}"=>"V".freeze, "\u{1D416}"=>"W".freeze, "\u{1D417}"=>"X".freeze, "\u{1D418}"=>"Y".freeze, "\u{1D419}"=>"Z".freeze, - "\u{1D41A}"=>"a".freeze, "\u{1D41B}"=>"b".freeze, "\u{1D41C}"=>"c".freeze, "\u{1D41D}"=>"d".freeze, "\u{1D41E}"=>"e".freeze, "\u{1D41F}"=>"f".freeze, "\u{1D420}"=>"g".freeze, "\u{1D421}"=>"h".freeze, - "\u{1D422}"=>"i".freeze, "\u{1D423}"=>"j".freeze, "\u{1D424}"=>"k".freeze, "\u{1D425}"=>"l".freeze, "\u{1D426}"=>"m".freeze, "\u{1D427}"=>"n".freeze, "\u{1D428}"=>"o".freeze, "\u{1D429}"=>"p".freeze, - "\u{1D42A}"=>"q".freeze, "\u{1D42B}"=>"r".freeze, "\u{1D42C}"=>"s".freeze, "\u{1D42D}"=>"t".freeze, "\u{1D42E}"=>"u".freeze, "\u{1D42F}"=>"v".freeze, "\u{1D430}"=>"w".freeze, "\u{1D431}"=>"x".freeze, - "\u{1D432}"=>"y".freeze, "\u{1D433}"=>"z".freeze, "\u{1D434}"=>"A".freeze, "\u{1D435}"=>"B".freeze, "\u{1D436}"=>"C".freeze, "\u{1D437}"=>"D".freeze, "\u{1D438}"=>"E".freeze, "\u{1D439}"=>"F".freeze, - "\u{1D43A}"=>"G".freeze, "\u{1D43B}"=>"H".freeze, "\u{1D43C}"=>"I".freeze, "\u{1D43D}"=>"J".freeze, "\u{1D43E}"=>"K".freeze, "\u{1D43F}"=>"L".freeze, "\u{1D440}"=>"M".freeze, "\u{1D441}"=>"N".freeze, - "\u{1D442}"=>"O".freeze, "\u{1D443}"=>"P".freeze, "\u{1D444}"=>"Q".freeze, "\u{1D445}"=>"R".freeze, "\u{1D446}"=>"S".freeze, "\u{1D447}"=>"T".freeze, "\u{1D448}"=>"U".freeze, "\u{1D449}"=>"V".freeze, - "\u{1D44A}"=>"W".freeze, "\u{1D44B}"=>"X".freeze, "\u{1D44C}"=>"Y".freeze, "\u{1D44D}"=>"Z".freeze, "\u{1D44E}"=>"a".freeze, "\u{1D44F}"=>"b".freeze, "\u{1D450}"=>"c".freeze, "\u{1D451}"=>"d".freeze, - "\u{1D452}"=>"e".freeze, "\u{1D453}"=>"f".freeze, "\u{1D454}"=>"g".freeze, "\u{1D456}"=>"i".freeze, "\u{1D457}"=>"j".freeze, "\u{1D458}"=>"k".freeze, "\u{1D459}"=>"l".freeze, "\u{1D45A}"=>"m".freeze, - "\u{1D45B}"=>"n".freeze, "\u{1D45C}"=>"o".freeze, "\u{1D45D}"=>"p".freeze, "\u{1D45E}"=>"q".freeze, "\u{1D45F}"=>"r".freeze, "\u{1D460}"=>"s".freeze, "\u{1D461}"=>"t".freeze, "\u{1D462}"=>"u".freeze, - "\u{1D463}"=>"v".freeze, "\u{1D464}"=>"w".freeze, "\u{1D465}"=>"x".freeze, "\u{1D466}"=>"y".freeze, "\u{1D467}"=>"z".freeze, "\u{1D468}"=>"A".freeze, "\u{1D469}"=>"B".freeze, "\u{1D46A}"=>"C".freeze, - "\u{1D46B}"=>"D".freeze, "\u{1D46C}"=>"E".freeze, "\u{1D46D}"=>"F".freeze, "\u{1D46E}"=>"G".freeze, "\u{1D46F}"=>"H".freeze, "\u{1D470}"=>"I".freeze, "\u{1D471}"=>"J".freeze, "\u{1D472}"=>"K".freeze, - "\u{1D473}"=>"L".freeze, "\u{1D474}"=>"M".freeze, "\u{1D475}"=>"N".freeze, "\u{1D476}"=>"O".freeze, "\u{1D477}"=>"P".freeze, "\u{1D478}"=>"Q".freeze, "\u{1D479}"=>"R".freeze, "\u{1D47A}"=>"S".freeze, - "\u{1D47B}"=>"T".freeze, "\u{1D47C}"=>"U".freeze, "\u{1D47D}"=>"V".freeze, "\u{1D47E}"=>"W".freeze, "\u{1D47F}"=>"X".freeze, "\u{1D480}"=>"Y".freeze, "\u{1D481}"=>"Z".freeze, "\u{1D482}"=>"a".freeze, - "\u{1D483}"=>"b".freeze, "\u{1D484}"=>"c".freeze, "\u{1D485}"=>"d".freeze, "\u{1D486}"=>"e".freeze, "\u{1D487}"=>"f".freeze, "\u{1D488}"=>"g".freeze, "\u{1D489}"=>"h".freeze, "\u{1D48A}"=>"i".freeze, - "\u{1D48B}"=>"j".freeze, "\u{1D48C}"=>"k".freeze, "\u{1D48D}"=>"l".freeze, "\u{1D48E}"=>"m".freeze, "\u{1D48F}"=>"n".freeze, "\u{1D490}"=>"o".freeze, "\u{1D491}"=>"p".freeze, "\u{1D492}"=>"q".freeze, - "\u{1D493}"=>"r".freeze, "\u{1D494}"=>"s".freeze, "\u{1D495}"=>"t".freeze, "\u{1D496}"=>"u".freeze, "\u{1D497}"=>"v".freeze, "\u{1D498}"=>"w".freeze, "\u{1D499}"=>"x".freeze, "\u{1D49A}"=>"y".freeze, - "\u{1D49B}"=>"z".freeze, "\u{1D49C}"=>"A".freeze, "\u{1D49E}"=>"C".freeze, "\u{1D49F}"=>"D".freeze, "\u{1D4A2}"=>"G".freeze, "\u{1D4A5}"=>"J".freeze, "\u{1D4A6}"=>"K".freeze, "\u{1D4A9}"=>"N".freeze, - "\u{1D4AA}"=>"O".freeze, "\u{1D4AB}"=>"P".freeze, "\u{1D4AC}"=>"Q".freeze, "\u{1D4AE}"=>"S".freeze, "\u{1D4AF}"=>"T".freeze, "\u{1D4B0}"=>"U".freeze, "\u{1D4B1}"=>"V".freeze, "\u{1D4B2}"=>"W".freeze, - "\u{1D4B3}"=>"X".freeze, "\u{1D4B4}"=>"Y".freeze, "\u{1D4B5}"=>"Z".freeze, "\u{1D4B6}"=>"a".freeze, "\u{1D4B7}"=>"b".freeze, "\u{1D4B8}"=>"c".freeze, "\u{1D4B9}"=>"d".freeze, "\u{1D4BB}"=>"f".freeze, - "\u{1D4BD}"=>"h".freeze, "\u{1D4BE}"=>"i".freeze, "\u{1D4BF}"=>"j".freeze, "\u{1D4C0}"=>"k".freeze, "\u{1D4C1}"=>"l".freeze, "\u{1D4C2}"=>"m".freeze, "\u{1D4C3}"=>"n".freeze, "\u{1D4C5}"=>"p".freeze, - "\u{1D4C6}"=>"q".freeze, "\u{1D4C7}"=>"r".freeze, "\u{1D4C8}"=>"s".freeze, "\u{1D4C9}"=>"t".freeze, "\u{1D4CA}"=>"u".freeze, "\u{1D4CB}"=>"v".freeze, "\u{1D4CC}"=>"w".freeze, "\u{1D4CD}"=>"x".freeze, - "\u{1D4CE}"=>"y".freeze, "\u{1D4CF}"=>"z".freeze, "\u{1D4D0}"=>"A".freeze, "\u{1D4D1}"=>"B".freeze, "\u{1D4D2}"=>"C".freeze, "\u{1D4D3}"=>"D".freeze, "\u{1D4D4}"=>"E".freeze, "\u{1D4D5}"=>"F".freeze, - "\u{1D4D6}"=>"G".freeze, "\u{1D4D7}"=>"H".freeze, "\u{1D4D8}"=>"I".freeze, "\u{1D4D9}"=>"J".freeze, "\u{1D4DA}"=>"K".freeze, "\u{1D4DB}"=>"L".freeze, "\u{1D4DC}"=>"M".freeze, "\u{1D4DD}"=>"N".freeze, - "\u{1D4DE}"=>"O".freeze, "\u{1D4DF}"=>"P".freeze, "\u{1D4E0}"=>"Q".freeze, "\u{1D4E1}"=>"R".freeze, "\u{1D4E2}"=>"S".freeze, "\u{1D4E3}"=>"T".freeze, "\u{1D4E4}"=>"U".freeze, "\u{1D4E5}"=>"V".freeze, - "\u{1D4E6}"=>"W".freeze, "\u{1D4E7}"=>"X".freeze, "\u{1D4E8}"=>"Y".freeze, "\u{1D4E9}"=>"Z".freeze, "\u{1D4EA}"=>"a".freeze, "\u{1D4EB}"=>"b".freeze, "\u{1D4EC}"=>"c".freeze, "\u{1D4ED}"=>"d".freeze, - "\u{1D4EE}"=>"e".freeze, "\u{1D4EF}"=>"f".freeze, "\u{1D4F0}"=>"g".freeze, "\u{1D4F1}"=>"h".freeze, "\u{1D4F2}"=>"i".freeze, "\u{1D4F3}"=>"j".freeze, "\u{1D4F4}"=>"k".freeze, "\u{1D4F5}"=>"l".freeze, - "\u{1D4F6}"=>"m".freeze, "\u{1D4F7}"=>"n".freeze, "\u{1D4F8}"=>"o".freeze, "\u{1D4F9}"=>"p".freeze, "\u{1D4FA}"=>"q".freeze, "\u{1D4FB}"=>"r".freeze, "\u{1D4FC}"=>"s".freeze, "\u{1D4FD}"=>"t".freeze, - "\u{1D4FE}"=>"u".freeze, "\u{1D4FF}"=>"v".freeze, "\u{1D500}"=>"w".freeze, "\u{1D501}"=>"x".freeze, "\u{1D502}"=>"y".freeze, "\u{1D503}"=>"z".freeze, "\u{1D504}"=>"A".freeze, "\u{1D505}"=>"B".freeze, - "\u{1D507}"=>"D".freeze, "\u{1D508}"=>"E".freeze, "\u{1D509}"=>"F".freeze, "\u{1D50A}"=>"G".freeze, "\u{1D50D}"=>"J".freeze, "\u{1D50E}"=>"K".freeze, "\u{1D50F}"=>"L".freeze, "\u{1D510}"=>"M".freeze, - "\u{1D511}"=>"N".freeze, "\u{1D512}"=>"O".freeze, "\u{1D513}"=>"P".freeze, "\u{1D514}"=>"Q".freeze, "\u{1D516}"=>"S".freeze, "\u{1D517}"=>"T".freeze, "\u{1D518}"=>"U".freeze, "\u{1D519}"=>"V".freeze, - "\u{1D51A}"=>"W".freeze, "\u{1D51B}"=>"X".freeze, "\u{1D51C}"=>"Y".freeze, "\u{1D51E}"=>"a".freeze, "\u{1D51F}"=>"b".freeze, "\u{1D520}"=>"c".freeze, "\u{1D521}"=>"d".freeze, "\u{1D522}"=>"e".freeze, - "\u{1D523}"=>"f".freeze, "\u{1D524}"=>"g".freeze, "\u{1D525}"=>"h".freeze, "\u{1D526}"=>"i".freeze, "\u{1D527}"=>"j".freeze, "\u{1D528}"=>"k".freeze, "\u{1D529}"=>"l".freeze, "\u{1D52A}"=>"m".freeze, - "\u{1D52B}"=>"n".freeze, "\u{1D52C}"=>"o".freeze, "\u{1D52D}"=>"p".freeze, "\u{1D52E}"=>"q".freeze, "\u{1D52F}"=>"r".freeze, "\u{1D530}"=>"s".freeze, "\u{1D531}"=>"t".freeze, "\u{1D532}"=>"u".freeze, - "\u{1D533}"=>"v".freeze, "\u{1D534}"=>"w".freeze, "\u{1D535}"=>"x".freeze, "\u{1D536}"=>"y".freeze, "\u{1D537}"=>"z".freeze, "\u{1D538}"=>"A".freeze, "\u{1D539}"=>"B".freeze, "\u{1D53B}"=>"D".freeze, - "\u{1D53C}"=>"E".freeze, "\u{1D53D}"=>"F".freeze, "\u{1D53E}"=>"G".freeze, "\u{1D540}"=>"I".freeze, "\u{1D541}"=>"J".freeze, "\u{1D542}"=>"K".freeze, "\u{1D543}"=>"L".freeze, "\u{1D544}"=>"M".freeze, - "\u{1D546}"=>"O".freeze, "\u{1D54A}"=>"S".freeze, "\u{1D54B}"=>"T".freeze, "\u{1D54C}"=>"U".freeze, "\u{1D54D}"=>"V".freeze, "\u{1D54E}"=>"W".freeze, "\u{1D54F}"=>"X".freeze, "\u{1D550}"=>"Y".freeze, - "\u{1D552}"=>"a".freeze, "\u{1D553}"=>"b".freeze, "\u{1D554}"=>"c".freeze, "\u{1D555}"=>"d".freeze, "\u{1D556}"=>"e".freeze, "\u{1D557}"=>"f".freeze, "\u{1D558}"=>"g".freeze, "\u{1D559}"=>"h".freeze, - "\u{1D55A}"=>"i".freeze, "\u{1D55B}"=>"j".freeze, "\u{1D55C}"=>"k".freeze, "\u{1D55D}"=>"l".freeze, "\u{1D55E}"=>"m".freeze, "\u{1D55F}"=>"n".freeze, "\u{1D560}"=>"o".freeze, "\u{1D561}"=>"p".freeze, - "\u{1D562}"=>"q".freeze, "\u{1D563}"=>"r".freeze, "\u{1D564}"=>"s".freeze, "\u{1D565}"=>"t".freeze, "\u{1D566}"=>"u".freeze, "\u{1D567}"=>"v".freeze, "\u{1D568}"=>"w".freeze, "\u{1D569}"=>"x".freeze, - "\u{1D56A}"=>"y".freeze, "\u{1D56B}"=>"z".freeze, "\u{1D56C}"=>"A".freeze, "\u{1D56D}"=>"B".freeze, "\u{1D56E}"=>"C".freeze, "\u{1D56F}"=>"D".freeze, "\u{1D570}"=>"E".freeze, "\u{1D571}"=>"F".freeze, - "\u{1D572}"=>"G".freeze, "\u{1D573}"=>"H".freeze, "\u{1D574}"=>"I".freeze, "\u{1D575}"=>"J".freeze, "\u{1D576}"=>"K".freeze, "\u{1D577}"=>"L".freeze, "\u{1D578}"=>"M".freeze, "\u{1D579}"=>"N".freeze, - "\u{1D57A}"=>"O".freeze, "\u{1D57B}"=>"P".freeze, "\u{1D57C}"=>"Q".freeze, "\u{1D57D}"=>"R".freeze, "\u{1D57E}"=>"S".freeze, "\u{1D57F}"=>"T".freeze, "\u{1D580}"=>"U".freeze, "\u{1D581}"=>"V".freeze, - "\u{1D582}"=>"W".freeze, "\u{1D583}"=>"X".freeze, "\u{1D584}"=>"Y".freeze, "\u{1D585}"=>"Z".freeze, "\u{1D586}"=>"a".freeze, "\u{1D587}"=>"b".freeze, "\u{1D588}"=>"c".freeze, "\u{1D589}"=>"d".freeze, - "\u{1D58A}"=>"e".freeze, "\u{1D58B}"=>"f".freeze, "\u{1D58C}"=>"g".freeze, "\u{1D58D}"=>"h".freeze, "\u{1D58E}"=>"i".freeze, "\u{1D58F}"=>"j".freeze, "\u{1D590}"=>"k".freeze, "\u{1D591}"=>"l".freeze, - "\u{1D592}"=>"m".freeze, "\u{1D593}"=>"n".freeze, "\u{1D594}"=>"o".freeze, "\u{1D595}"=>"p".freeze, "\u{1D596}"=>"q".freeze, "\u{1D597}"=>"r".freeze, "\u{1D598}"=>"s".freeze, "\u{1D599}"=>"t".freeze, - "\u{1D59A}"=>"u".freeze, "\u{1D59B}"=>"v".freeze, "\u{1D59C}"=>"w".freeze, "\u{1D59D}"=>"x".freeze, "\u{1D59E}"=>"y".freeze, "\u{1D59F}"=>"z".freeze, "\u{1D5A0}"=>"A".freeze, "\u{1D5A1}"=>"B".freeze, - "\u{1D5A2}"=>"C".freeze, "\u{1D5A3}"=>"D".freeze, "\u{1D5A4}"=>"E".freeze, "\u{1D5A5}"=>"F".freeze, "\u{1D5A6}"=>"G".freeze, "\u{1D5A7}"=>"H".freeze, "\u{1D5A8}"=>"I".freeze, "\u{1D5A9}"=>"J".freeze, - "\u{1D5AA}"=>"K".freeze, "\u{1D5AB}"=>"L".freeze, "\u{1D5AC}"=>"M".freeze, "\u{1D5AD}"=>"N".freeze, "\u{1D5AE}"=>"O".freeze, "\u{1D5AF}"=>"P".freeze, "\u{1D5B0}"=>"Q".freeze, "\u{1D5B1}"=>"R".freeze, - "\u{1D5B2}"=>"S".freeze, "\u{1D5B3}"=>"T".freeze, "\u{1D5B4}"=>"U".freeze, "\u{1D5B5}"=>"V".freeze, "\u{1D5B6}"=>"W".freeze, "\u{1D5B7}"=>"X".freeze, "\u{1D5B8}"=>"Y".freeze, "\u{1D5B9}"=>"Z".freeze, - "\u{1D5BA}"=>"a".freeze, "\u{1D5BB}"=>"b".freeze, "\u{1D5BC}"=>"c".freeze, "\u{1D5BD}"=>"d".freeze, "\u{1D5BE}"=>"e".freeze, "\u{1D5BF}"=>"f".freeze, "\u{1D5C0}"=>"g".freeze, "\u{1D5C1}"=>"h".freeze, - "\u{1D5C2}"=>"i".freeze, "\u{1D5C3}"=>"j".freeze, "\u{1D5C4}"=>"k".freeze, "\u{1D5C5}"=>"l".freeze, "\u{1D5C6}"=>"m".freeze, "\u{1D5C7}"=>"n".freeze, "\u{1D5C8}"=>"o".freeze, "\u{1D5C9}"=>"p".freeze, - "\u{1D5CA}"=>"q".freeze, "\u{1D5CB}"=>"r".freeze, "\u{1D5CC}"=>"s".freeze, "\u{1D5CD}"=>"t".freeze, "\u{1D5CE}"=>"u".freeze, "\u{1D5CF}"=>"v".freeze, "\u{1D5D0}"=>"w".freeze, "\u{1D5D1}"=>"x".freeze, - "\u{1D5D2}"=>"y".freeze, "\u{1D5D3}"=>"z".freeze, "\u{1D5D4}"=>"A".freeze, "\u{1D5D5}"=>"B".freeze, "\u{1D5D6}"=>"C".freeze, "\u{1D5D7}"=>"D".freeze, "\u{1D5D8}"=>"E".freeze, "\u{1D5D9}"=>"F".freeze, - "\u{1D5DA}"=>"G".freeze, "\u{1D5DB}"=>"H".freeze, "\u{1D5DC}"=>"I".freeze, "\u{1D5DD}"=>"J".freeze, "\u{1D5DE}"=>"K".freeze, "\u{1D5DF}"=>"L".freeze, "\u{1D5E0}"=>"M".freeze, "\u{1D5E1}"=>"N".freeze, - "\u{1D5E2}"=>"O".freeze, "\u{1D5E3}"=>"P".freeze, "\u{1D5E4}"=>"Q".freeze, "\u{1D5E5}"=>"R".freeze, "\u{1D5E6}"=>"S".freeze, "\u{1D5E7}"=>"T".freeze, "\u{1D5E8}"=>"U".freeze, "\u{1D5E9}"=>"V".freeze, - "\u{1D5EA}"=>"W".freeze, "\u{1D5EB}"=>"X".freeze, "\u{1D5EC}"=>"Y".freeze, "\u{1D5ED}"=>"Z".freeze, "\u{1D5EE}"=>"a".freeze, "\u{1D5EF}"=>"b".freeze, "\u{1D5F0}"=>"c".freeze, "\u{1D5F1}"=>"d".freeze, - "\u{1D5F2}"=>"e".freeze, "\u{1D5F3}"=>"f".freeze, "\u{1D5F4}"=>"g".freeze, "\u{1D5F5}"=>"h".freeze, "\u{1D5F6}"=>"i".freeze, "\u{1D5F7}"=>"j".freeze, "\u{1D5F8}"=>"k".freeze, "\u{1D5F9}"=>"l".freeze, - "\u{1D5FA}"=>"m".freeze, "\u{1D5FB}"=>"n".freeze, "\u{1D5FC}"=>"o".freeze, "\u{1D5FD}"=>"p".freeze, "\u{1D5FE}"=>"q".freeze, "\u{1D5FF}"=>"r".freeze, "\u{1D600}"=>"s".freeze, "\u{1D601}"=>"t".freeze, - "\u{1D602}"=>"u".freeze, "\u{1D603}"=>"v".freeze, "\u{1D604}"=>"w".freeze, "\u{1D605}"=>"x".freeze, "\u{1D606}"=>"y".freeze, "\u{1D607}"=>"z".freeze, "\u{1D608}"=>"A".freeze, "\u{1D609}"=>"B".freeze, - "\u{1D60A}"=>"C".freeze, "\u{1D60B}"=>"D".freeze, "\u{1D60C}"=>"E".freeze, "\u{1D60D}"=>"F".freeze, "\u{1D60E}"=>"G".freeze, "\u{1D60F}"=>"H".freeze, "\u{1D610}"=>"I".freeze, "\u{1D611}"=>"J".freeze, - "\u{1D612}"=>"K".freeze, "\u{1D613}"=>"L".freeze, "\u{1D614}"=>"M".freeze, "\u{1D615}"=>"N".freeze, "\u{1D616}"=>"O".freeze, "\u{1D617}"=>"P".freeze, "\u{1D618}"=>"Q".freeze, "\u{1D619}"=>"R".freeze, - "\u{1D61A}"=>"S".freeze, "\u{1D61B}"=>"T".freeze, "\u{1D61C}"=>"U".freeze, "\u{1D61D}"=>"V".freeze, "\u{1D61E}"=>"W".freeze, "\u{1D61F}"=>"X".freeze, "\u{1D620}"=>"Y".freeze, "\u{1D621}"=>"Z".freeze, - "\u{1D622}"=>"a".freeze, "\u{1D623}"=>"b".freeze, "\u{1D624}"=>"c".freeze, "\u{1D625}"=>"d".freeze, "\u{1D626}"=>"e".freeze, "\u{1D627}"=>"f".freeze, "\u{1D628}"=>"g".freeze, "\u{1D629}"=>"h".freeze, - "\u{1D62A}"=>"i".freeze, "\u{1D62B}"=>"j".freeze, "\u{1D62C}"=>"k".freeze, "\u{1D62D}"=>"l".freeze, "\u{1D62E}"=>"m".freeze, "\u{1D62F}"=>"n".freeze, "\u{1D630}"=>"o".freeze, "\u{1D631}"=>"p".freeze, - "\u{1D632}"=>"q".freeze, "\u{1D633}"=>"r".freeze, "\u{1D634}"=>"s".freeze, "\u{1D635}"=>"t".freeze, "\u{1D636}"=>"u".freeze, "\u{1D637}"=>"v".freeze, "\u{1D638}"=>"w".freeze, "\u{1D639}"=>"x".freeze, - "\u{1D63A}"=>"y".freeze, "\u{1D63B}"=>"z".freeze, "\u{1D63C}"=>"A".freeze, "\u{1D63D}"=>"B".freeze, "\u{1D63E}"=>"C".freeze, "\u{1D63F}"=>"D".freeze, "\u{1D640}"=>"E".freeze, "\u{1D641}"=>"F".freeze, - "\u{1D642}"=>"G".freeze, "\u{1D643}"=>"H".freeze, "\u{1D644}"=>"I".freeze, "\u{1D645}"=>"J".freeze, "\u{1D646}"=>"K".freeze, "\u{1D647}"=>"L".freeze, "\u{1D648}"=>"M".freeze, "\u{1D649}"=>"N".freeze, - "\u{1D64A}"=>"O".freeze, "\u{1D64B}"=>"P".freeze, "\u{1D64C}"=>"Q".freeze, "\u{1D64D}"=>"R".freeze, "\u{1D64E}"=>"S".freeze, "\u{1D64F}"=>"T".freeze, "\u{1D650}"=>"U".freeze, "\u{1D651}"=>"V".freeze, - "\u{1D652}"=>"W".freeze, "\u{1D653}"=>"X".freeze, "\u{1D654}"=>"Y".freeze, "\u{1D655}"=>"Z".freeze, "\u{1D656}"=>"a".freeze, "\u{1D657}"=>"b".freeze, "\u{1D658}"=>"c".freeze, "\u{1D659}"=>"d".freeze, - "\u{1D65A}"=>"e".freeze, "\u{1D65B}"=>"f".freeze, "\u{1D65C}"=>"g".freeze, "\u{1D65D}"=>"h".freeze, "\u{1D65E}"=>"i".freeze, "\u{1D65F}"=>"j".freeze, "\u{1D660}"=>"k".freeze, "\u{1D661}"=>"l".freeze, - "\u{1D662}"=>"m".freeze, "\u{1D663}"=>"n".freeze, "\u{1D664}"=>"o".freeze, "\u{1D665}"=>"p".freeze, "\u{1D666}"=>"q".freeze, "\u{1D667}"=>"r".freeze, "\u{1D668}"=>"s".freeze, "\u{1D669}"=>"t".freeze, - "\u{1D66A}"=>"u".freeze, "\u{1D66B}"=>"v".freeze, "\u{1D66C}"=>"w".freeze, "\u{1D66D}"=>"x".freeze, "\u{1D66E}"=>"y".freeze, "\u{1D66F}"=>"z".freeze, "\u{1D670}"=>"A".freeze, "\u{1D671}"=>"B".freeze, - "\u{1D672}"=>"C".freeze, "\u{1D673}"=>"D".freeze, "\u{1D674}"=>"E".freeze, "\u{1D675}"=>"F".freeze, "\u{1D676}"=>"G".freeze, "\u{1D677}"=>"H".freeze, "\u{1D678}"=>"I".freeze, "\u{1D679}"=>"J".freeze, - "\u{1D67A}"=>"K".freeze, "\u{1D67B}"=>"L".freeze, "\u{1D67C}"=>"M".freeze, "\u{1D67D}"=>"N".freeze, "\u{1D67E}"=>"O".freeze, "\u{1D67F}"=>"P".freeze, "\u{1D680}"=>"Q".freeze, "\u{1D681}"=>"R".freeze, - "\u{1D682}"=>"S".freeze, "\u{1D683}"=>"T".freeze, "\u{1D684}"=>"U".freeze, "\u{1D685}"=>"V".freeze, "\u{1D686}"=>"W".freeze, "\u{1D687}"=>"X".freeze, "\u{1D688}"=>"Y".freeze, "\u{1D689}"=>"Z".freeze, - "\u{1D68A}"=>"a".freeze, "\u{1D68B}"=>"b".freeze, "\u{1D68C}"=>"c".freeze, "\u{1D68D}"=>"d".freeze, "\u{1D68E}"=>"e".freeze, "\u{1D68F}"=>"f".freeze, "\u{1D690}"=>"g".freeze, "\u{1D691}"=>"h".freeze, - "\u{1D692}"=>"i".freeze, "\u{1D693}"=>"j".freeze, "\u{1D694}"=>"k".freeze, "\u{1D695}"=>"l".freeze, "\u{1D696}"=>"m".freeze, "\u{1D697}"=>"n".freeze, "\u{1D698}"=>"o".freeze, "\u{1D699}"=>"p".freeze, - "\u{1D69A}"=>"q".freeze, "\u{1D69B}"=>"r".freeze, "\u{1D69C}"=>"s".freeze, "\u{1D69D}"=>"t".freeze, "\u{1D69E}"=>"u".freeze, "\u{1D69F}"=>"v".freeze, "\u{1D6A0}"=>"w".freeze, "\u{1D6A1}"=>"x".freeze, - "\u{1D6A2}"=>"y".freeze, "\u{1D6A3}"=>"z".freeze, "\u{1D6A4}"=>"\u0131".freeze, "\u{1D6A5}"=>"\u0237".freeze, "\u{1D6A8}"=>"\u0391".freeze, "\u{1D6A9}"=>"\u0392".freeze, "\u{1D6AA}"=>"\u0393".freeze, "\u{1D6AB}"=>"\u0394".freeze, - "\u{1D6AC}"=>"\u0395".freeze, "\u{1D6AD}"=>"\u0396".freeze, "\u{1D6AE}"=>"\u0397".freeze, "\u{1D6AF}"=>"\u0398".freeze, "\u{1D6B0}"=>"\u0399".freeze, "\u{1D6B1}"=>"\u039A".freeze, "\u{1D6B2}"=>"\u039B".freeze, "\u{1D6B3}"=>"\u039C".freeze, - "\u{1D6B4}"=>"\u039D".freeze, "\u{1D6B5}"=>"\u039E".freeze, "\u{1D6B6}"=>"\u039F".freeze, "\u{1D6B7}"=>"\u03A0".freeze, "\u{1D6B8}"=>"\u03A1".freeze, "\u{1D6B9}"=>"\u0398".freeze, "\u{1D6BA}"=>"\u03A3".freeze, "\u{1D6BB}"=>"\u03A4".freeze, - "\u{1D6BC}"=>"\u03A5".freeze, "\u{1D6BD}"=>"\u03A6".freeze, "\u{1D6BE}"=>"\u03A7".freeze, "\u{1D6BF}"=>"\u03A8".freeze, "\u{1D6C0}"=>"\u03A9".freeze, "\u{1D6C1}"=>"\u2207".freeze, "\u{1D6C2}"=>"\u03B1".freeze, "\u{1D6C3}"=>"\u03B2".freeze, - "\u{1D6C4}"=>"\u03B3".freeze, "\u{1D6C5}"=>"\u03B4".freeze, "\u{1D6C6}"=>"\u03B5".freeze, "\u{1D6C7}"=>"\u03B6".freeze, "\u{1D6C8}"=>"\u03B7".freeze, "\u{1D6C9}"=>"\u03B8".freeze, "\u{1D6CA}"=>"\u03B9".freeze, "\u{1D6CB}"=>"\u03BA".freeze, - "\u{1D6CC}"=>"\u03BB".freeze, "\u{1D6CD}"=>"\u03BC".freeze, "\u{1D6CE}"=>"\u03BD".freeze, "\u{1D6CF}"=>"\u03BE".freeze, "\u{1D6D0}"=>"\u03BF".freeze, "\u{1D6D1}"=>"\u03C0".freeze, "\u{1D6D2}"=>"\u03C1".freeze, "\u{1D6D3}"=>"\u03C2".freeze, - "\u{1D6D4}"=>"\u03C3".freeze, "\u{1D6D5}"=>"\u03C4".freeze, "\u{1D6D6}"=>"\u03C5".freeze, "\u{1D6D7}"=>"\u03C6".freeze, "\u{1D6D8}"=>"\u03C7".freeze, "\u{1D6D9}"=>"\u03C8".freeze, "\u{1D6DA}"=>"\u03C9".freeze, "\u{1D6DB}"=>"\u2202".freeze, - "\u{1D6DC}"=>"\u03B5".freeze, "\u{1D6DD}"=>"\u03B8".freeze, "\u{1D6DE}"=>"\u03BA".freeze, "\u{1D6DF}"=>"\u03C6".freeze, "\u{1D6E0}"=>"\u03C1".freeze, "\u{1D6E1}"=>"\u03C0".freeze, "\u{1D6E2}"=>"\u0391".freeze, "\u{1D6E3}"=>"\u0392".freeze, - "\u{1D6E4}"=>"\u0393".freeze, "\u{1D6E5}"=>"\u0394".freeze, "\u{1D6E6}"=>"\u0395".freeze, "\u{1D6E7}"=>"\u0396".freeze, "\u{1D6E8}"=>"\u0397".freeze, "\u{1D6E9}"=>"\u0398".freeze, "\u{1D6EA}"=>"\u0399".freeze, "\u{1D6EB}"=>"\u039A".freeze, - "\u{1D6EC}"=>"\u039B".freeze, "\u{1D6ED}"=>"\u039C".freeze, "\u{1D6EE}"=>"\u039D".freeze, "\u{1D6EF}"=>"\u039E".freeze, "\u{1D6F0}"=>"\u039F".freeze, "\u{1D6F1}"=>"\u03A0".freeze, "\u{1D6F2}"=>"\u03A1".freeze, "\u{1D6F3}"=>"\u0398".freeze, - "\u{1D6F4}"=>"\u03A3".freeze, "\u{1D6F5}"=>"\u03A4".freeze, "\u{1D6F6}"=>"\u03A5".freeze, "\u{1D6F7}"=>"\u03A6".freeze, "\u{1D6F8}"=>"\u03A7".freeze, "\u{1D6F9}"=>"\u03A8".freeze, "\u{1D6FA}"=>"\u03A9".freeze, "\u{1D6FB}"=>"\u2207".freeze, - "\u{1D6FC}"=>"\u03B1".freeze, "\u{1D6FD}"=>"\u03B2".freeze, "\u{1D6FE}"=>"\u03B3".freeze, "\u{1D6FF}"=>"\u03B4".freeze, "\u{1D700}"=>"\u03B5".freeze, "\u{1D701}"=>"\u03B6".freeze, "\u{1D702}"=>"\u03B7".freeze, "\u{1D703}"=>"\u03B8".freeze, - "\u{1D704}"=>"\u03B9".freeze, "\u{1D705}"=>"\u03BA".freeze, "\u{1D706}"=>"\u03BB".freeze, "\u{1D707}"=>"\u03BC".freeze, "\u{1D708}"=>"\u03BD".freeze, "\u{1D709}"=>"\u03BE".freeze, "\u{1D70A}"=>"\u03BF".freeze, "\u{1D70B}"=>"\u03C0".freeze, - "\u{1D70C}"=>"\u03C1".freeze, "\u{1D70D}"=>"\u03C2".freeze, "\u{1D70E}"=>"\u03C3".freeze, "\u{1D70F}"=>"\u03C4".freeze, "\u{1D710}"=>"\u03C5".freeze, "\u{1D711}"=>"\u03C6".freeze, "\u{1D712}"=>"\u03C7".freeze, "\u{1D713}"=>"\u03C8".freeze, - "\u{1D714}"=>"\u03C9".freeze, "\u{1D715}"=>"\u2202".freeze, "\u{1D716}"=>"\u03B5".freeze, "\u{1D717}"=>"\u03B8".freeze, "\u{1D718}"=>"\u03BA".freeze, "\u{1D719}"=>"\u03C6".freeze, "\u{1D71A}"=>"\u03C1".freeze, "\u{1D71B}"=>"\u03C0".freeze, - "\u{1D71C}"=>"\u0391".freeze, "\u{1D71D}"=>"\u0392".freeze, "\u{1D71E}"=>"\u0393".freeze, "\u{1D71F}"=>"\u0394".freeze, "\u{1D720}"=>"\u0395".freeze, "\u{1D721}"=>"\u0396".freeze, "\u{1D722}"=>"\u0397".freeze, "\u{1D723}"=>"\u0398".freeze, - "\u{1D724}"=>"\u0399".freeze, "\u{1D725}"=>"\u039A".freeze, "\u{1D726}"=>"\u039B".freeze, "\u{1D727}"=>"\u039C".freeze, "\u{1D728}"=>"\u039D".freeze, "\u{1D729}"=>"\u039E".freeze, "\u{1D72A}"=>"\u039F".freeze, "\u{1D72B}"=>"\u03A0".freeze, - "\u{1D72C}"=>"\u03A1".freeze, "\u{1D72D}"=>"\u0398".freeze, "\u{1D72E}"=>"\u03A3".freeze, "\u{1D72F}"=>"\u03A4".freeze, "\u{1D730}"=>"\u03A5".freeze, "\u{1D731}"=>"\u03A6".freeze, "\u{1D732}"=>"\u03A7".freeze, "\u{1D733}"=>"\u03A8".freeze, - "\u{1D734}"=>"\u03A9".freeze, "\u{1D735}"=>"\u2207".freeze, "\u{1D736}"=>"\u03B1".freeze, "\u{1D737}"=>"\u03B2".freeze, "\u{1D738}"=>"\u03B3".freeze, "\u{1D739}"=>"\u03B4".freeze, "\u{1D73A}"=>"\u03B5".freeze, "\u{1D73B}"=>"\u03B6".freeze, - "\u{1D73C}"=>"\u03B7".freeze, "\u{1D73D}"=>"\u03B8".freeze, "\u{1D73E}"=>"\u03B9".freeze, "\u{1D73F}"=>"\u03BA".freeze, "\u{1D740}"=>"\u03BB".freeze, "\u{1D741}"=>"\u03BC".freeze, "\u{1D742}"=>"\u03BD".freeze, "\u{1D743}"=>"\u03BE".freeze, - "\u{1D744}"=>"\u03BF".freeze, "\u{1D745}"=>"\u03C0".freeze, "\u{1D746}"=>"\u03C1".freeze, "\u{1D747}"=>"\u03C2".freeze, "\u{1D748}"=>"\u03C3".freeze, "\u{1D749}"=>"\u03C4".freeze, "\u{1D74A}"=>"\u03C5".freeze, "\u{1D74B}"=>"\u03C6".freeze, - "\u{1D74C}"=>"\u03C7".freeze, "\u{1D74D}"=>"\u03C8".freeze, "\u{1D74E}"=>"\u03C9".freeze, "\u{1D74F}"=>"\u2202".freeze, "\u{1D750}"=>"\u03B5".freeze, "\u{1D751}"=>"\u03B8".freeze, "\u{1D752}"=>"\u03BA".freeze, "\u{1D753}"=>"\u03C6".freeze, - "\u{1D754}"=>"\u03C1".freeze, "\u{1D755}"=>"\u03C0".freeze, "\u{1D756}"=>"\u0391".freeze, "\u{1D757}"=>"\u0392".freeze, "\u{1D758}"=>"\u0393".freeze, "\u{1D759}"=>"\u0394".freeze, "\u{1D75A}"=>"\u0395".freeze, "\u{1D75B}"=>"\u0396".freeze, - "\u{1D75C}"=>"\u0397".freeze, "\u{1D75D}"=>"\u0398".freeze, "\u{1D75E}"=>"\u0399".freeze, "\u{1D75F}"=>"\u039A".freeze, "\u{1D760}"=>"\u039B".freeze, "\u{1D761}"=>"\u039C".freeze, "\u{1D762}"=>"\u039D".freeze, "\u{1D763}"=>"\u039E".freeze, - "\u{1D764}"=>"\u039F".freeze, "\u{1D765}"=>"\u03A0".freeze, "\u{1D766}"=>"\u03A1".freeze, "\u{1D767}"=>"\u0398".freeze, "\u{1D768}"=>"\u03A3".freeze, "\u{1D769}"=>"\u03A4".freeze, "\u{1D76A}"=>"\u03A5".freeze, "\u{1D76B}"=>"\u03A6".freeze, - "\u{1D76C}"=>"\u03A7".freeze, "\u{1D76D}"=>"\u03A8".freeze, "\u{1D76E}"=>"\u03A9".freeze, "\u{1D76F}"=>"\u2207".freeze, "\u{1D770}"=>"\u03B1".freeze, "\u{1D771}"=>"\u03B2".freeze, "\u{1D772}"=>"\u03B3".freeze, "\u{1D773}"=>"\u03B4".freeze, - "\u{1D774}"=>"\u03B5".freeze, "\u{1D775}"=>"\u03B6".freeze, "\u{1D776}"=>"\u03B7".freeze, "\u{1D777}"=>"\u03B8".freeze, "\u{1D778}"=>"\u03B9".freeze, "\u{1D779}"=>"\u03BA".freeze, "\u{1D77A}"=>"\u03BB".freeze, "\u{1D77B}"=>"\u03BC".freeze, - "\u{1D77C}"=>"\u03BD".freeze, "\u{1D77D}"=>"\u03BE".freeze, "\u{1D77E}"=>"\u03BF".freeze, "\u{1D77F}"=>"\u03C0".freeze, "\u{1D780}"=>"\u03C1".freeze, "\u{1D781}"=>"\u03C2".freeze, "\u{1D782}"=>"\u03C3".freeze, "\u{1D783}"=>"\u03C4".freeze, - "\u{1D784}"=>"\u03C5".freeze, "\u{1D785}"=>"\u03C6".freeze, "\u{1D786}"=>"\u03C7".freeze, "\u{1D787}"=>"\u03C8".freeze, "\u{1D788}"=>"\u03C9".freeze, "\u{1D789}"=>"\u2202".freeze, "\u{1D78A}"=>"\u03B5".freeze, "\u{1D78B}"=>"\u03B8".freeze, - "\u{1D78C}"=>"\u03BA".freeze, "\u{1D78D}"=>"\u03C6".freeze, "\u{1D78E}"=>"\u03C1".freeze, "\u{1D78F}"=>"\u03C0".freeze, "\u{1D790}"=>"\u0391".freeze, "\u{1D791}"=>"\u0392".freeze, "\u{1D792}"=>"\u0393".freeze, "\u{1D793}"=>"\u0394".freeze, - "\u{1D794}"=>"\u0395".freeze, "\u{1D795}"=>"\u0396".freeze, "\u{1D796}"=>"\u0397".freeze, "\u{1D797}"=>"\u0398".freeze, "\u{1D798}"=>"\u0399".freeze, "\u{1D799}"=>"\u039A".freeze, "\u{1D79A}"=>"\u039B".freeze, "\u{1D79B}"=>"\u039C".freeze, - "\u{1D79C}"=>"\u039D".freeze, "\u{1D79D}"=>"\u039E".freeze, "\u{1D79E}"=>"\u039F".freeze, "\u{1D79F}"=>"\u03A0".freeze, "\u{1D7A0}"=>"\u03A1".freeze, "\u{1D7A1}"=>"\u0398".freeze, "\u{1D7A2}"=>"\u03A3".freeze, "\u{1D7A3}"=>"\u03A4".freeze, - "\u{1D7A4}"=>"\u03A5".freeze, "\u{1D7A5}"=>"\u03A6".freeze, "\u{1D7A6}"=>"\u03A7".freeze, "\u{1D7A7}"=>"\u03A8".freeze, "\u{1D7A8}"=>"\u03A9".freeze, "\u{1D7A9}"=>"\u2207".freeze, "\u{1D7AA}"=>"\u03B1".freeze, "\u{1D7AB}"=>"\u03B2".freeze, - "\u{1D7AC}"=>"\u03B3".freeze, "\u{1D7AD}"=>"\u03B4".freeze, "\u{1D7AE}"=>"\u03B5".freeze, "\u{1D7AF}"=>"\u03B6".freeze, "\u{1D7B0}"=>"\u03B7".freeze, "\u{1D7B1}"=>"\u03B8".freeze, "\u{1D7B2}"=>"\u03B9".freeze, "\u{1D7B3}"=>"\u03BA".freeze, - "\u{1D7B4}"=>"\u03BB".freeze, "\u{1D7B5}"=>"\u03BC".freeze, "\u{1D7B6}"=>"\u03BD".freeze, "\u{1D7B7}"=>"\u03BE".freeze, "\u{1D7B8}"=>"\u03BF".freeze, "\u{1D7B9}"=>"\u03C0".freeze, "\u{1D7BA}"=>"\u03C1".freeze, "\u{1D7BB}"=>"\u03C2".freeze, - "\u{1D7BC}"=>"\u03C3".freeze, "\u{1D7BD}"=>"\u03C4".freeze, "\u{1D7BE}"=>"\u03C5".freeze, "\u{1D7BF}"=>"\u03C6".freeze, "\u{1D7C0}"=>"\u03C7".freeze, "\u{1D7C1}"=>"\u03C8".freeze, "\u{1D7C2}"=>"\u03C9".freeze, "\u{1D7C3}"=>"\u2202".freeze, - "\u{1D7C4}"=>"\u03B5".freeze, "\u{1D7C5}"=>"\u03B8".freeze, "\u{1D7C6}"=>"\u03BA".freeze, "\u{1D7C7}"=>"\u03C6".freeze, "\u{1D7C8}"=>"\u03C1".freeze, "\u{1D7C9}"=>"\u03C0".freeze, "\u{1D7CA}"=>"\u03DC".freeze, "\u{1D7CB}"=>"\u03DD".freeze, - "\u{1D7CE}"=>"0".freeze, "\u{1D7CF}"=>"1".freeze, "\u{1D7D0}"=>"2".freeze, "\u{1D7D1}"=>"3".freeze, "\u{1D7D2}"=>"4".freeze, "\u{1D7D3}"=>"5".freeze, "\u{1D7D4}"=>"6".freeze, "\u{1D7D5}"=>"7".freeze, - "\u{1D7D6}"=>"8".freeze, "\u{1D7D7}"=>"9".freeze, "\u{1D7D8}"=>"0".freeze, "\u{1D7D9}"=>"1".freeze, "\u{1D7DA}"=>"2".freeze, "\u{1D7DB}"=>"3".freeze, "\u{1D7DC}"=>"4".freeze, "\u{1D7DD}"=>"5".freeze, - "\u{1D7DE}"=>"6".freeze, "\u{1D7DF}"=>"7".freeze, "\u{1D7E0}"=>"8".freeze, "\u{1D7E1}"=>"9".freeze, "\u{1D7E2}"=>"0".freeze, "\u{1D7E3}"=>"1".freeze, "\u{1D7E4}"=>"2".freeze, "\u{1D7E5}"=>"3".freeze, - "\u{1D7E6}"=>"4".freeze, "\u{1D7E7}"=>"5".freeze, "\u{1D7E8}"=>"6".freeze, "\u{1D7E9}"=>"7".freeze, "\u{1D7EA}"=>"8".freeze, "\u{1D7EB}"=>"9".freeze, "\u{1D7EC}"=>"0".freeze, "\u{1D7ED}"=>"1".freeze, - "\u{1D7EE}"=>"2".freeze, "\u{1D7EF}"=>"3".freeze, "\u{1D7F0}"=>"4".freeze, "\u{1D7F1}"=>"5".freeze, "\u{1D7F2}"=>"6".freeze, "\u{1D7F3}"=>"7".freeze, "\u{1D7F4}"=>"8".freeze, "\u{1D7F5}"=>"9".freeze, - "\u{1D7F6}"=>"0".freeze, "\u{1D7F7}"=>"1".freeze, "\u{1D7F8}"=>"2".freeze, "\u{1D7F9}"=>"3".freeze, "\u{1D7FA}"=>"4".freeze, "\u{1D7FB}"=>"5".freeze, "\u{1D7FC}"=>"6".freeze, "\u{1D7FD}"=>"7".freeze, - "\u{1D7FE}"=>"8".freeze, "\u{1D7FF}"=>"9".freeze, "\u{1EE00}"=>"\u0627".freeze, "\u{1EE01}"=>"\u0628".freeze, "\u{1EE02}"=>"\u062C".freeze, "\u{1EE03}"=>"\u062F".freeze, "\u{1EE05}"=>"\u0648".freeze, "\u{1EE06}"=>"\u0632".freeze, - "\u{1EE07}"=>"\u062D".freeze, "\u{1EE08}"=>"\u0637".freeze, "\u{1EE09}"=>"\u064A".freeze, "\u{1EE0A}"=>"\u0643".freeze, "\u{1EE0B}"=>"\u0644".freeze, "\u{1EE0C}"=>"\u0645".freeze, "\u{1EE0D}"=>"\u0646".freeze, "\u{1EE0E}"=>"\u0633".freeze, - "\u{1EE0F}"=>"\u0639".freeze, "\u{1EE10}"=>"\u0641".freeze, "\u{1EE11}"=>"\u0635".freeze, "\u{1EE12}"=>"\u0642".freeze, "\u{1EE13}"=>"\u0631".freeze, "\u{1EE14}"=>"\u0634".freeze, "\u{1EE15}"=>"\u062A".freeze, "\u{1EE16}"=>"\u062B".freeze, - "\u{1EE17}"=>"\u062E".freeze, "\u{1EE18}"=>"\u0630".freeze, "\u{1EE19}"=>"\u0636".freeze, "\u{1EE1A}"=>"\u0638".freeze, "\u{1EE1B}"=>"\u063A".freeze, "\u{1EE1C}"=>"\u066E".freeze, "\u{1EE1D}"=>"\u06BA".freeze, "\u{1EE1E}"=>"\u06A1".freeze, - "\u{1EE1F}"=>"\u066F".freeze, "\u{1EE21}"=>"\u0628".freeze, "\u{1EE22}"=>"\u062C".freeze, "\u{1EE24}"=>"\u0647".freeze, "\u{1EE27}"=>"\u062D".freeze, "\u{1EE29}"=>"\u064A".freeze, "\u{1EE2A}"=>"\u0643".freeze, "\u{1EE2B}"=>"\u0644".freeze, - "\u{1EE2C}"=>"\u0645".freeze, "\u{1EE2D}"=>"\u0646".freeze, "\u{1EE2E}"=>"\u0633".freeze, "\u{1EE2F}"=>"\u0639".freeze, "\u{1EE30}"=>"\u0641".freeze, "\u{1EE31}"=>"\u0635".freeze, "\u{1EE32}"=>"\u0642".freeze, "\u{1EE34}"=>"\u0634".freeze, - "\u{1EE35}"=>"\u062A".freeze, "\u{1EE36}"=>"\u062B".freeze, "\u{1EE37}"=>"\u062E".freeze, "\u{1EE39}"=>"\u0636".freeze, "\u{1EE3B}"=>"\u063A".freeze, "\u{1EE42}"=>"\u062C".freeze, "\u{1EE47}"=>"\u062D".freeze, "\u{1EE49}"=>"\u064A".freeze, - "\u{1EE4B}"=>"\u0644".freeze, "\u{1EE4D}"=>"\u0646".freeze, "\u{1EE4E}"=>"\u0633".freeze, "\u{1EE4F}"=>"\u0639".freeze, "\u{1EE51}"=>"\u0635".freeze, "\u{1EE52}"=>"\u0642".freeze, "\u{1EE54}"=>"\u0634".freeze, "\u{1EE57}"=>"\u062E".freeze, - "\u{1EE59}"=>"\u0636".freeze, "\u{1EE5B}"=>"\u063A".freeze, "\u{1EE5D}"=>"\u06BA".freeze, "\u{1EE5F}"=>"\u066F".freeze, "\u{1EE61}"=>"\u0628".freeze, "\u{1EE62}"=>"\u062C".freeze, "\u{1EE64}"=>"\u0647".freeze, "\u{1EE67}"=>"\u062D".freeze, - "\u{1EE68}"=>"\u0637".freeze, "\u{1EE69}"=>"\u064A".freeze, "\u{1EE6A}"=>"\u0643".freeze, "\u{1EE6C}"=>"\u0645".freeze, "\u{1EE6D}"=>"\u0646".freeze, "\u{1EE6E}"=>"\u0633".freeze, "\u{1EE6F}"=>"\u0639".freeze, "\u{1EE70}"=>"\u0641".freeze, - "\u{1EE71}"=>"\u0635".freeze, "\u{1EE72}"=>"\u0642".freeze, "\u{1EE74}"=>"\u0634".freeze, "\u{1EE75}"=>"\u062A".freeze, "\u{1EE76}"=>"\u062B".freeze, "\u{1EE77}"=>"\u062E".freeze, "\u{1EE79}"=>"\u0636".freeze, "\u{1EE7A}"=>"\u0638".freeze, - "\u{1EE7B}"=>"\u063A".freeze, "\u{1EE7C}"=>"\u066E".freeze, "\u{1EE7E}"=>"\u06A1".freeze, "\u{1EE80}"=>"\u0627".freeze, "\u{1EE81}"=>"\u0628".freeze, "\u{1EE82}"=>"\u062C".freeze, "\u{1EE83}"=>"\u062F".freeze, "\u{1EE84}"=>"\u0647".freeze, - "\u{1EE85}"=>"\u0648".freeze, "\u{1EE86}"=>"\u0632".freeze, "\u{1EE87}"=>"\u062D".freeze, "\u{1EE88}"=>"\u0637".freeze, "\u{1EE89}"=>"\u064A".freeze, "\u{1EE8B}"=>"\u0644".freeze, "\u{1EE8C}"=>"\u0645".freeze, "\u{1EE8D}"=>"\u0646".freeze, - "\u{1EE8E}"=>"\u0633".freeze, "\u{1EE8F}"=>"\u0639".freeze, "\u{1EE90}"=>"\u0641".freeze, "\u{1EE91}"=>"\u0635".freeze, "\u{1EE92}"=>"\u0642".freeze, "\u{1EE93}"=>"\u0631".freeze, "\u{1EE94}"=>"\u0634".freeze, "\u{1EE95}"=>"\u062A".freeze, - "\u{1EE96}"=>"\u062B".freeze, "\u{1EE97}"=>"\u062E".freeze, "\u{1EE98}"=>"\u0630".freeze, "\u{1EE99}"=>"\u0636".freeze, "\u{1EE9A}"=>"\u0638".freeze, "\u{1EE9B}"=>"\u063A".freeze, "\u{1EEA1}"=>"\u0628".freeze, "\u{1EEA2}"=>"\u062C".freeze, - "\u{1EEA3}"=>"\u062F".freeze, "\u{1EEA5}"=>"\u0648".freeze, "\u{1EEA6}"=>"\u0632".freeze, "\u{1EEA7}"=>"\u062D".freeze, "\u{1EEA8}"=>"\u0637".freeze, "\u{1EEA9}"=>"\u064A".freeze, "\u{1EEAB}"=>"\u0644".freeze, "\u{1EEAC}"=>"\u0645".freeze, - "\u{1EEAD}"=>"\u0646".freeze, "\u{1EEAE}"=>"\u0633".freeze, "\u{1EEAF}"=>"\u0639".freeze, "\u{1EEB0}"=>"\u0641".freeze, "\u{1EEB1}"=>"\u0635".freeze, "\u{1EEB2}"=>"\u0642".freeze, "\u{1EEB3}"=>"\u0631".freeze, "\u{1EEB4}"=>"\u0634".freeze, - "\u{1EEB5}"=>"\u062A".freeze, "\u{1EEB6}"=>"\u062B".freeze, "\u{1EEB7}"=>"\u062E".freeze, "\u{1EEB8}"=>"\u0630".freeze, "\u{1EEB9}"=>"\u0636".freeze, "\u{1EEBA}"=>"\u0638".freeze, "\u{1EEBB}"=>"\u063A".freeze, "\u{1F100}"=>"0.".freeze, - "\u{1F101}"=>"0,".freeze, "\u{1F102}"=>"1,".freeze, "\u{1F103}"=>"2,".freeze, "\u{1F104}"=>"3,".freeze, "\u{1F105}"=>"4,".freeze, "\u{1F106}"=>"5,".freeze, "\u{1F107}"=>"6,".freeze, "\u{1F108}"=>"7,".freeze, - "\u{1F109}"=>"8,".freeze, "\u{1F10A}"=>"9,".freeze, "\u{1F110}"=>"(A)".freeze, "\u{1F111}"=>"(B)".freeze, "\u{1F112}"=>"(C)".freeze, "\u{1F113}"=>"(D)".freeze, "\u{1F114}"=>"(E)".freeze, "\u{1F115}"=>"(F)".freeze, - "\u{1F116}"=>"(G)".freeze, "\u{1F117}"=>"(H)".freeze, "\u{1F118}"=>"(I)".freeze, "\u{1F119}"=>"(J)".freeze, "\u{1F11A}"=>"(K)".freeze, "\u{1F11B}"=>"(L)".freeze, "\u{1F11C}"=>"(M)".freeze, "\u{1F11D}"=>"(N)".freeze, - "\u{1F11E}"=>"(O)".freeze, "\u{1F11F}"=>"(P)".freeze, "\u{1F120}"=>"(Q)".freeze, "\u{1F121}"=>"(R)".freeze, "\u{1F122}"=>"(S)".freeze, "\u{1F123}"=>"(T)".freeze, "\u{1F124}"=>"(U)".freeze, "\u{1F125}"=>"(V)".freeze, - "\u{1F126}"=>"(W)".freeze, "\u{1F127}"=>"(X)".freeze, "\u{1F128}"=>"(Y)".freeze, "\u{1F129}"=>"(Z)".freeze, "\u{1F12A}"=>"\u3014S\u3015".freeze, "\u{1F12B}"=>"C".freeze, "\u{1F12C}"=>"R".freeze, "\u{1F12D}"=>"CD".freeze, - "\u{1F12E}"=>"WZ".freeze, "\u{1F130}"=>"A".freeze, "\u{1F131}"=>"B".freeze, "\u{1F132}"=>"C".freeze, "\u{1F133}"=>"D".freeze, "\u{1F134}"=>"E".freeze, "\u{1F135}"=>"F".freeze, "\u{1F136}"=>"G".freeze, - "\u{1F137}"=>"H".freeze, "\u{1F138}"=>"I".freeze, "\u{1F139}"=>"J".freeze, "\u{1F13A}"=>"K".freeze, "\u{1F13B}"=>"L".freeze, "\u{1F13C}"=>"M".freeze, "\u{1F13D}"=>"N".freeze, "\u{1F13E}"=>"O".freeze, - "\u{1F13F}"=>"P".freeze, "\u{1F140}"=>"Q".freeze, "\u{1F141}"=>"R".freeze, "\u{1F142}"=>"S".freeze, "\u{1F143}"=>"T".freeze, "\u{1F144}"=>"U".freeze, "\u{1F145}"=>"V".freeze, "\u{1F146}"=>"W".freeze, - "\u{1F147}"=>"X".freeze, "\u{1F148}"=>"Y".freeze, "\u{1F149}"=>"Z".freeze, "\u{1F14A}"=>"HV".freeze, "\u{1F14B}"=>"MV".freeze, "\u{1F14C}"=>"SD".freeze, "\u{1F14D}"=>"SS".freeze, "\u{1F14E}"=>"PPV".freeze, - "\u{1F14F}"=>"WC".freeze, "\u{1F16A}"=>"MC".freeze, "\u{1F16B}"=>"MD".freeze, "\u{1F190}"=>"DJ".freeze, "\u{1F200}"=>"\u307B\u304B".freeze, "\u{1F201}"=>"\u30B3\u30B3".freeze, "\u{1F202}"=>"\u30B5".freeze, "\u{1F210}"=>"\u624B".freeze, - "\u{1F211}"=>"\u5B57".freeze, "\u{1F212}"=>"\u53CC".freeze, "\u{1F213}"=>"\u30C7".freeze, "\u{1F214}"=>"\u4E8C".freeze, "\u{1F215}"=>"\u591A".freeze, "\u{1F216}"=>"\u89E3".freeze, "\u{1F217}"=>"\u5929".freeze, "\u{1F218}"=>"\u4EA4".freeze, - "\u{1F219}"=>"\u6620".freeze, "\u{1F21A}"=>"\u7121".freeze, "\u{1F21B}"=>"\u6599".freeze, "\u{1F21C}"=>"\u524D".freeze, "\u{1F21D}"=>"\u5F8C".freeze, "\u{1F21E}"=>"\u518D".freeze, "\u{1F21F}"=>"\u65B0".freeze, "\u{1F220}"=>"\u521D".freeze, - "\u{1F221}"=>"\u7D42".freeze, "\u{1F222}"=>"\u751F".freeze, "\u{1F223}"=>"\u8CA9".freeze, "\u{1F224}"=>"\u58F0".freeze, "\u{1F225}"=>"\u5439".freeze, "\u{1F226}"=>"\u6F14".freeze, "\u{1F227}"=>"\u6295".freeze, "\u{1F228}"=>"\u6355".freeze, - "\u{1F229}"=>"\u4E00".freeze, "\u{1F22A}"=>"\u4E09".freeze, "\u{1F22B}"=>"\u904A".freeze, "\u{1F22C}"=>"\u5DE6".freeze, "\u{1F22D}"=>"\u4E2D".freeze, "\u{1F22E}"=>"\u53F3".freeze, "\u{1F22F}"=>"\u6307".freeze, "\u{1F230}"=>"\u8D70".freeze, - "\u{1F231}"=>"\u6253".freeze, "\u{1F232}"=>"\u7981".freeze, "\u{1F233}"=>"\u7A7A".freeze, "\u{1F234}"=>"\u5408".freeze, "\u{1F235}"=>"\u6E80".freeze, "\u{1F236}"=>"\u6709".freeze, "\u{1F237}"=>"\u6708".freeze, "\u{1F238}"=>"\u7533".freeze, - "\u{1F239}"=>"\u5272".freeze, "\u{1F23A}"=>"\u55B6".freeze, "\u{1F240}"=>"\u3014\u672C\u3015".freeze, "\u{1F241}"=>"\u3014\u4E09\u3015".freeze, "\u{1F242}"=>"\u3014\u4E8C\u3015".freeze, "\u{1F243}"=>"\u3014\u5B89\u3015".freeze, "\u{1F244}"=>"\u3014\u70B9\u3015".freeze, "\u{1F245}"=>"\u3014\u6253\u3015".freeze, - "\u{1F246}"=>"\u3014\u76D7\u3015".freeze, "\u{1F247}"=>"\u3014\u52DD\u3015".freeze, "\u{1F248}"=>"\u3014\u6557\u3015".freeze, "\u{1F250}"=>"\u5F97".freeze, "\u{1F251}"=>"\u53EF".freeze, "\u0385"=>" \u0308\u0301".freeze, "\u03D3"=>"\u03A5\u0301".freeze, "\u03D4"=>"\u03A5\u0308".freeze, - "\u1E9B"=>"s\u0307".freeze, "\u1FC1"=>" \u0308\u0342".freeze, "\u1FCD"=>" \u0313\u0300".freeze, "\u1FCE"=>" \u0313\u0301".freeze, "\u1FCF"=>" \u0313\u0342".freeze, "\u1FDD"=>" \u0314\u0300".freeze, "\u1FDE"=>" \u0314\u0301".freeze, "\u1FDF"=>" \u0314\u0342".freeze, - "\u1FED"=>" \u0308\u0300".freeze, "\u1FEE"=>" \u0308\u0301".freeze, "\u1FFD"=>" \u0301".freeze, "\u2000"=>" ".freeze, "\u2001"=>" ".freeze, + "\u00A0"=>" ", "\u00A8"=>" \u0308", "\u00AA"=>"a", "\u00AF"=>" \u0304", "\u00B2"=>"2", "\u00B3"=>"3", "\u00B4"=>" \u0301", "\u00B5"=>"\u03BC", + "\u00B8"=>" \u0327", "\u00B9"=>"1", "\u00BA"=>"o", "\u00BC"=>"1\u20444", "\u00BD"=>"1\u20442", "\u00BE"=>"3\u20444", "\u0132"=>"IJ", "\u0133"=>"ij", + "\u013F"=>"L\u00B7", "\u0140"=>"l\u00B7", "\u0149"=>"\u02BCn", "\u017F"=>"s", "\u01C4"=>"D\u017D", "\u01C5"=>"D\u017E", "\u01C6"=>"d\u017E", "\u01C7"=>"LJ", + "\u01C8"=>"Lj", "\u01C9"=>"lj", "\u01CA"=>"NJ", "\u01CB"=>"Nj", "\u01CC"=>"nj", "\u01F1"=>"DZ", "\u01F2"=>"Dz", "\u01F3"=>"dz", + "\u02B0"=>"h", "\u02B1"=>"\u0266", "\u02B2"=>"j", "\u02B3"=>"r", "\u02B4"=>"\u0279", "\u02B5"=>"\u027B", "\u02B6"=>"\u0281", "\u02B7"=>"w", + "\u02B8"=>"y", "\u02D8"=>" \u0306", "\u02D9"=>" \u0307", "\u02DA"=>" \u030A", "\u02DB"=>" \u0328", "\u02DC"=>" \u0303", "\u02DD"=>" \u030B", "\u02E0"=>"\u0263", + "\u02E1"=>"l", "\u02E2"=>"s", "\u02E3"=>"x", "\u02E4"=>"\u0295", "\u037A"=>" \u0345", "\u0384"=>" \u0301", "\u03D0"=>"\u03B2", "\u03D1"=>"\u03B8", + "\u03D2"=>"\u03A5", "\u03D5"=>"\u03C6", "\u03D6"=>"\u03C0", "\u03F0"=>"\u03BA", "\u03F1"=>"\u03C1", "\u03F2"=>"\u03C2", "\u03F4"=>"\u0398", "\u03F5"=>"\u03B5", + "\u03F9"=>"\u03A3", "\u0587"=>"\u0565\u0582", "\u0675"=>"\u0627\u0674", "\u0676"=>"\u0648\u0674", "\u0677"=>"\u06C7\u0674", "\u0678"=>"\u064A\u0674", "\u0E33"=>"\u0E4D\u0E32", "\u0EB3"=>"\u0ECD\u0EB2", + "\u0EDC"=>"\u0EAB\u0E99", "\u0EDD"=>"\u0EAB\u0EA1", "\u0F0C"=>"\u0F0B", "\u0F77"=>"\u0FB2\u0F81", "\u0F79"=>"\u0FB3\u0F81", "\u10FC"=>"\u10DC", "\u1D2C"=>"A", "\u1D2D"=>"\u00C6", + "\u1D2E"=>"B", "\u1D30"=>"D", "\u1D31"=>"E", "\u1D32"=>"\u018E", "\u1D33"=>"G", "\u1D34"=>"H", "\u1D35"=>"I", "\u1D36"=>"J", + "\u1D37"=>"K", "\u1D38"=>"L", "\u1D39"=>"M", "\u1D3A"=>"N", "\u1D3C"=>"O", "\u1D3D"=>"\u0222", "\u1D3E"=>"P", "\u1D3F"=>"R", + "\u1D40"=>"T", "\u1D41"=>"U", "\u1D42"=>"W", "\u1D43"=>"a", "\u1D44"=>"\u0250", "\u1D45"=>"\u0251", "\u1D46"=>"\u1D02", "\u1D47"=>"b", + "\u1D48"=>"d", "\u1D49"=>"e", "\u1D4A"=>"\u0259", "\u1D4B"=>"\u025B", "\u1D4C"=>"\u025C", "\u1D4D"=>"g", "\u1D4F"=>"k", "\u1D50"=>"m", + "\u1D51"=>"\u014B", "\u1D52"=>"o", "\u1D53"=>"\u0254", "\u1D54"=>"\u1D16", "\u1D55"=>"\u1D17", "\u1D56"=>"p", "\u1D57"=>"t", "\u1D58"=>"u", + "\u1D59"=>"\u1D1D", "\u1D5A"=>"\u026F", "\u1D5B"=>"v", "\u1D5C"=>"\u1D25", "\u1D5D"=>"\u03B2", "\u1D5E"=>"\u03B3", "\u1D5F"=>"\u03B4", "\u1D60"=>"\u03C6", + "\u1D61"=>"\u03C7", "\u1D62"=>"i", "\u1D63"=>"r", "\u1D64"=>"u", "\u1D65"=>"v", "\u1D66"=>"\u03B2", "\u1D67"=>"\u03B3", "\u1D68"=>"\u03C1", + "\u1D69"=>"\u03C6", "\u1D6A"=>"\u03C7", "\u1D78"=>"\u043D", "\u1D9B"=>"\u0252", "\u1D9C"=>"c", "\u1D9D"=>"\u0255", "\u1D9E"=>"\u00F0", "\u1D9F"=>"\u025C", + "\u1DA0"=>"f", "\u1DA1"=>"\u025F", "\u1DA2"=>"\u0261", "\u1DA3"=>"\u0265", "\u1DA4"=>"\u0268", "\u1DA5"=>"\u0269", "\u1DA6"=>"\u026A", "\u1DA7"=>"\u1D7B", + "\u1DA8"=>"\u029D", "\u1DA9"=>"\u026D", "\u1DAA"=>"\u1D85", "\u1DAB"=>"\u029F", "\u1DAC"=>"\u0271", "\u1DAD"=>"\u0270", "\u1DAE"=>"\u0272", "\u1DAF"=>"\u0273", + "\u1DB0"=>"\u0274", "\u1DB1"=>"\u0275", "\u1DB2"=>"\u0278", "\u1DB3"=>"\u0282", "\u1DB4"=>"\u0283", "\u1DB5"=>"\u01AB", "\u1DB6"=>"\u0289", "\u1DB7"=>"\u028A", + "\u1DB8"=>"\u1D1C", "\u1DB9"=>"\u028B", "\u1DBA"=>"\u028C", "\u1DBB"=>"z", "\u1DBC"=>"\u0290", "\u1DBD"=>"\u0291", "\u1DBE"=>"\u0292", "\u1DBF"=>"\u03B8", + "\u1E9A"=>"a\u02BE", "\u1FBD"=>" \u0313", "\u1FBF"=>" \u0313", "\u1FC0"=>" \u0342", "\u1FFE"=>" \u0314", "\u2002"=>" ", "\u2003"=>" ", "\u2004"=>" ", + "\u2005"=>" ", "\u2006"=>" ", "\u2007"=>" ", "\u2008"=>" ", "\u2009"=>" ", "\u200A"=>" ", "\u2011"=>"\u2010", "\u2017"=>" \u0333", + "\u2024"=>".", "\u2025"=>"..", "\u2026"=>"...", "\u202F"=>" ", "\u2033"=>"\u2032\u2032", "\u2034"=>"\u2032\u2032\u2032", "\u2036"=>"\u2035\u2035", "\u2037"=>"\u2035\u2035\u2035", + "\u203C"=>"!!", "\u203E"=>" \u0305", "\u2047"=>"??", "\u2048"=>"?!", "\u2049"=>"!?", "\u2057"=>"\u2032\u2032\u2032\u2032", "\u205F"=>" ", "\u2070"=>"0", + "\u2071"=>"i", "\u2074"=>"4", "\u2075"=>"5", "\u2076"=>"6", "\u2077"=>"7", "\u2078"=>"8", "\u2079"=>"9", "\u207A"=>"+", + "\u207B"=>"\u2212", "\u207C"=>"=", "\u207D"=>"(", "\u207E"=>")", "\u207F"=>"n", "\u2080"=>"0", "\u2081"=>"1", "\u2082"=>"2", + "\u2083"=>"3", "\u2084"=>"4", "\u2085"=>"5", "\u2086"=>"6", "\u2087"=>"7", "\u2088"=>"8", "\u2089"=>"9", "\u208A"=>"+", + "\u208B"=>"\u2212", "\u208C"=>"=", "\u208D"=>"(", "\u208E"=>")", "\u2090"=>"a", "\u2091"=>"e", "\u2092"=>"o", "\u2093"=>"x", + "\u2094"=>"\u0259", "\u2095"=>"h", "\u2096"=>"k", "\u2097"=>"l", "\u2098"=>"m", "\u2099"=>"n", "\u209A"=>"p", "\u209B"=>"s", + "\u209C"=>"t", "\u20A8"=>"Rs", "\u2100"=>"a/c", "\u2101"=>"a/s", "\u2102"=>"C", "\u2103"=>"\u00B0C", "\u2105"=>"c/o", "\u2106"=>"c/u", + "\u2107"=>"\u0190", "\u2109"=>"\u00B0F", "\u210A"=>"g", "\u210B"=>"H", "\u210C"=>"H", "\u210D"=>"H", "\u210E"=>"h", "\u210F"=>"\u0127", + "\u2110"=>"I", "\u2111"=>"I", "\u2112"=>"L", "\u2113"=>"l", "\u2115"=>"N", "\u2116"=>"No", "\u2119"=>"P", "\u211A"=>"Q", + "\u211B"=>"R", "\u211C"=>"R", "\u211D"=>"R", "\u2120"=>"SM", "\u2121"=>"TEL", "\u2122"=>"TM", "\u2124"=>"Z", "\u2128"=>"Z", + "\u212C"=>"B", "\u212D"=>"C", "\u212F"=>"e", "\u2130"=>"E", "\u2131"=>"F", "\u2133"=>"M", "\u2134"=>"o", "\u2135"=>"\u05D0", + "\u2136"=>"\u05D1", "\u2137"=>"\u05D2", "\u2138"=>"\u05D3", "\u2139"=>"i", "\u213B"=>"FAX", "\u213C"=>"\u03C0", "\u213D"=>"\u03B3", "\u213E"=>"\u0393", + "\u213F"=>"\u03A0", "\u2140"=>"\u2211", "\u2145"=>"D", "\u2146"=>"d", "\u2147"=>"e", "\u2148"=>"i", "\u2149"=>"j", "\u2150"=>"1\u20447", + "\u2151"=>"1\u20449", "\u2152"=>"1\u204410", "\u2153"=>"1\u20443", "\u2154"=>"2\u20443", "\u2155"=>"1\u20445", "\u2156"=>"2\u20445", "\u2157"=>"3\u20445", "\u2158"=>"4\u20445", + "\u2159"=>"1\u20446", "\u215A"=>"5\u20446", "\u215B"=>"1\u20448", "\u215C"=>"3\u20448", "\u215D"=>"5\u20448", "\u215E"=>"7\u20448", "\u215F"=>"1\u2044", "\u2160"=>"I", + "\u2161"=>"II", "\u2162"=>"III", "\u2163"=>"IV", "\u2164"=>"V", "\u2165"=>"VI", "\u2166"=>"VII", "\u2167"=>"VIII", "\u2168"=>"IX", + "\u2169"=>"X", "\u216A"=>"XI", "\u216B"=>"XII", "\u216C"=>"L", "\u216D"=>"C", "\u216E"=>"D", "\u216F"=>"M", "\u2170"=>"i", + "\u2171"=>"ii", "\u2172"=>"iii", "\u2173"=>"iv", "\u2174"=>"v", "\u2175"=>"vi", "\u2176"=>"vii", "\u2177"=>"viii", "\u2178"=>"ix", + "\u2179"=>"x", "\u217A"=>"xi", "\u217B"=>"xii", "\u217C"=>"l", "\u217D"=>"c", "\u217E"=>"d", "\u217F"=>"m", "\u2189"=>"0\u20443", + "\u222C"=>"\u222B\u222B", "\u222D"=>"\u222B\u222B\u222B", "\u222F"=>"\u222E\u222E", "\u2230"=>"\u222E\u222E\u222E", "\u2460"=>"1", "\u2461"=>"2", "\u2462"=>"3", "\u2463"=>"4", + "\u2464"=>"5", "\u2465"=>"6", "\u2466"=>"7", "\u2467"=>"8", "\u2468"=>"9", "\u2469"=>"10", "\u246A"=>"11", "\u246B"=>"12", + "\u246C"=>"13", "\u246D"=>"14", "\u246E"=>"15", "\u246F"=>"16", "\u2470"=>"17", "\u2471"=>"18", "\u2472"=>"19", "\u2473"=>"20", + "\u2474"=>"(1)", "\u2475"=>"(2)", "\u2476"=>"(3)", "\u2477"=>"(4)", "\u2478"=>"(5)", "\u2479"=>"(6)", "\u247A"=>"(7)", "\u247B"=>"(8)", + "\u247C"=>"(9)", "\u247D"=>"(10)", "\u247E"=>"(11)", "\u247F"=>"(12)", "\u2480"=>"(13)", "\u2481"=>"(14)", "\u2482"=>"(15)", "\u2483"=>"(16)", + "\u2484"=>"(17)", "\u2485"=>"(18)", "\u2486"=>"(19)", "\u2487"=>"(20)", "\u2488"=>"1.", "\u2489"=>"2.", "\u248A"=>"3.", "\u248B"=>"4.", + "\u248C"=>"5.", "\u248D"=>"6.", "\u248E"=>"7.", "\u248F"=>"8.", "\u2490"=>"9.", "\u2491"=>"10.", "\u2492"=>"11.", "\u2493"=>"12.", + "\u2494"=>"13.", "\u2495"=>"14.", "\u2496"=>"15.", "\u2497"=>"16.", "\u2498"=>"17.", "\u2499"=>"18.", "\u249A"=>"19.", "\u249B"=>"20.", + "\u249C"=>"(a)", "\u249D"=>"(b)", "\u249E"=>"(c)", "\u249F"=>"(d)", "\u24A0"=>"(e)", "\u24A1"=>"(f)", "\u24A2"=>"(g)", "\u24A3"=>"(h)", + "\u24A4"=>"(i)", "\u24A5"=>"(j)", "\u24A6"=>"(k)", "\u24A7"=>"(l)", "\u24A8"=>"(m)", "\u24A9"=>"(n)", "\u24AA"=>"(o)", "\u24AB"=>"(p)", + "\u24AC"=>"(q)", "\u24AD"=>"(r)", "\u24AE"=>"(s)", "\u24AF"=>"(t)", "\u24B0"=>"(u)", "\u24B1"=>"(v)", "\u24B2"=>"(w)", "\u24B3"=>"(x)", + "\u24B4"=>"(y)", "\u24B5"=>"(z)", "\u24B6"=>"A", "\u24B7"=>"B", "\u24B8"=>"C", "\u24B9"=>"D", "\u24BA"=>"E", "\u24BB"=>"F", + "\u24BC"=>"G", "\u24BD"=>"H", "\u24BE"=>"I", "\u24BF"=>"J", "\u24C0"=>"K", "\u24C1"=>"L", "\u24C2"=>"M", "\u24C3"=>"N", + "\u24C4"=>"O", "\u24C5"=>"P", "\u24C6"=>"Q", "\u24C7"=>"R", "\u24C8"=>"S", "\u24C9"=>"T", "\u24CA"=>"U", "\u24CB"=>"V", + "\u24CC"=>"W", "\u24CD"=>"X", "\u24CE"=>"Y", "\u24CF"=>"Z", "\u24D0"=>"a", "\u24D1"=>"b", "\u24D2"=>"c", "\u24D3"=>"d", + "\u24D4"=>"e", "\u24D5"=>"f", "\u24D6"=>"g", "\u24D7"=>"h", "\u24D8"=>"i", "\u24D9"=>"j", "\u24DA"=>"k", "\u24DB"=>"l", + "\u24DC"=>"m", "\u24DD"=>"n", "\u24DE"=>"o", "\u24DF"=>"p", "\u24E0"=>"q", "\u24E1"=>"r", "\u24E2"=>"s", "\u24E3"=>"t", + "\u24E4"=>"u", "\u24E5"=>"v", "\u24E6"=>"w", "\u24E7"=>"x", "\u24E8"=>"y", "\u24E9"=>"z", "\u24EA"=>"0", "\u2A0C"=>"\u222B\u222B\u222B\u222B", + "\u2A74"=>"::=", "\u2A75"=>"==", "\u2A76"=>"===", "\u2C7C"=>"j", "\u2C7D"=>"V", "\u2D6F"=>"\u2D61", "\u2E9F"=>"\u6BCD", "\u2EF3"=>"\u9F9F", + "\u2F00"=>"\u4E00", "\u2F01"=>"\u4E28", "\u2F02"=>"\u4E36", "\u2F03"=>"\u4E3F", "\u2F04"=>"\u4E59", "\u2F05"=>"\u4E85", "\u2F06"=>"\u4E8C", "\u2F07"=>"\u4EA0", + "\u2F08"=>"\u4EBA", "\u2F09"=>"\u513F", "\u2F0A"=>"\u5165", "\u2F0B"=>"\u516B", "\u2F0C"=>"\u5182", "\u2F0D"=>"\u5196", "\u2F0E"=>"\u51AB", "\u2F0F"=>"\u51E0", + "\u2F10"=>"\u51F5", "\u2F11"=>"\u5200", "\u2F12"=>"\u529B", "\u2F13"=>"\u52F9", "\u2F14"=>"\u5315", "\u2F15"=>"\u531A", "\u2F16"=>"\u5338", "\u2F17"=>"\u5341", + "\u2F18"=>"\u535C", "\u2F19"=>"\u5369", "\u2F1A"=>"\u5382", "\u2F1B"=>"\u53B6", "\u2F1C"=>"\u53C8", "\u2F1D"=>"\u53E3", "\u2F1E"=>"\u56D7", "\u2F1F"=>"\u571F", + "\u2F20"=>"\u58EB", "\u2F21"=>"\u5902", "\u2F22"=>"\u590A", "\u2F23"=>"\u5915", "\u2F24"=>"\u5927", "\u2F25"=>"\u5973", "\u2F26"=>"\u5B50", "\u2F27"=>"\u5B80", + "\u2F28"=>"\u5BF8", "\u2F29"=>"\u5C0F", "\u2F2A"=>"\u5C22", "\u2F2B"=>"\u5C38", "\u2F2C"=>"\u5C6E", "\u2F2D"=>"\u5C71", "\u2F2E"=>"\u5DDB", "\u2F2F"=>"\u5DE5", + "\u2F30"=>"\u5DF1", "\u2F31"=>"\u5DFE", "\u2F32"=>"\u5E72", "\u2F33"=>"\u5E7A", "\u2F34"=>"\u5E7F", "\u2F35"=>"\u5EF4", "\u2F36"=>"\u5EFE", "\u2F37"=>"\u5F0B", + "\u2F38"=>"\u5F13", "\u2F39"=>"\u5F50", "\u2F3A"=>"\u5F61", "\u2F3B"=>"\u5F73", "\u2F3C"=>"\u5FC3", "\u2F3D"=>"\u6208", "\u2F3E"=>"\u6236", "\u2F3F"=>"\u624B", + "\u2F40"=>"\u652F", "\u2F41"=>"\u6534", "\u2F42"=>"\u6587", "\u2F43"=>"\u6597", "\u2F44"=>"\u65A4", "\u2F45"=>"\u65B9", "\u2F46"=>"\u65E0", "\u2F47"=>"\u65E5", + "\u2F48"=>"\u66F0", "\u2F49"=>"\u6708", "\u2F4A"=>"\u6728", "\u2F4B"=>"\u6B20", "\u2F4C"=>"\u6B62", "\u2F4D"=>"\u6B79", "\u2F4E"=>"\u6BB3", "\u2F4F"=>"\u6BCB", + "\u2F50"=>"\u6BD4", "\u2F51"=>"\u6BDB", "\u2F52"=>"\u6C0F", "\u2F53"=>"\u6C14", "\u2F54"=>"\u6C34", "\u2F55"=>"\u706B", "\u2F56"=>"\u722A", "\u2F57"=>"\u7236", + "\u2F58"=>"\u723B", "\u2F59"=>"\u723F", "\u2F5A"=>"\u7247", "\u2F5B"=>"\u7259", "\u2F5C"=>"\u725B", "\u2F5D"=>"\u72AC", "\u2F5E"=>"\u7384", "\u2F5F"=>"\u7389", + "\u2F60"=>"\u74DC", "\u2F61"=>"\u74E6", "\u2F62"=>"\u7518", "\u2F63"=>"\u751F", "\u2F64"=>"\u7528", "\u2F65"=>"\u7530", "\u2F66"=>"\u758B", "\u2F67"=>"\u7592", + "\u2F68"=>"\u7676", "\u2F69"=>"\u767D", "\u2F6A"=>"\u76AE", "\u2F6B"=>"\u76BF", "\u2F6C"=>"\u76EE", "\u2F6D"=>"\u77DB", "\u2F6E"=>"\u77E2", "\u2F6F"=>"\u77F3", + "\u2F70"=>"\u793A", "\u2F71"=>"\u79B8", "\u2F72"=>"\u79BE", "\u2F73"=>"\u7A74", "\u2F74"=>"\u7ACB", "\u2F75"=>"\u7AF9", "\u2F76"=>"\u7C73", "\u2F77"=>"\u7CF8", + "\u2F78"=>"\u7F36", "\u2F79"=>"\u7F51", "\u2F7A"=>"\u7F8A", "\u2F7B"=>"\u7FBD", "\u2F7C"=>"\u8001", "\u2F7D"=>"\u800C", "\u2F7E"=>"\u8012", "\u2F7F"=>"\u8033", + "\u2F80"=>"\u807F", "\u2F81"=>"\u8089", "\u2F82"=>"\u81E3", "\u2F83"=>"\u81EA", "\u2F84"=>"\u81F3", "\u2F85"=>"\u81FC", "\u2F86"=>"\u820C", "\u2F87"=>"\u821B", + "\u2F88"=>"\u821F", "\u2F89"=>"\u826E", "\u2F8A"=>"\u8272", "\u2F8B"=>"\u8278", "\u2F8C"=>"\u864D", "\u2F8D"=>"\u866B", "\u2F8E"=>"\u8840", "\u2F8F"=>"\u884C", + "\u2F90"=>"\u8863", "\u2F91"=>"\u897E", "\u2F92"=>"\u898B", "\u2F93"=>"\u89D2", "\u2F94"=>"\u8A00", "\u2F95"=>"\u8C37", "\u2F96"=>"\u8C46", "\u2F97"=>"\u8C55", + "\u2F98"=>"\u8C78", "\u2F99"=>"\u8C9D", "\u2F9A"=>"\u8D64", "\u2F9B"=>"\u8D70", "\u2F9C"=>"\u8DB3", "\u2F9D"=>"\u8EAB", "\u2F9E"=>"\u8ECA", "\u2F9F"=>"\u8F9B", + "\u2FA0"=>"\u8FB0", "\u2FA1"=>"\u8FB5", "\u2FA2"=>"\u9091", "\u2FA3"=>"\u9149", "\u2FA4"=>"\u91C6", "\u2FA5"=>"\u91CC", "\u2FA6"=>"\u91D1", "\u2FA7"=>"\u9577", + "\u2FA8"=>"\u9580", "\u2FA9"=>"\u961C", "\u2FAA"=>"\u96B6", "\u2FAB"=>"\u96B9", "\u2FAC"=>"\u96E8", "\u2FAD"=>"\u9751", "\u2FAE"=>"\u975E", "\u2FAF"=>"\u9762", + "\u2FB0"=>"\u9769", "\u2FB1"=>"\u97CB", "\u2FB2"=>"\u97ED", "\u2FB3"=>"\u97F3", "\u2FB4"=>"\u9801", "\u2FB5"=>"\u98A8", "\u2FB6"=>"\u98DB", "\u2FB7"=>"\u98DF", + "\u2FB8"=>"\u9996", "\u2FB9"=>"\u9999", "\u2FBA"=>"\u99AC", "\u2FBB"=>"\u9AA8", "\u2FBC"=>"\u9AD8", "\u2FBD"=>"\u9ADF", "\u2FBE"=>"\u9B25", "\u2FBF"=>"\u9B2F", + "\u2FC0"=>"\u9B32", "\u2FC1"=>"\u9B3C", "\u2FC2"=>"\u9B5A", "\u2FC3"=>"\u9CE5", "\u2FC4"=>"\u9E75", "\u2FC5"=>"\u9E7F", "\u2FC6"=>"\u9EA5", "\u2FC7"=>"\u9EBB", + "\u2FC8"=>"\u9EC3", "\u2FC9"=>"\u9ECD", "\u2FCA"=>"\u9ED1", "\u2FCB"=>"\u9EF9", "\u2FCC"=>"\u9EFD", "\u2FCD"=>"\u9F0E", "\u2FCE"=>"\u9F13", "\u2FCF"=>"\u9F20", + "\u2FD0"=>"\u9F3B", "\u2FD1"=>"\u9F4A", "\u2FD2"=>"\u9F52", "\u2FD3"=>"\u9F8D", "\u2FD4"=>"\u9F9C", "\u2FD5"=>"\u9FA0", "\u3000"=>" ", "\u3036"=>"\u3012", + "\u3038"=>"\u5341", "\u3039"=>"\u5344", "\u303A"=>"\u5345", "\u309B"=>" \u3099", "\u309C"=>" \u309A", "\u309F"=>"\u3088\u308A", "\u30FF"=>"\u30B3\u30C8", "\u3131"=>"\u1100", + "\u3132"=>"\u1101", "\u3133"=>"\u11AA", "\u3134"=>"\u1102", "\u3135"=>"\u11AC", "\u3136"=>"\u11AD", "\u3137"=>"\u1103", "\u3138"=>"\u1104", "\u3139"=>"\u1105", + "\u313A"=>"\u11B0", "\u313B"=>"\u11B1", "\u313C"=>"\u11B2", "\u313D"=>"\u11B3", "\u313E"=>"\u11B4", "\u313F"=>"\u11B5", "\u3140"=>"\u111A", "\u3141"=>"\u1106", + "\u3142"=>"\u1107", "\u3143"=>"\u1108", "\u3144"=>"\u1121", "\u3145"=>"\u1109", "\u3146"=>"\u110A", "\u3147"=>"\u110B", "\u3148"=>"\u110C", "\u3149"=>"\u110D", + "\u314A"=>"\u110E", "\u314B"=>"\u110F", "\u314C"=>"\u1110", "\u314D"=>"\u1111", "\u314E"=>"\u1112", "\u314F"=>"\u1161", "\u3150"=>"\u1162", "\u3151"=>"\u1163", + "\u3152"=>"\u1164", "\u3153"=>"\u1165", "\u3154"=>"\u1166", "\u3155"=>"\u1167", "\u3156"=>"\u1168", "\u3157"=>"\u1169", "\u3158"=>"\u116A", "\u3159"=>"\u116B", + "\u315A"=>"\u116C", "\u315B"=>"\u116D", "\u315C"=>"\u116E", "\u315D"=>"\u116F", "\u315E"=>"\u1170", "\u315F"=>"\u1171", "\u3160"=>"\u1172", "\u3161"=>"\u1173", + "\u3162"=>"\u1174", "\u3163"=>"\u1175", "\u3164"=>"\u1160", "\u3165"=>"\u1114", "\u3166"=>"\u1115", "\u3167"=>"\u11C7", "\u3168"=>"\u11C8", "\u3169"=>"\u11CC", + "\u316A"=>"\u11CE", "\u316B"=>"\u11D3", "\u316C"=>"\u11D7", "\u316D"=>"\u11D9", "\u316E"=>"\u111C", "\u316F"=>"\u11DD", "\u3170"=>"\u11DF", "\u3171"=>"\u111D", + "\u3172"=>"\u111E", "\u3173"=>"\u1120", "\u3174"=>"\u1122", "\u3175"=>"\u1123", "\u3176"=>"\u1127", "\u3177"=>"\u1129", "\u3178"=>"\u112B", "\u3179"=>"\u112C", + "\u317A"=>"\u112D", "\u317B"=>"\u112E", "\u317C"=>"\u112F", "\u317D"=>"\u1132", "\u317E"=>"\u1136", "\u317F"=>"\u1140", "\u3180"=>"\u1147", "\u3181"=>"\u114C", + "\u3182"=>"\u11F1", "\u3183"=>"\u11F2", "\u3184"=>"\u1157", "\u3185"=>"\u1158", "\u3186"=>"\u1159", "\u3187"=>"\u1184", "\u3188"=>"\u1185", "\u3189"=>"\u1188", + "\u318A"=>"\u1191", "\u318B"=>"\u1192", "\u318C"=>"\u1194", "\u318D"=>"\u119E", "\u318E"=>"\u11A1", "\u3192"=>"\u4E00", "\u3193"=>"\u4E8C", "\u3194"=>"\u4E09", + "\u3195"=>"\u56DB", "\u3196"=>"\u4E0A", "\u3197"=>"\u4E2D", "\u3198"=>"\u4E0B", "\u3199"=>"\u7532", "\u319A"=>"\u4E59", "\u319B"=>"\u4E19", "\u319C"=>"\u4E01", + "\u319D"=>"\u5929", "\u319E"=>"\u5730", "\u319F"=>"\u4EBA", "\u3200"=>"(\u1100)", "\u3201"=>"(\u1102)", "\u3202"=>"(\u1103)", "\u3203"=>"(\u1105)", "\u3204"=>"(\u1106)", + "\u3205"=>"(\u1107)", "\u3206"=>"(\u1109)", "\u3207"=>"(\u110B)", "\u3208"=>"(\u110C)", "\u3209"=>"(\u110E)", "\u320A"=>"(\u110F)", "\u320B"=>"(\u1110)", "\u320C"=>"(\u1111)", + "\u320D"=>"(\u1112)", "\u320E"=>"(\u1100\u1161)", "\u320F"=>"(\u1102\u1161)", "\u3210"=>"(\u1103\u1161)", "\u3211"=>"(\u1105\u1161)", "\u3212"=>"(\u1106\u1161)", "\u3213"=>"(\u1107\u1161)", "\u3214"=>"(\u1109\u1161)", + "\u3215"=>"(\u110B\u1161)", "\u3216"=>"(\u110C\u1161)", "\u3217"=>"(\u110E\u1161)", "\u3218"=>"(\u110F\u1161)", "\u3219"=>"(\u1110\u1161)", "\u321A"=>"(\u1111\u1161)", "\u321B"=>"(\u1112\u1161)", "\u321C"=>"(\u110C\u116E)", + "\u321D"=>"(\u110B\u1169\u110C\u1165\u11AB)", "\u321E"=>"(\u110B\u1169\u1112\u116E)", "\u3220"=>"(\u4E00)", "\u3221"=>"(\u4E8C)", "\u3222"=>"(\u4E09)", "\u3223"=>"(\u56DB)", "\u3224"=>"(\u4E94)", "\u3225"=>"(\u516D)", + "\u3226"=>"(\u4E03)", "\u3227"=>"(\u516B)", "\u3228"=>"(\u4E5D)", "\u3229"=>"(\u5341)", "\u322A"=>"(\u6708)", "\u322B"=>"(\u706B)", "\u322C"=>"(\u6C34)", "\u322D"=>"(\u6728)", + "\u322E"=>"(\u91D1)", "\u322F"=>"(\u571F)", "\u3230"=>"(\u65E5)", "\u3231"=>"(\u682A)", "\u3232"=>"(\u6709)", "\u3233"=>"(\u793E)", "\u3234"=>"(\u540D)", "\u3235"=>"(\u7279)", + "\u3236"=>"(\u8CA1)", "\u3237"=>"(\u795D)", "\u3238"=>"(\u52B4)", "\u3239"=>"(\u4EE3)", "\u323A"=>"(\u547C)", "\u323B"=>"(\u5B66)", "\u323C"=>"(\u76E3)", "\u323D"=>"(\u4F01)", + "\u323E"=>"(\u8CC7)", "\u323F"=>"(\u5354)", "\u3240"=>"(\u796D)", "\u3241"=>"(\u4F11)", "\u3242"=>"(\u81EA)", "\u3243"=>"(\u81F3)", "\u3244"=>"\u554F", "\u3245"=>"\u5E7C", + "\u3246"=>"\u6587", "\u3247"=>"\u7B8F", "\u3250"=>"PTE", "\u3251"=>"21", "\u3252"=>"22", "\u3253"=>"23", "\u3254"=>"24", "\u3255"=>"25", + "\u3256"=>"26", "\u3257"=>"27", "\u3258"=>"28", "\u3259"=>"29", "\u325A"=>"30", "\u325B"=>"31", "\u325C"=>"32", "\u325D"=>"33", + "\u325E"=>"34", "\u325F"=>"35", "\u3260"=>"\u1100", "\u3261"=>"\u1102", "\u3262"=>"\u1103", "\u3263"=>"\u1105", "\u3264"=>"\u1106", "\u3265"=>"\u1107", + "\u3266"=>"\u1109", "\u3267"=>"\u110B", "\u3268"=>"\u110C", "\u3269"=>"\u110E", "\u326A"=>"\u110F", "\u326B"=>"\u1110", "\u326C"=>"\u1111", "\u326D"=>"\u1112", + "\u326E"=>"\u1100\u1161", "\u326F"=>"\u1102\u1161", "\u3270"=>"\u1103\u1161", "\u3271"=>"\u1105\u1161", "\u3272"=>"\u1106\u1161", "\u3273"=>"\u1107\u1161", "\u3274"=>"\u1109\u1161", "\u3275"=>"\u110B\u1161", + "\u3276"=>"\u110C\u1161", "\u3277"=>"\u110E\u1161", "\u3278"=>"\u110F\u1161", "\u3279"=>"\u1110\u1161", "\u327A"=>"\u1111\u1161", "\u327B"=>"\u1112\u1161", "\u327C"=>"\u110E\u1161\u11B7\u1100\u1169", "\u327D"=>"\u110C\u116E\u110B\u1174", + "\u327E"=>"\u110B\u116E", "\u3280"=>"\u4E00", "\u3281"=>"\u4E8C", "\u3282"=>"\u4E09", "\u3283"=>"\u56DB", "\u3284"=>"\u4E94", "\u3285"=>"\u516D", "\u3286"=>"\u4E03", + "\u3287"=>"\u516B", "\u3288"=>"\u4E5D", "\u3289"=>"\u5341", "\u328A"=>"\u6708", "\u328B"=>"\u706B", "\u328C"=>"\u6C34", "\u328D"=>"\u6728", "\u328E"=>"\u91D1", + "\u328F"=>"\u571F", "\u3290"=>"\u65E5", "\u3291"=>"\u682A", "\u3292"=>"\u6709", "\u3293"=>"\u793E", "\u3294"=>"\u540D", "\u3295"=>"\u7279", "\u3296"=>"\u8CA1", + "\u3297"=>"\u795D", "\u3298"=>"\u52B4", "\u3299"=>"\u79D8", "\u329A"=>"\u7537", "\u329B"=>"\u5973", "\u329C"=>"\u9069", "\u329D"=>"\u512A", "\u329E"=>"\u5370", + "\u329F"=>"\u6CE8", "\u32A0"=>"\u9805", "\u32A1"=>"\u4F11", "\u32A2"=>"\u5199", "\u32A3"=>"\u6B63", "\u32A4"=>"\u4E0A", "\u32A5"=>"\u4E2D", "\u32A6"=>"\u4E0B", + "\u32A7"=>"\u5DE6", "\u32A8"=>"\u53F3", "\u32A9"=>"\u533B", "\u32AA"=>"\u5B97", "\u32AB"=>"\u5B66", "\u32AC"=>"\u76E3", "\u32AD"=>"\u4F01", "\u32AE"=>"\u8CC7", + "\u32AF"=>"\u5354", "\u32B0"=>"\u591C", "\u32B1"=>"36", "\u32B2"=>"37", "\u32B3"=>"38", "\u32B4"=>"39", "\u32B5"=>"40", "\u32B6"=>"41", + "\u32B7"=>"42", "\u32B8"=>"43", "\u32B9"=>"44", "\u32BA"=>"45", "\u32BB"=>"46", "\u32BC"=>"47", "\u32BD"=>"48", "\u32BE"=>"49", + "\u32BF"=>"50", "\u32C0"=>"1\u6708", "\u32C1"=>"2\u6708", "\u32C2"=>"3\u6708", "\u32C3"=>"4\u6708", "\u32C4"=>"5\u6708", "\u32C5"=>"6\u6708", "\u32C6"=>"7\u6708", + "\u32C7"=>"8\u6708", "\u32C8"=>"9\u6708", "\u32C9"=>"10\u6708", "\u32CA"=>"11\u6708", "\u32CB"=>"12\u6708", "\u32CC"=>"Hg", "\u32CD"=>"erg", "\u32CE"=>"eV", + "\u32CF"=>"LTD", "\u32D0"=>"\u30A2", "\u32D1"=>"\u30A4", "\u32D2"=>"\u30A6", "\u32D3"=>"\u30A8", "\u32D4"=>"\u30AA", "\u32D5"=>"\u30AB", "\u32D6"=>"\u30AD", + "\u32D7"=>"\u30AF", "\u32D8"=>"\u30B1", "\u32D9"=>"\u30B3", "\u32DA"=>"\u30B5", "\u32DB"=>"\u30B7", "\u32DC"=>"\u30B9", "\u32DD"=>"\u30BB", "\u32DE"=>"\u30BD", + "\u32DF"=>"\u30BF", "\u32E0"=>"\u30C1", "\u32E1"=>"\u30C4", "\u32E2"=>"\u30C6", "\u32E3"=>"\u30C8", "\u32E4"=>"\u30CA", "\u32E5"=>"\u30CB", "\u32E6"=>"\u30CC", + "\u32E7"=>"\u30CD", "\u32E8"=>"\u30CE", "\u32E9"=>"\u30CF", "\u32EA"=>"\u30D2", "\u32EB"=>"\u30D5", "\u32EC"=>"\u30D8", "\u32ED"=>"\u30DB", "\u32EE"=>"\u30DE", + "\u32EF"=>"\u30DF", "\u32F0"=>"\u30E0", "\u32F1"=>"\u30E1", "\u32F2"=>"\u30E2", "\u32F3"=>"\u30E4", "\u32F4"=>"\u30E6", "\u32F5"=>"\u30E8", "\u32F6"=>"\u30E9", + "\u32F7"=>"\u30EA", "\u32F8"=>"\u30EB", "\u32F9"=>"\u30EC", "\u32FA"=>"\u30ED", "\u32FB"=>"\u30EF", "\u32FC"=>"\u30F0", "\u32FD"=>"\u30F1", "\u32FE"=>"\u30F2", + "\u3300"=>"\u30A2\u30D1\u30FC\u30C8", "\u3301"=>"\u30A2\u30EB\u30D5\u30A1", "\u3302"=>"\u30A2\u30F3\u30DA\u30A2", "\u3303"=>"\u30A2\u30FC\u30EB", "\u3304"=>"\u30A4\u30CB\u30F3\u30B0", "\u3305"=>"\u30A4\u30F3\u30C1", "\u3306"=>"\u30A6\u30A9\u30F3", "\u3307"=>"\u30A8\u30B9\u30AF\u30FC\u30C9", + "\u3308"=>"\u30A8\u30FC\u30AB\u30FC", "\u3309"=>"\u30AA\u30F3\u30B9", "\u330A"=>"\u30AA\u30FC\u30E0", "\u330B"=>"\u30AB\u30A4\u30EA", "\u330C"=>"\u30AB\u30E9\u30C3\u30C8", "\u330D"=>"\u30AB\u30ED\u30EA\u30FC", "\u330E"=>"\u30AC\u30ED\u30F3", "\u330F"=>"\u30AC\u30F3\u30DE", + "\u3310"=>"\u30AE\u30AC", "\u3311"=>"\u30AE\u30CB\u30FC", "\u3312"=>"\u30AD\u30E5\u30EA\u30FC", "\u3313"=>"\u30AE\u30EB\u30C0\u30FC", "\u3314"=>"\u30AD\u30ED", "\u3315"=>"\u30AD\u30ED\u30B0\u30E9\u30E0", "\u3316"=>"\u30AD\u30ED\u30E1\u30FC\u30C8\u30EB", "\u3317"=>"\u30AD\u30ED\u30EF\u30C3\u30C8", + "\u3318"=>"\u30B0\u30E9\u30E0", "\u3319"=>"\u30B0\u30E9\u30E0\u30C8\u30F3", "\u331A"=>"\u30AF\u30EB\u30BC\u30A4\u30ED", "\u331B"=>"\u30AF\u30ED\u30FC\u30CD", "\u331C"=>"\u30B1\u30FC\u30B9", "\u331D"=>"\u30B3\u30EB\u30CA", "\u331E"=>"\u30B3\u30FC\u30DD", "\u331F"=>"\u30B5\u30A4\u30AF\u30EB", + "\u3320"=>"\u30B5\u30F3\u30C1\u30FC\u30E0", "\u3321"=>"\u30B7\u30EA\u30F3\u30B0", "\u3322"=>"\u30BB\u30F3\u30C1", "\u3323"=>"\u30BB\u30F3\u30C8", "\u3324"=>"\u30C0\u30FC\u30B9", "\u3325"=>"\u30C7\u30B7", "\u3326"=>"\u30C9\u30EB", "\u3327"=>"\u30C8\u30F3", + "\u3328"=>"\u30CA\u30CE", "\u3329"=>"\u30CE\u30C3\u30C8", "\u332A"=>"\u30CF\u30A4\u30C4", "\u332B"=>"\u30D1\u30FC\u30BB\u30F3\u30C8", "\u332C"=>"\u30D1\u30FC\u30C4", "\u332D"=>"\u30D0\u30FC\u30EC\u30EB", "\u332E"=>"\u30D4\u30A2\u30B9\u30C8\u30EB", "\u332F"=>"\u30D4\u30AF\u30EB", + "\u3330"=>"\u30D4\u30B3", "\u3331"=>"\u30D3\u30EB", "\u3332"=>"\u30D5\u30A1\u30E9\u30C3\u30C9", "\u3333"=>"\u30D5\u30A3\u30FC\u30C8", "\u3334"=>"\u30D6\u30C3\u30B7\u30A7\u30EB", "\u3335"=>"\u30D5\u30E9\u30F3", "\u3336"=>"\u30D8\u30AF\u30BF\u30FC\u30EB", "\u3337"=>"\u30DA\u30BD", + "\u3338"=>"\u30DA\u30CB\u30D2", "\u3339"=>"\u30D8\u30EB\u30C4", "\u333A"=>"\u30DA\u30F3\u30B9", "\u333B"=>"\u30DA\u30FC\u30B8", "\u333C"=>"\u30D9\u30FC\u30BF", "\u333D"=>"\u30DD\u30A4\u30F3\u30C8", "\u333E"=>"\u30DC\u30EB\u30C8", "\u333F"=>"\u30DB\u30F3", + "\u3340"=>"\u30DD\u30F3\u30C9", "\u3341"=>"\u30DB\u30FC\u30EB", "\u3342"=>"\u30DB\u30FC\u30F3", "\u3343"=>"\u30DE\u30A4\u30AF\u30ED", "\u3344"=>"\u30DE\u30A4\u30EB", "\u3345"=>"\u30DE\u30C3\u30CF", "\u3346"=>"\u30DE\u30EB\u30AF", "\u3347"=>"\u30DE\u30F3\u30B7\u30E7\u30F3", + "\u3348"=>"\u30DF\u30AF\u30ED\u30F3", "\u3349"=>"\u30DF\u30EA", "\u334A"=>"\u30DF\u30EA\u30D0\u30FC\u30EB", "\u334B"=>"\u30E1\u30AC", "\u334C"=>"\u30E1\u30AC\u30C8\u30F3", "\u334D"=>"\u30E1\u30FC\u30C8\u30EB", "\u334E"=>"\u30E4\u30FC\u30C9", "\u334F"=>"\u30E4\u30FC\u30EB", + "\u3350"=>"\u30E6\u30A2\u30F3", "\u3351"=>"\u30EA\u30C3\u30C8\u30EB", "\u3352"=>"\u30EA\u30E9", "\u3353"=>"\u30EB\u30D4\u30FC", "\u3354"=>"\u30EB\u30FC\u30D6\u30EB", "\u3355"=>"\u30EC\u30E0", "\u3356"=>"\u30EC\u30F3\u30C8\u30B2\u30F3", "\u3357"=>"\u30EF\u30C3\u30C8", + "\u3358"=>"0\u70B9", "\u3359"=>"1\u70B9", "\u335A"=>"2\u70B9", "\u335B"=>"3\u70B9", "\u335C"=>"4\u70B9", "\u335D"=>"5\u70B9", "\u335E"=>"6\u70B9", "\u335F"=>"7\u70B9", + "\u3360"=>"8\u70B9", "\u3361"=>"9\u70B9", "\u3362"=>"10\u70B9", "\u3363"=>"11\u70B9", "\u3364"=>"12\u70B9", "\u3365"=>"13\u70B9", "\u3366"=>"14\u70B9", "\u3367"=>"15\u70B9", + "\u3368"=>"16\u70B9", "\u3369"=>"17\u70B9", "\u336A"=>"18\u70B9", "\u336B"=>"19\u70B9", "\u336C"=>"20\u70B9", "\u336D"=>"21\u70B9", "\u336E"=>"22\u70B9", "\u336F"=>"23\u70B9", + "\u3370"=>"24\u70B9", "\u3371"=>"hPa", "\u3372"=>"da", "\u3373"=>"AU", "\u3374"=>"bar", "\u3375"=>"oV", "\u3376"=>"pc", "\u3377"=>"dm", + "\u3378"=>"dm2", "\u3379"=>"dm3", "\u337A"=>"IU", "\u337B"=>"\u5E73\u6210", "\u337C"=>"\u662D\u548C", "\u337D"=>"\u5927\u6B63", "\u337E"=>"\u660E\u6CBB", "\u337F"=>"\u682A\u5F0F\u4F1A\u793E", + "\u3380"=>"pA", "\u3381"=>"nA", "\u3382"=>"\u03BCA", "\u3383"=>"mA", "\u3384"=>"kA", "\u3385"=>"KB", "\u3386"=>"MB", "\u3387"=>"GB", + "\u3388"=>"cal", "\u3389"=>"kcal", "\u338A"=>"pF", "\u338B"=>"nF", "\u338C"=>"\u03BCF", "\u338D"=>"\u03BCg", "\u338E"=>"mg", "\u338F"=>"kg", + "\u3390"=>"Hz", "\u3391"=>"kHz", "\u3392"=>"MHz", "\u3393"=>"GHz", "\u3394"=>"THz", "\u3395"=>"\u03BCl", "\u3396"=>"ml", "\u3397"=>"dl", + "\u3398"=>"kl", "\u3399"=>"fm", "\u339A"=>"nm", "\u339B"=>"\u03BCm", "\u339C"=>"mm", "\u339D"=>"cm", "\u339E"=>"km", "\u339F"=>"mm2", + "\u33A0"=>"cm2", "\u33A1"=>"m2", "\u33A2"=>"km2", "\u33A3"=>"mm3", "\u33A4"=>"cm3", "\u33A5"=>"m3", "\u33A6"=>"km3", "\u33A7"=>"m\u2215s", + "\u33A8"=>"m\u2215s2", "\u33A9"=>"Pa", "\u33AA"=>"kPa", "\u33AB"=>"MPa", "\u33AC"=>"GPa", "\u33AD"=>"rad", "\u33AE"=>"rad\u2215s", "\u33AF"=>"rad\u2215s2", + "\u33B0"=>"ps", "\u33B1"=>"ns", "\u33B2"=>"\u03BCs", "\u33B3"=>"ms", "\u33B4"=>"pV", "\u33B5"=>"nV", "\u33B6"=>"\u03BCV", "\u33B7"=>"mV", + "\u33B8"=>"kV", "\u33B9"=>"MV", "\u33BA"=>"pW", "\u33BB"=>"nW", "\u33BC"=>"\u03BCW", "\u33BD"=>"mW", "\u33BE"=>"kW", "\u33BF"=>"MW", + "\u33C0"=>"k\u03A9", "\u33C1"=>"M\u03A9", "\u33C2"=>"a.m.", "\u33C3"=>"Bq", "\u33C4"=>"cc", "\u33C5"=>"cd", "\u33C6"=>"C\u2215kg", "\u33C7"=>"Co.", + "\u33C8"=>"dB", "\u33C9"=>"Gy", "\u33CA"=>"ha", "\u33CB"=>"HP", "\u33CC"=>"in", "\u33CD"=>"KK", "\u33CE"=>"KM", "\u33CF"=>"kt", + "\u33D0"=>"lm", "\u33D1"=>"ln", "\u33D2"=>"log", "\u33D3"=>"lx", "\u33D4"=>"mb", "\u33D5"=>"mil", "\u33D6"=>"mol", "\u33D7"=>"PH", + "\u33D8"=>"p.m.", "\u33D9"=>"PPM", "\u33DA"=>"PR", "\u33DB"=>"sr", "\u33DC"=>"Sv", "\u33DD"=>"Wb", "\u33DE"=>"V\u2215m", "\u33DF"=>"A\u2215m", + "\u33E0"=>"1\u65E5", "\u33E1"=>"2\u65E5", "\u33E2"=>"3\u65E5", "\u33E3"=>"4\u65E5", "\u33E4"=>"5\u65E5", "\u33E5"=>"6\u65E5", "\u33E6"=>"7\u65E5", "\u33E7"=>"8\u65E5", + "\u33E8"=>"9\u65E5", "\u33E9"=>"10\u65E5", "\u33EA"=>"11\u65E5", "\u33EB"=>"12\u65E5", "\u33EC"=>"13\u65E5", "\u33ED"=>"14\u65E5", "\u33EE"=>"15\u65E5", "\u33EF"=>"16\u65E5", + "\u33F0"=>"17\u65E5", "\u33F1"=>"18\u65E5", "\u33F2"=>"19\u65E5", "\u33F3"=>"20\u65E5", "\u33F4"=>"21\u65E5", "\u33F5"=>"22\u65E5", "\u33F6"=>"23\u65E5", "\u33F7"=>"24\u65E5", + "\u33F8"=>"25\u65E5", "\u33F9"=>"26\u65E5", "\u33FA"=>"27\u65E5", "\u33FB"=>"28\u65E5", "\u33FC"=>"29\u65E5", "\u33FD"=>"30\u65E5", "\u33FE"=>"31\u65E5", "\u33FF"=>"gal", + "\uA69C"=>"\u044A", "\uA69D"=>"\u044C", "\uA770"=>"\uA76F", "\uA7F8"=>"\u0126", "\uA7F9"=>"\u0153", "\uAB5C"=>"\uA727", "\uAB5D"=>"\uAB37", "\uAB5E"=>"\u026B", + "\uAB5F"=>"\uAB52", "\uFB00"=>"ff", "\uFB01"=>"fi", "\uFB02"=>"fl", "\uFB03"=>"ffi", "\uFB04"=>"ffl", "\uFB05"=>"st", "\uFB06"=>"st", + "\uFB13"=>"\u0574\u0576", "\uFB14"=>"\u0574\u0565", "\uFB15"=>"\u0574\u056B", "\uFB16"=>"\u057E\u0576", "\uFB17"=>"\u0574\u056D", "\uFB20"=>"\u05E2", "\uFB21"=>"\u05D0", "\uFB22"=>"\u05D3", + "\uFB23"=>"\u05D4", "\uFB24"=>"\u05DB", "\uFB25"=>"\u05DC", "\uFB26"=>"\u05DD", "\uFB27"=>"\u05E8", "\uFB28"=>"\u05EA", "\uFB29"=>"+", "\uFB4F"=>"\u05D0\u05DC", + "\uFB50"=>"\u0671", "\uFB51"=>"\u0671", "\uFB52"=>"\u067B", "\uFB53"=>"\u067B", "\uFB54"=>"\u067B", "\uFB55"=>"\u067B", "\uFB56"=>"\u067E", "\uFB57"=>"\u067E", + "\uFB58"=>"\u067E", "\uFB59"=>"\u067E", "\uFB5A"=>"\u0680", "\uFB5B"=>"\u0680", "\uFB5C"=>"\u0680", "\uFB5D"=>"\u0680", "\uFB5E"=>"\u067A", "\uFB5F"=>"\u067A", + "\uFB60"=>"\u067A", "\uFB61"=>"\u067A", "\uFB62"=>"\u067F", "\uFB63"=>"\u067F", "\uFB64"=>"\u067F", "\uFB65"=>"\u067F", "\uFB66"=>"\u0679", "\uFB67"=>"\u0679", + "\uFB68"=>"\u0679", "\uFB69"=>"\u0679", "\uFB6A"=>"\u06A4", "\uFB6B"=>"\u06A4", "\uFB6C"=>"\u06A4", "\uFB6D"=>"\u06A4", "\uFB6E"=>"\u06A6", "\uFB6F"=>"\u06A6", + "\uFB70"=>"\u06A6", "\uFB71"=>"\u06A6", "\uFB72"=>"\u0684", "\uFB73"=>"\u0684", "\uFB74"=>"\u0684", "\uFB75"=>"\u0684", "\uFB76"=>"\u0683", "\uFB77"=>"\u0683", + "\uFB78"=>"\u0683", "\uFB79"=>"\u0683", "\uFB7A"=>"\u0686", "\uFB7B"=>"\u0686", "\uFB7C"=>"\u0686", "\uFB7D"=>"\u0686", "\uFB7E"=>"\u0687", "\uFB7F"=>"\u0687", + "\uFB80"=>"\u0687", "\uFB81"=>"\u0687", "\uFB82"=>"\u068D", "\uFB83"=>"\u068D", "\uFB84"=>"\u068C", "\uFB85"=>"\u068C", "\uFB86"=>"\u068E", "\uFB87"=>"\u068E", + "\uFB88"=>"\u0688", "\uFB89"=>"\u0688", "\uFB8A"=>"\u0698", "\uFB8B"=>"\u0698", "\uFB8C"=>"\u0691", "\uFB8D"=>"\u0691", "\uFB8E"=>"\u06A9", "\uFB8F"=>"\u06A9", + "\uFB90"=>"\u06A9", "\uFB91"=>"\u06A9", "\uFB92"=>"\u06AF", "\uFB93"=>"\u06AF", "\uFB94"=>"\u06AF", "\uFB95"=>"\u06AF", "\uFB96"=>"\u06B3", "\uFB97"=>"\u06B3", + "\uFB98"=>"\u06B3", "\uFB99"=>"\u06B3", "\uFB9A"=>"\u06B1", "\uFB9B"=>"\u06B1", "\uFB9C"=>"\u06B1", "\uFB9D"=>"\u06B1", "\uFB9E"=>"\u06BA", "\uFB9F"=>"\u06BA", + "\uFBA0"=>"\u06BB", "\uFBA1"=>"\u06BB", "\uFBA2"=>"\u06BB", "\uFBA3"=>"\u06BB", "\uFBA4"=>"\u06C0", "\uFBA5"=>"\u06C0", "\uFBA6"=>"\u06C1", "\uFBA7"=>"\u06C1", + "\uFBA8"=>"\u06C1", "\uFBA9"=>"\u06C1", "\uFBAA"=>"\u06BE", "\uFBAB"=>"\u06BE", "\uFBAC"=>"\u06BE", "\uFBAD"=>"\u06BE", "\uFBAE"=>"\u06D2", "\uFBAF"=>"\u06D2", + "\uFBB0"=>"\u06D3", "\uFBB1"=>"\u06D3", "\uFBD3"=>"\u06AD", "\uFBD4"=>"\u06AD", "\uFBD5"=>"\u06AD", "\uFBD6"=>"\u06AD", "\uFBD7"=>"\u06C7", "\uFBD8"=>"\u06C7", + "\uFBD9"=>"\u06C6", "\uFBDA"=>"\u06C6", "\uFBDB"=>"\u06C8", "\uFBDC"=>"\u06C8", "\uFBDD"=>"\u06C7\u0674", "\uFBDE"=>"\u06CB", "\uFBDF"=>"\u06CB", "\uFBE0"=>"\u06C5", + "\uFBE1"=>"\u06C5", "\uFBE2"=>"\u06C9", "\uFBE3"=>"\u06C9", "\uFBE4"=>"\u06D0", "\uFBE5"=>"\u06D0", "\uFBE6"=>"\u06D0", "\uFBE7"=>"\u06D0", "\uFBE8"=>"\u0649", + "\uFBE9"=>"\u0649", "\uFBEA"=>"\u0626\u0627", "\uFBEB"=>"\u0626\u0627", "\uFBEC"=>"\u0626\u06D5", "\uFBED"=>"\u0626\u06D5", "\uFBEE"=>"\u0626\u0648", "\uFBEF"=>"\u0626\u0648", "\uFBF0"=>"\u0626\u06C7", + "\uFBF1"=>"\u0626\u06C7", "\uFBF2"=>"\u0626\u06C6", "\uFBF3"=>"\u0626\u06C6", "\uFBF4"=>"\u0626\u06C8", "\uFBF5"=>"\u0626\u06C8", "\uFBF6"=>"\u0626\u06D0", "\uFBF7"=>"\u0626\u06D0", "\uFBF8"=>"\u0626\u06D0", + "\uFBF9"=>"\u0626\u0649", "\uFBFA"=>"\u0626\u0649", "\uFBFB"=>"\u0626\u0649", "\uFBFC"=>"\u06CC", "\uFBFD"=>"\u06CC", "\uFBFE"=>"\u06CC", "\uFBFF"=>"\u06CC", "\uFC00"=>"\u0626\u062C", + "\uFC01"=>"\u0626\u062D", "\uFC02"=>"\u0626\u0645", "\uFC03"=>"\u0626\u0649", "\uFC04"=>"\u0626\u064A", "\uFC05"=>"\u0628\u062C", "\uFC06"=>"\u0628\u062D", "\uFC07"=>"\u0628\u062E", "\uFC08"=>"\u0628\u0645", + "\uFC09"=>"\u0628\u0649", "\uFC0A"=>"\u0628\u064A", "\uFC0B"=>"\u062A\u062C", "\uFC0C"=>"\u062A\u062D", "\uFC0D"=>"\u062A\u062E", "\uFC0E"=>"\u062A\u0645", "\uFC0F"=>"\u062A\u0649", "\uFC10"=>"\u062A\u064A", + "\uFC11"=>"\u062B\u062C", "\uFC12"=>"\u062B\u0645", "\uFC13"=>"\u062B\u0649", "\uFC14"=>"\u062B\u064A", "\uFC15"=>"\u062C\u062D", "\uFC16"=>"\u062C\u0645", "\uFC17"=>"\u062D\u062C", "\uFC18"=>"\u062D\u0645", + "\uFC19"=>"\u062E\u062C", "\uFC1A"=>"\u062E\u062D", "\uFC1B"=>"\u062E\u0645", "\uFC1C"=>"\u0633\u062C", "\uFC1D"=>"\u0633\u062D", "\uFC1E"=>"\u0633\u062E", "\uFC1F"=>"\u0633\u0645", "\uFC20"=>"\u0635\u062D", + "\uFC21"=>"\u0635\u0645", "\uFC22"=>"\u0636\u062C", "\uFC23"=>"\u0636\u062D", "\uFC24"=>"\u0636\u062E", "\uFC25"=>"\u0636\u0645", "\uFC26"=>"\u0637\u062D", "\uFC27"=>"\u0637\u0645", "\uFC28"=>"\u0638\u0645", + "\uFC29"=>"\u0639\u062C", "\uFC2A"=>"\u0639\u0645", "\uFC2B"=>"\u063A\u062C", "\uFC2C"=>"\u063A\u0645", "\uFC2D"=>"\u0641\u062C", "\uFC2E"=>"\u0641\u062D", "\uFC2F"=>"\u0641\u062E", "\uFC30"=>"\u0641\u0645", + "\uFC31"=>"\u0641\u0649", "\uFC32"=>"\u0641\u064A", "\uFC33"=>"\u0642\u062D", "\uFC34"=>"\u0642\u0645", "\uFC35"=>"\u0642\u0649", "\uFC36"=>"\u0642\u064A", "\uFC37"=>"\u0643\u0627", "\uFC38"=>"\u0643\u062C", + "\uFC39"=>"\u0643\u062D", "\uFC3A"=>"\u0643\u062E", "\uFC3B"=>"\u0643\u0644", "\uFC3C"=>"\u0643\u0645", "\uFC3D"=>"\u0643\u0649", "\uFC3E"=>"\u0643\u064A", "\uFC3F"=>"\u0644\u062C", "\uFC40"=>"\u0644\u062D", + "\uFC41"=>"\u0644\u062E", "\uFC42"=>"\u0644\u0645", "\uFC43"=>"\u0644\u0649", "\uFC44"=>"\u0644\u064A", "\uFC45"=>"\u0645\u062C", "\uFC46"=>"\u0645\u062D", "\uFC47"=>"\u0645\u062E", "\uFC48"=>"\u0645\u0645", + "\uFC49"=>"\u0645\u0649", "\uFC4A"=>"\u0645\u064A", "\uFC4B"=>"\u0646\u062C", "\uFC4C"=>"\u0646\u062D", "\uFC4D"=>"\u0646\u062E", "\uFC4E"=>"\u0646\u0645", "\uFC4F"=>"\u0646\u0649", "\uFC50"=>"\u0646\u064A", + "\uFC51"=>"\u0647\u062C", "\uFC52"=>"\u0647\u0645", "\uFC53"=>"\u0647\u0649", "\uFC54"=>"\u0647\u064A", "\uFC55"=>"\u064A\u062C", "\uFC56"=>"\u064A\u062D", "\uFC57"=>"\u064A\u062E", "\uFC58"=>"\u064A\u0645", + "\uFC59"=>"\u064A\u0649", "\uFC5A"=>"\u064A\u064A", "\uFC5B"=>"\u0630\u0670", "\uFC5C"=>"\u0631\u0670", "\uFC5D"=>"\u0649\u0670", "\uFC5E"=>" \u064C\u0651", "\uFC5F"=>" \u064D\u0651", "\uFC60"=>" \u064E\u0651", + "\uFC61"=>" \u064F\u0651", "\uFC62"=>" \u0650\u0651", "\uFC63"=>" \u0651\u0670", "\uFC64"=>"\u0626\u0631", "\uFC65"=>"\u0626\u0632", "\uFC66"=>"\u0626\u0645", "\uFC67"=>"\u0626\u0646", "\uFC68"=>"\u0626\u0649", + "\uFC69"=>"\u0626\u064A", "\uFC6A"=>"\u0628\u0631", "\uFC6B"=>"\u0628\u0632", "\uFC6C"=>"\u0628\u0645", "\uFC6D"=>"\u0628\u0646", "\uFC6E"=>"\u0628\u0649", "\uFC6F"=>"\u0628\u064A", "\uFC70"=>"\u062A\u0631", + "\uFC71"=>"\u062A\u0632", "\uFC72"=>"\u062A\u0645", "\uFC73"=>"\u062A\u0646", "\uFC74"=>"\u062A\u0649", "\uFC75"=>"\u062A\u064A", "\uFC76"=>"\u062B\u0631", "\uFC77"=>"\u062B\u0632", "\uFC78"=>"\u062B\u0645", + "\uFC79"=>"\u062B\u0646", "\uFC7A"=>"\u062B\u0649", "\uFC7B"=>"\u062B\u064A", "\uFC7C"=>"\u0641\u0649", "\uFC7D"=>"\u0641\u064A", "\uFC7E"=>"\u0642\u0649", "\uFC7F"=>"\u0642\u064A", "\uFC80"=>"\u0643\u0627", + "\uFC81"=>"\u0643\u0644", "\uFC82"=>"\u0643\u0645", "\uFC83"=>"\u0643\u0649", "\uFC84"=>"\u0643\u064A", "\uFC85"=>"\u0644\u0645", "\uFC86"=>"\u0644\u0649", "\uFC87"=>"\u0644\u064A", "\uFC88"=>"\u0645\u0627", + "\uFC89"=>"\u0645\u0645", "\uFC8A"=>"\u0646\u0631", "\uFC8B"=>"\u0646\u0632", "\uFC8C"=>"\u0646\u0645", "\uFC8D"=>"\u0646\u0646", "\uFC8E"=>"\u0646\u0649", "\uFC8F"=>"\u0646\u064A", "\uFC90"=>"\u0649\u0670", + "\uFC91"=>"\u064A\u0631", "\uFC92"=>"\u064A\u0632", "\uFC93"=>"\u064A\u0645", "\uFC94"=>"\u064A\u0646", "\uFC95"=>"\u064A\u0649", "\uFC96"=>"\u064A\u064A", "\uFC97"=>"\u0626\u062C", "\uFC98"=>"\u0626\u062D", + "\uFC99"=>"\u0626\u062E", "\uFC9A"=>"\u0626\u0645", "\uFC9B"=>"\u0626\u0647", "\uFC9C"=>"\u0628\u062C", "\uFC9D"=>"\u0628\u062D", "\uFC9E"=>"\u0628\u062E", "\uFC9F"=>"\u0628\u0645", "\uFCA0"=>"\u0628\u0647", + "\uFCA1"=>"\u062A\u062C", "\uFCA2"=>"\u062A\u062D", "\uFCA3"=>"\u062A\u062E", "\uFCA4"=>"\u062A\u0645", "\uFCA5"=>"\u062A\u0647", "\uFCA6"=>"\u062B\u0645", "\uFCA7"=>"\u062C\u062D", "\uFCA8"=>"\u062C\u0645", + "\uFCA9"=>"\u062D\u062C", "\uFCAA"=>"\u062D\u0645", "\uFCAB"=>"\u062E\u062C", "\uFCAC"=>"\u062E\u0645", "\uFCAD"=>"\u0633\u062C", "\uFCAE"=>"\u0633\u062D", "\uFCAF"=>"\u0633\u062E", "\uFCB0"=>"\u0633\u0645", + "\uFCB1"=>"\u0635\u062D", "\uFCB2"=>"\u0635\u062E", "\uFCB3"=>"\u0635\u0645", "\uFCB4"=>"\u0636\u062C", "\uFCB5"=>"\u0636\u062D", "\uFCB6"=>"\u0636\u062E", "\uFCB7"=>"\u0636\u0645", "\uFCB8"=>"\u0637\u062D", + "\uFCB9"=>"\u0638\u0645", "\uFCBA"=>"\u0639\u062C", "\uFCBB"=>"\u0639\u0645", "\uFCBC"=>"\u063A\u062C", "\uFCBD"=>"\u063A\u0645", "\uFCBE"=>"\u0641\u062C", "\uFCBF"=>"\u0641\u062D", "\uFCC0"=>"\u0641\u062E", + "\uFCC1"=>"\u0641\u0645", "\uFCC2"=>"\u0642\u062D", "\uFCC3"=>"\u0642\u0645", "\uFCC4"=>"\u0643\u062C", "\uFCC5"=>"\u0643\u062D", "\uFCC6"=>"\u0643\u062E", "\uFCC7"=>"\u0643\u0644", "\uFCC8"=>"\u0643\u0645", + "\uFCC9"=>"\u0644\u062C", "\uFCCA"=>"\u0644\u062D", "\uFCCB"=>"\u0644\u062E", "\uFCCC"=>"\u0644\u0645", "\uFCCD"=>"\u0644\u0647", "\uFCCE"=>"\u0645\u062C", "\uFCCF"=>"\u0645\u062D", "\uFCD0"=>"\u0645\u062E", + "\uFCD1"=>"\u0645\u0645", "\uFCD2"=>"\u0646\u062C", "\uFCD3"=>"\u0646\u062D", "\uFCD4"=>"\u0646\u062E", "\uFCD5"=>"\u0646\u0645", "\uFCD6"=>"\u0646\u0647", "\uFCD7"=>"\u0647\u062C", "\uFCD8"=>"\u0647\u0645", + "\uFCD9"=>"\u0647\u0670", "\uFCDA"=>"\u064A\u062C", "\uFCDB"=>"\u064A\u062D", "\uFCDC"=>"\u064A\u062E", "\uFCDD"=>"\u064A\u0645", "\uFCDE"=>"\u064A\u0647", "\uFCDF"=>"\u0626\u0645", "\uFCE0"=>"\u0626\u0647", + "\uFCE1"=>"\u0628\u0645", "\uFCE2"=>"\u0628\u0647", "\uFCE3"=>"\u062A\u0645", "\uFCE4"=>"\u062A\u0647", "\uFCE5"=>"\u062B\u0645", "\uFCE6"=>"\u062B\u0647", "\uFCE7"=>"\u0633\u0645", "\uFCE8"=>"\u0633\u0647", + "\uFCE9"=>"\u0634\u0645", "\uFCEA"=>"\u0634\u0647", "\uFCEB"=>"\u0643\u0644", "\uFCEC"=>"\u0643\u0645", "\uFCED"=>"\u0644\u0645", "\uFCEE"=>"\u0646\u0645", "\uFCEF"=>"\u0646\u0647", "\uFCF0"=>"\u064A\u0645", + "\uFCF1"=>"\u064A\u0647", "\uFCF2"=>"\u0640\u064E\u0651", "\uFCF3"=>"\u0640\u064F\u0651", "\uFCF4"=>"\u0640\u0650\u0651", "\uFCF5"=>"\u0637\u0649", "\uFCF6"=>"\u0637\u064A", "\uFCF7"=>"\u0639\u0649", "\uFCF8"=>"\u0639\u064A", + "\uFCF9"=>"\u063A\u0649", "\uFCFA"=>"\u063A\u064A", "\uFCFB"=>"\u0633\u0649", "\uFCFC"=>"\u0633\u064A", "\uFCFD"=>"\u0634\u0649", "\uFCFE"=>"\u0634\u064A", "\uFCFF"=>"\u062D\u0649", "\uFD00"=>"\u062D\u064A", + "\uFD01"=>"\u062C\u0649", "\uFD02"=>"\u062C\u064A", "\uFD03"=>"\u062E\u0649", "\uFD04"=>"\u062E\u064A", "\uFD05"=>"\u0635\u0649", "\uFD06"=>"\u0635\u064A", "\uFD07"=>"\u0636\u0649", "\uFD08"=>"\u0636\u064A", + "\uFD09"=>"\u0634\u062C", "\uFD0A"=>"\u0634\u062D", "\uFD0B"=>"\u0634\u062E", "\uFD0C"=>"\u0634\u0645", "\uFD0D"=>"\u0634\u0631", "\uFD0E"=>"\u0633\u0631", "\uFD0F"=>"\u0635\u0631", "\uFD10"=>"\u0636\u0631", + "\uFD11"=>"\u0637\u0649", "\uFD12"=>"\u0637\u064A", "\uFD13"=>"\u0639\u0649", "\uFD14"=>"\u0639\u064A", "\uFD15"=>"\u063A\u0649", "\uFD16"=>"\u063A\u064A", "\uFD17"=>"\u0633\u0649", "\uFD18"=>"\u0633\u064A", + "\uFD19"=>"\u0634\u0649", "\uFD1A"=>"\u0634\u064A", "\uFD1B"=>"\u062D\u0649", "\uFD1C"=>"\u062D\u064A", "\uFD1D"=>"\u062C\u0649", "\uFD1E"=>"\u062C\u064A", "\uFD1F"=>"\u062E\u0649", "\uFD20"=>"\u062E\u064A", + "\uFD21"=>"\u0635\u0649", "\uFD22"=>"\u0635\u064A", "\uFD23"=>"\u0636\u0649", "\uFD24"=>"\u0636\u064A", "\uFD25"=>"\u0634\u062C", "\uFD26"=>"\u0634\u062D", "\uFD27"=>"\u0634\u062E", "\uFD28"=>"\u0634\u0645", + "\uFD29"=>"\u0634\u0631", "\uFD2A"=>"\u0633\u0631", "\uFD2B"=>"\u0635\u0631", "\uFD2C"=>"\u0636\u0631", "\uFD2D"=>"\u0634\u062C", "\uFD2E"=>"\u0634\u062D", "\uFD2F"=>"\u0634\u062E", "\uFD30"=>"\u0634\u0645", + "\uFD31"=>"\u0633\u0647", "\uFD32"=>"\u0634\u0647", "\uFD33"=>"\u0637\u0645", "\uFD34"=>"\u0633\u062C", "\uFD35"=>"\u0633\u062D", "\uFD36"=>"\u0633\u062E", "\uFD37"=>"\u0634\u062C", "\uFD38"=>"\u0634\u062D", + "\uFD39"=>"\u0634\u062E", "\uFD3A"=>"\u0637\u0645", "\uFD3B"=>"\u0638\u0645", "\uFD3C"=>"\u0627\u064B", "\uFD3D"=>"\u0627\u064B", "\uFD50"=>"\u062A\u062C\u0645", "\uFD51"=>"\u062A\u062D\u062C", "\uFD52"=>"\u062A\u062D\u062C", + "\uFD53"=>"\u062A\u062D\u0645", "\uFD54"=>"\u062A\u062E\u0645", "\uFD55"=>"\u062A\u0645\u062C", "\uFD56"=>"\u062A\u0645\u062D", "\uFD57"=>"\u062A\u0645\u062E", "\uFD58"=>"\u062C\u0645\u062D", "\uFD59"=>"\u062C\u0645\u062D", "\uFD5A"=>"\u062D\u0645\u064A", + "\uFD5B"=>"\u062D\u0645\u0649", "\uFD5C"=>"\u0633\u062D\u062C", "\uFD5D"=>"\u0633\u062C\u062D", "\uFD5E"=>"\u0633\u062C\u0649", "\uFD5F"=>"\u0633\u0645\u062D", "\uFD60"=>"\u0633\u0645\u062D", "\uFD61"=>"\u0633\u0645\u062C", "\uFD62"=>"\u0633\u0645\u0645", + "\uFD63"=>"\u0633\u0645\u0645", "\uFD64"=>"\u0635\u062D\u062D", "\uFD65"=>"\u0635\u062D\u062D", "\uFD66"=>"\u0635\u0645\u0645", "\uFD67"=>"\u0634\u062D\u0645", "\uFD68"=>"\u0634\u062D\u0645", "\uFD69"=>"\u0634\u062C\u064A", "\uFD6A"=>"\u0634\u0645\u062E", + "\uFD6B"=>"\u0634\u0645\u062E", "\uFD6C"=>"\u0634\u0645\u0645", "\uFD6D"=>"\u0634\u0645\u0645", "\uFD6E"=>"\u0636\u062D\u0649", "\uFD6F"=>"\u0636\u062E\u0645", "\uFD70"=>"\u0636\u062E\u0645", "\uFD71"=>"\u0637\u0645\u062D", "\uFD72"=>"\u0637\u0645\u062D", + "\uFD73"=>"\u0637\u0645\u0645", "\uFD74"=>"\u0637\u0645\u064A", "\uFD75"=>"\u0639\u062C\u0645", "\uFD76"=>"\u0639\u0645\u0645", "\uFD77"=>"\u0639\u0645\u0645", "\uFD78"=>"\u0639\u0645\u0649", "\uFD79"=>"\u063A\u0645\u0645", "\uFD7A"=>"\u063A\u0645\u064A", + "\uFD7B"=>"\u063A\u0645\u0649", "\uFD7C"=>"\u0641\u062E\u0645", "\uFD7D"=>"\u0641\u062E\u0645", "\uFD7E"=>"\u0642\u0645\u062D", "\uFD7F"=>"\u0642\u0645\u0645", "\uFD80"=>"\u0644\u062D\u0645", "\uFD81"=>"\u0644\u062D\u064A", "\uFD82"=>"\u0644\u062D\u0649", + "\uFD83"=>"\u0644\u062C\u062C", "\uFD84"=>"\u0644\u062C\u062C", "\uFD85"=>"\u0644\u062E\u0645", "\uFD86"=>"\u0644\u062E\u0645", "\uFD87"=>"\u0644\u0645\u062D", "\uFD88"=>"\u0644\u0645\u062D", "\uFD89"=>"\u0645\u062D\u062C", "\uFD8A"=>"\u0645\u062D\u0645", + "\uFD8B"=>"\u0645\u062D\u064A", "\uFD8C"=>"\u0645\u062C\u062D", "\uFD8D"=>"\u0645\u062C\u0645", "\uFD8E"=>"\u0645\u062E\u062C", "\uFD8F"=>"\u0645\u062E\u0645", "\uFD92"=>"\u0645\u062C\u062E", "\uFD93"=>"\u0647\u0645\u062C", "\uFD94"=>"\u0647\u0645\u0645", + "\uFD95"=>"\u0646\u062D\u0645", "\uFD96"=>"\u0646\u062D\u0649", "\uFD97"=>"\u0646\u062C\u0645", "\uFD98"=>"\u0646\u062C\u0645", "\uFD99"=>"\u0646\u062C\u0649", "\uFD9A"=>"\u0646\u0645\u064A", "\uFD9B"=>"\u0646\u0645\u0649", "\uFD9C"=>"\u064A\u0645\u0645", + "\uFD9D"=>"\u064A\u0645\u0645", "\uFD9E"=>"\u0628\u062E\u064A", "\uFD9F"=>"\u062A\u062C\u064A", "\uFDA0"=>"\u062A\u062C\u0649", "\uFDA1"=>"\u062A\u062E\u064A", "\uFDA2"=>"\u062A\u062E\u0649", "\uFDA3"=>"\u062A\u0645\u064A", "\uFDA4"=>"\u062A\u0645\u0649", + "\uFDA5"=>"\u062C\u0645\u064A", "\uFDA6"=>"\u062C\u062D\u0649", "\uFDA7"=>"\u062C\u0645\u0649", "\uFDA8"=>"\u0633\u062E\u0649", "\uFDA9"=>"\u0635\u062D\u064A", "\uFDAA"=>"\u0634\u062D\u064A", "\uFDAB"=>"\u0636\u062D\u064A", "\uFDAC"=>"\u0644\u062C\u064A", + "\uFDAD"=>"\u0644\u0645\u064A", "\uFDAE"=>"\u064A\u062D\u064A", "\uFDAF"=>"\u064A\u062C\u064A", "\uFDB0"=>"\u064A\u0645\u064A", "\uFDB1"=>"\u0645\u0645\u064A", "\uFDB2"=>"\u0642\u0645\u064A", "\uFDB3"=>"\u0646\u062D\u064A", "\uFDB4"=>"\u0642\u0645\u062D", + "\uFDB5"=>"\u0644\u062D\u0645", "\uFDB6"=>"\u0639\u0645\u064A", "\uFDB7"=>"\u0643\u0645\u064A", "\uFDB8"=>"\u0646\u062C\u062D", "\uFDB9"=>"\u0645\u062E\u064A", "\uFDBA"=>"\u0644\u062C\u0645", "\uFDBB"=>"\u0643\u0645\u0645", "\uFDBC"=>"\u0644\u062C\u0645", + "\uFDBD"=>"\u0646\u062C\u062D", "\uFDBE"=>"\u062C\u062D\u064A", "\uFDBF"=>"\u062D\u062C\u064A", "\uFDC0"=>"\u0645\u062C\u064A", "\uFDC1"=>"\u0641\u0645\u064A", "\uFDC2"=>"\u0628\u062D\u064A", "\uFDC3"=>"\u0643\u0645\u0645", "\uFDC4"=>"\u0639\u062C\u0645", + "\uFDC5"=>"\u0635\u0645\u0645", "\uFDC6"=>"\u0633\u062E\u064A", "\uFDC7"=>"\u0646\u062C\u064A", "\uFDF0"=>"\u0635\u0644\u06D2", "\uFDF1"=>"\u0642\u0644\u06D2", "\uFDF2"=>"\u0627\u0644\u0644\u0647", "\uFDF3"=>"\u0627\u0643\u0628\u0631", "\uFDF4"=>"\u0645\u062D\u0645\u062F", + "\uFDF5"=>"\u0635\u0644\u0639\u0645", "\uFDF6"=>"\u0631\u0633\u0648\u0644", "\uFDF7"=>"\u0639\u0644\u064A\u0647", "\uFDF8"=>"\u0648\u0633\u0644\u0645", "\uFDF9"=>"\u0635\u0644\u0649", "\uFDFA"=>"\u0635\u0644\u0649 \u0627\u0644\u0644\u0647 \u0639\u0644\u064A\u0647 \u0648\u0633\u0644\u0645", "\uFDFB"=>"\u062C\u0644 \u062C\u0644\u0627\u0644\u0647", "\uFDFC"=>"\u0631\u06CC\u0627\u0644", + "\uFE10"=>",", "\uFE11"=>"\u3001", "\uFE12"=>"\u3002", "\uFE13"=>":", "\uFE14"=>";", "\uFE15"=>"!", "\uFE16"=>"?", "\uFE17"=>"\u3016", + "\uFE18"=>"\u3017", "\uFE19"=>"...", "\uFE30"=>"..", "\uFE31"=>"\u2014", "\uFE32"=>"\u2013", "\uFE33"=>"_", "\uFE34"=>"_", "\uFE35"=>"(", + "\uFE36"=>")", "\uFE37"=>"{", "\uFE38"=>"}", "\uFE39"=>"\u3014", "\uFE3A"=>"\u3015", "\uFE3B"=>"\u3010", "\uFE3C"=>"\u3011", "\uFE3D"=>"\u300A", + "\uFE3E"=>"\u300B", "\uFE3F"=>"\u3008", "\uFE40"=>"\u3009", "\uFE41"=>"\u300C", "\uFE42"=>"\u300D", "\uFE43"=>"\u300E", "\uFE44"=>"\u300F", "\uFE47"=>"[", + "\uFE48"=>"]", "\uFE49"=>" \u0305", "\uFE4A"=>" \u0305", "\uFE4B"=>" \u0305", "\uFE4C"=>" \u0305", "\uFE4D"=>"_", "\uFE4E"=>"_", "\uFE4F"=>"_", + "\uFE50"=>",", "\uFE51"=>"\u3001", "\uFE52"=>".", "\uFE54"=>";", "\uFE55"=>":", "\uFE56"=>"?", "\uFE57"=>"!", "\uFE58"=>"\u2014", + "\uFE59"=>"(", "\uFE5A"=>")", "\uFE5B"=>"{", "\uFE5C"=>"}", "\uFE5D"=>"\u3014", "\uFE5E"=>"\u3015", "\uFE5F"=>"#", "\uFE60"=>"&", + "\uFE61"=>"*", "\uFE62"=>"+", "\uFE63"=>"-", "\uFE64"=>"<", "\uFE65"=>">", "\uFE66"=>"=", "\uFE68"=>"\\", "\uFE69"=>"$", + "\uFE6A"=>"%", "\uFE6B"=>"@", "\uFE70"=>" \u064B", "\uFE71"=>"\u0640\u064B", "\uFE72"=>" \u064C", "\uFE74"=>" \u064D", "\uFE76"=>" \u064E", "\uFE77"=>"\u0640\u064E", + "\uFE78"=>" \u064F", "\uFE79"=>"\u0640\u064F", "\uFE7A"=>" \u0650", "\uFE7B"=>"\u0640\u0650", "\uFE7C"=>" \u0651", "\uFE7D"=>"\u0640\u0651", "\uFE7E"=>" \u0652", "\uFE7F"=>"\u0640\u0652", + "\uFE80"=>"\u0621", "\uFE81"=>"\u0622", "\uFE82"=>"\u0622", "\uFE83"=>"\u0623", "\uFE84"=>"\u0623", "\uFE85"=>"\u0624", "\uFE86"=>"\u0624", "\uFE87"=>"\u0625", + "\uFE88"=>"\u0625", "\uFE89"=>"\u0626", "\uFE8A"=>"\u0626", "\uFE8B"=>"\u0626", "\uFE8C"=>"\u0626", "\uFE8D"=>"\u0627", "\uFE8E"=>"\u0627", "\uFE8F"=>"\u0628", + "\uFE90"=>"\u0628", "\uFE91"=>"\u0628", "\uFE92"=>"\u0628", "\uFE93"=>"\u0629", "\uFE94"=>"\u0629", "\uFE95"=>"\u062A", "\uFE96"=>"\u062A", "\uFE97"=>"\u062A", + "\uFE98"=>"\u062A", "\uFE99"=>"\u062B", "\uFE9A"=>"\u062B", "\uFE9B"=>"\u062B", "\uFE9C"=>"\u062B", "\uFE9D"=>"\u062C", "\uFE9E"=>"\u062C", "\uFE9F"=>"\u062C", + "\uFEA0"=>"\u062C", "\uFEA1"=>"\u062D", "\uFEA2"=>"\u062D", "\uFEA3"=>"\u062D", "\uFEA4"=>"\u062D", "\uFEA5"=>"\u062E", "\uFEA6"=>"\u062E", "\uFEA7"=>"\u062E", + "\uFEA8"=>"\u062E", "\uFEA9"=>"\u062F", "\uFEAA"=>"\u062F", "\uFEAB"=>"\u0630", "\uFEAC"=>"\u0630", "\uFEAD"=>"\u0631", "\uFEAE"=>"\u0631", "\uFEAF"=>"\u0632", + "\uFEB0"=>"\u0632", "\uFEB1"=>"\u0633", "\uFEB2"=>"\u0633", "\uFEB3"=>"\u0633", "\uFEB4"=>"\u0633", "\uFEB5"=>"\u0634", "\uFEB6"=>"\u0634", "\uFEB7"=>"\u0634", + "\uFEB8"=>"\u0634", "\uFEB9"=>"\u0635", "\uFEBA"=>"\u0635", "\uFEBB"=>"\u0635", "\uFEBC"=>"\u0635", "\uFEBD"=>"\u0636", "\uFEBE"=>"\u0636", "\uFEBF"=>"\u0636", + "\uFEC0"=>"\u0636", "\uFEC1"=>"\u0637", "\uFEC2"=>"\u0637", "\uFEC3"=>"\u0637", "\uFEC4"=>"\u0637", "\uFEC5"=>"\u0638", "\uFEC6"=>"\u0638", "\uFEC7"=>"\u0638", + "\uFEC8"=>"\u0638", "\uFEC9"=>"\u0639", "\uFECA"=>"\u0639", "\uFECB"=>"\u0639", "\uFECC"=>"\u0639", "\uFECD"=>"\u063A", "\uFECE"=>"\u063A", "\uFECF"=>"\u063A", + "\uFED0"=>"\u063A", "\uFED1"=>"\u0641", "\uFED2"=>"\u0641", "\uFED3"=>"\u0641", "\uFED4"=>"\u0641", "\uFED5"=>"\u0642", "\uFED6"=>"\u0642", "\uFED7"=>"\u0642", + "\uFED8"=>"\u0642", "\uFED9"=>"\u0643", "\uFEDA"=>"\u0643", "\uFEDB"=>"\u0643", "\uFEDC"=>"\u0643", "\uFEDD"=>"\u0644", "\uFEDE"=>"\u0644", "\uFEDF"=>"\u0644", + "\uFEE0"=>"\u0644", "\uFEE1"=>"\u0645", "\uFEE2"=>"\u0645", "\uFEE3"=>"\u0645", "\uFEE4"=>"\u0645", "\uFEE5"=>"\u0646", "\uFEE6"=>"\u0646", "\uFEE7"=>"\u0646", + "\uFEE8"=>"\u0646", "\uFEE9"=>"\u0647", "\uFEEA"=>"\u0647", "\uFEEB"=>"\u0647", "\uFEEC"=>"\u0647", "\uFEED"=>"\u0648", "\uFEEE"=>"\u0648", "\uFEEF"=>"\u0649", + "\uFEF0"=>"\u0649", "\uFEF1"=>"\u064A", "\uFEF2"=>"\u064A", "\uFEF3"=>"\u064A", "\uFEF4"=>"\u064A", "\uFEF5"=>"\u0644\u0622", "\uFEF6"=>"\u0644\u0622", "\uFEF7"=>"\u0644\u0623", + "\uFEF8"=>"\u0644\u0623", "\uFEF9"=>"\u0644\u0625", "\uFEFA"=>"\u0644\u0625", "\uFEFB"=>"\u0644\u0627", "\uFEFC"=>"\u0644\u0627", "\uFF01"=>"!", "\uFF02"=>"\"", "\uFF03"=>"#", + "\uFF04"=>"$", "\uFF05"=>"%", "\uFF06"=>"&", "\uFF07"=>"'", "\uFF08"=>"(", "\uFF09"=>")", "\uFF0A"=>"*", "\uFF0B"=>"+", + "\uFF0C"=>",", "\uFF0D"=>"-", "\uFF0E"=>".", "\uFF0F"=>"/", "\uFF10"=>"0", "\uFF11"=>"1", "\uFF12"=>"2", "\uFF13"=>"3", + "\uFF14"=>"4", "\uFF15"=>"5", "\uFF16"=>"6", "\uFF17"=>"7", "\uFF18"=>"8", "\uFF19"=>"9", "\uFF1A"=>":", "\uFF1B"=>";", + "\uFF1C"=>"<", "\uFF1D"=>"=", "\uFF1E"=>">", "\uFF1F"=>"?", "\uFF20"=>"@", "\uFF21"=>"A", "\uFF22"=>"B", "\uFF23"=>"C", + "\uFF24"=>"D", "\uFF25"=>"E", "\uFF26"=>"F", "\uFF27"=>"G", "\uFF28"=>"H", "\uFF29"=>"I", "\uFF2A"=>"J", "\uFF2B"=>"K", + "\uFF2C"=>"L", "\uFF2D"=>"M", "\uFF2E"=>"N", "\uFF2F"=>"O", "\uFF30"=>"P", "\uFF31"=>"Q", "\uFF32"=>"R", "\uFF33"=>"S", + "\uFF34"=>"T", "\uFF35"=>"U", "\uFF36"=>"V", "\uFF37"=>"W", "\uFF38"=>"X", "\uFF39"=>"Y", "\uFF3A"=>"Z", "\uFF3B"=>"[", + "\uFF3C"=>"\\", "\uFF3D"=>"]", "\uFF3E"=>"^", "\uFF3F"=>"_", "\uFF40"=>"`", "\uFF41"=>"a", "\uFF42"=>"b", "\uFF43"=>"c", + "\uFF44"=>"d", "\uFF45"=>"e", "\uFF46"=>"f", "\uFF47"=>"g", "\uFF48"=>"h", "\uFF49"=>"i", "\uFF4A"=>"j", "\uFF4B"=>"k", + "\uFF4C"=>"l", "\uFF4D"=>"m", "\uFF4E"=>"n", "\uFF4F"=>"o", "\uFF50"=>"p", "\uFF51"=>"q", "\uFF52"=>"r", "\uFF53"=>"s", + "\uFF54"=>"t", "\uFF55"=>"u", "\uFF56"=>"v", "\uFF57"=>"w", "\uFF58"=>"x", "\uFF59"=>"y", "\uFF5A"=>"z", "\uFF5B"=>"{", + "\uFF5C"=>"|", "\uFF5D"=>"}", "\uFF5E"=>"~", "\uFF5F"=>"\u2985", "\uFF60"=>"\u2986", "\uFF61"=>"\u3002", "\uFF62"=>"\u300C", "\uFF63"=>"\u300D", + "\uFF64"=>"\u3001", "\uFF65"=>"\u30FB", "\uFF66"=>"\u30F2", "\uFF67"=>"\u30A1", "\uFF68"=>"\u30A3", "\uFF69"=>"\u30A5", "\uFF6A"=>"\u30A7", "\uFF6B"=>"\u30A9", + "\uFF6C"=>"\u30E3", "\uFF6D"=>"\u30E5", "\uFF6E"=>"\u30E7", "\uFF6F"=>"\u30C3", "\uFF70"=>"\u30FC", "\uFF71"=>"\u30A2", "\uFF72"=>"\u30A4", "\uFF73"=>"\u30A6", + "\uFF74"=>"\u30A8", "\uFF75"=>"\u30AA", "\uFF76"=>"\u30AB", "\uFF77"=>"\u30AD", "\uFF78"=>"\u30AF", "\uFF79"=>"\u30B1", "\uFF7A"=>"\u30B3", "\uFF7B"=>"\u30B5", + "\uFF7C"=>"\u30B7", "\uFF7D"=>"\u30B9", "\uFF7E"=>"\u30BB", "\uFF7F"=>"\u30BD", "\uFF80"=>"\u30BF", "\uFF81"=>"\u30C1", "\uFF82"=>"\u30C4", "\uFF83"=>"\u30C6", + "\uFF84"=>"\u30C8", "\uFF85"=>"\u30CA", "\uFF86"=>"\u30CB", "\uFF87"=>"\u30CC", "\uFF88"=>"\u30CD", "\uFF89"=>"\u30CE", "\uFF8A"=>"\u30CF", "\uFF8B"=>"\u30D2", + "\uFF8C"=>"\u30D5", "\uFF8D"=>"\u30D8", "\uFF8E"=>"\u30DB", "\uFF8F"=>"\u30DE", "\uFF90"=>"\u30DF", "\uFF91"=>"\u30E0", "\uFF92"=>"\u30E1", "\uFF93"=>"\u30E2", + "\uFF94"=>"\u30E4", "\uFF95"=>"\u30E6", "\uFF96"=>"\u30E8", "\uFF97"=>"\u30E9", "\uFF98"=>"\u30EA", "\uFF99"=>"\u30EB", "\uFF9A"=>"\u30EC", "\uFF9B"=>"\u30ED", + "\uFF9C"=>"\u30EF", "\uFF9D"=>"\u30F3", "\uFF9E"=>"\u3099", "\uFF9F"=>"\u309A", "\uFFA0"=>"\u1160", "\uFFA1"=>"\u1100", "\uFFA2"=>"\u1101", "\uFFA3"=>"\u11AA", + "\uFFA4"=>"\u1102", "\uFFA5"=>"\u11AC", "\uFFA6"=>"\u11AD", "\uFFA7"=>"\u1103", "\uFFA8"=>"\u1104", "\uFFA9"=>"\u1105", "\uFFAA"=>"\u11B0", "\uFFAB"=>"\u11B1", + "\uFFAC"=>"\u11B2", "\uFFAD"=>"\u11B3", "\uFFAE"=>"\u11B4", "\uFFAF"=>"\u11B5", "\uFFB0"=>"\u111A", "\uFFB1"=>"\u1106", "\uFFB2"=>"\u1107", "\uFFB3"=>"\u1108", + "\uFFB4"=>"\u1121", "\uFFB5"=>"\u1109", "\uFFB6"=>"\u110A", "\uFFB7"=>"\u110B", "\uFFB8"=>"\u110C", "\uFFB9"=>"\u110D", "\uFFBA"=>"\u110E", "\uFFBB"=>"\u110F", + "\uFFBC"=>"\u1110", "\uFFBD"=>"\u1111", "\uFFBE"=>"\u1112", "\uFFC2"=>"\u1161", "\uFFC3"=>"\u1162", "\uFFC4"=>"\u1163", "\uFFC5"=>"\u1164", "\uFFC6"=>"\u1165", + "\uFFC7"=>"\u1166", "\uFFCA"=>"\u1167", "\uFFCB"=>"\u1168", "\uFFCC"=>"\u1169", "\uFFCD"=>"\u116A", "\uFFCE"=>"\u116B", "\uFFCF"=>"\u116C", "\uFFD2"=>"\u116D", + "\uFFD3"=>"\u116E", "\uFFD4"=>"\u116F", "\uFFD5"=>"\u1170", "\uFFD6"=>"\u1171", "\uFFD7"=>"\u1172", "\uFFDA"=>"\u1173", "\uFFDB"=>"\u1174", "\uFFDC"=>"\u1175", + "\uFFE0"=>"\u00A2", "\uFFE1"=>"\u00A3", "\uFFE2"=>"\u00AC", "\uFFE3"=>" \u0304", "\uFFE4"=>"\u00A6", "\uFFE5"=>"\u00A5", "\uFFE6"=>"\u20A9", "\uFFE8"=>"\u2502", + "\uFFE9"=>"\u2190", "\uFFEA"=>"\u2191", "\uFFEB"=>"\u2192", "\uFFEC"=>"\u2193", "\uFFED"=>"\u25A0", "\uFFEE"=>"\u25CB", "\u{1D400}"=>"A", "\u{1D401}"=>"B", + "\u{1D402}"=>"C", "\u{1D403}"=>"D", "\u{1D404}"=>"E", "\u{1D405}"=>"F", "\u{1D406}"=>"G", "\u{1D407}"=>"H", "\u{1D408}"=>"I", "\u{1D409}"=>"J", + "\u{1D40A}"=>"K", "\u{1D40B}"=>"L", "\u{1D40C}"=>"M", "\u{1D40D}"=>"N", "\u{1D40E}"=>"O", "\u{1D40F}"=>"P", "\u{1D410}"=>"Q", "\u{1D411}"=>"R", + "\u{1D412}"=>"S", "\u{1D413}"=>"T", "\u{1D414}"=>"U", "\u{1D415}"=>"V", "\u{1D416}"=>"W", "\u{1D417}"=>"X", "\u{1D418}"=>"Y", "\u{1D419}"=>"Z", + "\u{1D41A}"=>"a", "\u{1D41B}"=>"b", "\u{1D41C}"=>"c", "\u{1D41D}"=>"d", "\u{1D41E}"=>"e", "\u{1D41F}"=>"f", "\u{1D420}"=>"g", "\u{1D421}"=>"h", + "\u{1D422}"=>"i", "\u{1D423}"=>"j", "\u{1D424}"=>"k", "\u{1D425}"=>"l", "\u{1D426}"=>"m", "\u{1D427}"=>"n", "\u{1D428}"=>"o", "\u{1D429}"=>"p", + "\u{1D42A}"=>"q", "\u{1D42B}"=>"r", "\u{1D42C}"=>"s", "\u{1D42D}"=>"t", "\u{1D42E}"=>"u", "\u{1D42F}"=>"v", "\u{1D430}"=>"w", "\u{1D431}"=>"x", + "\u{1D432}"=>"y", "\u{1D433}"=>"z", "\u{1D434}"=>"A", "\u{1D435}"=>"B", "\u{1D436}"=>"C", "\u{1D437}"=>"D", "\u{1D438}"=>"E", "\u{1D439}"=>"F", + "\u{1D43A}"=>"G", "\u{1D43B}"=>"H", "\u{1D43C}"=>"I", "\u{1D43D}"=>"J", "\u{1D43E}"=>"K", "\u{1D43F}"=>"L", "\u{1D440}"=>"M", "\u{1D441}"=>"N", + "\u{1D442}"=>"O", "\u{1D443}"=>"P", "\u{1D444}"=>"Q", "\u{1D445}"=>"R", "\u{1D446}"=>"S", "\u{1D447}"=>"T", "\u{1D448}"=>"U", "\u{1D449}"=>"V", + "\u{1D44A}"=>"W", "\u{1D44B}"=>"X", "\u{1D44C}"=>"Y", "\u{1D44D}"=>"Z", "\u{1D44E}"=>"a", "\u{1D44F}"=>"b", "\u{1D450}"=>"c", "\u{1D451}"=>"d", + "\u{1D452}"=>"e", "\u{1D453}"=>"f", "\u{1D454}"=>"g", "\u{1D456}"=>"i", "\u{1D457}"=>"j", "\u{1D458}"=>"k", "\u{1D459}"=>"l", "\u{1D45A}"=>"m", + "\u{1D45B}"=>"n", "\u{1D45C}"=>"o", "\u{1D45D}"=>"p", "\u{1D45E}"=>"q", "\u{1D45F}"=>"r", "\u{1D460}"=>"s", "\u{1D461}"=>"t", "\u{1D462}"=>"u", + "\u{1D463}"=>"v", "\u{1D464}"=>"w", "\u{1D465}"=>"x", "\u{1D466}"=>"y", "\u{1D467}"=>"z", "\u{1D468}"=>"A", "\u{1D469}"=>"B", "\u{1D46A}"=>"C", + "\u{1D46B}"=>"D", "\u{1D46C}"=>"E", "\u{1D46D}"=>"F", "\u{1D46E}"=>"G", "\u{1D46F}"=>"H", "\u{1D470}"=>"I", "\u{1D471}"=>"J", "\u{1D472}"=>"K", + "\u{1D473}"=>"L", "\u{1D474}"=>"M", "\u{1D475}"=>"N", "\u{1D476}"=>"O", "\u{1D477}"=>"P", "\u{1D478}"=>"Q", "\u{1D479}"=>"R", "\u{1D47A}"=>"S", + "\u{1D47B}"=>"T", "\u{1D47C}"=>"U", "\u{1D47D}"=>"V", "\u{1D47E}"=>"W", "\u{1D47F}"=>"X", "\u{1D480}"=>"Y", "\u{1D481}"=>"Z", "\u{1D482}"=>"a", + "\u{1D483}"=>"b", "\u{1D484}"=>"c", "\u{1D485}"=>"d", "\u{1D486}"=>"e", "\u{1D487}"=>"f", "\u{1D488}"=>"g", "\u{1D489}"=>"h", "\u{1D48A}"=>"i", + "\u{1D48B}"=>"j", "\u{1D48C}"=>"k", "\u{1D48D}"=>"l", "\u{1D48E}"=>"m", "\u{1D48F}"=>"n", "\u{1D490}"=>"o", "\u{1D491}"=>"p", "\u{1D492}"=>"q", + "\u{1D493}"=>"r", "\u{1D494}"=>"s", "\u{1D495}"=>"t", "\u{1D496}"=>"u", "\u{1D497}"=>"v", "\u{1D498}"=>"w", "\u{1D499}"=>"x", "\u{1D49A}"=>"y", + "\u{1D49B}"=>"z", "\u{1D49C}"=>"A", "\u{1D49E}"=>"C", "\u{1D49F}"=>"D", "\u{1D4A2}"=>"G", "\u{1D4A5}"=>"J", "\u{1D4A6}"=>"K", "\u{1D4A9}"=>"N", + "\u{1D4AA}"=>"O", "\u{1D4AB}"=>"P", "\u{1D4AC}"=>"Q", "\u{1D4AE}"=>"S", "\u{1D4AF}"=>"T", "\u{1D4B0}"=>"U", "\u{1D4B1}"=>"V", "\u{1D4B2}"=>"W", + "\u{1D4B3}"=>"X", "\u{1D4B4}"=>"Y", "\u{1D4B5}"=>"Z", "\u{1D4B6}"=>"a", "\u{1D4B7}"=>"b", "\u{1D4B8}"=>"c", "\u{1D4B9}"=>"d", "\u{1D4BB}"=>"f", + "\u{1D4BD}"=>"h", "\u{1D4BE}"=>"i", "\u{1D4BF}"=>"j", "\u{1D4C0}"=>"k", "\u{1D4C1}"=>"l", "\u{1D4C2}"=>"m", "\u{1D4C3}"=>"n", "\u{1D4C5}"=>"p", + "\u{1D4C6}"=>"q", "\u{1D4C7}"=>"r", "\u{1D4C8}"=>"s", "\u{1D4C9}"=>"t", "\u{1D4CA}"=>"u", "\u{1D4CB}"=>"v", "\u{1D4CC}"=>"w", "\u{1D4CD}"=>"x", + "\u{1D4CE}"=>"y", "\u{1D4CF}"=>"z", "\u{1D4D0}"=>"A", "\u{1D4D1}"=>"B", "\u{1D4D2}"=>"C", "\u{1D4D3}"=>"D", "\u{1D4D4}"=>"E", "\u{1D4D5}"=>"F", + "\u{1D4D6}"=>"G", "\u{1D4D7}"=>"H", "\u{1D4D8}"=>"I", "\u{1D4D9}"=>"J", "\u{1D4DA}"=>"K", "\u{1D4DB}"=>"L", "\u{1D4DC}"=>"M", "\u{1D4DD}"=>"N", + "\u{1D4DE}"=>"O", "\u{1D4DF}"=>"P", "\u{1D4E0}"=>"Q", "\u{1D4E1}"=>"R", "\u{1D4E2}"=>"S", "\u{1D4E3}"=>"T", "\u{1D4E4}"=>"U", "\u{1D4E5}"=>"V", + "\u{1D4E6}"=>"W", "\u{1D4E7}"=>"X", "\u{1D4E8}"=>"Y", "\u{1D4E9}"=>"Z", "\u{1D4EA}"=>"a", "\u{1D4EB}"=>"b", "\u{1D4EC}"=>"c", "\u{1D4ED}"=>"d", + "\u{1D4EE}"=>"e", "\u{1D4EF}"=>"f", "\u{1D4F0}"=>"g", "\u{1D4F1}"=>"h", "\u{1D4F2}"=>"i", "\u{1D4F3}"=>"j", "\u{1D4F4}"=>"k", "\u{1D4F5}"=>"l", + "\u{1D4F6}"=>"m", "\u{1D4F7}"=>"n", "\u{1D4F8}"=>"o", "\u{1D4F9}"=>"p", "\u{1D4FA}"=>"q", "\u{1D4FB}"=>"r", "\u{1D4FC}"=>"s", "\u{1D4FD}"=>"t", + "\u{1D4FE}"=>"u", "\u{1D4FF}"=>"v", "\u{1D500}"=>"w", "\u{1D501}"=>"x", "\u{1D502}"=>"y", "\u{1D503}"=>"z", "\u{1D504}"=>"A", "\u{1D505}"=>"B", + "\u{1D507}"=>"D", "\u{1D508}"=>"E", "\u{1D509}"=>"F", "\u{1D50A}"=>"G", "\u{1D50D}"=>"J", "\u{1D50E}"=>"K", "\u{1D50F}"=>"L", "\u{1D510}"=>"M", + "\u{1D511}"=>"N", "\u{1D512}"=>"O", "\u{1D513}"=>"P", "\u{1D514}"=>"Q", "\u{1D516}"=>"S", "\u{1D517}"=>"T", "\u{1D518}"=>"U", "\u{1D519}"=>"V", + "\u{1D51A}"=>"W", "\u{1D51B}"=>"X", "\u{1D51C}"=>"Y", "\u{1D51E}"=>"a", "\u{1D51F}"=>"b", "\u{1D520}"=>"c", "\u{1D521}"=>"d", "\u{1D522}"=>"e", + "\u{1D523}"=>"f", "\u{1D524}"=>"g", "\u{1D525}"=>"h", "\u{1D526}"=>"i", "\u{1D527}"=>"j", "\u{1D528}"=>"k", "\u{1D529}"=>"l", "\u{1D52A}"=>"m", + "\u{1D52B}"=>"n", "\u{1D52C}"=>"o", "\u{1D52D}"=>"p", "\u{1D52E}"=>"q", "\u{1D52F}"=>"r", "\u{1D530}"=>"s", "\u{1D531}"=>"t", "\u{1D532}"=>"u", + "\u{1D533}"=>"v", "\u{1D534}"=>"w", "\u{1D535}"=>"x", "\u{1D536}"=>"y", "\u{1D537}"=>"z", "\u{1D538}"=>"A", "\u{1D539}"=>"B", "\u{1D53B}"=>"D", + "\u{1D53C}"=>"E", "\u{1D53D}"=>"F", "\u{1D53E}"=>"G", "\u{1D540}"=>"I", "\u{1D541}"=>"J", "\u{1D542}"=>"K", "\u{1D543}"=>"L", "\u{1D544}"=>"M", + "\u{1D546}"=>"O", "\u{1D54A}"=>"S", "\u{1D54B}"=>"T", "\u{1D54C}"=>"U", "\u{1D54D}"=>"V", "\u{1D54E}"=>"W", "\u{1D54F}"=>"X", "\u{1D550}"=>"Y", + "\u{1D552}"=>"a", "\u{1D553}"=>"b", "\u{1D554}"=>"c", "\u{1D555}"=>"d", "\u{1D556}"=>"e", "\u{1D557}"=>"f", "\u{1D558}"=>"g", "\u{1D559}"=>"h", + "\u{1D55A}"=>"i", "\u{1D55B}"=>"j", "\u{1D55C}"=>"k", "\u{1D55D}"=>"l", "\u{1D55E}"=>"m", "\u{1D55F}"=>"n", "\u{1D560}"=>"o", "\u{1D561}"=>"p", + "\u{1D562}"=>"q", "\u{1D563}"=>"r", "\u{1D564}"=>"s", "\u{1D565}"=>"t", "\u{1D566}"=>"u", "\u{1D567}"=>"v", "\u{1D568}"=>"w", "\u{1D569}"=>"x", + "\u{1D56A}"=>"y", "\u{1D56B}"=>"z", "\u{1D56C}"=>"A", "\u{1D56D}"=>"B", "\u{1D56E}"=>"C", "\u{1D56F}"=>"D", "\u{1D570}"=>"E", "\u{1D571}"=>"F", + "\u{1D572}"=>"G", "\u{1D573}"=>"H", "\u{1D574}"=>"I", "\u{1D575}"=>"J", "\u{1D576}"=>"K", "\u{1D577}"=>"L", "\u{1D578}"=>"M", "\u{1D579}"=>"N", + "\u{1D57A}"=>"O", "\u{1D57B}"=>"P", "\u{1D57C}"=>"Q", "\u{1D57D}"=>"R", "\u{1D57E}"=>"S", "\u{1D57F}"=>"T", "\u{1D580}"=>"U", "\u{1D581}"=>"V", + "\u{1D582}"=>"W", "\u{1D583}"=>"X", "\u{1D584}"=>"Y", "\u{1D585}"=>"Z", "\u{1D586}"=>"a", "\u{1D587}"=>"b", "\u{1D588}"=>"c", "\u{1D589}"=>"d", + "\u{1D58A}"=>"e", "\u{1D58B}"=>"f", "\u{1D58C}"=>"g", "\u{1D58D}"=>"h", "\u{1D58E}"=>"i", "\u{1D58F}"=>"j", "\u{1D590}"=>"k", "\u{1D591}"=>"l", + "\u{1D592}"=>"m", "\u{1D593}"=>"n", "\u{1D594}"=>"o", "\u{1D595}"=>"p", "\u{1D596}"=>"q", "\u{1D597}"=>"r", "\u{1D598}"=>"s", "\u{1D599}"=>"t", + "\u{1D59A}"=>"u", "\u{1D59B}"=>"v", "\u{1D59C}"=>"w", "\u{1D59D}"=>"x", "\u{1D59E}"=>"y", "\u{1D59F}"=>"z", "\u{1D5A0}"=>"A", "\u{1D5A1}"=>"B", + "\u{1D5A2}"=>"C", "\u{1D5A3}"=>"D", "\u{1D5A4}"=>"E", "\u{1D5A5}"=>"F", "\u{1D5A6}"=>"G", "\u{1D5A7}"=>"H", "\u{1D5A8}"=>"I", "\u{1D5A9}"=>"J", + "\u{1D5AA}"=>"K", "\u{1D5AB}"=>"L", "\u{1D5AC}"=>"M", "\u{1D5AD}"=>"N", "\u{1D5AE}"=>"O", "\u{1D5AF}"=>"P", "\u{1D5B0}"=>"Q", "\u{1D5B1}"=>"R", + "\u{1D5B2}"=>"S", "\u{1D5B3}"=>"T", "\u{1D5B4}"=>"U", "\u{1D5B5}"=>"V", "\u{1D5B6}"=>"W", "\u{1D5B7}"=>"X", "\u{1D5B8}"=>"Y", "\u{1D5B9}"=>"Z", + "\u{1D5BA}"=>"a", "\u{1D5BB}"=>"b", "\u{1D5BC}"=>"c", "\u{1D5BD}"=>"d", "\u{1D5BE}"=>"e", "\u{1D5BF}"=>"f", "\u{1D5C0}"=>"g", "\u{1D5C1}"=>"h", + "\u{1D5C2}"=>"i", "\u{1D5C3}"=>"j", "\u{1D5C4}"=>"k", "\u{1D5C5}"=>"l", "\u{1D5C6}"=>"m", "\u{1D5C7}"=>"n", "\u{1D5C8}"=>"o", "\u{1D5C9}"=>"p", + "\u{1D5CA}"=>"q", "\u{1D5CB}"=>"r", "\u{1D5CC}"=>"s", "\u{1D5CD}"=>"t", "\u{1D5CE}"=>"u", "\u{1D5CF}"=>"v", "\u{1D5D0}"=>"w", "\u{1D5D1}"=>"x", + "\u{1D5D2}"=>"y", "\u{1D5D3}"=>"z", "\u{1D5D4}"=>"A", "\u{1D5D5}"=>"B", "\u{1D5D6}"=>"C", "\u{1D5D7}"=>"D", "\u{1D5D8}"=>"E", "\u{1D5D9}"=>"F", + "\u{1D5DA}"=>"G", "\u{1D5DB}"=>"H", "\u{1D5DC}"=>"I", "\u{1D5DD}"=>"J", "\u{1D5DE}"=>"K", "\u{1D5DF}"=>"L", "\u{1D5E0}"=>"M", "\u{1D5E1}"=>"N", + "\u{1D5E2}"=>"O", "\u{1D5E3}"=>"P", "\u{1D5E4}"=>"Q", "\u{1D5E5}"=>"R", "\u{1D5E6}"=>"S", "\u{1D5E7}"=>"T", "\u{1D5E8}"=>"U", "\u{1D5E9}"=>"V", + "\u{1D5EA}"=>"W", "\u{1D5EB}"=>"X", "\u{1D5EC}"=>"Y", "\u{1D5ED}"=>"Z", "\u{1D5EE}"=>"a", "\u{1D5EF}"=>"b", "\u{1D5F0}"=>"c", "\u{1D5F1}"=>"d", + "\u{1D5F2}"=>"e", "\u{1D5F3}"=>"f", "\u{1D5F4}"=>"g", "\u{1D5F5}"=>"h", "\u{1D5F6}"=>"i", "\u{1D5F7}"=>"j", "\u{1D5F8}"=>"k", "\u{1D5F9}"=>"l", + "\u{1D5FA}"=>"m", "\u{1D5FB}"=>"n", "\u{1D5FC}"=>"o", "\u{1D5FD}"=>"p", "\u{1D5FE}"=>"q", "\u{1D5FF}"=>"r", "\u{1D600}"=>"s", "\u{1D601}"=>"t", + "\u{1D602}"=>"u", "\u{1D603}"=>"v", "\u{1D604}"=>"w", "\u{1D605}"=>"x", "\u{1D606}"=>"y", "\u{1D607}"=>"z", "\u{1D608}"=>"A", "\u{1D609}"=>"B", + "\u{1D60A}"=>"C", "\u{1D60B}"=>"D", "\u{1D60C}"=>"E", "\u{1D60D}"=>"F", "\u{1D60E}"=>"G", "\u{1D60F}"=>"H", "\u{1D610}"=>"I", "\u{1D611}"=>"J", + "\u{1D612}"=>"K", "\u{1D613}"=>"L", "\u{1D614}"=>"M", "\u{1D615}"=>"N", "\u{1D616}"=>"O", "\u{1D617}"=>"P", "\u{1D618}"=>"Q", "\u{1D619}"=>"R", + "\u{1D61A}"=>"S", "\u{1D61B}"=>"T", "\u{1D61C}"=>"U", "\u{1D61D}"=>"V", "\u{1D61E}"=>"W", "\u{1D61F}"=>"X", "\u{1D620}"=>"Y", "\u{1D621}"=>"Z", + "\u{1D622}"=>"a", "\u{1D623}"=>"b", "\u{1D624}"=>"c", "\u{1D625}"=>"d", "\u{1D626}"=>"e", "\u{1D627}"=>"f", "\u{1D628}"=>"g", "\u{1D629}"=>"h", + "\u{1D62A}"=>"i", "\u{1D62B}"=>"j", "\u{1D62C}"=>"k", "\u{1D62D}"=>"l", "\u{1D62E}"=>"m", "\u{1D62F}"=>"n", "\u{1D630}"=>"o", "\u{1D631}"=>"p", + "\u{1D632}"=>"q", "\u{1D633}"=>"r", "\u{1D634}"=>"s", "\u{1D635}"=>"t", "\u{1D636}"=>"u", "\u{1D637}"=>"v", "\u{1D638}"=>"w", "\u{1D639}"=>"x", + "\u{1D63A}"=>"y", "\u{1D63B}"=>"z", "\u{1D63C}"=>"A", "\u{1D63D}"=>"B", "\u{1D63E}"=>"C", "\u{1D63F}"=>"D", "\u{1D640}"=>"E", "\u{1D641}"=>"F", + "\u{1D642}"=>"G", "\u{1D643}"=>"H", "\u{1D644}"=>"I", "\u{1D645}"=>"J", "\u{1D646}"=>"K", "\u{1D647}"=>"L", "\u{1D648}"=>"M", "\u{1D649}"=>"N", + "\u{1D64A}"=>"O", "\u{1D64B}"=>"P", "\u{1D64C}"=>"Q", "\u{1D64D}"=>"R", "\u{1D64E}"=>"S", "\u{1D64F}"=>"T", "\u{1D650}"=>"U", "\u{1D651}"=>"V", + "\u{1D652}"=>"W", "\u{1D653}"=>"X", "\u{1D654}"=>"Y", "\u{1D655}"=>"Z", "\u{1D656}"=>"a", "\u{1D657}"=>"b", "\u{1D658}"=>"c", "\u{1D659}"=>"d", + "\u{1D65A}"=>"e", "\u{1D65B}"=>"f", "\u{1D65C}"=>"g", "\u{1D65D}"=>"h", "\u{1D65E}"=>"i", "\u{1D65F}"=>"j", "\u{1D660}"=>"k", "\u{1D661}"=>"l", + "\u{1D662}"=>"m", "\u{1D663}"=>"n", "\u{1D664}"=>"o", "\u{1D665}"=>"p", "\u{1D666}"=>"q", "\u{1D667}"=>"r", "\u{1D668}"=>"s", "\u{1D669}"=>"t", + "\u{1D66A}"=>"u", "\u{1D66B}"=>"v", "\u{1D66C}"=>"w", "\u{1D66D}"=>"x", "\u{1D66E}"=>"y", "\u{1D66F}"=>"z", "\u{1D670}"=>"A", "\u{1D671}"=>"B", + "\u{1D672}"=>"C", "\u{1D673}"=>"D", "\u{1D674}"=>"E", "\u{1D675}"=>"F", "\u{1D676}"=>"G", "\u{1D677}"=>"H", "\u{1D678}"=>"I", "\u{1D679}"=>"J", + "\u{1D67A}"=>"K", "\u{1D67B}"=>"L", "\u{1D67C}"=>"M", "\u{1D67D}"=>"N", "\u{1D67E}"=>"O", "\u{1D67F}"=>"P", "\u{1D680}"=>"Q", "\u{1D681}"=>"R", + "\u{1D682}"=>"S", "\u{1D683}"=>"T", "\u{1D684}"=>"U", "\u{1D685}"=>"V", "\u{1D686}"=>"W", "\u{1D687}"=>"X", "\u{1D688}"=>"Y", "\u{1D689}"=>"Z", + "\u{1D68A}"=>"a", "\u{1D68B}"=>"b", "\u{1D68C}"=>"c", "\u{1D68D}"=>"d", "\u{1D68E}"=>"e", "\u{1D68F}"=>"f", "\u{1D690}"=>"g", "\u{1D691}"=>"h", + "\u{1D692}"=>"i", "\u{1D693}"=>"j", "\u{1D694}"=>"k", "\u{1D695}"=>"l", "\u{1D696}"=>"m", "\u{1D697}"=>"n", "\u{1D698}"=>"o", "\u{1D699}"=>"p", + "\u{1D69A}"=>"q", "\u{1D69B}"=>"r", "\u{1D69C}"=>"s", "\u{1D69D}"=>"t", "\u{1D69E}"=>"u", "\u{1D69F}"=>"v", "\u{1D6A0}"=>"w", "\u{1D6A1}"=>"x", + "\u{1D6A2}"=>"y", "\u{1D6A3}"=>"z", "\u{1D6A4}"=>"\u0131", "\u{1D6A5}"=>"\u0237", "\u{1D6A8}"=>"\u0391", "\u{1D6A9}"=>"\u0392", "\u{1D6AA}"=>"\u0393", "\u{1D6AB}"=>"\u0394", + "\u{1D6AC}"=>"\u0395", "\u{1D6AD}"=>"\u0396", "\u{1D6AE}"=>"\u0397", "\u{1D6AF}"=>"\u0398", "\u{1D6B0}"=>"\u0399", "\u{1D6B1}"=>"\u039A", "\u{1D6B2}"=>"\u039B", "\u{1D6B3}"=>"\u039C", + "\u{1D6B4}"=>"\u039D", "\u{1D6B5}"=>"\u039E", "\u{1D6B6}"=>"\u039F", "\u{1D6B7}"=>"\u03A0", "\u{1D6B8}"=>"\u03A1", "\u{1D6B9}"=>"\u0398", "\u{1D6BA}"=>"\u03A3", "\u{1D6BB}"=>"\u03A4", + "\u{1D6BC}"=>"\u03A5", "\u{1D6BD}"=>"\u03A6", "\u{1D6BE}"=>"\u03A7", "\u{1D6BF}"=>"\u03A8", "\u{1D6C0}"=>"\u03A9", "\u{1D6C1}"=>"\u2207", "\u{1D6C2}"=>"\u03B1", "\u{1D6C3}"=>"\u03B2", + "\u{1D6C4}"=>"\u03B3", "\u{1D6C5}"=>"\u03B4", "\u{1D6C6}"=>"\u03B5", "\u{1D6C7}"=>"\u03B6", "\u{1D6C8}"=>"\u03B7", "\u{1D6C9}"=>"\u03B8", "\u{1D6CA}"=>"\u03B9", "\u{1D6CB}"=>"\u03BA", + "\u{1D6CC}"=>"\u03BB", "\u{1D6CD}"=>"\u03BC", "\u{1D6CE}"=>"\u03BD", "\u{1D6CF}"=>"\u03BE", "\u{1D6D0}"=>"\u03BF", "\u{1D6D1}"=>"\u03C0", "\u{1D6D2}"=>"\u03C1", "\u{1D6D3}"=>"\u03C2", + "\u{1D6D4}"=>"\u03C3", "\u{1D6D5}"=>"\u03C4", "\u{1D6D6}"=>"\u03C5", "\u{1D6D7}"=>"\u03C6", "\u{1D6D8}"=>"\u03C7", "\u{1D6D9}"=>"\u03C8", "\u{1D6DA}"=>"\u03C9", "\u{1D6DB}"=>"\u2202", + "\u{1D6DC}"=>"\u03B5", "\u{1D6DD}"=>"\u03B8", "\u{1D6DE}"=>"\u03BA", "\u{1D6DF}"=>"\u03C6", "\u{1D6E0}"=>"\u03C1", "\u{1D6E1}"=>"\u03C0", "\u{1D6E2}"=>"\u0391", "\u{1D6E3}"=>"\u0392", + "\u{1D6E4}"=>"\u0393", "\u{1D6E5}"=>"\u0394", "\u{1D6E6}"=>"\u0395", "\u{1D6E7}"=>"\u0396", "\u{1D6E8}"=>"\u0397", "\u{1D6E9}"=>"\u0398", "\u{1D6EA}"=>"\u0399", "\u{1D6EB}"=>"\u039A", + "\u{1D6EC}"=>"\u039B", "\u{1D6ED}"=>"\u039C", "\u{1D6EE}"=>"\u039D", "\u{1D6EF}"=>"\u039E", "\u{1D6F0}"=>"\u039F", "\u{1D6F1}"=>"\u03A0", "\u{1D6F2}"=>"\u03A1", "\u{1D6F3}"=>"\u0398", + "\u{1D6F4}"=>"\u03A3", "\u{1D6F5}"=>"\u03A4", "\u{1D6F6}"=>"\u03A5", "\u{1D6F7}"=>"\u03A6", "\u{1D6F8}"=>"\u03A7", "\u{1D6F9}"=>"\u03A8", "\u{1D6FA}"=>"\u03A9", "\u{1D6FB}"=>"\u2207", + "\u{1D6FC}"=>"\u03B1", "\u{1D6FD}"=>"\u03B2", "\u{1D6FE}"=>"\u03B3", "\u{1D6FF}"=>"\u03B4", "\u{1D700}"=>"\u03B5", "\u{1D701}"=>"\u03B6", "\u{1D702}"=>"\u03B7", "\u{1D703}"=>"\u03B8", + "\u{1D704}"=>"\u03B9", "\u{1D705}"=>"\u03BA", "\u{1D706}"=>"\u03BB", "\u{1D707}"=>"\u03BC", "\u{1D708}"=>"\u03BD", "\u{1D709}"=>"\u03BE", "\u{1D70A}"=>"\u03BF", "\u{1D70B}"=>"\u03C0", + "\u{1D70C}"=>"\u03C1", "\u{1D70D}"=>"\u03C2", "\u{1D70E}"=>"\u03C3", "\u{1D70F}"=>"\u03C4", "\u{1D710}"=>"\u03C5", "\u{1D711}"=>"\u03C6", "\u{1D712}"=>"\u03C7", "\u{1D713}"=>"\u03C8", + "\u{1D714}"=>"\u03C9", "\u{1D715}"=>"\u2202", "\u{1D716}"=>"\u03B5", "\u{1D717}"=>"\u03B8", "\u{1D718}"=>"\u03BA", "\u{1D719}"=>"\u03C6", "\u{1D71A}"=>"\u03C1", "\u{1D71B}"=>"\u03C0", + "\u{1D71C}"=>"\u0391", "\u{1D71D}"=>"\u0392", "\u{1D71E}"=>"\u0393", "\u{1D71F}"=>"\u0394", "\u{1D720}"=>"\u0395", "\u{1D721}"=>"\u0396", "\u{1D722}"=>"\u0397", "\u{1D723}"=>"\u0398", + "\u{1D724}"=>"\u0399", "\u{1D725}"=>"\u039A", "\u{1D726}"=>"\u039B", "\u{1D727}"=>"\u039C", "\u{1D728}"=>"\u039D", "\u{1D729}"=>"\u039E", "\u{1D72A}"=>"\u039F", "\u{1D72B}"=>"\u03A0", + "\u{1D72C}"=>"\u03A1", "\u{1D72D}"=>"\u0398", "\u{1D72E}"=>"\u03A3", "\u{1D72F}"=>"\u03A4", "\u{1D730}"=>"\u03A5", "\u{1D731}"=>"\u03A6", "\u{1D732}"=>"\u03A7", "\u{1D733}"=>"\u03A8", + "\u{1D734}"=>"\u03A9", "\u{1D735}"=>"\u2207", "\u{1D736}"=>"\u03B1", "\u{1D737}"=>"\u03B2", "\u{1D738}"=>"\u03B3", "\u{1D739}"=>"\u03B4", "\u{1D73A}"=>"\u03B5", "\u{1D73B}"=>"\u03B6", + "\u{1D73C}"=>"\u03B7", "\u{1D73D}"=>"\u03B8", "\u{1D73E}"=>"\u03B9", "\u{1D73F}"=>"\u03BA", "\u{1D740}"=>"\u03BB", "\u{1D741}"=>"\u03BC", "\u{1D742}"=>"\u03BD", "\u{1D743}"=>"\u03BE", + "\u{1D744}"=>"\u03BF", "\u{1D745}"=>"\u03C0", "\u{1D746}"=>"\u03C1", "\u{1D747}"=>"\u03C2", "\u{1D748}"=>"\u03C3", "\u{1D749}"=>"\u03C4", "\u{1D74A}"=>"\u03C5", "\u{1D74B}"=>"\u03C6", + "\u{1D74C}"=>"\u03C7", "\u{1D74D}"=>"\u03C8", "\u{1D74E}"=>"\u03C9", "\u{1D74F}"=>"\u2202", "\u{1D750}"=>"\u03B5", "\u{1D751}"=>"\u03B8", "\u{1D752}"=>"\u03BA", "\u{1D753}"=>"\u03C6", + "\u{1D754}"=>"\u03C1", "\u{1D755}"=>"\u03C0", "\u{1D756}"=>"\u0391", "\u{1D757}"=>"\u0392", "\u{1D758}"=>"\u0393", "\u{1D759}"=>"\u0394", "\u{1D75A}"=>"\u0395", "\u{1D75B}"=>"\u0396", + "\u{1D75C}"=>"\u0397", "\u{1D75D}"=>"\u0398", "\u{1D75E}"=>"\u0399", "\u{1D75F}"=>"\u039A", "\u{1D760}"=>"\u039B", "\u{1D761}"=>"\u039C", "\u{1D762}"=>"\u039D", "\u{1D763}"=>"\u039E", + "\u{1D764}"=>"\u039F", "\u{1D765}"=>"\u03A0", "\u{1D766}"=>"\u03A1", "\u{1D767}"=>"\u0398", "\u{1D768}"=>"\u03A3", "\u{1D769}"=>"\u03A4", "\u{1D76A}"=>"\u03A5", "\u{1D76B}"=>"\u03A6", + "\u{1D76C}"=>"\u03A7", "\u{1D76D}"=>"\u03A8", "\u{1D76E}"=>"\u03A9", "\u{1D76F}"=>"\u2207", "\u{1D770}"=>"\u03B1", "\u{1D771}"=>"\u03B2", "\u{1D772}"=>"\u03B3", "\u{1D773}"=>"\u03B4", + "\u{1D774}"=>"\u03B5", "\u{1D775}"=>"\u03B6", "\u{1D776}"=>"\u03B7", "\u{1D777}"=>"\u03B8", "\u{1D778}"=>"\u03B9", "\u{1D779}"=>"\u03BA", "\u{1D77A}"=>"\u03BB", "\u{1D77B}"=>"\u03BC", + "\u{1D77C}"=>"\u03BD", "\u{1D77D}"=>"\u03BE", "\u{1D77E}"=>"\u03BF", "\u{1D77F}"=>"\u03C0", "\u{1D780}"=>"\u03C1", "\u{1D781}"=>"\u03C2", "\u{1D782}"=>"\u03C3", "\u{1D783}"=>"\u03C4", + "\u{1D784}"=>"\u03C5", "\u{1D785}"=>"\u03C6", "\u{1D786}"=>"\u03C7", "\u{1D787}"=>"\u03C8", "\u{1D788}"=>"\u03C9", "\u{1D789}"=>"\u2202", "\u{1D78A}"=>"\u03B5", "\u{1D78B}"=>"\u03B8", + "\u{1D78C}"=>"\u03BA", "\u{1D78D}"=>"\u03C6", "\u{1D78E}"=>"\u03C1", "\u{1D78F}"=>"\u03C0", "\u{1D790}"=>"\u0391", "\u{1D791}"=>"\u0392", "\u{1D792}"=>"\u0393", "\u{1D793}"=>"\u0394", + "\u{1D794}"=>"\u0395", "\u{1D795}"=>"\u0396", "\u{1D796}"=>"\u0397", "\u{1D797}"=>"\u0398", "\u{1D798}"=>"\u0399", "\u{1D799}"=>"\u039A", "\u{1D79A}"=>"\u039B", "\u{1D79B}"=>"\u039C", + "\u{1D79C}"=>"\u039D", "\u{1D79D}"=>"\u039E", "\u{1D79E}"=>"\u039F", "\u{1D79F}"=>"\u03A0", "\u{1D7A0}"=>"\u03A1", "\u{1D7A1}"=>"\u0398", "\u{1D7A2}"=>"\u03A3", "\u{1D7A3}"=>"\u03A4", + "\u{1D7A4}"=>"\u03A5", "\u{1D7A5}"=>"\u03A6", "\u{1D7A6}"=>"\u03A7", "\u{1D7A7}"=>"\u03A8", "\u{1D7A8}"=>"\u03A9", "\u{1D7A9}"=>"\u2207", "\u{1D7AA}"=>"\u03B1", "\u{1D7AB}"=>"\u03B2", + "\u{1D7AC}"=>"\u03B3", "\u{1D7AD}"=>"\u03B4", "\u{1D7AE}"=>"\u03B5", "\u{1D7AF}"=>"\u03B6", "\u{1D7B0}"=>"\u03B7", "\u{1D7B1}"=>"\u03B8", "\u{1D7B2}"=>"\u03B9", "\u{1D7B3}"=>"\u03BA", + "\u{1D7B4}"=>"\u03BB", "\u{1D7B5}"=>"\u03BC", "\u{1D7B6}"=>"\u03BD", "\u{1D7B7}"=>"\u03BE", "\u{1D7B8}"=>"\u03BF", "\u{1D7B9}"=>"\u03C0", "\u{1D7BA}"=>"\u03C1", "\u{1D7BB}"=>"\u03C2", + "\u{1D7BC}"=>"\u03C3", "\u{1D7BD}"=>"\u03C4", "\u{1D7BE}"=>"\u03C5", "\u{1D7BF}"=>"\u03C6", "\u{1D7C0}"=>"\u03C7", "\u{1D7C1}"=>"\u03C8", "\u{1D7C2}"=>"\u03C9", "\u{1D7C3}"=>"\u2202", + "\u{1D7C4}"=>"\u03B5", "\u{1D7C5}"=>"\u03B8", "\u{1D7C6}"=>"\u03BA", "\u{1D7C7}"=>"\u03C6", "\u{1D7C8}"=>"\u03C1", "\u{1D7C9}"=>"\u03C0", "\u{1D7CA}"=>"\u03DC", "\u{1D7CB}"=>"\u03DD", + "\u{1D7CE}"=>"0", "\u{1D7CF}"=>"1", "\u{1D7D0}"=>"2", "\u{1D7D1}"=>"3", "\u{1D7D2}"=>"4", "\u{1D7D3}"=>"5", "\u{1D7D4}"=>"6", "\u{1D7D5}"=>"7", + "\u{1D7D6}"=>"8", "\u{1D7D7}"=>"9", "\u{1D7D8}"=>"0", "\u{1D7D9}"=>"1", "\u{1D7DA}"=>"2", "\u{1D7DB}"=>"3", "\u{1D7DC}"=>"4", "\u{1D7DD}"=>"5", + "\u{1D7DE}"=>"6", "\u{1D7DF}"=>"7", "\u{1D7E0}"=>"8", "\u{1D7E1}"=>"9", "\u{1D7E2}"=>"0", "\u{1D7E3}"=>"1", "\u{1D7E4}"=>"2", "\u{1D7E5}"=>"3", + "\u{1D7E6}"=>"4", "\u{1D7E7}"=>"5", "\u{1D7E8}"=>"6", "\u{1D7E9}"=>"7", "\u{1D7EA}"=>"8", "\u{1D7EB}"=>"9", "\u{1D7EC}"=>"0", "\u{1D7ED}"=>"1", + "\u{1D7EE}"=>"2", "\u{1D7EF}"=>"3", "\u{1D7F0}"=>"4", "\u{1D7F1}"=>"5", "\u{1D7F2}"=>"6", "\u{1D7F3}"=>"7", "\u{1D7F4}"=>"8", "\u{1D7F5}"=>"9", + "\u{1D7F6}"=>"0", "\u{1D7F7}"=>"1", "\u{1D7F8}"=>"2", "\u{1D7F9}"=>"3", "\u{1D7FA}"=>"4", "\u{1D7FB}"=>"5", "\u{1D7FC}"=>"6", "\u{1D7FD}"=>"7", + "\u{1D7FE}"=>"8", "\u{1D7FF}"=>"9", "\u{1EE00}"=>"\u0627", "\u{1EE01}"=>"\u0628", "\u{1EE02}"=>"\u062C", "\u{1EE03}"=>"\u062F", "\u{1EE05}"=>"\u0648", "\u{1EE06}"=>"\u0632", + "\u{1EE07}"=>"\u062D", "\u{1EE08}"=>"\u0637", "\u{1EE09}"=>"\u064A", "\u{1EE0A}"=>"\u0643", "\u{1EE0B}"=>"\u0644", "\u{1EE0C}"=>"\u0645", "\u{1EE0D}"=>"\u0646", "\u{1EE0E}"=>"\u0633", + "\u{1EE0F}"=>"\u0639", "\u{1EE10}"=>"\u0641", "\u{1EE11}"=>"\u0635", "\u{1EE12}"=>"\u0642", "\u{1EE13}"=>"\u0631", "\u{1EE14}"=>"\u0634", "\u{1EE15}"=>"\u062A", "\u{1EE16}"=>"\u062B", + "\u{1EE17}"=>"\u062E", "\u{1EE18}"=>"\u0630", "\u{1EE19}"=>"\u0636", "\u{1EE1A}"=>"\u0638", "\u{1EE1B}"=>"\u063A", "\u{1EE1C}"=>"\u066E", "\u{1EE1D}"=>"\u06BA", "\u{1EE1E}"=>"\u06A1", + "\u{1EE1F}"=>"\u066F", "\u{1EE21}"=>"\u0628", "\u{1EE22}"=>"\u062C", "\u{1EE24}"=>"\u0647", "\u{1EE27}"=>"\u062D", "\u{1EE29}"=>"\u064A", "\u{1EE2A}"=>"\u0643", "\u{1EE2B}"=>"\u0644", + "\u{1EE2C}"=>"\u0645", "\u{1EE2D}"=>"\u0646", "\u{1EE2E}"=>"\u0633", "\u{1EE2F}"=>"\u0639", "\u{1EE30}"=>"\u0641", "\u{1EE31}"=>"\u0635", "\u{1EE32}"=>"\u0642", "\u{1EE34}"=>"\u0634", + "\u{1EE35}"=>"\u062A", "\u{1EE36}"=>"\u062B", "\u{1EE37}"=>"\u062E", "\u{1EE39}"=>"\u0636", "\u{1EE3B}"=>"\u063A", "\u{1EE42}"=>"\u062C", "\u{1EE47}"=>"\u062D", "\u{1EE49}"=>"\u064A", + "\u{1EE4B}"=>"\u0644", "\u{1EE4D}"=>"\u0646", "\u{1EE4E}"=>"\u0633", "\u{1EE4F}"=>"\u0639", "\u{1EE51}"=>"\u0635", "\u{1EE52}"=>"\u0642", "\u{1EE54}"=>"\u0634", "\u{1EE57}"=>"\u062E", + "\u{1EE59}"=>"\u0636", "\u{1EE5B}"=>"\u063A", "\u{1EE5D}"=>"\u06BA", "\u{1EE5F}"=>"\u066F", "\u{1EE61}"=>"\u0628", "\u{1EE62}"=>"\u062C", "\u{1EE64}"=>"\u0647", "\u{1EE67}"=>"\u062D", + "\u{1EE68}"=>"\u0637", "\u{1EE69}"=>"\u064A", "\u{1EE6A}"=>"\u0643", "\u{1EE6C}"=>"\u0645", "\u{1EE6D}"=>"\u0646", "\u{1EE6E}"=>"\u0633", "\u{1EE6F}"=>"\u0639", "\u{1EE70}"=>"\u0641", + "\u{1EE71}"=>"\u0635", "\u{1EE72}"=>"\u0642", "\u{1EE74}"=>"\u0634", "\u{1EE75}"=>"\u062A", "\u{1EE76}"=>"\u062B", "\u{1EE77}"=>"\u062E", "\u{1EE79}"=>"\u0636", "\u{1EE7A}"=>"\u0638", + "\u{1EE7B}"=>"\u063A", "\u{1EE7C}"=>"\u066E", "\u{1EE7E}"=>"\u06A1", "\u{1EE80}"=>"\u0627", "\u{1EE81}"=>"\u0628", "\u{1EE82}"=>"\u062C", "\u{1EE83}"=>"\u062F", "\u{1EE84}"=>"\u0647", + "\u{1EE85}"=>"\u0648", "\u{1EE86}"=>"\u0632", "\u{1EE87}"=>"\u062D", "\u{1EE88}"=>"\u0637", "\u{1EE89}"=>"\u064A", "\u{1EE8B}"=>"\u0644", "\u{1EE8C}"=>"\u0645", "\u{1EE8D}"=>"\u0646", + "\u{1EE8E}"=>"\u0633", "\u{1EE8F}"=>"\u0639", "\u{1EE90}"=>"\u0641", "\u{1EE91}"=>"\u0635", "\u{1EE92}"=>"\u0642", "\u{1EE93}"=>"\u0631", "\u{1EE94}"=>"\u0634", "\u{1EE95}"=>"\u062A", + "\u{1EE96}"=>"\u062B", "\u{1EE97}"=>"\u062E", "\u{1EE98}"=>"\u0630", "\u{1EE99}"=>"\u0636", "\u{1EE9A}"=>"\u0638", "\u{1EE9B}"=>"\u063A", "\u{1EEA1}"=>"\u0628", "\u{1EEA2}"=>"\u062C", + "\u{1EEA3}"=>"\u062F", "\u{1EEA5}"=>"\u0648", "\u{1EEA6}"=>"\u0632", "\u{1EEA7}"=>"\u062D", "\u{1EEA8}"=>"\u0637", "\u{1EEA9}"=>"\u064A", "\u{1EEAB}"=>"\u0644", "\u{1EEAC}"=>"\u0645", + "\u{1EEAD}"=>"\u0646", "\u{1EEAE}"=>"\u0633", "\u{1EEAF}"=>"\u0639", "\u{1EEB0}"=>"\u0641", "\u{1EEB1}"=>"\u0635", "\u{1EEB2}"=>"\u0642", "\u{1EEB3}"=>"\u0631", "\u{1EEB4}"=>"\u0634", + "\u{1EEB5}"=>"\u062A", "\u{1EEB6}"=>"\u062B", "\u{1EEB7}"=>"\u062E", "\u{1EEB8}"=>"\u0630", "\u{1EEB9}"=>"\u0636", "\u{1EEBA}"=>"\u0638", "\u{1EEBB}"=>"\u063A", "\u{1F100}"=>"0.", + "\u{1F101}"=>"0,", "\u{1F102}"=>"1,", "\u{1F103}"=>"2,", "\u{1F104}"=>"3,", "\u{1F105}"=>"4,", "\u{1F106}"=>"5,", "\u{1F107}"=>"6,", "\u{1F108}"=>"7,", + "\u{1F109}"=>"8,", "\u{1F10A}"=>"9,", "\u{1F110}"=>"(A)", "\u{1F111}"=>"(B)", "\u{1F112}"=>"(C)", "\u{1F113}"=>"(D)", "\u{1F114}"=>"(E)", "\u{1F115}"=>"(F)", + "\u{1F116}"=>"(G)", "\u{1F117}"=>"(H)", "\u{1F118}"=>"(I)", "\u{1F119}"=>"(J)", "\u{1F11A}"=>"(K)", "\u{1F11B}"=>"(L)", "\u{1F11C}"=>"(M)", "\u{1F11D}"=>"(N)", + "\u{1F11E}"=>"(O)", "\u{1F11F}"=>"(P)", "\u{1F120}"=>"(Q)", "\u{1F121}"=>"(R)", "\u{1F122}"=>"(S)", "\u{1F123}"=>"(T)", "\u{1F124}"=>"(U)", "\u{1F125}"=>"(V)", + "\u{1F126}"=>"(W)", "\u{1F127}"=>"(X)", "\u{1F128}"=>"(Y)", "\u{1F129}"=>"(Z)", "\u{1F12A}"=>"\u3014S\u3015", "\u{1F12B}"=>"C", "\u{1F12C}"=>"R", "\u{1F12D}"=>"CD", + "\u{1F12E}"=>"WZ", "\u{1F130}"=>"A", "\u{1F131}"=>"B", "\u{1F132}"=>"C", "\u{1F133}"=>"D", "\u{1F134}"=>"E", "\u{1F135}"=>"F", "\u{1F136}"=>"G", + "\u{1F137}"=>"H", "\u{1F138}"=>"I", "\u{1F139}"=>"J", "\u{1F13A}"=>"K", "\u{1F13B}"=>"L", "\u{1F13C}"=>"M", "\u{1F13D}"=>"N", "\u{1F13E}"=>"O", + "\u{1F13F}"=>"P", "\u{1F140}"=>"Q", "\u{1F141}"=>"R", "\u{1F142}"=>"S", "\u{1F143}"=>"T", "\u{1F144}"=>"U", "\u{1F145}"=>"V", "\u{1F146}"=>"W", + "\u{1F147}"=>"X", "\u{1F148}"=>"Y", "\u{1F149}"=>"Z", "\u{1F14A}"=>"HV", "\u{1F14B}"=>"MV", "\u{1F14C}"=>"SD", "\u{1F14D}"=>"SS", "\u{1F14E}"=>"PPV", + "\u{1F14F}"=>"WC", "\u{1F16A}"=>"MC", "\u{1F16B}"=>"MD", "\u{1F190}"=>"DJ", "\u{1F200}"=>"\u307B\u304B", "\u{1F201}"=>"\u30B3\u30B3", "\u{1F202}"=>"\u30B5", "\u{1F210}"=>"\u624B", + "\u{1F211}"=>"\u5B57", "\u{1F212}"=>"\u53CC", "\u{1F213}"=>"\u30C7", "\u{1F214}"=>"\u4E8C", "\u{1F215}"=>"\u591A", "\u{1F216}"=>"\u89E3", "\u{1F217}"=>"\u5929", "\u{1F218}"=>"\u4EA4", + "\u{1F219}"=>"\u6620", "\u{1F21A}"=>"\u7121", "\u{1F21B}"=>"\u6599", "\u{1F21C}"=>"\u524D", "\u{1F21D}"=>"\u5F8C", "\u{1F21E}"=>"\u518D", "\u{1F21F}"=>"\u65B0", "\u{1F220}"=>"\u521D", + "\u{1F221}"=>"\u7D42", "\u{1F222}"=>"\u751F", "\u{1F223}"=>"\u8CA9", "\u{1F224}"=>"\u58F0", "\u{1F225}"=>"\u5439", "\u{1F226}"=>"\u6F14", "\u{1F227}"=>"\u6295", "\u{1F228}"=>"\u6355", + "\u{1F229}"=>"\u4E00", "\u{1F22A}"=>"\u4E09", "\u{1F22B}"=>"\u904A", "\u{1F22C}"=>"\u5DE6", "\u{1F22D}"=>"\u4E2D", "\u{1F22E}"=>"\u53F3", "\u{1F22F}"=>"\u6307", "\u{1F230}"=>"\u8D70", + "\u{1F231}"=>"\u6253", "\u{1F232}"=>"\u7981", "\u{1F233}"=>"\u7A7A", "\u{1F234}"=>"\u5408", "\u{1F235}"=>"\u6E80", "\u{1F236}"=>"\u6709", "\u{1F237}"=>"\u6708", "\u{1F238}"=>"\u7533", + "\u{1F239}"=>"\u5272", "\u{1F23A}"=>"\u55B6", "\u{1F240}"=>"\u3014\u672C\u3015", "\u{1F241}"=>"\u3014\u4E09\u3015", "\u{1F242}"=>"\u3014\u4E8C\u3015", "\u{1F243}"=>"\u3014\u5B89\u3015", "\u{1F244}"=>"\u3014\u70B9\u3015", "\u{1F245}"=>"\u3014\u6253\u3015", + "\u{1F246}"=>"\u3014\u76D7\u3015", "\u{1F247}"=>"\u3014\u52DD\u3015", "\u{1F248}"=>"\u3014\u6557\u3015", "\u{1F250}"=>"\u5F97", "\u{1F251}"=>"\u53EF", "\u0385"=>" \u0308\u0301", "\u03D3"=>"\u03A5\u0301", "\u03D4"=>"\u03A5\u0308", + "\u1E9B"=>"s\u0307", "\u1FC1"=>" \u0308\u0342", "\u1FCD"=>" \u0313\u0300", "\u1FCE"=>" \u0313\u0301", "\u1FCF"=>" \u0313\u0342", "\u1FDD"=>" \u0314\u0300", "\u1FDE"=>" \u0314\u0301", "\u1FDF"=>" \u0314\u0342", + "\u1FED"=>" \u0308\u0300", "\u1FEE"=>" \u0308\u0301", "\u1FFD"=>" \u0301", "\u2000"=>" ", "\u2001"=>" ", }.freeze COMPOSITION_TABLE = { - "A\u0300"=>"\u00C0".freeze, "A\u0301"=>"\u00C1".freeze, "A\u0302"=>"\u00C2".freeze, "A\u0303"=>"\u00C3".freeze, "A\u0308"=>"\u00C4".freeze, "A\u030A"=>"\u00C5".freeze, "C\u0327"=>"\u00C7".freeze, "E\u0300"=>"\u00C8".freeze, - "E\u0301"=>"\u00C9".freeze, "E\u0302"=>"\u00CA".freeze, "E\u0308"=>"\u00CB".freeze, "I\u0300"=>"\u00CC".freeze, "I\u0301"=>"\u00CD".freeze, "I\u0302"=>"\u00CE".freeze, "I\u0308"=>"\u00CF".freeze, "N\u0303"=>"\u00D1".freeze, - "O\u0300"=>"\u00D2".freeze, "O\u0301"=>"\u00D3".freeze, "O\u0302"=>"\u00D4".freeze, "O\u0303"=>"\u00D5".freeze, "O\u0308"=>"\u00D6".freeze, "U\u0300"=>"\u00D9".freeze, "U\u0301"=>"\u00DA".freeze, "U\u0302"=>"\u00DB".freeze, - "U\u0308"=>"\u00DC".freeze, "Y\u0301"=>"\u00DD".freeze, "a\u0300"=>"\u00E0".freeze, "a\u0301"=>"\u00E1".freeze, "a\u0302"=>"\u00E2".freeze, "a\u0303"=>"\u00E3".freeze, "a\u0308"=>"\u00E4".freeze, "a\u030A"=>"\u00E5".freeze, - "c\u0327"=>"\u00E7".freeze, "e\u0300"=>"\u00E8".freeze, "e\u0301"=>"\u00E9".freeze, "e\u0302"=>"\u00EA".freeze, "e\u0308"=>"\u00EB".freeze, "i\u0300"=>"\u00EC".freeze, "i\u0301"=>"\u00ED".freeze, "i\u0302"=>"\u00EE".freeze, - "i\u0308"=>"\u00EF".freeze, "n\u0303"=>"\u00F1".freeze, "o\u0300"=>"\u00F2".freeze, "o\u0301"=>"\u00F3".freeze, "o\u0302"=>"\u00F4".freeze, "o\u0303"=>"\u00F5".freeze, "o\u0308"=>"\u00F6".freeze, "u\u0300"=>"\u00F9".freeze, - "u\u0301"=>"\u00FA".freeze, "u\u0302"=>"\u00FB".freeze, "u\u0308"=>"\u00FC".freeze, "y\u0301"=>"\u00FD".freeze, "y\u0308"=>"\u00FF".freeze, "A\u0304"=>"\u0100".freeze, "a\u0304"=>"\u0101".freeze, "A\u0306"=>"\u0102".freeze, - "a\u0306"=>"\u0103".freeze, "A\u0328"=>"\u0104".freeze, "a\u0328"=>"\u0105".freeze, "C\u0301"=>"\u0106".freeze, "c\u0301"=>"\u0107".freeze, "C\u0302"=>"\u0108".freeze, "c\u0302"=>"\u0109".freeze, "C\u0307"=>"\u010A".freeze, - "c\u0307"=>"\u010B".freeze, "C\u030C"=>"\u010C".freeze, "c\u030C"=>"\u010D".freeze, "D\u030C"=>"\u010E".freeze, "d\u030C"=>"\u010F".freeze, "E\u0304"=>"\u0112".freeze, "e\u0304"=>"\u0113".freeze, "E\u0306"=>"\u0114".freeze, - "e\u0306"=>"\u0115".freeze, "E\u0307"=>"\u0116".freeze, "e\u0307"=>"\u0117".freeze, "E\u0328"=>"\u0118".freeze, "e\u0328"=>"\u0119".freeze, "E\u030C"=>"\u011A".freeze, "e\u030C"=>"\u011B".freeze, "G\u0302"=>"\u011C".freeze, - "g\u0302"=>"\u011D".freeze, "G\u0306"=>"\u011E".freeze, "g\u0306"=>"\u011F".freeze, "G\u0307"=>"\u0120".freeze, "g\u0307"=>"\u0121".freeze, "G\u0327"=>"\u0122".freeze, "g\u0327"=>"\u0123".freeze, "H\u0302"=>"\u0124".freeze, - "h\u0302"=>"\u0125".freeze, "I\u0303"=>"\u0128".freeze, "i\u0303"=>"\u0129".freeze, "I\u0304"=>"\u012A".freeze, "i\u0304"=>"\u012B".freeze, "I\u0306"=>"\u012C".freeze, "i\u0306"=>"\u012D".freeze, "I\u0328"=>"\u012E".freeze, - "i\u0328"=>"\u012F".freeze, "I\u0307"=>"\u0130".freeze, "J\u0302"=>"\u0134".freeze, "j\u0302"=>"\u0135".freeze, "K\u0327"=>"\u0136".freeze, "k\u0327"=>"\u0137".freeze, "L\u0301"=>"\u0139".freeze, "l\u0301"=>"\u013A".freeze, - "L\u0327"=>"\u013B".freeze, "l\u0327"=>"\u013C".freeze, "L\u030C"=>"\u013D".freeze, "l\u030C"=>"\u013E".freeze, "N\u0301"=>"\u0143".freeze, "n\u0301"=>"\u0144".freeze, "N\u0327"=>"\u0145".freeze, "n\u0327"=>"\u0146".freeze, - "N\u030C"=>"\u0147".freeze, "n\u030C"=>"\u0148".freeze, "O\u0304"=>"\u014C".freeze, "o\u0304"=>"\u014D".freeze, "O\u0306"=>"\u014E".freeze, "o\u0306"=>"\u014F".freeze, "O\u030B"=>"\u0150".freeze, "o\u030B"=>"\u0151".freeze, - "R\u0301"=>"\u0154".freeze, "r\u0301"=>"\u0155".freeze, "R\u0327"=>"\u0156".freeze, "r\u0327"=>"\u0157".freeze, "R\u030C"=>"\u0158".freeze, "r\u030C"=>"\u0159".freeze, "S\u0301"=>"\u015A".freeze, "s\u0301"=>"\u015B".freeze, - "S\u0302"=>"\u015C".freeze, "s\u0302"=>"\u015D".freeze, "S\u0327"=>"\u015E".freeze, "s\u0327"=>"\u015F".freeze, "S\u030C"=>"\u0160".freeze, "s\u030C"=>"\u0161".freeze, "T\u0327"=>"\u0162".freeze, "t\u0327"=>"\u0163".freeze, - "T\u030C"=>"\u0164".freeze, "t\u030C"=>"\u0165".freeze, "U\u0303"=>"\u0168".freeze, "u\u0303"=>"\u0169".freeze, "U\u0304"=>"\u016A".freeze, "u\u0304"=>"\u016B".freeze, "U\u0306"=>"\u016C".freeze, "u\u0306"=>"\u016D".freeze, - "U\u030A"=>"\u016E".freeze, "u\u030A"=>"\u016F".freeze, "U\u030B"=>"\u0170".freeze, "u\u030B"=>"\u0171".freeze, "U\u0328"=>"\u0172".freeze, "u\u0328"=>"\u0173".freeze, "W\u0302"=>"\u0174".freeze, "w\u0302"=>"\u0175".freeze, - "Y\u0302"=>"\u0176".freeze, "y\u0302"=>"\u0177".freeze, "Y\u0308"=>"\u0178".freeze, "Z\u0301"=>"\u0179".freeze, "z\u0301"=>"\u017A".freeze, "Z\u0307"=>"\u017B".freeze, "z\u0307"=>"\u017C".freeze, "Z\u030C"=>"\u017D".freeze, - "z\u030C"=>"\u017E".freeze, "O\u031B"=>"\u01A0".freeze, "o\u031B"=>"\u01A1".freeze, "U\u031B"=>"\u01AF".freeze, "u\u031B"=>"\u01B0".freeze, "A\u030C"=>"\u01CD".freeze, "a\u030C"=>"\u01CE".freeze, "I\u030C"=>"\u01CF".freeze, - "i\u030C"=>"\u01D0".freeze, "O\u030C"=>"\u01D1".freeze, "o\u030C"=>"\u01D2".freeze, "U\u030C"=>"\u01D3".freeze, "u\u030C"=>"\u01D4".freeze, "\u00DC\u0304"=>"\u01D5".freeze, "\u00FC\u0304"=>"\u01D6".freeze, "\u00DC\u0301"=>"\u01D7".freeze, - "\u00FC\u0301"=>"\u01D8".freeze, "\u00DC\u030C"=>"\u01D9".freeze, "\u00FC\u030C"=>"\u01DA".freeze, "\u00DC\u0300"=>"\u01DB".freeze, "\u00FC\u0300"=>"\u01DC".freeze, "\u00C4\u0304"=>"\u01DE".freeze, "\u00E4\u0304"=>"\u01DF".freeze, "\u0226\u0304"=>"\u01E0".freeze, - "\u0227\u0304"=>"\u01E1".freeze, "\u00C6\u0304"=>"\u01E2".freeze, "\u00E6\u0304"=>"\u01E3".freeze, "G\u030C"=>"\u01E6".freeze, "g\u030C"=>"\u01E7".freeze, "K\u030C"=>"\u01E8".freeze, "k\u030C"=>"\u01E9".freeze, "O\u0328"=>"\u01EA".freeze, - "o\u0328"=>"\u01EB".freeze, "\u01EA\u0304"=>"\u01EC".freeze, "\u01EB\u0304"=>"\u01ED".freeze, "\u01B7\u030C"=>"\u01EE".freeze, "\u0292\u030C"=>"\u01EF".freeze, "j\u030C"=>"\u01F0".freeze, "G\u0301"=>"\u01F4".freeze, "g\u0301"=>"\u01F5".freeze, - "N\u0300"=>"\u01F8".freeze, "n\u0300"=>"\u01F9".freeze, "\u00C5\u0301"=>"\u01FA".freeze, "\u00E5\u0301"=>"\u01FB".freeze, "\u00C6\u0301"=>"\u01FC".freeze, "\u00E6\u0301"=>"\u01FD".freeze, "\u00D8\u0301"=>"\u01FE".freeze, "\u00F8\u0301"=>"\u01FF".freeze, - "A\u030F"=>"\u0200".freeze, "a\u030F"=>"\u0201".freeze, "A\u0311"=>"\u0202".freeze, "a\u0311"=>"\u0203".freeze, "E\u030F"=>"\u0204".freeze, "e\u030F"=>"\u0205".freeze, "E\u0311"=>"\u0206".freeze, "e\u0311"=>"\u0207".freeze, - "I\u030F"=>"\u0208".freeze, "i\u030F"=>"\u0209".freeze, "I\u0311"=>"\u020A".freeze, "i\u0311"=>"\u020B".freeze, "O\u030F"=>"\u020C".freeze, "o\u030F"=>"\u020D".freeze, "O\u0311"=>"\u020E".freeze, "o\u0311"=>"\u020F".freeze, - "R\u030F"=>"\u0210".freeze, "r\u030F"=>"\u0211".freeze, "R\u0311"=>"\u0212".freeze, "r\u0311"=>"\u0213".freeze, "U\u030F"=>"\u0214".freeze, "u\u030F"=>"\u0215".freeze, "U\u0311"=>"\u0216".freeze, "u\u0311"=>"\u0217".freeze, - "S\u0326"=>"\u0218".freeze, "s\u0326"=>"\u0219".freeze, "T\u0326"=>"\u021A".freeze, "t\u0326"=>"\u021B".freeze, "H\u030C"=>"\u021E".freeze, "h\u030C"=>"\u021F".freeze, "A\u0307"=>"\u0226".freeze, "a\u0307"=>"\u0227".freeze, - "E\u0327"=>"\u0228".freeze, "e\u0327"=>"\u0229".freeze, "\u00D6\u0304"=>"\u022A".freeze, "\u00F6\u0304"=>"\u022B".freeze, "\u00D5\u0304"=>"\u022C".freeze, "\u00F5\u0304"=>"\u022D".freeze, "O\u0307"=>"\u022E".freeze, "o\u0307"=>"\u022F".freeze, - "\u022E\u0304"=>"\u0230".freeze, "\u022F\u0304"=>"\u0231".freeze, "Y\u0304"=>"\u0232".freeze, "y\u0304"=>"\u0233".freeze, "\u00A8\u0301"=>"\u0385".freeze, "\u0391\u0301"=>"\u0386".freeze, "\u0395\u0301"=>"\u0388".freeze, "\u0397\u0301"=>"\u0389".freeze, - "\u0399\u0301"=>"\u038A".freeze, "\u039F\u0301"=>"\u038C".freeze, "\u03A5\u0301"=>"\u038E".freeze, "\u03A9\u0301"=>"\u038F".freeze, "\u03CA\u0301"=>"\u0390".freeze, "\u0399\u0308"=>"\u03AA".freeze, "\u03A5\u0308"=>"\u03AB".freeze, "\u03B1\u0301"=>"\u03AC".freeze, - "\u03B5\u0301"=>"\u03AD".freeze, "\u03B7\u0301"=>"\u03AE".freeze, "\u03B9\u0301"=>"\u03AF".freeze, "\u03CB\u0301"=>"\u03B0".freeze, "\u03B9\u0308"=>"\u03CA".freeze, "\u03C5\u0308"=>"\u03CB".freeze, "\u03BF\u0301"=>"\u03CC".freeze, "\u03C5\u0301"=>"\u03CD".freeze, - "\u03C9\u0301"=>"\u03CE".freeze, "\u03D2\u0301"=>"\u03D3".freeze, "\u03D2\u0308"=>"\u03D4".freeze, "\u0415\u0300"=>"\u0400".freeze, "\u0415\u0308"=>"\u0401".freeze, "\u0413\u0301"=>"\u0403".freeze, "\u0406\u0308"=>"\u0407".freeze, "\u041A\u0301"=>"\u040C".freeze, - "\u0418\u0300"=>"\u040D".freeze, "\u0423\u0306"=>"\u040E".freeze, "\u0418\u0306"=>"\u0419".freeze, "\u0438\u0306"=>"\u0439".freeze, "\u0435\u0300"=>"\u0450".freeze, "\u0435\u0308"=>"\u0451".freeze, "\u0433\u0301"=>"\u0453".freeze, "\u0456\u0308"=>"\u0457".freeze, - "\u043A\u0301"=>"\u045C".freeze, "\u0438\u0300"=>"\u045D".freeze, "\u0443\u0306"=>"\u045E".freeze, "\u0474\u030F"=>"\u0476".freeze, "\u0475\u030F"=>"\u0477".freeze, "\u0416\u0306"=>"\u04C1".freeze, "\u0436\u0306"=>"\u04C2".freeze, "\u0410\u0306"=>"\u04D0".freeze, - "\u0430\u0306"=>"\u04D1".freeze, "\u0410\u0308"=>"\u04D2".freeze, "\u0430\u0308"=>"\u04D3".freeze, "\u0415\u0306"=>"\u04D6".freeze, "\u0435\u0306"=>"\u04D7".freeze, "\u04D8\u0308"=>"\u04DA".freeze, "\u04D9\u0308"=>"\u04DB".freeze, "\u0416\u0308"=>"\u04DC".freeze, - "\u0436\u0308"=>"\u04DD".freeze, "\u0417\u0308"=>"\u04DE".freeze, "\u0437\u0308"=>"\u04DF".freeze, "\u0418\u0304"=>"\u04E2".freeze, "\u0438\u0304"=>"\u04E3".freeze, "\u0418\u0308"=>"\u04E4".freeze, "\u0438\u0308"=>"\u04E5".freeze, "\u041E\u0308"=>"\u04E6".freeze, - "\u043E\u0308"=>"\u04E7".freeze, "\u04E8\u0308"=>"\u04EA".freeze, "\u04E9\u0308"=>"\u04EB".freeze, "\u042D\u0308"=>"\u04EC".freeze, "\u044D\u0308"=>"\u04ED".freeze, "\u0423\u0304"=>"\u04EE".freeze, "\u0443\u0304"=>"\u04EF".freeze, "\u0423\u0308"=>"\u04F0".freeze, - "\u0443\u0308"=>"\u04F1".freeze, "\u0423\u030B"=>"\u04F2".freeze, "\u0443\u030B"=>"\u04F3".freeze, "\u0427\u0308"=>"\u04F4".freeze, "\u0447\u0308"=>"\u04F5".freeze, "\u042B\u0308"=>"\u04F8".freeze, "\u044B\u0308"=>"\u04F9".freeze, "\u0627\u0653"=>"\u0622".freeze, - "\u0627\u0654"=>"\u0623".freeze, "\u0648\u0654"=>"\u0624".freeze, "\u0627\u0655"=>"\u0625".freeze, "\u064A\u0654"=>"\u0626".freeze, "\u06D5\u0654"=>"\u06C0".freeze, "\u06C1\u0654"=>"\u06C2".freeze, "\u06D2\u0654"=>"\u06D3".freeze, "\u0928\u093C"=>"\u0929".freeze, - "\u0930\u093C"=>"\u0931".freeze, "\u0933\u093C"=>"\u0934".freeze, "\u09C7\u09BE"=>"\u09CB".freeze, "\u09C7\u09D7"=>"\u09CC".freeze, "\u0B47\u0B56"=>"\u0B48".freeze, "\u0B47\u0B3E"=>"\u0B4B".freeze, "\u0B47\u0B57"=>"\u0B4C".freeze, "\u0B92\u0BD7"=>"\u0B94".freeze, - "\u0BC6\u0BBE"=>"\u0BCA".freeze, "\u0BC7\u0BBE"=>"\u0BCB".freeze, "\u0BC6\u0BD7"=>"\u0BCC".freeze, "\u0C46\u0C56"=>"\u0C48".freeze, "\u0CBF\u0CD5"=>"\u0CC0".freeze, "\u0CC6\u0CD5"=>"\u0CC7".freeze, "\u0CC6\u0CD6"=>"\u0CC8".freeze, "\u0CC6\u0CC2"=>"\u0CCA".freeze, - "\u0CCA\u0CD5"=>"\u0CCB".freeze, "\u0D46\u0D3E"=>"\u0D4A".freeze, "\u0D47\u0D3E"=>"\u0D4B".freeze, "\u0D46\u0D57"=>"\u0D4C".freeze, "\u0DD9\u0DCA"=>"\u0DDA".freeze, "\u0DD9\u0DCF"=>"\u0DDC".freeze, "\u0DDC\u0DCA"=>"\u0DDD".freeze, "\u0DD9\u0DDF"=>"\u0DDE".freeze, - "\u1025\u102E"=>"\u1026".freeze, "\u1B05\u1B35"=>"\u1B06".freeze, "\u1B07\u1B35"=>"\u1B08".freeze, "\u1B09\u1B35"=>"\u1B0A".freeze, "\u1B0B\u1B35"=>"\u1B0C".freeze, "\u1B0D\u1B35"=>"\u1B0E".freeze, "\u1B11\u1B35"=>"\u1B12".freeze, "\u1B3A\u1B35"=>"\u1B3B".freeze, - "\u1B3C\u1B35"=>"\u1B3D".freeze, "\u1B3E\u1B35"=>"\u1B40".freeze, "\u1B3F\u1B35"=>"\u1B41".freeze, "\u1B42\u1B35"=>"\u1B43".freeze, "A\u0325"=>"\u1E00".freeze, "a\u0325"=>"\u1E01".freeze, "B\u0307"=>"\u1E02".freeze, "b\u0307"=>"\u1E03".freeze, - "B\u0323"=>"\u1E04".freeze, "b\u0323"=>"\u1E05".freeze, "B\u0331"=>"\u1E06".freeze, "b\u0331"=>"\u1E07".freeze, "\u00C7\u0301"=>"\u1E08".freeze, "\u00E7\u0301"=>"\u1E09".freeze, "D\u0307"=>"\u1E0A".freeze, "d\u0307"=>"\u1E0B".freeze, - "D\u0323"=>"\u1E0C".freeze, "d\u0323"=>"\u1E0D".freeze, "D\u0331"=>"\u1E0E".freeze, "d\u0331"=>"\u1E0F".freeze, "D\u0327"=>"\u1E10".freeze, "d\u0327"=>"\u1E11".freeze, "D\u032D"=>"\u1E12".freeze, "d\u032D"=>"\u1E13".freeze, - "\u0112\u0300"=>"\u1E14".freeze, "\u0113\u0300"=>"\u1E15".freeze, "\u0112\u0301"=>"\u1E16".freeze, "\u0113\u0301"=>"\u1E17".freeze, "E\u032D"=>"\u1E18".freeze, "e\u032D"=>"\u1E19".freeze, "E\u0330"=>"\u1E1A".freeze, "e\u0330"=>"\u1E1B".freeze, - "\u0228\u0306"=>"\u1E1C".freeze, "\u0229\u0306"=>"\u1E1D".freeze, "F\u0307"=>"\u1E1E".freeze, "f\u0307"=>"\u1E1F".freeze, "G\u0304"=>"\u1E20".freeze, "g\u0304"=>"\u1E21".freeze, "H\u0307"=>"\u1E22".freeze, "h\u0307"=>"\u1E23".freeze, - "H\u0323"=>"\u1E24".freeze, "h\u0323"=>"\u1E25".freeze, "H\u0308"=>"\u1E26".freeze, "h\u0308"=>"\u1E27".freeze, "H\u0327"=>"\u1E28".freeze, "h\u0327"=>"\u1E29".freeze, "H\u032E"=>"\u1E2A".freeze, "h\u032E"=>"\u1E2B".freeze, - "I\u0330"=>"\u1E2C".freeze, "i\u0330"=>"\u1E2D".freeze, "\u00CF\u0301"=>"\u1E2E".freeze, "\u00EF\u0301"=>"\u1E2F".freeze, "K\u0301"=>"\u1E30".freeze, "k\u0301"=>"\u1E31".freeze, "K\u0323"=>"\u1E32".freeze, "k\u0323"=>"\u1E33".freeze, - "K\u0331"=>"\u1E34".freeze, "k\u0331"=>"\u1E35".freeze, "L\u0323"=>"\u1E36".freeze, "l\u0323"=>"\u1E37".freeze, "\u1E36\u0304"=>"\u1E38".freeze, "\u1E37\u0304"=>"\u1E39".freeze, "L\u0331"=>"\u1E3A".freeze, "l\u0331"=>"\u1E3B".freeze, - "L\u032D"=>"\u1E3C".freeze, "l\u032D"=>"\u1E3D".freeze, "M\u0301"=>"\u1E3E".freeze, "m\u0301"=>"\u1E3F".freeze, "M\u0307"=>"\u1E40".freeze, "m\u0307"=>"\u1E41".freeze, "M\u0323"=>"\u1E42".freeze, "m\u0323"=>"\u1E43".freeze, - "N\u0307"=>"\u1E44".freeze, "n\u0307"=>"\u1E45".freeze, "N\u0323"=>"\u1E46".freeze, "n\u0323"=>"\u1E47".freeze, "N\u0331"=>"\u1E48".freeze, "n\u0331"=>"\u1E49".freeze, "N\u032D"=>"\u1E4A".freeze, "n\u032D"=>"\u1E4B".freeze, - "\u00D5\u0301"=>"\u1E4C".freeze, "\u00F5\u0301"=>"\u1E4D".freeze, "\u00D5\u0308"=>"\u1E4E".freeze, "\u00F5\u0308"=>"\u1E4F".freeze, "\u014C\u0300"=>"\u1E50".freeze, "\u014D\u0300"=>"\u1E51".freeze, "\u014C\u0301"=>"\u1E52".freeze, "\u014D\u0301"=>"\u1E53".freeze, - "P\u0301"=>"\u1E54".freeze, "p\u0301"=>"\u1E55".freeze, "P\u0307"=>"\u1E56".freeze, "p\u0307"=>"\u1E57".freeze, "R\u0307"=>"\u1E58".freeze, "r\u0307"=>"\u1E59".freeze, "R\u0323"=>"\u1E5A".freeze, "r\u0323"=>"\u1E5B".freeze, - "\u1E5A\u0304"=>"\u1E5C".freeze, "\u1E5B\u0304"=>"\u1E5D".freeze, "R\u0331"=>"\u1E5E".freeze, "r\u0331"=>"\u1E5F".freeze, "S\u0307"=>"\u1E60".freeze, "s\u0307"=>"\u1E61".freeze, "S\u0323"=>"\u1E62".freeze, "s\u0323"=>"\u1E63".freeze, - "\u015A\u0307"=>"\u1E64".freeze, "\u015B\u0307"=>"\u1E65".freeze, "\u0160\u0307"=>"\u1E66".freeze, "\u0161\u0307"=>"\u1E67".freeze, "\u1E62\u0307"=>"\u1E68".freeze, "\u1E63\u0307"=>"\u1E69".freeze, "T\u0307"=>"\u1E6A".freeze, "t\u0307"=>"\u1E6B".freeze, - "T\u0323"=>"\u1E6C".freeze, "t\u0323"=>"\u1E6D".freeze, "T\u0331"=>"\u1E6E".freeze, "t\u0331"=>"\u1E6F".freeze, "T\u032D"=>"\u1E70".freeze, "t\u032D"=>"\u1E71".freeze, "U\u0324"=>"\u1E72".freeze, "u\u0324"=>"\u1E73".freeze, - "U\u0330"=>"\u1E74".freeze, "u\u0330"=>"\u1E75".freeze, "U\u032D"=>"\u1E76".freeze, "u\u032D"=>"\u1E77".freeze, "\u0168\u0301"=>"\u1E78".freeze, "\u0169\u0301"=>"\u1E79".freeze, "\u016A\u0308"=>"\u1E7A".freeze, "\u016B\u0308"=>"\u1E7B".freeze, - "V\u0303"=>"\u1E7C".freeze, "v\u0303"=>"\u1E7D".freeze, "V\u0323"=>"\u1E7E".freeze, "v\u0323"=>"\u1E7F".freeze, "W\u0300"=>"\u1E80".freeze, "w\u0300"=>"\u1E81".freeze, "W\u0301"=>"\u1E82".freeze, "w\u0301"=>"\u1E83".freeze, - "W\u0308"=>"\u1E84".freeze, "w\u0308"=>"\u1E85".freeze, "W\u0307"=>"\u1E86".freeze, "w\u0307"=>"\u1E87".freeze, "W\u0323"=>"\u1E88".freeze, "w\u0323"=>"\u1E89".freeze, "X\u0307"=>"\u1E8A".freeze, "x\u0307"=>"\u1E8B".freeze, - "X\u0308"=>"\u1E8C".freeze, "x\u0308"=>"\u1E8D".freeze, "Y\u0307"=>"\u1E8E".freeze, "y\u0307"=>"\u1E8F".freeze, "Z\u0302"=>"\u1E90".freeze, "z\u0302"=>"\u1E91".freeze, "Z\u0323"=>"\u1E92".freeze, "z\u0323"=>"\u1E93".freeze, - "Z\u0331"=>"\u1E94".freeze, "z\u0331"=>"\u1E95".freeze, "h\u0331"=>"\u1E96".freeze, "t\u0308"=>"\u1E97".freeze, "w\u030A"=>"\u1E98".freeze, "y\u030A"=>"\u1E99".freeze, "\u017F\u0307"=>"\u1E9B".freeze, "A\u0323"=>"\u1EA0".freeze, - "a\u0323"=>"\u1EA1".freeze, "A\u0309"=>"\u1EA2".freeze, "a\u0309"=>"\u1EA3".freeze, "\u00C2\u0301"=>"\u1EA4".freeze, "\u00E2\u0301"=>"\u1EA5".freeze, "\u00C2\u0300"=>"\u1EA6".freeze, "\u00E2\u0300"=>"\u1EA7".freeze, "\u00C2\u0309"=>"\u1EA8".freeze, - "\u00E2\u0309"=>"\u1EA9".freeze, "\u00C2\u0303"=>"\u1EAA".freeze, "\u00E2\u0303"=>"\u1EAB".freeze, "\u1EA0\u0302"=>"\u1EAC".freeze, "\u1EA1\u0302"=>"\u1EAD".freeze, "\u0102\u0301"=>"\u1EAE".freeze, "\u0103\u0301"=>"\u1EAF".freeze, "\u0102\u0300"=>"\u1EB0".freeze, - "\u0103\u0300"=>"\u1EB1".freeze, "\u0102\u0309"=>"\u1EB2".freeze, "\u0103\u0309"=>"\u1EB3".freeze, "\u0102\u0303"=>"\u1EB4".freeze, "\u0103\u0303"=>"\u1EB5".freeze, "\u1EA0\u0306"=>"\u1EB6".freeze, "\u1EA1\u0306"=>"\u1EB7".freeze, "E\u0323"=>"\u1EB8".freeze, - "e\u0323"=>"\u1EB9".freeze, "E\u0309"=>"\u1EBA".freeze, "e\u0309"=>"\u1EBB".freeze, "E\u0303"=>"\u1EBC".freeze, "e\u0303"=>"\u1EBD".freeze, "\u00CA\u0301"=>"\u1EBE".freeze, "\u00EA\u0301"=>"\u1EBF".freeze, "\u00CA\u0300"=>"\u1EC0".freeze, - "\u00EA\u0300"=>"\u1EC1".freeze, "\u00CA\u0309"=>"\u1EC2".freeze, "\u00EA\u0309"=>"\u1EC3".freeze, "\u00CA\u0303"=>"\u1EC4".freeze, "\u00EA\u0303"=>"\u1EC5".freeze, "\u1EB8\u0302"=>"\u1EC6".freeze, "\u1EB9\u0302"=>"\u1EC7".freeze, "I\u0309"=>"\u1EC8".freeze, - "i\u0309"=>"\u1EC9".freeze, "I\u0323"=>"\u1ECA".freeze, "i\u0323"=>"\u1ECB".freeze, "O\u0323"=>"\u1ECC".freeze, "o\u0323"=>"\u1ECD".freeze, "O\u0309"=>"\u1ECE".freeze, "o\u0309"=>"\u1ECF".freeze, "\u00D4\u0301"=>"\u1ED0".freeze, - "\u00F4\u0301"=>"\u1ED1".freeze, "\u00D4\u0300"=>"\u1ED2".freeze, "\u00F4\u0300"=>"\u1ED3".freeze, "\u00D4\u0309"=>"\u1ED4".freeze, "\u00F4\u0309"=>"\u1ED5".freeze, "\u00D4\u0303"=>"\u1ED6".freeze, "\u00F4\u0303"=>"\u1ED7".freeze, "\u1ECC\u0302"=>"\u1ED8".freeze, - "\u1ECD\u0302"=>"\u1ED9".freeze, "\u01A0\u0301"=>"\u1EDA".freeze, "\u01A1\u0301"=>"\u1EDB".freeze, "\u01A0\u0300"=>"\u1EDC".freeze, "\u01A1\u0300"=>"\u1EDD".freeze, "\u01A0\u0309"=>"\u1EDE".freeze, "\u01A1\u0309"=>"\u1EDF".freeze, "\u01A0\u0303"=>"\u1EE0".freeze, - "\u01A1\u0303"=>"\u1EE1".freeze, "\u01A0\u0323"=>"\u1EE2".freeze, "\u01A1\u0323"=>"\u1EE3".freeze, "U\u0323"=>"\u1EE4".freeze, "u\u0323"=>"\u1EE5".freeze, "U\u0309"=>"\u1EE6".freeze, "u\u0309"=>"\u1EE7".freeze, "\u01AF\u0301"=>"\u1EE8".freeze, - "\u01B0\u0301"=>"\u1EE9".freeze, "\u01AF\u0300"=>"\u1EEA".freeze, "\u01B0\u0300"=>"\u1EEB".freeze, "\u01AF\u0309"=>"\u1EEC".freeze, "\u01B0\u0309"=>"\u1EED".freeze, "\u01AF\u0303"=>"\u1EEE".freeze, "\u01B0\u0303"=>"\u1EEF".freeze, "\u01AF\u0323"=>"\u1EF0".freeze, - "\u01B0\u0323"=>"\u1EF1".freeze, "Y\u0300"=>"\u1EF2".freeze, "y\u0300"=>"\u1EF3".freeze, "Y\u0323"=>"\u1EF4".freeze, "y\u0323"=>"\u1EF5".freeze, "Y\u0309"=>"\u1EF6".freeze, "y\u0309"=>"\u1EF7".freeze, "Y\u0303"=>"\u1EF8".freeze, - "y\u0303"=>"\u1EF9".freeze, "\u03B1\u0313"=>"\u1F00".freeze, "\u03B1\u0314"=>"\u1F01".freeze, "\u1F00\u0300"=>"\u1F02".freeze, "\u1F01\u0300"=>"\u1F03".freeze, "\u1F00\u0301"=>"\u1F04".freeze, "\u1F01\u0301"=>"\u1F05".freeze, "\u1F00\u0342"=>"\u1F06".freeze, - "\u1F01\u0342"=>"\u1F07".freeze, "\u0391\u0313"=>"\u1F08".freeze, "\u0391\u0314"=>"\u1F09".freeze, "\u1F08\u0300"=>"\u1F0A".freeze, "\u1F09\u0300"=>"\u1F0B".freeze, "\u1F08\u0301"=>"\u1F0C".freeze, "\u1F09\u0301"=>"\u1F0D".freeze, "\u1F08\u0342"=>"\u1F0E".freeze, - "\u1F09\u0342"=>"\u1F0F".freeze, "\u03B5\u0313"=>"\u1F10".freeze, "\u03B5\u0314"=>"\u1F11".freeze, "\u1F10\u0300"=>"\u1F12".freeze, "\u1F11\u0300"=>"\u1F13".freeze, "\u1F10\u0301"=>"\u1F14".freeze, "\u1F11\u0301"=>"\u1F15".freeze, "\u0395\u0313"=>"\u1F18".freeze, - "\u0395\u0314"=>"\u1F19".freeze, "\u1F18\u0300"=>"\u1F1A".freeze, "\u1F19\u0300"=>"\u1F1B".freeze, "\u1F18\u0301"=>"\u1F1C".freeze, "\u1F19\u0301"=>"\u1F1D".freeze, "\u03B7\u0313"=>"\u1F20".freeze, "\u03B7\u0314"=>"\u1F21".freeze, "\u1F20\u0300"=>"\u1F22".freeze, - "\u1F21\u0300"=>"\u1F23".freeze, "\u1F20\u0301"=>"\u1F24".freeze, "\u1F21\u0301"=>"\u1F25".freeze, "\u1F20\u0342"=>"\u1F26".freeze, "\u1F21\u0342"=>"\u1F27".freeze, "\u0397\u0313"=>"\u1F28".freeze, "\u0397\u0314"=>"\u1F29".freeze, "\u1F28\u0300"=>"\u1F2A".freeze, - "\u1F29\u0300"=>"\u1F2B".freeze, "\u1F28\u0301"=>"\u1F2C".freeze, "\u1F29\u0301"=>"\u1F2D".freeze, "\u1F28\u0342"=>"\u1F2E".freeze, "\u1F29\u0342"=>"\u1F2F".freeze, "\u03B9\u0313"=>"\u1F30".freeze, "\u03B9\u0314"=>"\u1F31".freeze, "\u1F30\u0300"=>"\u1F32".freeze, - "\u1F31\u0300"=>"\u1F33".freeze, "\u1F30\u0301"=>"\u1F34".freeze, "\u1F31\u0301"=>"\u1F35".freeze, "\u1F30\u0342"=>"\u1F36".freeze, "\u1F31\u0342"=>"\u1F37".freeze, "\u0399\u0313"=>"\u1F38".freeze, "\u0399\u0314"=>"\u1F39".freeze, "\u1F38\u0300"=>"\u1F3A".freeze, - "\u1F39\u0300"=>"\u1F3B".freeze, "\u1F38\u0301"=>"\u1F3C".freeze, "\u1F39\u0301"=>"\u1F3D".freeze, "\u1F38\u0342"=>"\u1F3E".freeze, "\u1F39\u0342"=>"\u1F3F".freeze, "\u03BF\u0313"=>"\u1F40".freeze, "\u03BF\u0314"=>"\u1F41".freeze, "\u1F40\u0300"=>"\u1F42".freeze, - "\u1F41\u0300"=>"\u1F43".freeze, "\u1F40\u0301"=>"\u1F44".freeze, "\u1F41\u0301"=>"\u1F45".freeze, "\u039F\u0313"=>"\u1F48".freeze, "\u039F\u0314"=>"\u1F49".freeze, "\u1F48\u0300"=>"\u1F4A".freeze, "\u1F49\u0300"=>"\u1F4B".freeze, "\u1F48\u0301"=>"\u1F4C".freeze, - "\u1F49\u0301"=>"\u1F4D".freeze, "\u03C5\u0313"=>"\u1F50".freeze, "\u03C5\u0314"=>"\u1F51".freeze, "\u1F50\u0300"=>"\u1F52".freeze, "\u1F51\u0300"=>"\u1F53".freeze, "\u1F50\u0301"=>"\u1F54".freeze, "\u1F51\u0301"=>"\u1F55".freeze, "\u1F50\u0342"=>"\u1F56".freeze, - "\u1F51\u0342"=>"\u1F57".freeze, "\u03A5\u0314"=>"\u1F59".freeze, "\u1F59\u0300"=>"\u1F5B".freeze, "\u1F59\u0301"=>"\u1F5D".freeze, "\u1F59\u0342"=>"\u1F5F".freeze, "\u03C9\u0313"=>"\u1F60".freeze, "\u03C9\u0314"=>"\u1F61".freeze, "\u1F60\u0300"=>"\u1F62".freeze, - "\u1F61\u0300"=>"\u1F63".freeze, "\u1F60\u0301"=>"\u1F64".freeze, "\u1F61\u0301"=>"\u1F65".freeze, "\u1F60\u0342"=>"\u1F66".freeze, "\u1F61\u0342"=>"\u1F67".freeze, "\u03A9\u0313"=>"\u1F68".freeze, "\u03A9\u0314"=>"\u1F69".freeze, "\u1F68\u0300"=>"\u1F6A".freeze, - "\u1F69\u0300"=>"\u1F6B".freeze, "\u1F68\u0301"=>"\u1F6C".freeze, "\u1F69\u0301"=>"\u1F6D".freeze, "\u1F68\u0342"=>"\u1F6E".freeze, "\u1F69\u0342"=>"\u1F6F".freeze, "\u03B1\u0300"=>"\u1F70".freeze, "\u03B5\u0300"=>"\u1F72".freeze, "\u03B7\u0300"=>"\u1F74".freeze, - "\u03B9\u0300"=>"\u1F76".freeze, "\u03BF\u0300"=>"\u1F78".freeze, "\u03C5\u0300"=>"\u1F7A".freeze, "\u03C9\u0300"=>"\u1F7C".freeze, "\u1F00\u0345"=>"\u1F80".freeze, "\u1F01\u0345"=>"\u1F81".freeze, "\u1F02\u0345"=>"\u1F82".freeze, "\u1F03\u0345"=>"\u1F83".freeze, - "\u1F04\u0345"=>"\u1F84".freeze, "\u1F05\u0345"=>"\u1F85".freeze, "\u1F06\u0345"=>"\u1F86".freeze, "\u1F07\u0345"=>"\u1F87".freeze, "\u1F08\u0345"=>"\u1F88".freeze, "\u1F09\u0345"=>"\u1F89".freeze, "\u1F0A\u0345"=>"\u1F8A".freeze, "\u1F0B\u0345"=>"\u1F8B".freeze, - "\u1F0C\u0345"=>"\u1F8C".freeze, "\u1F0D\u0345"=>"\u1F8D".freeze, "\u1F0E\u0345"=>"\u1F8E".freeze, "\u1F0F\u0345"=>"\u1F8F".freeze, "\u1F20\u0345"=>"\u1F90".freeze, "\u1F21\u0345"=>"\u1F91".freeze, "\u1F22\u0345"=>"\u1F92".freeze, "\u1F23\u0345"=>"\u1F93".freeze, - "\u1F24\u0345"=>"\u1F94".freeze, "\u1F25\u0345"=>"\u1F95".freeze, "\u1F26\u0345"=>"\u1F96".freeze, "\u1F27\u0345"=>"\u1F97".freeze, "\u1F28\u0345"=>"\u1F98".freeze, "\u1F29\u0345"=>"\u1F99".freeze, "\u1F2A\u0345"=>"\u1F9A".freeze, "\u1F2B\u0345"=>"\u1F9B".freeze, - "\u1F2C\u0345"=>"\u1F9C".freeze, "\u1F2D\u0345"=>"\u1F9D".freeze, "\u1F2E\u0345"=>"\u1F9E".freeze, "\u1F2F\u0345"=>"\u1F9F".freeze, "\u1F60\u0345"=>"\u1FA0".freeze, "\u1F61\u0345"=>"\u1FA1".freeze, "\u1F62\u0345"=>"\u1FA2".freeze, "\u1F63\u0345"=>"\u1FA3".freeze, - "\u1F64\u0345"=>"\u1FA4".freeze, "\u1F65\u0345"=>"\u1FA5".freeze, "\u1F66\u0345"=>"\u1FA6".freeze, "\u1F67\u0345"=>"\u1FA7".freeze, "\u1F68\u0345"=>"\u1FA8".freeze, "\u1F69\u0345"=>"\u1FA9".freeze, "\u1F6A\u0345"=>"\u1FAA".freeze, "\u1F6B\u0345"=>"\u1FAB".freeze, - "\u1F6C\u0345"=>"\u1FAC".freeze, "\u1F6D\u0345"=>"\u1FAD".freeze, "\u1F6E\u0345"=>"\u1FAE".freeze, "\u1F6F\u0345"=>"\u1FAF".freeze, "\u03B1\u0306"=>"\u1FB0".freeze, "\u03B1\u0304"=>"\u1FB1".freeze, "\u1F70\u0345"=>"\u1FB2".freeze, "\u03B1\u0345"=>"\u1FB3".freeze, - "\u03AC\u0345"=>"\u1FB4".freeze, "\u03B1\u0342"=>"\u1FB6".freeze, "\u1FB6\u0345"=>"\u1FB7".freeze, "\u0391\u0306"=>"\u1FB8".freeze, "\u0391\u0304"=>"\u1FB9".freeze, "\u0391\u0300"=>"\u1FBA".freeze, "\u0391\u0345"=>"\u1FBC".freeze, "\u00A8\u0342"=>"\u1FC1".freeze, - "\u1F74\u0345"=>"\u1FC2".freeze, "\u03B7\u0345"=>"\u1FC3".freeze, "\u03AE\u0345"=>"\u1FC4".freeze, "\u03B7\u0342"=>"\u1FC6".freeze, "\u1FC6\u0345"=>"\u1FC7".freeze, "\u0395\u0300"=>"\u1FC8".freeze, "\u0397\u0300"=>"\u1FCA".freeze, "\u0397\u0345"=>"\u1FCC".freeze, - "\u1FBF\u0300"=>"\u1FCD".freeze, "\u1FBF\u0301"=>"\u1FCE".freeze, "\u1FBF\u0342"=>"\u1FCF".freeze, "\u03B9\u0306"=>"\u1FD0".freeze, "\u03B9\u0304"=>"\u1FD1".freeze, "\u03CA\u0300"=>"\u1FD2".freeze, "\u03B9\u0342"=>"\u1FD6".freeze, "\u03CA\u0342"=>"\u1FD7".freeze, - "\u0399\u0306"=>"\u1FD8".freeze, "\u0399\u0304"=>"\u1FD9".freeze, "\u0399\u0300"=>"\u1FDA".freeze, "\u1FFE\u0300"=>"\u1FDD".freeze, "\u1FFE\u0301"=>"\u1FDE".freeze, "\u1FFE\u0342"=>"\u1FDF".freeze, "\u03C5\u0306"=>"\u1FE0".freeze, "\u03C5\u0304"=>"\u1FE1".freeze, - "\u03CB\u0300"=>"\u1FE2".freeze, "\u03C1\u0313"=>"\u1FE4".freeze, "\u03C1\u0314"=>"\u1FE5".freeze, "\u03C5\u0342"=>"\u1FE6".freeze, "\u03CB\u0342"=>"\u1FE7".freeze, "\u03A5\u0306"=>"\u1FE8".freeze, "\u03A5\u0304"=>"\u1FE9".freeze, "\u03A5\u0300"=>"\u1FEA".freeze, - "\u03A1\u0314"=>"\u1FEC".freeze, "\u00A8\u0300"=>"\u1FED".freeze, "\u1F7C\u0345"=>"\u1FF2".freeze, "\u03C9\u0345"=>"\u1FF3".freeze, "\u03CE\u0345"=>"\u1FF4".freeze, "\u03C9\u0342"=>"\u1FF6".freeze, "\u1FF6\u0345"=>"\u1FF7".freeze, "\u039F\u0300"=>"\u1FF8".freeze, - "\u03A9\u0300"=>"\u1FFA".freeze, "\u03A9\u0345"=>"\u1FFC".freeze, "\u2190\u0338"=>"\u219A".freeze, "\u2192\u0338"=>"\u219B".freeze, "\u2194\u0338"=>"\u21AE".freeze, "\u21D0\u0338"=>"\u21CD".freeze, "\u21D4\u0338"=>"\u21CE".freeze, "\u21D2\u0338"=>"\u21CF".freeze, - "\u2203\u0338"=>"\u2204".freeze, "\u2208\u0338"=>"\u2209".freeze, "\u220B\u0338"=>"\u220C".freeze, "\u2223\u0338"=>"\u2224".freeze, "\u2225\u0338"=>"\u2226".freeze, "\u223C\u0338"=>"\u2241".freeze, "\u2243\u0338"=>"\u2244".freeze, "\u2245\u0338"=>"\u2247".freeze, - "\u2248\u0338"=>"\u2249".freeze, "=\u0338"=>"\u2260".freeze, "\u2261\u0338"=>"\u2262".freeze, "\u224D\u0338"=>"\u226D".freeze, "<\u0338"=>"\u226E".freeze, ">\u0338"=>"\u226F".freeze, "\u2264\u0338"=>"\u2270".freeze, "\u2265\u0338"=>"\u2271".freeze, - "\u2272\u0338"=>"\u2274".freeze, "\u2273\u0338"=>"\u2275".freeze, "\u2276\u0338"=>"\u2278".freeze, "\u2277\u0338"=>"\u2279".freeze, "\u227A\u0338"=>"\u2280".freeze, "\u227B\u0338"=>"\u2281".freeze, "\u2282\u0338"=>"\u2284".freeze, "\u2283\u0338"=>"\u2285".freeze, - "\u2286\u0338"=>"\u2288".freeze, "\u2287\u0338"=>"\u2289".freeze, "\u22A2\u0338"=>"\u22AC".freeze, "\u22A8\u0338"=>"\u22AD".freeze, "\u22A9\u0338"=>"\u22AE".freeze, "\u22AB\u0338"=>"\u22AF".freeze, "\u227C\u0338"=>"\u22E0".freeze, "\u227D\u0338"=>"\u22E1".freeze, - "\u2291\u0338"=>"\u22E2".freeze, "\u2292\u0338"=>"\u22E3".freeze, "\u22B2\u0338"=>"\u22EA".freeze, "\u22B3\u0338"=>"\u22EB".freeze, "\u22B4\u0338"=>"\u22EC".freeze, "\u22B5\u0338"=>"\u22ED".freeze, "\u304B\u3099"=>"\u304C".freeze, "\u304D\u3099"=>"\u304E".freeze, - "\u304F\u3099"=>"\u3050".freeze, "\u3051\u3099"=>"\u3052".freeze, "\u3053\u3099"=>"\u3054".freeze, "\u3055\u3099"=>"\u3056".freeze, "\u3057\u3099"=>"\u3058".freeze, "\u3059\u3099"=>"\u305A".freeze, "\u305B\u3099"=>"\u305C".freeze, "\u305D\u3099"=>"\u305E".freeze, - "\u305F\u3099"=>"\u3060".freeze, "\u3061\u3099"=>"\u3062".freeze, "\u3064\u3099"=>"\u3065".freeze, "\u3066\u3099"=>"\u3067".freeze, "\u3068\u3099"=>"\u3069".freeze, "\u306F\u3099"=>"\u3070".freeze, "\u306F\u309A"=>"\u3071".freeze, "\u3072\u3099"=>"\u3073".freeze, - "\u3072\u309A"=>"\u3074".freeze, "\u3075\u3099"=>"\u3076".freeze, "\u3075\u309A"=>"\u3077".freeze, "\u3078\u3099"=>"\u3079".freeze, "\u3078\u309A"=>"\u307A".freeze, "\u307B\u3099"=>"\u307C".freeze, "\u307B\u309A"=>"\u307D".freeze, "\u3046\u3099"=>"\u3094".freeze, - "\u309D\u3099"=>"\u309E".freeze, "\u30AB\u3099"=>"\u30AC".freeze, "\u30AD\u3099"=>"\u30AE".freeze, "\u30AF\u3099"=>"\u30B0".freeze, "\u30B1\u3099"=>"\u30B2".freeze, "\u30B3\u3099"=>"\u30B4".freeze, "\u30B5\u3099"=>"\u30B6".freeze, "\u30B7\u3099"=>"\u30B8".freeze, - "\u30B9\u3099"=>"\u30BA".freeze, "\u30BB\u3099"=>"\u30BC".freeze, "\u30BD\u3099"=>"\u30BE".freeze, "\u30BF\u3099"=>"\u30C0".freeze, "\u30C1\u3099"=>"\u30C2".freeze, "\u30C4\u3099"=>"\u30C5".freeze, "\u30C6\u3099"=>"\u30C7".freeze, "\u30C8\u3099"=>"\u30C9".freeze, - "\u30CF\u3099"=>"\u30D0".freeze, "\u30CF\u309A"=>"\u30D1".freeze, "\u30D2\u3099"=>"\u30D3".freeze, "\u30D2\u309A"=>"\u30D4".freeze, "\u30D5\u3099"=>"\u30D6".freeze, "\u30D5\u309A"=>"\u30D7".freeze, "\u30D8\u3099"=>"\u30D9".freeze, "\u30D8\u309A"=>"\u30DA".freeze, - "\u30DB\u3099"=>"\u30DC".freeze, "\u30DB\u309A"=>"\u30DD".freeze, "\u30A6\u3099"=>"\u30F4".freeze, "\u30EF\u3099"=>"\u30F7".freeze, "\u30F0\u3099"=>"\u30F8".freeze, "\u30F1\u3099"=>"\u30F9".freeze, "\u30F2\u3099"=>"\u30FA".freeze, "\u30FD\u3099"=>"\u30FE".freeze, - "\u{11099}\u{110BA}"=>"\u{1109A}".freeze, "\u{1109B}\u{110BA}"=>"\u{1109C}".freeze, "\u{110A5}\u{110BA}"=>"\u{110AB}".freeze, "\u{11131}\u{11127}"=>"\u{1112E}".freeze, "\u{11132}\u{11127}"=>"\u{1112F}".freeze, "\u{11347}\u{1133E}"=>"\u{1134B}".freeze, "\u{11347}\u{11357}"=>"\u{1134C}".freeze, "\u{114B9}\u{114BA}"=>"\u{114BB}".freeze, - "\u{114B9}\u{114B0}"=>"\u{114BC}".freeze, "\u{114B9}\u{114BD}"=>"\u{114BE}".freeze, "\u{115B8}\u{115AF}"=>"\u{115BA}".freeze, "\u{115B9}\u{115AF}"=>"\u{115BB}".freeze, + "A\u0300"=>"\u00C0", "A\u0301"=>"\u00C1", "A\u0302"=>"\u00C2", "A\u0303"=>"\u00C3", "A\u0308"=>"\u00C4", "A\u030A"=>"\u00C5", "C\u0327"=>"\u00C7", "E\u0300"=>"\u00C8", + "E\u0301"=>"\u00C9", "E\u0302"=>"\u00CA", "E\u0308"=>"\u00CB", "I\u0300"=>"\u00CC", "I\u0301"=>"\u00CD", "I\u0302"=>"\u00CE", "I\u0308"=>"\u00CF", "N\u0303"=>"\u00D1", + "O\u0300"=>"\u00D2", "O\u0301"=>"\u00D3", "O\u0302"=>"\u00D4", "O\u0303"=>"\u00D5", "O\u0308"=>"\u00D6", "U\u0300"=>"\u00D9", "U\u0301"=>"\u00DA", "U\u0302"=>"\u00DB", + "U\u0308"=>"\u00DC", "Y\u0301"=>"\u00DD", "a\u0300"=>"\u00E0", "a\u0301"=>"\u00E1", "a\u0302"=>"\u00E2", "a\u0303"=>"\u00E3", "a\u0308"=>"\u00E4", "a\u030A"=>"\u00E5", + "c\u0327"=>"\u00E7", "e\u0300"=>"\u00E8", "e\u0301"=>"\u00E9", "e\u0302"=>"\u00EA", "e\u0308"=>"\u00EB", "i\u0300"=>"\u00EC", "i\u0301"=>"\u00ED", "i\u0302"=>"\u00EE", + "i\u0308"=>"\u00EF", "n\u0303"=>"\u00F1", "o\u0300"=>"\u00F2", "o\u0301"=>"\u00F3", "o\u0302"=>"\u00F4", "o\u0303"=>"\u00F5", "o\u0308"=>"\u00F6", "u\u0300"=>"\u00F9", + "u\u0301"=>"\u00FA", "u\u0302"=>"\u00FB", "u\u0308"=>"\u00FC", "y\u0301"=>"\u00FD", "y\u0308"=>"\u00FF", "A\u0304"=>"\u0100", "a\u0304"=>"\u0101", "A\u0306"=>"\u0102", + "a\u0306"=>"\u0103", "A\u0328"=>"\u0104", "a\u0328"=>"\u0105", "C\u0301"=>"\u0106", "c\u0301"=>"\u0107", "C\u0302"=>"\u0108", "c\u0302"=>"\u0109", "C\u0307"=>"\u010A", + "c\u0307"=>"\u010B", "C\u030C"=>"\u010C", "c\u030C"=>"\u010D", "D\u030C"=>"\u010E", "d\u030C"=>"\u010F", "E\u0304"=>"\u0112", "e\u0304"=>"\u0113", "E\u0306"=>"\u0114", + "e\u0306"=>"\u0115", "E\u0307"=>"\u0116", "e\u0307"=>"\u0117", "E\u0328"=>"\u0118", "e\u0328"=>"\u0119", "E\u030C"=>"\u011A", "e\u030C"=>"\u011B", "G\u0302"=>"\u011C", + "g\u0302"=>"\u011D", "G\u0306"=>"\u011E", "g\u0306"=>"\u011F", "G\u0307"=>"\u0120", "g\u0307"=>"\u0121", "G\u0327"=>"\u0122", "g\u0327"=>"\u0123", "H\u0302"=>"\u0124", + "h\u0302"=>"\u0125", "I\u0303"=>"\u0128", "i\u0303"=>"\u0129", "I\u0304"=>"\u012A", "i\u0304"=>"\u012B", "I\u0306"=>"\u012C", "i\u0306"=>"\u012D", "I\u0328"=>"\u012E", + "i\u0328"=>"\u012F", "I\u0307"=>"\u0130", "J\u0302"=>"\u0134", "j\u0302"=>"\u0135", "K\u0327"=>"\u0136", "k\u0327"=>"\u0137", "L\u0301"=>"\u0139", "l\u0301"=>"\u013A", + "L\u0327"=>"\u013B", "l\u0327"=>"\u013C", "L\u030C"=>"\u013D", "l\u030C"=>"\u013E", "N\u0301"=>"\u0143", "n\u0301"=>"\u0144", "N\u0327"=>"\u0145", "n\u0327"=>"\u0146", + "N\u030C"=>"\u0147", "n\u030C"=>"\u0148", "O\u0304"=>"\u014C", "o\u0304"=>"\u014D", "O\u0306"=>"\u014E", "o\u0306"=>"\u014F", "O\u030B"=>"\u0150", "o\u030B"=>"\u0151", + "R\u0301"=>"\u0154", "r\u0301"=>"\u0155", "R\u0327"=>"\u0156", "r\u0327"=>"\u0157", "R\u030C"=>"\u0158", "r\u030C"=>"\u0159", "S\u0301"=>"\u015A", "s\u0301"=>"\u015B", + "S\u0302"=>"\u015C", "s\u0302"=>"\u015D", "S\u0327"=>"\u015E", "s\u0327"=>"\u015F", "S\u030C"=>"\u0160", "s\u030C"=>"\u0161", "T\u0327"=>"\u0162", "t\u0327"=>"\u0163", + "T\u030C"=>"\u0164", "t\u030C"=>"\u0165", "U\u0303"=>"\u0168", "u\u0303"=>"\u0169", "U\u0304"=>"\u016A", "u\u0304"=>"\u016B", "U\u0306"=>"\u016C", "u\u0306"=>"\u016D", + "U\u030A"=>"\u016E", "u\u030A"=>"\u016F", "U\u030B"=>"\u0170", "u\u030B"=>"\u0171", "U\u0328"=>"\u0172", "u\u0328"=>"\u0173", "W\u0302"=>"\u0174", "w\u0302"=>"\u0175", + "Y\u0302"=>"\u0176", "y\u0302"=>"\u0177", "Y\u0308"=>"\u0178", "Z\u0301"=>"\u0179", "z\u0301"=>"\u017A", "Z\u0307"=>"\u017B", "z\u0307"=>"\u017C", "Z\u030C"=>"\u017D", + "z\u030C"=>"\u017E", "O\u031B"=>"\u01A0", "o\u031B"=>"\u01A1", "U\u031B"=>"\u01AF", "u\u031B"=>"\u01B0", "A\u030C"=>"\u01CD", "a\u030C"=>"\u01CE", "I\u030C"=>"\u01CF", + "i\u030C"=>"\u01D0", "O\u030C"=>"\u01D1", "o\u030C"=>"\u01D2", "U\u030C"=>"\u01D3", "u\u030C"=>"\u01D4", "\u00DC\u0304"=>"\u01D5", "\u00FC\u0304"=>"\u01D6", "\u00DC\u0301"=>"\u01D7", + "\u00FC\u0301"=>"\u01D8", "\u00DC\u030C"=>"\u01D9", "\u00FC\u030C"=>"\u01DA", "\u00DC\u0300"=>"\u01DB", "\u00FC\u0300"=>"\u01DC", "\u00C4\u0304"=>"\u01DE", "\u00E4\u0304"=>"\u01DF", "\u0226\u0304"=>"\u01E0", + "\u0227\u0304"=>"\u01E1", "\u00C6\u0304"=>"\u01E2", "\u00E6\u0304"=>"\u01E3", "G\u030C"=>"\u01E6", "g\u030C"=>"\u01E7", "K\u030C"=>"\u01E8", "k\u030C"=>"\u01E9", "O\u0328"=>"\u01EA", + "o\u0328"=>"\u01EB", "\u01EA\u0304"=>"\u01EC", "\u01EB\u0304"=>"\u01ED", "\u01B7\u030C"=>"\u01EE", "\u0292\u030C"=>"\u01EF", "j\u030C"=>"\u01F0", "G\u0301"=>"\u01F4", "g\u0301"=>"\u01F5", + "N\u0300"=>"\u01F8", "n\u0300"=>"\u01F9", "\u00C5\u0301"=>"\u01FA", "\u00E5\u0301"=>"\u01FB", "\u00C6\u0301"=>"\u01FC", "\u00E6\u0301"=>"\u01FD", "\u00D8\u0301"=>"\u01FE", "\u00F8\u0301"=>"\u01FF", + "A\u030F"=>"\u0200", "a\u030F"=>"\u0201", "A\u0311"=>"\u0202", "a\u0311"=>"\u0203", "E\u030F"=>"\u0204", "e\u030F"=>"\u0205", "E\u0311"=>"\u0206", "e\u0311"=>"\u0207", + "I\u030F"=>"\u0208", "i\u030F"=>"\u0209", "I\u0311"=>"\u020A", "i\u0311"=>"\u020B", "O\u030F"=>"\u020C", "o\u030F"=>"\u020D", "O\u0311"=>"\u020E", "o\u0311"=>"\u020F", + "R\u030F"=>"\u0210", "r\u030F"=>"\u0211", "R\u0311"=>"\u0212", "r\u0311"=>"\u0213", "U\u030F"=>"\u0214", "u\u030F"=>"\u0215", "U\u0311"=>"\u0216", "u\u0311"=>"\u0217", + "S\u0326"=>"\u0218", "s\u0326"=>"\u0219", "T\u0326"=>"\u021A", "t\u0326"=>"\u021B", "H\u030C"=>"\u021E", "h\u030C"=>"\u021F", "A\u0307"=>"\u0226", "a\u0307"=>"\u0227", + "E\u0327"=>"\u0228", "e\u0327"=>"\u0229", "\u00D6\u0304"=>"\u022A", "\u00F6\u0304"=>"\u022B", "\u00D5\u0304"=>"\u022C", "\u00F5\u0304"=>"\u022D", "O\u0307"=>"\u022E", "o\u0307"=>"\u022F", + "\u022E\u0304"=>"\u0230", "\u022F\u0304"=>"\u0231", "Y\u0304"=>"\u0232", "y\u0304"=>"\u0233", "\u00A8\u0301"=>"\u0385", "\u0391\u0301"=>"\u0386", "\u0395\u0301"=>"\u0388", "\u0397\u0301"=>"\u0389", + "\u0399\u0301"=>"\u038A", "\u039F\u0301"=>"\u038C", "\u03A5\u0301"=>"\u038E", "\u03A9\u0301"=>"\u038F", "\u03CA\u0301"=>"\u0390", "\u0399\u0308"=>"\u03AA", "\u03A5\u0308"=>"\u03AB", "\u03B1\u0301"=>"\u03AC", + "\u03B5\u0301"=>"\u03AD", "\u03B7\u0301"=>"\u03AE", "\u03B9\u0301"=>"\u03AF", "\u03CB\u0301"=>"\u03B0", "\u03B9\u0308"=>"\u03CA", "\u03C5\u0308"=>"\u03CB", "\u03BF\u0301"=>"\u03CC", "\u03C5\u0301"=>"\u03CD", + "\u03C9\u0301"=>"\u03CE", "\u03D2\u0301"=>"\u03D3", "\u03D2\u0308"=>"\u03D4", "\u0415\u0300"=>"\u0400", "\u0415\u0308"=>"\u0401", "\u0413\u0301"=>"\u0403", "\u0406\u0308"=>"\u0407", "\u041A\u0301"=>"\u040C", + "\u0418\u0300"=>"\u040D", "\u0423\u0306"=>"\u040E", "\u0418\u0306"=>"\u0419", "\u0438\u0306"=>"\u0439", "\u0435\u0300"=>"\u0450", "\u0435\u0308"=>"\u0451", "\u0433\u0301"=>"\u0453", "\u0456\u0308"=>"\u0457", + "\u043A\u0301"=>"\u045C", "\u0438\u0300"=>"\u045D", "\u0443\u0306"=>"\u045E", "\u0474\u030F"=>"\u0476", "\u0475\u030F"=>"\u0477", "\u0416\u0306"=>"\u04C1", "\u0436\u0306"=>"\u04C2", "\u0410\u0306"=>"\u04D0", + "\u0430\u0306"=>"\u04D1", "\u0410\u0308"=>"\u04D2", "\u0430\u0308"=>"\u04D3", "\u0415\u0306"=>"\u04D6", "\u0435\u0306"=>"\u04D7", "\u04D8\u0308"=>"\u04DA", "\u04D9\u0308"=>"\u04DB", "\u0416\u0308"=>"\u04DC", + "\u0436\u0308"=>"\u04DD", "\u0417\u0308"=>"\u04DE", "\u0437\u0308"=>"\u04DF", "\u0418\u0304"=>"\u04E2", "\u0438\u0304"=>"\u04E3", "\u0418\u0308"=>"\u04E4", "\u0438\u0308"=>"\u04E5", "\u041E\u0308"=>"\u04E6", + "\u043E\u0308"=>"\u04E7", "\u04E8\u0308"=>"\u04EA", "\u04E9\u0308"=>"\u04EB", "\u042D\u0308"=>"\u04EC", "\u044D\u0308"=>"\u04ED", "\u0423\u0304"=>"\u04EE", "\u0443\u0304"=>"\u04EF", "\u0423\u0308"=>"\u04F0", + "\u0443\u0308"=>"\u04F1", "\u0423\u030B"=>"\u04F2", "\u0443\u030B"=>"\u04F3", "\u0427\u0308"=>"\u04F4", "\u0447\u0308"=>"\u04F5", "\u042B\u0308"=>"\u04F8", "\u044B\u0308"=>"\u04F9", "\u0627\u0653"=>"\u0622", + "\u0627\u0654"=>"\u0623", "\u0648\u0654"=>"\u0624", "\u0627\u0655"=>"\u0625", "\u064A\u0654"=>"\u0626", "\u06D5\u0654"=>"\u06C0", "\u06C1\u0654"=>"\u06C2", "\u06D2\u0654"=>"\u06D3", "\u0928\u093C"=>"\u0929", + "\u0930\u093C"=>"\u0931", "\u0933\u093C"=>"\u0934", "\u09C7\u09BE"=>"\u09CB", "\u09C7\u09D7"=>"\u09CC", "\u0B47\u0B56"=>"\u0B48", "\u0B47\u0B3E"=>"\u0B4B", "\u0B47\u0B57"=>"\u0B4C", "\u0B92\u0BD7"=>"\u0B94", + "\u0BC6\u0BBE"=>"\u0BCA", "\u0BC7\u0BBE"=>"\u0BCB", "\u0BC6\u0BD7"=>"\u0BCC", "\u0C46\u0C56"=>"\u0C48", "\u0CBF\u0CD5"=>"\u0CC0", "\u0CC6\u0CD5"=>"\u0CC7", "\u0CC6\u0CD6"=>"\u0CC8", "\u0CC6\u0CC2"=>"\u0CCA", + "\u0CCA\u0CD5"=>"\u0CCB", "\u0D46\u0D3E"=>"\u0D4A", "\u0D47\u0D3E"=>"\u0D4B", "\u0D46\u0D57"=>"\u0D4C", "\u0DD9\u0DCA"=>"\u0DDA", "\u0DD9\u0DCF"=>"\u0DDC", "\u0DDC\u0DCA"=>"\u0DDD", "\u0DD9\u0DDF"=>"\u0DDE", + "\u1025\u102E"=>"\u1026", "\u1B05\u1B35"=>"\u1B06", "\u1B07\u1B35"=>"\u1B08", "\u1B09\u1B35"=>"\u1B0A", "\u1B0B\u1B35"=>"\u1B0C", "\u1B0D\u1B35"=>"\u1B0E", "\u1B11\u1B35"=>"\u1B12", "\u1B3A\u1B35"=>"\u1B3B", + "\u1B3C\u1B35"=>"\u1B3D", "\u1B3E\u1B35"=>"\u1B40", "\u1B3F\u1B35"=>"\u1B41", "\u1B42\u1B35"=>"\u1B43", "A\u0325"=>"\u1E00", "a\u0325"=>"\u1E01", "B\u0307"=>"\u1E02", "b\u0307"=>"\u1E03", + "B\u0323"=>"\u1E04", "b\u0323"=>"\u1E05", "B\u0331"=>"\u1E06", "b\u0331"=>"\u1E07", "\u00C7\u0301"=>"\u1E08", "\u00E7\u0301"=>"\u1E09", "D\u0307"=>"\u1E0A", "d\u0307"=>"\u1E0B", + "D\u0323"=>"\u1E0C", "d\u0323"=>"\u1E0D", "D\u0331"=>"\u1E0E", "d\u0331"=>"\u1E0F", "D\u0327"=>"\u1E10", "d\u0327"=>"\u1E11", "D\u032D"=>"\u1E12", "d\u032D"=>"\u1E13", + "\u0112\u0300"=>"\u1E14", "\u0113\u0300"=>"\u1E15", "\u0112\u0301"=>"\u1E16", "\u0113\u0301"=>"\u1E17", "E\u032D"=>"\u1E18", "e\u032D"=>"\u1E19", "E\u0330"=>"\u1E1A", "e\u0330"=>"\u1E1B", + "\u0228\u0306"=>"\u1E1C", "\u0229\u0306"=>"\u1E1D", "F\u0307"=>"\u1E1E", "f\u0307"=>"\u1E1F", "G\u0304"=>"\u1E20", "g\u0304"=>"\u1E21", "H\u0307"=>"\u1E22", "h\u0307"=>"\u1E23", + "H\u0323"=>"\u1E24", "h\u0323"=>"\u1E25", "H\u0308"=>"\u1E26", "h\u0308"=>"\u1E27", "H\u0327"=>"\u1E28", "h\u0327"=>"\u1E29", "H\u032E"=>"\u1E2A", "h\u032E"=>"\u1E2B", + "I\u0330"=>"\u1E2C", "i\u0330"=>"\u1E2D", "\u00CF\u0301"=>"\u1E2E", "\u00EF\u0301"=>"\u1E2F", "K\u0301"=>"\u1E30", "k\u0301"=>"\u1E31", "K\u0323"=>"\u1E32", "k\u0323"=>"\u1E33", + "K\u0331"=>"\u1E34", "k\u0331"=>"\u1E35", "L\u0323"=>"\u1E36", "l\u0323"=>"\u1E37", "\u1E36\u0304"=>"\u1E38", "\u1E37\u0304"=>"\u1E39", "L\u0331"=>"\u1E3A", "l\u0331"=>"\u1E3B", + "L\u032D"=>"\u1E3C", "l\u032D"=>"\u1E3D", "M\u0301"=>"\u1E3E", "m\u0301"=>"\u1E3F", "M\u0307"=>"\u1E40", "m\u0307"=>"\u1E41", "M\u0323"=>"\u1E42", "m\u0323"=>"\u1E43", + "N\u0307"=>"\u1E44", "n\u0307"=>"\u1E45", "N\u0323"=>"\u1E46", "n\u0323"=>"\u1E47", "N\u0331"=>"\u1E48", "n\u0331"=>"\u1E49", "N\u032D"=>"\u1E4A", "n\u032D"=>"\u1E4B", + "\u00D5\u0301"=>"\u1E4C", "\u00F5\u0301"=>"\u1E4D", "\u00D5\u0308"=>"\u1E4E", "\u00F5\u0308"=>"\u1E4F", "\u014C\u0300"=>"\u1E50", "\u014D\u0300"=>"\u1E51", "\u014C\u0301"=>"\u1E52", "\u014D\u0301"=>"\u1E53", + "P\u0301"=>"\u1E54", "p\u0301"=>"\u1E55", "P\u0307"=>"\u1E56", "p\u0307"=>"\u1E57", "R\u0307"=>"\u1E58", "r\u0307"=>"\u1E59", "R\u0323"=>"\u1E5A", "r\u0323"=>"\u1E5B", + "\u1E5A\u0304"=>"\u1E5C", "\u1E5B\u0304"=>"\u1E5D", "R\u0331"=>"\u1E5E", "r\u0331"=>"\u1E5F", "S\u0307"=>"\u1E60", "s\u0307"=>"\u1E61", "S\u0323"=>"\u1E62", "s\u0323"=>"\u1E63", + "\u015A\u0307"=>"\u1E64", "\u015B\u0307"=>"\u1E65", "\u0160\u0307"=>"\u1E66", "\u0161\u0307"=>"\u1E67", "\u1E62\u0307"=>"\u1E68", "\u1E63\u0307"=>"\u1E69", "T\u0307"=>"\u1E6A", "t\u0307"=>"\u1E6B", + "T\u0323"=>"\u1E6C", "t\u0323"=>"\u1E6D", "T\u0331"=>"\u1E6E", "t\u0331"=>"\u1E6F", "T\u032D"=>"\u1E70", "t\u032D"=>"\u1E71", "U\u0324"=>"\u1E72", "u\u0324"=>"\u1E73", + "U\u0330"=>"\u1E74", "u\u0330"=>"\u1E75", "U\u032D"=>"\u1E76", "u\u032D"=>"\u1E77", "\u0168\u0301"=>"\u1E78", "\u0169\u0301"=>"\u1E79", "\u016A\u0308"=>"\u1E7A", "\u016B\u0308"=>"\u1E7B", + "V\u0303"=>"\u1E7C", "v\u0303"=>"\u1E7D", "V\u0323"=>"\u1E7E", "v\u0323"=>"\u1E7F", "W\u0300"=>"\u1E80", "w\u0300"=>"\u1E81", "W\u0301"=>"\u1E82", "w\u0301"=>"\u1E83", + "W\u0308"=>"\u1E84", "w\u0308"=>"\u1E85", "W\u0307"=>"\u1E86", "w\u0307"=>"\u1E87", "W\u0323"=>"\u1E88", "w\u0323"=>"\u1E89", "X\u0307"=>"\u1E8A", "x\u0307"=>"\u1E8B", + "X\u0308"=>"\u1E8C", "x\u0308"=>"\u1E8D", "Y\u0307"=>"\u1E8E", "y\u0307"=>"\u1E8F", "Z\u0302"=>"\u1E90", "z\u0302"=>"\u1E91", "Z\u0323"=>"\u1E92", "z\u0323"=>"\u1E93", + "Z\u0331"=>"\u1E94", "z\u0331"=>"\u1E95", "h\u0331"=>"\u1E96", "t\u0308"=>"\u1E97", "w\u030A"=>"\u1E98", "y\u030A"=>"\u1E99", "\u017F\u0307"=>"\u1E9B", "A\u0323"=>"\u1EA0", + "a\u0323"=>"\u1EA1", "A\u0309"=>"\u1EA2", "a\u0309"=>"\u1EA3", "\u00C2\u0301"=>"\u1EA4", "\u00E2\u0301"=>"\u1EA5", "\u00C2\u0300"=>"\u1EA6", "\u00E2\u0300"=>"\u1EA7", "\u00C2\u0309"=>"\u1EA8", + "\u00E2\u0309"=>"\u1EA9", "\u00C2\u0303"=>"\u1EAA", "\u00E2\u0303"=>"\u1EAB", "\u1EA0\u0302"=>"\u1EAC", "\u1EA1\u0302"=>"\u1EAD", "\u0102\u0301"=>"\u1EAE", "\u0103\u0301"=>"\u1EAF", "\u0102\u0300"=>"\u1EB0", + "\u0103\u0300"=>"\u1EB1", "\u0102\u0309"=>"\u1EB2", "\u0103\u0309"=>"\u1EB3", "\u0102\u0303"=>"\u1EB4", "\u0103\u0303"=>"\u1EB5", "\u1EA0\u0306"=>"\u1EB6", "\u1EA1\u0306"=>"\u1EB7", "E\u0323"=>"\u1EB8", + "e\u0323"=>"\u1EB9", "E\u0309"=>"\u1EBA", "e\u0309"=>"\u1EBB", "E\u0303"=>"\u1EBC", "e\u0303"=>"\u1EBD", "\u00CA\u0301"=>"\u1EBE", "\u00EA\u0301"=>"\u1EBF", "\u00CA\u0300"=>"\u1EC0", + "\u00EA\u0300"=>"\u1EC1", "\u00CA\u0309"=>"\u1EC2", "\u00EA\u0309"=>"\u1EC3", "\u00CA\u0303"=>"\u1EC4", "\u00EA\u0303"=>"\u1EC5", "\u1EB8\u0302"=>"\u1EC6", "\u1EB9\u0302"=>"\u1EC7", "I\u0309"=>"\u1EC8", + "i\u0309"=>"\u1EC9", "I\u0323"=>"\u1ECA", "i\u0323"=>"\u1ECB", "O\u0323"=>"\u1ECC", "o\u0323"=>"\u1ECD", "O\u0309"=>"\u1ECE", "o\u0309"=>"\u1ECF", "\u00D4\u0301"=>"\u1ED0", + "\u00F4\u0301"=>"\u1ED1", "\u00D4\u0300"=>"\u1ED2", "\u00F4\u0300"=>"\u1ED3", "\u00D4\u0309"=>"\u1ED4", "\u00F4\u0309"=>"\u1ED5", "\u00D4\u0303"=>"\u1ED6", "\u00F4\u0303"=>"\u1ED7", "\u1ECC\u0302"=>"\u1ED8", + "\u1ECD\u0302"=>"\u1ED9", "\u01A0\u0301"=>"\u1EDA", "\u01A1\u0301"=>"\u1EDB", "\u01A0\u0300"=>"\u1EDC", "\u01A1\u0300"=>"\u1EDD", "\u01A0\u0309"=>"\u1EDE", "\u01A1\u0309"=>"\u1EDF", "\u01A0\u0303"=>"\u1EE0", + "\u01A1\u0303"=>"\u1EE1", "\u01A0\u0323"=>"\u1EE2", "\u01A1\u0323"=>"\u1EE3", "U\u0323"=>"\u1EE4", "u\u0323"=>"\u1EE5", "U\u0309"=>"\u1EE6", "u\u0309"=>"\u1EE7", "\u01AF\u0301"=>"\u1EE8", + "\u01B0\u0301"=>"\u1EE9", "\u01AF\u0300"=>"\u1EEA", "\u01B0\u0300"=>"\u1EEB", "\u01AF\u0309"=>"\u1EEC", "\u01B0\u0309"=>"\u1EED", "\u01AF\u0303"=>"\u1EEE", "\u01B0\u0303"=>"\u1EEF", "\u01AF\u0323"=>"\u1EF0", + "\u01B0\u0323"=>"\u1EF1", "Y\u0300"=>"\u1EF2", "y\u0300"=>"\u1EF3", "Y\u0323"=>"\u1EF4", "y\u0323"=>"\u1EF5", "Y\u0309"=>"\u1EF6", "y\u0309"=>"\u1EF7", "Y\u0303"=>"\u1EF8", + "y\u0303"=>"\u1EF9", "\u03B1\u0313"=>"\u1F00", "\u03B1\u0314"=>"\u1F01", "\u1F00\u0300"=>"\u1F02", "\u1F01\u0300"=>"\u1F03", "\u1F00\u0301"=>"\u1F04", "\u1F01\u0301"=>"\u1F05", "\u1F00\u0342"=>"\u1F06", + "\u1F01\u0342"=>"\u1F07", "\u0391\u0313"=>"\u1F08", "\u0391\u0314"=>"\u1F09", "\u1F08\u0300"=>"\u1F0A", "\u1F09\u0300"=>"\u1F0B", "\u1F08\u0301"=>"\u1F0C", "\u1F09\u0301"=>"\u1F0D", "\u1F08\u0342"=>"\u1F0E", + "\u1F09\u0342"=>"\u1F0F", "\u03B5\u0313"=>"\u1F10", "\u03B5\u0314"=>"\u1F11", "\u1F10\u0300"=>"\u1F12", "\u1F11\u0300"=>"\u1F13", "\u1F10\u0301"=>"\u1F14", "\u1F11\u0301"=>"\u1F15", "\u0395\u0313"=>"\u1F18", + "\u0395\u0314"=>"\u1F19", "\u1F18\u0300"=>"\u1F1A", "\u1F19\u0300"=>"\u1F1B", "\u1F18\u0301"=>"\u1F1C", "\u1F19\u0301"=>"\u1F1D", "\u03B7\u0313"=>"\u1F20", "\u03B7\u0314"=>"\u1F21", "\u1F20\u0300"=>"\u1F22", + "\u1F21\u0300"=>"\u1F23", "\u1F20\u0301"=>"\u1F24", "\u1F21\u0301"=>"\u1F25", "\u1F20\u0342"=>"\u1F26", "\u1F21\u0342"=>"\u1F27", "\u0397\u0313"=>"\u1F28", "\u0397\u0314"=>"\u1F29", "\u1F28\u0300"=>"\u1F2A", + "\u1F29\u0300"=>"\u1F2B", "\u1F28\u0301"=>"\u1F2C", "\u1F29\u0301"=>"\u1F2D", "\u1F28\u0342"=>"\u1F2E", "\u1F29\u0342"=>"\u1F2F", "\u03B9\u0313"=>"\u1F30", "\u03B9\u0314"=>"\u1F31", "\u1F30\u0300"=>"\u1F32", + "\u1F31\u0300"=>"\u1F33", "\u1F30\u0301"=>"\u1F34", "\u1F31\u0301"=>"\u1F35", "\u1F30\u0342"=>"\u1F36", "\u1F31\u0342"=>"\u1F37", "\u0399\u0313"=>"\u1F38", "\u0399\u0314"=>"\u1F39", "\u1F38\u0300"=>"\u1F3A", + "\u1F39\u0300"=>"\u1F3B", "\u1F38\u0301"=>"\u1F3C", "\u1F39\u0301"=>"\u1F3D", "\u1F38\u0342"=>"\u1F3E", "\u1F39\u0342"=>"\u1F3F", "\u03BF\u0313"=>"\u1F40", "\u03BF\u0314"=>"\u1F41", "\u1F40\u0300"=>"\u1F42", + "\u1F41\u0300"=>"\u1F43", "\u1F40\u0301"=>"\u1F44", "\u1F41\u0301"=>"\u1F45", "\u039F\u0313"=>"\u1F48", "\u039F\u0314"=>"\u1F49", "\u1F48\u0300"=>"\u1F4A", "\u1F49\u0300"=>"\u1F4B", "\u1F48\u0301"=>"\u1F4C", + "\u1F49\u0301"=>"\u1F4D", "\u03C5\u0313"=>"\u1F50", "\u03C5\u0314"=>"\u1F51", "\u1F50\u0300"=>"\u1F52", "\u1F51\u0300"=>"\u1F53", "\u1F50\u0301"=>"\u1F54", "\u1F51\u0301"=>"\u1F55", "\u1F50\u0342"=>"\u1F56", + "\u1F51\u0342"=>"\u1F57", "\u03A5\u0314"=>"\u1F59", "\u1F59\u0300"=>"\u1F5B", "\u1F59\u0301"=>"\u1F5D", "\u1F59\u0342"=>"\u1F5F", "\u03C9\u0313"=>"\u1F60", "\u03C9\u0314"=>"\u1F61", "\u1F60\u0300"=>"\u1F62", + "\u1F61\u0300"=>"\u1F63", "\u1F60\u0301"=>"\u1F64", "\u1F61\u0301"=>"\u1F65", "\u1F60\u0342"=>"\u1F66", "\u1F61\u0342"=>"\u1F67", "\u03A9\u0313"=>"\u1F68", "\u03A9\u0314"=>"\u1F69", "\u1F68\u0300"=>"\u1F6A", + "\u1F69\u0300"=>"\u1F6B", "\u1F68\u0301"=>"\u1F6C", "\u1F69\u0301"=>"\u1F6D", "\u1F68\u0342"=>"\u1F6E", "\u1F69\u0342"=>"\u1F6F", "\u03B1\u0300"=>"\u1F70", "\u03B5\u0300"=>"\u1F72", "\u03B7\u0300"=>"\u1F74", + "\u03B9\u0300"=>"\u1F76", "\u03BF\u0300"=>"\u1F78", "\u03C5\u0300"=>"\u1F7A", "\u03C9\u0300"=>"\u1F7C", "\u1F00\u0345"=>"\u1F80", "\u1F01\u0345"=>"\u1F81", "\u1F02\u0345"=>"\u1F82", "\u1F03\u0345"=>"\u1F83", + "\u1F04\u0345"=>"\u1F84", "\u1F05\u0345"=>"\u1F85", "\u1F06\u0345"=>"\u1F86", "\u1F07\u0345"=>"\u1F87", "\u1F08\u0345"=>"\u1F88", "\u1F09\u0345"=>"\u1F89", "\u1F0A\u0345"=>"\u1F8A", "\u1F0B\u0345"=>"\u1F8B", + "\u1F0C\u0345"=>"\u1F8C", "\u1F0D\u0345"=>"\u1F8D", "\u1F0E\u0345"=>"\u1F8E", "\u1F0F\u0345"=>"\u1F8F", "\u1F20\u0345"=>"\u1F90", "\u1F21\u0345"=>"\u1F91", "\u1F22\u0345"=>"\u1F92", "\u1F23\u0345"=>"\u1F93", + "\u1F24\u0345"=>"\u1F94", "\u1F25\u0345"=>"\u1F95", "\u1F26\u0345"=>"\u1F96", "\u1F27\u0345"=>"\u1F97", "\u1F28\u0345"=>"\u1F98", "\u1F29\u0345"=>"\u1F99", "\u1F2A\u0345"=>"\u1F9A", "\u1F2B\u0345"=>"\u1F9B", + "\u1F2C\u0345"=>"\u1F9C", "\u1F2D\u0345"=>"\u1F9D", "\u1F2E\u0345"=>"\u1F9E", "\u1F2F\u0345"=>"\u1F9F", "\u1F60\u0345"=>"\u1FA0", "\u1F61\u0345"=>"\u1FA1", "\u1F62\u0345"=>"\u1FA2", "\u1F63\u0345"=>"\u1FA3", + "\u1F64\u0345"=>"\u1FA4", "\u1F65\u0345"=>"\u1FA5", "\u1F66\u0345"=>"\u1FA6", "\u1F67\u0345"=>"\u1FA7", "\u1F68\u0345"=>"\u1FA8", "\u1F69\u0345"=>"\u1FA9", "\u1F6A\u0345"=>"\u1FAA", "\u1F6B\u0345"=>"\u1FAB", + "\u1F6C\u0345"=>"\u1FAC", "\u1F6D\u0345"=>"\u1FAD", "\u1F6E\u0345"=>"\u1FAE", "\u1F6F\u0345"=>"\u1FAF", "\u03B1\u0306"=>"\u1FB0", "\u03B1\u0304"=>"\u1FB1", "\u1F70\u0345"=>"\u1FB2", "\u03B1\u0345"=>"\u1FB3", + "\u03AC\u0345"=>"\u1FB4", "\u03B1\u0342"=>"\u1FB6", "\u1FB6\u0345"=>"\u1FB7", "\u0391\u0306"=>"\u1FB8", "\u0391\u0304"=>"\u1FB9", "\u0391\u0300"=>"\u1FBA", "\u0391\u0345"=>"\u1FBC", "\u00A8\u0342"=>"\u1FC1", + "\u1F74\u0345"=>"\u1FC2", "\u03B7\u0345"=>"\u1FC3", "\u03AE\u0345"=>"\u1FC4", "\u03B7\u0342"=>"\u1FC6", "\u1FC6\u0345"=>"\u1FC7", "\u0395\u0300"=>"\u1FC8", "\u0397\u0300"=>"\u1FCA", "\u0397\u0345"=>"\u1FCC", + "\u1FBF\u0300"=>"\u1FCD", "\u1FBF\u0301"=>"\u1FCE", "\u1FBF\u0342"=>"\u1FCF", "\u03B9\u0306"=>"\u1FD0", "\u03B9\u0304"=>"\u1FD1", "\u03CA\u0300"=>"\u1FD2", "\u03B9\u0342"=>"\u1FD6", "\u03CA\u0342"=>"\u1FD7", + "\u0399\u0306"=>"\u1FD8", "\u0399\u0304"=>"\u1FD9", "\u0399\u0300"=>"\u1FDA", "\u1FFE\u0300"=>"\u1FDD", "\u1FFE\u0301"=>"\u1FDE", "\u1FFE\u0342"=>"\u1FDF", "\u03C5\u0306"=>"\u1FE0", "\u03C5\u0304"=>"\u1FE1", + "\u03CB\u0300"=>"\u1FE2", "\u03C1\u0313"=>"\u1FE4", "\u03C1\u0314"=>"\u1FE5", "\u03C5\u0342"=>"\u1FE6", "\u03CB\u0342"=>"\u1FE7", "\u03A5\u0306"=>"\u1FE8", "\u03A5\u0304"=>"\u1FE9", "\u03A5\u0300"=>"\u1FEA", + "\u03A1\u0314"=>"\u1FEC", "\u00A8\u0300"=>"\u1FED", "\u1F7C\u0345"=>"\u1FF2", "\u03C9\u0345"=>"\u1FF3", "\u03CE\u0345"=>"\u1FF4", "\u03C9\u0342"=>"\u1FF6", "\u1FF6\u0345"=>"\u1FF7", "\u039F\u0300"=>"\u1FF8", + "\u03A9\u0300"=>"\u1FFA", "\u03A9\u0345"=>"\u1FFC", "\u2190\u0338"=>"\u219A", "\u2192\u0338"=>"\u219B", "\u2194\u0338"=>"\u21AE", "\u21D0\u0338"=>"\u21CD", "\u21D4\u0338"=>"\u21CE", "\u21D2\u0338"=>"\u21CF", + "\u2203\u0338"=>"\u2204", "\u2208\u0338"=>"\u2209", "\u220B\u0338"=>"\u220C", "\u2223\u0338"=>"\u2224", "\u2225\u0338"=>"\u2226", "\u223C\u0338"=>"\u2241", "\u2243\u0338"=>"\u2244", "\u2245\u0338"=>"\u2247", + "\u2248\u0338"=>"\u2249", "=\u0338"=>"\u2260", "\u2261\u0338"=>"\u2262", "\u224D\u0338"=>"\u226D", "<\u0338"=>"\u226E", ">\u0338"=>"\u226F", "\u2264\u0338"=>"\u2270", "\u2265\u0338"=>"\u2271", + "\u2272\u0338"=>"\u2274", "\u2273\u0338"=>"\u2275", "\u2276\u0338"=>"\u2278", "\u2277\u0338"=>"\u2279", "\u227A\u0338"=>"\u2280", "\u227B\u0338"=>"\u2281", "\u2282\u0338"=>"\u2284", "\u2283\u0338"=>"\u2285", + "\u2286\u0338"=>"\u2288", "\u2287\u0338"=>"\u2289", "\u22A2\u0338"=>"\u22AC", "\u22A8\u0338"=>"\u22AD", "\u22A9\u0338"=>"\u22AE", "\u22AB\u0338"=>"\u22AF", "\u227C\u0338"=>"\u22E0", "\u227D\u0338"=>"\u22E1", + "\u2291\u0338"=>"\u22E2", "\u2292\u0338"=>"\u22E3", "\u22B2\u0338"=>"\u22EA", "\u22B3\u0338"=>"\u22EB", "\u22B4\u0338"=>"\u22EC", "\u22B5\u0338"=>"\u22ED", "\u304B\u3099"=>"\u304C", "\u304D\u3099"=>"\u304E", + "\u304F\u3099"=>"\u3050", "\u3051\u3099"=>"\u3052", "\u3053\u3099"=>"\u3054", "\u3055\u3099"=>"\u3056", "\u3057\u3099"=>"\u3058", "\u3059\u3099"=>"\u305A", "\u305B\u3099"=>"\u305C", "\u305D\u3099"=>"\u305E", + "\u305F\u3099"=>"\u3060", "\u3061\u3099"=>"\u3062", "\u3064\u3099"=>"\u3065", "\u3066\u3099"=>"\u3067", "\u3068\u3099"=>"\u3069", "\u306F\u3099"=>"\u3070", "\u306F\u309A"=>"\u3071", "\u3072\u3099"=>"\u3073", + "\u3072\u309A"=>"\u3074", "\u3075\u3099"=>"\u3076", "\u3075\u309A"=>"\u3077", "\u3078\u3099"=>"\u3079", "\u3078\u309A"=>"\u307A", "\u307B\u3099"=>"\u307C", "\u307B\u309A"=>"\u307D", "\u3046\u3099"=>"\u3094", + "\u309D\u3099"=>"\u309E", "\u30AB\u3099"=>"\u30AC", "\u30AD\u3099"=>"\u30AE", "\u30AF\u3099"=>"\u30B0", "\u30B1\u3099"=>"\u30B2", "\u30B3\u3099"=>"\u30B4", "\u30B5\u3099"=>"\u30B6", "\u30B7\u3099"=>"\u30B8", + "\u30B9\u3099"=>"\u30BA", "\u30BB\u3099"=>"\u30BC", "\u30BD\u3099"=>"\u30BE", "\u30BF\u3099"=>"\u30C0", "\u30C1\u3099"=>"\u30C2", "\u30C4\u3099"=>"\u30C5", "\u30C6\u3099"=>"\u30C7", "\u30C8\u3099"=>"\u30C9", + "\u30CF\u3099"=>"\u30D0", "\u30CF\u309A"=>"\u30D1", "\u30D2\u3099"=>"\u30D3", "\u30D2\u309A"=>"\u30D4", "\u30D5\u3099"=>"\u30D6", "\u30D5\u309A"=>"\u30D7", "\u30D8\u3099"=>"\u30D9", "\u30D8\u309A"=>"\u30DA", + "\u30DB\u3099"=>"\u30DC", "\u30DB\u309A"=>"\u30DD", "\u30A6\u3099"=>"\u30F4", "\u30EF\u3099"=>"\u30F7", "\u30F0\u3099"=>"\u30F8", "\u30F1\u3099"=>"\u30F9", "\u30F2\u3099"=>"\u30FA", "\u30FD\u3099"=>"\u30FE", + "\u{11099}\u{110BA}"=>"\u{1109A}", "\u{1109B}\u{110BA}"=>"\u{1109C}", "\u{110A5}\u{110BA}"=>"\u{110AB}", "\u{11131}\u{11127}"=>"\u{1112E}", "\u{11132}\u{11127}"=>"\u{1112F}", "\u{11347}\u{1133E}"=>"\u{1134B}", "\u{11347}\u{11357}"=>"\u{1134C}", "\u{114B9}\u{114BA}"=>"\u{114BB}", + "\u{114B9}\u{114B0}"=>"\u{114BC}", "\u{114B9}\u{114BD}"=>"\u{114BE}", "\u{115B8}\u{115AF}"=>"\u{115BA}", "\u{115B9}\u{115AF}"=>"\u{115BB}", }.freeze end diff --git a/lib/ruby/stdlib/uri.rb b/lib/ruby/stdlib/uri.rb index 2a486214719..971a97038fd 100644 --- a/lib/ruby/stdlib/uri.rb +++ b/lib/ruby/stdlib/uri.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # URI is a module providing classes to handle Uniform Resource Identifiers # (RFC2396[http://tools.ietf.org/html/rfc2396]) # diff --git a/lib/ruby/stdlib/uri/common.rb b/lib/ruby/stdlib/uri/common.rb index facca4b08b2..4c7d112e614 100644 --- a/lib/ruby/stdlib/uri/common.rb +++ b/lib/ruby/stdlib/uri/common.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false #-- # = uri/common.rb # @@ -245,7 +246,7 @@ def self.parse(uri) # require 'uri' # # p URI.join("http://example.com/","main.rbx") - # # => # + # # => # # # p URI.join('http://example.com', 'foo') # # => # @@ -346,8 +347,8 @@ def self.regexp(schemes = nil) TBLDECWWWCOMP_['+'] = ' ' TBLDECWWWCOMP_.freeze - HTML5ASCIIINCOMPAT = [Encoding::UTF_7, Encoding::UTF_16BE, Encoding::UTF_16LE, - Encoding::UTF_32BE, Encoding::UTF_32LE] # :nodoc: + HTML5ASCIIINCOMPAT = defined? Encoding::UTF_7 ? [Encoding::UTF_7, Encoding::UTF_16BE, Encoding::UTF_16LE, + Encoding::UTF_32BE, Encoding::UTF_32LE] : [] # :nodoc: # Encode given +str+ to URL-encoded form data. # @@ -438,12 +439,12 @@ def self.encode_www_form(enum, enc=nil) # This refers http://url.spec.whatwg.org/#concept-urlencoded-parser , # so this supports only &-separator, don't support ;-separator. # - # ary = URI.decode_www_form("a=1&a=2&b=3") - # p ary #=> [['a', '1'], ['a', '2'], ['b', '3']] - # p ary.assoc('a').last #=> '1' - # p ary.assoc('b').last #=> '3' - # p ary.rassoc('a').last #=> '2' - # p Hash[ary] # => {"a"=>"2", "b"=>"3"} + # ary = URI.decode_www_form("a=1&a=2&b=3") + # p ary #=> [['a', '1'], ['a', '2'], ['b', '3']] + # p ary.assoc('a').last #=> '1' + # p ary.assoc('b').last #=> '3' + # p ary.rassoc('a').last #=> '2' + # p Hash[ary] # => {"a"=>"2", "b"=>"3"} # # See URI.decode_www_form_component, URI.encode_www_form def self.decode_www_form(str, enc=Encoding::UTF_8, separator: '&', use__charset_: false, isindex: false) diff --git a/lib/ruby/stdlib/uri/ftp.rb b/lib/ruby/stdlib/uri/ftp.rb index 557e1fda33e..e5c00b34da2 100644 --- a/lib/ruby/stdlib/uri/ftp.rb +++ b/lib/ruby/stdlib/uri/ftp.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # = uri/ftp.rb # # Author:: Akira Yamada @@ -85,8 +86,8 @@ def self.new2(user, password, host, port, path, # require 'uri' # # uri = URI::FTP.build(['user:password', 'ftp.example.com', nil, - # '/path/file.> zip', 'i']) - # puts uri.to_s -> ftp://user:password@ftp.example.com/%2Fpath/file.zip;type=a + # '/path/file.zip', 'i']) + # puts uri.to_s -> ftp://user:password@ftp.example.com/%2Fpath/file.zip;type=i # # uri2 = URI::FTP.build({:host => 'ftp.example.com', # :path => 'ruby/src'}) diff --git a/lib/ruby/stdlib/uri/generic.rb b/lib/ruby/stdlib/uri/generic.rb index 56965ec7050..224a16317b4 100644 --- a/lib/ruby/stdlib/uri/generic.rb +++ b/lib/ruby/stdlib/uri/generic.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # = uri/generic.rb # # Author:: Akira Yamada @@ -543,7 +545,7 @@ def set_password(v) # if properly formatted as 'user:password' def split_userinfo(ui) return nil, nil unless ui - user, password = ui.split(':'.freeze, 2) + user, password = ui.split(':', 2) return user, password end @@ -762,13 +764,13 @@ def check_path(v) # If scheme is ftp, path may be relative. # See RFC 1738 section 3.2.2, and RFC 2396. - if @scheme && @scheme != "ftp".freeze - if v && v != ''.freeze && parser.regexp[:ABS_PATH] !~ v + if @scheme && @scheme != "ftp" + if v && v != '' && parser.regexp[:ABS_PATH] !~ v raise InvalidComponentError, "bad component(expected absolute path component): #{v}" end else - if v && v != ''.freeze && parser.regexp[:ABS_PATH] !~ v && + if v && v != '' && parser.regexp[:ABS_PATH] !~ v && parser.regexp[:REL_PATH] !~ v raise InvalidComponentError, "bad component(expected relative path component): #{v}" @@ -844,9 +846,9 @@ def query=(v) x = v.to_str v = x.dup if x.equal? v v.encode!(Encoding::UTF_8) rescue nil - v.delete!("\t\r\n".freeze) + v.delete!("\t\r\n") v.force_encoding(Encoding::ASCII_8BIT) - v.gsub!(/(?!%\h\h|[!$-&(-;=?-_a-~])./n.freeze){'%%%02X'.freeze % $&.ord} + v.gsub!(/(?!%\h\h|[!$-&(-;=?-_a-~])./n.freeze){'%%%02X' % $&.ord} v.force_encoding(Encoding::US_ASCII) @query = v end @@ -934,9 +936,9 @@ def fragment=(v) x = v.to_str v = x.dup if x.equal? v v.encode!(Encoding::UTF_8) rescue nil - v.delete!("\t\r\n".freeze) + v.delete!("\t\r\n") v.force_encoding(Encoding::ASCII_8BIT) - v.gsub!(/(?!%\h\h|[!-~])./n){'%%%02X'.freeze % $&.ord} + v.gsub!(/(?!%\h\h|[!-~])./n){'%%%02X' % $&.ord} v.force_encoding(Encoding::US_ASCII) @fragment = v end @@ -1324,7 +1326,7 @@ def normalize # Destructive version of #normalize # def normalize! - if path && path.empty? + if path&.empty? set_path('/') end if scheme && scheme != scheme.downcase @@ -1339,37 +1341,37 @@ def normalize! # Constructs String from URI # def to_s - str = '' + str = String.new if @scheme str << @scheme - str << ':'.freeze + str << ':' end if @opaque str << @opaque else if @host - str << '//'.freeze + str << '//' end if self.userinfo str << self.userinfo - str << '@'.freeze + str << '@' end if @host str << @host end if @port && @port != self.default_port - str << ':'.freeze + str << ':' str << @port.to_s end str << @path if @query - str << '?'.freeze + str << '?' str << @query end end if @fragment - str << '#'.freeze + str << '#' str << @fragment end str @@ -1520,7 +1522,11 @@ def find_proxy proxy_uri = ENV["CGI_#{name.upcase}"] end elsif name == 'http_proxy' - proxy_uri = http_proxy_from_env + unless proxy_uri = ENV[name] + if proxy_uri = ENV[name.upcase] + warn 'The environment variable HTTP_PROXY is discouraged. Use http_proxy.' + end + end else proxy_uri = ENV[name] || ENV[name.upcase] end @@ -1538,7 +1544,8 @@ def find_proxy end end - if no_proxy = no_proxy_from_env + name = 'no_proxy' + if no_proxy = ENV[name] || ENV[name.upcase] no_proxy.scan(/([^:,]*)(?::(\d+))?/) {|host, port| if /(\A|\.)#{Regexp.quote host}\z/i =~ self.host && (!port || self.port == port.to_i) @@ -1548,44 +1555,5 @@ def find_proxy end URI.parse(proxy_uri) end - - def http_proxy_from_env - proxy_host = ENV_JAVA['http.proxyHost'] - - if proxy_host - begin - proxy_port = (ENV_JAVA['http.proxyPort'] || 80).to_i - if proxy_port > 0 - proxy_uri = "http://#{proxy_host}:#{proxy_port}" - else - warn "invalid http.proxyPort property: #{ENV_JAVA['http.proxyPort']}" - end - end - end - - if proxy_uri.nil? || proxy_uri.empty? - proxy_uri = ENV['http_proxy'] - - if proxy_uri.nil? && (proxy_uri = ENV['HTTP_PROXY']) - warn 'The environment variable HTTP_PROXY is discouraged. Use http_proxy.' - end - end - - proxy_uri - end - private :http_proxy_from_env - - DEFAULT_JVM_NON_PROXY_HOSTS = "local|*.local|169.254/16|*.169.254/16|127.0.0.1|localhost|*.localhost" - def no_proxy_from_env - no_proxy = ENV_JAVA['http.nonProxyHosts'] - - if no_proxy.nil? || no_proxy.empty? - name = "no_proxy" - no_proxy = ENV[name] || ENV[name.upcase] - end - - no_proxy - end - private :no_proxy_from_env end end diff --git a/lib/ruby/stdlib/uri/http.rb b/lib/ruby/stdlib/uri/http.rb index dc47613cdfc..d43e9a28e09 100644 --- a/lib/ruby/stdlib/uri/http.rb +++ b/lib/ruby/stdlib/uri/http.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # = uri/http.rb # # Author:: Akira Yamada diff --git a/lib/ruby/stdlib/uri/https.rb b/lib/ruby/stdlib/uri/https.rb index 7d242e7e793..3c8c905cc3e 100644 --- a/lib/ruby/stdlib/uri/https.rb +++ b/lib/ruby/stdlib/uri/https.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # = uri/https.rb # # Author:: Akira Yamada diff --git a/lib/ruby/stdlib/uri/ldap.rb b/lib/ruby/stdlib/uri/ldap.rb index 56d748e59ed..4345875e28a 100644 --- a/lib/ruby/stdlib/uri/ldap.rb +++ b/lib/ruby/stdlib/uri/ldap.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # = uri/ldap.rb # # Author:: diff --git a/lib/ruby/stdlib/uri/ldaps.rb b/lib/ruby/stdlib/uri/ldaps.rb index 42bbfe86bad..d03f8efa2d8 100644 --- a/lib/ruby/stdlib/uri/ldaps.rb +++ b/lib/ruby/stdlib/uri/ldaps.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # = uri/ldap.rb # # License:: You can redistribute it and/or modify it under the same term as Ruby. diff --git a/lib/ruby/stdlib/uri/mailto.rb b/lib/ruby/stdlib/uri/mailto.rb index 497d9630d27..495f939a3b0 100644 --- a/lib/ruby/stdlib/uri/mailto.rb +++ b/lib/ruby/stdlib/uri/mailto.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # = uri/mailto.rb # # Author:: Akira Yamada @@ -135,6 +136,10 @@ def initialize(*arg) @to = nil @headers = [] + unless @opaque + raise InvalidComponentError, + "missing opaque part for mailto URL" + end to, header = @opaque.split('?', 2) # allow semicolon as a addr-spec separator # http://support.microsoft.com/kb/820868 diff --git a/lib/ruby/stdlib/uri/rfc2396_parser.rb b/lib/ruby/stdlib/uri/rfc2396_parser.rb index c192f65ec1b..b9e7b2b26ef 100644 --- a/lib/ruby/stdlib/uri/rfc2396_parser.rb +++ b/lib/ruby/stdlib/uri/rfc2396_parser.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false #-- # = uri/common.rb # @@ -401,7 +402,7 @@ def initialize_pattern(opts = {}) # host = hostname | IPv4address | IPv6reference (RFC 2732) ret[:HOST] = host = "(?:#{hostname}|#{ipv4addr}|#{ipv6ref})" # port = *digit - port = '\d*' + ret[:PORT] = port = '\d*' # hostport = host [ ":" port ] ret[:HOSTPORT] = hostport = "#{host}(?::#{port})?" diff --git a/lib/ruby/stdlib/uri/rfc3986_parser.rb b/lib/ruby/stdlib/uri/rfc3986_parser.rb index 3923b0699c0..871280044ad 100644 --- a/lib/ruby/stdlib/uri/rfc3986_parser.rb +++ b/lib/ruby/stdlib/uri/rfc3986_parser.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false module URI class RFC3986_Parser # :nodoc: # URI defined in RFC3986 diff --git a/lib/ruby/stdlib/webrick.rb b/lib/ruby/stdlib/webrick.rb index fd8522a6c5f..cbaf18a792e 100644 --- a/lib/ruby/stdlib/webrick.rb +++ b/lib/ruby/stdlib/webrick.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false ## # = WEB server toolkit. # @@ -8,7 +9,7 @@ # # A WEBrick server can be composed of multiple WEBrick servers or servlets to # provide differing behavior on a per-host or per-path basis. WEBrick -# includes servlets for handling CGI scripts, ERb pages, Ruby blocks and +# includes servlets for handling CGI scripts, ERB pages, Ruby blocks and # directory listings. # # WEBrick also includes tools for daemonizing a process and starting a process diff --git a/lib/ruby/stdlib/webrick/accesslog.rb b/lib/ruby/stdlib/webrick/accesslog.rb index 4df27efc291..17e5b38ac93 100644 --- a/lib/ruby/stdlib/webrick/accesslog.rb +++ b/lib/ruby/stdlib/webrick/accesslog.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false #-- # accesslog.rb -- Access log handling utilities # diff --git a/lib/ruby/stdlib/webrick/cgi.rb b/lib/ruby/stdlib/webrick/cgi.rb index 80f636edc3d..94f385f1dd6 100644 --- a/lib/ruby/stdlib/webrick/cgi.rb +++ b/lib/ruby/stdlib/webrick/cgi.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # cgi.rb -- Yet another CGI library # diff --git a/lib/ruby/stdlib/webrick/compat.rb b/lib/ruby/stdlib/webrick/compat.rb index d2bc3ef6b4b..c497a1933c9 100644 --- a/lib/ruby/stdlib/webrick/compat.rb +++ b/lib/ruby/stdlib/webrick/compat.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # compat.rb -- cross platform compatibility # diff --git a/lib/ruby/stdlib/webrick/config.rb b/lib/ruby/stdlib/webrick/config.rb index c347da4be6a..5f7b0a7fa4c 100644 --- a/lib/ruby/stdlib/webrick/config.rb +++ b/lib/ruby/stdlib/webrick/config.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # config.rb -- Default configurations. # diff --git a/lib/ruby/stdlib/webrick/cookie.rb b/lib/ruby/stdlib/webrick/cookie.rb index d8df23133de..16f8d218275 100644 --- a/lib/ruby/stdlib/webrick/cookie.rb +++ b/lib/ruby/stdlib/webrick/cookie.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # cookie.rb -- Cookie class # diff --git a/lib/ruby/stdlib/webrick/htmlutils.rb b/lib/ruby/stdlib/webrick/htmlutils.rb index 4cb3d0d7f65..ed9f4ac0d3e 100644 --- a/lib/ruby/stdlib/webrick/htmlutils.rb +++ b/lib/ruby/stdlib/webrick/htmlutils.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false #-- # htmlutils.rb -- HTMLUtils Module # diff --git a/lib/ruby/stdlib/webrick/httpauth.rb b/lib/ruby/stdlib/webrick/httpauth.rb index 96d479b2d7e..bbb67765284 100644 --- a/lib/ruby/stdlib/webrick/httpauth.rb +++ b/lib/ruby/stdlib/webrick/httpauth.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # httpauth.rb -- HTTP access authentication # diff --git a/lib/ruby/stdlib/webrick/httpauth/authenticator.rb b/lib/ruby/stdlib/webrick/httpauth/authenticator.rb index f6d4ab844f9..8655118a04c 100644 --- a/lib/ruby/stdlib/webrick/httpauth/authenticator.rb +++ b/lib/ruby/stdlib/webrick/httpauth/authenticator.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false #-- # httpauth/authenticator.rb -- Authenticator mix-in module. # diff --git a/lib/ruby/stdlib/webrick/httpauth/basicauth.rb b/lib/ruby/stdlib/webrick/httpauth/basicauth.rb index 3ff20b56d20..e23420fdfa3 100644 --- a/lib/ruby/stdlib/webrick/httpauth/basicauth.rb +++ b/lib/ruby/stdlib/webrick/httpauth/basicauth.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # httpauth/basicauth.rb -- HTTP basic access authentication # @@ -89,8 +90,7 @@ def authenticate(req, res) end ## - # Returns a challenge response which asks for for authentication - # information + # Returns a challenge response which asks for authentication information def challenge(req, res) res[@response_field] = "#{@auth_scheme} realm=\"#{@realm}\"" diff --git a/lib/ruby/stdlib/webrick/httpauth/digestauth.rb b/lib/ruby/stdlib/webrick/httpauth/digestauth.rb index 0eea94774fd..018989e6dd5 100644 --- a/lib/ruby/stdlib/webrick/httpauth/digestauth.rb +++ b/lib/ruby/stdlib/webrick/httpauth/digestauth.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # httpauth/digestauth.rb -- HTTP digest access authentication # @@ -128,8 +129,7 @@ def authenticate(req, res) end ## - # Returns a challenge response which asks for for authentication - # information + # Returns a challenge response which asks for authentication information def challenge(req, res, stale=false) nonce = generate_next_nonce(req) diff --git a/lib/ruby/stdlib/webrick/httpauth/htdigest.rb b/lib/ruby/stdlib/webrick/httpauth/htdigest.rb index 5fb0635e2a1..4bb25e1724b 100644 --- a/lib/ruby/stdlib/webrick/httpauth/htdigest.rb +++ b/lib/ruby/stdlib/webrick/httpauth/htdigest.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # httpauth/htdigest.rb -- Apache compatible htdigest file # diff --git a/lib/ruby/stdlib/webrick/httpauth/htgroup.rb b/lib/ruby/stdlib/webrick/httpauth/htgroup.rb index 0ecabef8201..832ae8bd040 100644 --- a/lib/ruby/stdlib/webrick/httpauth/htgroup.rb +++ b/lib/ruby/stdlib/webrick/httpauth/htgroup.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # httpauth/htgroup.rb -- Apache compatible htgroup file # diff --git a/lib/ruby/stdlib/webrick/httpauth/htpasswd.rb b/lib/ruby/stdlib/webrick/httpauth/htpasswd.rb index 69b739fbfe9..f43fc2c548a 100644 --- a/lib/ruby/stdlib/webrick/httpauth/htpasswd.rb +++ b/lib/ruby/stdlib/webrick/httpauth/htpasswd.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # httpauth/htpasswd -- Apache compatible htpasswd file # diff --git a/lib/ruby/stdlib/webrick/httpauth/userdb.rb b/lib/ruby/stdlib/webrick/httpauth/userdb.rb index 005c18dfd08..7a17715cdf3 100644 --- a/lib/ruby/stdlib/webrick/httpauth/userdb.rb +++ b/lib/ruby/stdlib/webrick/httpauth/userdb.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false #-- # httpauth/userdb.rb -- UserDB mix-in module. # diff --git a/lib/ruby/stdlib/webrick/httpproxy.rb b/lib/ruby/stdlib/webrick/httpproxy.rb index cbba2d80f7e..79a2e8f55b0 100644 --- a/lib/ruby/stdlib/webrick/httpproxy.rb +++ b/lib/ruby/stdlib/webrick/httpproxy.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # httpproxy.rb -- HTTPProxy Class # @@ -156,12 +157,12 @@ def do_CONNECT(req, res) os << proxy_request_line << CRLF @logger.debug("CONNECT: > #{proxy_request_line}") if credentials - @logger.debug("CONNECT: sending a credentials") + @logger.debug("CONNECT: sending credentials") os << "Proxy-Authorization: " << credentials << CRLF end os << CRLF proxy_status_line = os.gets(LF) - @logger.debug("CONNECT: read a Status-Line form the upstream server") + @logger.debug("CONNECT: read Status-Line from the upstream server") @logger.debug("CONNECT: < #{proxy_status_line}") if %r{^HTTP/\d+\.\d+\s+200\s*} =~ proxy_status_line while line = os.gets(LF) diff --git a/lib/ruby/stdlib/webrick/httprequest.rb b/lib/ruby/stdlib/webrick/httprequest.rb index 6aa2d1c1f26..88cdec8a52c 100644 --- a/lib/ruby/stdlib/webrick/httprequest.rb +++ b/lib/ruby/stdlib/webrick/httprequest.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # httprequest.rb -- HTTPRequest Class # diff --git a/lib/ruby/stdlib/webrick/httpresponse.rb b/lib/ruby/stdlib/webrick/httpresponse.rb index e897e8c01b1..5fd54b77c76 100644 --- a/lib/ruby/stdlib/webrick/httpresponse.rb +++ b/lib/ruby/stdlib/webrick/httpresponse.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # httpresponse.rb -- HTTPResponse Class # diff --git a/lib/ruby/stdlib/webrick/https.rb b/lib/ruby/stdlib/webrick/https.rb index 9194f9411c0..73875d73262 100644 --- a/lib/ruby/stdlib/webrick/https.rb +++ b/lib/ruby/stdlib/webrick/https.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # https.rb -- SSL/TLS enhancement for HTTPServer # diff --git a/lib/ruby/stdlib/webrick/httpserver.rb b/lib/ruby/stdlib/webrick/httpserver.rb index 0618489c53c..b27f2311bde 100644 --- a/lib/ruby/stdlib/webrick/httpserver.rb +++ b/lib/ruby/stdlib/webrick/httpserver.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # httpserver.rb -- HTTPServer Class # @@ -8,6 +9,7 @@ # # $IPR: httpserver.rb,v 1.63 2002/10/01 17:16:32 gotoyuzo Exp $ +require 'io/wait' require 'webrick/server' require 'webrick/httputils' require 'webrick/httpstatus' @@ -72,7 +74,7 @@ def run(sock) begin timeout = @config[:RequestTimeout] while timeout > 0 - break if IO.select([sock], nil, nil, 0.5) + break if sock.to_io.wait_readable(0.5) break if @status != :Running timeout -= 0.5 end diff --git a/lib/ruby/stdlib/webrick/httpservlet.rb b/lib/ruby/stdlib/webrick/httpservlet.rb index ac7c022bd75..1ee04ec86fd 100644 --- a/lib/ruby/stdlib/webrick/httpservlet.rb +++ b/lib/ruby/stdlib/webrick/httpservlet.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # httpservlet.rb -- HTTPServlet Utility File # diff --git a/lib/ruby/stdlib/webrick/httpservlet/abstract.rb b/lib/ruby/stdlib/webrick/httpservlet/abstract.rb index d3b00ab4e1b..ee558eb0260 100644 --- a/lib/ruby/stdlib/webrick/httpservlet/abstract.rb +++ b/lib/ruby/stdlib/webrick/httpservlet/abstract.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # httpservlet.rb -- HTTPServlet Module # diff --git a/lib/ruby/stdlib/webrick/httpservlet/cgi_runner.rb b/lib/ruby/stdlib/webrick/httpservlet/cgi_runner.rb index 32ecb6fe00c..597f48936b0 100644 --- a/lib/ruby/stdlib/webrick/httpservlet/cgi_runner.rb +++ b/lib/ruby/stdlib/webrick/httpservlet/cgi_runner.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # cgi_runner.rb -- CGI launcher. # diff --git a/lib/ruby/stdlib/webrick/httpservlet/cgihandler.rb b/lib/ruby/stdlib/webrick/httpservlet/cgihandler.rb index 32100418e66..051bb7cfcc8 100644 --- a/lib/ruby/stdlib/webrick/httpservlet/cgihandler.rb +++ b/lib/ruby/stdlib/webrick/httpservlet/cgihandler.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # cgihandler.rb -- CGIHandler Class # diff --git a/lib/ruby/stdlib/webrick/httpservlet/erbhandler.rb b/lib/ruby/stdlib/webrick/httpservlet/erbhandler.rb index 1b8a82d67b6..9bcec698831 100644 --- a/lib/ruby/stdlib/webrick/httpservlet/erbhandler.rb +++ b/lib/ruby/stdlib/webrick/httpservlet/erbhandler.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # erbhandler.rb -- ERBHandler Class # diff --git a/lib/ruby/stdlib/webrick/httpservlet/filehandler.rb b/lib/ruby/stdlib/webrick/httpservlet/filehandler.rb index cc9db4a8707..068246c9d02 100644 --- a/lib/ruby/stdlib/webrick/httpservlet/filehandler.rb +++ b/lib/ruby/stdlib/webrick/httpservlet/filehandler.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # filehandler.rb -- FileHandler Module # diff --git a/lib/ruby/stdlib/webrick/httpservlet/prochandler.rb b/lib/ruby/stdlib/webrick/httpservlet/prochandler.rb index 2f5aa66f453..c1f454e2f6f 100644 --- a/lib/ruby/stdlib/webrick/httpservlet/prochandler.rb +++ b/lib/ruby/stdlib/webrick/httpservlet/prochandler.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # prochandler.rb -- ProcHandler Class # diff --git a/lib/ruby/stdlib/webrick/httpstatus.rb b/lib/ruby/stdlib/webrick/httpstatus.rb index 7ffda64cf0f..8664da26d0e 100644 --- a/lib/ruby/stdlib/webrick/httpstatus.rb +++ b/lib/ruby/stdlib/webrick/httpstatus.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false #-- # httpstatus.rb -- HTTPStatus Class # diff --git a/lib/ruby/stdlib/webrick/httputils.rb b/lib/ruby/stdlib/webrick/httputils.rb index a5f0632b863..28f906ef4d3 100644 --- a/lib/ruby/stdlib/webrick/httputils.rb +++ b/lib/ruby/stdlib/webrick/httputils.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # httputils.rb -- HTTPUtils Module # diff --git a/lib/ruby/stdlib/webrick/httpversion.rb b/lib/ruby/stdlib/webrick/httpversion.rb index cdfb957296b..8a251944a2c 100644 --- a/lib/ruby/stdlib/webrick/httpversion.rb +++ b/lib/ruby/stdlib/webrick/httpversion.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false #-- # HTTPVersion.rb -- presentation of HTTP version # diff --git a/lib/ruby/stdlib/webrick/log.rb b/lib/ruby/stdlib/webrick/log.rb index 41cde4a7408..7542d8f79a9 100644 --- a/lib/ruby/stdlib/webrick/log.rb +++ b/lib/ruby/stdlib/webrick/log.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false #-- # log.rb -- Log Class # diff --git a/lib/ruby/stdlib/webrick/server.rb b/lib/ruby/stdlib/webrick/server.rb index 4aafd1e7feb..e2e99bfc5ff 100644 --- a/lib/ruby/stdlib/webrick/server.rb +++ b/lib/ruby/stdlib/webrick/server.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # server.rb -- GenericServer Class # @@ -48,9 +49,9 @@ def Daemon.start exit!(0) if fork Dir::chdir("/") File::umask(0) - STDIN.reopen("/dev/null") - STDOUT.reopen("/dev/null", "w") - STDERR.reopen("/dev/null", "w") + STDIN.reopen(IO::NULL) + STDOUT.reopen(IO::NULL, "w") + STDERR.reopen(IO::NULL, "w") yield if block_given? end end @@ -130,8 +131,7 @@ def [](key) # WEBrick::Utils::create_listeners for details. def listen(address, port) - @listeners += Utils::create_listeners(address, port, @logger) - setup_shutdown_pipe + @listeners += Utils::create_listeners(address, port) end ## @@ -159,6 +159,8 @@ def start(&block) raise ServerError, "already started." if @status != :Stop server_type = @config[:ServerType] || SimpleServer + setup_shutdown_pipe + server_type.start{ @logger.info \ "#{self.class}#start: pid=#{$$} port=#{@config[:Port]}" @@ -171,14 +173,21 @@ def start(&block) begin while @status == :Running begin - if svrs = IO.select([shutdown_pipe[0], *@listeners], nil, nil, 2.0) - if svrs[0].include? shutdown_pipe[0] + sp = shutdown_pipe[0] + if svrs = IO.select([sp, *@listeners], nil, nil, 2.0) + if svrs[0].include? sp + # swallow shutdown pipe + buf = String.new + nil while String === + sp.read_nonblock([sp.nread, 8].max, buf, exception: false) break end svrs[0].each{|svr| @tokens.pop # blocks while no token is there. if sock = accept_client(svr) - sock.do_not_reverse_lookup = config[:DoNotReverseLookup] + unless config[:DoNotReverseLookup].nil? + sock.do_not_reverse_lookup = !!config[:DoNotReverseLookup] + end th = start_thread(sock, &block) th[:WEBrickThread] = true thgroup.add(th) @@ -218,6 +227,8 @@ def stop if @status == :Running @status = :Shutdown end + + alarm_shutdown_pipe {|f| f.write_nonblock("\0")} end ## @@ -227,15 +238,7 @@ def stop def shutdown stop - shutdown_pipe = @shutdown_pipe # another thread may modify @shutdown_pipe. - if shutdown_pipe - if !shutdown_pipe[1].closed? - begin - shutdown_pipe[1].close - rescue IOError # closed by another thread. - end - end - end + alarm_shutdown_pipe {|f| f.close} end ## @@ -260,7 +263,6 @@ def accept_client(svr) sock = svr.accept sock.sync = true Utils::set_non_blocking(sock) - Utils::set_close_on_exec(sock) rescue Errno::ECONNRESET, Errno::ECONNABORTED, Errno::EPROTO, Errno::EINVAL rescue StandardError => ex @@ -330,6 +332,7 @@ def setup_shutdown_pipe def cleanup_shutdown_pipe(shutdown_pipe) @shutdown_pipe = nil + return if !shutdown_pipe shutdown_pipe.each {|io| if !io.closed? begin @@ -340,6 +343,18 @@ def cleanup_shutdown_pipe(shutdown_pipe) } end + def alarm_shutdown_pipe + _, pipe = @shutdown_pipe # another thread may modify @shutdown_pipe. + if pipe + if !pipe.closed? + begin + yield pipe + rescue IOError # closed by another thread. + end + end + end + end + def cleanup_listener @listeners.each{|s| if @logger.debug? diff --git a/lib/ruby/stdlib/webrick/ssl.rb b/lib/ruby/stdlib/webrick/ssl.rb index 19c1e104dac..8eb3a442dac 100644 --- a/lib/ruby/stdlib/webrick/ssl.rb +++ b/lib/ruby/stdlib/webrick/ssl.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # ssl.rb -- SSL/TLS enhancement for GenericServer # @@ -149,7 +150,7 @@ def ssl_context # :nodoc: # Updates +listen+ to enable SSL when the SSL configuration is active. def listen(address, port) # :nodoc: - listeners = Utils::create_listeners(address, port, @logger) + listeners = Utils::create_listeners(address, port) if @config[:SSLEnable] unless ssl_context @ssl_context = setup_ssl_context(@config) diff --git a/lib/ruby/stdlib/webrick/utils.rb b/lib/ruby/stdlib/webrick/utils.rb index 606ede5ac32..9c978a2b7b0 100644 --- a/lib/ruby/stdlib/webrick/utils.rb +++ b/lib/ruby/stdlib/webrick/utils.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # utils.rb -- Miscellaneous utilities # @@ -9,7 +10,7 @@ # $IPR: utils.rb,v 1.10 2003/02/16 22:22:54 gotoyuzo Exp $ require 'socket' -require 'fcntl' +require 'io/nonblock' require 'etc' module WEBrick @@ -17,20 +18,14 @@ module Utils ## # Sets IO operations on +io+ to be non-blocking def set_non_blocking(io) - flag = File::NONBLOCK - if defined?(Fcntl::F_GETFL) - flag |= io.fcntl(Fcntl::F_GETFL) - end - io.fcntl(Fcntl::F_SETFL, flag) + io.nonblock = true if io.respond_to?(:nonblock=) end module_function :set_non_blocking ## # Sets the close on exec flag for +io+ def set_close_on_exec(io) - if defined?(Fcntl::FD_CLOEXEC) - io.fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC) - end + io.close_on_exec = true if io.respond_to?(:close_on_exec=) end module_function :set_close_on_exec @@ -63,7 +58,7 @@ def getservername # Creates TCP server sockets bound to +address+:+port+ and returns them. # # It will create IPV4 and IPV6 sockets on all interfaces. - def create_listeners(address, port, logger=nil) + def create_listeners(address, port) unless port raise ArgumentError, "must specify port" end @@ -141,36 +136,53 @@ class Thread < ::Thread; end # +time+:: Timeout in seconds # +exception+:: Exception to raise when timeout elapsed def TimeoutHandler.register(seconds, exception) - TimeoutMutex.synchronize{ - instance.register(Thread.current, Time.now + seconds, exception) - } + instance.register(Thread.current, Time.now + seconds, exception) end ## # Cancels the timeout handler +id+ def TimeoutHandler.cancel(id) - TimeoutMutex.synchronize{ - instance.cancel(Thread.current, id) - } + instance.cancel(Thread.current, id) end ## # Creates a new TimeoutHandler. You should use ::register and ::cancel # instead of creating the timeout handler directly. def initialize - @timeout_info = Hash.new - Thread.start{ + TimeoutMutex.synchronize{ + @timeout_info = Hash.new + } + @queue = Queue.new + @watcher = Thread.start{ + to_interrupt = [] while true now = Time.now - @timeout_info.keys.each{|thread| - ary = @timeout_info[thread] - next unless ary - ary.dup.each{|info| - time, exception = *info - interrupt(thread, info.object_id, exception) if time < now + wakeup = nil + to_interrupt.clear + TimeoutMutex.synchronize{ + @timeout_info.each {|thread, ary| + next unless ary + ary.each{|info| + time, exception = *info + if time < now + to_interrupt.push [thread, info.object_id, exception] + elsif !wakeup || time < wakeup + wakeup = time + end + } } } - sleep 0.5 + to_interrupt.each {|arg| interrupt(*arg)} + if !wakeup + @queue.pop + elsif (wakeup -= now) > 0 + begin + (th = Thread.start {@queue.pop}).join(wakeup) + ensure + th&.kill&.join + end + end + @queue.clear end } end @@ -178,11 +190,9 @@ def initialize ## # Interrupts the timeout handler +id+ and raises +exception+ def interrupt(thread, id, exception) - TimeoutMutex.synchronize{ - if cancel(thread, id) && thread.alive? - thread.raise(exception, "execution timeout") - end - } + if cancel(thread, id) && thread.alive? + thread.raise(exception, "execution timeout") + end end ## @@ -191,22 +201,28 @@ def interrupt(thread, id, exception) # +time+:: Timeout in seconds # +exception+:: Exception to raise when timeout elapsed def register(thread, time, exception) - @timeout_info[thread] ||= Array.new - @timeout_info[thread] << [time, exception] - return @timeout_info[thread].last.object_id + info = nil + TimeoutMutex.synchronize{ + @timeout_info[thread] ||= Array.new + @timeout_info[thread] << (info = [time, exception]) + } + @queue.push nil + return info.object_id end ## # Cancels the timeout handler +id+ def cancel(thread, id) - if ary = @timeout_info[thread] - ary.delete_if{|info| info.object_id == id } - if ary.empty? - @timeout_info.delete(thread) + TimeoutMutex.synchronize{ + if ary = @timeout_info[thread] + ary.delete_if{|info| info.object_id == id } + if ary.empty? + @timeout_info.delete(thread) + end + return true end - return true - end - return false + return false + } end end diff --git a/lib/ruby/stdlib/webrick/version.rb b/lib/ruby/stdlib/webrick/version.rb index 48bdc6d94d0..da5dac94a93 100644 --- a/lib/ruby/stdlib/webrick/version.rb +++ b/lib/ruby/stdlib/webrick/version.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false #-- # version.rb -- version and release date # diff --git a/lib/ruby/stdlib/win32/importer.rb b/lib/ruby/stdlib/win32/importer.rb index 7975cb7f5d6..2bef016c29f 100644 --- a/lib/ruby/stdlib/win32/importer.rb +++ b/lib/ruby/stdlib/win32/importer.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'fiddle/import' module Win32 diff --git a/lib/ruby/stdlib/win32/registry.rb b/lib/ruby/stdlib/win32/registry.rb index 9f1a9e4b56e..4ff88ba0b4a 100644 --- a/lib/ruby/stdlib/win32/registry.rb +++ b/lib/ruby/stdlib/win32/registry.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'win32/importer' require 'Win32API' @@ -63,7 +64,7 @@ module Win32 Win32::Registry object whose key is predefined key. For detail, see the MSDN[http://msdn.microsoft.com/library/en-us/sysinfo/base/predefined_keys.asp] article. -=end +=end rdoc WCHAR = Encoding::UTF_16LE WCHAR_NUL = "\0".encode(WCHAR).freeze @@ -326,7 +327,7 @@ def SetValue(hkey, name, type, data, size) case type when REG_SZ, REG_EXPAND_SZ, REG_MULTI_SZ data = data.encode(WCHAR) - size ||= data.size + 1 + size ||= data.bytesize + WCHAR_SIZE end check RegSetValueExW.call(hkey, make_wstr(name), 0, type, data, size) end @@ -377,15 +378,16 @@ def self.expand_environ(str) } end - @@type2name = { } - %w[ + @@type2name = %w[ REG_NONE REG_SZ REG_EXPAND_SZ REG_BINARY REG_DWORD REG_DWORD_BIG_ENDIAN REG_LINK REG_MULTI_SZ REG_RESOURCE_LIST REG_FULL_RESOURCE_DESCRIPTOR REG_RESOURCE_REQUIREMENTS_LIST REG_QWORD - ].each do |type| - @@type2name[Constants.const_get(type)] = type - end + ].inject([]) do |ary, type| + type.freeze + ary[Constants.const_get(type)] = type + ary + end.freeze # # Convert registry type value to readable string. diff --git a/lib/ruby/stdlib/win32/resolv.rb b/lib/ruby/stdlib/win32/resolv.rb index b5c11bf878b..183d5d38da8 100644 --- a/lib/ruby/stdlib/win32/resolv.rb +++ b/lib/ruby/stdlib/win32/resolv.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false =begin = Win32 DNS and DHCP I/F diff --git a/lib/ruby/stdlib/win32/sspi.rb b/lib/ruby/stdlib/win32/sspi.rb index 4645e1b3062..20441b389c7 100644 --- a/lib/ruby/stdlib/win32/sspi.rb +++ b/lib/ruby/stdlib/win32/sspi.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # = win32/sspi.rb # diff --git a/lib/ruby/stdlib/xmlrpc.rb b/lib/ruby/stdlib/xmlrpc.rb index 511c57d2695..3928bf0d951 100644 --- a/lib/ruby/stdlib/xmlrpc.rb +++ b/lib/ruby/stdlib/xmlrpc.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # == Author and Copyright # # Copyright (C) 2001-2004 by Michael Neumann (mailto:mneumann@ntecs.de) @@ -53,14 +54,24 @@ # # * Parsers # * NQXML (XMLParser::NQXMLStreamParser, XMLParser::NQXMLTreeParser) +# * Not compiled (pure ruby) +# * Note: NQXML's website recommends rexml and isn't available on rubygems.org +# * See http://nqxml.sourceforge.net/ # * Expat (XMLParser::XMLStreamParser, XMLParser::XMLTreeParser) +# * Compiled +# * Fastest parser and also uses the least memory +# * See https://rubygems.org/gems/xmlparser # * REXML (XMLParser::REXMLStreamParser) +# * Not compiled (pure ruby) +# * See ruby standard library # * xml-scan (XMLParser::XMLScanStreamParser) +# * Not compiled (pure ruby) +# * See https://rubygems.org/gems/xmlscan # * Fastest parser is Expat's XMLParser::XMLStreamParser! # # * General # * possible to choose between XMLParser module (Expat wrapper) and REXML/NQXML (pure Ruby) parsers -# * Marshalling Ruby objects to Hashs and reconstruct them later from a Hash +# * Marshalling Ruby objects to Hashes and reconstruct them later from a Hash # * SandStorm component architecture XMLRPC::Client interface # # == Howto @@ -292,7 +303,7 @@ # # ... # # -# Note that XMLParser::XMLStreamParser is incredible faster (and uses less memory) than any +# Note XMLParser::XMLStreamParser (xmlparser gem) is faster and uses less memory than any # other parser and scales well for large documents. For example for a 0.5 MB XML # document with many tags, XMLParser::XMLStreamParser is ~350 (!) times faster than # XMLParser::NQXMLTreeParser and still ~18 times as fast as XMLParser::XMLTreeParser. diff --git a/lib/ruby/stdlib/xmlrpc/base64.rb b/lib/ruby/stdlib/xmlrpc/base64.rb index 4aac3520c57..21f8c65ce25 100644 --- a/lib/ruby/stdlib/xmlrpc/base64.rb +++ b/lib/ruby/stdlib/xmlrpc/base64.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # xmlrpc/base64.rb # Copyright (C) 2001, 2002, 2003 by Michael Neumann (mneumann@ntecs.de) diff --git a/lib/ruby/stdlib/xmlrpc/client.rb b/lib/ruby/stdlib/xmlrpc/client.rb index aab07a7f956..3cb9e9a9e95 100644 --- a/lib/ruby/stdlib/xmlrpc/client.rb +++ b/lib/ruby/stdlib/xmlrpc/client.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # xmlrpc/client.rb # Copyright (C) 2001, 2002, 2003 by Michael Neumann (mneumann@ntecs.de) # diff --git a/lib/ruby/stdlib/xmlrpc/config.rb b/lib/ruby/stdlib/xmlrpc/config.rb index 7923f3a26ef..f49adb6892c 100644 --- a/lib/ruby/stdlib/xmlrpc/config.rb +++ b/lib/ruby/stdlib/xmlrpc/config.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # $Id$ # Configuration file for XML-RPC for Ruby diff --git a/lib/ruby/stdlib/xmlrpc/create.rb b/lib/ruby/stdlib/xmlrpc/create.rb index 13c9cd8faa8..93822c4dd2f 100644 --- a/lib/ruby/stdlib/xmlrpc/create.rb +++ b/lib/ruby/stdlib/xmlrpc/create.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # Copyright (C) 2001, 2002, 2003 by Michael Neumann (mneumann@ntecs.de) # diff --git a/lib/ruby/stdlib/xmlrpc/datetime.rb b/lib/ruby/stdlib/xmlrpc/datetime.rb index 444a29f176d..431ac24aa93 100644 --- a/lib/ruby/stdlib/xmlrpc/datetime.rb +++ b/lib/ruby/stdlib/xmlrpc/datetime.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # xmlrpc/datetime.rb # Copyright (C) 2001, 2002, 2003 by Michael Neumann (mneumann@ntecs.de) diff --git a/lib/ruby/stdlib/xmlrpc/marshal.rb b/lib/ruby/stdlib/xmlrpc/marshal.rb index ef1234f8015..42b7b1e125b 100644 --- a/lib/ruby/stdlib/xmlrpc/marshal.rb +++ b/lib/ruby/stdlib/xmlrpc/marshal.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # Copyright (C) 2001, 2002, 2003 by Michael Neumann (mneumann@ntecs.de) # diff --git a/lib/ruby/stdlib/xmlrpc/parser.rb b/lib/ruby/stdlib/xmlrpc/parser.rb index be8accfd6b0..3b912b6be2f 100644 --- a/lib/ruby/stdlib/xmlrpc/parser.rb +++ b/lib/ruby/stdlib/xmlrpc/parser.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # Copyright (C) 2001, 2002, 2003 by Michael Neumann (mneumann@ntecs.de) # # $Id$ diff --git a/lib/ruby/stdlib/xmlrpc/server.rb b/lib/ruby/stdlib/xmlrpc/server.rb index 64856ea1fa1..cd0fdbad38b 100644 --- a/lib/ruby/stdlib/xmlrpc/server.rb +++ b/lib/ruby/stdlib/xmlrpc/server.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # xmlrpc/server.rb # Copyright (C) 2001, 2002, 2003, 2005 by Michael Neumann (mneumann@ntecs.de) # diff --git a/lib/ruby/stdlib/xmlrpc/utils.rb b/lib/ruby/stdlib/xmlrpc/utils.rb index 186938a56ef..cd2ab107d90 100644 --- a/lib/ruby/stdlib/xmlrpc/utils.rb +++ b/lib/ruby/stdlib/xmlrpc/utils.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # Copyright (C) 2001, 2002, 2003 by Michael Neumann (mneumann@ntecs.de) # diff --git a/lib/ruby/stdlib/yaml.rb b/lib/ruby/stdlib/yaml.rb index c0ffcf877b4..0c33305e1dc 100644 --- a/lib/ruby/stdlib/yaml.rb +++ b/lib/ruby/stdlib/yaml.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false ## # The YAML module is an alias of Psych, the YAML engine for Ruby. @@ -52,7 +53,7 @@ # For more advanced details on the implementation see Psych, and also check out # http://yaml.org for spec details and other helpful information. # -# Pysch is maintained by Aaron Patterson on github: https://github.com/tenderlove/psych +# Psych is maintained by Aaron Patterson on github: https://github.com/tenderlove/psych # # Syck can also be found on github: https://github.com/tenderlove/syck module YAML diff --git a/lib/ruby/stdlib/yaml/dbm.rb b/lib/ruby/stdlib/yaml/dbm.rb index 24a68bfa71a..e2508cd74b3 100644 --- a/lib/ruby/stdlib/yaml/dbm.rb +++ b/lib/ruby/stdlib/yaml/dbm.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'yaml' require 'dbm' diff --git a/lib/ruby/stdlib/yaml/store.rb b/lib/ruby/stdlib/yaml/store.rb index b0b580ba1ac..57ef0ba5009 100644 --- a/lib/ruby/stdlib/yaml/store.rb +++ b/lib/ruby/stdlib/yaml/store.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # # YAML::Store # diff --git a/tool/globals_2_2_2.rb b/tool/globals_2_3_0.rb similarity index 100% rename from tool/globals_2_2_2.rb rename to tool/globals_2_3_0.rb