From ef290100b98ced55d75e27c8180f81652808b1c2 Mon Sep 17 00:00:00 2001 From: Jeffrey Phillips Freeman <jeffrey.freeman@syncleus.com> Date: Sat, 27 Jan 2018 03:56:20 -0500 Subject: [PATCH] Update to pull in changes from personal site. --- .gitignore | 3 + Gemfile | 3 + Gemfile.lock | 139 - config.rb | 19 +- source/.gitignore | 21 + source/ViewerJS/compatibility.js | 577 + source/ViewerJS/example.local.css | 27 + source/ViewerJS/images/kogmbh.png | Bin 0 -> 2835 bytes source/ViewerJS/images/nlnet.png | Bin 0 -> 5400 bytes source/ViewerJS/images/texture.png | Bin 0 -> 2459 bytes .../images/toolbarButton-download.png | Bin 0 -> 512 bytes .../images/toolbarButton-fullscreen.png | Bin 0 -> 491 bytes .../images/toolbarButton-menuArrows.png | Bin 0 -> 237 bytes .../images/toolbarButton-pageDown.png | Bin 0 -> 353 bytes .../ViewerJS/images/toolbarButton-pageUp.png | Bin 0 -> 344 bytes .../images/toolbarButton-presentation.png | Bin 0 -> 4366 bytes .../ViewerJS/images/toolbarButton-zoomIn.png | Bin 0 -> 228 bytes .../ViewerJS/images/toolbarButton-zoomOut.png | Bin 0 -> 143 bytes source/ViewerJS/index.html | 145 + source/ViewerJS/pdf.js | 8052 ++++ source/ViewerJS/pdf.worker.js | 39353 ++++++++++++++++ source/ViewerJS/pdfjsversion.js | 1 + source/ViewerJS/text_layer_builder.js | 419 + source/ViewerJS/ui_utils.js | 394 + source/ViewerJS/webodf.js | 936 + source/author.html.haml | 34 - source/blog.html.haml | 19 + source/fonts/KaTeX_AMS-Regular.eot | Bin 0 -> 71656 bytes source/fonts/KaTeX_AMS-Regular.ttf | Bin 0 -> 71428 bytes source/fonts/KaTeX_AMS-Regular.woff | Bin 0 -> 40200 bytes source/fonts/KaTeX_AMS-Regular.woff2 | Bin 0 -> 33188 bytes source/fonts/KaTeX_Caligraphic-Bold.eot | Bin 0 -> 19836 bytes source/fonts/KaTeX_Caligraphic-Bold.ttf | Bin 0 -> 19588 bytes source/fonts/KaTeX_Caligraphic-Bold.woff | Bin 0 -> 12136 bytes source/fonts/KaTeX_Caligraphic-Bold.woff2 | Bin 0 -> 10604 bytes source/fonts/KaTeX_Caligraphic-Regular.eot | Bin 0 -> 19220 bytes source/fonts/KaTeX_Caligraphic-Regular.ttf | Bin 0 -> 18960 bytes source/fonts/KaTeX_Caligraphic-Regular.woff | Bin 0 -> 11868 bytes source/fonts/KaTeX_Caligraphic-Regular.woff2 | Bin 0 -> 10396 bytes source/fonts/KaTeX_Fraktur-Bold.eot | Bin 0 -> 36200 bytes source/fonts/KaTeX_Fraktur-Bold.ttf | Bin 0 -> 35968 bytes source/fonts/KaTeX_Fraktur-Bold.woff | Bin 0 -> 23388 bytes source/fonts/KaTeX_Fraktur-Bold.woff2 | Bin 0 -> 20476 bytes source/fonts/KaTeX_Fraktur-Regular.eot | Bin 0 -> 34896 bytes source/fonts/KaTeX_Fraktur-Regular.ttf | Bin 0 -> 34652 bytes source/fonts/KaTeX_Fraktur-Regular.woff | Bin 0 -> 22844 bytes source/fonts/KaTeX_Fraktur-Regular.woff2 | Bin 0 -> 19868 bytes source/fonts/KaTeX_Greek-Bold.woff2 | Bin 0 -> 2904 bytes source/fonts/KaTeX_Greek-BoldItalic.woff2 | Bin 0 -> 7648 bytes source/fonts/KaTeX_Greek-Italic.woff2 | Bin 0 -> 7436 bytes source/fonts/KaTeX_Greek-Regular.woff2 | Bin 0 -> 3036 bytes source/fonts/KaTeX_Main-Bold.eot | Bin 0 -> 60688 bytes source/fonts/KaTeX_Main-Bold.ttf | Bin 0 -> 60468 bytes source/fonts/KaTeX_Main-Bold.woff | Bin 0 -> 35480 bytes source/fonts/KaTeX_Main-Bold.woff2 | Bin 0 -> 29492 bytes source/fonts/KaTeX_Main-Italic.eot | Bin 0 -> 44132 bytes source/fonts/KaTeX_Main-Italic.ttf | Bin 0 -> 43904 bytes source/fonts/KaTeX_Main-Italic.woff | Bin 0 -> 24880 bytes source/fonts/KaTeX_Main-Italic.woff2 | Bin 0 -> 21032 bytes source/fonts/KaTeX_Main-Regular.eot | Bin 0 -> 68228 bytes source/fonts/KaTeX_Main-Regular.ttf | Bin 0 -> 67996 bytes source/fonts/KaTeX_Main-Regular.woff | Bin 0 -> 37620 bytes source/fonts/KaTeX_Main-Regular.woff2 | Bin 0 -> 31220 bytes source/fonts/KaTeX_Math-BoldItalic.eot | Bin 0 -> 39990 bytes source/fonts/KaTeX_Math-BoldItalic.ttf | Bin 0 -> 39744 bytes source/fonts/KaTeX_Math-BoldItalic.woff | Bin 0 -> 23192 bytes source/fonts/KaTeX_Math-BoldItalic.woff2 | Bin 0 -> 20036 bytes source/fonts/KaTeX_Math-Italic.eot | Bin 0 -> 41676 bytes source/fonts/KaTeX_Math-Italic.ttf | Bin 0 -> 41448 bytes source/fonts/KaTeX_Math-Italic.woff | Bin 0 -> 23820 bytes source/fonts/KaTeX_Math-Italic.woff2 | Bin 0 -> 20432 bytes source/fonts/KaTeX_Math-Regular.eot | Bin 0 -> 41536 bytes source/fonts/KaTeX_Math-Regular.ttf | Bin 0 -> 41304 bytes source/fonts/KaTeX_Math-Regular.woff | Bin 0 -> 23712 bytes source/fonts/KaTeX_Math-Regular.woff2 | Bin 0 -> 20344 bytes source/fonts/KaTeX_SansSerif-Bold.eot | Bin 0 -> 34204 bytes source/fonts/KaTeX_SansSerif-Bold.ttf | Bin 0 -> 33964 bytes source/fonts/KaTeX_SansSerif-Bold.woff | Bin 0 -> 19196 bytes source/fonts/KaTeX_SansSerif-Bold.woff2 | Bin 0 -> 16020 bytes source/fonts/KaTeX_SansSerif-Italic.eot | Bin 0 -> 31320 bytes source/fonts/KaTeX_SansSerif-Italic.ttf | Bin 0 -> 31072 bytes source/fonts/KaTeX_SansSerif-Italic.woff | Bin 0 -> 18080 bytes source/fonts/KaTeX_SansSerif-Italic.woff2 | Bin 0 -> 15152 bytes source/fonts/KaTeX_SansSerif-Regular.eot | Bin 0 -> 30212 bytes source/fonts/KaTeX_SansSerif-Regular.ttf | Bin 0 -> 29960 bytes source/fonts/KaTeX_SansSerif-Regular.woff | Bin 0 -> 16744 bytes source/fonts/KaTeX_SansSerif-Regular.woff2 | Bin 0 -> 13908 bytes source/fonts/KaTeX_Script-Regular.eot | Bin 0 -> 25104 bytes source/fonts/KaTeX_Script-Regular.ttf | Bin 0 -> 24864 bytes source/fonts/KaTeX_Script-Regular.woff | Bin 0 -> 13856 bytes source/fonts/KaTeX_Script-Regular.woff2 | Bin 0 -> 12276 bytes source/fonts/KaTeX_Size1-Regular.eot | Bin 0 -> 13408 bytes source/fonts/KaTeX_Size1-Regular.ttf | Bin 0 -> 13172 bytes source/fonts/KaTeX_Size1-Regular.woff | Bin 0 -> 6980 bytes source/fonts/KaTeX_Size1-Regular.woff2 | Bin 0 -> 5820 bytes source/fonts/KaTeX_Size2-Regular.eot | Bin 0 -> 12648 bytes source/fonts/KaTeX_Size2-Regular.ttf | Bin 0 -> 12412 bytes source/fonts/KaTeX_Size2-Regular.woff | Bin 0 -> 6684 bytes source/fonts/KaTeX_Size2-Regular.woff2 | Bin 0 -> 5560 bytes source/fonts/KaTeX_Size3-Regular.eot | Bin 0 -> 8596 bytes source/fonts/KaTeX_Size3-Regular.ttf | Bin 0 -> 8360 bytes source/fonts/KaTeX_Size3-Regular.woff | Bin 0 -> 4776 bytes source/fonts/KaTeX_Size3-Regular.woff2 | Bin 0 -> 3856 bytes source/fonts/KaTeX_Size4-Regular.eot | Bin 0 -> 11520 bytes source/fonts/KaTeX_Size4-Regular.ttf | Bin 0 -> 11284 bytes source/fonts/KaTeX_Size4-Regular.woff | Bin 0 -> 6456 bytes source/fonts/KaTeX_Size4-Regular.woff2 | Bin 0 -> 5172 bytes source/fonts/KaTeX_Typewriter-Regular.eot | Bin 0 -> 35784 bytes source/fonts/KaTeX_Typewriter-Regular.ttf | Bin 0 -> 35528 bytes source/fonts/KaTeX_Typewriter-Regular.woff | Bin 0 -> 20712 bytes source/fonts/KaTeX_Typewriter-Regular.woff2 | Bin 0 -> 17344 bytes source/images/favicon.ico | Bin 318 -> 0 bytes source/index.html.haml | 38 - source/index.html.md | 8 + source/javascripts/ghoststa.js | 79 + source/javascripts/ghoststa_vendor.js | 9927 ++++ source/javascripts/ie/backgroundsize.min.htc | 7 + source/javascripts/ie/html5.js | 7 + source/javascripts/ie/html5shiv.js | 8 + source/javascripts/ie/respond.min.js | 6 + source/javascripts/jquery.min.js | 5 + source/javascripts/jquery.scrollex.min.js | 2 + source/javascripts/jquery.scrolly.min.js | 2 + source/javascripts/katex.js | 9075 ++++ source/javascripts/main.js | 100 + source/javascripts/navigation.js | 33 + source/javascripts/pseudocode.js | 4 + source/javascripts/skel.min.js | 2 + source/javascripts/util.js | 587 + source/layouts/layout.haml | 94 +- source/layouts/page.haml | 4 +- source/layouts/post.haml | 77 +- source/shared/_article.haml | 2 +- source/shared/_disqus.haml | 21 + source/shared/_navigation.haml | 14 - source/shared/_page_articles.haml | 25 - source/shared/_tags_nav.haml | 4 +- source/stylesheets/application.css.scss | 33 +- source/stylesheets/font-awesome.min.css | 4 + source/stylesheets/images/arrow.svg | 6 + source/stylesheets/images/bars.svg | 6 + source/stylesheets/images/close.svg | 5 + source/stylesheets/katex.css | 976 + source/stylesheets/pseudocode.css | 1 + source/tag.html.haml | 22 - 145 files changed, 70905 insertions(+), 421 deletions(-) delete mode 100644 Gemfile.lock create mode 100644 source/.gitignore create mode 100644 source/ViewerJS/compatibility.js create mode 100644 source/ViewerJS/example.local.css create mode 100644 source/ViewerJS/images/kogmbh.png create mode 100644 source/ViewerJS/images/nlnet.png create mode 100644 source/ViewerJS/images/texture.png create mode 100644 source/ViewerJS/images/toolbarButton-download.png create mode 100644 source/ViewerJS/images/toolbarButton-fullscreen.png create mode 100644 source/ViewerJS/images/toolbarButton-menuArrows.png create mode 100644 source/ViewerJS/images/toolbarButton-pageDown.png create mode 100644 source/ViewerJS/images/toolbarButton-pageUp.png create mode 100644 source/ViewerJS/images/toolbarButton-presentation.png create mode 100644 source/ViewerJS/images/toolbarButton-zoomIn.png create mode 100644 source/ViewerJS/images/toolbarButton-zoomOut.png create mode 100644 source/ViewerJS/index.html create mode 100644 source/ViewerJS/pdf.js create mode 100644 source/ViewerJS/pdf.worker.js create mode 100644 source/ViewerJS/pdfjsversion.js create mode 100644 source/ViewerJS/text_layer_builder.js create mode 100644 source/ViewerJS/ui_utils.js create mode 100644 source/ViewerJS/webodf.js create mode 100644 source/blog.html.haml create mode 100644 source/fonts/KaTeX_AMS-Regular.eot create mode 100644 source/fonts/KaTeX_AMS-Regular.ttf create mode 100644 source/fonts/KaTeX_AMS-Regular.woff create mode 100644 source/fonts/KaTeX_AMS-Regular.woff2 create mode 100644 source/fonts/KaTeX_Caligraphic-Bold.eot create mode 100644 source/fonts/KaTeX_Caligraphic-Bold.ttf create mode 100644 source/fonts/KaTeX_Caligraphic-Bold.woff create mode 100644 source/fonts/KaTeX_Caligraphic-Bold.woff2 create mode 100644 source/fonts/KaTeX_Caligraphic-Regular.eot create mode 100644 source/fonts/KaTeX_Caligraphic-Regular.ttf create mode 100644 source/fonts/KaTeX_Caligraphic-Regular.woff create mode 100644 source/fonts/KaTeX_Caligraphic-Regular.woff2 create mode 100644 source/fonts/KaTeX_Fraktur-Bold.eot create mode 100644 source/fonts/KaTeX_Fraktur-Bold.ttf create mode 100644 source/fonts/KaTeX_Fraktur-Bold.woff create mode 100644 source/fonts/KaTeX_Fraktur-Bold.woff2 create mode 100644 source/fonts/KaTeX_Fraktur-Regular.eot create mode 100644 source/fonts/KaTeX_Fraktur-Regular.ttf create mode 100644 source/fonts/KaTeX_Fraktur-Regular.woff create mode 100644 source/fonts/KaTeX_Fraktur-Regular.woff2 create mode 100644 source/fonts/KaTeX_Greek-Bold.woff2 create mode 100644 source/fonts/KaTeX_Greek-BoldItalic.woff2 create mode 100644 source/fonts/KaTeX_Greek-Italic.woff2 create mode 100644 source/fonts/KaTeX_Greek-Regular.woff2 create mode 100644 source/fonts/KaTeX_Main-Bold.eot create mode 100644 source/fonts/KaTeX_Main-Bold.ttf create mode 100644 source/fonts/KaTeX_Main-Bold.woff create mode 100644 source/fonts/KaTeX_Main-Bold.woff2 create mode 100644 source/fonts/KaTeX_Main-Italic.eot create mode 100644 source/fonts/KaTeX_Main-Italic.ttf create mode 100644 source/fonts/KaTeX_Main-Italic.woff create mode 100644 source/fonts/KaTeX_Main-Italic.woff2 create mode 100644 source/fonts/KaTeX_Main-Regular.eot create mode 100644 source/fonts/KaTeX_Main-Regular.ttf create mode 100644 source/fonts/KaTeX_Main-Regular.woff create mode 100644 source/fonts/KaTeX_Main-Regular.woff2 create mode 100644 source/fonts/KaTeX_Math-BoldItalic.eot create mode 100644 source/fonts/KaTeX_Math-BoldItalic.ttf create mode 100644 source/fonts/KaTeX_Math-BoldItalic.woff create mode 100644 source/fonts/KaTeX_Math-BoldItalic.woff2 create mode 100644 source/fonts/KaTeX_Math-Italic.eot create mode 100644 source/fonts/KaTeX_Math-Italic.ttf create mode 100644 source/fonts/KaTeX_Math-Italic.woff create mode 100644 source/fonts/KaTeX_Math-Italic.woff2 create mode 100644 source/fonts/KaTeX_Math-Regular.eot create mode 100644 source/fonts/KaTeX_Math-Regular.ttf create mode 100644 source/fonts/KaTeX_Math-Regular.woff create mode 100644 source/fonts/KaTeX_Math-Regular.woff2 create mode 100644 source/fonts/KaTeX_SansSerif-Bold.eot create mode 100644 source/fonts/KaTeX_SansSerif-Bold.ttf create mode 100644 source/fonts/KaTeX_SansSerif-Bold.woff create mode 100644 source/fonts/KaTeX_SansSerif-Bold.woff2 create mode 100644 source/fonts/KaTeX_SansSerif-Italic.eot create mode 100644 source/fonts/KaTeX_SansSerif-Italic.ttf create mode 100644 source/fonts/KaTeX_SansSerif-Italic.woff create mode 100644 source/fonts/KaTeX_SansSerif-Italic.woff2 create mode 100644 source/fonts/KaTeX_SansSerif-Regular.eot create mode 100644 source/fonts/KaTeX_SansSerif-Regular.ttf create mode 100644 source/fonts/KaTeX_SansSerif-Regular.woff create mode 100644 source/fonts/KaTeX_SansSerif-Regular.woff2 create mode 100644 source/fonts/KaTeX_Script-Regular.eot create mode 100644 source/fonts/KaTeX_Script-Regular.ttf create mode 100644 source/fonts/KaTeX_Script-Regular.woff create mode 100644 source/fonts/KaTeX_Script-Regular.woff2 create mode 100644 source/fonts/KaTeX_Size1-Regular.eot create mode 100644 source/fonts/KaTeX_Size1-Regular.ttf create mode 100644 source/fonts/KaTeX_Size1-Regular.woff create mode 100644 source/fonts/KaTeX_Size1-Regular.woff2 create mode 100644 source/fonts/KaTeX_Size2-Regular.eot create mode 100644 source/fonts/KaTeX_Size2-Regular.ttf create mode 100644 source/fonts/KaTeX_Size2-Regular.woff create mode 100644 source/fonts/KaTeX_Size2-Regular.woff2 create mode 100644 source/fonts/KaTeX_Size3-Regular.eot create mode 100644 source/fonts/KaTeX_Size3-Regular.ttf create mode 100644 source/fonts/KaTeX_Size3-Regular.woff create mode 100644 source/fonts/KaTeX_Size3-Regular.woff2 create mode 100644 source/fonts/KaTeX_Size4-Regular.eot create mode 100644 source/fonts/KaTeX_Size4-Regular.ttf create mode 100644 source/fonts/KaTeX_Size4-Regular.woff create mode 100644 source/fonts/KaTeX_Size4-Regular.woff2 create mode 100644 source/fonts/KaTeX_Typewriter-Regular.eot create mode 100644 source/fonts/KaTeX_Typewriter-Regular.ttf create mode 100644 source/fonts/KaTeX_Typewriter-Regular.woff create mode 100644 source/fonts/KaTeX_Typewriter-Regular.woff2 delete mode 100644 source/images/favicon.ico delete mode 100644 source/index.html.haml create mode 100644 source/index.html.md create mode 100644 source/javascripts/ghoststa.js create mode 100644 source/javascripts/ghoststa_vendor.js create mode 100644 source/javascripts/ie/backgroundsize.min.htc create mode 100644 source/javascripts/ie/html5.js create mode 100644 source/javascripts/ie/html5shiv.js create mode 100644 source/javascripts/ie/respond.min.js create mode 100644 source/javascripts/jquery.min.js create mode 100644 source/javascripts/jquery.scrollex.min.js create mode 100644 source/javascripts/jquery.scrolly.min.js create mode 100644 source/javascripts/katex.js create mode 100644 source/javascripts/main.js create mode 100644 source/javascripts/navigation.js create mode 100644 source/javascripts/pseudocode.js create mode 100644 source/javascripts/skel.min.js create mode 100644 source/javascripts/util.js create mode 100644 source/shared/_disqus.haml create mode 100644 source/stylesheets/font-awesome.min.css create mode 100644 source/stylesheets/images/arrow.svg create mode 100644 source/stylesheets/images/bars.svg create mode 100644 source/stylesheets/images/close.svg create mode 100644 source/stylesheets/katex.css create mode 100644 source/stylesheets/pseudocode.css diff --git a/.gitignore b/.gitignore index 2dcd3bb..97840f3 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,6 @@ # IDEA IDE .idea/ + +#Ruby +Gemfile.lock diff --git a/Gemfile b/Gemfile index aece9be..42e8923 100644 --- a/Gemfile +++ b/Gemfile @@ -19,7 +19,10 @@ gem 'builder', '~> 3.2.2' # Code syntax highlighting gem 'middleman-syntax', '~> 3.0.0' + +#uncomment the following to use redcarpet instead of kramdown and comment the following block. gem 'redcarpet', '~> 3.3.4' +gem 'kramdown', '~> 1.13.2' # For "summary"-Helper gem 'nokogiri', '~> 1.6.8' diff --git a/Gemfile.lock b/Gemfile.lock deleted file mode 100644 index cf7f4fe..0000000 --- a/Gemfile.lock +++ /dev/null @@ -1,139 +0,0 @@ -GEM - remote: https://rubygems.org/ - specs: - activesupport (5.0.2) - concurrent-ruby (~> 1.0, >= 1.0.2) - i18n (~> 0.7) - minitest (~> 5.1) - tzinfo (~> 1.1) - addressable (2.5.0) - public_suffix (~> 2.0, >= 2.0.2) - backports (3.6.8) - builder (3.2.3) - coffee-script (2.4.1) - coffee-script-source - execjs - coffee-script-source (1.12.2) - compass-import-once (1.0.5) - sass (>= 3.2, < 3.5) - concurrent-ruby (1.0.5) - contracts (0.13.0) - dotenv (2.2.0) - em-websocket (0.5.1) - eventmachine (>= 0.12.9) - http_parser.rb (~> 0.6.0) - erubis (2.7.0) - eventmachine (1.2.3) - execjs (2.7.0) - fast_blank (1.0.0) - fastimage (2.1.0) - ffi (1.9.18) - haml (4.0.7) - tilt - hamster (3.0.0) - concurrent-ruby (~> 1.0) - hashie (3.5.5) - http_parser.rb (0.6.0) - i18n (0.7.0) - kramdown (1.13.2) - listen (3.0.8) - rb-fsevent (~> 0.9, >= 0.9.4) - rb-inotify (~> 0.9, >= 0.9.7) - memoist (0.15.0) - middleman (4.2.1) - coffee-script (~> 2.2) - compass-import-once (= 1.0.5) - haml (>= 4.0.5) - kramdown (~> 1.2) - middleman-cli (= 4.2.1) - middleman-core (= 4.2.1) - sass (>= 3.4.0, < 4.0) - middleman-blog (4.0.1) - addressable (~> 2.3) - middleman-core (>= 4.0.0) - tzinfo (>= 0.3.0) - middleman-cli (4.2.1) - thor (>= 0.17.0, < 2.0) - middleman-core (4.2.1) - activesupport (>= 4.2, < 5.1) - addressable (~> 2.3) - backports (~> 3.6) - bundler (~> 1.1) - contracts (~> 0.13.0) - dotenv - erubis - execjs (~> 2.0) - fast_blank - fastimage (~> 2.0) - hamster (~> 3.0) - hashie (~> 3.4) - i18n (~> 0.7.0) - listen (~> 3.0.0) - memoist (~> 0.14) - padrino-helpers (~> 0.13.0) - parallel - rack (>= 1.4.5, < 3) - sass (>= 3.4) - servolux - tilt (~> 2.0) - uglifier (~> 3.0) - middleman-livereload (3.4.6) - em-websocket (~> 0.5.1) - middleman-core (>= 3.3) - rack-livereload (~> 0.3.15) - middleman-sprockets (4.0.0) - middleman-core (~> 4.0) - sprockets (>= 3.0) - middleman-syntax (3.0.0) - middleman-core (>= 3.2) - rouge (~> 2.0) - mini_portile2 (2.1.0) - minitest (5.10.1) - nokogiri (1.6.8.1) - mini_portile2 (~> 2.1.0) - padrino-helpers (0.13.3.3) - i18n (~> 0.6, >= 0.6.7) - padrino-support (= 0.13.3.3) - tilt (>= 1.4.1, < 3) - padrino-support (0.13.3.3) - activesupport (>= 3.1) - parallel (1.11.1) - public_suffix (2.0.5) - rack (2.0.1) - rack-livereload (0.3.16) - rack - rb-fsevent (0.9.8) - rb-inotify (0.9.8) - ffi (>= 0.5.0) - redcarpet (3.3.4) - rouge (2.0.7) - sass (3.4.23) - servolux (0.13.0) - sprockets (3.7.1) - concurrent-ruby (~> 1.0) - rack (> 1, < 3) - thor (0.19.4) - thread_safe (0.3.6) - tilt (2.0.7) - tzinfo (1.2.2) - thread_safe (~> 0.1) - uglifier (3.1.9) - execjs (>= 0.3.0, < 3) - -PLATFORMS - ruby - -DEPENDENCIES - builder (~> 3.2.2) - middleman (~> 4.0) - middleman-blog (~> 4.0) - middleman-livereload - middleman-sprockets (~> 4.0.0) - middleman-syntax (~> 3.0.0) - nokogiri (~> 1.6.8) - redcarpet (~> 3.3.4) - tzinfo-data - wdm (~> 0.1.1) - -BUNDLED WITH - 1.14.6 diff --git a/config.rb b/config.rb index 2d10e5c..2b41dfb 100644 --- a/config.rb +++ b/config.rb @@ -20,7 +20,8 @@ config[:ghoststa] = { twitter: nil # Optional }, navigation: { - "Home" => "/" + "Home" => "/", + "Blog" => "/blog" } } @@ -112,9 +113,19 @@ activate :directory_indexes # Middleman-Syntax - https://github.com/middleman/middleman-syntax set :haml, { ugly: true } -set :markdown_engine, :redcarpet -set :markdown, fenced_code_blocks: true, smartypants: true, footnotes: true, - link_attributes: { rel: 'nofollow' }, tables: true + +#uncomment the following to use redcarpet instead of kramdown and comment the following block. +#set :markdown_engine, :redcarpet +#set :markdown, fenced_code_blocks: true, smartypants: true, footnotes: true, +# link_attributes: { rel: 'nofollow' }, tables: true +set :markdown_engine, :kramdown +set :markdown, :layout_engine => :haml, + :tables => true, + :autolink => true, + :smartypants => true, + :fenced_code_blocks => true, + :footnotes => true + activate :syntax, line_numbers: false # Middleman-Sprockets - https://github.com/middleman/middleman-sprockets diff --git a/source/.gitignore b/source/.gitignore new file mode 100644 index 0000000..2dcd3bb --- /dev/null +++ b/source/.gitignore @@ -0,0 +1,21 @@ +# See http://help.github.com/ignore-files/ for more about ignoring files. +# +# If you find yourself ignoring temporary files generated by your text editor +# or operating system, you probably want to add a global ignore instead: +# git config --global core.excludesfile ~/.gitignore_global + +# Ignore bundler config +/.bundle + +# Ignore the build directory +/build + +# Ignore cache +/.sass-cache +/.cache + +# Ignore .DS_store file +.DS_Store + +# IDEA IDE +.idea/ diff --git a/source/ViewerJS/compatibility.js b/source/ViewerJS/compatibility.js new file mode 100644 index 0000000..06f54bf --- /dev/null +++ b/source/ViewerJS/compatibility.js @@ -0,0 +1,577 @@ +/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */ +/* Copyright 2012 Mozilla Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* globals VBArray, PDFJS */ + +'use strict'; + +// Initializing PDFJS global object here, it case if we need to change/disable +// some PDF.js features, e.g. range requests +if (typeof PDFJS === 'undefined') { + (typeof window !== 'undefined' ? window : this).PDFJS = {}; +} + +// Checking if the typed arrays are supported +// Support: iOS<6.0 (subarray), IE<10, Android<4.0 +(function checkTypedArrayCompatibility() { + if (typeof Uint8Array !== 'undefined') { + // Support: iOS<6.0 + if (typeof Uint8Array.prototype.subarray === 'undefined') { + Uint8Array.prototype.subarray = function subarray(start, end) { + return new Uint8Array(this.slice(start, end)); + }; + Float32Array.prototype.subarray = function subarray(start, end) { + return new Float32Array(this.slice(start, end)); + }; + } + + // Support: Android<4.1 + if (typeof Float64Array === 'undefined') { + window.Float64Array = Float32Array; + } + return; + } + + function subarray(start, end) { + return new TypedArray(this.slice(start, end)); + } + + function setArrayOffset(array, offset) { + if (arguments.length < 2) { + offset = 0; + } + for (var i = 0, n = array.length; i < n; ++i, ++offset) { + this[offset] = array[i] & 0xFF; + } + } + + function TypedArray(arg1) { + var result, i, n; + if (typeof arg1 === 'number') { + result = []; + for (i = 0; i < arg1; ++i) { + result[i] = 0; + } + } else if ('slice' in arg1) { + result = arg1.slice(0); + } else { + result = []; + for (i = 0, n = arg1.length; i < n; ++i) { + result[i] = arg1[i]; + } + } + + result.subarray = subarray; + result.buffer = result; + result.byteLength = result.length; + result.set = setArrayOffset; + + if (typeof arg1 === 'object' && arg1.buffer) { + result.buffer = arg1.buffer; + } + return result; + } + + window.Uint8Array = TypedArray; + window.Int8Array = TypedArray; + + // we don't need support for set, byteLength for 32-bit array + // so we can use the TypedArray as well + window.Uint32Array = TypedArray; + window.Int32Array = TypedArray; + window.Uint16Array = TypedArray; + window.Float32Array = TypedArray; + window.Float64Array = TypedArray; +})(); + +// URL = URL || webkitURL +// Support: Safari<7, Android 4.2+ +(function normalizeURLObject() { + if (!window.URL) { + window.URL = window.webkitURL; + } +})(); + +// Object.defineProperty()? +// Support: Android<4.0, Safari<5.1 +(function checkObjectDefinePropertyCompatibility() { + if (typeof Object.defineProperty !== 'undefined') { + var definePropertyPossible = true; + try { + // some browsers (e.g. safari) cannot use defineProperty() on DOM objects + // and thus the native version is not sufficient + Object.defineProperty(new Image(), 'id', { value: 'test' }); + // ... another test for android gb browser for non-DOM objects + var Test = function Test() {}; + Test.prototype = { get id() { } }; + Object.defineProperty(new Test(), 'id', + { value: '', configurable: true, enumerable: true, writable: false }); + } catch (e) { + definePropertyPossible = false; + } + if (definePropertyPossible) { + return; + } + } + + Object.defineProperty = function objectDefineProperty(obj, name, def) { + delete obj[name]; + if ('get' in def) { + obj.__defineGetter__(name, def['get']); + } + if ('set' in def) { + obj.__defineSetter__(name, def['set']); + } + if ('value' in def) { + obj.__defineSetter__(name, function objectDefinePropertySetter(value) { + this.__defineGetter__(name, function objectDefinePropertyGetter() { + return value; + }); + return value; + }); + obj[name] = def.value; + } + }; +})(); + + +// No XMLHttpRequest#response? +// Support: IE<11, Android <4.0 +(function checkXMLHttpRequestResponseCompatibility() { + var xhrPrototype = XMLHttpRequest.prototype; + var xhr = new XMLHttpRequest(); + if (!('overrideMimeType' in xhr)) { + // IE10 might have response, but not overrideMimeType + // Support: IE10 + Object.defineProperty(xhrPrototype, 'overrideMimeType', { + value: function xmlHttpRequestOverrideMimeType(mimeType) {} + }); + } + if ('responseType' in xhr) { + return; + } + + // The worker will be using XHR, so we can save time and disable worker. + PDFJS.disableWorker = true; + + Object.defineProperty(xhrPrototype, 'responseType', { + get: function xmlHttpRequestGetResponseType() { + return this._responseType || 'text'; + }, + set: function xmlHttpRequestSetResponseType(value) { + if (value === 'text' || value === 'arraybuffer') { + this._responseType = value; + if (value === 'arraybuffer' && + typeof this.overrideMimeType === 'function') { + this.overrideMimeType('text/plain; charset=x-user-defined'); + } + } + } + }); + + // Support: IE9 + if (typeof VBArray !== 'undefined') { + Object.defineProperty(xhrPrototype, 'response', { + get: function xmlHttpRequestResponseGet() { + if (this.responseType === 'arraybuffer') { + return new Uint8Array(new VBArray(this.responseBody).toArray()); + } else { + return this.responseText; + } + } + }); + return; + } + + Object.defineProperty(xhrPrototype, 'response', { + get: function xmlHttpRequestResponseGet() { + if (this.responseType !== 'arraybuffer') { + return this.responseText; + } + var text = this.responseText; + var i, n = text.length; + var result = new Uint8Array(n); + for (i = 0; i < n; ++i) { + result[i] = text.charCodeAt(i) & 0xFF; + } + return result.buffer; + } + }); +})(); + +// window.btoa (base64 encode function) ? +// Support: IE<10 +(function checkWindowBtoaCompatibility() { + if ('btoa' in window) { + return; + } + + var digits = + 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; + + window.btoa = function windowBtoa(chars) { + var buffer = ''; + var i, n; + for (i = 0, n = chars.length; i < n; i += 3) { + var b1 = chars.charCodeAt(i) & 0xFF; + var b2 = chars.charCodeAt(i + 1) & 0xFF; + var b3 = chars.charCodeAt(i + 2) & 0xFF; + var d1 = b1 >> 2, d2 = ((b1 & 3) << 4) | (b2 >> 4); + var d3 = i + 1 < n ? ((b2 & 0xF) << 2) | (b3 >> 6) : 64; + var d4 = i + 2 < n ? (b3 & 0x3F) : 64; + buffer += (digits.charAt(d1) + digits.charAt(d2) + + digits.charAt(d3) + digits.charAt(d4)); + } + return buffer; + }; +})(); + +// window.atob (base64 encode function)? +// Support: IE<10 +(function checkWindowAtobCompatibility() { + if ('atob' in window) { + return; + } + + // https://github.com/davidchambers/Base64.js + var digits = + 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; + window.atob = function (input) { + input = input.replace(/=+$/, ''); + if (input.length % 4 === 1) { + throw new Error('bad atob input'); + } + for ( + // initialize result and counters + var bc = 0, bs, buffer, idx = 0, output = ''; + // get next character + buffer = input.charAt(idx++); + // character found in table? + // initialize bit storage and add its ascii value + ~buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer, + // and if not first of each 4 characters, + // convert the first 8 bits to one ascii character + bc++ % 4) ? output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0 + ) { + // try to find character in table (0-63, not found => -1) + buffer = digits.indexOf(buffer); + } + return output; + }; +})(); + +// Function.prototype.bind? +// Support: Android<4.0, iOS<6.0 +(function checkFunctionPrototypeBindCompatibility() { + if (typeof Function.prototype.bind !== 'undefined') { + return; + } + + Function.prototype.bind = function functionPrototypeBind(obj) { + var fn = this, headArgs = Array.prototype.slice.call(arguments, 1); + var bound = function functionPrototypeBindBound() { + var args = headArgs.concat(Array.prototype.slice.call(arguments)); + return fn.apply(obj, args); + }; + return bound; + }; +})(); + +// HTMLElement dataset property +// Support: IE<11, Safari<5.1, Android<4.0 +(function checkDatasetProperty() { + var div = document.createElement('div'); + if ('dataset' in div) { + return; // dataset property exists + } + + Object.defineProperty(HTMLElement.prototype, 'dataset', { + get: function() { + if (this._dataset) { + return this._dataset; + } + + var dataset = {}; + for (var j = 0, jj = this.attributes.length; j < jj; j++) { + var attribute = this.attributes[j]; + if (attribute.name.substring(0, 5) !== 'data-') { + continue; + } + var key = attribute.name.substring(5).replace(/\-([a-z])/g, + function(all, ch) { + return ch.toUpperCase(); + }); + dataset[key] = attribute.value; + } + + Object.defineProperty(this, '_dataset', { + value: dataset, + writable: false, + enumerable: false + }); + return dataset; + }, + enumerable: true + }); +})(); + +// HTMLElement classList property +// Support: IE<10, Android<4.0, iOS<5.0 +(function checkClassListProperty() { + var div = document.createElement('div'); + if ('classList' in div) { + return; // classList property exists + } + + function changeList(element, itemName, add, remove) { + var s = element.className || ''; + var list = s.split(/\s+/g); + if (list[0] === '') { + list.shift(); + } + var index = list.indexOf(itemName); + if (index < 0 && add) { + list.push(itemName); + } + if (index >= 0 && remove) { + list.splice(index, 1); + } + element.className = list.join(' '); + return (index >= 0); + } + + var classListPrototype = { + add: function(name) { + changeList(this.element, name, true, false); + }, + contains: function(name) { + return changeList(this.element, name, false, false); + }, + remove: function(name) { + changeList(this.element, name, false, true); + }, + toggle: function(name) { + changeList(this.element, name, true, true); + } + }; + + Object.defineProperty(HTMLElement.prototype, 'classList', { + get: function() { + if (this._classList) { + return this._classList; + } + + var classList = Object.create(classListPrototype, { + element: { + value: this, + writable: false, + enumerable: true + } + }); + Object.defineProperty(this, '_classList', { + value: classList, + writable: false, + enumerable: false + }); + return classList; + }, + enumerable: true + }); +})(); + +// Check console compatibility +// In older IE versions the console object is not available +// unless console is open. +// Support: IE<10 +(function checkConsoleCompatibility() { + if (!('console' in window)) { + window.console = { + log: function() {}, + error: function() {}, + warn: function() {} + }; + } else if (!('bind' in console.log)) { + // native functions in IE9 might not have bind + console.log = (function(fn) { + return function(msg) { return fn(msg); }; + })(console.log); + console.error = (function(fn) { + return function(msg) { return fn(msg); }; + })(console.error); + console.warn = (function(fn) { + return function(msg) { return fn(msg); }; + })(console.warn); + } +})(); + +// Check onclick compatibility in Opera +// Support: Opera<15 +(function checkOnClickCompatibility() { + // workaround for reported Opera bug DSK-354448: + // onclick fires on disabled buttons with opaque content + function ignoreIfTargetDisabled(event) { + if (isDisabled(event.target)) { + event.stopPropagation(); + } + } + function isDisabled(node) { + return node.disabled || (node.parentNode && isDisabled(node.parentNode)); + } + if (navigator.userAgent.indexOf('Opera') !== -1) { + // use browser detection since we cannot feature-check this bug + document.addEventListener('click', ignoreIfTargetDisabled, true); + } +})(); + +// Checks if possible to use URL.createObjectURL() +// Support: IE +(function checkOnBlobSupport() { + // sometimes IE loosing the data created with createObjectURL(), see #3977 + if (navigator.userAgent.indexOf('Trident') >= 0) { + PDFJS.disableCreateObjectURL = true; + } +})(); + +// Checks if navigator.language is supported +(function checkNavigatorLanguage() { + if ('language' in navigator) { + return; + } + PDFJS.locale = navigator.userLanguage || 'en-US'; +})(); + +(function checkRangeRequests() { + // Safari has issues with cached range requests see: + // https://github.com/mozilla/pdf.js/issues/3260 + // Last tested with version 6.0.4. + // Support: Safari 6.0+ + var isSafari = Object.prototype.toString.call( + window.HTMLElement).indexOf('Constructor') > 0; + + // Older versions of Android (pre 3.0) has issues with range requests, see: + // https://github.com/mozilla/pdf.js/issues/3381. + // Make sure that we only match webkit-based Android browsers, + // since Firefox/Fennec works as expected. + // Support: Android<3.0 + var regex = /Android\s[0-2][^\d]/; + var isOldAndroid = regex.test(navigator.userAgent); + + // Range requests are broken in Chrome 39 and 40, https://crbug.com/442318 + var isChromeWithRangeBug = /Chrome\/(39|40)\./.test(navigator.userAgent); + + if (isSafari || isOldAndroid || isChromeWithRangeBug) { + PDFJS.disableRange = true; + PDFJS.disableStream = true; + } +})(); + +// Check if the browser supports manipulation of the history. +// Support: IE<10, Android<4.2 +(function checkHistoryManipulation() { + // Android 2.x has so buggy pushState support that it was removed in + // Android 3.0 and restored as late as in Android 4.2. + // Support: Android 2.x + if (!history.pushState || navigator.userAgent.indexOf('Android 2.') >= 0) { + PDFJS.disableHistory = true; + } +})(); + +// Support: IE<11, Chrome<21, Android<4.4, Safari<6 +(function checkSetPresenceInImageData() { + // IE < 11 will use window.CanvasPixelArray which lacks set function. + if (window.CanvasPixelArray) { + if (typeof window.CanvasPixelArray.prototype.set !== 'function') { + window.CanvasPixelArray.prototype.set = function(arr) { + for (var i = 0, ii = this.length; i < ii; i++) { + this[i] = arr[i]; + } + }; + } + } else { + // Old Chrome and Android use an inaccessible CanvasPixelArray prototype. + // Because we cannot feature detect it, we rely on user agent parsing. + var polyfill = false, versionMatch; + if (navigator.userAgent.indexOf('Chrom') >= 0) { + versionMatch = navigator.userAgent.match(/Chrom(e|ium)\/([0-9]+)\./); + // Chrome < 21 lacks the set function. + polyfill = versionMatch && parseInt(versionMatch[2]) < 21; + } else if (navigator.userAgent.indexOf('Android') >= 0) { + // Android < 4.4 lacks the set function. + // Android >= 4.4 will contain Chrome in the user agent, + // thus pass the Chrome check above and not reach this block. + polyfill = /Android\s[0-4][^\d]/g.test(navigator.userAgent); + } else if (navigator.userAgent.indexOf('Safari') >= 0) { + versionMatch = navigator.userAgent. + match(/Version\/([0-9]+)\.([0-9]+)\.([0-9]+) Safari\//); + // Safari < 6 lacks the set function. + polyfill = versionMatch && parseInt(versionMatch[1]) < 6; + } + + if (polyfill) { + var contextPrototype = window.CanvasRenderingContext2D.prototype; + contextPrototype._createImageData = contextPrototype.createImageData; + contextPrototype.createImageData = function(w, h) { + var imageData = this._createImageData(w, h); + imageData.data.set = function(arr) { + for (var i = 0, ii = this.length; i < ii; i++) { + this[i] = arr[i]; + } + }; + return imageData; + }; + } + } +})(); + +// Support: IE<10, Android<4.0, iOS +(function checkRequestAnimationFrame() { + function fakeRequestAnimationFrame(callback) { + window.setTimeout(callback, 20); + } + + var isIOS = /(iPad|iPhone|iPod)/g.test(navigator.userAgent); + if (isIOS) { + // requestAnimationFrame on iOS is broken, replacing with fake one. + window.requestAnimationFrame = fakeRequestAnimationFrame; + return; + } + if ('requestAnimationFrame' in window) { + return; + } + window.requestAnimationFrame = + window.mozRequestAnimationFrame || + window.webkitRequestAnimationFrame || + fakeRequestAnimationFrame; +})(); + +(function checkCanvasSizeLimitation() { + var isIOS = /(iPad|iPhone|iPod)/g.test(navigator.userAgent); + var isAndroid = /Android/g.test(navigator.userAgent); + if (isIOS || isAndroid) { + // 5MP + PDFJS.maxCanvasPixels = 5242880; + } +})(); + +// Disable fullscreen support for certain problematic configurations. +// Support: IE11+ (when embedded). +(function checkFullscreenSupport() { + var isEmbeddedIE = (navigator.userAgent.indexOf('Trident') >= 0 && + window.parent !== window); + if (isEmbeddedIE) { + PDFJS.disableFullscreen = true; + } +})(); diff --git a/source/ViewerJS/example.local.css b/source/ViewerJS/example.local.css new file mode 100644 index 0000000..034347d --- /dev/null +++ b/source/ViewerJS/example.local.css @@ -0,0 +1,27 @@ +/* This is just a sample file with CSS rules. You should write your own @font-face declarations + * to add support for your desired fonts. + */ + +@font-face { + font-family: 'Novecentowide Book'; + src: url("/ViewerJS/fonts/Novecentowide-Bold-webfont.eot"); + src: url("/ViewerJS/fonts/Novecentowide-Bold-webfont.eot?#iefix") format("embedded-opentype"), + url("/ViewerJS/fonts/Novecentowide-Bold-webfont.woff") format("woff"), + url("/fonts/Novecentowide-Bold-webfont.ttf") format("truetype"), + url("/fonts/Novecentowide-Bold-webfont.svg#NovecentowideBookBold") format("svg"); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: 'exotica'; + src: url('/ViewerJS/fonts/Exotica-webfont.eot'); + src: url('/ViewerJS/fonts/Exotica-webfont.eot?#iefix') format('embedded-opentype'), + url('/ViewerJS/fonts/Exotica-webfont.woff') format('woff'), + url('/ViewerJS/fonts/Exotica-webfont.ttf') format('truetype'), + url('/ViewerJS/fonts/Exotica-webfont.svg#exoticamedium') format('svg'); + font-weight: normal; + font-style: normal; + +} + diff --git a/source/ViewerJS/images/kogmbh.png b/source/ViewerJS/images/kogmbh.png new file mode 100644 index 0000000000000000000000000000000000000000..00e8f4debdda56ba5a57472b43a23b020080bfa9 GIT binary patch literal 2835 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 literal 0 HcmV?d00001 diff --git a/source/ViewerJS/images/nlnet.png b/source/ViewerJS/images/nlnet.png new file mode 100644 index 0000000000000000000000000000000000000000..e75ab2e8f0c6eb71880badd8ddda46ff676aa49d GIT binary patch literal 5400 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 C6g8m$ literal 0 HcmV?d00001 diff --git a/source/ViewerJS/images/texture.png b/source/ViewerJS/images/texture.png new file mode 100644 index 0000000000000000000000000000000000000000..df00864932368d75024b46b3a1993d0f51f1d59a GIT binary patch literal 2459 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 O5r8?-l2B*lk?>!&x?|k{ literal 0 HcmV?d00001 diff --git a/source/ViewerJS/images/toolbarButton-download.png b/source/ViewerJS/images/toolbarButton-download.png new file mode 100644 index 0000000000000000000000000000000000000000..8676d8e2c2c0bac77cfce486f6f18639a8caa987 GIT binary patch literal 512 zcmV+b0{{JqP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUzqDe$SRCwBaQ%_3*Q4oKtZM6^)ZEG9U zC8O-%O>z}Is24wg34Vg0&(Nh)A4KqyCy|cYNsu~v@z2dmB9tj1uH`lp^J3U`8~E{N z-p=3On^hdg5sIR03L*9Y+kk-hD<6Ofzy>Vo6d1ck4*P?_;4T~v8^TAR$Zf0DN+pxY zdoYJGiL9nW@D^3_!$~5MNL4D8YtWAX>pTG(3u?~~8-RJKR61@po0nw&j-Zf}uM`Re z1IBnHvj;%lW(tv*fb&ZHFIX|iIJtqC9%tO<h(scNaC$&QqtQNAqnD7_;Ufs*;8(ic z?lT-usCPP@cQ{N}M?rT2+vR{2-<WQD&E?wxJ)Oh!g;#=rE5RZbi_KwfY<<MOjquL0 zthw~_O7KHoy<S(-=`_x_qVI@RCX-QXwVKL^_D*1$=B!$+p67D83*1orNAmf+1$Sqm zP-x~(Aom~+XPl2V9*?zRu{hK;El@6(4|QGVoM22FV%n0#X`|6tWwY5Y>0lVf5?1zr z%n1($UyPgb4t7C5rMH$zKiPV#uKO2UXNZ0M7GMAtm#g$qt>3!<0000<MNUMnLSTaC CqvM?b literal 0 HcmV?d00001 diff --git a/source/ViewerJS/images/toolbarButton-fullscreen.png b/source/ViewerJS/images/toolbarButton-fullscreen.png new file mode 100644 index 0000000000000000000000000000000000000000..fa730955054b440a9e32ce282a3361cf13f198fa GIT binary patch literal 491 zcmV<H0Tlj;P)<h;3K|Lk000e1NJLTq000mG000mO1ONa4wfZ;e0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUzjY&j7R47wLQB5yHK@>gp@kF&{Rb5bN zGzijG&{UKVshtpNClNu)%Ekhbw2`1J>Z6HtgGN0xKEhh;{0EDsrSU_qGw%`SWF~jc zxpQak3{VFTy2*App+P}o)NW`Vy70=Y$@eYTjRgDq)}ID15R?~1J&mx+C#(qTX;VcI z7?3B$uiL;R>R}-rT@%F{Q^f$#FZUOjQcfPeZ$<}E18p$$rORXa`Z6Q;=m%OKw=v~i zDrMy^zYYg%xi!g`vmMKrqSFdWO=yItW9DoVJ*XuE>5afFEf*aJP=P8AjY%zNU{t}` z&6S2q!}*1UI~}}%g2r}h|1FKpX|M(R^hMUF<}P<`VJOHX(}C-46~4}~;<03|R$zne zd{Hvx6aP5;bX<T>PIK`>N>asx-f>p5`o;?TlKMQ-6LJb45R#;%<gl>UHjic=P>Ck@ z+{d0AQcWVHUUFA4oxlhWu<(*~7(R)cs(MMk>=;Zw$5hvZ{W->}h6+FUwIhgP8WFVd hn-r{!B2=PuoIg4=n|)8MY<2(u002ovPDHLkV1hfJ)Vlxx literal 0 HcmV?d00001 diff --git a/source/ViewerJS/images/toolbarButton-menuArrows.png b/source/ViewerJS/images/toolbarButton-menuArrows.png new file mode 100644 index 0000000000000000000000000000000000000000..31b06b5af9e548b15e274677b8ecaac1c1d06e77 GIT binary patch literal 237 zcmeAS@N?(olHy`uVBq!ia0vp^>_9BQ!2%=;I@VSLDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9Mg5*Gjv*Y;$q5RA21W%&988AFF7neS9({Y$O^hc-fzNvT zy{kX}UyqMIu=e<Ya|aX(*1Y_`>3{csed~)S6b>9XaCpJd2PXwsj@)uEyTHN9Cd}ro z5XP`c@(2I(zwen39<Jp1<8V~R?6=qd>2I~4ZeZ0+OPe6@{r)uVcjpxtQ<xdGn^l_C l1U4U<bN<W$wuuM%8Gh`M-xS!`BnfmHgQu&X%Q~loCIF<8Tc-d3 literal 0 HcmV?d00001 diff --git a/source/ViewerJS/images/toolbarButton-pageDown.png b/source/ViewerJS/images/toolbarButton-pageDown.png new file mode 100644 index 0000000000000000000000000000000000000000..762ac43e08cf71f688136dd9c391e1eeac8336b6 GIT binary patch literal 353 zcmV-n0iOPeP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0003fNkl<Zc-oDU zu}Z{16h&tv$Rem<VFW?YW?8V>N)i16KOjF~A%cy9L}N?{*aRypMbKt#Y{Wu@^dWzc zB43gw@m?5VSf4XKI1uvgxkJb(Jp(WVYhVPnHDj;=mcX2{j2A`GW>r;L-}l82ZQFh| zO*2i?^oZrQ5>KD9SC-`y<adLQuIoN=085sYW!SzR1i?9^w^{1Ce#U-FIcDhl{vm|d zS@1bi>?f{*0oaG|B7xlwaLz8mj}qKT!aP_teqVs_y##kUGoqtiwOACzF#-<;cM@iX z4qc!Yz$DM}D=cpR1G99rt30p*4zet}M&QN<Gt6oSF2*cLlH?M>P=Y&2{#AlocLCwd zgzqHz&yp|<c_U8=pC#E@636igvB=JnF|o<tj|Wxfd89a300000NkvXXu0mjfHK~&F literal 0 HcmV?d00001 diff --git a/source/ViewerJS/images/toolbarButton-pageUp.png b/source/ViewerJS/images/toolbarButton-pageUp.png new file mode 100644 index 0000000000000000000000000000000000000000..3155b8bd235c642f7f495ed8cff2900069162cfd GIT binary patch literal 344 zcmV-e0jK_nP)<h;3K|Lk000e1NJLTq000mG000mO1ONa4wfZ;e0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUy`bk7VR47w*&pk`SU=)VoyAfVOr6J%V zIKGg<k5$k~2&HSNjv|6C6&fgYadHTRLdoP*mxh*P36iB93NHR8UFEo>CdBw$>ph$U z)hTRj6#q=2*TFhKHzx|6MzWGs8Z{*folGT{Oft!nX+2Ts<wP<`3)yl~O%!?&N+NMZ zvIw_{LdSv3<+WxW7w2|1Lz&4-gV|<C2iiDv=`)h3#E3p!9NJ)DVqxP-Si;4|!o(;) zIg{rS=lt2}*OUC(bJ?i}M<0(e-tw-o>cPHu_w7sJZOjQKt!iL$+`E7GKObZu1M&0Q qn}h0!&|(*d3p}p4q{kr^2K)fvg`AtvZ>v!N0000<MNUMnLSTXmnUQ(` literal 0 HcmV?d00001 diff --git a/source/ViewerJS/images/toolbarButton-presentation.png b/source/ViewerJS/images/toolbarButton-presentation.png new file mode 100644 index 0000000000000000000000000000000000000000..0f224232b8c9445344f1df83bbf17a7ddeb05c74 GIT binary patch literal 4366 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 literal 0 HcmV?d00001 diff --git a/source/ViewerJS/images/toolbarButton-zoomIn.png b/source/ViewerJS/images/toolbarButton-zoomIn.png new file mode 100644 index 0000000000000000000000000000000000000000..670acd93f5324c0f32e37e13d43c31890bdd123a GIT binary patch literal 228 zcmV<A02}{_P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00021Nkl<Zc-pOz zp$bAl5Je5!G?=yvHU*nt6Z{2(|6tN+HCwG>viSpk+<Fhplx2}+o(~T1a(6hev!hbV zApR$4d}A>Ka&^`vn5+K)IU-oAe*-xp*r<O2xkuo4UK$7W4<LK*J822H^Rwa(b<b=| zu+ab31G6nb7F)45PU^2f_TFZ4OOV7wOpTrT3y{6Hnbi9VXCOzOai#tU<cPp`0y!e^ eok02}7{nKK__TCG^~wAI0000<MNUMnLSTYSqh0O* literal 0 HcmV?d00001 diff --git a/source/ViewerJS/images/toolbarButton-zoomOut.png b/source/ViewerJS/images/toolbarButton-zoomOut.png new file mode 100644 index 0000000000000000000000000000000000000000..810fbf9895d5b2de15177d60612d5fab2087010b GIT binary patch literal 143 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`VV*9IAr-gYUfRgXpvdD8$Zf5= z=1uGCcWnh6*Nc?ePuKo-VA18ZxzrMWwDZI?X$#2&CN4W?#|upS)oW&Kk9v^$UG#Gp qcS?wfv+Fe`Il+?x58o@x^8E4lp0QHyUg`s&4Gf;HelF{r5}E)Kcrc&< literal 0 HcmV?d00001 diff --git a/source/ViewerJS/index.html b/source/ViewerJS/index.html new file mode 100644 index 0000000..2eb1fd4 --- /dev/null +++ b/source/ViewerJS/index.html @@ -0,0 +1,145 @@ +<!DOCTYPE html> +<html dir="ltr" lang="en-US"> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> + +<!-- +This is a generated file. DO NOT EDIT. + +Copyright (C) 2012-2015 KO GmbH <copyright@kogmbh.com> + +@licstart +This file is the compiled version of the ViewerJS module. + +ViewerJS is free software: you can redistribute it and/or modify it +under the terms of the GNU Affero General Public License (GNU AGPL) +as published by the Free Software Foundation, either version 3 of +the License, or (at your option) any later version. + +ViewerJS is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with ViewerJS. If not, see <http://www.gnu.org/licenses/>. +@licend + +@source: http://viewerjs.org/ +@source: http://github.com/kogmbh/ViewerJS +--> + + <title>ViewerJS</title> + <!-- If you want to use custom CSS (@font-face rules, for example) you should uncomment + the following reference and use a local.css file for that. See the example.local.css + file for a sample. + <link rel="stylesheet" type="text/css" href="local.css" media="screen"/> + --> + <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0"/> + <script type="text/javascript"> + ////<![CDATA[ +var ODFViewerPlugin_css="@namespace cursor url(urn:webodf:names:cursor);.caret {opacity: 0 !important;}";function ODFViewerPlugin(){function b(b){var a=document.createElement("script");a.async=!1;a.src="./webodf.js";a.type="text/javascript";a.onload=function(){runtime.loadClass("gui.HyperlinkClickHandler");runtime.loadClass("odf.OdfCanvas");runtime.loadClass("ops.Session");runtime.loadClass("gui.CaretManager");runtime.loadClass("gui.HyperlinkTooltipView");runtime.loadClass("gui.SessionController");runtime.loadClass("gui.SvgSelectionView");runtime.loadClass("gui.SelectionViewManager");runtime.loadClass("gui.ShadowCursor"); +runtime.loadClass("gui.SessionView");b()};document.head.appendChild(a);a=document.createElementNS(document.head.namespaceURI,"style");a.setAttribute("media","screen, print, handheld, projection");a.setAttribute("type","text/css");a.appendChild(document.createTextNode(ODFViewerPlugin_css));document.head.appendChild(a)}var r=this,f=null,x=null,s=null,k=null;this.initialize=function(q,a){b(function(){var e,c,b,q,l,z,u,v;x=document.getElementById("canvas");f=new odf.OdfCanvas(x);f.load(a);f.addListener("statereadychange", +function(){s=f.odfContainer().rootElement;k=f.odfContainer().getDocumentType(s);if("text"===k){f.enableAnnotations(!0,!1);e=new ops.Session(f);b=e.getOdtDocument();q=new gui.ShadowCursor(b);c=new gui.SessionController(e,"localuser",q,{});v=c.getEventManager();z=new gui.CaretManager(c,f.getViewport());l=new gui.SelectionViewManager(gui.SvgSelectionView);new gui.SessionView({caretAvatarsInitiallyVisible:!1},"localuser",e,c.getSessionConstraints(),z,l);l.registerCursor(q);u=new gui.HyperlinkTooltipView(f, +c.getHyperlinkClickHandler().getModifier);v.subscribe("mousemove",u.showTooltip);v.subscribe("mouseout",u.hideTooltip);var a=new ops.OpAddMember;a.init({memberid:"localuser",setProperties:{fillName:runtime.tr("Unknown Author"),color:"blue"}});e.enqueue([a]);c.insertLocalCursor()}r.onLoad()})})};this.isSlideshow=function(){return"presentation"===k};this.onLoad=function(){};this.fitToWidth=function(b){f.fitToWidth(b)};this.fitToHeight=function(b){f.fitToHeight(b)};this.fitToPage=function(b,a){f.fitToContainingElement(b, +a)};this.fitSmart=function(b){f.fitSmart(b)};this.getZoomLevel=function(){return f.getZoomLevel()};this.setZoomLevel=function(b){f.setZoomLevel(b)};this.getPages=function(){var b=Array.prototype.slice.call(s.getElementsByTagNameNS("urn:oasis:names:tc:opendocument:xmlns:drawing:1.0","page")),a=[],e,c;for(e=0;e<b.length;e+=1)c=[b[e].getAttribute("draw:name"),b[e]],a.push(c);return a};this.showPage=function(b){f.showPage(b)};this.getPluginName=function(){return"WebODF"};this.getPluginVersion=function(){return"undefined"!== +String(typeof webodf)?webodf.Version:"Unknown"};this.getPluginURL=function(){return"http://webodf.org"}};var PDFViewerPlugin_css=".page {margin: 7px auto 7px auto;position: relative;overflow: hidden;background-clip: content-box;background-color: white;box-shadow: 0px 0px 7px rgba(0, 0, 0, 0.75);-webkit-box-shadow: 0px 0px 7px rgba(0, 0, 0, 0.75);-moz-box-shadow: 0px 0px 7px rgba(0, 0, 0, 0.75);-ms-box-shadow: 0px 0px 7px rgba(0, 0, 0, 0.75);-o-box-shadow: 0px 0px 7px rgba(0, 0, 0, 0.75);}.textLayer {position: absolute;left: 0;top: 0;right: 0;bottom: 0;color: #000;font-family: sans-serif;overflow: hidden;}.textLayer > div {color: transparent;position: absolute;line-height: 1;white-space: pre;cursor: text;}::selection { background:rgba(0,0,255,0.3); }::-moz-selection { background:rgba(0,0,255,0.3); }";function PDFViewerPlugin(){function b(d,a){var b=document.createElement("script");b.async=!1;b.src=d;b.type="text/javascript";b.onload=a||b.onload;document.getElementsByTagName("head")[0].appendChild(b)}function r(d){var a;b("./compatibility.js",function(){b("./pdf.js");b("./ui_utils.js");b("./text_layer_builder.js");b("./pdfjsversion.js",d)});a=document.createElementNS(document.head.namespaceURI,"style");a.setAttribute("media","screen, print, handheld, projection");a.setAttribute("type","text/css"); +a.appendChild(document.createTextNode(PDFViewerPlugin_css));document.head.appendChild(a)}function f(d){if("none"===d.style.display)return!1;var a=u.scrollTop,b=a+u.clientHeight,c=d.offsetTop;d=c+d.clientHeight;return c>=a&&c<b||d>=a&&d<b||c<a&&d>=b}function x(d,a,b){var e=c[d.pageIndex],f=e.getElementsByTagName("canvas")[0],h=e.getElementsByTagName("div")[0],k="scale("+g+", "+g+")";e.style.width=a+"px";e.style.height=b+"px";f.width=a;f.height=b;h.style.width=a+"px";h.style.height=b+"px";CustomStyle.setProp("transform", +h,k);CustomStyle.setProp("transformOrigin",h,"0% 0%");t[d.pageIndex]=t[d.pageIndex]===l.RUNNING?l.RUNNINGOUTDATED:l.BLANK}function s(d){var a,b;t[d.pageIndex]===l.BLANK&&(t[d.pageIndex]=l.RUNNING,a=c[d.pageIndex],b=B[d.pageIndex],a=a.getElementsByTagName("canvas")[0],d.render({canvasContext:a.getContext("2d"),textLayer:b,viewport:d.getViewport(g)}).promise.then(function(){t[d.pageIndex]===l.RUNNINGOUTDATED?(t[d.pageIndex]=l.BLANK,s(d)):t[d.pageIndex]=l.FINISHED}))}function k(){var d=!a.isSlideshow(); +c.forEach(function(a){d&&(a.style.display="block");u.appendChild(a)});a.showPage(1);a.onLoad()}function q(d){var a,b,f,m,h,n;a=d.pageIndex+1;n=d.getViewport(g);h=document.createElement("div");h.id="pageContainer"+a;h.className="page";h.style.display="none";m=document.createElement("canvas");m.id="canvas"+a;b=document.createElement("div");b.className="textLayer";b.id="textLayer"+a;h.appendChild(m);h.appendChild(b);e[d.pageIndex]=d;c[d.pageIndex]=h;t[d.pageIndex]=l.BLANK;x(d,n.width,n.height);y<n.width&& +(y=n.width);w<n.height&&(w=n.height);n.width<n.height&&(p=!1);f=new TextLayerBuilder({textLayerDiv:b,viewport:n,pageIndex:a-1});d.getTextContent().then(function(a){f.setTextContent(a);f.render(z)});B[d.pageIndex]=f;E+=1;E===v.numPages&&k()}var a=this,e=[],c=[],B=[],t=[],l={BLANK:0,RUNNING:1,FINISHED:2,RUNNINGOUTDATED:3},z=200,u=null,v=null,p=!0,g=1,A=1,y=0,w=0,E=0;this.initialize=function(a,b){var c;r(function(){PDFJS.workerSrc="./pdf.worker.js";PDFJS.getDocument(b).then(function(b){v=b;u=a;for(c= +0;c<v.numPages;c+=1)v.getPage(c+1).then(q)})})};this.isSlideshow=function(){return p};this.onLoad=function(){};this.getPages=function(){return c};this.fitToWidth=function(d){y!==d&&(d/=y,a.setZoomLevel(d))};this.fitToHeight=function(d){w!==d&&(d/=w,a.setZoomLevel(d))};this.fitToPage=function(d,b){var c=d/y;b/w<c&&(c=b/w);a.setZoomLevel(c)};this.fitSmart=function(d,b){var c=d/y;b&&b/w<c&&(c=b/w);c=Math.min(1,c);a.setZoomLevel(c)};this.setZoomLevel=function(a){var b;if(g!==a)for(g=a,a=0;a<e.length;a+= +1)b=e[a].getViewport(g),x(e[a],b.width,b.height)};this.getZoomLevel=function(){return g};this.onScroll=function(){var a;for(a=0;a<c.length;a+=1)f(c[a])&&s(e[a])};this.getPageInView=function(){var b;if(a.isSlideshow())return A;for(b=0;b<c.length;b+=1)if(f(c[b]))return b+1};this.showPage=function(b){a.isSlideshow()?(c[A-1].style.display="none",A=b,s(e[b-1]),c[b-1].style.display="block"):(b=c[b-1],b.parentNode.scrollTop=b.offsetTop)};this.getPluginName=function(){return"PDF.js"};this.getPluginVersion= +function(){return"undefined"!==String(typeof pdfjs_version)?pdfjs_version:"From Source"};this.getPluginURL=function(){return"https://github.com/mozilla/pdf.js/"}};var ViewerJS_version="0.5.8";var viewer_css="* {padding: 0;margin: 0;}html > body {font-family: sans-serif;overflow: hidden;}.titlebar > span,.toolbarLabel,input,button,select {font: message-box;}#titlebar {position: absolute;z-index: 2;top: 0px;left: 0px;height: 32px;width: 100%;overflow: hidden;-webkit-box-shadow: 0px 1px 3px rgba(50, 50, 50, 0.75);-moz-box-shadow: 0px 1px 3px rgba(50, 50, 50, 0.75);box-shadow: 0px 1px 3px rgba(50, 50, 50, 0.75);background-image: url(images/texture.png), linear-gradient(rgba(69, 69, 69, .95), rgba(82, 82, 82, .99));background-image: url(images/texture.png), -webkit-linear-gradient(rgba(69, 69, 69, .95), rgba(82, 82, 82, .99));background-image: url(images/texture.png), -moz-linear-gradient(rgba(69, 69, 69, .95), rgba(82, 82, 82, .99));background-image: url(images/texture.png), -ms-linear-gradient(rgba(69, 69, 69, .95), rgba(82, 82, 82, .99));background-image: url(images/texture.png), -o-linear-gradient(rgba(69, 69, 69, .95), rgba(82, 82, 82, .99));}#titlebar a, #aboutDialog a, #titlebar a:visited, #aboutDialog a:visited {color: #ccc;}#documentName {margin-right: 10px;margin-left: 10px;margin-top: 8px;color: #F2F2F2;line-height: 14px;font-family: sans-serif;}#documentName {font-size: 14px;}#toolbarContainer {position: absolute;z-index: 2;bottom: 0px;left: 0px;height: 32px;width: 100%;overflow: hidden;-webkit-box-shadow: 0px -1px 3px rgba(50, 50, 50, 0.75);-moz-box-shadow: 0px -1px 3px rgba(50, 50, 50, 0.75);box-shadow: 0px -1px 3px rgba(50, 50, 50, 0.75);background-image: url(images/texture.png), linear-gradient(rgba(82, 82, 82, .99), rgba(69, 69, 69, .95));background-image: url(images/texture.png), -webkit-linear-gradient(rgba(82, 82, 82, .99), rgba(69, 69, 69, .95));background-image: url(images/texture.png), -moz-linear-gradient(rgba(82, 82, 82, .99), rgba(69, 69, 69, .95));background-image: url(images/texture.png), -ms-linear-gradient(rgba(82, 82, 82, .99), rgba(69, 69, 69, .95));background-image: url(images/texture.png), -o-linear-gradient(rgba(82, 82, 82, .99), rgba(69, 69, 69, .95));}#toolbar {position: relative;}#toolbarMiddleContainer, #toolbarLeft {visibility: hidden;}html[dir='ltr'] #toolbarLeft {margin-left: -1px;}html[dir='rtl'] #toolbarRight,html[dir='rtl'] #titlebarRight {margin-left: -1px;}html[dir='ltr'] #toolbarLeft,html[dir='rtl'] #toolbarRight,html[dir='rtl'] #titlebarRight {position: absolute;top: 0;left: 0;}html[dir='rtl'] #toolbarLeft,html[dir='ltr'] #toolbarRight,html[dir='ltr'] #titlebarRight {position: absolute;top: 0;right: 0;}html[dir='ltr'] #toolbarLeft > *,html[dir='ltr'] #toolbarMiddle > *,html[dir='ltr'] #toolbarRight > *,html[dir='ltr'] #titlebarRight > * {float: left;}html[dir='rtl'] #toolbarLeft > *,html[dir='rtl'] #toolbarMiddle > *,html[dir='rtl'] #toolbarRight > *,html[dir='rtl'] #titlebarRight > * {float: right;}html[dir='ltr'] .outerCenter {float: right;position: relative;right: 50%;}html[dir='rtl'] .outerCenter {float: left;position: relative;left: 50%;}html[dir='ltr'] .innerCenter {float: right;position: relative;right: -50%;}html[dir='rtl'] .innerCenter {float: left;position: relative;left: -50%;}html[dir='ltr'] .splitToolbarButton {margin: 3px 2px 4px 0;display: inline-block;}html[dir='rtl'] .splitToolbarButton {margin: 3px 0 4px 2px;display: inline-block;}html[dir='ltr'] .splitToolbarButton > .toolbarButton {border-radius: 0;float: left;}html[dir='rtl'] .splitToolbarButton > .toolbarButton {border-radius: 0;float: right;}.splitToolbarButton.toggled .toolbarButton {margin: 0;}.toolbarButton {border: 0 none;background-color: rgba(0, 0, 0, 0);min-width: 32px;height: 25px;border-radius: 2px;background-image: none;}html[dir='ltr'] .toolbarButton,html[dir='ltr'] .dropdownToolbarButton {margin: 3px 2px 4px 0;}html[dir='rtl'] .toolbarButton,html[dir='rtl'] .dropdownToolbarButton {margin: 3px 0 4px 2px;}.toolbarButton:hover,.toolbarButton:focus,.dropdownToolbarButton {background-color: hsla(0,0%,0%,.12);background-image: linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));background-image: -webkit-linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));background-image: -moz-linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));background-image: -ms-linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));background-image: -o-linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));background-clip: padding-box;border: 1px solid hsla(0,0%,0%,.35);border-color: hsla(0,0%,0%,.32) hsla(0,0%,0%,.38) hsla(0,0%,0%,.42);box-shadow: 0 1px 0 hsla(0,0%,100%,.05) inset,0 0 1px hsla(0,0%,100%,.15) inset,0 1px 0 hsla(0,0%,100%,.05);}.toolbarButton:hover:active,.dropdownToolbarButton:hover:active {background-color: hsla(0,0%,0%,.2);background-image: linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));background-image: -webkit-linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));background-image: -moz-linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));background-image: -ms-linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));background-image: -o-linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));border-color: hsla(0,0%,0%,.35) hsla(0,0%,0%,.4) hsla(0,0%,0%,.45);box-shadow: 0 1px 1px hsla(0,0%,0%,.1) inset,0 0 1px hsla(0,0%,0%,.2) inset,0 1px 0 hsla(0,0%,100%,.05);}.splitToolbarButton:hover > .toolbarButton,.splitToolbarButton:focus > .toolbarButton,.splitToolbarButton.toggled > .toolbarButton,.toolbarButton.textButton {background-color: hsla(0,0%,0%,.12);background-image: -webkit-linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));background-image: -moz-linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));background-image: -ms-linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));background-image: -o-linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));background-image: linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));background-clip: padding-box;border: 1px solid hsla(0,0%,0%,.35);border-color: hsla(0,0%,0%,.32) hsla(0,0%,0%,.38) hsla(0,0%,0%,.42);box-shadow: 0 1px 0 hsla(0,0%,100%,.05) inset,0 0 1px hsla(0,0%,100%,.15) inset,0 1px 0 hsla(0,0%,100%,.05);-webkit-transition-property: background-color, border-color, box-shadow;-webkit-transition-duration: 150ms;-webkit-transition-timing-function: ease;-moz-transition-property: background-color, border-color, box-shadow;-moz-transition-duration: 150ms;-moz-transition-timing-function: ease;-ms-transition-property: background-color, border-color, box-shadow;-ms-transition-duration: 150ms;-ms-transition-timing-function: ease;-o-transition-property: background-color, border-color, box-shadow;-o-transition-duration: 150ms;-o-transition-timing-function: ease;transition-property: background-color, border-color, box-shadow;transition-duration: 150ms;transition-timing-function: ease;}.splitToolbarButton > .toolbarButton:hover,.splitToolbarButton > .toolbarButton:focus,.dropdownToolbarButton:hover,.toolbarButton.textButton:hover,.toolbarButton.textButton:focus {background-color: hsla(0,0%,0%,.2);box-shadow: 0 1px 0 hsla(0,0%,100%,.05) inset,0 0 1px hsla(0,0%,100%,.15) inset,0 0 1px hsla(0,0%,0%,.05);z-index: 199;}.splitToolbarButton:hover > .toolbarButton,.splitToolbarButton:focus > .toolbarButton,.splitToolbarButton.toggled > .toolbarButton,.toolbarButton.textButton {background-color: hsla(0,0%,0%,.12);background-image: -webkit-linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));background-image: -moz-linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));background-image: -ms-linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));background-image: -o-linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));background-image: linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));background-clip: padding-box;border: 1px solid hsla(0,0%,0%,.35);border-color: hsla(0,0%,0%,.32) hsla(0,0%,0%,.38) hsla(0,0%,0%,.42);box-shadow: 0 1px 0 hsla(0,0%,100%,.05) inset,0 0 1px hsla(0,0%,100%,.15) inset,0 1px 0 hsla(0,0%,100%,.05);-webkit-transition-property: background-color, border-color, box-shadow;-webkit-transition-duration: 150ms;-webkit-transition-timing-function: ease;-moz-transition-property: background-color, border-color, box-shadow;-moz-transition-duration: 150ms;-moz-transition-timing-function: ease;-ms-transition-property: background-color, border-color, box-shadow;-ms-transition-duration: 150ms;-ms-transition-timing-function: ease;-o-transition-property: background-color, border-color, box-shadow;-o-transition-duration: 150ms;-o-transition-timing-function: ease;transition-property: background-color, border-color, box-shadow;transition-duration: 150ms;transition-timing-function: ease;}.splitToolbarButton > .toolbarButton:hover,.splitToolbarButton > .toolbarButton:focus,.dropdownToolbarButton:hover,.toolbarButton.textButton:hover,.toolbarButton.textButton:focus {background-color: hsla(0,0%,0%,.2);box-shadow: 0 1px 0 hsla(0,0%,100%,.05) inset,0 0 1px hsla(0,0%,100%,.15) inset,0 0 1px hsla(0,0%,0%,.05);z-index: 199;}.dropdownToolbarButton {border: 1px solid #333 !important;}.toolbarButton,.dropdownToolbarButton {min-width: 16px;padding: 2px 6px 2px;border: 1px solid transparent;border-radius: 2px;color: hsl(0,0%,95%);font-size: 12px;line-height: 14px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;cursor: default;-webkit-transition-property: background-color, border-color, box-shadow;-webkit-transition-duration: 150ms;-webkit-transition-timing-function: ease;-moz-transition-property: background-color, border-color, box-shadow;-moz-transition-duration: 150ms;-moz-transition-timing-function: ease;-ms-transition-property: background-color, border-color, box-shadow;-ms-transition-duration: 150ms;-ms-transition-timing-function: ease;-o-transition-property: background-color, border-color, box-shadow;-o-transition-duration: 150ms;-o-transition-timing-function: ease;transition-property: background-color, border-color, box-shadow;transition-duration: 150ms;transition-timing-function: ease;}html[dir='ltr'] .toolbarButton,html[dir='ltr'] .dropdownToolbarButton {margin: 3px 2px 4px 0;}html[dir='rtl'] .toolbarButton,html[dir='rtl'] .dropdownToolbarButton {margin: 3px 0 4px 2px;}.splitToolbarButton:hover > .splitToolbarButtonSeparator,.splitToolbarButton.toggled > .splitToolbarButtonSeparator {padding: 12px 0;margin: 0;box-shadow: 0 0 0 1px hsla(0,0%,100%,.03);-webkit-transition-property: padding;-webkit-transition-duration: 10ms;-webkit-transition-timing-function: ease;-moz-transition-property: padding;-moz-transition-duration: 10ms;-moz-transition-timing-function: ease;-ms-transition-property: padding;-ms-transition-duration: 10ms;-ms-transition-timing-function: ease;-o-transition-property: padding;-o-transition-duration: 10ms;-o-transition-timing-function: ease;transition-property: padding;transition-duration: 10ms;transition-timing-function: ease;}.toolbarButton.toggled:hover:active,.splitToolbarButton > .toolbarButton:hover:active {background-color: hsla(0,0%,0%,.4);border-color: hsla(0,0%,0%,.4) hsla(0,0%,0%,.5) hsla(0,0%,0%,.55);box-shadow: 0 1px 1px hsla(0,0%,0%,.2) inset,0 0 1px hsla(0,0%,0%,.3) inset,0 1px 0 hsla(0,0%,100%,.05);}html[dir='ltr'] .splitToolbarButton > .toolbarButton:first-child,html[dir='rtl'] .splitToolbarButton > .toolbarButton:last-child {position: relative;margin: 0;margin-left: 4px;margin-right: -1px;border-top-left-radius: 2px;border-bottom-left-radius: 2px;border-right-color: transparent;}html[dir='ltr'] .splitToolbarButton > .toolbarButton:last-child,html[dir='rtl'] .splitToolbarButton > .toolbarButton:first-child {position: relative;margin: 0;margin-left: -1px;border-top-right-radius: 2px;border-bottom-right-radius: 2px;border-left-color: transparent;}.splitToolbarButtonSeparator {padding: 8px 0;width: 1px;background-color: hsla(0,0%,00%,.5);z-index: 99;box-shadow: 0 0 0 1px hsla(0,0%,100%,.08);display: inline-block;margin: 5px 0;}html[dir='ltr'] .splitToolbarButtonSeparator {float:left;}html[dir='rtl'] .splitToolbarButtonSeparator {float:right;}.dropdownToolbarButton {min-width: 120px;max-width: 120px;padding: 4px 2px 4px;overflow: hidden;background: url(images/toolbarButton-menuArrows.png) no-repeat;}.dropdownToolbarButton > select {-webkit-appearance: none;-moz-appearance: none;min-width: 140px;font-size: 12px;color: hsl(0,0%,95%);margin:0;padding:0;border:none;background: rgba(0,0,0,0);}.dropdownToolbarButton > select > option {background: hsl(0,0%,24%);}#pageWidthOption {border-bottom: 1px rgba(255, 255, 255, .5) solid;}html[dir='ltr'] .dropdownToolbarButton {background-position: 95%;}html[dir='rtl'] .dropdownToolbarButton {background-position: 5%;}.toolbarButton.fullscreen::before {display: inline-block;content: url(images/toolbarButton-fullscreen.png);}.toolbarButton.presentation::before {display: inline-block;content: url(images/toolbarButton-presentation.png);}.toolbarButton.download::before {display: inline-block;content: url(images/toolbarButton-download.png);}.toolbarButton.about {color: #F2F2F2;font-size: 14px;font-weight: bold;line-height: 14px;font-family: sans-serif;}.toolbarButton.about::before {display: inline-block;}.toolbarButton.zoomOut::before {display: inline-block;content: url(images/toolbarButton-zoomOut.png);}.toolbarButton.zoomIn::before {display: inline-block;content: url(images/toolbarButton-zoomIn.png);}.toolbarButton.pageUp::before {display: inline-block;content: url(images/toolbarButton-pageUp.png);}.toolbarButton.pageDown::before {display: inline-block;content: url(images/toolbarButton-pageDown.png);}.toolbarField.pageNumber {min-width: 16px;text-align: right;width: 40px;}.toolbarField {padding: 3px 6px;margin: 4px 0 4px 0;border: 1px solid transparent;border-radius: 2px;background-color: hsla(0,0%,100%,.09);background-image: -moz-linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));background-clip: padding-box;border: 1px solid hsla(0,0%,0%,.35);border-color: hsla(0,0%,0%,.32) hsla(0,0%,0%,.38) hsla(0,0%,0%,.42);box-shadow: 0 1px 0 hsla(0,0%,0%,.05) inset,0 1px 0 hsla(0,0%,100%,.05);color: hsl(0,0%,95%);font-size: 12px;line-height: 14px;outline-style: none;-moz-transition-property: background-color, border-color, box-shadow;-moz-transition-duration: 150ms;-moz-transition-timing-function: ease;}.toolbarField.pageNumber::-webkit-inner-spin-button,.toolbarField.pageNumber::-webkit-outer-spin-button {-webkit-appearance: none;margin: 0;}.toolbarField:hover {background-color: hsla(0,0%,100%,.11);border-color: hsla(0,0%,0%,.4) hsla(0,0%,0%,.43) hsla(0,0%,0%,.45);}.toolbarField:focus {background-color: hsla(0,0%,100%,.15);border-color: hsla(204,100%,65%,.8) hsla(204,100%,65%,.85) hsla(204,100%,65%,.9);}.toolbarLabel {min-width: 16px;padding: 3px 6px 3px 2px;margin: 4px 2px 4px 0;border: 1px solid transparent;border-radius: 2px;color: hsl(0,0%,85%);font-size: 12px;line-height: 14px;text-align: left;-webkit-user-select:none;-moz-user-select:none;cursor: default;}#canvasContainer {overflow: auto;padding-top: 6px;padding-bottom: 6px;position: absolute;top: 32px;right: 0;bottom: 32px;left: 0;text-align: center;background-color: #888;background-image: url(images/texture.png);}#canvasContainer.slideshow {padding: 0;overflow: hidden;}#canvasContainer.slideshow > * {margin: auto;position: absolute;top: 0;left: 0;right: 0;bottom: 0;}.presentationMode {top: 0 !important;bottom: 0 !important;background-color: black !important;cursor: default !important;}#canvas {box-shadow: 0px 0px 7px rgba(0, 0, 0, 0.75);-webkit-box-shadow: 0px 0px 7px rgba(0, 0, 0, 0.75);-moz-box-shadow: 0px 0px 7px rgba(0, 0, 0, 0.75);-ms-box-shadow: 0px 0px 7px rgba(0, 0, 0, 0.75);-o-box-shadow: 0px 0px 7px rgba(0, 0, 0, 0.75);overflow: hidden;}#sliderContainer {visibility: hidden;}#overlayNavigator {position: absolute;width: 100%;height: 0;top: calc(50% - 50px);background-color: rgba(0, 0, 0, 0);z-index: 3;opacity: 0;-webkit-transition: opacity 1s ease-out;-moz-transition: opacity 1s ease-out;transition: opacity 1s ease-out;}#previousPage {float: left;margin-left: 10px;border-top: 50px solid transparent;border-bottom: 50px solid transparent;border-right: 50px solid black;opacity: 0.5;}#nextPage {float: right;margin-right: 10px;border-top: 50px solid transparent;border-bottom: 50px solid transparent;border-left: 50px solid black;opacity: 0.5;}#previousPage:active {opacity: 0.8;}#nextPage:active {opacity: 0.8;}#overlayCloseButton {position: absolute;top: 10px;right: 10px;z-index: 3;font-size: 35px;color: white;background-color: black;opacity: 0.5;width: 40px;height: 40px;-webkit-border-radius: 20px;-moz-border-radius: 20px;border-radius: 20px;text-align: center;cursor: pointer;display: none;}#overlayCloseButton:active {background-color: red;}#aboutDialogCentererTable {display: table;width:100%;height:100%;}#aboutDialogCentererCell {vertical-align: middle;text-align:center;display: table-cell;}#aboutDialog {width: 280px;background-color: #666;color: white;text-align: center;border-radius: 2px;box-shadow: 0px 1px 6px black;padding: 5px;font-style: sans-serif;display: inline-block;}#aboutDialog h1 {font-size: 25pt;}#aboutDialog p {font-size: 10pt;}#aboutDialog > * {margin: 10px;}#dialogOverlay {position: absolute;left: 0px;top: 0px;width:100%;height:100%;z-index: 3;background-color: rgba(0,0,0,.5);overflow: auto;display: none;}#blanked {display: none;cursor: none;position: absolute;left: 0px;top: 0px;width:100%;height:100%;z-index: 3;}";var viewerTouch_css="#canvasContainer {top: 0;bottom: 0;}#overlayNavigator {height: 100px;pointer-events: none;}#nextPage, #previousPage {pointer-events: all;}#titlebar, #toolbarContainer {background-color: rgba(0, 0, 0, 0.6);background-image: none;-webkit-transition: all 0.5s;-moz-transition: all 0.5s;transition: all 0.5s;}#titlebar {top: -32px;}#titlebar.viewer-touched {top: 0px;}#toolbarContainer {bottom: -32px;}#toolbarContainer.viewer-touched {bottom: 0px;}.viewer-touched {display: block;opacity: 1 !important;}#next, #previous {display: none;}";function Viewer(b,r){function f(){var a,c,d,e,g,f;f="undefined"!==String(typeof ViewerJS_version)?ViewerJS_version:"From Source";b&&(d=b.getPluginName(),e=b.getPluginVersion(),g=b.getPluginURL());a=document.createElement("div");a.id="aboutDialogCentererTable";c=document.createElement("div");c.id="aboutDialogCentererCell";I=document.createElement("div");I.id="aboutDialog";I.innerHTML='<h1>ViewerJS</h1><p>Open Source document viewer for webpages, built with HTML and JavaScript.</p><p>Learn more and get your own copy on the <a href="http://viewerjs.org/" target="_blank">ViewerJS website</a>.</p>'+ +(b?'<p>Using the <a href = "'+g+'" target="_blank">'+d+'</a> (<span id = "pluginVersion">'+e+"</span>) plugin to show you this document.</p>":"")+"<p>Version "+f+'</p><p>Supported by <a href="https://nlnet.nl" target="_blank"><br><img src="images/nlnet.png" width="160" height="60" alt="NLnet Foundation"></a></p><p>Made by <a href="http://kogmbh.com" target="_blank"><br><img src="images/kogmbh.png" width="172" height="40" alt="KO GmbH"></a></p><button id = "aboutDialogCloseButton" class = "toolbarButton textButton">Close</button>'; +K.appendChild(a);a.appendChild(c);c.appendChild(I);a=document.createElement("button");a.id="about";a.className="toolbarButton textButton about";a.title="About";a.innerHTML="ViewerJS";Q.appendChild(a);a.addEventListener("click",function(){K.style.display="block"});document.getElementById("aboutDialogCloseButton").addEventListener("click",function(){K.style.display="none"})}function x(a){var b=R.options,c,d=!1,e;for(e=0;e<b.length;e+=1)c=b[e],c.value!==a?c.selected=!1:d=c.selected=!0;return d}function s(a, +b){if(a!==g.getZoomLevel()){g.setZoomLevel(a);var c=document.createEvent("UIEvents");c.initUIEvent("scalechange",!1,!1,window,0);c.scale=a;c.resetAutoSettings=b;window.dispatchEvent(c)}}function k(){var a;if(b.onScroll)b.onScroll();b.getPageInView&&(a=b.getPageInView())&&(F=a,document.getElementById("pageNumber").value=a)}function q(a){window.clearTimeout(M);M=window.setTimeout(function(){k()},a)}function a(a,c){var d,e;if(d="custom"===a?parseFloat(document.getElementById("customScaleOption").textContent)/ +100:parseFloat(a))s(d,!0);else{d=h.clientWidth-A;e=h.clientHeight-A;switch(a){case "page-actual":s(1,c);break;case "page-width":b.fitToWidth(d);break;case "page-height":b.fitToHeight(e);break;case "page-fit":b.fitToPage(d,e);break;case "auto":b.isSlideshow()?b.fitToPage(d+A,e+A):b.fitSmart(d)}x(a)}q(300)}function e(a){var b;return-1!==["auto","page-actual","page-width"].indexOf(a)?a:(b=parseFloat(a))&&y<=b&&b<=w?a:E}function c(a){a=parseInt(a,10);return isNaN(a)?1:a}function B(){D=!D;d&&!D&&g.togglePresentationMode()} +function t(){if(d||b.isSlideshow())n.className="viewer-touched",window.clearTimeout(N),N=window.setTimeout(function(){n.className=""},5E3)}function l(){C.classList.add("viewer-touched");G.classList.add("viewer-touched");window.clearTimeout(O);O=window.setTimeout(function(){z()},5E3)}function z(){C.classList.remove("viewer-touched");G.classList.remove("viewer-touched")}function u(){C.classList.contains("viewer-touched")?z():l()}function v(a){blanked.style.display="block";blanked.style.backgroundColor= +a;z()}function p(a,b){var c=document.getElementById(a);c.addEventListener("click",function(){b();c.blur()})}var g=this,A=40,y=0.25,w=4,E="auto",d=!1,D=!1,L=!1,J,m=document.getElementById("viewer"),h=document.getElementById("canvasContainer"),n=document.getElementById("overlayNavigator"),C=document.getElementById("titlebar"),G=document.getElementById("toolbarContainer"),P=document.getElementById("toolbarLeft"),S=document.getElementById("toolbarMiddleContainer"),R=document.getElementById("scaleSelect"), +K=document.getElementById("dialogOverlay"),Q=document.getElementById("toolbarRight"),I,H=[],F,M,N,O;this.initialize=function(){var d;d=e(r.zoom);J=r.documentUrl;document.title=r.title;var f=document.getElementById("documentName");f.innerHTML="";f.appendChild(f.ownerDocument.createTextNode(r.title));b.onLoad=function(){document.getElementById("pluginVersion").innerHTML=b.getPluginVersion();b.isSlideshow()?(h.classList.add("slideshow"),P.style.visibility="visible"):(S.style.visibility="visible",b.getPageInView&& +(P.style.visibility="visible"));L=!0;H=b.getPages();document.getElementById("numPages").innerHTML="of "+H.length;g.showPage(c(r.startpage));a(d);h.onscroll=k;q()};b.initialize(h,J)};this.showPage=function(a){0>=a?a=1:a>H.length&&(a=H.length);b.showPage(a);F=a;document.getElementById("pageNumber").value=F};this.showNextPage=function(){g.showPage(F+1)};this.showPreviousPage=function(){g.showPage(F-1)};this.download=function(){var a=J.split("#")[0];window.open(a+"#viewer.action=download","_parent")}; +this.toggleFullScreen=function(){D?document.exitFullscreen?document.exitFullscreen():document.cancelFullScreen?document.cancelFullScreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitExitFullscreen?document.webkitExitFullscreen():document.webkitCancelFullScreen?document.webkitCancelFullScreen():document.msExitFullscreen&&document.msExitFullscreen():m.requestFullscreen?m.requestFullscreen():m.mozRequestFullScreen?m.mozRequestFullScreen():m.webkitRequestFullscreen?m.webkitRequestFullscreen(): +m.webkitRequestFullScreen?m.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT):m.msRequestFullscreen&&m.msRequestFullscreen()};this.togglePresentationMode=function(){var b=document.getElementById("overlayCloseButton");d?("block"===blanked.style.display&&(blanked.style.display="none",u()),C.style.display=G.style.display="block",b.style.display="none",h.classList.remove("presentationMode"),h.onmouseup=function(){},h.oncontextmenu=function(){},h.onmousedown=function(){},a("auto")):(C.style.display= +G.style.display="none",b.style.display="block",h.classList.add("presentationMode"),h.onmousedown=function(a){a.preventDefault()},h.oncontextmenu=function(a){a.preventDefault()},h.onmouseup=function(a){a.preventDefault();1===a.which?g.showNextPage():g.showPreviousPage()},a("page-fit"));d=!d};this.getZoomLevel=function(){return b.getZoomLevel()};this.setZoomLevel=function(a){b.setZoomLevel(a)};this.zoomOut=function(){var b=(g.getZoomLevel()/1.1).toFixed(2),b=Math.max(y,b);a(b,!0)};this.zoomIn=function(){var b= +(1.1*g.getZoomLevel()).toFixed(2),b=Math.min(w,b);a(b,!0)};(function(){f();b&&(g.initialize(),document.exitFullscreen||document.cancelFullScreen||document.mozCancelFullScreen||document.webkitExitFullscreen||document.webkitCancelFullScreen||document.msExitFullscreen||(document.getElementById("fullscreen").style.visibility="hidden",document.getElementById("presentation").style.visibility="hidden"),p("overlayCloseButton",g.toggleFullScreen),p("fullscreen",g.toggleFullScreen),p("presentation",function(){D|| +g.toggleFullScreen();g.togglePresentationMode()}),document.addEventListener("fullscreenchange",B),document.addEventListener("webkitfullscreenchange",B),document.addEventListener("mozfullscreenchange",B),document.addEventListener("MSFullscreenChange",B),p("download",g.download),p("zoomOut",g.zoomOut),p("zoomIn",g.zoomIn),p("previous",g.showPreviousPage),p("next",g.showNextPage),p("previousPage",g.showPreviousPage),p("nextPage",g.showNextPage),document.getElementById("pageNumber").addEventListener("change", +function(){g.showPage(this.value)}),document.getElementById("scaleSelect").addEventListener("change",function(){a(this.value)}),h.addEventListener("click",t),n.addEventListener("click",t),h.addEventListener("click",u),C.addEventListener("click",l),G.addEventListener("click",l),window.addEventListener("scalechange",function(a){var b=document.getElementById("customScaleOption"),c=x(String(a.scale));b.selected=!1;c||(b.textContent=Math.round(1E4*a.scale)/100+"%",b.selected=!0)},!0),window.addEventListener("resize", +function(b){L&&(document.getElementById("pageWidthOption").selected||document.getElementById("pageAutoOption").selected)&&a(document.getElementById("scaleSelect").value);t()}),window.addEventListener("keydown",function(a){var b=a.keyCode;a=a.shiftKey;if("block"===blanked.style.display)switch(b){case 16:case 17:case 18:case 91:case 93:case 224:case 225:break;default:blanked.style.display="none",u()}else switch(b){case 8:case 33:case 37:case 38:case 80:g.showPreviousPage();break;case 13:case 34:case 39:case 40:case 78:g.showNextPage(); +break;case 32:a?g.showPreviousPage():g.showNextPage();break;case 66:case 190:d&&v("#000");break;case 87:case 188:d&&v("#FFF");break;case 36:g.showPage(1);break;case 35:g.showPage(H.length)}}))})()};(function(){function b(a,b){var c=new XMLHttpRequest;c.onreadystatechange=function(){var a,f;4===c.readyState&&((200<=c.status&&300>c.status||0===c.status)&&(a=c.getResponseHeader("content-type"))&&q.some(function(b){return b.supportsMimetype(a)?(f=b,console.log("Found plugin by mimetype and xhr head: "+a),!0):!1}),b(f))};c.open("HEAD",a,!0);c.send()}function r(a){var b;q.some(function(c){return c.supportsFileExtension(a)?(b=c,!0):!1});return b}function f(a){var b=r(a);b&&console.log("Found plugin by parameter type: "+ +a);return b}function x(a){a=a.split("?")[0].split(".").pop();var b=r(a);b&&console.log("Found plugin by file extension from path: "+a);return b}function s(a){var b={};(a.search||"?").substr(1).split("&").forEach(function(a){a&&(a=a.split("=",2),b[decodeURIComponent(a[0])]=decodeURIComponent(a[1]))});return b}var k,q=[function(){var a="application/vnd.oasis.opendocument.text application/vnd.oasis.opendocument.text-flat-xml application/vnd.oasis.opendocument.text-template application/vnd.oasis.opendocument.presentation application/vnd.oasis.opendocument.presentation-flat-xml application/vnd.oasis.opendocument.presentation-template application/vnd.oasis.opendocument.spreadsheet application/vnd.oasis.opendocument.spreadsheet-flat-xml application/vnd.oasis.opendocument.spreadsheet-template".split(" "), +b="odt fodt ott odp fodp otp ods fods ots".split(" ");return{supportsMimetype:function(b){return-1!==a.indexOf(b)},supportsFileExtension:function(a){return-1!==b.indexOf(a)},path:"./ODFViewerPlugin",getClass:function(){return ODFViewerPlugin}}}(),{supportsMimetype:function(a){return"application/pdf"===a},supportsFileExtension:function(a){return"pdf"===a},path:"./PDFViewerPlugin",getClass:function(){return PDFViewerPlugin}}];window.onload=function(){var a=document.location.hash.substring(1),e=s(document.location), +c;a?(e.title||(e.title=a.replace(/^.*[\\\/]/,"")),e.documentUrl=a,b(a,function(b){b||(b=e.type?f(e.type):x(a));b?"undefined"!==String(typeof loadPlugin)?loadPlugin(b.path,function(){c=b.getClass();new Viewer(new c,e)}):(c=b.getClass(),new Viewer(new c,e)):new Viewer})):new Viewer};k=document.createElementNS(document.head.namespaceURI,"style");k.setAttribute("media","screen");k.setAttribute("type","text/css");k.appendChild(document.createTextNode(viewer_css));document.head.appendChild(k);k=document.createElementNS(document.head.namespaceURI, +"style");k.setAttribute("media","only screen and (max-device-width: 800px) and (max-device-height: 800px)");k.setAttribute("type","text/css");k.setAttribute("viewerTouch","1");k.appendChild(document.createTextNode(viewerTouch_css));document.head.appendChild(k)})(); + +//]]> + </script> + </head> + + <body> + <div id = "viewer"> + <div id = "titlebar"> + <div id = "documentName"></div> + <div id = "titlebarRight"> + <button id = "presentation" class = "toolbarButton presentation" title = "Presentation"></button> + <button id = "fullscreen" class = "toolbarButton fullscreen" title = "Fullscreen"></button> + <button id = "download" class = "toolbarButton download" title = "Download"></button> + </div> + </div> + <div id = "toolbarContainer"> + <div id = "toolbar"> + <div id = "toolbarLeft"> + <div id = "navButtons" class = "splitToolbarButton"> + <button id = "previous" class = "toolbarButton pageUp" title = "Previous Page"></button> + <div class="splitToolbarButtonSeparator"></div> + <button id = "next" class = "toolbarButton pageDown" title = "Next Page"></button> + </div> + <label id = "pageNumberLabel" class = "toolbarLabel" for = "pageNumber">Page:</label> + <input type = "number" id = "pageNumber" class = "toolbarField pageNumber"/> + <span id = "numPages" class = "toolbarLabel"></span> + </div> + <div id = "toolbarMiddleContainer" class = "outerCenter"> + <div id = "toolbarMiddle" class = "innerCenter"> + <div id = 'zoomButtons' class = "splitToolbarButton"> + <button id = "zoomOut" class = "toolbarButton zoomOut" title = "Zoom Out"></button> + <div class="splitToolbarButtonSeparator"></div> + <button id = "zoomIn" class = "toolbarButton zoomIn" title = "Zoom In"></button> + </div> + <span id="scaleSelectContainer" class="dropdownToolbarButton"> + <select id="scaleSelect" title="Zoom" oncontextmenu="return false;"> + <option id="pageAutoOption" value="auto" selected>Automatic</option> + <option id="pageActualOption" value="page-actual">Actual Size</option> + <option id="pageWidthOption" value="page-width">Full Width</option> + <option id="customScaleOption" value="custom"> </option> + <option value="0.5">50%</option> + <option value="0.75">75%</option> + <option value="1">100%</option> + <option value="1.25">125%</option> + <option value="1.5">150%</option> + <option value="2">200%</option> + </select> + </span> + <div id = "sliderContainer"> + <div id = "slider"></div> + </div> + </div> + </div> + <div id = "toolbarRight"> + </div> + </div> + </div> + <div id = "canvasContainer"> + <div id = "canvas"></div> + </div> + <div id = "overlayNavigator"> + <div id = "previousPage"></div> + <div id = "nextPage"></div> + </div> + <div id = "overlayCloseButton"> + ✖ + </div> + <div id = "dialogOverlay"></div> + <div id = "blanked"></div> + </div> + </body> +</html> diff --git a/source/ViewerJS/pdf.js b/source/ViewerJS/pdf.js new file mode 100644 index 0000000..463d7d0 --- /dev/null +++ b/source/ViewerJS/pdf.js @@ -0,0 +1,8052 @@ +/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */ +/* Copyright 2012 Mozilla Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/*jshint globalstrict: false */ +/* globals PDFJS */ + +// Initializing PDFJS global object (if still undefined) +if (typeof PDFJS === 'undefined') { + (typeof window !== 'undefined' ? window : this).PDFJS = {}; +} + +PDFJS.version = '1.1.114'; +PDFJS.build = '3fd44fd'; + +(function pdfjsWrapper() { + // Use strict in our context only - users might not want it + 'use strict'; + +/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */ +/* Copyright 2012 Mozilla Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* globals Cmd, ColorSpace, Dict, MozBlobBuilder, Name, PDFJS, Ref, URL, + Promise */ + +'use strict'; + +var globalScope = (typeof window === 'undefined') ? this : window; + +var isWorker = (typeof window === 'undefined'); + +var FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0]; + +var TextRenderingMode = { + FILL: 0, + STROKE: 1, + FILL_STROKE: 2, + INVISIBLE: 3, + FILL_ADD_TO_PATH: 4, + STROKE_ADD_TO_PATH: 5, + FILL_STROKE_ADD_TO_PATH: 6, + ADD_TO_PATH: 7, + FILL_STROKE_MASK: 3, + ADD_TO_PATH_FLAG: 4 +}; + +var ImageKind = { + GRAYSCALE_1BPP: 1, + RGB_24BPP: 2, + RGBA_32BPP: 3 +}; + +var AnnotationType = { + WIDGET: 1, + TEXT: 2, + LINK: 3 +}; + +var StreamType = { + UNKNOWN: 0, + FLATE: 1, + LZW: 2, + DCT: 3, + JPX: 4, + JBIG: 5, + A85: 6, + AHX: 7, + CCF: 8, + RL: 9 +}; + +var FontType = { + UNKNOWN: 0, + TYPE1: 1, + TYPE1C: 2, + CIDFONTTYPE0: 3, + CIDFONTTYPE0C: 4, + TRUETYPE: 5, + CIDFONTTYPE2: 6, + TYPE3: 7, + OPENTYPE: 8, + TYPE0: 9, + MMTYPE1: 10 +}; + +// The global PDFJS object exposes the API +// In production, it will be declared outside a global wrapper +// In development, it will be declared here +if (!globalScope.PDFJS) { + globalScope.PDFJS = {}; +} + +globalScope.PDFJS.pdfBug = false; + +PDFJS.VERBOSITY_LEVELS = { + errors: 0, + warnings: 1, + infos: 5 +}; + +// All the possible operations for an operator list. +var OPS = PDFJS.OPS = { + // Intentionally start from 1 so it is easy to spot bad operators that will be + // 0's. + dependency: 1, + setLineWidth: 2, + setLineCap: 3, + setLineJoin: 4, + setMiterLimit: 5, + setDash: 6, + setRenderingIntent: 7, + setFlatness: 8, + setGState: 9, + save: 10, + restore: 11, + transform: 12, + moveTo: 13, + lineTo: 14, + curveTo: 15, + curveTo2: 16, + curveTo3: 17, + closePath: 18, + rectangle: 19, + stroke: 20, + closeStroke: 21, + fill: 22, + eoFill: 23, + fillStroke: 24, + eoFillStroke: 25, + closeFillStroke: 26, + closeEOFillStroke: 27, + endPath: 28, + clip: 29, + eoClip: 30, + beginText: 31, + endText: 32, + setCharSpacing: 33, + setWordSpacing: 34, + setHScale: 35, + setLeading: 36, + setFont: 37, + setTextRenderingMode: 38, + setTextRise: 39, + moveText: 40, + setLeadingMoveText: 41, + setTextMatrix: 42, + nextLine: 43, + showText: 44, + showSpacedText: 45, + nextLineShowText: 46, + nextLineSetSpacingShowText: 47, + setCharWidth: 48, + setCharWidthAndBounds: 49, + setStrokeColorSpace: 50, + setFillColorSpace: 51, + setStrokeColor: 52, + setStrokeColorN: 53, + setFillColor: 54, + setFillColorN: 55, + setStrokeGray: 56, + setFillGray: 57, + setStrokeRGBColor: 58, + setFillRGBColor: 59, + setStrokeCMYKColor: 60, + setFillCMYKColor: 61, + shadingFill: 62, + beginInlineImage: 63, + beginImageData: 64, + endInlineImage: 65, + paintXObject: 66, + markPoint: 67, + markPointProps: 68, + beginMarkedContent: 69, + beginMarkedContentProps: 70, + endMarkedContent: 71, + beginCompat: 72, + endCompat: 73, + paintFormXObjectBegin: 74, + paintFormXObjectEnd: 75, + beginGroup: 76, + endGroup: 77, + beginAnnotations: 78, + endAnnotations: 79, + beginAnnotation: 80, + endAnnotation: 81, + paintJpegXObject: 82, + paintImageMaskXObject: 83, + paintImageMaskXObjectGroup: 84, + paintImageXObject: 85, + paintInlineImageXObject: 86, + paintInlineImageXObjectGroup: 87, + paintImageXObjectRepeat: 88, + paintImageMaskXObjectRepeat: 89, + paintSolidColorImageMask: 90, + constructPath: 91 +}; + +// A notice for devs. These are good for things that are helpful to devs, such +// as warning that Workers were disabled, which is important to devs but not +// end users. +function info(msg) { + if (PDFJS.verbosity >= PDFJS.VERBOSITY_LEVELS.infos) { + console.log('Info: ' + msg); + } +} + +// Non-fatal warnings. +function warn(msg) { + if (PDFJS.verbosity >= PDFJS.VERBOSITY_LEVELS.warnings) { + console.log('Warning: ' + msg); + } +} + +// Fatal errors that should trigger the fallback UI and halt execution by +// throwing an exception. +function error(msg) { + if (PDFJS.verbosity >= PDFJS.VERBOSITY_LEVELS.errors) { + console.log('Error: ' + msg); + console.log(backtrace()); + } + UnsupportedManager.notify(UNSUPPORTED_FEATURES.unknown); + throw new Error(msg); +} + +function backtrace() { + try { + throw new Error(); + } catch (e) { + return e.stack ? e.stack.split('\n').slice(2).join('\n') : ''; + } +} + +function assert(cond, msg) { + if (!cond) { + error(msg); + } +} + +var UNSUPPORTED_FEATURES = PDFJS.UNSUPPORTED_FEATURES = { + unknown: 'unknown', + forms: 'forms', + javaScript: 'javaScript', + smask: 'smask', + shadingPattern: 'shadingPattern', + font: 'font' +}; + +var UnsupportedManager = PDFJS.UnsupportedManager = + (function UnsupportedManagerClosure() { + var listeners = []; + return { + listen: function (cb) { + listeners.push(cb); + }, + notify: function (featureId) { + warn('Unsupported feature "' + featureId + '"'); + for (var i = 0, ii = listeners.length; i < ii; i++) { + listeners[i](featureId); + } + } + }; +})(); + +// Combines two URLs. The baseUrl shall be absolute URL. If the url is an +// absolute URL, it will be returned as is. +function combineUrl(baseUrl, url) { + if (!url) { + return baseUrl; + } + if (/^[a-z][a-z0-9+\-.]*:/i.test(url)) { + return url; + } + var i; + if (url.charAt(0) === '/') { + // absolute path + i = baseUrl.indexOf('://'); + if (url.charAt(1) === '/') { + ++i; + } else { + i = baseUrl.indexOf('/', i + 3); + } + return baseUrl.substring(0, i) + url; + } else { + // relative path + var pathLength = baseUrl.length; + i = baseUrl.lastIndexOf('#'); + pathLength = i >= 0 ? i : pathLength; + i = baseUrl.lastIndexOf('?', pathLength); + pathLength = i >= 0 ? i : pathLength; + var prefixLength = baseUrl.lastIndexOf('/', pathLength); + return baseUrl.substring(0, prefixLength + 1) + url; + } +} + +// Validates if URL is safe and allowed, e.g. to avoid XSS. +function isValidUrl(url, allowRelative) { + if (!url) { + return false; + } + // RFC 3986 (http://tools.ietf.org/html/rfc3986#section-3.1) + // scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." ) + var protocol = /^[a-z][a-z0-9+\-.]*(?=:)/i.exec(url); + if (!protocol) { + return allowRelative; + } + protocol = protocol[0].toLowerCase(); + switch (protocol) { + case 'http': + case 'https': + case 'ftp': + case 'mailto': + case 'tel': + return true; + default: + return false; + } +} +PDFJS.isValidUrl = isValidUrl; + +function shadow(obj, prop, value) { + Object.defineProperty(obj, prop, { value: value, + enumerable: true, + configurable: true, + writable: false }); + return value; +} +PDFJS.shadow = shadow; + +var PasswordResponses = PDFJS.PasswordResponses = { + NEED_PASSWORD: 1, + INCORRECT_PASSWORD: 2 +}; + +var PasswordException = (function PasswordExceptionClosure() { + function PasswordException(msg, code) { + this.name = 'PasswordException'; + this.message = msg; + this.code = code; + } + + PasswordException.prototype = new Error(); + PasswordException.constructor = PasswordException; + + return PasswordException; +})(); +PDFJS.PasswordException = PasswordException; + +var UnknownErrorException = (function UnknownErrorExceptionClosure() { + function UnknownErrorException(msg, details) { + this.name = 'UnknownErrorException'; + this.message = msg; + this.details = details; + } + + UnknownErrorException.prototype = new Error(); + UnknownErrorException.constructor = UnknownErrorException; + + return UnknownErrorException; +})(); +PDFJS.UnknownErrorException = UnknownErrorException; + +var InvalidPDFException = (function InvalidPDFExceptionClosure() { + function InvalidPDFException(msg) { + this.name = 'InvalidPDFException'; + this.message = msg; + } + + InvalidPDFException.prototype = new Error(); + InvalidPDFException.constructor = InvalidPDFException; + + return InvalidPDFException; +})(); +PDFJS.InvalidPDFException = InvalidPDFException; + +var MissingPDFException = (function MissingPDFExceptionClosure() { + function MissingPDFException(msg) { + this.name = 'MissingPDFException'; + this.message = msg; + } + + MissingPDFException.prototype = new Error(); + MissingPDFException.constructor = MissingPDFException; + + return MissingPDFException; +})(); +PDFJS.MissingPDFException = MissingPDFException; + +var UnexpectedResponseException = + (function UnexpectedResponseExceptionClosure() { + function UnexpectedResponseException(msg, status) { + this.name = 'UnexpectedResponseException'; + this.message = msg; + this.status = status; + } + + UnexpectedResponseException.prototype = new Error(); + UnexpectedResponseException.constructor = UnexpectedResponseException; + + return UnexpectedResponseException; +})(); +PDFJS.UnexpectedResponseException = UnexpectedResponseException; + +var NotImplementedException = (function NotImplementedExceptionClosure() { + function NotImplementedException(msg) { + this.message = msg; + } + + NotImplementedException.prototype = new Error(); + NotImplementedException.prototype.name = 'NotImplementedException'; + NotImplementedException.constructor = NotImplementedException; + + return NotImplementedException; +})(); + +var MissingDataException = (function MissingDataExceptionClosure() { + function MissingDataException(begin, end) { + this.begin = begin; + this.end = end; + this.message = 'Missing data [' + begin + ', ' + end + ')'; + } + + MissingDataException.prototype = new Error(); + MissingDataException.prototype.name = 'MissingDataException'; + MissingDataException.constructor = MissingDataException; + + return MissingDataException; +})(); + +var XRefParseException = (function XRefParseExceptionClosure() { + function XRefParseException(msg) { + this.message = msg; + } + + XRefParseException.prototype = new Error(); + XRefParseException.prototype.name = 'XRefParseException'; + XRefParseException.constructor = XRefParseException; + + return XRefParseException; +})(); + + +function bytesToString(bytes) { + assert(bytes !== null && typeof bytes === 'object' && + bytes.length !== undefined, 'Invalid argument for bytesToString'); + var length = bytes.length; + var MAX_ARGUMENT_COUNT = 8192; + if (length < MAX_ARGUMENT_COUNT) { + return String.fromCharCode.apply(null, bytes); + } + var strBuf = []; + for (var i = 0; i < length; i += MAX_ARGUMENT_COUNT) { + var chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length); + var chunk = bytes.subarray(i, chunkEnd); + strBuf.push(String.fromCharCode.apply(null, chunk)); + } + return strBuf.join(''); +} + +function stringToBytes(str) { + assert(typeof str === 'string', 'Invalid argument for stringToBytes'); + var length = str.length; + var bytes = new Uint8Array(length); + for (var i = 0; i < length; ++i) { + bytes[i] = str.charCodeAt(i) & 0xFF; + } + return bytes; +} + +function string32(value) { + return String.fromCharCode((value >> 24) & 0xff, (value >> 16) & 0xff, + (value >> 8) & 0xff, value & 0xff); +} + +function log2(x) { + var n = 1, i = 0; + while (x > n) { + n <<= 1; + i++; + } + return i; +} + +function readInt8(data, start) { + return (data[start] << 24) >> 24; +} + +function readUint16(data, offset) { + return (data[offset] << 8) | data[offset + 1]; +} + +function readUint32(data, offset) { + return ((data[offset] << 24) | (data[offset + 1] << 16) | + (data[offset + 2] << 8) | data[offset + 3]) >>> 0; +} + +// Lazy test the endianness of the platform +// NOTE: This will be 'true' for simulated TypedArrays +function isLittleEndian() { + var buffer8 = new Uint8Array(2); + buffer8[0] = 1; + var buffer16 = new Uint16Array(buffer8.buffer); + return (buffer16[0] === 1); +} + +Object.defineProperty(PDFJS, 'isLittleEndian', { + configurable: true, + get: function PDFJS_isLittleEndian() { + return shadow(PDFJS, 'isLittleEndian', isLittleEndian()); + } +}); + +//#if !(FIREFOX || MOZCENTRAL || B2G || CHROME) +//// Lazy test if the userAgant support CanvasTypedArrays +function hasCanvasTypedArrays() { + var canvas = document.createElement('canvas'); + canvas.width = canvas.height = 1; + var ctx = canvas.getContext('2d'); + var imageData = ctx.createImageData(1, 1); + return (typeof imageData.data.buffer !== 'undefined'); +} + +Object.defineProperty(PDFJS, 'hasCanvasTypedArrays', { + configurable: true, + get: function PDFJS_hasCanvasTypedArrays() { + return shadow(PDFJS, 'hasCanvasTypedArrays', hasCanvasTypedArrays()); + } +}); + +var Uint32ArrayView = (function Uint32ArrayViewClosure() { + + function Uint32ArrayView(buffer, length) { + this.buffer = buffer; + this.byteLength = buffer.length; + this.length = length === undefined ? (this.byteLength >> 2) : length; + ensureUint32ArrayViewProps(this.length); + } + Uint32ArrayView.prototype = Object.create(null); + + var uint32ArrayViewSetters = 0; + function createUint32ArrayProp(index) { + return { + get: function () { + var buffer = this.buffer, offset = index << 2; + return (buffer[offset] | (buffer[offset + 1] << 8) | + (buffer[offset + 2] << 16) | (buffer[offset + 3] << 24)) >>> 0; + }, + set: function (value) { + var buffer = this.buffer, offset = index << 2; + buffer[offset] = value & 255; + buffer[offset + 1] = (value >> 8) & 255; + buffer[offset + 2] = (value >> 16) & 255; + buffer[offset + 3] = (value >>> 24) & 255; + } + }; + } + + function ensureUint32ArrayViewProps(length) { + while (uint32ArrayViewSetters < length) { + Object.defineProperty(Uint32ArrayView.prototype, + uint32ArrayViewSetters, + createUint32ArrayProp(uint32ArrayViewSetters)); + uint32ArrayViewSetters++; + } + } + + return Uint32ArrayView; +})(); +//#else +//PDFJS.hasCanvasTypedArrays = true; +//#endif + +var IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0]; + +var Util = PDFJS.Util = (function UtilClosure() { + function Util() {} + + var rgbBuf = ['rgb(', 0, ',', 0, ',', 0, ')']; + + // makeCssRgb() can be called thousands of times. Using |rgbBuf| avoids + // creating many intermediate strings. + Util.makeCssRgb = function Util_makeCssRgb(r, g, b) { + rgbBuf[1] = r; + rgbBuf[3] = g; + rgbBuf[5] = b; + return rgbBuf.join(''); + }; + + // Concatenates two transformation matrices together and returns the result. + Util.transform = function Util_transform(m1, m2) { + return [ + m1[0] * m2[0] + m1[2] * m2[1], + m1[1] * m2[0] + m1[3] * m2[1], + m1[0] * m2[2] + m1[2] * m2[3], + m1[1] * m2[2] + m1[3] * m2[3], + m1[0] * m2[4] + m1[2] * m2[5] + m1[4], + m1[1] * m2[4] + m1[3] * m2[5] + m1[5] + ]; + }; + + // For 2d affine transforms + Util.applyTransform = function Util_applyTransform(p, m) { + var xt = p[0] * m[0] + p[1] * m[2] + m[4]; + var yt = p[0] * m[1] + p[1] * m[3] + m[5]; + return [xt, yt]; + }; + + Util.applyInverseTransform = function Util_applyInverseTransform(p, m) { + var d = m[0] * m[3] - m[1] * m[2]; + var xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d; + var yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d; + return [xt, yt]; + }; + + // Applies the transform to the rectangle and finds the minimum axially + // aligned bounding box. + Util.getAxialAlignedBoundingBox = + function Util_getAxialAlignedBoundingBox(r, m) { + + var p1 = Util.applyTransform(r, m); + var p2 = Util.applyTransform(r.slice(2, 4), m); + var p3 = Util.applyTransform([r[0], r[3]], m); + var p4 = Util.applyTransform([r[2], r[1]], m); + return [ + Math.min(p1[0], p2[0], p3[0], p4[0]), + Math.min(p1[1], p2[1], p3[1], p4[1]), + Math.max(p1[0], p2[0], p3[0], p4[0]), + Math.max(p1[1], p2[1], p3[1], p4[1]) + ]; + }; + + Util.inverseTransform = function Util_inverseTransform(m) { + var d = m[0] * m[3] - m[1] * m[2]; + return [m[3] / d, -m[1] / d, -m[2] / d, m[0] / d, + (m[2] * m[5] - m[4] * m[3]) / d, (m[4] * m[1] - m[5] * m[0]) / d]; + }; + + // Apply a generic 3d matrix M on a 3-vector v: + // | a b c | | X | + // | d e f | x | Y | + // | g h i | | Z | + // M is assumed to be serialized as [a,b,c,d,e,f,g,h,i], + // with v as [X,Y,Z] + Util.apply3dTransform = function Util_apply3dTransform(m, v) { + return [ + m[0] * v[0] + m[1] * v[1] + m[2] * v[2], + m[3] * v[0] + m[4] * v[1] + m[5] * v[2], + m[6] * v[0] + m[7] * v[1] + m[8] * v[2] + ]; + }; + + // This calculation uses Singular Value Decomposition. + // The SVD can be represented with formula A = USV. We are interested in the + // matrix S here because it represents the scale values. + Util.singularValueDecompose2dScale = + function Util_singularValueDecompose2dScale(m) { + + var transpose = [m[0], m[2], m[1], m[3]]; + + // Multiply matrix m with its transpose. + var a = m[0] * transpose[0] + m[1] * transpose[2]; + var b = m[0] * transpose[1] + m[1] * transpose[3]; + var c = m[2] * transpose[0] + m[3] * transpose[2]; + var d = m[2] * transpose[1] + m[3] * transpose[3]; + + // Solve the second degree polynomial to get roots. + var first = (a + d) / 2; + var second = Math.sqrt((a + d) * (a + d) - 4 * (a * d - c * b)) / 2; + var sx = first + second || 1; + var sy = first - second || 1; + + // Scale values are the square roots of the eigenvalues. + return [Math.sqrt(sx), Math.sqrt(sy)]; + }; + + // Normalize rectangle rect=[x1, y1, x2, y2] so that (x1,y1) < (x2,y2) + // For coordinate systems whose origin lies in the bottom-left, this + // means normalization to (BL,TR) ordering. For systems with origin in the + // top-left, this means (TL,BR) ordering. + Util.normalizeRect = function Util_normalizeRect(rect) { + var r = rect.slice(0); // clone rect + if (rect[0] > rect[2]) { + r[0] = rect[2]; + r[2] = rect[0]; + } + if (rect[1] > rect[3]) { + r[1] = rect[3]; + r[3] = rect[1]; + } + return r; + }; + + // Returns a rectangle [x1, y1, x2, y2] corresponding to the + // intersection of rect1 and rect2. If no intersection, returns 'false' + // The rectangle coordinates of rect1, rect2 should be [x1, y1, x2, y2] + Util.intersect = function Util_intersect(rect1, rect2) { + function compare(a, b) { + return a - b; + } + + // Order points along the axes + var orderedX = [rect1[0], rect1[2], rect2[0], rect2[2]].sort(compare), + orderedY = [rect1[1], rect1[3], rect2[1], rect2[3]].sort(compare), + result = []; + + rect1 = Util.normalizeRect(rect1); + rect2 = Util.normalizeRect(rect2); + + // X: first and second points belong to different rectangles? + if ((orderedX[0] === rect1[0] && orderedX[1] === rect2[0]) || + (orderedX[0] === rect2[0] && orderedX[1] === rect1[0])) { + // Intersection must be between second and third points + result[0] = orderedX[1]; + result[2] = orderedX[2]; + } else { + return false; + } + + // Y: first and second points belong to different rectangles? + if ((orderedY[0] === rect1[1] && orderedY[1] === rect2[1]) || + (orderedY[0] === rect2[1] && orderedY[1] === rect1[1])) { + // Intersection must be between second and third points + result[1] = orderedY[1]; + result[3] = orderedY[2]; + } else { + return false; + } + + return result; + }; + + Util.sign = function Util_sign(num) { + return num < 0 ? -1 : 1; + }; + + Util.appendToArray = function Util_appendToArray(arr1, arr2) { + Array.prototype.push.apply(arr1, arr2); + }; + + Util.prependToArray = function Util_prependToArray(arr1, arr2) { + Array.prototype.unshift.apply(arr1, arr2); + }; + + Util.extendObj = function extendObj(obj1, obj2) { + for (var key in obj2) { + obj1[key] = obj2[key]; + } + }; + + Util.getInheritableProperty = function Util_getInheritableProperty(dict, + name) { + while (dict && !dict.has(name)) { + dict = dict.get('Parent'); + } + if (!dict) { + return null; + } + return dict.get(name); + }; + + Util.inherit = function Util_inherit(sub, base, prototype) { + sub.prototype = Object.create(base.prototype); + sub.prototype.constructor = sub; + for (var prop in prototype) { + sub.prototype[prop] = prototype[prop]; + } + }; + + Util.loadScript = function Util_loadScript(src, callback) { + var script = document.createElement('script'); + var loaded = false; + script.setAttribute('src', src); + if (callback) { + script.onload = function() { + if (!loaded) { + callback(); + } + loaded = true; + }; + } + document.getElementsByTagName('head')[0].appendChild(script); + }; + + return Util; +})(); + +/** + * PDF page viewport created based on scale, rotation and offset. + * @class + * @alias PDFJS.PageViewport + */ +var PageViewport = PDFJS.PageViewport = (function PageViewportClosure() { + /** + * @constructor + * @private + * @param viewBox {Array} xMin, yMin, xMax and yMax coordinates. + * @param scale {number} scale of the viewport. + * @param rotation {number} rotations of the viewport in degrees. + * @param offsetX {number} offset X + * @param offsetY {number} offset Y + * @param dontFlip {boolean} if true, axis Y will not be flipped. + */ + function PageViewport(viewBox, scale, rotation, offsetX, offsetY, dontFlip) { + this.viewBox = viewBox; + this.scale = scale; + this.rotation = rotation; + this.offsetX = offsetX; + this.offsetY = offsetY; + + // creating transform to convert pdf coordinate system to the normal + // canvas like coordinates taking in account scale and rotation + var centerX = (viewBox[2] + viewBox[0]) / 2; + var centerY = (viewBox[3] + viewBox[1]) / 2; + var rotateA, rotateB, rotateC, rotateD; + rotation = rotation % 360; + rotation = rotation < 0 ? rotation + 360 : rotation; + switch (rotation) { + case 180: + rotateA = -1; rotateB = 0; rotateC = 0; rotateD = 1; + break; + case 90: + rotateA = 0; rotateB = 1; rotateC = 1; rotateD = 0; + break; + case 270: + rotateA = 0; rotateB = -1; rotateC = -1; rotateD = 0; + break; + //case 0: + default: + rotateA = 1; rotateB = 0; rotateC = 0; rotateD = -1; + break; + } + + if (dontFlip) { + rotateC = -rotateC; rotateD = -rotateD; + } + + var offsetCanvasX, offsetCanvasY; + var width, height; + if (rotateA === 0) { + offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX; + offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY; + width = Math.abs(viewBox[3] - viewBox[1]) * scale; + height = Math.abs(viewBox[2] - viewBox[0]) * scale; + } else { + offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX; + offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY; + width = Math.abs(viewBox[2] - viewBox[0]) * scale; + height = Math.abs(viewBox[3] - viewBox[1]) * scale; + } + // creating transform for the following operations: + // translate(-centerX, -centerY), rotate and flip vertically, + // scale, and translate(offsetCanvasX, offsetCanvasY) + this.transform = [ + rotateA * scale, + rotateB * scale, + rotateC * scale, + rotateD * scale, + offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY, + offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY + ]; + + this.width = width; + this.height = height; + this.fontScale = scale; + } + PageViewport.prototype = /** @lends PDFJS.PageViewport.prototype */ { + /** + * Clones viewport with additional properties. + * @param args {Object} (optional) If specified, may contain the 'scale' or + * 'rotation' properties to override the corresponding properties in + * the cloned viewport. + * @returns {PDFJS.PageViewport} Cloned viewport. + */ + clone: function PageViewPort_clone(args) { + args = args || {}; + var scale = 'scale' in args ? args.scale : this.scale; + var rotation = 'rotation' in args ? args.rotation : this.rotation; + return new PageViewport(this.viewBox.slice(), scale, rotation, + this.offsetX, this.offsetY, args.dontFlip); + }, + /** + * Converts PDF point to the viewport coordinates. For examples, useful for + * converting PDF location into canvas pixel coordinates. + * @param x {number} X coordinate. + * @param y {number} Y coordinate. + * @returns {Object} Object that contains 'x' and 'y' properties of the + * point in the viewport coordinate space. + * @see {@link convertToPdfPoint} + * @see {@link convertToViewportRectangle} + */ + convertToViewportPoint: function PageViewport_convertToViewportPoint(x, y) { + return Util.applyTransform([x, y], this.transform); + }, + /** + * Converts PDF rectangle to the viewport coordinates. + * @param rect {Array} xMin, yMin, xMax and yMax coordinates. + * @returns {Array} Contains corresponding coordinates of the rectangle + * in the viewport coordinate space. + * @see {@link convertToViewportPoint} + */ + convertToViewportRectangle: + function PageViewport_convertToViewportRectangle(rect) { + var tl = Util.applyTransform([rect[0], rect[1]], this.transform); + var br = Util.applyTransform([rect[2], rect[3]], this.transform); + return [tl[0], tl[1], br[0], br[1]]; + }, + /** + * Converts viewport coordinates to the PDF location. For examples, useful + * for converting canvas pixel location into PDF one. + * @param x {number} X coordinate. + * @param y {number} Y coordinate. + * @returns {Object} Object that contains 'x' and 'y' properties of the + * point in the PDF coordinate space. + * @see {@link convertToViewportPoint} + */ + convertToPdfPoint: function PageViewport_convertToPdfPoint(x, y) { + return Util.applyInverseTransform([x, y], this.transform); + } + }; + return PageViewport; +})(); + +var PDFStringTranslateTable = [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x2D8, 0x2C7, 0x2C6, 0x2D9, 0x2DD, 0x2DB, 0x2DA, 0x2DC, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014, + 0x2013, 0x192, 0x2044, 0x2039, 0x203A, 0x2212, 0x2030, 0x201E, 0x201C, + 0x201D, 0x2018, 0x2019, 0x201A, 0x2122, 0xFB01, 0xFB02, 0x141, 0x152, 0x160, + 0x178, 0x17D, 0x131, 0x142, 0x153, 0x161, 0x17E, 0, 0x20AC +]; + +function stringToPDFString(str) { + var i, n = str.length, strBuf = []; + if (str[0] === '\xFE' && str[1] === '\xFF') { + // UTF16BE BOM + for (i = 2; i < n; i += 2) { + strBuf.push(String.fromCharCode( + (str.charCodeAt(i) << 8) | str.charCodeAt(i + 1))); + } + } else { + for (i = 0; i < n; ++i) { + var code = PDFStringTranslateTable[str.charCodeAt(i)]; + strBuf.push(code ? String.fromCharCode(code) : str.charAt(i)); + } + } + return strBuf.join(''); +} + +function stringToUTF8String(str) { + return decodeURIComponent(escape(str)); +} + +function isEmptyObj(obj) { + for (var key in obj) { + return false; + } + return true; +} + +function isBool(v) { + return typeof v === 'boolean'; +} + +function isInt(v) { + return typeof v === 'number' && ((v | 0) === v); +} + +function isNum(v) { + return typeof v === 'number'; +} + +function isString(v) { + return typeof v === 'string'; +} + +function isName(v) { + return v instanceof Name; +} + +function isCmd(v, cmd) { + return v instanceof Cmd && (cmd === undefined || v.cmd === cmd); +} + +function isDict(v, type) { + if (!(v instanceof Dict)) { + return false; + } + if (!type) { + return true; + } + var dictType = v.get('Type'); + return isName(dictType) && dictType.name === type; +} + +function isArray(v) { + return v instanceof Array; +} + +function isStream(v) { + return typeof v === 'object' && v !== null && v.getBytes !== undefined; +} + +function isArrayBuffer(v) { + return typeof v === 'object' && v !== null && v.byteLength !== undefined; +} + +function isRef(v) { + return v instanceof Ref; +} + +/** + * Promise Capability object. + * + * @typedef {Object} PromiseCapability + * @property {Promise} promise - A promise object. + * @property {function} resolve - Fullfills the promise. + * @property {function} reject - Rejects the promise. + */ + +/** + * Creates a promise capability object. + * @alias PDFJS.createPromiseCapability + * + * @return {PromiseCapability} A capability object contains: + * - a Promise, resolve and reject methods. + */ +function createPromiseCapability() { + var capability = {}; + capability.promise = new Promise(function (resolve, reject) { + capability.resolve = resolve; + capability.reject = reject; + }); + return capability; +} + +PDFJS.createPromiseCapability = createPromiseCapability; + +/** + * Polyfill for Promises: + * The following promise implementation tries to generally implement the + * Promise/A+ spec. Some notable differences from other promise libaries are: + * - There currently isn't a seperate deferred and promise object. + * - Unhandled rejections eventually show an error if they aren't handled. + * + * Based off of the work in: + * https://bugzilla.mozilla.org/show_bug.cgi?id=810490 + */ +(function PromiseClosure() { + if (globalScope.Promise) { + // Promises existing in the DOM/Worker, checking presence of all/resolve + if (typeof globalScope.Promise.all !== 'function') { + globalScope.Promise.all = function (iterable) { + var count = 0, results = [], resolve, reject; + var promise = new globalScope.Promise(function (resolve_, reject_) { + resolve = resolve_; + reject = reject_; + }); + iterable.forEach(function (p, i) { + count++; + p.then(function (result) { + results[i] = result; + count--; + if (count === 0) { + resolve(results); + } + }, reject); + }); + if (count === 0) { + resolve(results); + } + return promise; + }; + } + if (typeof globalScope.Promise.resolve !== 'function') { + globalScope.Promise.resolve = function (value) { + return new globalScope.Promise(function (resolve) { resolve(value); }); + }; + } + if (typeof globalScope.Promise.reject !== 'function') { + globalScope.Promise.reject = function (reason) { + return new globalScope.Promise(function (resolve, reject) { + reject(reason); + }); + }; + } + if (typeof globalScope.Promise.prototype.catch !== 'function') { + globalScope.Promise.prototype.catch = function (onReject) { + return globalScope.Promise.prototype.then(undefined, onReject); + }; + } + return; + } +//#if !MOZCENTRAL + var STATUS_PENDING = 0; + var STATUS_RESOLVED = 1; + var STATUS_REJECTED = 2; + + // In an attempt to avoid silent exceptions, unhandled rejections are + // tracked and if they aren't handled in a certain amount of time an + // error is logged. + var REJECTION_TIMEOUT = 500; + + var HandlerManager = { + handlers: [], + running: false, + unhandledRejections: [], + pendingRejectionCheck: false, + + scheduleHandlers: function scheduleHandlers(promise) { + if (promise._status === STATUS_PENDING) { + return; + } + + this.handlers = this.handlers.concat(promise._handlers); + promise._handlers = []; + + if (this.running) { + return; + } + this.running = true; + + setTimeout(this.runHandlers.bind(this), 0); + }, + + runHandlers: function runHandlers() { + var RUN_TIMEOUT = 1; // ms + var timeoutAt = Date.now() + RUN_TIMEOUT; + while (this.handlers.length > 0) { + var handler = this.handlers.shift(); + + var nextStatus = handler.thisPromise._status; + var nextValue = handler.thisPromise._value; + + try { + if (nextStatus === STATUS_RESOLVED) { + if (typeof handler.onResolve === 'function') { + nextValue = handler.onResolve(nextValue); + } + } else if (typeof handler.onReject === 'function') { + nextValue = handler.onReject(nextValue); + nextStatus = STATUS_RESOLVED; + + if (handler.thisPromise._unhandledRejection) { + this.removeUnhandeledRejection(handler.thisPromise); + } + } + } catch (ex) { + nextStatus = STATUS_REJECTED; + nextValue = ex; + } + + handler.nextPromise._updateStatus(nextStatus, nextValue); + if (Date.now() >= timeoutAt) { + break; + } + } + + if (this.handlers.length > 0) { + setTimeout(this.runHandlers.bind(this), 0); + return; + } + + this.running = false; + }, + + addUnhandledRejection: function addUnhandledRejection(promise) { + this.unhandledRejections.push({ + promise: promise, + time: Date.now() + }); + this.scheduleRejectionCheck(); + }, + + removeUnhandeledRejection: function removeUnhandeledRejection(promise) { + promise._unhandledRejection = false; + for (var i = 0; i < this.unhandledRejections.length; i++) { + if (this.unhandledRejections[i].promise === promise) { + this.unhandledRejections.splice(i); + i--; + } + } + }, + + scheduleRejectionCheck: function scheduleRejectionCheck() { + if (this.pendingRejectionCheck) { + return; + } + this.pendingRejectionCheck = true; + setTimeout(function rejectionCheck() { + this.pendingRejectionCheck = false; + var now = Date.now(); + for (var i = 0; i < this.unhandledRejections.length; i++) { + if (now - this.unhandledRejections[i].time > REJECTION_TIMEOUT) { + var unhandled = this.unhandledRejections[i].promise._value; + var msg = 'Unhandled rejection: ' + unhandled; + if (unhandled.stack) { + msg += '\n' + unhandled.stack; + } + warn(msg); + this.unhandledRejections.splice(i); + i--; + } + } + if (this.unhandledRejections.length) { + this.scheduleRejectionCheck(); + } + }.bind(this), REJECTION_TIMEOUT); + } + }; + + function Promise(resolver) { + this._status = STATUS_PENDING; + this._handlers = []; + try { + resolver.call(this, this._resolve.bind(this), this._reject.bind(this)); + } catch (e) { + this._reject(e); + } + } + /** + * Builds a promise that is resolved when all the passed in promises are + * resolved. + * @param {array} array of data and/or promises to wait for. + * @return {Promise} New dependant promise. + */ + Promise.all = function Promise_all(promises) { + var resolveAll, rejectAll; + var deferred = new Promise(function (resolve, reject) { + resolveAll = resolve; + rejectAll = reject; + }); + var unresolved = promises.length; + var results = []; + if (unresolved === 0) { + resolveAll(results); + return deferred; + } + function reject(reason) { + if (deferred._status === STATUS_REJECTED) { + return; + } + results = []; + rejectAll(reason); + } + for (var i = 0, ii = promises.length; i < ii; ++i) { + var promise = promises[i]; + var resolve = (function(i) { + return function(value) { + if (deferred._status === STATUS_REJECTED) { + return; + } + results[i] = value; + unresolved--; + if (unresolved === 0) { + resolveAll(results); + } + }; + })(i); + if (Promise.isPromise(promise)) { + promise.then(resolve, reject); + } else { + resolve(promise); + } + } + return deferred; + }; + + /** + * Checks if the value is likely a promise (has a 'then' function). + * @return {boolean} true if value is thenable + */ + Promise.isPromise = function Promise_isPromise(value) { + return value && typeof value.then === 'function'; + }; + + /** + * Creates resolved promise + * @param value resolve value + * @returns {Promise} + */ + Promise.resolve = function Promise_resolve(value) { + return new Promise(function (resolve) { resolve(value); }); + }; + + /** + * Creates rejected promise + * @param reason rejection value + * @returns {Promise} + */ + Promise.reject = function Promise_reject(reason) { + return new Promise(function (resolve, reject) { reject(reason); }); + }; + + Promise.prototype = { + _status: null, + _value: null, + _handlers: null, + _unhandledRejection: null, + + _updateStatus: function Promise__updateStatus(status, value) { + if (this._status === STATUS_RESOLVED || + this._status === STATUS_REJECTED) { + return; + } + + if (status === STATUS_RESOLVED && + Promise.isPromise(value)) { + value.then(this._updateStatus.bind(this, STATUS_RESOLVED), + this._updateStatus.bind(this, STATUS_REJECTED)); + return; + } + + this._status = status; + this._value = value; + + if (status === STATUS_REJECTED && this._handlers.length === 0) { + this._unhandledRejection = true; + HandlerManager.addUnhandledRejection(this); + } + + HandlerManager.scheduleHandlers(this); + }, + + _resolve: function Promise_resolve(value) { + this._updateStatus(STATUS_RESOLVED, value); + }, + + _reject: function Promise_reject(reason) { + this._updateStatus(STATUS_REJECTED, reason); + }, + + then: function Promise_then(onResolve, onReject) { + var nextPromise = new Promise(function (resolve, reject) { + this.resolve = resolve; + this.reject = reject; + }); + this._handlers.push({ + thisPromise: this, + onResolve: onResolve, + onReject: onReject, + nextPromise: nextPromise + }); + HandlerManager.scheduleHandlers(this); + return nextPromise; + }, + + catch: function Promise_catch(onReject) { + return this.then(undefined, onReject); + } + }; + + globalScope.Promise = Promise; +//#else +//throw new Error('DOM Promise is not present'); +//#endif +})(); + +var StatTimer = (function StatTimerClosure() { + function rpad(str, pad, length) { + while (str.length < length) { + str += pad; + } + return str; + } + function StatTimer() { + this.started = {}; + this.times = []; + this.enabled = true; + } + StatTimer.prototype = { + time: function StatTimer_time(name) { + if (!this.enabled) { + return; + } + if (name in this.started) { + warn('Timer is already running for ' + name); + } + this.started[name] = Date.now(); + }, + timeEnd: function StatTimer_timeEnd(name) { + if (!this.enabled) { + return; + } + if (!(name in this.started)) { + warn('Timer has not been started for ' + name); + } + this.times.push({ + 'name': name, + 'start': this.started[name], + 'end': Date.now() + }); + // Remove timer from started so it can be called again. + delete this.started[name]; + }, + toString: function StatTimer_toString() { + var i, ii; + var times = this.times; + var out = ''; + // Find the longest name for padding purposes. + var longest = 0; + for (i = 0, ii = times.length; i < ii; ++i) { + var name = times[i]['name']; + if (name.length > longest) { + longest = name.length; + } + } + for (i = 0, ii = times.length; i < ii; ++i) { + var span = times[i]; + var duration = span.end - span.start; + out += rpad(span['name'], ' ', longest) + ' ' + duration + 'ms\n'; + } + return out; + } + }; + return StatTimer; +})(); + +PDFJS.createBlob = function createBlob(data, contentType) { + if (typeof Blob !== 'undefined') { + return new Blob([data], { type: contentType }); + } + // Blob builder is deprecated in FF14 and removed in FF18. + var bb = new MozBlobBuilder(); + bb.append(data); + return bb.getBlob(contentType); +}; + +PDFJS.createObjectURL = (function createObjectURLClosure() { + // Blob/createObjectURL is not available, falling back to data schema. + var digits = + 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; + + return function createObjectURL(data, contentType) { + if (!PDFJS.disableCreateObjectURL && + typeof URL !== 'undefined' && URL.createObjectURL) { + var blob = PDFJS.createBlob(data, contentType); + return URL.createObjectURL(blob); + } + + var buffer = 'data:' + contentType + ';base64,'; + for (var i = 0, ii = data.length; i < ii; i += 3) { + var b1 = data[i] & 0xFF; + var b2 = data[i + 1] & 0xFF; + var b3 = data[i + 2] & 0xFF; + var d1 = b1 >> 2, d2 = ((b1 & 3) << 4) | (b2 >> 4); + var d3 = i + 1 < ii ? ((b2 & 0xF) << 2) | (b3 >> 6) : 64; + var d4 = i + 2 < ii ? (b3 & 0x3F) : 64; + buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4]; + } + return buffer; + }; +})(); + +function MessageHandler(name, comObj) { + this.name = name; + this.comObj = comObj; + this.callbackIndex = 1; + this.postMessageTransfers = true; + var callbacksCapabilities = this.callbacksCapabilities = {}; + var ah = this.actionHandler = {}; + + ah['console_log'] = [function ahConsoleLog(data) { + console.log.apply(console, data); + }]; + ah['console_error'] = [function ahConsoleError(data) { + console.error.apply(console, data); + }]; + ah['_unsupported_feature'] = [function ah_unsupportedFeature(data) { + UnsupportedManager.notify(data); + }]; + + comObj.onmessage = function messageHandlerComObjOnMessage(event) { + var data = event.data; + if (data.isReply) { + var callbackId = data.callbackId; + if (data.callbackId in callbacksCapabilities) { + var callback = callbacksCapabilities[callbackId]; + delete callbacksCapabilities[callbackId]; + if ('error' in data) { + callback.reject(data.error); + } else { + callback.resolve(data.data); + } + } else { + error('Cannot resolve callback ' + callbackId); + } + } else if (data.action in ah) { + var action = ah[data.action]; + if (data.callbackId) { + Promise.resolve().then(function () { + return action[0].call(action[1], data.data); + }).then(function (result) { + comObj.postMessage({ + isReply: true, + callbackId: data.callbackId, + data: result + }); + }, function (reason) { + comObj.postMessage({ + isReply: true, + callbackId: data.callbackId, + error: reason + }); + }); + } else { + action[0].call(action[1], data.data); + } + } else { + error('Unknown action from worker: ' + data.action); + } + }; +} + +MessageHandler.prototype = { + on: function messageHandlerOn(actionName, handler, scope) { + var ah = this.actionHandler; + if (ah[actionName]) { + error('There is already an actionName called "' + actionName + '"'); + } + ah[actionName] = [handler, scope]; + }, + /** + * Sends a message to the comObj to invoke the action with the supplied data. + * @param {String} actionName Action to call. + * @param {JSON} data JSON data to send. + * @param {Array} [transfers] Optional list of transfers/ArrayBuffers + */ + send: function messageHandlerSend(actionName, data, transfers) { + var message = { + action: actionName, + data: data + }; + this.postMessage(message, transfers); + }, + /** + * Sends a message to the comObj to invoke the action with the supplied data. + * Expects that other side will callback with the response. + * @param {String} actionName Action to call. + * @param {JSON} data JSON data to send. + * @param {Array} [transfers] Optional list of transfers/ArrayBuffers. + * @returns {Promise} Promise to be resolved with response data. + */ + sendWithPromise: + function messageHandlerSendWithPromise(actionName, data, transfers) { + var callbackId = this.callbackIndex++; + var message = { + action: actionName, + data: data, + callbackId: callbackId + }; + var capability = createPromiseCapability(); + this.callbacksCapabilities[callbackId] = capability; + try { + this.postMessage(message, transfers); + } catch (e) { + capability.reject(e); + } + return capability.promise; + }, + /** + * Sends raw message to the comObj. + * @private + * @param message {Object} Raw message. + * @param transfers List of transfers/ArrayBuffers, or undefined. + */ + postMessage: function (message, transfers) { + if (transfers && this.postMessageTransfers) { + this.comObj.postMessage(message, transfers); + } else { + this.comObj.postMessage(message); + } + } +}; + +function loadJpegStream(id, imageUrl, objs) { + var img = new Image(); + img.onload = (function loadJpegStream_onloadClosure() { + objs.resolve(id, img); + }); + img.onerror = (function loadJpegStream_onerrorClosure() { + objs.resolve(id, null); + warn('Error during JPEG image loading'); + }); + img.src = imageUrl; +} + + +/** + * The maximum allowed image size in total pixels e.g. width * height. Images + * above this value will not be drawn. Use -1 for no limit. + * @var {number} + */ +PDFJS.maxImageSize = (PDFJS.maxImageSize === undefined ? + -1 : PDFJS.maxImageSize); + +/** + * The url of where the predefined Adobe CMaps are located. Include trailing + * slash. + * @var {string} + */ +PDFJS.cMapUrl = (PDFJS.cMapUrl === undefined ? null : PDFJS.cMapUrl); + +/** + * Specifies if CMaps are binary packed. + * @var {boolean} + */ +PDFJS.cMapPacked = PDFJS.cMapPacked === undefined ? false : PDFJS.cMapPacked; + +/** + * By default fonts are converted to OpenType fonts and loaded via font face + * rules. If disabled, the font will be rendered using a built in font renderer + * that constructs the glyphs with primitive path commands. + * @var {boolean} + */ +PDFJS.disableFontFace = (PDFJS.disableFontFace === undefined ? + false : PDFJS.disableFontFace); + +/** + * Path for image resources, mainly for annotation icons. Include trailing + * slash. + * @var {string} + */ +PDFJS.imageResourcesPath = (PDFJS.imageResourcesPath === undefined ? + '' : PDFJS.imageResourcesPath); + +/** + * Disable the web worker and run all code on the main thread. This will happen + * automatically if the browser doesn't support workers or sending typed arrays + * to workers. + * @var {boolean} + */ +PDFJS.disableWorker = (PDFJS.disableWorker === undefined ? + false : PDFJS.disableWorker); + +/** + * Path and filename of the worker file. Required when the worker is enabled in + * development mode. If unspecified in the production build, the worker will be + * loaded based on the location of the pdf.js file. + * @var {string} + */ +PDFJS.workerSrc = (PDFJS.workerSrc === undefined ? null : PDFJS.workerSrc); + +/** + * Disable range request loading of PDF files. When enabled and if the server + * supports partial content requests then the PDF will be fetched in chunks. + * Enabled (false) by default. + * @var {boolean} + */ +PDFJS.disableRange = (PDFJS.disableRange === undefined ? + false : PDFJS.disableRange); + +/** + * Disable streaming of PDF file data. By default PDF.js attempts to load PDF + * in chunks. This default behavior can be disabled. + * @var {boolean} + */ +PDFJS.disableStream = (PDFJS.disableStream === undefined ? + false : PDFJS.disableStream); + +/** + * Disable pre-fetching of PDF file data. When range requests are enabled PDF.js + * will automatically keep fetching more data even if it isn't needed to display + * the current page. This default behavior can be disabled. + * + * NOTE: It is also necessary to disable streaming, see above, + * in order for disabling of pre-fetching to work correctly. + * @var {boolean} + */ +PDFJS.disableAutoFetch = (PDFJS.disableAutoFetch === undefined ? + false : PDFJS.disableAutoFetch); + +/** + * Enables special hooks for debugging PDF.js. + * @var {boolean} + */ +PDFJS.pdfBug = (PDFJS.pdfBug === undefined ? false : PDFJS.pdfBug); + +/** + * Enables transfer usage in postMessage for ArrayBuffers. + * @var {boolean} + */ +PDFJS.postMessageTransfers = (PDFJS.postMessageTransfers === undefined ? + true : PDFJS.postMessageTransfers); + +/** + * Disables URL.createObjectURL usage. + * @var {boolean} + */ +PDFJS.disableCreateObjectURL = (PDFJS.disableCreateObjectURL === undefined ? + false : PDFJS.disableCreateObjectURL); + +/** + * Disables WebGL usage. + * @var {boolean} + */ +PDFJS.disableWebGL = (PDFJS.disableWebGL === undefined ? + true : PDFJS.disableWebGL); + +/** + * Disables fullscreen support, and by extension Presentation Mode, + * in browsers which support the fullscreen API. + * @var {boolean} + */ +PDFJS.disableFullscreen = (PDFJS.disableFullscreen === undefined ? + false : PDFJS.disableFullscreen); + +/** + * Enables CSS only zooming. + * @var {boolean} + */ +PDFJS.useOnlyCssZoom = (PDFJS.useOnlyCssZoom === undefined ? + false : PDFJS.useOnlyCssZoom); + +/** + * Controls the logging level. + * The constants from PDFJS.VERBOSITY_LEVELS should be used: + * - errors + * - warnings [default] + * - infos + * @var {number} + */ +PDFJS.verbosity = (PDFJS.verbosity === undefined ? + PDFJS.VERBOSITY_LEVELS.warnings : PDFJS.verbosity); + +/** + * The maximum supported canvas size in total pixels e.g. width * height. + * The default value is 4096 * 4096. Use -1 for no limit. + * @var {number} + */ +PDFJS.maxCanvasPixels = (PDFJS.maxCanvasPixels === undefined ? + 16777216 : PDFJS.maxCanvasPixels); + +/** + * Opens external links in a new window if enabled. The default behavior opens + * external links in the PDF.js window. + * @var {boolean} + */ +PDFJS.openExternalLinksInNewWindow = ( + PDFJS.openExternalLinksInNewWindow === undefined ? + false : PDFJS.openExternalLinksInNewWindow); + +/** + * Document initialization / loading parameters object. + * + * @typedef {Object} DocumentInitParameters + * @property {string} url - The URL of the PDF. + * @property {TypedArray|Array|string} data - Binary PDF data. Use typed arrays + * (Uint8Array) to improve the memory usage. If PDF data is BASE64-encoded, + * use atob() to convert it to a binary string first. + * @property {Object} httpHeaders - Basic authentication headers. + * @property {boolean} withCredentials - Indicates whether or not cross-site + * Access-Control requests should be made using credentials such as cookies + * or authorization headers. The default is false. + * @property {string} password - For decrypting password-protected PDFs. + * @property {TypedArray} initialData - A typed array with the first portion or + * all of the pdf data. Used by the extension since some data is already + * loaded before the switch to range requests. + * @property {number} length - The PDF file length. It's used for progress + * reports and range requests operations. + * @property {PDFDataRangeTransport} range + */ + +/** + * @typedef {Object} PDFDocumentStats + * @property {Array} streamTypes - Used stream types in the document (an item + * is set to true if specific stream ID was used in the document). + * @property {Array} fontTypes - Used font type in the document (an item is set + * to true if specific font ID was used in the document). + */ + +/** + * This is the main entry point for loading a PDF and interacting with it. + * NOTE: If a URL is used to fetch the PDF data a standard XMLHttpRequest(XHR) + * is used, which means it must follow the same origin rules that any XHR does + * e.g. No cross domain requests without CORS. + * + * @param {string|TypedArray|DocumentInitParameters|PDFDataRangeTransport} src + * Can be a url to where a PDF is located, a typed array (Uint8Array) + * already populated with data or parameter object. + * + * @param {PDFDataRangeTransport} pdfDataRangeTransport (deprecated) It is used + * if you want to manually serve range requests for data in the PDF. + * + * @param {function} passwordCallback (deprecated) It is used to request a + * password if wrong or no password was provided. The callback receives two + * parameters: function that needs to be called with new password and reason + * (see {PasswordResponses}). + * + * @param {function} progressCallback (deprecated) It is used to be able to + * monitor the loading progress of the PDF file (necessary to implement e.g. + * a loading bar). The callback receives an {Object} with the properties: + * {number} loaded and {number} total. + * + * @return {PDFDocumentLoadingTask} + */ +PDFJS.getDocument = function getDocument(src, + pdfDataRangeTransport, + passwordCallback, + progressCallback) { + var task = new PDFDocumentLoadingTask(); + + // Support of the obsolete arguments (for compatibility with API v1.0) + if (pdfDataRangeTransport) { + if (!(pdfDataRangeTransport instanceof PDFDataRangeTransport)) { + // Not a PDFDataRangeTransport instance, trying to add missing properties. + pdfDataRangeTransport = Object.create(pdfDataRangeTransport); + pdfDataRangeTransport.length = src.length; + pdfDataRangeTransport.initialData = src.initialData; + } + src = Object.create(src); + src.range = pdfDataRangeTransport; + } + task.onPassword = passwordCallback || null; + task.onProgress = progressCallback || null; + + var workerInitializedCapability, transport; + var source; + if (typeof src === 'string') { + source = { url: src }; + } else if (isArrayBuffer(src)) { + source = { data: src }; + } else if (src instanceof PDFDataRangeTransport) { + source = { range: src }; + } else { + if (typeof src !== 'object') { + error('Invalid parameter in getDocument, need either Uint8Array, ' + + 'string or a parameter object'); + } + if (!src.url && !src.data && !src.range) { + error('Invalid parameter object: need either .data, .range or .url'); + } + + source = src; + } + + var params = {}; + for (var key in source) { + if (key === 'url' && typeof window !== 'undefined') { + // The full path is required in the 'url' field. + params[key] = combineUrl(window.location.href, source[key]); + continue; + } else if (key === 'range') { + continue; + } else if (key === 'data' && !(source[key] instanceof Uint8Array)) { + // Converting string or array-like data to Uint8Array. + var pdfBytes = source[key]; + if (typeof pdfBytes === 'string') { + params[key] = stringToBytes(pdfBytes); + } else if (typeof pdfBytes === 'object' && pdfBytes !== null && + !isNaN(pdfBytes.length)) { + params[key] = new Uint8Array(pdfBytes); + } else { + error('Invalid PDF binary data: either typed array, string or ' + + 'array-like object is expected in the data property.'); + } + continue; + } + params[key] = source[key]; + } + + workerInitializedCapability = createPromiseCapability(); + transport = new WorkerTransport(workerInitializedCapability, source.range); + workerInitializedCapability.promise.then(function transportInitialized() { + transport.fetchDocument(task, params); + }); + + return task; +}; + +/** + * PDF document loading operation. + * @class + */ +var PDFDocumentLoadingTask = (function PDFDocumentLoadingTaskClosure() { + /** @constructs PDFDocumentLoadingTask */ + function PDFDocumentLoadingTask() { + this._capability = createPromiseCapability(); + + /** + * Callback to request a password if wrong or no password was provided. + * The callback receives two parameters: function that needs to be called + * with new password and reason (see {PasswordResponses}). + */ + this.onPassword = null; + + /** + * Callback to be able to monitor the loading progress of the PDF file + * (necessary to implement e.g. a loading bar). The callback receives + * an {Object} with the properties: {number} loaded and {number} total. + */ + this.onProgress = null; + } + + PDFDocumentLoadingTask.prototype = + /** @lends PDFDocumentLoadingTask.prototype */ { + /** + * @return {Promise} + */ + get promise() { + return this._capability.promise; + }, + + // TODO add cancel or abort method + + /** + * Registers callbacks to indicate the document loading completion. + * + * @param {function} onFulfilled The callback for the loading completion. + * @param {function} onRejected The callback for the loading failure. + * @return {Promise} A promise that is resolved after the onFulfilled or + * onRejected callback. + */ + then: function PDFDocumentLoadingTask_then(onFulfilled, onRejected) { + return this.promise.then.apply(this.promise, arguments); + } + }; + + return PDFDocumentLoadingTask; +})(); + +/** + * Abstract class to support range requests file loading. + * @class + */ +var PDFDataRangeTransport = (function pdfDataRangeTransportClosure() { + /** + * @constructs PDFDataRangeTransport + * @param {number} length + * @param {Uint8Array} initialData + */ + function PDFDataRangeTransport(length, initialData) { + this.length = length; + this.initialData = initialData; + + this._rangeListeners = []; + this._progressListeners = []; + this._progressiveReadListeners = []; + this._readyCapability = createPromiseCapability(); + } + PDFDataRangeTransport.prototype = + /** @lends PDFDataRangeTransport.prototype */ { + addRangeListener: + function PDFDataRangeTransport_addRangeListener(listener) { + this._rangeListeners.push(listener); + }, + + addProgressListener: + function PDFDataRangeTransport_addProgressListener(listener) { + this._progressListeners.push(listener); + }, + + addProgressiveReadListener: + function PDFDataRangeTransport_addProgressiveReadListener(listener) { + this._progressiveReadListeners.push(listener); + }, + + onDataRange: function PDFDataRangeTransport_onDataRange(begin, chunk) { + var listeners = this._rangeListeners; + for (var i = 0, n = listeners.length; i < n; ++i) { + listeners[i](begin, chunk); + } + }, + + onDataProgress: function PDFDataRangeTransport_onDataProgress(loaded) { + this._readyCapability.promise.then(function () { + var listeners = this._progressListeners; + for (var i = 0, n = listeners.length; i < n; ++i) { + listeners[i](loaded); + } + }.bind(this)); + }, + + onDataProgressiveRead: + function PDFDataRangeTransport_onDataProgress(chunk) { + this._readyCapability.promise.then(function () { + var listeners = this._progressiveReadListeners; + for (var i = 0, n = listeners.length; i < n; ++i) { + listeners[i](chunk); + } + }.bind(this)); + }, + + transportReady: function PDFDataRangeTransport_transportReady() { + this._readyCapability.resolve(); + }, + + requestDataRange: + function PDFDataRangeTransport_requestDataRange(begin, end) { + throw new Error('Abstract method PDFDataRangeTransport.requestDataRange'); + } + }; + return PDFDataRangeTransport; +})(); + +PDFJS.PDFDataRangeTransport = PDFDataRangeTransport; + +/** + * Proxy to a PDFDocument in the worker thread. Also, contains commonly used + * properties that can be read synchronously. + * @class + */ +var PDFDocumentProxy = (function PDFDocumentProxyClosure() { + function PDFDocumentProxy(pdfInfo, transport) { + this.pdfInfo = pdfInfo; + this.transport = transport; + } + PDFDocumentProxy.prototype = /** @lends PDFDocumentProxy.prototype */ { + /** + * @return {number} Total number of pages the PDF contains. + */ + get numPages() { + return this.pdfInfo.numPages; + }, + /** + * @return {string} A unique ID to identify a PDF. Not guaranteed to be + * unique. + */ + get fingerprint() { + return this.pdfInfo.fingerprint; + }, + /** + * @param {number} pageNumber The page number to get. The first page is 1. + * @return {Promise} A promise that is resolved with a {@link PDFPageProxy} + * object. + */ + getPage: function PDFDocumentProxy_getPage(pageNumber) { + return this.transport.getPage(pageNumber); + }, + /** + * @param {{num: number, gen: number}} ref The page reference. Must have + * the 'num' and 'gen' properties. + * @return {Promise} A promise that is resolved with the page index that is + * associated with the reference. + */ + getPageIndex: function PDFDocumentProxy_getPageIndex(ref) { + return this.transport.getPageIndex(ref); + }, + /** + * @return {Promise} A promise that is resolved with a lookup table for + * mapping named destinations to reference numbers. + * + * This can be slow for large documents: use getDestination instead + */ + getDestinations: function PDFDocumentProxy_getDestinations() { + return this.transport.getDestinations(); + }, + /** + * @param {string} id The named destination to get. + * @return {Promise} A promise that is resolved with all information + * of the given named destination. + */ + getDestination: function PDFDocumentProxy_getDestination(id) { + return this.transport.getDestination(id); + }, + /** + * @return {Promise} A promise that is resolved with a lookup table for + * mapping named attachments to their content. + */ + getAttachments: function PDFDocumentProxy_getAttachments() { + return this.transport.getAttachments(); + }, + /** + * @return {Promise} A promise that is resolved with an array of all the + * JavaScript strings in the name tree. + */ + getJavaScript: function PDFDocumentProxy_getJavaScript() { + return this.transport.getJavaScript(); + }, + /** + * @return {Promise} A promise that is resolved with an {Array} that is a + * tree outline (if it has one) of the PDF. The tree is in the format of: + * [ + * { + * title: string, + * bold: boolean, + * italic: boolean, + * color: rgb array, + * dest: dest obj, + * items: array of more items like this + * }, + * ... + * ]. + */ + getOutline: function PDFDocumentProxy_getOutline() { + return this.transport.getOutline(); + }, + /** + * @return {Promise} A promise that is resolved with an {Object} that has + * info and metadata properties. Info is an {Object} filled with anything + * available in the information dictionary and similarly metadata is a + * {Metadata} object with information from the metadata section of the PDF. + */ + getMetadata: function PDFDocumentProxy_getMetadata() { + return this.transport.getMetadata(); + }, + /** + * @return {Promise} A promise that is resolved with a TypedArray that has + * the raw data from the PDF. + */ + getData: function PDFDocumentProxy_getData() { + return this.transport.getData(); + }, + /** + * @return {Promise} A promise that is resolved when the document's data + * is loaded. It is resolved with an {Object} that contains the length + * property that indicates size of the PDF data in bytes. + */ + getDownloadInfo: function PDFDocumentProxy_getDownloadInfo() { + return this.transport.downloadInfoCapability.promise; + }, + /** + * @return {Promise} A promise this is resolved with current stats about + * document structures (see {@link PDFDocumentStats}). + */ + getStats: function PDFDocumentProxy_getStats() { + return this.transport.getStats(); + }, + /** + * Cleans up resources allocated by the document, e.g. created @font-face. + */ + cleanup: function PDFDocumentProxy_cleanup() { + this.transport.startCleanup(); + }, + /** + * Destroys current document instance and terminates worker. + */ + destroy: function PDFDocumentProxy_destroy() { + this.transport.destroy(); + } + }; + return PDFDocumentProxy; +})(); + +/** + * Page text content. + * + * @typedef {Object} TextContent + * @property {array} items - array of {@link TextItem} + * @property {Object} styles - {@link TextStyles} objects, indexed by font + * name. + */ + +/** + * Page text content part. + * + * @typedef {Object} TextItem + * @property {string} str - text content. + * @property {string} dir - text direction: 'ttb', 'ltr' or 'rtl'. + * @property {array} transform - transformation matrix. + * @property {number} width - width in device space. + * @property {number} height - height in device space. + * @property {string} fontName - font name used by pdf.js for converted font. + */ + +/** + * Text style. + * + * @typedef {Object} TextStyle + * @property {number} ascent - font ascent. + * @property {number} descent - font descent. + * @property {boolean} vertical - text is in vertical mode. + * @property {string} fontFamily - possible font family + */ + +/** + * Page render parameters. + * + * @typedef {Object} RenderParameters + * @property {Object} canvasContext - A 2D context of a DOM Canvas object. + * @property {PDFJS.PageViewport} viewport - Rendering viewport obtained by + * calling of PDFPage.getViewport method. + * @property {string} intent - Rendering intent, can be 'display' or 'print' + * (default value is 'display'). + * @property {Object} imageLayer - (optional) An object that has beginLayout, + * endLayout and appendImage functions. + * @property {function} continueCallback - (deprecated) A function that will be + * called each time the rendering is paused. To continue + * rendering call the function that is the first argument + * to the callback. + */ + +/** + * PDF page operator list. + * + * @typedef {Object} PDFOperatorList + * @property {Array} fnArray - Array containing the operator functions. + * @property {Array} argsArray - Array containing the arguments of the + * functions. + */ + +/** + * Proxy to a PDFPage in the worker thread. + * @class + */ +var PDFPageProxy = (function PDFPageProxyClosure() { + function PDFPageProxy(pageIndex, pageInfo, transport) { + this.pageIndex = pageIndex; + this.pageInfo = pageInfo; + this.transport = transport; + this.stats = new StatTimer(); + this.stats.enabled = !!globalScope.PDFJS.enableStats; + this.commonObjs = transport.commonObjs; + this.objs = new PDFObjects(); + this.cleanupAfterRender = false; + this.pendingDestroy = false; + this.intentStates = {}; + } + PDFPageProxy.prototype = /** @lends PDFPageProxy.prototype */ { + /** + * @return {number} Page number of the page. First page is 1. + */ + get pageNumber() { + return this.pageIndex + 1; + }, + /** + * @return {number} The number of degrees the page is rotated clockwise. + */ + get rotate() { + return this.pageInfo.rotate; + }, + /** + * @return {Object} The reference that points to this page. It has 'num' and + * 'gen' properties. + */ + get ref() { + return this.pageInfo.ref; + }, + /** + * @return {Array} An array of the visible portion of the PDF page in the + * user space units - [x1, y1, x2, y2]. + */ + get view() { + return this.pageInfo.view; + }, + /** + * @param {number} scale The desired scale of the viewport. + * @param {number} rotate Degrees to rotate the viewport. If omitted this + * defaults to the page rotation. + * @return {PDFJS.PageViewport} Contains 'width' and 'height' properties + * along with transforms required for rendering. + */ + getViewport: function PDFPageProxy_getViewport(scale, rotate) { + if (arguments.length < 2) { + rotate = this.rotate; + } + return new PDFJS.PageViewport(this.view, scale, rotate, 0, 0); + }, + /** + * @return {Promise} A promise that is resolved with an {Array} of the + * annotation objects. + */ + getAnnotations: function PDFPageProxy_getAnnotations() { + if (this.annotationsPromise) { + return this.annotationsPromise; + } + + var promise = this.transport.getAnnotations(this.pageIndex); + this.annotationsPromise = promise; + return promise; + }, + /** + * Begins the process of rendering a page to the desired context. + * @param {RenderParameters} params Page render parameters. + * @return {RenderTask} An object that contains the promise, which + * is resolved when the page finishes rendering. + */ + render: function PDFPageProxy_render(params) { + var stats = this.stats; + stats.time('Overall'); + + // If there was a pending destroy cancel it so no cleanup happens during + // this call to render. + this.pendingDestroy = false; + + var renderingIntent = (params.intent === 'print' ? 'print' : 'display'); + + if (!this.intentStates[renderingIntent]) { + this.intentStates[renderingIntent] = {}; + } + var intentState = this.intentStates[renderingIntent]; + + // If there's no displayReadyCapability yet, then the operatorList + // was never requested before. Make the request and create the promise. + if (!intentState.displayReadyCapability) { + intentState.receivingOperatorList = true; + intentState.displayReadyCapability = createPromiseCapability(); + intentState.operatorList = { + fnArray: [], + argsArray: [], + lastChunk: false + }; + + this.stats.time('Page Request'); + this.transport.messageHandler.send('RenderPageRequest', { + pageIndex: this.pageNumber - 1, + intent: renderingIntent + }); + } + + var internalRenderTask = new InternalRenderTask(complete, params, + this.objs, + this.commonObjs, + intentState.operatorList, + this.pageNumber); + if (!intentState.renderTasks) { + intentState.renderTasks = []; + } + intentState.renderTasks.push(internalRenderTask); + var renderTask = internalRenderTask.task; + + // Obsolete parameter support + if (params.continueCallback) { + renderTask.onContinue = params.continueCallback; + } + + var self = this; + intentState.displayReadyCapability.promise.then( + function pageDisplayReadyPromise(transparency) { + if (self.pendingDestroy) { + complete(); + return; + } + stats.time('Rendering'); + internalRenderTask.initalizeGraphics(transparency); + internalRenderTask.operatorListChanged(); + }, + function pageDisplayReadPromiseError(reason) { + complete(reason); + } + ); + + function complete(error) { + var i = intentState.renderTasks.indexOf(internalRenderTask); + if (i >= 0) { + intentState.renderTasks.splice(i, 1); + } + + if (self.cleanupAfterRender) { + self.pendingDestroy = true; + } + self._tryDestroy(); + + if (error) { + internalRenderTask.capability.reject(error); + } else { + internalRenderTask.capability.resolve(); + } + stats.timeEnd('Rendering'); + stats.timeEnd('Overall'); + } + + return renderTask; + }, + + /** + * @return {Promise} A promise resolved with an {@link PDFOperatorList} + * object that represents page's operator list. + */ + getOperatorList: function PDFPageProxy_getOperatorList() { + function operatorListChanged() { + if (intentState.operatorList.lastChunk) { + intentState.opListReadCapability.resolve(intentState.operatorList); + } + } + + var renderingIntent = 'oplist'; + if (!this.intentStates[renderingIntent]) { + this.intentStates[renderingIntent] = {}; + } + var intentState = this.intentStates[renderingIntent]; + + if (!intentState.opListReadCapability) { + var opListTask = {}; + opListTask.operatorListChanged = operatorListChanged; + intentState.receivingOperatorList = true; + intentState.opListReadCapability = createPromiseCapability(); + intentState.renderTasks = []; + intentState.renderTasks.push(opListTask); + intentState.operatorList = { + fnArray: [], + argsArray: [], + lastChunk: false + }; + + this.transport.messageHandler.send('RenderPageRequest', { + pageIndex: this.pageIndex, + intent: renderingIntent + }); + } + return intentState.opListReadCapability.promise; + }, + + /** + * @return {Promise} That is resolved a {@link TextContent} + * object that represent the page text content. + */ + getTextContent: function PDFPageProxy_getTextContent() { + return this.transport.messageHandler.sendWithPromise('GetTextContent', { + pageIndex: this.pageNumber - 1 + }); + }, + /** + * Destroys resources allocated by the page. + */ + destroy: function PDFPageProxy_destroy() { + this.pendingDestroy = true; + this._tryDestroy(); + }, + /** + * For internal use only. Attempts to clean up if rendering is in a state + * where that's possible. + * @ignore + */ + _tryDestroy: function PDFPageProxy__destroy() { + if (!this.pendingDestroy || + Object.keys(this.intentStates).some(function(intent) { + var intentState = this.intentStates[intent]; + return (intentState.renderTasks.length !== 0 || + intentState.receivingOperatorList); + }, this)) { + return; + } + + Object.keys(this.intentStates).forEach(function(intent) { + delete this.intentStates[intent]; + }, this); + this.objs.clear(); + this.annotationsPromise = null; + this.pendingDestroy = false; + }, + /** + * For internal use only. + * @ignore + */ + _startRenderPage: function PDFPageProxy_startRenderPage(transparency, + intent) { + var intentState = this.intentStates[intent]; + // TODO Refactor RenderPageRequest to separate rendering + // and operator list logic + if (intentState.displayReadyCapability) { + intentState.displayReadyCapability.resolve(transparency); + } + }, + /** + * For internal use only. + * @ignore + */ + _renderPageChunk: function PDFPageProxy_renderPageChunk(operatorListChunk, + intent) { + var intentState = this.intentStates[intent]; + var i, ii; + // Add the new chunk to the current operator list. + for (i = 0, ii = operatorListChunk.length; i < ii; i++) { + intentState.operatorList.fnArray.push(operatorListChunk.fnArray[i]); + intentState.operatorList.argsArray.push( + operatorListChunk.argsArray[i]); + } + intentState.operatorList.lastChunk = operatorListChunk.lastChunk; + + // Notify all the rendering tasks there are more operators to be consumed. + for (i = 0; i < intentState.renderTasks.length; i++) { + intentState.renderTasks[i].operatorListChanged(); + } + + if (operatorListChunk.lastChunk) { + intentState.receivingOperatorList = false; + this._tryDestroy(); + } + } + }; + return PDFPageProxy; +})(); + +/** + * For internal use only. + * @ignore + */ +var WorkerTransport = (function WorkerTransportClosure() { + function WorkerTransport(workerInitializedCapability, pdfDataRangeTransport) { + this.pdfDataRangeTransport = pdfDataRangeTransport; + this.workerInitializedCapability = workerInitializedCapability; + this.commonObjs = new PDFObjects(); + + this.loadingTask = null; + + this.pageCache = []; + this.pagePromises = []; + this.downloadInfoCapability = createPromiseCapability(); + + // If worker support isn't disabled explicit and the browser has worker + // support, create a new web worker and test if it/the browser fullfills + // all requirements to run parts of pdf.js in a web worker. + // Right now, the requirement is, that an Uint8Array is still an Uint8Array + // as it arrives on the worker. Chrome added this with version 15. +//#if !SINGLE_FILE + if (!globalScope.PDFJS.disableWorker && typeof Worker !== 'undefined') { + var workerSrc = PDFJS.workerSrc; + if (!workerSrc) { + error('No PDFJS.workerSrc specified'); + } + + try { + // Some versions of FF can't create a worker on localhost, see: + // https://bugzilla.mozilla.org/show_bug.cgi?id=683280 + var worker = new Worker(workerSrc); + var messageHandler = new MessageHandler('main', worker); + this.messageHandler = messageHandler; + + messageHandler.on('test', function transportTest(data) { + var supportTypedArray = data && data.supportTypedArray; + if (supportTypedArray) { + this.worker = worker; + if (!data.supportTransfers) { + PDFJS.postMessageTransfers = false; + } + this.setupMessageHandler(messageHandler); + workerInitializedCapability.resolve(); + } else { + this.setupFakeWorker(); + } + }.bind(this)); + + var testObj = new Uint8Array([PDFJS.postMessageTransfers ? 255 : 0]); + // Some versions of Opera throw a DATA_CLONE_ERR on serializing the + // typed array. Also, checking if we can use transfers. + try { + messageHandler.send('test', testObj, [testObj.buffer]); + } catch (ex) { + info('Cannot use postMessage transfers'); + testObj[0] = 0; + messageHandler.send('test', testObj); + } + return; + } catch (e) { + info('The worker has been disabled.'); + } + } +//#endif + // Either workers are disabled, not supported or have thrown an exception. + // Thus, we fallback to a faked worker. + this.setupFakeWorker(); + } + WorkerTransport.prototype = { + destroy: function WorkerTransport_destroy() { + this.pageCache = []; + this.pagePromises = []; + var self = this; + this.messageHandler.sendWithPromise('Terminate', null).then(function () { + FontLoader.clear(); + if (self.worker) { + self.worker.terminate(); + } + }); + }, + + setupFakeWorker: function WorkerTransport_setupFakeWorker() { + globalScope.PDFJS.disableWorker = true; + + if (!PDFJS.fakeWorkerFilesLoadedCapability) { + PDFJS.fakeWorkerFilesLoadedCapability = createPromiseCapability(); + // In the developer build load worker_loader which in turn loads all the + // other files and resolves the promise. In production only the + // pdf.worker.js file is needed. +//#if !PRODUCTION + Util.loadScript(PDFJS.workerSrc); +//#endif +//#if PRODUCTION && SINGLE_FILE +// PDFJS.fakeWorkerFilesLoadedCapability.resolve(); +//#endif +//#if PRODUCTION && !SINGLE_FILE +// Util.loadScript(PDFJS.workerSrc, function() { +// PDFJS.fakeWorkerFilesLoadedCapability.resolve(); +// }); +//#endif + } + PDFJS.fakeWorkerFilesLoadedCapability.promise.then(function () { + warn('Setting up fake worker.'); + // If we don't use a worker, just post/sendMessage to the main thread. + var fakeWorker = { + postMessage: function WorkerTransport_postMessage(obj) { + fakeWorker.onmessage({data: obj}); + }, + terminate: function WorkerTransport_terminate() {} + }; + + var messageHandler = new MessageHandler('main', fakeWorker); + this.setupMessageHandler(messageHandler); + + // If the main thread is our worker, setup the handling for the messages + // the main thread sends to it self. + PDFJS.WorkerMessageHandler.setup(messageHandler); + + this.workerInitializedCapability.resolve(); + }.bind(this)); + }, + + setupMessageHandler: + function WorkerTransport_setupMessageHandler(messageHandler) { + this.messageHandler = messageHandler; + + function updatePassword(password) { + messageHandler.send('UpdatePassword', password); + } + + var pdfDataRangeTransport = this.pdfDataRangeTransport; + if (pdfDataRangeTransport) { + pdfDataRangeTransport.addRangeListener(function(begin, chunk) { + messageHandler.send('OnDataRange', { + begin: begin, + chunk: chunk + }); + }); + + pdfDataRangeTransport.addProgressListener(function(loaded) { + messageHandler.send('OnDataProgress', { + loaded: loaded + }); + }); + + pdfDataRangeTransport.addProgressiveReadListener(function(chunk) { + messageHandler.send('OnDataRange', { + chunk: chunk + }); + }); + + messageHandler.on('RequestDataRange', + function transportDataRange(data) { + pdfDataRangeTransport.requestDataRange(data.begin, data.end); + }, this); + } + + messageHandler.on('GetDoc', function transportDoc(data) { + var pdfInfo = data.pdfInfo; + this.numPages = data.pdfInfo.numPages; + var pdfDocument = new PDFDocumentProxy(pdfInfo, this); + this.pdfDocument = pdfDocument; + this.loadingTask._capability.resolve(pdfDocument); + }, this); + + messageHandler.on('NeedPassword', + function transportNeedPassword(exception) { + var loadingTask = this.loadingTask; + if (loadingTask.onPassword) { + return loadingTask.onPassword(updatePassword, + PasswordResponses.NEED_PASSWORD); + } + loadingTask._capability.reject( + new PasswordException(exception.message, exception.code)); + }, this); + + messageHandler.on('IncorrectPassword', + function transportIncorrectPassword(exception) { + var loadingTask = this.loadingTask; + if (loadingTask.onPassword) { + return loadingTask.onPassword(updatePassword, + PasswordResponses.INCORRECT_PASSWORD); + } + loadingTask._capability.reject( + new PasswordException(exception.message, exception.code)); + }, this); + + messageHandler.on('InvalidPDF', function transportInvalidPDF(exception) { + this.loadingTask._capability.reject( + new InvalidPDFException(exception.message)); + }, this); + + messageHandler.on('MissingPDF', function transportMissingPDF(exception) { + this.loadingTask._capability.reject( + new MissingPDFException(exception.message)); + }, this); + + messageHandler.on('UnexpectedResponse', + function transportUnexpectedResponse(exception) { + this.loadingTask._capability.reject( + new UnexpectedResponseException(exception.message, exception.status)); + }, this); + + messageHandler.on('UnknownError', + function transportUnknownError(exception) { + this.loadingTask._capability.reject( + new UnknownErrorException(exception.message, exception.details)); + }, this); + + messageHandler.on('DataLoaded', function transportPage(data) { + this.downloadInfoCapability.resolve(data); + }, this); + + messageHandler.on('PDFManagerReady', function transportPage(data) { + if (this.pdfDataRangeTransport) { + this.pdfDataRangeTransport.transportReady(); + } + }, this); + + messageHandler.on('StartRenderPage', function transportRender(data) { + var page = this.pageCache[data.pageIndex]; + + page.stats.timeEnd('Page Request'); + page._startRenderPage(data.transparency, data.intent); + }, this); + + messageHandler.on('RenderPageChunk', function transportRender(data) { + var page = this.pageCache[data.pageIndex]; + + page._renderPageChunk(data.operatorList, data.intent); + }, this); + + messageHandler.on('commonobj', function transportObj(data) { + var id = data[0]; + var type = data[1]; + if (this.commonObjs.hasData(id)) { + return; + } + + switch (type) { + case 'Font': + var exportedData = data[2]; + + var font; + if ('error' in exportedData) { + var error = exportedData.error; + warn('Error during font loading: ' + error); + this.commonObjs.resolve(id, error); + break; + } else { + font = new FontFaceObject(exportedData); + } + + FontLoader.bind( + [font], + function fontReady(fontObjs) { + this.commonObjs.resolve(id, font); + }.bind(this) + ); + break; + case 'FontPath': + this.commonObjs.resolve(id, data[2]); + break; + default: + error('Got unknown common object type ' + type); + } + }, this); + + messageHandler.on('obj', function transportObj(data) { + var id = data[0]; + var pageIndex = data[1]; + var type = data[2]; + var pageProxy = this.pageCache[pageIndex]; + var imageData; + if (pageProxy.objs.hasData(id)) { + return; + } + + switch (type) { + case 'JpegStream': + imageData = data[3]; + loadJpegStream(id, imageData, pageProxy.objs); + break; + case 'Image': + imageData = data[3]; + pageProxy.objs.resolve(id, imageData); + + // heuristics that will allow not to store large data + var MAX_IMAGE_SIZE_TO_STORE = 8000000; + if (imageData && 'data' in imageData && + imageData.data.length > MAX_IMAGE_SIZE_TO_STORE) { + pageProxy.cleanupAfterRender = true; + } + break; + default: + error('Got unknown object type ' + type); + } + }, this); + + messageHandler.on('DocProgress', function transportDocProgress(data) { + var loadingTask = this.loadingTask; + if (loadingTask.onProgress) { + loadingTask.onProgress({ + loaded: data.loaded, + total: data.total + }); + } + }, this); + + messageHandler.on('PageError', function transportError(data) { + var page = this.pageCache[data.pageNum - 1]; + var intentState = page.intentStates[data.intent]; + if (intentState.displayReadyCapability) { + intentState.displayReadyCapability.reject(data.error); + } else { + error(data.error); + } + }, this); + + messageHandler.on('JpegDecode', function(data) { + var imageUrl = data[0]; + var components = data[1]; + if (components !== 3 && components !== 1) { + return Promise.reject( + new Error('Only 3 components or 1 component can be returned')); + } + + return new Promise(function (resolve, reject) { + var img = new Image(); + img.onload = function () { + var width = img.width; + var height = img.height; + var size = width * height; + var rgbaLength = size * 4; + var buf = new Uint8Array(size * components); + var tmpCanvas = createScratchCanvas(width, height); + var tmpCtx = tmpCanvas.getContext('2d'); + tmpCtx.drawImage(img, 0, 0); + var data = tmpCtx.getImageData(0, 0, width, height).data; + var i, j; + + if (components === 3) { + for (i = 0, j = 0; i < rgbaLength; i += 4, j += 3) { + buf[j] = data[i]; + buf[j + 1] = data[i + 1]; + buf[j + 2] = data[i + 2]; + } + } else if (components === 1) { + for (i = 0, j = 0; i < rgbaLength; i += 4, j++) { + buf[j] = data[i]; + } + } + resolve({ data: buf, width: width, height: height}); + }; + img.onerror = function () { + reject(new Error('JpegDecode failed to load image')); + }; + img.src = imageUrl; + }); + }); + }, + + fetchDocument: function WorkerTransport_fetchDocument(loadingTask, source) { + this.loadingTask = loadingTask; + + source.disableAutoFetch = PDFJS.disableAutoFetch; + source.disableStream = PDFJS.disableStream; + source.chunkedViewerLoading = !!this.pdfDataRangeTransport; + if (this.pdfDataRangeTransport) { + source.length = this.pdfDataRangeTransport.length; + source.initialData = this.pdfDataRangeTransport.initialData; + } + this.messageHandler.send('GetDocRequest', { + source: source, + disableRange: PDFJS.disableRange, + maxImageSize: PDFJS.maxImageSize, + cMapUrl: PDFJS.cMapUrl, + cMapPacked: PDFJS.cMapPacked, + disableFontFace: PDFJS.disableFontFace, + disableCreateObjectURL: PDFJS.disableCreateObjectURL, + verbosity: PDFJS.verbosity + }); + }, + + getData: function WorkerTransport_getData() { + return this.messageHandler.sendWithPromise('GetData', null); + }, + + getPage: function WorkerTransport_getPage(pageNumber, capability) { + if (pageNumber <= 0 || pageNumber > this.numPages || + (pageNumber|0) !== pageNumber) { + return Promise.reject(new Error('Invalid page request')); + } + + var pageIndex = pageNumber - 1; + if (pageIndex in this.pagePromises) { + return this.pagePromises[pageIndex]; + } + var promise = this.messageHandler.sendWithPromise('GetPage', { + pageIndex: pageIndex + }).then(function (pageInfo) { + var page = new PDFPageProxy(pageIndex, pageInfo, this); + this.pageCache[pageIndex] = page; + return page; + }.bind(this)); + this.pagePromises[pageIndex] = promise; + return promise; + }, + + getPageIndex: function WorkerTransport_getPageIndexByRef(ref) { + return this.messageHandler.sendWithPromise('GetPageIndex', { ref: ref }); + }, + + getAnnotations: function WorkerTransport_getAnnotations(pageIndex) { + return this.messageHandler.sendWithPromise('GetAnnotations', + { pageIndex: pageIndex }); + }, + + getDestinations: function WorkerTransport_getDestinations() { + return this.messageHandler.sendWithPromise('GetDestinations', null); + }, + + getDestination: function WorkerTransport_getDestination(id) { + return this.messageHandler.sendWithPromise('GetDestination', { id: id } ); + }, + + getAttachments: function WorkerTransport_getAttachments() { + return this.messageHandler.sendWithPromise('GetAttachments', null); + }, + + getJavaScript: function WorkerTransport_getJavaScript() { + return this.messageHandler.sendWithPromise('GetJavaScript', null); + }, + + getOutline: function WorkerTransport_getOutline() { + return this.messageHandler.sendWithPromise('GetOutline', null); + }, + + getMetadata: function WorkerTransport_getMetadata() { + return this.messageHandler.sendWithPromise('GetMetadata', null). + then(function transportMetadata(results) { + return { + info: results[0], + metadata: (results[1] ? new PDFJS.Metadata(results[1]) : null) + }; + }); + }, + + getStats: function WorkerTransport_getStats() { + return this.messageHandler.sendWithPromise('GetStats', null); + }, + + startCleanup: function WorkerTransport_startCleanup() { + this.messageHandler.sendWithPromise('Cleanup', null). + then(function endCleanup() { + for (var i = 0, ii = this.pageCache.length; i < ii; i++) { + var page = this.pageCache[i]; + if (page) { + page.destroy(); + } + } + this.commonObjs.clear(); + FontLoader.clear(); + }.bind(this)); + } + }; + return WorkerTransport; + +})(); + +/** + * A PDF document and page is built of many objects. E.g. there are objects + * for fonts, images, rendering code and such. These objects might get processed + * inside of a worker. The `PDFObjects` implements some basic functions to + * manage these objects. + * @ignore + */ +var PDFObjects = (function PDFObjectsClosure() { + function PDFObjects() { + this.objs = {}; + } + + PDFObjects.prototype = { + /** + * Internal function. + * Ensures there is an object defined for `objId`. + */ + ensureObj: function PDFObjects_ensureObj(objId) { + if (this.objs[objId]) { + return this.objs[objId]; + } + + var obj = { + capability: createPromiseCapability(), + data: null, + resolved: false + }; + this.objs[objId] = obj; + + return obj; + }, + + /** + * If called *without* callback, this returns the data of `objId` but the + * object needs to be resolved. If it isn't, this function throws. + * + * If called *with* a callback, the callback is called with the data of the + * object once the object is resolved. That means, if you call this + * function and the object is already resolved, the callback gets called + * right away. + */ + get: function PDFObjects_get(objId, callback) { + // If there is a callback, then the get can be async and the object is + // not required to be resolved right now + if (callback) { + this.ensureObj(objId).capability.promise.then(callback); + return null; + } + + // If there isn't a callback, the user expects to get the resolved data + // directly. + var obj = this.objs[objId]; + + // If there isn't an object yet or the object isn't resolved, then the + // data isn't ready yet! + if (!obj || !obj.resolved) { + error('Requesting object that isn\'t resolved yet ' + objId); + } + + return obj.data; + }, + + /** + * Resolves the object `objId` with optional `data`. + */ + resolve: function PDFObjects_resolve(objId, data) { + var obj = this.ensureObj(objId); + + obj.resolved = true; + obj.data = data; + obj.capability.resolve(data); + }, + + isResolved: function PDFObjects_isResolved(objId) { + var objs = this.objs; + + if (!objs[objId]) { + return false; + } else { + return objs[objId].resolved; + } + }, + + hasData: function PDFObjects_hasData(objId) { + return this.isResolved(objId); + }, + + /** + * Returns the data of `objId` if object exists, null otherwise. + */ + getData: function PDFObjects_getData(objId) { + var objs = this.objs; + if (!objs[objId] || !objs[objId].resolved) { + return null; + } else { + return objs[objId].data; + } + }, + + clear: function PDFObjects_clear() { + this.objs = {}; + } + }; + return PDFObjects; +})(); + +/** + * Allows controlling of the rendering tasks. + * @class + */ +var RenderTask = (function RenderTaskClosure() { + function RenderTask(internalRenderTask) { + this._internalRenderTask = internalRenderTask; + + /** + * Callback for incremental rendering -- a function that will be called + * each time the rendering is paused. To continue rendering call the + * function that is the first argument to the callback. + * @type {function} + */ + this.onContinue = null; + } + + RenderTask.prototype = /** @lends RenderTask.prototype */ { + /** + * Promise for rendering task completion. + * @return {Promise} + */ + get promise() { + return this._internalRenderTask.capability.promise; + }, + + /** + * Cancels the rendering task. If the task is currently rendering it will + * not be cancelled until graphics pauses with a timeout. The promise that + * this object extends will resolved when cancelled. + */ + cancel: function RenderTask_cancel() { + this._internalRenderTask.cancel(); + }, + + /** + * Registers callbacks to indicate the rendering task completion. + * + * @param {function} onFulfilled The callback for the rendering completion. + * @param {function} onRejected The callback for the rendering failure. + * @return {Promise} A promise that is resolved after the onFulfilled or + * onRejected callback. + */ + then: function RenderTask_then(onFulfilled, onRejected) { + return this.promise.then.apply(this.promise, arguments); + } + }; + + return RenderTask; +})(); + +/** + * For internal use only. + * @ignore + */ +var InternalRenderTask = (function InternalRenderTaskClosure() { + + function InternalRenderTask(callback, params, objs, commonObjs, operatorList, + pageNumber) { + this.callback = callback; + this.params = params; + this.objs = objs; + this.commonObjs = commonObjs; + this.operatorListIdx = null; + this.operatorList = operatorList; + this.pageNumber = pageNumber; + this.running = false; + this.graphicsReadyCallback = null; + this.graphicsReady = false; + this.cancelled = false; + this.capability = createPromiseCapability(); + this.task = new RenderTask(this); + // caching this-bound methods + this._continueBound = this._continue.bind(this); + this._scheduleNextBound = this._scheduleNext.bind(this); + this._nextBound = this._next.bind(this); + } + + InternalRenderTask.prototype = { + + initalizeGraphics: + function InternalRenderTask_initalizeGraphics(transparency) { + + if (this.cancelled) { + return; + } + if (PDFJS.pdfBug && 'StepperManager' in globalScope && + globalScope.StepperManager.enabled) { + this.stepper = globalScope.StepperManager.create(this.pageNumber - 1); + this.stepper.init(this.operatorList); + this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint(); + } + + var params = this.params; + this.gfx = new CanvasGraphics(params.canvasContext, this.commonObjs, + this.objs, params.imageLayer); + + this.gfx.beginDrawing(params.viewport, transparency); + this.operatorListIdx = 0; + this.graphicsReady = true; + if (this.graphicsReadyCallback) { + this.graphicsReadyCallback(); + } + }, + + cancel: function InternalRenderTask_cancel() { + this.running = false; + this.cancelled = true; + this.callback('cancelled'); + }, + + operatorListChanged: function InternalRenderTask_operatorListChanged() { + if (!this.graphicsReady) { + if (!this.graphicsReadyCallback) { + this.graphicsReadyCallback = this._continueBound; + } + return; + } + + if (this.stepper) { + this.stepper.updateOperatorList(this.operatorList); + } + + if (this.running) { + return; + } + this._continue(); + }, + + _continue: function InternalRenderTask__continue() { + this.running = true; + if (this.cancelled) { + return; + } + if (this.task.onContinue) { + this.task.onContinue.call(this.task, this._scheduleNextBound); + } else { + this._scheduleNext(); + } + }, + + _scheduleNext: function InternalRenderTask__scheduleNext() { + window.requestAnimationFrame(this._nextBound); + }, + + _next: function InternalRenderTask__next() { + if (this.cancelled) { + return; + } + this.operatorListIdx = this.gfx.executeOperatorList(this.operatorList, + this.operatorListIdx, + this._continueBound, + this.stepper); + if (this.operatorListIdx === this.operatorList.argsArray.length) { + this.running = false; + if (this.operatorList.lastChunk) { + this.gfx.endDrawing(); + this.callback(); + } + } + } + + }; + + return InternalRenderTask; +})(); + + +var Metadata = PDFJS.Metadata = (function MetadataClosure() { + function fixMetadata(meta) { + return meta.replace(/>\\376\\377([^<]+)/g, function(all, codes) { + var bytes = codes.replace(/\\([0-3])([0-7])([0-7])/g, + function(code, d1, d2, d3) { + return String.fromCharCode(d1 * 64 + d2 * 8 + d3 * 1); + }); + var chars = ''; + for (var i = 0; i < bytes.length; i += 2) { + var code = bytes.charCodeAt(i) * 256 + bytes.charCodeAt(i + 1); + chars += code >= 32 && code < 127 && code !== 60 && code !== 62 && + code !== 38 && false ? String.fromCharCode(code) : + '&#x' + (0x10000 + code).toString(16).substring(1) + ';'; + } + return '>' + chars; + }); + } + + function Metadata(meta) { + if (typeof meta === 'string') { + // Ghostscript produces invalid metadata + meta = fixMetadata(meta); + + var parser = new DOMParser(); + meta = parser.parseFromString(meta, 'application/xml'); + } else if (!(meta instanceof Document)) { + error('Metadata: Invalid metadata object'); + } + + this.metaDocument = meta; + this.metadata = {}; + this.parse(); + } + + Metadata.prototype = { + parse: function Metadata_parse() { + var doc = this.metaDocument; + var rdf = doc.documentElement; + + if (rdf.nodeName.toLowerCase() !== 'rdf:rdf') { // Wrapped in <xmpmeta> + rdf = rdf.firstChild; + while (rdf && rdf.nodeName.toLowerCase() !== 'rdf:rdf') { + rdf = rdf.nextSibling; + } + } + + var nodeName = (rdf) ? rdf.nodeName.toLowerCase() : null; + if (!rdf || nodeName !== 'rdf:rdf' || !rdf.hasChildNodes()) { + return; + } + + var children = rdf.childNodes, desc, entry, name, i, ii, length, iLength; + for (i = 0, length = children.length; i < length; i++) { + desc = children[i]; + if (desc.nodeName.toLowerCase() !== 'rdf:description') { + continue; + } + + for (ii = 0, iLength = desc.childNodes.length; ii < iLength; ii++) { + if (desc.childNodes[ii].nodeName.toLowerCase() !== '#text') { + entry = desc.childNodes[ii]; + name = entry.nodeName.toLowerCase(); + this.metadata[name] = entry.textContent.trim(); + } + } + } + }, + + get: function Metadata_get(name) { + return this.metadata[name] || null; + }, + + has: function Metadata_has(name) { + return typeof this.metadata[name] !== 'undefined'; + } + }; + + return Metadata; +})(); + + +// <canvas> contexts store most of the state we need natively. +// However, PDF needs a bit more state, which we store here. + +// Minimal font size that would be used during canvas fillText operations. +var MIN_FONT_SIZE = 16; +// Maximum font size that would be used during canvas fillText operations. +var MAX_FONT_SIZE = 100; +var MAX_GROUP_SIZE = 4096; + +// Heuristic value used when enforcing minimum line widths. +var MIN_WIDTH_FACTOR = 0.65; + +var COMPILE_TYPE3_GLYPHS = true; +var MAX_SIZE_TO_COMPILE = 1000; + +var FULL_CHUNK_HEIGHT = 16; + +function createScratchCanvas(width, height) { + var canvas = document.createElement('canvas'); + canvas.width = width; + canvas.height = height; + return canvas; +} + +function addContextCurrentTransform(ctx) { + // If the context doesn't expose a `mozCurrentTransform`, add a JS based one. + if (!ctx.mozCurrentTransform) { + ctx._originalSave = ctx.save; + ctx._originalRestore = ctx.restore; + ctx._originalRotate = ctx.rotate; + ctx._originalScale = ctx.scale; + ctx._originalTranslate = ctx.translate; + ctx._originalTransform = ctx.transform; + ctx._originalSetTransform = ctx.setTransform; + + ctx._transformMatrix = ctx._transformMatrix || [1, 0, 0, 1, 0, 0]; + ctx._transformStack = []; + + Object.defineProperty(ctx, 'mozCurrentTransform', { + get: function getCurrentTransform() { + return this._transformMatrix; + } + }); + + Object.defineProperty(ctx, 'mozCurrentTransformInverse', { + get: function getCurrentTransformInverse() { + // Calculation done using WolframAlpha: + // http://www.wolframalpha.com/input/? + // i=Inverse+{{a%2C+c%2C+e}%2C+{b%2C+d%2C+f}%2C+{0%2C+0%2C+1}} + + var m = this._transformMatrix; + var a = m[0], b = m[1], c = m[2], d = m[3], e = m[4], f = m[5]; + + var ad_bc = a * d - b * c; + var bc_ad = b * c - a * d; + + return [ + d / ad_bc, + b / bc_ad, + c / bc_ad, + a / ad_bc, + (d * e - c * f) / bc_ad, + (b * e - a * f) / ad_bc + ]; + } + }); + + ctx.save = function ctxSave() { + var old = this._transformMatrix; + this._transformStack.push(old); + this._transformMatrix = old.slice(0, 6); + + this._originalSave(); + }; + + ctx.restore = function ctxRestore() { + var prev = this._transformStack.pop(); + if (prev) { + this._transformMatrix = prev; + this._originalRestore(); + } + }; + + ctx.translate = function ctxTranslate(x, y) { + var m = this._transformMatrix; + m[4] = m[0] * x + m[2] * y + m[4]; + m[5] = m[1] * x + m[3] * y + m[5]; + + this._originalTranslate(x, y); + }; + + ctx.scale = function ctxScale(x, y) { + var m = this._transformMatrix; + m[0] = m[0] * x; + m[1] = m[1] * x; + m[2] = m[2] * y; + m[3] = m[3] * y; + + this._originalScale(x, y); + }; + + ctx.transform = function ctxTransform(a, b, c, d, e, f) { + var m = this._transformMatrix; + this._transformMatrix = [ + m[0] * a + m[2] * b, + m[1] * a + m[3] * b, + m[0] * c + m[2] * d, + m[1] * c + m[3] * d, + m[0] * e + m[2] * f + m[4], + m[1] * e + m[3] * f + m[5] + ]; + + ctx._originalTransform(a, b, c, d, e, f); + }; + + ctx.setTransform = function ctxSetTransform(a, b, c, d, e, f) { + this._transformMatrix = [a, b, c, d, e, f]; + + ctx._originalSetTransform(a, b, c, d, e, f); + }; + + ctx.rotate = function ctxRotate(angle) { + var cosValue = Math.cos(angle); + var sinValue = Math.sin(angle); + + var m = this._transformMatrix; + this._transformMatrix = [ + m[0] * cosValue + m[2] * sinValue, + m[1] * cosValue + m[3] * sinValue, + m[0] * (-sinValue) + m[2] * cosValue, + m[1] * (-sinValue) + m[3] * cosValue, + m[4], + m[5] + ]; + + this._originalRotate(angle); + }; + } +} + +var CachedCanvases = (function CachedCanvasesClosure() { + var cache = {}; + return { + getCanvas: function CachedCanvases_getCanvas(id, width, height, + trackTransform) { + var canvasEntry; + if (cache[id] !== undefined) { + canvasEntry = cache[id]; + canvasEntry.canvas.width = width; + canvasEntry.canvas.height = height; + // reset canvas transform for emulated mozCurrentTransform, if needed + canvasEntry.context.setTransform(1, 0, 0, 1, 0, 0); + } else { + var canvas = createScratchCanvas(width, height); + var ctx = canvas.getContext('2d'); + if (trackTransform) { + addContextCurrentTransform(ctx); + } + cache[id] = canvasEntry = {canvas: canvas, context: ctx}; + } + return canvasEntry; + }, + clear: function () { + for (var id in cache) { + var canvasEntry = cache[id]; + // Zeroing the width and height causes Firefox to release graphics + // resources immediately, which can greatly reduce memory consumption. + canvasEntry.canvas.width = 0; + canvasEntry.canvas.height = 0; + delete cache[id]; + } + } + }; +})(); + +function compileType3Glyph(imgData) { + var POINT_TO_PROCESS_LIMIT = 1000; + + var width = imgData.width, height = imgData.height; + var i, j, j0, width1 = width + 1; + var points = new Uint8Array(width1 * (height + 1)); + var POINT_TYPES = + new Uint8Array([0, 2, 4, 0, 1, 0, 5, 4, 8, 10, 0, 8, 0, 2, 1, 0]); + + // decodes bit-packed mask data + var lineSize = (width + 7) & ~7, data0 = imgData.data; + var data = new Uint8Array(lineSize * height), pos = 0, ii; + for (i = 0, ii = data0.length; i < ii; i++) { + var mask = 128, elem = data0[i]; + while (mask > 0) { + data[pos++] = (elem & mask) ? 0 : 255; + mask >>= 1; + } + } + + // finding iteresting points: every point is located between mask pixels, + // so there will be points of the (width + 1)x(height + 1) grid. Every point + // will have flags assigned based on neighboring mask pixels: + // 4 | 8 + // --P-- + // 2 | 1 + // We are interested only in points with the flags: + // - outside corners: 1, 2, 4, 8; + // - inside corners: 7, 11, 13, 14; + // - and, intersections: 5, 10. + var count = 0; + pos = 0; + if (data[pos] !== 0) { + points[0] = 1; + ++count; + } + for (j = 1; j < width; j++) { + if (data[pos] !== data[pos + 1]) { + points[j] = data[pos] ? 2 : 1; + ++count; + } + pos++; + } + if (data[pos] !== 0) { + points[j] = 2; + ++count; + } + for (i = 1; i < height; i++) { + pos = i * lineSize; + j0 = i * width1; + if (data[pos - lineSize] !== data[pos]) { + points[j0] = data[pos] ? 1 : 8; + ++count; + } + // 'sum' is the position of the current pixel configuration in the 'TYPES' + // array (in order 8-1-2-4, so we can use '>>2' to shift the column). + var sum = (data[pos] ? 4 : 0) + (data[pos - lineSize] ? 8 : 0); + for (j = 1; j < width; j++) { + sum = (sum >> 2) + (data[pos + 1] ? 4 : 0) + + (data[pos - lineSize + 1] ? 8 : 0); + if (POINT_TYPES[sum]) { + points[j0 + j] = POINT_TYPES[sum]; + ++count; + } + pos++; + } + if (data[pos - lineSize] !== data[pos]) { + points[j0 + j] = data[pos] ? 2 : 4; + ++count; + } + + if (count > POINT_TO_PROCESS_LIMIT) { + return null; + } + } + + pos = lineSize * (height - 1); + j0 = i * width1; + if (data[pos] !== 0) { + points[j0] = 8; + ++count; + } + for (j = 1; j < width; j++) { + if (data[pos] !== data[pos + 1]) { + points[j0 + j] = data[pos] ? 4 : 8; + ++count; + } + pos++; + } + if (data[pos] !== 0) { + points[j0 + j] = 4; + ++count; + } + if (count > POINT_TO_PROCESS_LIMIT) { + return null; + } + + // building outlines + var steps = new Int32Array([0, width1, -1, 0, -width1, 0, 0, 0, 1]); + var outlines = []; + for (i = 0; count && i <= height; i++) { + var p = i * width1; + var end = p + width; + while (p < end && !points[p]) { + p++; + } + if (p === end) { + continue; + } + var coords = [p % width1, i]; + + var type = points[p], p0 = p, pp; + do { + var step = steps[type]; + do { + p += step; + } while (!points[p]); + + pp = points[p]; + if (pp !== 5 && pp !== 10) { + // set new direction + type = pp; + // delete mark + points[p] = 0; + } else { // type is 5 or 10, ie, a crossing + // set new direction + type = pp & ((0x33 * type) >> 4); + // set new type for "future hit" + points[p] &= (type >> 2 | type << 2); + } + + coords.push(p % width1); + coords.push((p / width1) | 0); + --count; + } while (p0 !== p); + outlines.push(coords); + --i; + } + + var drawOutline = function(c) { + c.save(); + // the path shall be painted in [0..1]x[0..1] space + c.scale(1 / width, -1 / height); + c.translate(0, -height); + c.beginPath(); + for (var i = 0, ii = outlines.length; i < ii; i++) { + var o = outlines[i]; + c.moveTo(o[0], o[1]); + for (var j = 2, jj = o.length; j < jj; j += 2) { + c.lineTo(o[j], o[j+1]); + } + } + c.fill(); + c.beginPath(); + c.restore(); + }; + + return drawOutline; +} + +var CanvasExtraState = (function CanvasExtraStateClosure() { + function CanvasExtraState(old) { + // Are soft masks and alpha values shapes or opacities? + this.alphaIsShape = false; + this.fontSize = 0; + this.fontSizeScale = 1; + this.textMatrix = IDENTITY_MATRIX; + this.textMatrixScale = 1; + this.fontMatrix = FONT_IDENTITY_MATRIX; + this.leading = 0; + // Current point (in user coordinates) + this.x = 0; + this.y = 0; + // Start of text line (in text coordinates) + this.lineX = 0; + this.lineY = 0; + // Character and word spacing + this.charSpacing = 0; + this.wordSpacing = 0; + this.textHScale = 1; + this.textRenderingMode = TextRenderingMode.FILL; + this.textRise = 0; + // Default fore and background colors + this.fillColor = '#000000'; + this.strokeColor = '#000000'; + this.patternFill = false; + // Note: fill alpha applies to all non-stroking operations + this.fillAlpha = 1; + this.strokeAlpha = 1; + this.lineWidth = 1; + this.activeSMask = null; // nonclonable field (see the save method below) + + this.old = old; + } + + CanvasExtraState.prototype = { + clone: function CanvasExtraState_clone() { + return Object.create(this); + }, + setCurrentPoint: function CanvasExtraState_setCurrentPoint(x, y) { + this.x = x; + this.y = y; + } + }; + return CanvasExtraState; +})(); + +var CanvasGraphics = (function CanvasGraphicsClosure() { + // Defines the time the executeOperatorList is going to be executing + // before it stops and shedules a continue of execution. + var EXECUTION_TIME = 15; + // Defines the number of steps before checking the execution time + var EXECUTION_STEPS = 10; + + function CanvasGraphics(canvasCtx, commonObjs, objs, imageLayer) { + this.ctx = canvasCtx; + this.current = new CanvasExtraState(); + this.stateStack = []; + this.pendingClip = null; + this.pendingEOFill = false; + this.res = null; + this.xobjs = null; + this.commonObjs = commonObjs; + this.objs = objs; + this.imageLayer = imageLayer; + this.groupStack = []; + this.processingType3 = null; + // Patterns are painted relative to the initial page/form transform, see pdf + // spec 8.7.2 NOTE 1. + this.baseTransform = null; + this.baseTransformStack = []; + this.groupLevel = 0; + this.smaskStack = []; + this.smaskCounter = 0; + this.tempSMask = null; + if (canvasCtx) { + // NOTE: if mozCurrentTransform is polyfilled, then the current state of + // the transformation must already be set in canvasCtx._transformMatrix. + addContextCurrentTransform(canvasCtx); + } + this.cachedGetSinglePixelWidth = null; + } + + function putBinaryImageData(ctx, imgData) { + if (typeof ImageData !== 'undefined' && imgData instanceof ImageData) { + ctx.putImageData(imgData, 0, 0); + return; + } + + // Put the image data to the canvas in chunks, rather than putting the + // whole image at once. This saves JS memory, because the ImageData object + // is smaller. It also possibly saves C++ memory within the implementation + // of putImageData(). (E.g. in Firefox we make two short-lived copies of + // the data passed to putImageData()). |n| shouldn't be too small, however, + // because too many putImageData() calls will slow things down. + // + // Note: as written, if the last chunk is partial, the putImageData() call + // will (conceptually) put pixels past the bounds of the canvas. But + // that's ok; any such pixels are ignored. + + var height = imgData.height, width = imgData.width; + var partialChunkHeight = height % FULL_CHUNK_HEIGHT; + var fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT; + var totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1; + + var chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT); + var srcPos = 0, destPos; + var src = imgData.data; + var dest = chunkImgData.data; + var i, j, thisChunkHeight, elemsInThisChunk; + + // There are multiple forms in which the pixel data can be passed, and + // imgData.kind tells us which one this is. + if (imgData.kind === ImageKind.GRAYSCALE_1BPP) { + // Grayscale, 1 bit per pixel (i.e. black-and-white). + var srcLength = src.byteLength; + var dest32 = PDFJS.hasCanvasTypedArrays ? new Uint32Array(dest.buffer) : + new Uint32ArrayView(dest); + var dest32DataLength = dest32.length; + var fullSrcDiff = (width + 7) >> 3; + var white = 0xFFFFFFFF; + var black = (PDFJS.isLittleEndian || !PDFJS.hasCanvasTypedArrays) ? + 0xFF000000 : 0x000000FF; + for (i = 0; i < totalChunks; i++) { + thisChunkHeight = + (i < fullChunks) ? FULL_CHUNK_HEIGHT : partialChunkHeight; + destPos = 0; + for (j = 0; j < thisChunkHeight; j++) { + var srcDiff = srcLength - srcPos; + var k = 0; + var kEnd = (srcDiff > fullSrcDiff) ? width : srcDiff * 8 - 7; + var kEndUnrolled = kEnd & ~7; + var mask = 0; + var srcByte = 0; + for (; k < kEndUnrolled; k += 8) { + srcByte = src[srcPos++]; + dest32[destPos++] = (srcByte & 128) ? white : black; + dest32[destPos++] = (srcByte & 64) ? white : black; + dest32[destPos++] = (srcByte & 32) ? white : black; + dest32[destPos++] = (srcByte & 16) ? white : black; + dest32[destPos++] = (srcByte & 8) ? white : black; + dest32[destPos++] = (srcByte & 4) ? white : black; + dest32[destPos++] = (srcByte & 2) ? white : black; + dest32[destPos++] = (srcByte & 1) ? white : black; + } + for (; k < kEnd; k++) { + if (mask === 0) { + srcByte = src[srcPos++]; + mask = 128; + } + + dest32[destPos++] = (srcByte & mask) ? white : black; + mask >>= 1; + } + } + // We ran out of input. Make all remaining pixels transparent. + while (destPos < dest32DataLength) { + dest32[destPos++] = 0; + } + + ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); + } + } else if (imgData.kind === ImageKind.RGBA_32BPP) { + // RGBA, 32-bits per pixel. + + j = 0; + elemsInThisChunk = width * FULL_CHUNK_HEIGHT * 4; + for (i = 0; i < fullChunks; i++) { + dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk)); + srcPos += elemsInThisChunk; + + ctx.putImageData(chunkImgData, 0, j); + j += FULL_CHUNK_HEIGHT; + } + if (i < totalChunks) { + elemsInThisChunk = width * partialChunkHeight * 4; + dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk)); + ctx.putImageData(chunkImgData, 0, j); + } + + } else if (imgData.kind === ImageKind.RGB_24BPP) { + // RGB, 24-bits per pixel. + thisChunkHeight = FULL_CHUNK_HEIGHT; + elemsInThisChunk = width * thisChunkHeight; + for (i = 0; i < totalChunks; i++) { + if (i >= fullChunks) { + thisChunkHeight = partialChunkHeight; + elemsInThisChunk = width * thisChunkHeight; + } + + destPos = 0; + for (j = elemsInThisChunk; j--;) { + dest[destPos++] = src[srcPos++]; + dest[destPos++] = src[srcPos++]; + dest[destPos++] = src[srcPos++]; + dest[destPos++] = 255; + } + ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); + } + } else { + error('bad image kind: ' + imgData.kind); + } + } + + function putBinaryImageMask(ctx, imgData) { + var height = imgData.height, width = imgData.width; + var partialChunkHeight = height % FULL_CHUNK_HEIGHT; + var fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT; + var totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1; + + var chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT); + var srcPos = 0; + var src = imgData.data; + var dest = chunkImgData.data; + + for (var i = 0; i < totalChunks; i++) { + var thisChunkHeight = + (i < fullChunks) ? FULL_CHUNK_HEIGHT : partialChunkHeight; + + // Expand the mask so it can be used by the canvas. Any required + // inversion has already been handled. + var destPos = 3; // alpha component offset + for (var j = 0; j < thisChunkHeight; j++) { + var mask = 0; + for (var k = 0; k < width; k++) { + if (!mask) { + var elem = src[srcPos++]; + mask = 128; + } + dest[destPos] = (elem & mask) ? 0 : 255; + destPos += 4; + mask >>= 1; + } + } + ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); + } + } + + function copyCtxState(sourceCtx, destCtx) { + var properties = ['strokeStyle', 'fillStyle', 'fillRule', 'globalAlpha', + 'lineWidth', 'lineCap', 'lineJoin', 'miterLimit', + 'globalCompositeOperation', 'font']; + for (var i = 0, ii = properties.length; i < ii; i++) { + var property = properties[i]; + if (sourceCtx[property] !== undefined) { + destCtx[property] = sourceCtx[property]; + } + } + if (sourceCtx.setLineDash !== undefined) { + destCtx.setLineDash(sourceCtx.getLineDash()); + destCtx.lineDashOffset = sourceCtx.lineDashOffset; + } else if (sourceCtx.mozDashOffset !== undefined) { + destCtx.mozDash = sourceCtx.mozDash; + destCtx.mozDashOffset = sourceCtx.mozDashOffset; + } + } + + function composeSMaskBackdrop(bytes, r0, g0, b0) { + var length = bytes.length; + for (var i = 3; i < length; i += 4) { + var alpha = bytes[i]; + if (alpha === 0) { + bytes[i - 3] = r0; + bytes[i - 2] = g0; + bytes[i - 1] = b0; + } else if (alpha < 255) { + var alpha_ = 255 - alpha; + bytes[i - 3] = (bytes[i - 3] * alpha + r0 * alpha_) >> 8; + bytes[i - 2] = (bytes[i - 2] * alpha + g0 * alpha_) >> 8; + bytes[i - 1] = (bytes[i - 1] * alpha + b0 * alpha_) >> 8; + } + } + } + + function composeSMaskAlpha(maskData, layerData) { + var length = maskData.length; + var scale = 1 / 255; + for (var i = 3; i < length; i += 4) { + var alpha = maskData[i]; + layerData[i] = (layerData[i] * alpha * scale) | 0; + } + } + + function composeSMaskLuminosity(maskData, layerData) { + var length = maskData.length; + for (var i = 3; i < length; i += 4) { + var y = (maskData[i - 3] * 77) + // * 0.3 / 255 * 0x10000 + (maskData[i - 2] * 152) + // * 0.59 .... + (maskData[i - 1] * 28); // * 0.11 .... + layerData[i] = (layerData[i] * y) >> 16; + } + } + + function genericComposeSMask(maskCtx, layerCtx, width, height, + subtype, backdrop) { + var hasBackdrop = !!backdrop; + var r0 = hasBackdrop ? backdrop[0] : 0; + var g0 = hasBackdrop ? backdrop[1] : 0; + var b0 = hasBackdrop ? backdrop[2] : 0; + + var composeFn; + if (subtype === 'Luminosity') { + composeFn = composeSMaskLuminosity; + } else { + composeFn = composeSMaskAlpha; + } + + // processing image in chunks to save memory + var PIXELS_TO_PROCESS = 1048576; + var chunkSize = Math.min(height, Math.ceil(PIXELS_TO_PROCESS / width)); + for (var row = 0; row < height; row += chunkSize) { + var chunkHeight = Math.min(chunkSize, height - row); + var maskData = maskCtx.getImageData(0, row, width, chunkHeight); + var layerData = layerCtx.getImageData(0, row, width, chunkHeight); + + if (hasBackdrop) { + composeSMaskBackdrop(maskData.data, r0, g0, b0); + } + composeFn(maskData.data, layerData.data); + + maskCtx.putImageData(layerData, 0, row); + } + } + + function composeSMask(ctx, smask, layerCtx) { + var mask = smask.canvas; + var maskCtx = smask.context; + + ctx.setTransform(smask.scaleX, 0, 0, smask.scaleY, + smask.offsetX, smask.offsetY); + + var backdrop = smask.backdrop || null; + if (WebGLUtils.isEnabled) { + var composed = WebGLUtils.composeSMask(layerCtx.canvas, mask, + {subtype: smask.subtype, backdrop: backdrop}); + ctx.setTransform(1, 0, 0, 1, 0, 0); + ctx.drawImage(composed, smask.offsetX, smask.offsetY); + return; + } + genericComposeSMask(maskCtx, layerCtx, mask.width, mask.height, + smask.subtype, backdrop); + ctx.drawImage(mask, 0, 0); + } + + var LINE_CAP_STYLES = ['butt', 'round', 'square']; + var LINE_JOIN_STYLES = ['miter', 'round', 'bevel']; + var NORMAL_CLIP = {}; + var EO_CLIP = {}; + + CanvasGraphics.prototype = { + + beginDrawing: function CanvasGraphics_beginDrawing(viewport, transparency) { + // For pdfs that use blend modes we have to clear the canvas else certain + // blend modes can look wrong since we'd be blending with a white + // backdrop. The problem with a transparent backdrop though is we then + // don't get sub pixel anti aliasing on text, so we fill with white if + // we can. + var width = this.ctx.canvas.width; + var height = this.ctx.canvas.height; + if (transparency) { + this.ctx.clearRect(0, 0, width, height); + } else { + this.ctx.mozOpaque = true; + this.ctx.save(); + this.ctx.fillStyle = 'rgb(255, 255, 255)'; + this.ctx.fillRect(0, 0, width, height); + this.ctx.restore(); + } + + var transform = viewport.transform; + + this.ctx.save(); + this.ctx.transform.apply(this.ctx, transform); + + this.baseTransform = this.ctx.mozCurrentTransform.slice(); + + if (this.imageLayer) { + this.imageLayer.beginLayout(); + } + }, + + executeOperatorList: function CanvasGraphics_executeOperatorList( + operatorList, + executionStartIdx, continueCallback, + stepper) { + var argsArray = operatorList.argsArray; + var fnArray = operatorList.fnArray; + var i = executionStartIdx || 0; + var argsArrayLen = argsArray.length; + + // Sometimes the OperatorList to execute is empty. + if (argsArrayLen === i) { + return i; + } + + var chunkOperations = (argsArrayLen - i > EXECUTION_STEPS && + typeof continueCallback === 'function'); + var endTime = chunkOperations ? Date.now() + EXECUTION_TIME : 0; + var steps = 0; + + var commonObjs = this.commonObjs; + var objs = this.objs; + var fnId; + + while (true) { + if (stepper !== undefined && i === stepper.nextBreakPoint) { + stepper.breakIt(i, continueCallback); + return i; + } + + fnId = fnArray[i]; + + if (fnId !== OPS.dependency) { + this[fnId].apply(this, argsArray[i]); + } else { + var deps = argsArray[i]; + for (var n = 0, nn = deps.length; n < nn; n++) { + var depObjId = deps[n]; + var common = depObjId[0] === 'g' && depObjId[1] === '_'; + var objsPool = common ? commonObjs : objs; + + // If the promise isn't resolved yet, add the continueCallback + // to the promise and bail out. + if (!objsPool.isResolved(depObjId)) { + objsPool.get(depObjId, continueCallback); + return i; + } + } + } + + i++; + + // If the entire operatorList was executed, stop as were done. + if (i === argsArrayLen) { + return i; + } + + // If the execution took longer then a certain amount of time and + // `continueCallback` is specified, interrupt the execution. + if (chunkOperations && ++steps > EXECUTION_STEPS) { + if (Date.now() > endTime) { + continueCallback(); + return i; + } + steps = 0; + } + + // If the operatorList isn't executed completely yet OR the execution + // time was short enough, do another execution round. + } + }, + + endDrawing: function CanvasGraphics_endDrawing() { + this.ctx.restore(); + CachedCanvases.clear(); + WebGLUtils.clear(); + + if (this.imageLayer) { + this.imageLayer.endLayout(); + } + }, + + // Graphics state + setLineWidth: function CanvasGraphics_setLineWidth(width) { + this.current.lineWidth = width; + this.ctx.lineWidth = width; + }, + setLineCap: function CanvasGraphics_setLineCap(style) { + this.ctx.lineCap = LINE_CAP_STYLES[style]; + }, + setLineJoin: function CanvasGraphics_setLineJoin(style) { + this.ctx.lineJoin = LINE_JOIN_STYLES[style]; + }, + setMiterLimit: function CanvasGraphics_setMiterLimit(limit) { + this.ctx.miterLimit = limit; + }, + setDash: function CanvasGraphics_setDash(dashArray, dashPhase) { + var ctx = this.ctx; + if (ctx.setLineDash !== undefined) { + ctx.setLineDash(dashArray); + ctx.lineDashOffset = dashPhase; + } else { + ctx.mozDash = dashArray; + ctx.mozDashOffset = dashPhase; + } + }, + setRenderingIntent: function CanvasGraphics_setRenderingIntent(intent) { + // Maybe if we one day fully support color spaces this will be important + // for now we can ignore. + // TODO set rendering intent? + }, + setFlatness: function CanvasGraphics_setFlatness(flatness) { + // There's no way to control this with canvas, but we can safely ignore. + // TODO set flatness? + }, + setGState: function CanvasGraphics_setGState(states) { + for (var i = 0, ii = states.length; i < ii; i++) { + var state = states[i]; + var key = state[0]; + var value = state[1]; + + switch (key) { + case 'LW': + this.setLineWidth(value); + break; + case 'LC': + this.setLineCap(value); + break; + case 'LJ': + this.setLineJoin(value); + break; + case 'ML': + this.setMiterLimit(value); + break; + case 'D': + this.setDash(value[0], value[1]); + break; + case 'RI': + this.setRenderingIntent(value); + break; + case 'FL': + this.setFlatness(value); + break; + case 'Font': + this.setFont(value[0], value[1]); + break; + case 'CA': + this.current.strokeAlpha = state[1]; + break; + case 'ca': + this.current.fillAlpha = state[1]; + this.ctx.globalAlpha = state[1]; + break; + case 'BM': + if (value && value.name && (value.name !== 'Normal')) { + var mode = value.name.replace(/([A-Z])/g, + function(c) { + return '-' + c.toLowerCase(); + } + ).substring(1); + this.ctx.globalCompositeOperation = mode; + if (this.ctx.globalCompositeOperation !== mode) { + warn('globalCompositeOperation "' + mode + + '" is not supported'); + } + } else { + this.ctx.globalCompositeOperation = 'source-over'; + } + break; + case 'SMask': + if (this.current.activeSMask) { + this.endSMaskGroup(); + } + this.current.activeSMask = value ? this.tempSMask : null; + if (this.current.activeSMask) { + this.beginSMaskGroup(); + } + this.tempSMask = null; + break; + } + } + }, + beginSMaskGroup: function CanvasGraphics_beginSMaskGroup() { + + var activeSMask = this.current.activeSMask; + var drawnWidth = activeSMask.canvas.width; + var drawnHeight = activeSMask.canvas.height; + var cacheId = 'smaskGroupAt' + this.groupLevel; + var scratchCanvas = CachedCanvases.getCanvas( + cacheId, drawnWidth, drawnHeight, true); + + var currentCtx = this.ctx; + var currentTransform = currentCtx.mozCurrentTransform; + this.ctx.save(); + + var groupCtx = scratchCanvas.context; + groupCtx.scale(1 / activeSMask.scaleX, 1 / activeSMask.scaleY); + groupCtx.translate(-activeSMask.offsetX, -activeSMask.offsetY); + groupCtx.transform.apply(groupCtx, currentTransform); + + copyCtxState(currentCtx, groupCtx); + this.ctx = groupCtx; + this.setGState([ + ['BM', 'Normal'], + ['ca', 1], + ['CA', 1] + ]); + this.groupStack.push(currentCtx); + this.groupLevel++; + }, + endSMaskGroup: function CanvasGraphics_endSMaskGroup() { + var groupCtx = this.ctx; + this.groupLevel--; + this.ctx = this.groupStack.pop(); + + composeSMask(this.ctx, this.current.activeSMask, groupCtx); + this.ctx.restore(); + }, + save: function CanvasGraphics_save() { + this.ctx.save(); + var old = this.current; + this.stateStack.push(old); + this.current = old.clone(); + this.current.activeSMask = null; + }, + restore: function CanvasGraphics_restore() { + if (this.stateStack.length !== 0) { + if (this.current.activeSMask !== null) { + this.endSMaskGroup(); + } + + this.current = this.stateStack.pop(); + this.ctx.restore(); + + this.cachedGetSinglePixelWidth = null; + } + }, + transform: function CanvasGraphics_transform(a, b, c, d, e, f) { + this.ctx.transform(a, b, c, d, e, f); + + this.cachedGetSinglePixelWidth = null; + }, + + // Path + constructPath: function CanvasGraphics_constructPath(ops, args) { + var ctx = this.ctx; + var current = this.current; + var x = current.x, y = current.y; + for (var i = 0, j = 0, ii = ops.length; i < ii; i++) { + switch (ops[i] | 0) { + case OPS.rectangle: + x = args[j++]; + y = args[j++]; + var width = args[j++]; + var height = args[j++]; + if (width === 0) { + width = this.getSinglePixelWidth(); + } + if (height === 0) { + height = this.getSinglePixelWidth(); + } + var xw = x + width; + var yh = y + height; + this.ctx.moveTo(x, y); + this.ctx.lineTo(xw, y); + this.ctx.lineTo(xw, yh); + this.ctx.lineTo(x, yh); + this.ctx.lineTo(x, y); + this.ctx.closePath(); + break; + case OPS.moveTo: + x = args[j++]; + y = args[j++]; + ctx.moveTo(x, y); + break; + case OPS.lineTo: + x = args[j++]; + y = args[j++]; + ctx.lineTo(x, y); + break; + case OPS.curveTo: + x = args[j + 4]; + y = args[j + 5]; + ctx.bezierCurveTo(args[j], args[j + 1], args[j + 2], args[j + 3], + x, y); + j += 6; + break; + case OPS.curveTo2: + ctx.bezierCurveTo(x, y, args[j], args[j + 1], + args[j + 2], args[j + 3]); + x = args[j + 2]; + y = args[j + 3]; + j += 4; + break; + case OPS.curveTo3: + x = args[j + 2]; + y = args[j + 3]; + ctx.bezierCurveTo(args[j], args[j + 1], x, y, x, y); + j += 4; + break; + case OPS.closePath: + ctx.closePath(); + break; + } + } + current.setCurrentPoint(x, y); + }, + closePath: function CanvasGraphics_closePath() { + this.ctx.closePath(); + }, + stroke: function CanvasGraphics_stroke(consumePath) { + consumePath = typeof consumePath !== 'undefined' ? consumePath : true; + var ctx = this.ctx; + var strokeColor = this.current.strokeColor; + // Prevent drawing too thin lines by enforcing a minimum line width. + ctx.lineWidth = Math.max(this.getSinglePixelWidth() * MIN_WIDTH_FACTOR, + this.current.lineWidth); + // For stroke we want to temporarily change the global alpha to the + // stroking alpha. + ctx.globalAlpha = this.current.strokeAlpha; + if (strokeColor && strokeColor.hasOwnProperty('type') && + strokeColor.type === 'Pattern') { + // for patterns, we transform to pattern space, calculate + // the pattern, call stroke, and restore to user space + ctx.save(); + ctx.strokeStyle = strokeColor.getPattern(ctx, this); + ctx.stroke(); + ctx.restore(); + } else { + ctx.stroke(); + } + if (consumePath) { + this.consumePath(); + } + // Restore the global alpha to the fill alpha + ctx.globalAlpha = this.current.fillAlpha; + }, + closeStroke: function CanvasGraphics_closeStroke() { + this.closePath(); + this.stroke(); + }, + fill: function CanvasGraphics_fill(consumePath) { + consumePath = typeof consumePath !== 'undefined' ? consumePath : true; + var ctx = this.ctx; + var fillColor = this.current.fillColor; + var isPatternFill = this.current.patternFill; + var needRestore = false; + + if (isPatternFill) { + ctx.save(); + ctx.fillStyle = fillColor.getPattern(ctx, this); + needRestore = true; + } + + if (this.pendingEOFill) { + if (ctx.mozFillRule !== undefined) { + ctx.mozFillRule = 'evenodd'; + ctx.fill(); + ctx.mozFillRule = 'nonzero'; + } else { + try { + ctx.fill('evenodd'); + } catch (ex) { + // shouldn't really happen, but browsers might think differently + ctx.fill(); + } + } + this.pendingEOFill = false; + } else { + ctx.fill(); + } + + if (needRestore) { + ctx.restore(); + } + if (consumePath) { + this.consumePath(); + } + }, + eoFill: function CanvasGraphics_eoFill() { + this.pendingEOFill = true; + this.fill(); + }, + fillStroke: function CanvasGraphics_fillStroke() { + this.fill(false); + this.stroke(false); + + this.consumePath(); + }, + eoFillStroke: function CanvasGraphics_eoFillStroke() { + this.pendingEOFill = true; + this.fillStroke(); + }, + closeFillStroke: function CanvasGraphics_closeFillStroke() { + this.closePath(); + this.fillStroke(); + }, + closeEOFillStroke: function CanvasGraphics_closeEOFillStroke() { + this.pendingEOFill = true; + this.closePath(); + this.fillStroke(); + }, + endPath: function CanvasGraphics_endPath() { + this.consumePath(); + }, + + // Clipping + clip: function CanvasGraphics_clip() { + this.pendingClip = NORMAL_CLIP; + }, + eoClip: function CanvasGraphics_eoClip() { + this.pendingClip = EO_CLIP; + }, + + // Text + beginText: function CanvasGraphics_beginText() { + this.current.textMatrix = IDENTITY_MATRIX; + this.current.textMatrixScale = 1; + this.current.x = this.current.lineX = 0; + this.current.y = this.current.lineY = 0; + }, + endText: function CanvasGraphics_endText() { + var paths = this.pendingTextPaths; + var ctx = this.ctx; + if (paths === undefined) { + ctx.beginPath(); + return; + } + + ctx.save(); + ctx.beginPath(); + for (var i = 0; i < paths.length; i++) { + var path = paths[i]; + ctx.setTransform.apply(ctx, path.transform); + ctx.translate(path.x, path.y); + path.addToPath(ctx, path.fontSize); + } + ctx.restore(); + ctx.clip(); + ctx.beginPath(); + delete this.pendingTextPaths; + }, + setCharSpacing: function CanvasGraphics_setCharSpacing(spacing) { + this.current.charSpacing = spacing; + }, + setWordSpacing: function CanvasGraphics_setWordSpacing(spacing) { + this.current.wordSpacing = spacing; + }, + setHScale: function CanvasGraphics_setHScale(scale) { + this.current.textHScale = scale / 100; + }, + setLeading: function CanvasGraphics_setLeading(leading) { + this.current.leading = -leading; + }, + setFont: function CanvasGraphics_setFont(fontRefName, size) { + var fontObj = this.commonObjs.get(fontRefName); + var current = this.current; + + if (!fontObj) { + error('Can\'t find font for ' + fontRefName); + } + + current.fontMatrix = (fontObj.fontMatrix ? + fontObj.fontMatrix : FONT_IDENTITY_MATRIX); + + // A valid matrix needs all main diagonal elements to be non-zero + // This also ensures we bypass FF bugzilla bug #719844. + if (current.fontMatrix[0] === 0 || + current.fontMatrix[3] === 0) { + warn('Invalid font matrix for font ' + fontRefName); + } + + // The spec for Tf (setFont) says that 'size' specifies the font 'scale', + // and in some docs this can be negative (inverted x-y axes). + if (size < 0) { + size = -size; + current.fontDirection = -1; + } else { + current.fontDirection = 1; + } + + this.current.font = fontObj; + this.current.fontSize = size; + + if (fontObj.isType3Font) { + return; // we don't need ctx.font for Type3 fonts + } + + var name = fontObj.loadedName || 'sans-serif'; + var bold = fontObj.black ? (fontObj.bold ? 'bolder' : 'bold') : + (fontObj.bold ? 'bold' : 'normal'); + + var italic = fontObj.italic ? 'italic' : 'normal'; + var typeface = '"' + name + '", ' + fontObj.fallbackName; + + // Some font backends cannot handle fonts below certain size. + // Keeping the font at minimal size and using the fontSizeScale to change + // the current transformation matrix before the fillText/strokeText. + // See https://bugzilla.mozilla.org/show_bug.cgi?id=726227 + var browserFontSize = size < MIN_FONT_SIZE ? MIN_FONT_SIZE : + size > MAX_FONT_SIZE ? MAX_FONT_SIZE : size; + this.current.fontSizeScale = size / browserFontSize; + + var rule = italic + ' ' + bold + ' ' + browserFontSize + 'px ' + typeface; + this.ctx.font = rule; + }, + setTextRenderingMode: function CanvasGraphics_setTextRenderingMode(mode) { + this.current.textRenderingMode = mode; + }, + setTextRise: function CanvasGraphics_setTextRise(rise) { + this.current.textRise = rise; + }, + moveText: function CanvasGraphics_moveText(x, y) { + this.current.x = this.current.lineX += x; + this.current.y = this.current.lineY += y; + }, + setLeadingMoveText: function CanvasGraphics_setLeadingMoveText(x, y) { + this.setLeading(-y); + this.moveText(x, y); + }, + setTextMatrix: function CanvasGraphics_setTextMatrix(a, b, c, d, e, f) { + this.current.textMatrix = [a, b, c, d, e, f]; + this.current.textMatrixScale = Math.sqrt(a * a + b * b); + + this.current.x = this.current.lineX = 0; + this.current.y = this.current.lineY = 0; + }, + nextLine: function CanvasGraphics_nextLine() { + this.moveText(0, this.current.leading); + }, + + paintChar: function CanvasGraphics_paintChar(character, x, y) { + var ctx = this.ctx; + var current = this.current; + var font = current.font; + var textRenderingMode = current.textRenderingMode; + var fontSize = current.fontSize / current.fontSizeScale; + var fillStrokeMode = textRenderingMode & + TextRenderingMode.FILL_STROKE_MASK; + var isAddToPathSet = !!(textRenderingMode & + TextRenderingMode.ADD_TO_PATH_FLAG); + + var addToPath; + if (font.disableFontFace || isAddToPathSet) { + addToPath = font.getPathGenerator(this.commonObjs, character); + } + + if (font.disableFontFace) { + ctx.save(); + ctx.translate(x, y); + ctx.beginPath(); + addToPath(ctx, fontSize); + if (fillStrokeMode === TextRenderingMode.FILL || + fillStrokeMode === TextRenderingMode.FILL_STROKE) { + ctx.fill(); + } + if (fillStrokeMode === TextRenderingMode.STROKE || + fillStrokeMode === TextRenderingMode.FILL_STROKE) { + ctx.stroke(); + } + ctx.restore(); + } else { + if (fillStrokeMode === TextRenderingMode.FILL || + fillStrokeMode === TextRenderingMode.FILL_STROKE) { + ctx.fillText(character, x, y); + } + if (fillStrokeMode === TextRenderingMode.STROKE || + fillStrokeMode === TextRenderingMode.FILL_STROKE) { + ctx.strokeText(character, x, y); + } + } + + if (isAddToPathSet) { + var paths = this.pendingTextPaths || (this.pendingTextPaths = []); + paths.push({ + transform: ctx.mozCurrentTransform, + x: x, + y: y, + fontSize: fontSize, + addToPath: addToPath + }); + } + }, + + get isFontSubpixelAAEnabled() { + // Checks if anti-aliasing is enabled when scaled text is painted. + // On Windows GDI scaled fonts looks bad. + var ctx = document.createElement('canvas').getContext('2d'); + ctx.scale(1.5, 1); + ctx.fillText('I', 0, 10); + var data = ctx.getImageData(0, 0, 10, 10).data; + var enabled = false; + for (var i = 3; i < data.length; i += 4) { + if (data[i] > 0 && data[i] < 255) { + enabled = true; + break; + } + } + return shadow(this, 'isFontSubpixelAAEnabled', enabled); + }, + + showText: function CanvasGraphics_showText(glyphs) { + var current = this.current; + var font = current.font; + if (font.isType3Font) { + return this.showType3Text(glyphs); + } + + var fontSize = current.fontSize; + if (fontSize === 0) { + return; + } + + var ctx = this.ctx; + var fontSizeScale = current.fontSizeScale; + var charSpacing = current.charSpacing; + var wordSpacing = current.wordSpacing; + var fontDirection = current.fontDirection; + var textHScale = current.textHScale * fontDirection; + var glyphsLength = glyphs.length; + var vertical = font.vertical; + var defaultVMetrics = font.defaultVMetrics; + var widthAdvanceScale = fontSize * current.fontMatrix[0]; + + var simpleFillText = + current.textRenderingMode === TextRenderingMode.FILL && + !font.disableFontFace; + + ctx.save(); + ctx.transform.apply(ctx, current.textMatrix); + ctx.translate(current.x, current.y + current.textRise); + + if (fontDirection > 0) { + ctx.scale(textHScale, -1); + } else { + ctx.scale(textHScale, 1); + } + + var lineWidth = current.lineWidth; + var scale = current.textMatrixScale; + if (scale === 0 || lineWidth === 0) { + var fillStrokeMode = current.textRenderingMode & + TextRenderingMode.FILL_STROKE_MASK; + if (fillStrokeMode === TextRenderingMode.STROKE || + fillStrokeMode === TextRenderingMode.FILL_STROKE) { + this.cachedGetSinglePixelWidth = null; + lineWidth = this.getSinglePixelWidth() * MIN_WIDTH_FACTOR; + } + } else { + lineWidth /= scale; + } + + if (fontSizeScale !== 1.0) { + ctx.scale(fontSizeScale, fontSizeScale); + lineWidth /= fontSizeScale; + } + + ctx.lineWidth = lineWidth; + + var x = 0, i; + for (i = 0; i < glyphsLength; ++i) { + var glyph = glyphs[i]; + if (glyph === null) { + // word break + x += fontDirection * wordSpacing; + continue; + } else if (isNum(glyph)) { + x += -glyph * fontSize * 0.001; + continue; + } + + var restoreNeeded = false; + var character = glyph.fontChar; + var accent = glyph.accent; + var scaledX, scaledY, scaledAccentX, scaledAccentY; + var width = glyph.width; + if (vertical) { + var vmetric, vx, vy; + vmetric = glyph.vmetric || defaultVMetrics; + vx = glyph.vmetric ? vmetric[1] : width * 0.5; + vx = -vx * widthAdvanceScale; + vy = vmetric[2] * widthAdvanceScale; + + width = vmetric ? -vmetric[0] : width; + scaledX = vx / fontSizeScale; + scaledY = (x + vy) / fontSizeScale; + } else { + scaledX = x / fontSizeScale; + scaledY = 0; + } + + if (font.remeasure && width > 0 && this.isFontSubpixelAAEnabled) { + // some standard fonts may not have the exact width, trying to + // rescale per character + var measuredWidth = ctx.measureText(character).width * 1000 / + fontSize * fontSizeScale; + var characterScaleX = width / measuredWidth; + restoreNeeded = true; + ctx.save(); + ctx.scale(characterScaleX, 1); + scaledX /= characterScaleX; + } + + if (simpleFillText && !accent) { + // common case + ctx.fillText(character, scaledX, scaledY); + } else { + this.paintChar(character, scaledX, scaledY); + if (accent) { + scaledAccentX = scaledX + accent.offset.x / fontSizeScale; + scaledAccentY = scaledY - accent.offset.y / fontSizeScale; + this.paintChar(accent.fontChar, scaledAccentX, scaledAccentY); + } + } + + var charWidth = width * widthAdvanceScale + charSpacing * fontDirection; + x += charWidth; + + if (restoreNeeded) { + ctx.restore(); + } + } + if (vertical) { + current.y -= x * textHScale; + } else { + current.x += x * textHScale; + } + ctx.restore(); + }, + + showType3Text: function CanvasGraphics_showType3Text(glyphs) { + // Type3 fonts - each glyph is a "mini-PDF" + var ctx = this.ctx; + var current = this.current; + var font = current.font; + var fontSize = current.fontSize; + var fontDirection = current.fontDirection; + var charSpacing = current.charSpacing; + var wordSpacing = current.wordSpacing; + var textHScale = current.textHScale * fontDirection; + var fontMatrix = current.fontMatrix || FONT_IDENTITY_MATRIX; + var glyphsLength = glyphs.length; + var isTextInvisible = + current.textRenderingMode === TextRenderingMode.INVISIBLE; + var i, glyph, width; + + if (isTextInvisible || fontSize === 0) { + return; + } + + ctx.save(); + ctx.transform.apply(ctx, current.textMatrix); + ctx.translate(current.x, current.y); + + ctx.scale(textHScale, fontDirection); + + for (i = 0; i < glyphsLength; ++i) { + glyph = glyphs[i]; + if (glyph === null) { + // word break + this.ctx.translate(wordSpacing, 0); + current.x += wordSpacing * textHScale; + continue; + } else if (isNum(glyph)) { + var spacingLength = -glyph * 0.001 * fontSize; + this.ctx.translate(spacingLength, 0); + current.x += spacingLength * textHScale; + continue; + } + + var operatorList = font.charProcOperatorList[glyph.operatorListId]; + if (!operatorList) { + warn('Type3 character \"' + glyph.operatorListId + + '\" is not available'); + continue; + } + this.processingType3 = glyph; + this.save(); + ctx.scale(fontSize, fontSize); + ctx.transform.apply(ctx, fontMatrix); + this.executeOperatorList(operatorList); + this.restore(); + + var transformed = Util.applyTransform([glyph.width, 0], fontMatrix); + width = transformed[0] * fontSize + charSpacing; + + ctx.translate(width, 0); + current.x += width * textHScale; + } + ctx.restore(); + this.processingType3 = null; + }, + + // Type3 fonts + setCharWidth: function CanvasGraphics_setCharWidth(xWidth, yWidth) { + // We can safely ignore this since the width should be the same + // as the width in the Widths array. + }, + setCharWidthAndBounds: function CanvasGraphics_setCharWidthAndBounds(xWidth, + yWidth, + llx, + lly, + urx, + ury) { + // TODO According to the spec we're also suppose to ignore any operators + // that set color or include images while processing this type3 font. + this.ctx.rect(llx, lly, urx - llx, ury - lly); + this.clip(); + this.endPath(); + }, + + // Color + getColorN_Pattern: function CanvasGraphics_getColorN_Pattern(IR) { + var pattern; + if (IR[0] === 'TilingPattern') { + var color = IR[1]; + pattern = new TilingPattern(IR, color, this.ctx, this.objs, + this.commonObjs, this.baseTransform); + } else { + pattern = getShadingPatternFromIR(IR); + } + return pattern; + }, + setStrokeColorN: function CanvasGraphics_setStrokeColorN(/*...*/) { + this.current.strokeColor = this.getColorN_Pattern(arguments); + }, + setFillColorN: function CanvasGraphics_setFillColorN(/*...*/) { + this.current.fillColor = this.getColorN_Pattern(arguments); + this.current.patternFill = true; + }, + setStrokeRGBColor: function CanvasGraphics_setStrokeRGBColor(r, g, b) { + var color = Util.makeCssRgb(r, g, b); + this.ctx.strokeStyle = color; + this.current.strokeColor = color; + }, + setFillRGBColor: function CanvasGraphics_setFillRGBColor(r, g, b) { + var color = Util.makeCssRgb(r, g, b); + this.ctx.fillStyle = color; + this.current.fillColor = color; + this.current.patternFill = false; + }, + + shadingFill: function CanvasGraphics_shadingFill(patternIR) { + var ctx = this.ctx; + + this.save(); + var pattern = getShadingPatternFromIR(patternIR); + ctx.fillStyle = pattern.getPattern(ctx, this, true); + + var inv = ctx.mozCurrentTransformInverse; + if (inv) { + var canvas = ctx.canvas; + var width = canvas.width; + var height = canvas.height; + + var bl = Util.applyTransform([0, 0], inv); + var br = Util.applyTransform([0, height], inv); + var ul = Util.applyTransform([width, 0], inv); + var ur = Util.applyTransform([width, height], inv); + + var x0 = Math.min(bl[0], br[0], ul[0], ur[0]); + var y0 = Math.min(bl[1], br[1], ul[1], ur[1]); + var x1 = Math.max(bl[0], br[0], ul[0], ur[0]); + var y1 = Math.max(bl[1], br[1], ul[1], ur[1]); + + this.ctx.fillRect(x0, y0, x1 - x0, y1 - y0); + } else { + // HACK to draw the gradient onto an infinite rectangle. + // PDF gradients are drawn across the entire image while + // Canvas only allows gradients to be drawn in a rectangle + // The following bug should allow us to remove this. + // https://bugzilla.mozilla.org/show_bug.cgi?id=664884 + + this.ctx.fillRect(-1e10, -1e10, 2e10, 2e10); + } + + this.restore(); + }, + + // Images + beginInlineImage: function CanvasGraphics_beginInlineImage() { + error('Should not call beginInlineImage'); + }, + beginImageData: function CanvasGraphics_beginImageData() { + error('Should not call beginImageData'); + }, + + paintFormXObjectBegin: function CanvasGraphics_paintFormXObjectBegin(matrix, + bbox) { + this.save(); + this.baseTransformStack.push(this.baseTransform); + + if (isArray(matrix) && 6 === matrix.length) { + this.transform.apply(this, matrix); + } + + this.baseTransform = this.ctx.mozCurrentTransform; + + if (isArray(bbox) && 4 === bbox.length) { + var width = bbox[2] - bbox[0]; + var height = bbox[3] - bbox[1]; + this.ctx.rect(bbox[0], bbox[1], width, height); + this.clip(); + this.endPath(); + } + }, + + paintFormXObjectEnd: function CanvasGraphics_paintFormXObjectEnd() { + this.restore(); + this.baseTransform = this.baseTransformStack.pop(); + }, + + beginGroup: function CanvasGraphics_beginGroup(group) { + this.save(); + var currentCtx = this.ctx; + // TODO non-isolated groups - according to Rik at adobe non-isolated + // group results aren't usually that different and they even have tools + // that ignore this setting. Notes from Rik on implmenting: + // - When you encounter an transparency group, create a new canvas with + // the dimensions of the bbox + // - copy the content from the previous canvas to the new canvas + // - draw as usual + // - remove the backdrop alpha: + // alphaNew = 1 - (1 - alpha)/(1 - alphaBackdrop) with 'alpha' the alpha + // value of your transparency group and 'alphaBackdrop' the alpha of the + // backdrop + // - remove background color: + // colorNew = color - alphaNew *colorBackdrop /(1 - alphaNew) + if (!group.isolated) { + info('TODO: Support non-isolated groups.'); + } + + // TODO knockout - supposedly possible with the clever use of compositing + // modes. + if (group.knockout) { + warn('Knockout groups not supported.'); + } + + var currentTransform = currentCtx.mozCurrentTransform; + if (group.matrix) { + currentCtx.transform.apply(currentCtx, group.matrix); + } + assert(group.bbox, 'Bounding box is required.'); + + // Based on the current transform figure out how big the bounding box + // will actually be. + var bounds = Util.getAxialAlignedBoundingBox( + group.bbox, + currentCtx.mozCurrentTransform); + // Clip the bounding box to the current canvas. + var canvasBounds = [0, + 0, + currentCtx.canvas.width, + currentCtx.canvas.height]; + bounds = Util.intersect(bounds, canvasBounds) || [0, 0, 0, 0]; + // Use ceil in case we're between sizes so we don't create canvas that is + // too small and make the canvas at least 1x1 pixels. + var offsetX = Math.floor(bounds[0]); + var offsetY = Math.floor(bounds[1]); + var drawnWidth = Math.max(Math.ceil(bounds[2]) - offsetX, 1); + var drawnHeight = Math.max(Math.ceil(bounds[3]) - offsetY, 1); + var scaleX = 1, scaleY = 1; + if (drawnWidth > MAX_GROUP_SIZE) { + scaleX = drawnWidth / MAX_GROUP_SIZE; + drawnWidth = MAX_GROUP_SIZE; + } + if (drawnHeight > MAX_GROUP_SIZE) { + scaleY = drawnHeight / MAX_GROUP_SIZE; + drawnHeight = MAX_GROUP_SIZE; + } + + var cacheId = 'groupAt' + this.groupLevel; + if (group.smask) { + // Using two cache entries is case if masks are used one after another. + cacheId += '_smask_' + ((this.smaskCounter++) % 2); + } + var scratchCanvas = CachedCanvases.getCanvas( + cacheId, drawnWidth, drawnHeight, true); + var groupCtx = scratchCanvas.context; + + // Since we created a new canvas that is just the size of the bounding box + // we have to translate the group ctx. + groupCtx.scale(1 / scaleX, 1 / scaleY); + groupCtx.translate(-offsetX, -offsetY); + groupCtx.transform.apply(groupCtx, currentTransform); + + if (group.smask) { + // Saving state and cached mask to be used in setGState. + this.smaskStack.push({ + canvas: scratchCanvas.canvas, + context: groupCtx, + offsetX: offsetX, + offsetY: offsetY, + scaleX: scaleX, + scaleY: scaleY, + subtype: group.smask.subtype, + backdrop: group.smask.backdrop + }); + } else { + // Setup the current ctx so when the group is popped we draw it at the + // right location. + currentCtx.setTransform(1, 0, 0, 1, 0, 0); + currentCtx.translate(offsetX, offsetY); + currentCtx.scale(scaleX, scaleY); + } + // The transparency group inherits all off the current graphics state + // except the blend mode, soft mask, and alpha constants. + copyCtxState(currentCtx, groupCtx); + this.ctx = groupCtx; + this.setGState([ + ['BM', 'Normal'], + ['ca', 1], + ['CA', 1] + ]); + this.groupStack.push(currentCtx); + this.groupLevel++; + }, + + endGroup: function CanvasGraphics_endGroup(group) { + this.groupLevel--; + var groupCtx = this.ctx; + this.ctx = this.groupStack.pop(); + // Turn off image smoothing to avoid sub pixel interpolation which can + // look kind of blurry for some pdfs. + if (this.ctx.imageSmoothingEnabled !== undefined) { + this.ctx.imageSmoothingEnabled = false; + } else { + this.ctx.mozImageSmoothingEnabled = false; + } + if (group.smask) { + this.tempSMask = this.smaskStack.pop(); + } else { + this.ctx.drawImage(groupCtx.canvas, 0, 0); + } + this.restore(); + }, + + beginAnnotations: function CanvasGraphics_beginAnnotations() { + this.save(); + this.current = new CanvasExtraState(); + }, + + endAnnotations: function CanvasGraphics_endAnnotations() { + this.restore(); + }, + + beginAnnotation: function CanvasGraphics_beginAnnotation(rect, transform, + matrix) { + this.save(); + + if (isArray(rect) && 4 === rect.length) { + var width = rect[2] - rect[0]; + var height = rect[3] - rect[1]; + this.ctx.rect(rect[0], rect[1], width, height); + this.clip(); + this.endPath(); + } + + this.transform.apply(this, transform); + this.transform.apply(this, matrix); + }, + + endAnnotation: function CanvasGraphics_endAnnotation() { + this.restore(); + }, + + paintJpegXObject: function CanvasGraphics_paintJpegXObject(objId, w, h) { + var domImage = this.objs.get(objId); + if (!domImage) { + warn('Dependent image isn\'t ready yet'); + return; + } + + this.save(); + + var ctx = this.ctx; + // scale the image to the unit square + ctx.scale(1 / w, -1 / h); + + ctx.drawImage(domImage, 0, 0, domImage.width, domImage.height, + 0, -h, w, h); + if (this.imageLayer) { + var currentTransform = ctx.mozCurrentTransformInverse; + var position = this.getCanvasPosition(0, 0); + this.imageLayer.appendImage({ + objId: objId, + left: position[0], + top: position[1], + width: w / currentTransform[0], + height: h / currentTransform[3] + }); + } + this.restore(); + }, + + paintImageMaskXObject: function CanvasGraphics_paintImageMaskXObject(img) { + var ctx = this.ctx; + var width = img.width, height = img.height; + var fillColor = this.current.fillColor; + var isPatternFill = this.current.patternFill; + + var glyph = this.processingType3; + + if (COMPILE_TYPE3_GLYPHS && glyph && glyph.compiled === undefined) { + if (width <= MAX_SIZE_TO_COMPILE && height <= MAX_SIZE_TO_COMPILE) { + glyph.compiled = + compileType3Glyph({data: img.data, width: width, height: height}); + } else { + glyph.compiled = null; + } + } + + if (glyph && glyph.compiled) { + glyph.compiled(ctx); + return; + } + + var maskCanvas = CachedCanvases.getCanvas('maskCanvas', width, height); + var maskCtx = maskCanvas.context; + maskCtx.save(); + + putBinaryImageMask(maskCtx, img); + + maskCtx.globalCompositeOperation = 'source-in'; + + maskCtx.fillStyle = isPatternFill ? + fillColor.getPattern(maskCtx, this) : fillColor; + maskCtx.fillRect(0, 0, width, height); + + maskCtx.restore(); + + this.paintInlineImageXObject(maskCanvas.canvas); + }, + + paintImageMaskXObjectRepeat: + function CanvasGraphics_paintImageMaskXObjectRepeat(imgData, scaleX, + scaleY, positions) { + var width = imgData.width; + var height = imgData.height; + var fillColor = this.current.fillColor; + var isPatternFill = this.current.patternFill; + + var maskCanvas = CachedCanvases.getCanvas('maskCanvas', width, height); + var maskCtx = maskCanvas.context; + maskCtx.save(); + + putBinaryImageMask(maskCtx, imgData); + + maskCtx.globalCompositeOperation = 'source-in'; + + maskCtx.fillStyle = isPatternFill ? + fillColor.getPattern(maskCtx, this) : fillColor; + maskCtx.fillRect(0, 0, width, height); + + maskCtx.restore(); + + var ctx = this.ctx; + for (var i = 0, ii = positions.length; i < ii; i += 2) { + ctx.save(); + ctx.transform(scaleX, 0, 0, scaleY, positions[i], positions[i + 1]); + ctx.scale(1, -1); + ctx.drawImage(maskCanvas.canvas, 0, 0, width, height, + 0, -1, 1, 1); + ctx.restore(); + } + }, + + paintImageMaskXObjectGroup: + function CanvasGraphics_paintImageMaskXObjectGroup(images) { + var ctx = this.ctx; + + var fillColor = this.current.fillColor; + var isPatternFill = this.current.patternFill; + for (var i = 0, ii = images.length; i < ii; i++) { + var image = images[i]; + var width = image.width, height = image.height; + + var maskCanvas = CachedCanvases.getCanvas('maskCanvas', width, height); + var maskCtx = maskCanvas.context; + maskCtx.save(); + + putBinaryImageMask(maskCtx, image); + + maskCtx.globalCompositeOperation = 'source-in'; + + maskCtx.fillStyle = isPatternFill ? + fillColor.getPattern(maskCtx, this) : fillColor; + maskCtx.fillRect(0, 0, width, height); + + maskCtx.restore(); + + ctx.save(); + ctx.transform.apply(ctx, image.transform); + ctx.scale(1, -1); + ctx.drawImage(maskCanvas.canvas, 0, 0, width, height, + 0, -1, 1, 1); + ctx.restore(); + } + }, + + paintImageXObject: function CanvasGraphics_paintImageXObject(objId) { + var imgData = this.objs.get(objId); + if (!imgData) { + warn('Dependent image isn\'t ready yet'); + return; + } + + this.paintInlineImageXObject(imgData); + }, + + paintImageXObjectRepeat: + function CanvasGraphics_paintImageXObjectRepeat(objId, scaleX, scaleY, + positions) { + var imgData = this.objs.get(objId); + if (!imgData) { + warn('Dependent image isn\'t ready yet'); + return; + } + + var width = imgData.width; + var height = imgData.height; + var map = []; + for (var i = 0, ii = positions.length; i < ii; i += 2) { + map.push({transform: [scaleX, 0, 0, scaleY, positions[i], + positions[i + 1]], x: 0, y: 0, w: width, h: height}); + } + this.paintInlineImageXObjectGroup(imgData, map); + }, + + paintInlineImageXObject: + function CanvasGraphics_paintInlineImageXObject(imgData) { + var width = imgData.width; + var height = imgData.height; + var ctx = this.ctx; + + this.save(); + // scale the image to the unit square + ctx.scale(1 / width, -1 / height); + + var currentTransform = ctx.mozCurrentTransformInverse; + var a = currentTransform[0], b = currentTransform[1]; + var widthScale = Math.max(Math.sqrt(a * a + b * b), 1); + var c = currentTransform[2], d = currentTransform[3]; + var heightScale = Math.max(Math.sqrt(c * c + d * d), 1); + + var imgToPaint, tmpCanvas; + // instanceof HTMLElement does not work in jsdom node.js module + if (imgData instanceof HTMLElement || !imgData.data) { + imgToPaint = imgData; + } else { + tmpCanvas = CachedCanvases.getCanvas('inlineImage', width, height); + var tmpCtx = tmpCanvas.context; + putBinaryImageData(tmpCtx, imgData); + imgToPaint = tmpCanvas.canvas; + } + + var paintWidth = width, paintHeight = height; + var tmpCanvasId = 'prescale1'; + // Vertial or horizontal scaling shall not be more than 2 to not loose the + // pixels during drawImage operation, painting on the temporary canvas(es) + // that are twice smaller in size + while ((widthScale > 2 && paintWidth > 1) || + (heightScale > 2 && paintHeight > 1)) { + var newWidth = paintWidth, newHeight = paintHeight; + if (widthScale > 2 && paintWidth > 1) { + newWidth = Math.ceil(paintWidth / 2); + widthScale /= paintWidth / newWidth; + } + if (heightScale > 2 && paintHeight > 1) { + newHeight = Math.ceil(paintHeight / 2); + heightScale /= paintHeight / newHeight; + } + tmpCanvas = CachedCanvases.getCanvas(tmpCanvasId, newWidth, newHeight); + tmpCtx = tmpCanvas.context; + tmpCtx.clearRect(0, 0, newWidth, newHeight); + tmpCtx.drawImage(imgToPaint, 0, 0, paintWidth, paintHeight, + 0, 0, newWidth, newHeight); + imgToPaint = tmpCanvas.canvas; + paintWidth = newWidth; + paintHeight = newHeight; + tmpCanvasId = tmpCanvasId === 'prescale1' ? 'prescale2' : 'prescale1'; + } + ctx.drawImage(imgToPaint, 0, 0, paintWidth, paintHeight, + 0, -height, width, height); + + if (this.imageLayer) { + var position = this.getCanvasPosition(0, -height); + this.imageLayer.appendImage({ + imgData: imgData, + left: position[0], + top: position[1], + width: width / currentTransform[0], + height: height / currentTransform[3] + }); + } + this.restore(); + }, + + paintInlineImageXObjectGroup: + function CanvasGraphics_paintInlineImageXObjectGroup(imgData, map) { + var ctx = this.ctx; + var w = imgData.width; + var h = imgData.height; + + var tmpCanvas = CachedCanvases.getCanvas('inlineImage', w, h); + var tmpCtx = tmpCanvas.context; + putBinaryImageData(tmpCtx, imgData); + + for (var i = 0, ii = map.length; i < ii; i++) { + var entry = map[i]; + ctx.save(); + ctx.transform.apply(ctx, entry.transform); + ctx.scale(1, -1); + ctx.drawImage(tmpCanvas.canvas, entry.x, entry.y, entry.w, entry.h, + 0, -1, 1, 1); + if (this.imageLayer) { + var position = this.getCanvasPosition(entry.x, entry.y); + this.imageLayer.appendImage({ + imgData: imgData, + left: position[0], + top: position[1], + width: w, + height: h + }); + } + ctx.restore(); + } + }, + + paintSolidColorImageMask: + function CanvasGraphics_paintSolidColorImageMask() { + this.ctx.fillRect(0, 0, 1, 1); + }, + + // Marked content + + markPoint: function CanvasGraphics_markPoint(tag) { + // TODO Marked content. + }, + markPointProps: function CanvasGraphics_markPointProps(tag, properties) { + // TODO Marked content. + }, + beginMarkedContent: function CanvasGraphics_beginMarkedContent(tag) { + // TODO Marked content. + }, + beginMarkedContentProps: function CanvasGraphics_beginMarkedContentProps( + tag, properties) { + // TODO Marked content. + }, + endMarkedContent: function CanvasGraphics_endMarkedContent() { + // TODO Marked content. + }, + + // Compatibility + + beginCompat: function CanvasGraphics_beginCompat() { + // TODO ignore undefined operators (should we do that anyway?) + }, + endCompat: function CanvasGraphics_endCompat() { + // TODO stop ignoring undefined operators + }, + + // Helper functions + + consumePath: function CanvasGraphics_consumePath() { + var ctx = this.ctx; + if (this.pendingClip) { + if (this.pendingClip === EO_CLIP) { + if (ctx.mozFillRule !== undefined) { + ctx.mozFillRule = 'evenodd'; + ctx.clip(); + ctx.mozFillRule = 'nonzero'; + } else { + try { + ctx.clip('evenodd'); + } catch (ex) { + // shouldn't really happen, but browsers might think differently + ctx.clip(); + } + } + } else { + ctx.clip(); + } + this.pendingClip = null; + } + ctx.beginPath(); + }, + getSinglePixelWidth: function CanvasGraphics_getSinglePixelWidth(scale) { + if (this.cachedGetSinglePixelWidth === null) { + var inverse = this.ctx.mozCurrentTransformInverse; + // max of the current horizontal and vertical scale + this.cachedGetSinglePixelWidth = Math.sqrt(Math.max( + (inverse[0] * inverse[0] + inverse[1] * inverse[1]), + (inverse[2] * inverse[2] + inverse[3] * inverse[3]))); + } + return this.cachedGetSinglePixelWidth; + }, + getCanvasPosition: function CanvasGraphics_getCanvasPosition(x, y) { + var transform = this.ctx.mozCurrentTransform; + return [ + transform[0] * x + transform[2] * y + transform[4], + transform[1] * x + transform[3] * y + transform[5] + ]; + } + }; + + for (var op in OPS) { + CanvasGraphics.prototype[OPS[op]] = CanvasGraphics.prototype[op]; + } + + return CanvasGraphics; +})(); + + +var WebGLUtils = (function WebGLUtilsClosure() { + function loadShader(gl, code, shaderType) { + var shader = gl.createShader(shaderType); + gl.shaderSource(shader, code); + gl.compileShader(shader); + var compiled = gl.getShaderParameter(shader, gl.COMPILE_STATUS); + if (!compiled) { + var errorMsg = gl.getShaderInfoLog(shader); + throw new Error('Error during shader compilation: ' + errorMsg); + } + return shader; + } + function createVertexShader(gl, code) { + return loadShader(gl, code, gl.VERTEX_SHADER); + } + function createFragmentShader(gl, code) { + return loadShader(gl, code, gl.FRAGMENT_SHADER); + } + function createProgram(gl, shaders) { + var program = gl.createProgram(); + for (var i = 0, ii = shaders.length; i < ii; ++i) { + gl.attachShader(program, shaders[i]); + } + gl.linkProgram(program); + var linked = gl.getProgramParameter(program, gl.LINK_STATUS); + if (!linked) { + var errorMsg = gl.getProgramInfoLog(program); + throw new Error('Error during program linking: ' + errorMsg); + } + return program; + } + function createTexture(gl, image, textureId) { + gl.activeTexture(textureId); + var texture = gl.createTexture(); + gl.bindTexture(gl.TEXTURE_2D, texture); + + // Set the parameters so we can render any size image. + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST); + + // Upload the image into the texture. + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image); + return texture; + } + + var currentGL, currentCanvas; + function generateGL() { + if (currentGL) { + return; + } + currentCanvas = document.createElement('canvas'); + currentGL = currentCanvas.getContext('webgl', + { premultipliedalpha: false }); + } + + var smaskVertexShaderCode = '\ + attribute vec2 a_position; \ + attribute vec2 a_texCoord; \ + \ + uniform vec2 u_resolution; \ + \ + varying vec2 v_texCoord; \ + \ + void main() { \ + vec2 clipSpace = (a_position / u_resolution) * 2.0 - 1.0; \ + gl_Position = vec4(clipSpace * vec2(1, -1), 0, 1); \ + \ + v_texCoord = a_texCoord; \ + } '; + + var smaskFragmentShaderCode = '\ + precision mediump float; \ + \ + uniform vec4 u_backdrop; \ + uniform int u_subtype; \ + uniform sampler2D u_image; \ + uniform sampler2D u_mask; \ + \ + varying vec2 v_texCoord; \ + \ + void main() { \ + vec4 imageColor = texture2D(u_image, v_texCoord); \ + vec4 maskColor = texture2D(u_mask, v_texCoord); \ + if (u_backdrop.a > 0.0) { \ + maskColor.rgb = maskColor.rgb * maskColor.a + \ + u_backdrop.rgb * (1.0 - maskColor.a); \ + } \ + float lum; \ + if (u_subtype == 0) { \ + lum = maskColor.a; \ + } else { \ + lum = maskColor.r * 0.3 + maskColor.g * 0.59 + \ + maskColor.b * 0.11; \ + } \ + imageColor.a *= lum; \ + imageColor.rgb *= imageColor.a; \ + gl_FragColor = imageColor; \ + } '; + + var smaskCache = null; + + function initSmaskGL() { + var canvas, gl; + + generateGL(); + canvas = currentCanvas; + currentCanvas = null; + gl = currentGL; + currentGL = null; + + // setup a GLSL program + var vertexShader = createVertexShader(gl, smaskVertexShaderCode); + var fragmentShader = createFragmentShader(gl, smaskFragmentShaderCode); + var program = createProgram(gl, [vertexShader, fragmentShader]); + gl.useProgram(program); + + var cache = {}; + cache.gl = gl; + cache.canvas = canvas; + cache.resolutionLocation = gl.getUniformLocation(program, 'u_resolution'); + cache.positionLocation = gl.getAttribLocation(program, 'a_position'); + cache.backdropLocation = gl.getUniformLocation(program, 'u_backdrop'); + cache.subtypeLocation = gl.getUniformLocation(program, 'u_subtype'); + + var texCoordLocation = gl.getAttribLocation(program, 'a_texCoord'); + var texLayerLocation = gl.getUniformLocation(program, 'u_image'); + var texMaskLocation = gl.getUniformLocation(program, 'u_mask'); + + // provide texture coordinates for the rectangle. + var texCoordBuffer = gl.createBuffer(); + gl.bindBuffer(gl.ARRAY_BUFFER, texCoordBuffer); + gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([ + 0.0, 0.0, + 1.0, 0.0, + 0.0, 1.0, + 0.0, 1.0, + 1.0, 0.0, + 1.0, 1.0]), gl.STATIC_DRAW); + gl.enableVertexAttribArray(texCoordLocation); + gl.vertexAttribPointer(texCoordLocation, 2, gl.FLOAT, false, 0, 0); + + gl.uniform1i(texLayerLocation, 0); + gl.uniform1i(texMaskLocation, 1); + + smaskCache = cache; + } + + function composeSMask(layer, mask, properties) { + var width = layer.width, height = layer.height; + + if (!smaskCache) { + initSmaskGL(); + } + var cache = smaskCache,canvas = cache.canvas, gl = cache.gl; + canvas.width = width; + canvas.height = height; + gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight); + gl.uniform2f(cache.resolutionLocation, width, height); + + if (properties.backdrop) { + gl.uniform4f(cache.resolutionLocation, properties.backdrop[0], + properties.backdrop[1], properties.backdrop[2], 1); + } else { + gl.uniform4f(cache.resolutionLocation, 0, 0, 0, 0); + } + gl.uniform1i(cache.subtypeLocation, + properties.subtype === 'Luminosity' ? 1 : 0); + + // Create a textures + var texture = createTexture(gl, layer, gl.TEXTURE0); + var maskTexture = createTexture(gl, mask, gl.TEXTURE1); + + + // Create a buffer and put a single clipspace rectangle in + // it (2 triangles) + var buffer = gl.createBuffer(); + gl.bindBuffer(gl.ARRAY_BUFFER, buffer); + gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([ + 0, 0, + width, 0, + 0, height, + 0, height, + width, 0, + width, height]), gl.STATIC_DRAW); + gl.enableVertexAttribArray(cache.positionLocation); + gl.vertexAttribPointer(cache.positionLocation, 2, gl.FLOAT, false, 0, 0); + + // draw + gl.clearColor(0, 0, 0, 0); + gl.enable(gl.BLEND); + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + gl.clear(gl.COLOR_BUFFER_BIT); + + gl.drawArrays(gl.TRIANGLES, 0, 6); + + gl.flush(); + + gl.deleteTexture(texture); + gl.deleteTexture(maskTexture); + gl.deleteBuffer(buffer); + + return canvas; + } + + var figuresVertexShaderCode = '\ + attribute vec2 a_position; \ + attribute vec3 a_color; \ + \ + uniform vec2 u_resolution; \ + uniform vec2 u_scale; \ + uniform vec2 u_offset; \ + \ + varying vec4 v_color; \ + \ + void main() { \ + vec2 position = (a_position + u_offset) * u_scale; \ + vec2 clipSpace = (position / u_resolution) * 2.0 - 1.0; \ + gl_Position = vec4(clipSpace * vec2(1, -1), 0, 1); \ + \ + v_color = vec4(a_color / 255.0, 1.0); \ + } '; + + var figuresFragmentShaderCode = '\ + precision mediump float; \ + \ + varying vec4 v_color; \ + \ + void main() { \ + gl_FragColor = v_color; \ + } '; + + var figuresCache = null; + + function initFiguresGL() { + var canvas, gl; + + generateGL(); + canvas = currentCanvas; + currentCanvas = null; + gl = currentGL; + currentGL = null; + + // setup a GLSL program + var vertexShader = createVertexShader(gl, figuresVertexShaderCode); + var fragmentShader = createFragmentShader(gl, figuresFragmentShaderCode); + var program = createProgram(gl, [vertexShader, fragmentShader]); + gl.useProgram(program); + + var cache = {}; + cache.gl = gl; + cache.canvas = canvas; + cache.resolutionLocation = gl.getUniformLocation(program, 'u_resolution'); + cache.scaleLocation = gl.getUniformLocation(program, 'u_scale'); + cache.offsetLocation = gl.getUniformLocation(program, 'u_offset'); + cache.positionLocation = gl.getAttribLocation(program, 'a_position'); + cache.colorLocation = gl.getAttribLocation(program, 'a_color'); + + figuresCache = cache; + } + + function drawFigures(width, height, backgroundColor, figures, context) { + if (!figuresCache) { + initFiguresGL(); + } + var cache = figuresCache, canvas = cache.canvas, gl = cache.gl; + + canvas.width = width; + canvas.height = height; + gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight); + gl.uniform2f(cache.resolutionLocation, width, height); + + // count triangle points + var count = 0; + var i, ii, rows; + for (i = 0, ii = figures.length; i < ii; i++) { + switch (figures[i].type) { + case 'lattice': + rows = (figures[i].coords.length / figures[i].verticesPerRow) | 0; + count += (rows - 1) * (figures[i].verticesPerRow - 1) * 6; + break; + case 'triangles': + count += figures[i].coords.length; + break; + } + } + // transfer data + var coords = new Float32Array(count * 2); + var colors = new Uint8Array(count * 3); + var coordsMap = context.coords, colorsMap = context.colors; + var pIndex = 0, cIndex = 0; + for (i = 0, ii = figures.length; i < ii; i++) { + var figure = figures[i], ps = figure.coords, cs = figure.colors; + switch (figure.type) { + case 'lattice': + var cols = figure.verticesPerRow; + rows = (ps.length / cols) | 0; + for (var row = 1; row < rows; row++) { + var offset = row * cols + 1; + for (var col = 1; col < cols; col++, offset++) { + coords[pIndex] = coordsMap[ps[offset - cols - 1]]; + coords[pIndex + 1] = coordsMap[ps[offset - cols - 1] + 1]; + coords[pIndex + 2] = coordsMap[ps[offset - cols]]; + coords[pIndex + 3] = coordsMap[ps[offset - cols] + 1]; + coords[pIndex + 4] = coordsMap[ps[offset - 1]]; + coords[pIndex + 5] = coordsMap[ps[offset - 1] + 1]; + colors[cIndex] = colorsMap[cs[offset - cols - 1]]; + colors[cIndex + 1] = colorsMap[cs[offset - cols - 1] + 1]; + colors[cIndex + 2] = colorsMap[cs[offset - cols - 1] + 2]; + colors[cIndex + 3] = colorsMap[cs[offset - cols]]; + colors[cIndex + 4] = colorsMap[cs[offset - cols] + 1]; + colors[cIndex + 5] = colorsMap[cs[offset - cols] + 2]; + colors[cIndex + 6] = colorsMap[cs[offset - 1]]; + colors[cIndex + 7] = colorsMap[cs[offset - 1] + 1]; + colors[cIndex + 8] = colorsMap[cs[offset - 1] + 2]; + + coords[pIndex + 6] = coords[pIndex + 2]; + coords[pIndex + 7] = coords[pIndex + 3]; + coords[pIndex + 8] = coords[pIndex + 4]; + coords[pIndex + 9] = coords[pIndex + 5]; + coords[pIndex + 10] = coordsMap[ps[offset]]; + coords[pIndex + 11] = coordsMap[ps[offset] + 1]; + colors[cIndex + 9] = colors[cIndex + 3]; + colors[cIndex + 10] = colors[cIndex + 4]; + colors[cIndex + 11] = colors[cIndex + 5]; + colors[cIndex + 12] = colors[cIndex + 6]; + colors[cIndex + 13] = colors[cIndex + 7]; + colors[cIndex + 14] = colors[cIndex + 8]; + colors[cIndex + 15] = colorsMap[cs[offset]]; + colors[cIndex + 16] = colorsMap[cs[offset] + 1]; + colors[cIndex + 17] = colorsMap[cs[offset] + 2]; + pIndex += 12; + cIndex += 18; + } + } + break; + case 'triangles': + for (var j = 0, jj = ps.length; j < jj; j++) { + coords[pIndex] = coordsMap[ps[j]]; + coords[pIndex + 1] = coordsMap[ps[j] + 1]; + colors[cIndex] = colorsMap[cs[i]]; + colors[cIndex + 1] = colorsMap[cs[j] + 1]; + colors[cIndex + 2] = colorsMap[cs[j] + 2]; + pIndex += 2; + cIndex += 3; + } + break; + } + } + + // draw + if (backgroundColor) { + gl.clearColor(backgroundColor[0] / 255, backgroundColor[1] / 255, + backgroundColor[2] / 255, 1.0); + } else { + gl.clearColor(0, 0, 0, 0); + } + gl.clear(gl.COLOR_BUFFER_BIT); + + var coordsBuffer = gl.createBuffer(); + gl.bindBuffer(gl.ARRAY_BUFFER, coordsBuffer); + gl.bufferData(gl.ARRAY_BUFFER, coords, gl.STATIC_DRAW); + gl.enableVertexAttribArray(cache.positionLocation); + gl.vertexAttribPointer(cache.positionLocation, 2, gl.FLOAT, false, 0, 0); + + var colorsBuffer = gl.createBuffer(); + gl.bindBuffer(gl.ARRAY_BUFFER, colorsBuffer); + gl.bufferData(gl.ARRAY_BUFFER, colors, gl.STATIC_DRAW); + gl.enableVertexAttribArray(cache.colorLocation); + gl.vertexAttribPointer(cache.colorLocation, 3, gl.UNSIGNED_BYTE, false, + 0, 0); + + gl.uniform2f(cache.scaleLocation, context.scaleX, context.scaleY); + gl.uniform2f(cache.offsetLocation, context.offsetX, context.offsetY); + + gl.drawArrays(gl.TRIANGLES, 0, count); + + gl.flush(); + + gl.deleteBuffer(coordsBuffer); + gl.deleteBuffer(colorsBuffer); + + return canvas; + } + + function cleanup() { + if (smaskCache && smaskCache.canvas) { + smaskCache.canvas.width = 0; + smaskCache.canvas.height = 0; + } + if (figuresCache && figuresCache.canvas) { + figuresCache.canvas.width = 0; + figuresCache.canvas.height = 0; + } + smaskCache = null; + figuresCache = null; + } + + return { + get isEnabled() { + if (PDFJS.disableWebGL) { + return false; + } + var enabled = false; + try { + generateGL(); + enabled = !!currentGL; + } catch (e) { } + return shadow(this, 'isEnabled', enabled); + }, + composeSMask: composeSMask, + drawFigures: drawFigures, + clear: cleanup + }; +})(); + + +var ShadingIRs = {}; + +ShadingIRs.RadialAxial = { + fromIR: function RadialAxial_fromIR(raw) { + var type = raw[1]; + var colorStops = raw[2]; + var p0 = raw[3]; + var p1 = raw[4]; + var r0 = raw[5]; + var r1 = raw[6]; + return { + type: 'Pattern', + getPattern: function RadialAxial_getPattern(ctx) { + var grad; + if (type === 'axial') { + grad = ctx.createLinearGradient(p0[0], p0[1], p1[0], p1[1]); + } else if (type === 'radial') { + grad = ctx.createRadialGradient(p0[0], p0[1], r0, p1[0], p1[1], r1); + } + + for (var i = 0, ii = colorStops.length; i < ii; ++i) { + var c = colorStops[i]; + grad.addColorStop(c[0], c[1]); + } + return grad; + } + }; + } +}; + +var createMeshCanvas = (function createMeshCanvasClosure() { + function drawTriangle(data, context, p1, p2, p3, c1, c2, c3) { + // Very basic Gouraud-shaded triangle rasterization algorithm. + var coords = context.coords, colors = context.colors; + var bytes = data.data, rowSize = data.width * 4; + var tmp; + if (coords[p1 + 1] > coords[p2 + 1]) { + tmp = p1; p1 = p2; p2 = tmp; tmp = c1; c1 = c2; c2 = tmp; + } + if (coords[p2 + 1] > coords[p3 + 1]) { + tmp = p2; p2 = p3; p3 = tmp; tmp = c2; c2 = c3; c3 = tmp; + } + if (coords[p1 + 1] > coords[p2 + 1]) { + tmp = p1; p1 = p2; p2 = tmp; tmp = c1; c1 = c2; c2 = tmp; + } + var x1 = (coords[p1] + context.offsetX) * context.scaleX; + var y1 = (coords[p1 + 1] + context.offsetY) * context.scaleY; + var x2 = (coords[p2] + context.offsetX) * context.scaleX; + var y2 = (coords[p2 + 1] + context.offsetY) * context.scaleY; + var x3 = (coords[p3] + context.offsetX) * context.scaleX; + var y3 = (coords[p3 + 1] + context.offsetY) * context.scaleY; + if (y1 >= y3) { + return; + } + var c1r = colors[c1], c1g = colors[c1 + 1], c1b = colors[c1 + 2]; + var c2r = colors[c2], c2g = colors[c2 + 1], c2b = colors[c2 + 2]; + var c3r = colors[c3], c3g = colors[c3 + 1], c3b = colors[c3 + 2]; + + var minY = Math.round(y1), maxY = Math.round(y3); + var xa, car, cag, cab; + var xb, cbr, cbg, cbb; + var k; + for (var y = minY; y <= maxY; y++) { + if (y < y2) { + k = y < y1 ? 0 : y1 === y2 ? 1 : (y1 - y) / (y1 - y2); + xa = x1 - (x1 - x2) * k; + car = c1r - (c1r - c2r) * k; + cag = c1g - (c1g - c2g) * k; + cab = c1b - (c1b - c2b) * k; + } else { + k = y > y3 ? 1 : y2 === y3 ? 0 : (y2 - y) / (y2 - y3); + xa = x2 - (x2 - x3) * k; + car = c2r - (c2r - c3r) * k; + cag = c2g - (c2g - c3g) * k; + cab = c2b - (c2b - c3b) * k; + } + k = y < y1 ? 0 : y > y3 ? 1 : (y1 - y) / (y1 - y3); + xb = x1 - (x1 - x3) * k; + cbr = c1r - (c1r - c3r) * k; + cbg = c1g - (c1g - c3g) * k; + cbb = c1b - (c1b - c3b) * k; + var x1_ = Math.round(Math.min(xa, xb)); + var x2_ = Math.round(Math.max(xa, xb)); + var j = rowSize * y + x1_ * 4; + for (var x = x1_; x <= x2_; x++) { + k = (xa - x) / (xa - xb); + k = k < 0 ? 0 : k > 1 ? 1 : k; + bytes[j++] = (car - (car - cbr) * k) | 0; + bytes[j++] = (cag - (cag - cbg) * k) | 0; + bytes[j++] = (cab - (cab - cbb) * k) | 0; + bytes[j++] = 255; + } + } + } + + function drawFigure(data, figure, context) { + var ps = figure.coords; + var cs = figure.colors; + var i, ii; + switch (figure.type) { + case 'lattice': + var verticesPerRow = figure.verticesPerRow; + var rows = Math.floor(ps.length / verticesPerRow) - 1; + var cols = verticesPerRow - 1; + for (i = 0; i < rows; i++) { + var q = i * verticesPerRow; + for (var j = 0; j < cols; j++, q++) { + drawTriangle(data, context, + ps[q], ps[q + 1], ps[q + verticesPerRow], + cs[q], cs[q + 1], cs[q + verticesPerRow]); + drawTriangle(data, context, + ps[q + verticesPerRow + 1], ps[q + 1], ps[q + verticesPerRow], + cs[q + verticesPerRow + 1], cs[q + 1], cs[q + verticesPerRow]); + } + } + break; + case 'triangles': + for (i = 0, ii = ps.length; i < ii; i += 3) { + drawTriangle(data, context, + ps[i], ps[i + 1], ps[i + 2], + cs[i], cs[i + 1], cs[i + 2]); + } + break; + default: + error('illigal figure'); + break; + } + } + + function createMeshCanvas(bounds, combinesScale, coords, colors, figures, + backgroundColor) { + // we will increase scale on some weird factor to let antialiasing take + // care of "rough" edges + var EXPECTED_SCALE = 1.1; + // MAX_PATTERN_SIZE is used to avoid OOM situation. + var MAX_PATTERN_SIZE = 3000; // 10in @ 300dpi shall be enough + + var offsetX = Math.floor(bounds[0]); + var offsetY = Math.floor(bounds[1]); + var boundsWidth = Math.ceil(bounds[2]) - offsetX; + var boundsHeight = Math.ceil(bounds[3]) - offsetY; + + var width = Math.min(Math.ceil(Math.abs(boundsWidth * combinesScale[0] * + EXPECTED_SCALE)), MAX_PATTERN_SIZE); + var height = Math.min(Math.ceil(Math.abs(boundsHeight * combinesScale[1] * + EXPECTED_SCALE)), MAX_PATTERN_SIZE); + var scaleX = boundsWidth / width; + var scaleY = boundsHeight / height; + + var context = { + coords: coords, + colors: colors, + offsetX: -offsetX, + offsetY: -offsetY, + scaleX: 1 / scaleX, + scaleY: 1 / scaleY + }; + + var canvas, tmpCanvas, i, ii; + if (WebGLUtils.isEnabled) { + canvas = WebGLUtils.drawFigures(width, height, backgroundColor, + figures, context); + + // https://bugzilla.mozilla.org/show_bug.cgi?id=972126 + tmpCanvas = CachedCanvases.getCanvas('mesh', width, height, false); + tmpCanvas.context.drawImage(canvas, 0, 0); + canvas = tmpCanvas.canvas; + } else { + tmpCanvas = CachedCanvases.getCanvas('mesh', width, height, false); + var tmpCtx = tmpCanvas.context; + + var data = tmpCtx.createImageData(width, height); + if (backgroundColor) { + var bytes = data.data; + for (i = 0, ii = bytes.length; i < ii; i += 4) { + bytes[i] = backgroundColor[0]; + bytes[i + 1] = backgroundColor[1]; + bytes[i + 2] = backgroundColor[2]; + bytes[i + 3] = 255; + } + } + for (i = 0; i < figures.length; i++) { + drawFigure(data, figures[i], context); + } + tmpCtx.putImageData(data, 0, 0); + canvas = tmpCanvas.canvas; + } + + return {canvas: canvas, offsetX: offsetX, offsetY: offsetY, + scaleX: scaleX, scaleY: scaleY}; + } + return createMeshCanvas; +})(); + +ShadingIRs.Mesh = { + fromIR: function Mesh_fromIR(raw) { + //var type = raw[1]; + var coords = raw[2]; + var colors = raw[3]; + var figures = raw[4]; + var bounds = raw[5]; + var matrix = raw[6]; + //var bbox = raw[7]; + var background = raw[8]; + return { + type: 'Pattern', + getPattern: function Mesh_getPattern(ctx, owner, shadingFill) { + var scale; + if (shadingFill) { + scale = Util.singularValueDecompose2dScale(ctx.mozCurrentTransform); + } else { + // Obtain scale from matrix and current transformation matrix. + scale = Util.singularValueDecompose2dScale(owner.baseTransform); + if (matrix) { + var matrixScale = Util.singularValueDecompose2dScale(matrix); + scale = [scale[0] * matrixScale[0], + scale[1] * matrixScale[1]]; + } + } + + + // Rasterizing on the main thread since sending/queue large canvases + // might cause OOM. + var temporaryPatternCanvas = createMeshCanvas(bounds, scale, coords, + colors, figures, shadingFill ? null : background); + + if (!shadingFill) { + ctx.setTransform.apply(ctx, owner.baseTransform); + if (matrix) { + ctx.transform.apply(ctx, matrix); + } + } + + ctx.translate(temporaryPatternCanvas.offsetX, + temporaryPatternCanvas.offsetY); + ctx.scale(temporaryPatternCanvas.scaleX, + temporaryPatternCanvas.scaleY); + + return ctx.createPattern(temporaryPatternCanvas.canvas, 'no-repeat'); + } + }; + } +}; + +ShadingIRs.Dummy = { + fromIR: function Dummy_fromIR() { + return { + type: 'Pattern', + getPattern: function Dummy_fromIR_getPattern() { + return 'hotpink'; + } + }; + } +}; + +function getShadingPatternFromIR(raw) { + var shadingIR = ShadingIRs[raw[0]]; + if (!shadingIR) { + error('Unknown IR type: ' + raw[0]); + } + return shadingIR.fromIR(raw); +} + +var TilingPattern = (function TilingPatternClosure() { + var PaintType = { + COLORED: 1, + UNCOLORED: 2 + }; + + var MAX_PATTERN_SIZE = 3000; // 10in @ 300dpi shall be enough + + function TilingPattern(IR, color, ctx, objs, commonObjs, baseTransform) { + this.operatorList = IR[2]; + this.matrix = IR[3] || [1, 0, 0, 1, 0, 0]; + this.bbox = IR[4]; + this.xstep = IR[5]; + this.ystep = IR[6]; + this.paintType = IR[7]; + this.tilingType = IR[8]; + this.color = color; + this.objs = objs; + this.commonObjs = commonObjs; + this.baseTransform = baseTransform; + this.type = 'Pattern'; + this.ctx = ctx; + } + + TilingPattern.prototype = { + createPatternCanvas: function TilinPattern_createPatternCanvas(owner) { + var operatorList = this.operatorList; + var bbox = this.bbox; + var xstep = this.xstep; + var ystep = this.ystep; + var paintType = this.paintType; + var tilingType = this.tilingType; + var color = this.color; + var objs = this.objs; + var commonObjs = this.commonObjs; + + info('TilingType: ' + tilingType); + + var x0 = bbox[0], y0 = bbox[1], x1 = bbox[2], y1 = bbox[3]; + + var topLeft = [x0, y0]; + // we want the canvas to be as large as the step size + var botRight = [x0 + xstep, y0 + ystep]; + + var width = botRight[0] - topLeft[0]; + var height = botRight[1] - topLeft[1]; + + // Obtain scale from matrix and current transformation matrix. + var matrixScale = Util.singularValueDecompose2dScale(this.matrix); + var curMatrixScale = Util.singularValueDecompose2dScale( + this.baseTransform); + var combinedScale = [matrixScale[0] * curMatrixScale[0], + matrixScale[1] * curMatrixScale[1]]; + + // MAX_PATTERN_SIZE is used to avoid OOM situation. + // Use width and height values that are as close as possible to the end + // result when the pattern is used. Too low value makes the pattern look + // blurry. Too large value makes it look too crispy. + width = Math.min(Math.ceil(Math.abs(width * combinedScale[0])), + MAX_PATTERN_SIZE); + + height = Math.min(Math.ceil(Math.abs(height * combinedScale[1])), + MAX_PATTERN_SIZE); + + var tmpCanvas = CachedCanvases.getCanvas('pattern', width, height, true); + var tmpCtx = tmpCanvas.context; + var graphics = new CanvasGraphics(tmpCtx, commonObjs, objs); + graphics.groupLevel = owner.groupLevel; + + this.setFillAndStrokeStyleToContext(tmpCtx, paintType, color); + + this.setScale(width, height, xstep, ystep); + this.transformToScale(graphics); + + // transform coordinates to pattern space + var tmpTranslate = [1, 0, 0, 1, -topLeft[0], -topLeft[1]]; + graphics.transform.apply(graphics, tmpTranslate); + + this.clipBbox(graphics, bbox, x0, y0, x1, y1); + + graphics.executeOperatorList(operatorList); + return tmpCanvas.canvas; + }, + + setScale: function TilingPattern_setScale(width, height, xstep, ystep) { + this.scale = [width / xstep, height / ystep]; + }, + + transformToScale: function TilingPattern_transformToScale(graphics) { + var scale = this.scale; + var tmpScale = [scale[0], 0, 0, scale[1], 0, 0]; + graphics.transform.apply(graphics, tmpScale); + }, + + scaleToContext: function TilingPattern_scaleToContext() { + var scale = this.scale; + this.ctx.scale(1 / scale[0], 1 / scale[1]); + }, + + clipBbox: function clipBbox(graphics, bbox, x0, y0, x1, y1) { + if (bbox && isArray(bbox) && bbox.length === 4) { + var bboxWidth = x1 - x0; + var bboxHeight = y1 - y0; + graphics.ctx.rect(x0, y0, bboxWidth, bboxHeight); + graphics.clip(); + graphics.endPath(); + } + }, + + setFillAndStrokeStyleToContext: + function setFillAndStrokeStyleToContext(context, paintType, color) { + switch (paintType) { + case PaintType.COLORED: + var ctx = this.ctx; + context.fillStyle = ctx.fillStyle; + context.strokeStyle = ctx.strokeStyle; + break; + case PaintType.UNCOLORED: + var cssColor = Util.makeCssRgb(color[0], color[1], color[2]); + context.fillStyle = cssColor; + context.strokeStyle = cssColor; + break; + default: + error('Unsupported paint type: ' + paintType); + } + }, + + getPattern: function TilingPattern_getPattern(ctx, owner) { + var temporaryPatternCanvas = this.createPatternCanvas(owner); + + ctx = this.ctx; + ctx.setTransform.apply(ctx, this.baseTransform); + ctx.transform.apply(ctx, this.matrix); + this.scaleToContext(); + + return ctx.createPattern(temporaryPatternCanvas, 'repeat'); + } + }; + + return TilingPattern; +})(); + + +PDFJS.disableFontFace = false; + +var FontLoader = { + insertRule: function fontLoaderInsertRule(rule) { + var styleElement = document.getElementById('PDFJS_FONT_STYLE_TAG'); + if (!styleElement) { + styleElement = document.createElement('style'); + styleElement.id = 'PDFJS_FONT_STYLE_TAG'; + document.documentElement.getElementsByTagName('head')[0].appendChild( + styleElement); + } + + var styleSheet = styleElement.sheet; + styleSheet.insertRule(rule, styleSheet.cssRules.length); + }, + + clear: function fontLoaderClear() { + var styleElement = document.getElementById('PDFJS_FONT_STYLE_TAG'); + if (styleElement) { + styleElement.parentNode.removeChild(styleElement); + } +//#if !(MOZCENTRAL) + this.nativeFontFaces.forEach(function(nativeFontFace) { + document.fonts.delete(nativeFontFace); + }); + this.nativeFontFaces.length = 0; +//#endif + }, +//#if !(MOZCENTRAL) + get loadTestFont() { + // This is a CFF font with 1 glyph for '.' that fills its entire width and + // height. + return shadow(this, 'loadTestFont', atob( + 'T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQAFQ' + + 'AABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAAALwA' + + 'AAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgAAAAGbm' + + 'FtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1AAsD6AAA' + + 'AADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD6AAAAAAD6A' + + 'ABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACMAooCvAAAAeAA' + + 'MQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4DIP84AFoDIQAAAA' + + 'AAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAAAAEAAQAAAAEAAAAA' + + 'AAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUAAQAAAAEAAAAAAAYAAQ' + + 'AAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgABAAMAAQQJAAMAAgABAAMA' + + 'AQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABYAAAAAAAAAwAAAAMAAAAcAA' + + 'EAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAAAC7////TAAEAAAAAAAABBgAA' + + 'AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAA' + + 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' + + 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' + + 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' + + 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAA' + + 'AAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAAAAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgc' + + 'A/gXBIwMAYuL+nz5tQXkD5j3CBLnEQACAQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWF' + + 'hYWFhYWFhYAAABAQAADwACAQEEE/t3Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQA' + + 'AAAAAAABAAAAAMmJbzEAAAAAzgTjFQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAg' + + 'ABAAAAAAAAAAAD6AAAAAAAAA==' + )); + }, + + loadTestFontId: 0, + + loadingContext: { + requests: [], + nextRequestId: 0 + }, + + isSyncFontLoadingSupported: (function detectSyncFontLoadingSupport() { + if (isWorker) { + return false; + } + + // User agent string sniffing is bad, but there is no reliable way to tell + // if font is fully loaded and ready to be used with canvas. + var userAgent = window.navigator.userAgent; + var m = /Mozilla\/5.0.*?rv:(\d+).*? Gecko/.exec(userAgent); + if (m && m[1] >= 14) { + return true; + } + // TODO other browsers + if (userAgent === 'node') { + return true; + } + return false; + })(), + + nativeFontFaces: [], + + isFontLoadingAPISupported: (!isWorker && typeof document !== 'undefined' && + !!document.fonts), + + addNativeFontFace: function fontLoader_addNativeFontFace(nativeFontFace) { + this.nativeFontFaces.push(nativeFontFace); + document.fonts.add(nativeFontFace); + }, + + bind: function fontLoaderBind(fonts, callback) { + assert(!isWorker, 'bind() shall be called from main thread'); + + var rules = []; + var fontsToLoad = []; + var fontLoadPromises = []; + for (var i = 0, ii = fonts.length; i < ii; i++) { + var font = fonts[i]; + + // Add the font to the DOM only once or skip if the font + // is already loaded. + if (font.attached || font.loading === false) { + continue; + } + font.attached = true; + + if (this.isFontLoadingAPISupported) { + var nativeFontFace = font.createNativeFontFace(); + if (nativeFontFace) { + fontLoadPromises.push(nativeFontFace.loaded); + } + } else { + var rule = font.bindDOM(); + if (rule) { + rules.push(rule); + fontsToLoad.push(font); + } + } + } + + var request = FontLoader.queueLoadingCallback(callback); + if (this.isFontLoadingAPISupported) { + Promise.all(fontsToLoad).then(function() { + request.complete(); + }); + } else if (rules.length > 0 && !this.isSyncFontLoadingSupported) { + FontLoader.prepareFontLoadEvent(rules, fontsToLoad, request); + } else { + request.complete(); + } + }, + + queueLoadingCallback: function FontLoader_queueLoadingCallback(callback) { + function LoadLoader_completeRequest() { + assert(!request.end, 'completeRequest() cannot be called twice'); + request.end = Date.now(); + + // sending all completed requests in order how they were queued + while (context.requests.length > 0 && context.requests[0].end) { + var otherRequest = context.requests.shift(); + setTimeout(otherRequest.callback, 0); + } + } + + var context = FontLoader.loadingContext; + var requestId = 'pdfjs-font-loading-' + (context.nextRequestId++); + var request = { + id: requestId, + complete: LoadLoader_completeRequest, + callback: callback, + started: Date.now() + }; + context.requests.push(request); + return request; + }, + + prepareFontLoadEvent: function fontLoaderPrepareFontLoadEvent(rules, + fonts, + request) { + /** Hack begin */ + // There's currently no event when a font has finished downloading so the + // following code is a dirty hack to 'guess' when a font is + // ready. It's assumed fonts are loaded in order, so add a known test + // font after the desired fonts and then test for the loading of that + // test font. + + function int32(data, offset) { + return (data.charCodeAt(offset) << 24) | + (data.charCodeAt(offset + 1) << 16) | + (data.charCodeAt(offset + 2) << 8) | + (data.charCodeAt(offset + 3) & 0xff); + } + + function spliceString(s, offset, remove, insert) { + var chunk1 = s.substr(0, offset); + var chunk2 = s.substr(offset + remove); + return chunk1 + insert + chunk2; + } + + var i, ii; + + var canvas = document.createElement('canvas'); + canvas.width = 1; + canvas.height = 1; + var ctx = canvas.getContext('2d'); + + var called = 0; + function isFontReady(name, callback) { + called++; + // With setTimeout clamping this gives the font ~100ms to load. + if(called > 30) { + warn('Load test font never loaded.'); + callback(); + return; + } + ctx.font = '30px ' + name; + ctx.fillText('.', 0, 20); + var imageData = ctx.getImageData(0, 0, 1, 1); + if (imageData.data[3] > 0) { + callback(); + return; + } + setTimeout(isFontReady.bind(null, name, callback)); + } + + var loadTestFontId = 'lt' + Date.now() + this.loadTestFontId++; + // Chromium seems to cache fonts based on a hash of the actual font data, + // so the font must be modified for each load test else it will appear to + // be loaded already. + // TODO: This could maybe be made faster by avoiding the btoa of the full + // font by splitting it in chunks before hand and padding the font id. + var data = this.loadTestFont; + var COMMENT_OFFSET = 976; // has to be on 4 byte boundary (for checksum) + data = spliceString(data, COMMENT_OFFSET, loadTestFontId.length, + loadTestFontId); + // CFF checksum is important for IE, adjusting it + var CFF_CHECKSUM_OFFSET = 16; + var XXXX_VALUE = 0x58585858; // the "comment" filled with 'X' + var checksum = int32(data, CFF_CHECKSUM_OFFSET); + for (i = 0, ii = loadTestFontId.length - 3; i < ii; i += 4) { + checksum = (checksum - XXXX_VALUE + int32(loadTestFontId, i)) | 0; + } + if (i < loadTestFontId.length) { // align to 4 bytes boundary + checksum = (checksum - XXXX_VALUE + + int32(loadTestFontId + 'XXX', i)) | 0; + } + data = spliceString(data, CFF_CHECKSUM_OFFSET, 4, string32(checksum)); + + var url = 'url(data:font/opentype;base64,' + btoa(data) + ');'; + var rule = '@font-face { font-family:"' + loadTestFontId + '";src:' + + url + '}'; + FontLoader.insertRule(rule); + + var names = []; + for (i = 0, ii = fonts.length; i < ii; i++) { + names.push(fonts[i].loadedName); + } + names.push(loadTestFontId); + + var div = document.createElement('div'); + div.setAttribute('style', + 'visibility: hidden;' + + 'width: 10px; height: 10px;' + + 'position: absolute; top: 0px; left: 0px;'); + for (i = 0, ii = names.length; i < ii; ++i) { + var span = document.createElement('span'); + span.textContent = 'Hi'; + span.style.fontFamily = names[i]; + div.appendChild(span); + } + document.body.appendChild(div); + + isFontReady(loadTestFontId, function() { + document.body.removeChild(div); + request.complete(); + }); + /** Hack end */ + } +//#else +//bind: function fontLoaderBind(fonts, callback) { +// assert(!isWorker, 'bind() shall be called from main thread'); +// +// for (var i = 0, ii = fonts.length; i < ii; i++) { +// var font = fonts[i]; +// if (font.attached) { +// continue; +// } +// +// font.attached = true; +// font.bindDOM() +// } +// +// setTimeout(callback); +//} +//#endif +}; + +var FontFaceObject = (function FontFaceObjectClosure() { + function FontFaceObject(name, file, properties) { + this.compiledGlyphs = {}; + if (arguments.length === 1) { + // importing translated data + var data = arguments[0]; + for (var i in data) { + this[i] = data[i]; + } + return; + } + } + FontFaceObject.prototype = { +//#if !(MOZCENTRAL) + createNativeFontFace: function FontFaceObject_createNativeFontFace() { + if (!this.data) { + return null; + } + + if (PDFJS.disableFontFace) { + this.disableFontFace = true; + return null; + } + + var nativeFontFace = new FontFace(this.loadedName, this.data, {}); + + FontLoader.addNativeFontFace(nativeFontFace); + + if (PDFJS.pdfBug && 'FontInspector' in globalScope && + globalScope['FontInspector'].enabled) { + globalScope['FontInspector'].fontAdded(this); + } + return nativeFontFace; + }, +//#endif + + bindDOM: function FontFaceObject_bindDOM() { + if (!this.data) { + return null; + } + + if (PDFJS.disableFontFace) { + this.disableFontFace = true; + return null; + } + + var data = bytesToString(new Uint8Array(this.data)); + var fontName = this.loadedName; + + // Add the font-face rule to the document + var url = ('url(data:' + this.mimetype + ';base64,' + + window.btoa(data) + ');'); + var rule = '@font-face { font-family:"' + fontName + '";src:' + url + '}'; + FontLoader.insertRule(rule); + + if (PDFJS.pdfBug && 'FontInspector' in globalScope && + globalScope['FontInspector'].enabled) { + globalScope['FontInspector'].fontAdded(this, url); + } + + return rule; + }, + + getPathGenerator: function FontLoader_getPathGenerator(objs, character) { + if (!(character in this.compiledGlyphs)) { + var js = objs.get(this.loadedName + '_path_' + character); + /*jshint -W054 */ + this.compiledGlyphs[character] = new Function('c', 'size', js); + } + return this.compiledGlyphs[character]; + } + }; + return FontFaceObject; +})(); + + +var ANNOT_MIN_SIZE = 10; // px + +var AnnotationUtils = (function AnnotationUtilsClosure() { + // TODO(mack): This dupes some of the logic in CanvasGraphics.setFont() + function setTextStyles(element, item, fontObj) { + + var style = element.style; + style.fontSize = item.fontSize + 'px'; + style.direction = item.fontDirection < 0 ? 'rtl': 'ltr'; + + if (!fontObj) { + return; + } + + style.fontWeight = fontObj.black ? + (fontObj.bold ? 'bolder' : 'bold') : + (fontObj.bold ? 'bold' : 'normal'); + style.fontStyle = fontObj.italic ? 'italic' : 'normal'; + + var fontName = fontObj.loadedName; + var fontFamily = fontName ? '"' + fontName + '", ' : ''; + // Use a reasonable default font if the font doesn't specify a fallback + var fallbackName = fontObj.fallbackName || 'Helvetica, sans-serif'; + style.fontFamily = fontFamily + fallbackName; + } + + function initContainer(item, drawBorder) { + var container = document.createElement('section'); + var cstyle = container.style; + var width = item.rect[2] - item.rect[0]; + var height = item.rect[3] - item.rect[1]; + + var bWidth = item.borderWidth || 0; + if (bWidth) { + width = width - 2 * bWidth; + height = height - 2 * bWidth; + cstyle.borderWidth = bWidth + 'px'; + var color = item.color; + if (drawBorder && color) { + cstyle.borderStyle = 'solid'; + cstyle.borderColor = Util.makeCssRgb(Math.round(color[0] * 255), + Math.round(color[1] * 255), + Math.round(color[2] * 255)); + } + } + cstyle.width = width + 'px'; + cstyle.height = height + 'px'; + return container; + } + + function getHtmlElementForTextWidgetAnnotation(item, commonObjs) { + var element = document.createElement('div'); + var width = item.rect[2] - item.rect[0]; + var height = item.rect[3] - item.rect[1]; + element.style.width = width + 'px'; + element.style.height = height + 'px'; + element.style.display = 'table'; + + var content = document.createElement('div'); + content.textContent = item.fieldValue; + var textAlignment = item.textAlignment; + content.style.textAlign = ['left', 'center', 'right'][textAlignment]; + content.style.verticalAlign = 'middle'; + content.style.display = 'table-cell'; + + var fontObj = item.fontRefName ? + commonObjs.getData(item.fontRefName) : null; + setTextStyles(content, item, fontObj); + + element.appendChild(content); + + return element; + } + + function getHtmlElementForTextAnnotation(item) { + var rect = item.rect; + + // sanity check because of OOo-generated PDFs + if ((rect[3] - rect[1]) < ANNOT_MIN_SIZE) { + rect[3] = rect[1] + ANNOT_MIN_SIZE; + } + if ((rect[2] - rect[0]) < ANNOT_MIN_SIZE) { + rect[2] = rect[0] + (rect[3] - rect[1]); // make it square + } + + var container = initContainer(item, false); + container.className = 'annotText'; + + var image = document.createElement('img'); + image.style.height = container.style.height; + image.style.width = container.style.width; + var iconName = item.name; + image.src = PDFJS.imageResourcesPath + 'annotation-' + + iconName.toLowerCase() + '.svg'; + image.alt = '[{{type}} Annotation]'; + image.dataset.l10nId = 'text_annotation_type'; + image.dataset.l10nArgs = JSON.stringify({type: iconName}); + + var contentWrapper = document.createElement('div'); + contentWrapper.className = 'annotTextContentWrapper'; + contentWrapper.style.left = Math.floor(rect[2] - rect[0] + 5) + 'px'; + contentWrapper.style.top = '-10px'; + + var content = document.createElement('div'); + content.className = 'annotTextContent'; + content.setAttribute('hidden', true); + + var i, ii; + if (item.hasBgColor) { + var color = item.color; + + // Enlighten the color (70%) + var BACKGROUND_ENLIGHT = 0.7; + var r = BACKGROUND_ENLIGHT * (1.0 - color[0]) + color[0]; + var g = BACKGROUND_ENLIGHT * (1.0 - color[1]) + color[1]; + var b = BACKGROUND_ENLIGHT * (1.0 - color[2]) + color[2]; + content.style.backgroundColor = Util.makeCssRgb((r * 255) | 0, + (g * 255) | 0, + (b * 255) | 0); + } + + var title = document.createElement('h1'); + var text = document.createElement('p'); + title.textContent = item.title; + + if (!item.content && !item.title) { + content.setAttribute('hidden', true); + } else { + var e = document.createElement('span'); + var lines = item.content.split(/(?:\r\n?|\n)/); + for (i = 0, ii = lines.length; i < ii; ++i) { + var line = lines[i]; + e.appendChild(document.createTextNode(line)); + if (i < (ii - 1)) { + e.appendChild(document.createElement('br')); + } + } + text.appendChild(e); + + var pinned = false; + + var showAnnotation = function showAnnotation(pin) { + if (pin) { + pinned = true; + } + if (content.hasAttribute('hidden')) { + container.style.zIndex += 1; + content.removeAttribute('hidden'); + } + }; + + var hideAnnotation = function hideAnnotation(unpin) { + if (unpin) { + pinned = false; + } + if (!content.hasAttribute('hidden') && !pinned) { + container.style.zIndex -= 1; + content.setAttribute('hidden', true); + } + }; + + var toggleAnnotation = function toggleAnnotation() { + if (pinned) { + hideAnnotation(true); + } else { + showAnnotation(true); + } + }; + + image.addEventListener('click', function image_clickHandler() { + toggleAnnotation(); + }, false); + image.addEventListener('mouseover', function image_mouseOverHandler() { + showAnnotation(); + }, false); + image.addEventListener('mouseout', function image_mouseOutHandler() { + hideAnnotation(); + }, false); + + content.addEventListener('click', function content_clickHandler() { + hideAnnotation(true); + }, false); + } + + content.appendChild(title); + content.appendChild(text); + contentWrapper.appendChild(content); + container.appendChild(image); + container.appendChild(contentWrapper); + + return container; + } + + function getHtmlElementForLinkAnnotation(item) { + var container = initContainer(item, true); + container.className = 'annotLink'; + + var link = document.createElement('a'); + link.href = link.title = item.url || ''; + if (item.url && PDFJS.openExternalLinksInNewWindow) { + link.target = '_blank'; + } + + container.appendChild(link); + + return container; + } + + function getHtmlElement(data, objs) { + switch (data.annotationType) { + case AnnotationType.WIDGET: + return getHtmlElementForTextWidgetAnnotation(data, objs); + case AnnotationType.TEXT: + return getHtmlElementForTextAnnotation(data); + case AnnotationType.LINK: + return getHtmlElementForLinkAnnotation(data); + default: + throw new Error('Unsupported annotationType: ' + data.annotationType); + } + } + + return { + getHtmlElement: getHtmlElement + }; +})(); +PDFJS.AnnotationUtils = AnnotationUtils; + + +//#if (GENERIC || SINGLE_FILE) +var SVG_DEFAULTS = { + fontStyle: 'normal', + fontWeight: 'normal', + fillColor: '#000000' +}; + +var convertImgDataToPng = (function convertImgDataToPngClosure() { + var PNG_HEADER = + new Uint8Array([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]); + + var CHUNK_WRAPPER_SIZE = 12; + + var crcTable = new Int32Array(256); + for (var i = 0; i < 256; i++) { + var c = i; + for (var h = 0; h < 8; h++) { + if (c & 1) { + c = 0xedB88320 ^ ((c >> 1) & 0x7fffffff); + } else { + c = (c >> 1) & 0x7fffffff; + } + } + crcTable[i] = c; + } + + function crc32(data, start, end) { + var crc = -1; + for (var i = start; i < end; i++) { + var a = (crc ^ data[i]) & 0xff; + var b = crcTable[a]; + crc = (crc >>> 8) ^ b; + } + return crc ^ -1; + } + + function writePngChunk(type, body, data, offset) { + var p = offset; + var len = body.length; + + data[p] = len >> 24 & 0xff; + data[p + 1] = len >> 16 & 0xff; + data[p + 2] = len >> 8 & 0xff; + data[p + 3] = len & 0xff; + p += 4; + + data[p] = type.charCodeAt(0) & 0xff; + data[p + 1] = type.charCodeAt(1) & 0xff; + data[p + 2] = type.charCodeAt(2) & 0xff; + data[p + 3] = type.charCodeAt(3) & 0xff; + p += 4; + + data.set(body, p); + p += body.length; + + var crc = crc32(data, offset + 4, p); + + data[p] = crc >> 24 & 0xff; + data[p + 1] = crc >> 16 & 0xff; + data[p + 2] = crc >> 8 & 0xff; + data[p + 3] = crc & 0xff; + } + + function adler32(data, start, end) { + var a = 1; + var b = 0; + for (var i = start; i < end; ++i) { + a = (a + (data[i] & 0xff)) % 65521; + b = (b + a) % 65521; + } + return (b << 16) | a; + } + + function encode(imgData, kind) { + var width = imgData.width; + var height = imgData.height; + var bitDepth, colorType, lineSize; + var bytes = imgData.data; + + switch (kind) { + case ImageKind.GRAYSCALE_1BPP: + colorType = 0; + bitDepth = 1; + lineSize = (width + 7) >> 3; + break; + case ImageKind.RGB_24BPP: + colorType = 2; + bitDepth = 8; + lineSize = width * 3; + break; + case ImageKind.RGBA_32BPP: + colorType = 6; + bitDepth = 8; + lineSize = width * 4; + break; + default: + throw new Error('invalid format'); + } + + // prefix every row with predictor 0 + var literals = new Uint8Array((1 + lineSize) * height); + var offsetLiterals = 0, offsetBytes = 0; + var y, i; + for (y = 0; y < height; ++y) { + literals[offsetLiterals++] = 0; // no prediction + literals.set(bytes.subarray(offsetBytes, offsetBytes + lineSize), + offsetLiterals); + offsetBytes += lineSize; + offsetLiterals += lineSize; + } + + if (kind === ImageKind.GRAYSCALE_1BPP) { + // inverting for B/W + offsetLiterals = 0; + for (y = 0; y < height; y++) { + offsetLiterals++; // skipping predictor + for (i = 0; i < lineSize; i++) { + literals[offsetLiterals++] ^= 0xFF; + } + } + } + + var ihdr = new Uint8Array([ + width >> 24 & 0xff, + width >> 16 & 0xff, + width >> 8 & 0xff, + width & 0xff, + height >> 24 & 0xff, + height >> 16 & 0xff, + height >> 8 & 0xff, + height & 0xff, + bitDepth, // bit depth + colorType, // color type + 0x00, // compression method + 0x00, // filter method + 0x00 // interlace method + ]); + + var len = literals.length; + var maxBlockLength = 0xFFFF; + + var deflateBlocks = Math.ceil(len / maxBlockLength); + var idat = new Uint8Array(2 + len + deflateBlocks * 5 + 4); + var pi = 0; + idat[pi++] = 0x78; // compression method and flags + idat[pi++] = 0x9c; // flags + + var pos = 0; + while (len > maxBlockLength) { + // writing non-final DEFLATE blocks type 0 and length of 65535 + idat[pi++] = 0x00; + idat[pi++] = 0xff; + idat[pi++] = 0xff; + idat[pi++] = 0x00; + idat[pi++] = 0x00; + idat.set(literals.subarray(pos, pos + maxBlockLength), pi); + pi += maxBlockLength; + pos += maxBlockLength; + len -= maxBlockLength; + } + + // writing non-final DEFLATE blocks type 0 + idat[pi++] = 0x01; + idat[pi++] = len & 0xff; + idat[pi++] = len >> 8 & 0xff; + idat[pi++] = (~len & 0xffff) & 0xff; + idat[pi++] = (~len & 0xffff) >> 8 & 0xff; + idat.set(literals.subarray(pos), pi); + pi += literals.length - pos; + + var adler = adler32(literals, 0, literals.length); // checksum + idat[pi++] = adler >> 24 & 0xff; + idat[pi++] = adler >> 16 & 0xff; + idat[pi++] = adler >> 8 & 0xff; + idat[pi++] = adler & 0xff; + + // PNG will consists: header, IHDR+data, IDAT+data, and IEND. + var pngLength = PNG_HEADER.length + (CHUNK_WRAPPER_SIZE * 3) + + ihdr.length + idat.length; + var data = new Uint8Array(pngLength); + var offset = 0; + data.set(PNG_HEADER, offset); + offset += PNG_HEADER.length; + writePngChunk('IHDR', ihdr, data, offset); + offset += CHUNK_WRAPPER_SIZE + ihdr.length; + writePngChunk('IDATA', idat, data, offset); + offset += CHUNK_WRAPPER_SIZE + idat.length; + writePngChunk('IEND', new Uint8Array(0), data, offset); + + return PDFJS.createObjectURL(data, 'image/png'); + } + + return function convertImgDataToPng(imgData) { + var kind = (imgData.kind === undefined ? + ImageKind.GRAYSCALE_1BPP : imgData.kind); + return encode(imgData, kind); + }; +})(); + +var SVGExtraState = (function SVGExtraStateClosure() { + function SVGExtraState() { + this.fontSizeScale = 1; + this.fontWeight = SVG_DEFAULTS.fontWeight; + this.fontSize = 0; + + this.textMatrix = IDENTITY_MATRIX; + this.fontMatrix = FONT_IDENTITY_MATRIX; + this.leading = 0; + + // Current point (in user coordinates) + this.x = 0; + this.y = 0; + + // Start of text line (in text coordinates) + this.lineX = 0; + this.lineY = 0; + + // Character and word spacing + this.charSpacing = 0; + this.wordSpacing = 0; + this.textHScale = 1; + this.textRise = 0; + + // Default foreground and background colors + this.fillColor = SVG_DEFAULTS.fillColor; + this.strokeColor = '#000000'; + + this.fillAlpha = 1; + this.strokeAlpha = 1; + this.lineWidth = 1; + this.lineJoin = ''; + this.lineCap = ''; + this.miterLimit = 0; + + this.dashArray = []; + this.dashPhase = 0; + + this.dependencies = []; + + // Clipping + this.clipId = ''; + this.pendingClip = false; + + this.maskId = ''; + } + + SVGExtraState.prototype = { + clone: function SVGExtraState_clone() { + return Object.create(this); + }, + setCurrentPoint: function SVGExtraState_setCurrentPoint(x, y) { + this.x = x; + this.y = y; + } + }; + return SVGExtraState; +})(); + +var SVGGraphics = (function SVGGraphicsClosure() { + function createScratchSVG(width, height) { + var NS = 'http://www.w3.org/2000/svg'; + var svg = document.createElementNS(NS, 'svg:svg'); + svg.setAttributeNS(null, 'version', '1.1'); + svg.setAttributeNS(null, 'width', width + 'px'); + svg.setAttributeNS(null, 'height', height + 'px'); + svg.setAttributeNS(null, 'viewBox', '0 0 ' + width + ' ' + height); + return svg; + } + + function opListToTree(opList) { + var opTree = []; + var tmp = []; + var opListLen = opList.length; + + for (var x = 0; x < opListLen; x++) { + if (opList[x].fn === 'save') { + opTree.push({'fnId': 92, 'fn': 'group', 'items': []}); + tmp.push(opTree); + opTree = opTree[opTree.length - 1].items; + continue; + } + + if(opList[x].fn === 'restore') { + opTree = tmp.pop(); + } else { + opTree.push(opList[x]); + } + } + return opTree; + } + + /** + * Formats float number. + * @param value {number} number to format. + * @returns {string} + */ + function pf(value) { + if (value === (value | 0)) { // integer number + return value.toString(); + } + var s = value.toFixed(10); + var i = s.length - 1; + if (s[i] !== '0') { + return s; + } + // removing trailing zeros + do { + i--; + } while (s[i] === '0'); + return s.substr(0, s[i] === '.' ? i : i + 1); + } + + /** + * Formats transform matrix. The standard rotation, scale and translate + * matrices are replaced by their shorter forms, and for identity matrix + * returns empty string to save the memory. + * @param m {Array} matrix to format. + * @returns {string} + */ + function pm(m) { + if (m[4] === 0 && m[5] === 0) { + if (m[1] === 0 && m[2] === 0) { + if (m[0] === 1 && m[3] === 1) { + return ''; + } + return 'scale(' + pf(m[0]) + ' ' + pf(m[3]) + ')'; + } + if (m[0] === m[3] && m[1] === -m[2]) { + var a = Math.acos(m[0]) * 180 / Math.PI; + return 'rotate(' + pf(a) + ')'; + } + } else { + if (m[0] === 1 && m[1] === 0 && m[2] === 0 && m[3] === 1) { + return 'translate(' + pf(m[4]) + ' ' + pf(m[5]) + ')'; + } + } + return 'matrix(' + pf(m[0]) + ' ' + pf(m[1]) + ' ' + pf(m[2]) + ' ' + + pf(m[3]) + ' ' + pf(m[4]) + ' ' + pf(m[5]) + ')'; + } + + function SVGGraphics(commonObjs, objs) { + this.current = new SVGExtraState(); + this.transformMatrix = IDENTITY_MATRIX; // Graphics state matrix + this.transformStack = []; + this.extraStack = []; + this.commonObjs = commonObjs; + this.objs = objs; + this.pendingEOFill = false; + + this.embedFonts = false; + this.embeddedFonts = {}; + this.cssStyle = null; + } + + var NS = 'http://www.w3.org/2000/svg'; + var XML_NS = 'http://www.w3.org/XML/1998/namespace'; + var XLINK_NS = 'http://www.w3.org/1999/xlink'; + var LINE_CAP_STYLES = ['butt', 'round', 'square']; + var LINE_JOIN_STYLES = ['miter', 'round', 'bevel']; + var clipCount = 0; + var maskCount = 0; + + SVGGraphics.prototype = { + save: function SVGGraphics_save() { + this.transformStack.push(this.transformMatrix); + var old = this.current; + this.extraStack.push(old); + this.current = old.clone(); + }, + + restore: function SVGGraphics_restore() { + this.transformMatrix = this.transformStack.pop(); + this.current = this.extraStack.pop(); + + this.tgrp = document.createElementNS(NS, 'svg:g'); + this.tgrp.setAttributeNS(null, 'transform', pm(this.transformMatrix)); + this.pgrp.appendChild(this.tgrp); + }, + + group: function SVGGraphics_group(items) { + this.save(); + this.executeOpTree(items); + this.restore(); + }, + + loadDependencies: function SVGGraphics_loadDependencies(operatorList) { + var fnArray = operatorList.fnArray; + var fnArrayLen = fnArray.length; + var argsArray = operatorList.argsArray; + + var self = this; + for (var i = 0; i < fnArrayLen; i++) { + if (OPS.dependency === fnArray[i]) { + var deps = argsArray[i]; + for (var n = 0, nn = deps.length; n < nn; n++) { + var obj = deps[n]; + var common = obj.substring(0, 2) === 'g_'; + var promise; + if (common) { + promise = new Promise(function(resolve) { + self.commonObjs.get(obj, resolve); + }); + } else { + promise = new Promise(function(resolve) { + self.objs.get(obj, resolve); + }); + } + this.current.dependencies.push(promise); + } + } + } + return Promise.all(this.current.dependencies); + }, + + transform: function SVGGraphics_transform(a, b, c, d, e, f) { + var transformMatrix = [a, b, c, d, e, f]; + this.transformMatrix = PDFJS.Util.transform(this.transformMatrix, + transformMatrix); + + this.tgrp = document.createElementNS(NS, 'svg:g'); + this.tgrp.setAttributeNS(null, 'transform', pm(this.transformMatrix)); + }, + + getSVG: function SVGGraphics_getSVG(operatorList, viewport) { + this.svg = createScratchSVG(viewport.width, viewport.height); + this.viewport = viewport; + + return this.loadDependencies(operatorList).then(function () { + this.transformMatrix = IDENTITY_MATRIX; + this.pgrp = document.createElementNS(NS, 'svg:g'); // Parent group + this.pgrp.setAttributeNS(null, 'transform', pm(viewport.transform)); + this.tgrp = document.createElementNS(NS, 'svg:g'); // Transform group + this.tgrp.setAttributeNS(null, 'transform', pm(this.transformMatrix)); + this.defs = document.createElementNS(NS, 'svg:defs'); + this.pgrp.appendChild(this.defs); + this.pgrp.appendChild(this.tgrp); + this.svg.appendChild(this.pgrp); + var opTree = this.convertOpList(operatorList); + this.executeOpTree(opTree); + return this.svg; + }.bind(this)); + }, + + convertOpList: function SVGGraphics_convertOpList(operatorList) { + var argsArray = operatorList.argsArray; + var fnArray = operatorList.fnArray; + var fnArrayLen = fnArray.length; + var REVOPS = []; + var opList = []; + + for (var op in OPS) { + REVOPS[OPS[op]] = op; + } + + for (var x = 0; x < fnArrayLen; x++) { + var fnId = fnArray[x]; + opList.push({'fnId' : fnId, 'fn': REVOPS[fnId], 'args': argsArray[x]}); + } + return opListToTree(opList); + }, + + executeOpTree: function SVGGraphics_executeOpTree(opTree) { + var opTreeLen = opTree.length; + for(var x = 0; x < opTreeLen; x++) { + var fn = opTree[x].fn; + var fnId = opTree[x].fnId; + var args = opTree[x].args; + + switch (fnId | 0) { + case OPS.beginText: + this.beginText(); + break; + case OPS.setLeading: + this.setLeading(args); + break; + case OPS.setLeadingMoveText: + this.setLeadingMoveText(args[0], args[1]); + break; + case OPS.setFont: + this.setFont(args); + break; + case OPS.showText: + this.showText(args[0]); + break; + case OPS.showSpacedText: + this.showText(args[0]); + break; + case OPS.endText: + this.endText(); + break; + case OPS.moveText: + this.moveText(args[0], args[1]); + break; + case OPS.setCharSpacing: + this.setCharSpacing(args[0]); + break; + case OPS.setWordSpacing: + this.setWordSpacing(args[0]); + break; + case OPS.setHScale: + this.setHScale(args[0]); + break; + case OPS.setTextMatrix: + this.setTextMatrix(args[0], args[1], args[2], + args[3], args[4], args[5]); + break; + case OPS.setLineWidth: + this.setLineWidth(args[0]); + break; + case OPS.setLineJoin: + this.setLineJoin(args[0]); + break; + case OPS.setLineCap: + this.setLineCap(args[0]); + break; + case OPS.setMiterLimit: + this.setMiterLimit(args[0]); + break; + case OPS.setFillRGBColor: + this.setFillRGBColor(args[0], args[1], args[2]); + break; + case OPS.setStrokeRGBColor: + this.setStrokeRGBColor(args[0], args[1], args[2]); + break; + case OPS.setDash: + this.setDash(args[0], args[1]); + break; + case OPS.setGState: + this.setGState(args[0]); + break; + case OPS.fill: + this.fill(); + break; + case OPS.eoFill: + this.eoFill(); + break; + case OPS.stroke: + this.stroke(); + break; + case OPS.fillStroke: + this.fillStroke(); + break; + case OPS.eoFillStroke: + this.eoFillStroke(); + break; + case OPS.clip: + this.clip('nonzero'); + break; + case OPS.eoClip: + this.clip('evenodd'); + break; + case OPS.paintSolidColorImageMask: + this.paintSolidColorImageMask(); + break; + case OPS.paintJpegXObject: + this.paintJpegXObject(args[0], args[1], args[2]); + break; + case OPS.paintImageXObject: + this.paintImageXObject(args[0]); + break; + case OPS.paintInlineImageXObject: + this.paintInlineImageXObject(args[0]); + break; + case OPS.paintImageMaskXObject: + this.paintImageMaskXObject(args[0]); + break; + case OPS.paintFormXObjectBegin: + this.paintFormXObjectBegin(args[0], args[1]); + break; + case OPS.paintFormXObjectEnd: + this.paintFormXObjectEnd(); + break; + case OPS.closePath: + this.closePath(); + break; + case OPS.closeStroke: + this.closeStroke(); + break; + case OPS.closeFillStroke: + this.closeFillStroke(); + break; + case OPS.nextLine: + this.nextLine(); + break; + case OPS.transform: + this.transform(args[0], args[1], args[2], args[3], + args[4], args[5]); + break; + case OPS.constructPath: + this.constructPath(args[0], args[1]); + break; + case OPS.endPath: + this.endPath(); + break; + case 92: + this.group(opTree[x].items); + break; + default: + warn('Unimplemented method '+ fn); + break; + } + } + }, + + setWordSpacing: function SVGGraphics_setWordSpacing(wordSpacing) { + this.current.wordSpacing = wordSpacing; + }, + + setCharSpacing: function SVGGraphics_setCharSpacing(charSpacing) { + this.current.charSpacing = charSpacing; + }, + + nextLine: function SVGGraphics_nextLine() { + this.moveText(0, this.current.leading); + }, + + setTextMatrix: function SVGGraphics_setTextMatrix(a, b, c, d, e, f) { + var current = this.current; + this.current.textMatrix = this.current.lineMatrix = [a, b, c, d, e, f]; + + this.current.x = this.current.lineX = 0; + this.current.y = this.current.lineY = 0; + + current.xcoords = []; + current.tspan = document.createElementNS(NS, 'svg:tspan'); + current.tspan.setAttributeNS(null, 'font-family', current.fontFamily); + current.tspan.setAttributeNS(null, 'font-size', + pf(current.fontSize) + 'px'); + current.tspan.setAttributeNS(null, 'y', pf(-current.y)); + + current.txtElement = document.createElementNS(NS, 'svg:text'); + current.txtElement.appendChild(current.tspan); + }, + + beginText: function SVGGraphics_beginText() { + this.current.x = this.current.lineX = 0; + this.current.y = this.current.lineY = 0; + this.current.textMatrix = IDENTITY_MATRIX; + this.current.lineMatrix = IDENTITY_MATRIX; + this.current.tspan = document.createElementNS(NS, 'svg:tspan'); + this.current.txtElement = document.createElementNS(NS, 'svg:text'); + this.current.txtgrp = document.createElementNS(NS, 'svg:g'); + this.current.xcoords = []; + }, + + moveText: function SVGGraphics_moveText(x, y) { + var current = this.current; + this.current.x = this.current.lineX += x; + this.current.y = this.current.lineY += y; + + current.xcoords = []; + current.tspan = document.createElementNS(NS, 'svg:tspan'); + current.tspan.setAttributeNS(null, 'font-family', current.fontFamily); + current.tspan.setAttributeNS(null, 'font-size', + pf(current.fontSize) + 'px'); + current.tspan.setAttributeNS(null, 'y', pf(-current.y)); + }, + + showText: function SVGGraphics_showText(glyphs) { + var current = this.current; + var font = current.font; + var fontSize = current.fontSize; + + if (fontSize === 0) { + return; + } + + var charSpacing = current.charSpacing; + var wordSpacing = current.wordSpacing; + var fontDirection = current.fontDirection; + var textHScale = current.textHScale * fontDirection; + var glyphsLength = glyphs.length; + var vertical = font.vertical; + var widthAdvanceScale = fontSize * current.fontMatrix[0]; + + var x = 0, i; + for (i = 0; i < glyphsLength; ++i) { + var glyph = glyphs[i]; + if (glyph === null) { + // word break + x += fontDirection * wordSpacing; + continue; + } else if (isNum(glyph)) { + x += -glyph * fontSize * 0.001; + continue; + } + current.xcoords.push(current.x + x * textHScale); + + var width = glyph.width; + var character = glyph.fontChar; + var charWidth = width * widthAdvanceScale + charSpacing * fontDirection; + x += charWidth; + + current.tspan.textContent += character; + } + if (vertical) { + current.y -= x * textHScale; + } else { + current.x += x * textHScale; + } + + current.tspan.setAttributeNS(null, 'x', + current.xcoords.map(pf).join(' ')); + current.tspan.setAttributeNS(null, 'y', pf(-current.y)); + current.tspan.setAttributeNS(null, 'font-family', current.fontFamily); + current.tspan.setAttributeNS(null, 'font-size', + pf(current.fontSize) + 'px'); + if (current.fontStyle !== SVG_DEFAULTS.fontStyle) { + current.tspan.setAttributeNS(null, 'font-style', current.fontStyle); + } + if (current.fontWeight !== SVG_DEFAULTS.fontWeight) { + current.tspan.setAttributeNS(null, 'font-weight', current.fontWeight); + } + if (current.fillColor !== SVG_DEFAULTS.fillColor) { + current.tspan.setAttributeNS(null, 'fill', current.fillColor); + } + + current.txtElement.setAttributeNS(null, 'transform', + pm(current.textMatrix) + + ' scale(1, -1)' ); + current.txtElement.setAttributeNS(XML_NS, 'xml:space', 'preserve'); + current.txtElement.appendChild(current.tspan); + current.txtgrp.appendChild(current.txtElement); + + this.tgrp.appendChild(current.txtElement); + + }, + + setLeadingMoveText: function SVGGraphics_setLeadingMoveText(x, y) { + this.setLeading(-y); + this.moveText(x, y); + }, + + addFontStyle: function SVGGraphics_addFontStyle(fontObj) { + if (!this.cssStyle) { + this.cssStyle = document.createElementNS(NS, 'svg:style'); + this.cssStyle.setAttributeNS(null, 'type', 'text/css'); + this.defs.appendChild(this.cssStyle); + } + + var url = PDFJS.createObjectURL(fontObj.data, fontObj.mimetype); + this.cssStyle.textContent += + '@font-face { font-family: "' + fontObj.loadedName + '";' + + ' src: url(' + url + '); }\n'; + }, + + setFont: function SVGGraphics_setFont(details) { + var current = this.current; + var fontObj = this.commonObjs.get(details[0]); + var size = details[1]; + this.current.font = fontObj; + + if (this.embedFonts && fontObj.data && + !this.embeddedFonts[fontObj.loadedName]) { + this.addFontStyle(fontObj); + this.embeddedFonts[fontObj.loadedName] = fontObj; + } + + current.fontMatrix = (fontObj.fontMatrix ? + fontObj.fontMatrix : FONT_IDENTITY_MATRIX); + + var bold = fontObj.black ? (fontObj.bold ? 'bolder' : 'bold') : + (fontObj.bold ? 'bold' : 'normal'); + var italic = fontObj.italic ? 'italic' : 'normal'; + + if (size < 0) { + size = -size; + current.fontDirection = -1; + } else { + current.fontDirection = 1; + } + current.fontSize = size; + current.fontFamily = fontObj.loadedName; + current.fontWeight = bold; + current.fontStyle = italic; + + current.tspan = document.createElementNS(NS, 'svg:tspan'); + current.tspan.setAttributeNS(null, 'y', pf(-current.y)); + current.xcoords = []; + }, + + endText: function SVGGraphics_endText() { + if (this.current.pendingClip) { + this.cgrp.appendChild(this.tgrp); + this.pgrp.appendChild(this.cgrp); + } else { + this.pgrp.appendChild(this.tgrp); + } + this.tgrp = document.createElementNS(NS, 'svg:g'); + this.tgrp.setAttributeNS(null, 'transform', pm(this.transformMatrix)); + }, + + // Path properties + setLineWidth: function SVGGraphics_setLineWidth(width) { + this.current.lineWidth = width; + }, + setLineCap: function SVGGraphics_setLineCap(style) { + this.current.lineCap = LINE_CAP_STYLES[style]; + }, + setLineJoin: function SVGGraphics_setLineJoin(style) { + this.current.lineJoin = LINE_JOIN_STYLES[style]; + }, + setMiterLimit: function SVGGraphics_setMiterLimit(limit) { + this.current.miterLimit = limit; + }, + setStrokeRGBColor: function SVGGraphics_setStrokeRGBColor(r, g, b) { + var color = Util.makeCssRgb(r, g, b); + this.current.strokeColor = color; + }, + setFillRGBColor: function SVGGraphics_setFillRGBColor(r, g, b) { + var color = Util.makeCssRgb(r, g, b); + this.current.fillColor = color; + this.current.tspan = document.createElementNS(NS, 'svg:tspan'); + this.current.xcoords = []; + }, + setDash: function SVGGraphics_setDash(dashArray, dashPhase) { + this.current.dashArray = dashArray; + this.current.dashPhase = dashPhase; + }, + + constructPath: function SVGGraphics_constructPath(ops, args) { + var current = this.current; + var x = current.x, y = current.y; + current.path = document.createElementNS(NS, 'svg:path'); + var d = []; + var opLength = ops.length; + + for (var i = 0, j = 0; i < opLength; i++) { + switch (ops[i] | 0) { + case OPS.rectangle: + x = args[j++]; + y = args[j++]; + var width = args[j++]; + var height = args[j++]; + var xw = x + width; + var yh = y + height; + d.push('M', pf(x), pf(y), 'L', pf(xw) , pf(y), 'L', pf(xw), pf(yh), + 'L', pf(x), pf(yh), 'Z'); + break; + case OPS.moveTo: + x = args[j++]; + y = args[j++]; + d.push('M', pf(x), pf(y)); + break; + case OPS.lineTo: + x = args[j++]; + y = args[j++]; + d.push('L', pf(x) , pf(y)); + break; + case OPS.curveTo: + x = args[j + 4]; + y = args[j + 5]; + d.push('C', pf(args[j]), pf(args[j + 1]), pf(args[j + 2]), + pf(args[j + 3]), pf(x), pf(y)); + j += 6; + break; + case OPS.curveTo2: + x = args[j + 2]; + y = args[j + 3]; + d.push('C', pf(x), pf(y), pf(args[j]), pf(args[j + 1]), + pf(args[j + 2]), pf(args[j + 3])); + j += 4; + break; + case OPS.curveTo3: + x = args[j + 2]; + y = args[j + 3]; + d.push('C', pf(args[j]), pf(args[j + 1]), pf(x), pf(y), + pf(x), pf(y)); + j += 4; + break; + case OPS.closePath: + d.push('Z'); + break; + } + } + current.path.setAttributeNS(null, 'd', d.join(' ')); + current.path.setAttributeNS(null, 'stroke-miterlimit', + pf(current.miterLimit)); + current.path.setAttributeNS(null, 'stroke-linecap', current.lineCap); + current.path.setAttributeNS(null, 'stroke-linejoin', current.lineJoin); + current.path.setAttributeNS(null, 'stroke-width', + pf(current.lineWidth) + 'px'); + current.path.setAttributeNS(null, 'stroke-dasharray', + current.dashArray.map(pf).join(' ')); + current.path.setAttributeNS(null, 'stroke-dashoffset', + pf(current.dashPhase) + 'px'); + current.path.setAttributeNS(null, 'fill', 'none'); + + this.tgrp.appendChild(current.path); + if (current.pendingClip) { + this.cgrp.appendChild(this.tgrp); + this.pgrp.appendChild(this.cgrp); + } else { + this.pgrp.appendChild(this.tgrp); + } + // Saving a reference in current.element so that it can be addressed + // in 'fill' and 'stroke' + current.element = current.path; + current.setCurrentPoint(x, y); + }, + + endPath: function SVGGraphics_endPath() { + var current = this.current; + if (current.pendingClip) { + this.cgrp.appendChild(this.tgrp); + this.pgrp.appendChild(this.cgrp); + } else { + this.pgrp.appendChild(this.tgrp); + } + this.tgrp = document.createElementNS(NS, 'svg:g'); + this.tgrp.setAttributeNS(null, 'transform', pm(this.transformMatrix)); + }, + + clip: function SVGGraphics_clip(type) { + var current = this.current; + // Add current path to clipping path + current.clipId = 'clippath' + clipCount; + clipCount++; + this.clippath = document.createElementNS(NS, 'svg:clipPath'); + this.clippath.setAttributeNS(null, 'id', current.clipId); + var clipElement = current.element.cloneNode(); + if (type === 'evenodd') { + clipElement.setAttributeNS(null, 'clip-rule', 'evenodd'); + } else { + clipElement.setAttributeNS(null, 'clip-rule', 'nonzero'); + } + this.clippath.setAttributeNS(null, 'transform', pm(this.transformMatrix)); + this.clippath.appendChild(clipElement); + this.defs.appendChild(this.clippath); + + // Create a new group with that attribute + current.pendingClip = true; + this.cgrp = document.createElementNS(NS, 'svg:g'); + this.cgrp.setAttributeNS(null, 'clip-path', + 'url(#' + current.clipId + ')'); + this.pgrp.appendChild(this.cgrp); + }, + + closePath: function SVGGraphics_closePath() { + var current = this.current; + var d = current.path.getAttributeNS(null, 'd'); + d += 'Z'; + current.path.setAttributeNS(null, 'd', d); + }, + + setLeading: function SVGGraphics_setLeading(leading) { + this.current.leading = -leading; + }, + + setTextRise: function SVGGraphics_setTextRise(textRise) { + this.current.textRise = textRise; + }, + + setHScale: function SVGGraphics_setHScale(scale) { + this.current.textHScale = scale / 100; + }, + + setGState: function SVGGraphics_setGState(states) { + for (var i = 0, ii = states.length; i < ii; i++) { + var state = states[i]; + var key = state[0]; + var value = state[1]; + + switch (key) { + case 'LW': + this.setLineWidth(value); + break; + case 'LC': + this.setLineCap(value); + break; + case 'LJ': + this.setLineJoin(value); + break; + case 'ML': + this.setMiterLimit(value); + break; + case 'D': + this.setDash(value[0], value[1]); + break; + case 'RI': + break; + case 'FL': + break; + case 'Font': + this.setFont(value); + break; + case 'CA': + break; + case 'ca': + break; + case 'BM': + break; + case 'SMask': + break; + } + } + }, + + fill: function SVGGraphics_fill() { + var current = this.current; + current.element.setAttributeNS(null, 'fill', current.fillColor); + }, + + stroke: function SVGGraphics_stroke() { + var current = this.current; + current.element.setAttributeNS(null, 'stroke', current.strokeColor); + current.element.setAttributeNS(null, 'fill', 'none'); + }, + + eoFill: function SVGGraphics_eoFill() { + var current = this.current; + current.element.setAttributeNS(null, 'fill', current.fillColor); + current.element.setAttributeNS(null, 'fill-rule', 'evenodd'); + }, + + fillStroke: function SVGGraphics_fillStroke() { + // Order is important since stroke wants fill to be none. + // First stroke, then if fill needed, it will be overwritten. + this.stroke(); + this.fill(); + }, + + eoFillStroke: function SVGGraphics_eoFillStroke() { + this.current.element.setAttributeNS(null, 'fill-rule', 'evenodd'); + this.fillStroke(); + }, + + closeStroke: function SVGGraphics_closeStroke() { + this.closePath(); + this.stroke(); + }, + + closeFillStroke: function SVGGraphics_closeFillStroke() { + this.closePath(); + this.fillStroke(); + }, + + paintSolidColorImageMask: + function SVGGraphics_paintSolidColorImageMask() { + var current = this.current; + var rect = document.createElementNS(NS, 'svg:rect'); + rect.setAttributeNS(null, 'x', '0'); + rect.setAttributeNS(null, 'y', '0'); + rect.setAttributeNS(null, 'width', '1px'); + rect.setAttributeNS(null, 'height', '1px'); + rect.setAttributeNS(null, 'fill', current.fillColor); + this.tgrp.appendChild(rect); + }, + + paintJpegXObject: function SVGGraphics_paintJpegXObject(objId, w, h) { + var current = this.current; + var imgObj = this.objs.get(objId); + var imgEl = document.createElementNS(NS, 'svg:image'); + imgEl.setAttributeNS(XLINK_NS, 'xlink:href', imgObj.src); + imgEl.setAttributeNS(null, 'width', imgObj.width + 'px'); + imgEl.setAttributeNS(null, 'height', imgObj.height + 'px'); + imgEl.setAttributeNS(null, 'x', '0'); + imgEl.setAttributeNS(null, 'y', pf(-h)); + imgEl.setAttributeNS(null, 'transform', + 'scale(' + pf(1 / w) + ' ' + pf(-1 / h) + ')'); + + this.tgrp.appendChild(imgEl); + if (current.pendingClip) { + this.cgrp.appendChild(this.tgrp); + this.pgrp.appendChild(this.cgrp); + } else { + this.pgrp.appendChild(this.tgrp); + } + }, + + paintImageXObject: function SVGGraphics_paintImageXObject(objId) { + var imgData = this.objs.get(objId); + if (!imgData) { + warn('Dependent image isn\'t ready yet'); + return; + } + this.paintInlineImageXObject(imgData); + }, + + paintInlineImageXObject: + function SVGGraphics_paintInlineImageXObject(imgData, mask) { + var current = this.current; + var width = imgData.width; + var height = imgData.height; + + var imgSrc = convertImgDataToPng(imgData); + var cliprect = document.createElementNS(NS, 'svg:rect'); + cliprect.setAttributeNS(null, 'x', '0'); + cliprect.setAttributeNS(null, 'y', '0'); + cliprect.setAttributeNS(null, 'width', pf(width)); + cliprect.setAttributeNS(null, 'height', pf(height)); + current.element = cliprect; + this.clip('nonzero'); + var imgEl = document.createElementNS(NS, 'svg:image'); + imgEl.setAttributeNS(XLINK_NS, 'xlink:href', imgSrc); + imgEl.setAttributeNS(null, 'x', '0'); + imgEl.setAttributeNS(null, 'y', pf(-height)); + imgEl.setAttributeNS(null, 'width', pf(width) + 'px'); + imgEl.setAttributeNS(null, 'height', pf(height) + 'px'); + imgEl.setAttributeNS(null, 'transform', + 'scale(' + pf(1 / width) + ' ' + + pf(-1 / height) + ')'); + if (mask) { + mask.appendChild(imgEl); + } else { + this.tgrp.appendChild(imgEl); + } + if (current.pendingClip) { + this.cgrp.appendChild(this.tgrp); + this.pgrp.appendChild(this.cgrp); + } else { + this.pgrp.appendChild(this.tgrp); + } + }, + + paintImageMaskXObject: + function SVGGraphics_paintImageMaskXObject(imgData) { + var current = this.current; + var width = imgData.width; + var height = imgData.height; + var fillColor = current.fillColor; + + current.maskId = 'mask' + maskCount++; + var mask = document.createElementNS(NS, 'svg:mask'); + mask.setAttributeNS(null, 'id', current.maskId); + + var rect = document.createElementNS(NS, 'svg:rect'); + rect.setAttributeNS(null, 'x', '0'); + rect.setAttributeNS(null, 'y', '0'); + rect.setAttributeNS(null, 'width', pf(width)); + rect.setAttributeNS(null, 'height', pf(height)); + rect.setAttributeNS(null, 'fill', fillColor); + rect.setAttributeNS(null, 'mask', 'url(#' + current.maskId +')'); + this.defs.appendChild(mask); + this.tgrp.appendChild(rect); + + this.paintInlineImageXObject(imgData, mask); + }, + + paintFormXObjectBegin: + function SVGGraphics_paintFormXObjectBegin(matrix, bbox) { + this.save(); + + if (isArray(matrix) && matrix.length === 6) { + this.transform(matrix[0], matrix[1], matrix[2], + matrix[3], matrix[4], matrix[5]); + } + + if (isArray(bbox) && bbox.length === 4) { + var width = bbox[2] - bbox[0]; + var height = bbox[3] - bbox[1]; + + var cliprect = document.createElementNS(NS, 'svg:rect'); + cliprect.setAttributeNS(null, 'x', bbox[0]); + cliprect.setAttributeNS(null, 'y', bbox[1]); + cliprect.setAttributeNS(null, 'width', pf(width)); + cliprect.setAttributeNS(null, 'height', pf(height)); + this.current.element = cliprect; + this.clip('nonzero'); + this.endPath(); + } + }, + + paintFormXObjectEnd: + function SVGGraphics_paintFormXObjectEnd() { + this.restore(); + } + }; + return SVGGraphics; +})(); + +PDFJS.SVGGraphics = SVGGraphics; +//#endif + + +}).call((typeof window === 'undefined') ? this : window); + +if (!PDFJS.workerSrc && typeof document !== 'undefined') { + // workerSrc is not set -- using last script url to define default location + PDFJS.workerSrc = (function () { + 'use strict'; + var scriptTagContainer = document.body || + document.getElementsByTagName('head')[0]; + var pdfjsSrc = scriptTagContainer.lastChild.src; + return pdfjsSrc && pdfjsSrc.replace(/\.js$/i, '.worker.js'); + })(); +} + diff --git a/source/ViewerJS/pdf.worker.js b/source/ViewerJS/pdf.worker.js new file mode 100644 index 0000000..c17192e --- /dev/null +++ b/source/ViewerJS/pdf.worker.js @@ -0,0 +1,39353 @@ +/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */ +/* Copyright 2012 Mozilla Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/*jshint globalstrict: false */ +/* globals PDFJS */ + +// Initializing PDFJS global object (if still undefined) +if (typeof PDFJS === 'undefined') { + (typeof window !== 'undefined' ? window : this).PDFJS = {}; +} + +PDFJS.version = '1.1.114'; +PDFJS.build = '3fd44fd'; + +(function pdfjsWrapper() { + // Use strict in our context only - users might not want it + 'use strict'; + +/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */ +/* Copyright 2012 Mozilla Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* globals Cmd, ColorSpace, Dict, MozBlobBuilder, Name, PDFJS, Ref, URL, + Promise */ + +'use strict'; + +var globalScope = (typeof window === 'undefined') ? this : window; + +var isWorker = (typeof window === 'undefined'); + +var FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0]; + +var TextRenderingMode = { + FILL: 0, + STROKE: 1, + FILL_STROKE: 2, + INVISIBLE: 3, + FILL_ADD_TO_PATH: 4, + STROKE_ADD_TO_PATH: 5, + FILL_STROKE_ADD_TO_PATH: 6, + ADD_TO_PATH: 7, + FILL_STROKE_MASK: 3, + ADD_TO_PATH_FLAG: 4 +}; + +var ImageKind = { + GRAYSCALE_1BPP: 1, + RGB_24BPP: 2, + RGBA_32BPP: 3 +}; + +var AnnotationType = { + WIDGET: 1, + TEXT: 2, + LINK: 3 +}; + +var StreamType = { + UNKNOWN: 0, + FLATE: 1, + LZW: 2, + DCT: 3, + JPX: 4, + JBIG: 5, + A85: 6, + AHX: 7, + CCF: 8, + RL: 9 +}; + +var FontType = { + UNKNOWN: 0, + TYPE1: 1, + TYPE1C: 2, + CIDFONTTYPE0: 3, + CIDFONTTYPE0C: 4, + TRUETYPE: 5, + CIDFONTTYPE2: 6, + TYPE3: 7, + OPENTYPE: 8, + TYPE0: 9, + MMTYPE1: 10 +}; + +// The global PDFJS object exposes the API +// In production, it will be declared outside a global wrapper +// In development, it will be declared here +if (!globalScope.PDFJS) { + globalScope.PDFJS = {}; +} + +globalScope.PDFJS.pdfBug = false; + +PDFJS.VERBOSITY_LEVELS = { + errors: 0, + warnings: 1, + infos: 5 +}; + +// All the possible operations for an operator list. +var OPS = PDFJS.OPS = { + // Intentionally start from 1 so it is easy to spot bad operators that will be + // 0's. + dependency: 1, + setLineWidth: 2, + setLineCap: 3, + setLineJoin: 4, + setMiterLimit: 5, + setDash: 6, + setRenderingIntent: 7, + setFlatness: 8, + setGState: 9, + save: 10, + restore: 11, + transform: 12, + moveTo: 13, + lineTo: 14, + curveTo: 15, + curveTo2: 16, + curveTo3: 17, + closePath: 18, + rectangle: 19, + stroke: 20, + closeStroke: 21, + fill: 22, + eoFill: 23, + fillStroke: 24, + eoFillStroke: 25, + closeFillStroke: 26, + closeEOFillStroke: 27, + endPath: 28, + clip: 29, + eoClip: 30, + beginText: 31, + endText: 32, + setCharSpacing: 33, + setWordSpacing: 34, + setHScale: 35, + setLeading: 36, + setFont: 37, + setTextRenderingMode: 38, + setTextRise: 39, + moveText: 40, + setLeadingMoveText: 41, + setTextMatrix: 42, + nextLine: 43, + showText: 44, + showSpacedText: 45, + nextLineShowText: 46, + nextLineSetSpacingShowText: 47, + setCharWidth: 48, + setCharWidthAndBounds: 49, + setStrokeColorSpace: 50, + setFillColorSpace: 51, + setStrokeColor: 52, + setStrokeColorN: 53, + setFillColor: 54, + setFillColorN: 55, + setStrokeGray: 56, + setFillGray: 57, + setStrokeRGBColor: 58, + setFillRGBColor: 59, + setStrokeCMYKColor: 60, + setFillCMYKColor: 61, + shadingFill: 62, + beginInlineImage: 63, + beginImageData: 64, + endInlineImage: 65, + paintXObject: 66, + markPoint: 67, + markPointProps: 68, + beginMarkedContent: 69, + beginMarkedContentProps: 70, + endMarkedContent: 71, + beginCompat: 72, + endCompat: 73, + paintFormXObjectBegin: 74, + paintFormXObjectEnd: 75, + beginGroup: 76, + endGroup: 77, + beginAnnotations: 78, + endAnnotations: 79, + beginAnnotation: 80, + endAnnotation: 81, + paintJpegXObject: 82, + paintImageMaskXObject: 83, + paintImageMaskXObjectGroup: 84, + paintImageXObject: 85, + paintInlineImageXObject: 86, + paintInlineImageXObjectGroup: 87, + paintImageXObjectRepeat: 88, + paintImageMaskXObjectRepeat: 89, + paintSolidColorImageMask: 90, + constructPath: 91 +}; + +// A notice for devs. These are good for things that are helpful to devs, such +// as warning that Workers were disabled, which is important to devs but not +// end users. +function info(msg) { + if (PDFJS.verbosity >= PDFJS.VERBOSITY_LEVELS.infos) { + console.log('Info: ' + msg); + } +} + +// Non-fatal warnings. +function warn(msg) { + if (PDFJS.verbosity >= PDFJS.VERBOSITY_LEVELS.warnings) { + console.log('Warning: ' + msg); + } +} + +// Fatal errors that should trigger the fallback UI and halt execution by +// throwing an exception. +function error(msg) { + if (PDFJS.verbosity >= PDFJS.VERBOSITY_LEVELS.errors) { + console.log('Error: ' + msg); + console.log(backtrace()); + } + UnsupportedManager.notify(UNSUPPORTED_FEATURES.unknown); + throw new Error(msg); +} + +function backtrace() { + try { + throw new Error(); + } catch (e) { + return e.stack ? e.stack.split('\n').slice(2).join('\n') : ''; + } +} + +function assert(cond, msg) { + if (!cond) { + error(msg); + } +} + +var UNSUPPORTED_FEATURES = PDFJS.UNSUPPORTED_FEATURES = { + unknown: 'unknown', + forms: 'forms', + javaScript: 'javaScript', + smask: 'smask', + shadingPattern: 'shadingPattern', + font: 'font' +}; + +var UnsupportedManager = PDFJS.UnsupportedManager = + (function UnsupportedManagerClosure() { + var listeners = []; + return { + listen: function (cb) { + listeners.push(cb); + }, + notify: function (featureId) { + warn('Unsupported feature "' + featureId + '"'); + for (var i = 0, ii = listeners.length; i < ii; i++) { + listeners[i](featureId); + } + } + }; +})(); + +// Combines two URLs. The baseUrl shall be absolute URL. If the url is an +// absolute URL, it will be returned as is. +function combineUrl(baseUrl, url) { + if (!url) { + return baseUrl; + } + if (/^[a-z][a-z0-9+\-.]*:/i.test(url)) { + return url; + } + var i; + if (url.charAt(0) === '/') { + // absolute path + i = baseUrl.indexOf('://'); + if (url.charAt(1) === '/') { + ++i; + } else { + i = baseUrl.indexOf('/', i + 3); + } + return baseUrl.substring(0, i) + url; + } else { + // relative path + var pathLength = baseUrl.length; + i = baseUrl.lastIndexOf('#'); + pathLength = i >= 0 ? i : pathLength; + i = baseUrl.lastIndexOf('?', pathLength); + pathLength = i >= 0 ? i : pathLength; + var prefixLength = baseUrl.lastIndexOf('/', pathLength); + return baseUrl.substring(0, prefixLength + 1) + url; + } +} + +// Validates if URL is safe and allowed, e.g. to avoid XSS. +function isValidUrl(url, allowRelative) { + if (!url) { + return false; + } + // RFC 3986 (http://tools.ietf.org/html/rfc3986#section-3.1) + // scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." ) + var protocol = /^[a-z][a-z0-9+\-.]*(?=:)/i.exec(url); + if (!protocol) { + return allowRelative; + } + protocol = protocol[0].toLowerCase(); + switch (protocol) { + case 'http': + case 'https': + case 'ftp': + case 'mailto': + case 'tel': + return true; + default: + return false; + } +} +PDFJS.isValidUrl = isValidUrl; + +function shadow(obj, prop, value) { + Object.defineProperty(obj, prop, { value: value, + enumerable: true, + configurable: true, + writable: false }); + return value; +} +PDFJS.shadow = shadow; + +var PasswordResponses = PDFJS.PasswordResponses = { + NEED_PASSWORD: 1, + INCORRECT_PASSWORD: 2 +}; + +var PasswordException = (function PasswordExceptionClosure() { + function PasswordException(msg, code) { + this.name = 'PasswordException'; + this.message = msg; + this.code = code; + } + + PasswordException.prototype = new Error(); + PasswordException.constructor = PasswordException; + + return PasswordException; +})(); +PDFJS.PasswordException = PasswordException; + +var UnknownErrorException = (function UnknownErrorExceptionClosure() { + function UnknownErrorException(msg, details) { + this.name = 'UnknownErrorException'; + this.message = msg; + this.details = details; + } + + UnknownErrorException.prototype = new Error(); + UnknownErrorException.constructor = UnknownErrorException; + + return UnknownErrorException; +})(); +PDFJS.UnknownErrorException = UnknownErrorException; + +var InvalidPDFException = (function InvalidPDFExceptionClosure() { + function InvalidPDFException(msg) { + this.name = 'InvalidPDFException'; + this.message = msg; + } + + InvalidPDFException.prototype = new Error(); + InvalidPDFException.constructor = InvalidPDFException; + + return InvalidPDFException; +})(); +PDFJS.InvalidPDFException = InvalidPDFException; + +var MissingPDFException = (function MissingPDFExceptionClosure() { + function MissingPDFException(msg) { + this.name = 'MissingPDFException'; + this.message = msg; + } + + MissingPDFException.prototype = new Error(); + MissingPDFException.constructor = MissingPDFException; + + return MissingPDFException; +})(); +PDFJS.MissingPDFException = MissingPDFException; + +var UnexpectedResponseException = + (function UnexpectedResponseExceptionClosure() { + function UnexpectedResponseException(msg, status) { + this.name = 'UnexpectedResponseException'; + this.message = msg; + this.status = status; + } + + UnexpectedResponseException.prototype = new Error(); + UnexpectedResponseException.constructor = UnexpectedResponseException; + + return UnexpectedResponseException; +})(); +PDFJS.UnexpectedResponseException = UnexpectedResponseException; + +var NotImplementedException = (function NotImplementedExceptionClosure() { + function NotImplementedException(msg) { + this.message = msg; + } + + NotImplementedException.prototype = new Error(); + NotImplementedException.prototype.name = 'NotImplementedException'; + NotImplementedException.constructor = NotImplementedException; + + return NotImplementedException; +})(); + +var MissingDataException = (function MissingDataExceptionClosure() { + function MissingDataException(begin, end) { + this.begin = begin; + this.end = end; + this.message = 'Missing data [' + begin + ', ' + end + ')'; + } + + MissingDataException.prototype = new Error(); + MissingDataException.prototype.name = 'MissingDataException'; + MissingDataException.constructor = MissingDataException; + + return MissingDataException; +})(); + +var XRefParseException = (function XRefParseExceptionClosure() { + function XRefParseException(msg) { + this.message = msg; + } + + XRefParseException.prototype = new Error(); + XRefParseException.prototype.name = 'XRefParseException'; + XRefParseException.constructor = XRefParseException; + + return XRefParseException; +})(); + + +function bytesToString(bytes) { + assert(bytes !== null && typeof bytes === 'object' && + bytes.length !== undefined, 'Invalid argument for bytesToString'); + var length = bytes.length; + var MAX_ARGUMENT_COUNT = 8192; + if (length < MAX_ARGUMENT_COUNT) { + return String.fromCharCode.apply(null, bytes); + } + var strBuf = []; + for (var i = 0; i < length; i += MAX_ARGUMENT_COUNT) { + var chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length); + var chunk = bytes.subarray(i, chunkEnd); + strBuf.push(String.fromCharCode.apply(null, chunk)); + } + return strBuf.join(''); +} + +function stringToBytes(str) { + assert(typeof str === 'string', 'Invalid argument for stringToBytes'); + var length = str.length; + var bytes = new Uint8Array(length); + for (var i = 0; i < length; ++i) { + bytes[i] = str.charCodeAt(i) & 0xFF; + } + return bytes; +} + +function string32(value) { + return String.fromCharCode((value >> 24) & 0xff, (value >> 16) & 0xff, + (value >> 8) & 0xff, value & 0xff); +} + +function log2(x) { + var n = 1, i = 0; + while (x > n) { + n <<= 1; + i++; + } + return i; +} + +function readInt8(data, start) { + return (data[start] << 24) >> 24; +} + +function readUint16(data, offset) { + return (data[offset] << 8) | data[offset + 1]; +} + +function readUint32(data, offset) { + return ((data[offset] << 24) | (data[offset + 1] << 16) | + (data[offset + 2] << 8) | data[offset + 3]) >>> 0; +} + +// Lazy test the endianness of the platform +// NOTE: This will be 'true' for simulated TypedArrays +function isLittleEndian() { + var buffer8 = new Uint8Array(2); + buffer8[0] = 1; + var buffer16 = new Uint16Array(buffer8.buffer); + return (buffer16[0] === 1); +} + +Object.defineProperty(PDFJS, 'isLittleEndian', { + configurable: true, + get: function PDFJS_isLittleEndian() { + return shadow(PDFJS, 'isLittleEndian', isLittleEndian()); + } +}); + +//#if !(FIREFOX || MOZCENTRAL || B2G || CHROME) +//// Lazy test if the userAgant support CanvasTypedArrays +function hasCanvasTypedArrays() { + var canvas = document.createElement('canvas'); + canvas.width = canvas.height = 1; + var ctx = canvas.getContext('2d'); + var imageData = ctx.createImageData(1, 1); + return (typeof imageData.data.buffer !== 'undefined'); +} + +Object.defineProperty(PDFJS, 'hasCanvasTypedArrays', { + configurable: true, + get: function PDFJS_hasCanvasTypedArrays() { + return shadow(PDFJS, 'hasCanvasTypedArrays', hasCanvasTypedArrays()); + } +}); + +var Uint32ArrayView = (function Uint32ArrayViewClosure() { + + function Uint32ArrayView(buffer, length) { + this.buffer = buffer; + this.byteLength = buffer.length; + this.length = length === undefined ? (this.byteLength >> 2) : length; + ensureUint32ArrayViewProps(this.length); + } + Uint32ArrayView.prototype = Object.create(null); + + var uint32ArrayViewSetters = 0; + function createUint32ArrayProp(index) { + return { + get: function () { + var buffer = this.buffer, offset = index << 2; + return (buffer[offset] | (buffer[offset + 1] << 8) | + (buffer[offset + 2] << 16) | (buffer[offset + 3] << 24)) >>> 0; + }, + set: function (value) { + var buffer = this.buffer, offset = index << 2; + buffer[offset] = value & 255; + buffer[offset + 1] = (value >> 8) & 255; + buffer[offset + 2] = (value >> 16) & 255; + buffer[offset + 3] = (value >>> 24) & 255; + } + }; + } + + function ensureUint32ArrayViewProps(length) { + while (uint32ArrayViewSetters < length) { + Object.defineProperty(Uint32ArrayView.prototype, + uint32ArrayViewSetters, + createUint32ArrayProp(uint32ArrayViewSetters)); + uint32ArrayViewSetters++; + } + } + + return Uint32ArrayView; +})(); +//#else +//PDFJS.hasCanvasTypedArrays = true; +//#endif + +var IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0]; + +var Util = PDFJS.Util = (function UtilClosure() { + function Util() {} + + var rgbBuf = ['rgb(', 0, ',', 0, ',', 0, ')']; + + // makeCssRgb() can be called thousands of times. Using |rgbBuf| avoids + // creating many intermediate strings. + Util.makeCssRgb = function Util_makeCssRgb(r, g, b) { + rgbBuf[1] = r; + rgbBuf[3] = g; + rgbBuf[5] = b; + return rgbBuf.join(''); + }; + + // Concatenates two transformation matrices together and returns the result. + Util.transform = function Util_transform(m1, m2) { + return [ + m1[0] * m2[0] + m1[2] * m2[1], + m1[1] * m2[0] + m1[3] * m2[1], + m1[0] * m2[2] + m1[2] * m2[3], + m1[1] * m2[2] + m1[3] * m2[3], + m1[0] * m2[4] + m1[2] * m2[5] + m1[4], + m1[1] * m2[4] + m1[3] * m2[5] + m1[5] + ]; + }; + + // For 2d affine transforms + Util.applyTransform = function Util_applyTransform(p, m) { + var xt = p[0] * m[0] + p[1] * m[2] + m[4]; + var yt = p[0] * m[1] + p[1] * m[3] + m[5]; + return [xt, yt]; + }; + + Util.applyInverseTransform = function Util_applyInverseTransform(p, m) { + var d = m[0] * m[3] - m[1] * m[2]; + var xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d; + var yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d; + return [xt, yt]; + }; + + // Applies the transform to the rectangle and finds the minimum axially + // aligned bounding box. + Util.getAxialAlignedBoundingBox = + function Util_getAxialAlignedBoundingBox(r, m) { + + var p1 = Util.applyTransform(r, m); + var p2 = Util.applyTransform(r.slice(2, 4), m); + var p3 = Util.applyTransform([r[0], r[3]], m); + var p4 = Util.applyTransform([r[2], r[1]], m); + return [ + Math.min(p1[0], p2[0], p3[0], p4[0]), + Math.min(p1[1], p2[1], p3[1], p4[1]), + Math.max(p1[0], p2[0], p3[0], p4[0]), + Math.max(p1[1], p2[1], p3[1], p4[1]) + ]; + }; + + Util.inverseTransform = function Util_inverseTransform(m) { + var d = m[0] * m[3] - m[1] * m[2]; + return [m[3] / d, -m[1] / d, -m[2] / d, m[0] / d, + (m[2] * m[5] - m[4] * m[3]) / d, (m[4] * m[1] - m[5] * m[0]) / d]; + }; + + // Apply a generic 3d matrix M on a 3-vector v: + // | a b c | | X | + // | d e f | x | Y | + // | g h i | | Z | + // M is assumed to be serialized as [a,b,c,d,e,f,g,h,i], + // with v as [X,Y,Z] + Util.apply3dTransform = function Util_apply3dTransform(m, v) { + return [ + m[0] * v[0] + m[1] * v[1] + m[2] * v[2], + m[3] * v[0] + m[4] * v[1] + m[5] * v[2], + m[6] * v[0] + m[7] * v[1] + m[8] * v[2] + ]; + }; + + // This calculation uses Singular Value Decomposition. + // The SVD can be represented with formula A = USV. We are interested in the + // matrix S here because it represents the scale values. + Util.singularValueDecompose2dScale = + function Util_singularValueDecompose2dScale(m) { + + var transpose = [m[0], m[2], m[1], m[3]]; + + // Multiply matrix m with its transpose. + var a = m[0] * transpose[0] + m[1] * transpose[2]; + var b = m[0] * transpose[1] + m[1] * transpose[3]; + var c = m[2] * transpose[0] + m[3] * transpose[2]; + var d = m[2] * transpose[1] + m[3] * transpose[3]; + + // Solve the second degree polynomial to get roots. + var first = (a + d) / 2; + var second = Math.sqrt((a + d) * (a + d) - 4 * (a * d - c * b)) / 2; + var sx = first + second || 1; + var sy = first - second || 1; + + // Scale values are the square roots of the eigenvalues. + return [Math.sqrt(sx), Math.sqrt(sy)]; + }; + + // Normalize rectangle rect=[x1, y1, x2, y2] so that (x1,y1) < (x2,y2) + // For coordinate systems whose origin lies in the bottom-left, this + // means normalization to (BL,TR) ordering. For systems with origin in the + // top-left, this means (TL,BR) ordering. + Util.normalizeRect = function Util_normalizeRect(rect) { + var r = rect.slice(0); // clone rect + if (rect[0] > rect[2]) { + r[0] = rect[2]; + r[2] = rect[0]; + } + if (rect[1] > rect[3]) { + r[1] = rect[3]; + r[3] = rect[1]; + } + return r; + }; + + // Returns a rectangle [x1, y1, x2, y2] corresponding to the + // intersection of rect1 and rect2. If no intersection, returns 'false' + // The rectangle coordinates of rect1, rect2 should be [x1, y1, x2, y2] + Util.intersect = function Util_intersect(rect1, rect2) { + function compare(a, b) { + return a - b; + } + + // Order points along the axes + var orderedX = [rect1[0], rect1[2], rect2[0], rect2[2]].sort(compare), + orderedY = [rect1[1], rect1[3], rect2[1], rect2[3]].sort(compare), + result = []; + + rect1 = Util.normalizeRect(rect1); + rect2 = Util.normalizeRect(rect2); + + // X: first and second points belong to different rectangles? + if ((orderedX[0] === rect1[0] && orderedX[1] === rect2[0]) || + (orderedX[0] === rect2[0] && orderedX[1] === rect1[0])) { + // Intersection must be between second and third points + result[0] = orderedX[1]; + result[2] = orderedX[2]; + } else { + return false; + } + + // Y: first and second points belong to different rectangles? + if ((orderedY[0] === rect1[1] && orderedY[1] === rect2[1]) || + (orderedY[0] === rect2[1] && orderedY[1] === rect1[1])) { + // Intersection must be between second and third points + result[1] = orderedY[1]; + result[3] = orderedY[2]; + } else { + return false; + } + + return result; + }; + + Util.sign = function Util_sign(num) { + return num < 0 ? -1 : 1; + }; + + Util.appendToArray = function Util_appendToArray(arr1, arr2) { + Array.prototype.push.apply(arr1, arr2); + }; + + Util.prependToArray = function Util_prependToArray(arr1, arr2) { + Array.prototype.unshift.apply(arr1, arr2); + }; + + Util.extendObj = function extendObj(obj1, obj2) { + for (var key in obj2) { + obj1[key] = obj2[key]; + } + }; + + Util.getInheritableProperty = function Util_getInheritableProperty(dict, + name) { + while (dict && !dict.has(name)) { + dict = dict.get('Parent'); + } + if (!dict) { + return null; + } + return dict.get(name); + }; + + Util.inherit = function Util_inherit(sub, base, prototype) { + sub.prototype = Object.create(base.prototype); + sub.prototype.constructor = sub; + for (var prop in prototype) { + sub.prototype[prop] = prototype[prop]; + } + }; + + Util.loadScript = function Util_loadScript(src, callback) { + var script = document.createElement('script'); + var loaded = false; + script.setAttribute('src', src); + if (callback) { + script.onload = function() { + if (!loaded) { + callback(); + } + loaded = true; + }; + } + document.getElementsByTagName('head')[0].appendChild(script); + }; + + return Util; +})(); + +/** + * PDF page viewport created based on scale, rotation and offset. + * @class + * @alias PDFJS.PageViewport + */ +var PageViewport = PDFJS.PageViewport = (function PageViewportClosure() { + /** + * @constructor + * @private + * @param viewBox {Array} xMin, yMin, xMax and yMax coordinates. + * @param scale {number} scale of the viewport. + * @param rotation {number} rotations of the viewport in degrees. + * @param offsetX {number} offset X + * @param offsetY {number} offset Y + * @param dontFlip {boolean} if true, axis Y will not be flipped. + */ + function PageViewport(viewBox, scale, rotation, offsetX, offsetY, dontFlip) { + this.viewBox = viewBox; + this.scale = scale; + this.rotation = rotation; + this.offsetX = offsetX; + this.offsetY = offsetY; + + // creating transform to convert pdf coordinate system to the normal + // canvas like coordinates taking in account scale and rotation + var centerX = (viewBox[2] + viewBox[0]) / 2; + var centerY = (viewBox[3] + viewBox[1]) / 2; + var rotateA, rotateB, rotateC, rotateD; + rotation = rotation % 360; + rotation = rotation < 0 ? rotation + 360 : rotation; + switch (rotation) { + case 180: + rotateA = -1; rotateB = 0; rotateC = 0; rotateD = 1; + break; + case 90: + rotateA = 0; rotateB = 1; rotateC = 1; rotateD = 0; + break; + case 270: + rotateA = 0; rotateB = -1; rotateC = -1; rotateD = 0; + break; + //case 0: + default: + rotateA = 1; rotateB = 0; rotateC = 0; rotateD = -1; + break; + } + + if (dontFlip) { + rotateC = -rotateC; rotateD = -rotateD; + } + + var offsetCanvasX, offsetCanvasY; + var width, height; + if (rotateA === 0) { + offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX; + offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY; + width = Math.abs(viewBox[3] - viewBox[1]) * scale; + height = Math.abs(viewBox[2] - viewBox[0]) * scale; + } else { + offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX; + offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY; + width = Math.abs(viewBox[2] - viewBox[0]) * scale; + height = Math.abs(viewBox[3] - viewBox[1]) * scale; + } + // creating transform for the following operations: + // translate(-centerX, -centerY), rotate and flip vertically, + // scale, and translate(offsetCanvasX, offsetCanvasY) + this.transform = [ + rotateA * scale, + rotateB * scale, + rotateC * scale, + rotateD * scale, + offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY, + offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY + ]; + + this.width = width; + this.height = height; + this.fontScale = scale; + } + PageViewport.prototype = /** @lends PDFJS.PageViewport.prototype */ { + /** + * Clones viewport with additional properties. + * @param args {Object} (optional) If specified, may contain the 'scale' or + * 'rotation' properties to override the corresponding properties in + * the cloned viewport. + * @returns {PDFJS.PageViewport} Cloned viewport. + */ + clone: function PageViewPort_clone(args) { + args = args || {}; + var scale = 'scale' in args ? args.scale : this.scale; + var rotation = 'rotation' in args ? args.rotation : this.rotation; + return new PageViewport(this.viewBox.slice(), scale, rotation, + this.offsetX, this.offsetY, args.dontFlip); + }, + /** + * Converts PDF point to the viewport coordinates. For examples, useful for + * converting PDF location into canvas pixel coordinates. + * @param x {number} X coordinate. + * @param y {number} Y coordinate. + * @returns {Object} Object that contains 'x' and 'y' properties of the + * point in the viewport coordinate space. + * @see {@link convertToPdfPoint} + * @see {@link convertToViewportRectangle} + */ + convertToViewportPoint: function PageViewport_convertToViewportPoint(x, y) { + return Util.applyTransform([x, y], this.transform); + }, + /** + * Converts PDF rectangle to the viewport coordinates. + * @param rect {Array} xMin, yMin, xMax and yMax coordinates. + * @returns {Array} Contains corresponding coordinates of the rectangle + * in the viewport coordinate space. + * @see {@link convertToViewportPoint} + */ + convertToViewportRectangle: + function PageViewport_convertToViewportRectangle(rect) { + var tl = Util.applyTransform([rect[0], rect[1]], this.transform); + var br = Util.applyTransform([rect[2], rect[3]], this.transform); + return [tl[0], tl[1], br[0], br[1]]; + }, + /** + * Converts viewport coordinates to the PDF location. For examples, useful + * for converting canvas pixel location into PDF one. + * @param x {number} X coordinate. + * @param y {number} Y coordinate. + * @returns {Object} Object that contains 'x' and 'y' properties of the + * point in the PDF coordinate space. + * @see {@link convertToViewportPoint} + */ + convertToPdfPoint: function PageViewport_convertToPdfPoint(x, y) { + return Util.applyInverseTransform([x, y], this.transform); + } + }; + return PageViewport; +})(); + +var PDFStringTranslateTable = [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x2D8, 0x2C7, 0x2C6, 0x2D9, 0x2DD, 0x2DB, 0x2DA, 0x2DC, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014, + 0x2013, 0x192, 0x2044, 0x2039, 0x203A, 0x2212, 0x2030, 0x201E, 0x201C, + 0x201D, 0x2018, 0x2019, 0x201A, 0x2122, 0xFB01, 0xFB02, 0x141, 0x152, 0x160, + 0x178, 0x17D, 0x131, 0x142, 0x153, 0x161, 0x17E, 0, 0x20AC +]; + +function stringToPDFString(str) { + var i, n = str.length, strBuf = []; + if (str[0] === '\xFE' && str[1] === '\xFF') { + // UTF16BE BOM + for (i = 2; i < n; i += 2) { + strBuf.push(String.fromCharCode( + (str.charCodeAt(i) << 8) | str.charCodeAt(i + 1))); + } + } else { + for (i = 0; i < n; ++i) { + var code = PDFStringTranslateTable[str.charCodeAt(i)]; + strBuf.push(code ? String.fromCharCode(code) : str.charAt(i)); + } + } + return strBuf.join(''); +} + +function stringToUTF8String(str) { + return decodeURIComponent(escape(str)); +} + +function isEmptyObj(obj) { + for (var key in obj) { + return false; + } + return true; +} + +function isBool(v) { + return typeof v === 'boolean'; +} + +function isInt(v) { + return typeof v === 'number' && ((v | 0) === v); +} + +function isNum(v) { + return typeof v === 'number'; +} + +function isString(v) { + return typeof v === 'string'; +} + +function isName(v) { + return v instanceof Name; +} + +function isCmd(v, cmd) { + return v instanceof Cmd && (cmd === undefined || v.cmd === cmd); +} + +function isDict(v, type) { + if (!(v instanceof Dict)) { + return false; + } + if (!type) { + return true; + } + var dictType = v.get('Type'); + return isName(dictType) && dictType.name === type; +} + +function isArray(v) { + return v instanceof Array; +} + +function isStream(v) { + return typeof v === 'object' && v !== null && v.getBytes !== undefined; +} + +function isArrayBuffer(v) { + return typeof v === 'object' && v !== null && v.byteLength !== undefined; +} + +function isRef(v) { + return v instanceof Ref; +} + +/** + * Promise Capability object. + * + * @typedef {Object} PromiseCapability + * @property {Promise} promise - A promise object. + * @property {function} resolve - Fullfills the promise. + * @property {function} reject - Rejects the promise. + */ + +/** + * Creates a promise capability object. + * @alias PDFJS.createPromiseCapability + * + * @return {PromiseCapability} A capability object contains: + * - a Promise, resolve and reject methods. + */ +function createPromiseCapability() { + var capability = {}; + capability.promise = new Promise(function (resolve, reject) { + capability.resolve = resolve; + capability.reject = reject; + }); + return capability; +} + +PDFJS.createPromiseCapability = createPromiseCapability; + +/** + * Polyfill for Promises: + * The following promise implementation tries to generally implement the + * Promise/A+ spec. Some notable differences from other promise libaries are: + * - There currently isn't a seperate deferred and promise object. + * - Unhandled rejections eventually show an error if they aren't handled. + * + * Based off of the work in: + * https://bugzilla.mozilla.org/show_bug.cgi?id=810490 + */ +(function PromiseClosure() { + if (globalScope.Promise) { + // Promises existing in the DOM/Worker, checking presence of all/resolve + if (typeof globalScope.Promise.all !== 'function') { + globalScope.Promise.all = function (iterable) { + var count = 0, results = [], resolve, reject; + var promise = new globalScope.Promise(function (resolve_, reject_) { + resolve = resolve_; + reject = reject_; + }); + iterable.forEach(function (p, i) { + count++; + p.then(function (result) { + results[i] = result; + count--; + if (count === 0) { + resolve(results); + } + }, reject); + }); + if (count === 0) { + resolve(results); + } + return promise; + }; + } + if (typeof globalScope.Promise.resolve !== 'function') { + globalScope.Promise.resolve = function (value) { + return new globalScope.Promise(function (resolve) { resolve(value); }); + }; + } + if (typeof globalScope.Promise.reject !== 'function') { + globalScope.Promise.reject = function (reason) { + return new globalScope.Promise(function (resolve, reject) { + reject(reason); + }); + }; + } + if (typeof globalScope.Promise.prototype.catch !== 'function') { + globalScope.Promise.prototype.catch = function (onReject) { + return globalScope.Promise.prototype.then(undefined, onReject); + }; + } + return; + } +//#if !MOZCENTRAL + var STATUS_PENDING = 0; + var STATUS_RESOLVED = 1; + var STATUS_REJECTED = 2; + + // In an attempt to avoid silent exceptions, unhandled rejections are + // tracked and if they aren't handled in a certain amount of time an + // error is logged. + var REJECTION_TIMEOUT = 500; + + var HandlerManager = { + handlers: [], + running: false, + unhandledRejections: [], + pendingRejectionCheck: false, + + scheduleHandlers: function scheduleHandlers(promise) { + if (promise._status === STATUS_PENDING) { + return; + } + + this.handlers = this.handlers.concat(promise._handlers); + promise._handlers = []; + + if (this.running) { + return; + } + this.running = true; + + setTimeout(this.runHandlers.bind(this), 0); + }, + + runHandlers: function runHandlers() { + var RUN_TIMEOUT = 1; // ms + var timeoutAt = Date.now() + RUN_TIMEOUT; + while (this.handlers.length > 0) { + var handler = this.handlers.shift(); + + var nextStatus = handler.thisPromise._status; + var nextValue = handler.thisPromise._value; + + try { + if (nextStatus === STATUS_RESOLVED) { + if (typeof handler.onResolve === 'function') { + nextValue = handler.onResolve(nextValue); + } + } else if (typeof handler.onReject === 'function') { + nextValue = handler.onReject(nextValue); + nextStatus = STATUS_RESOLVED; + + if (handler.thisPromise._unhandledRejection) { + this.removeUnhandeledRejection(handler.thisPromise); + } + } + } catch (ex) { + nextStatus = STATUS_REJECTED; + nextValue = ex; + } + + handler.nextPromise._updateStatus(nextStatus, nextValue); + if (Date.now() >= timeoutAt) { + break; + } + } + + if (this.handlers.length > 0) { + setTimeout(this.runHandlers.bind(this), 0); + return; + } + + this.running = false; + }, + + addUnhandledRejection: function addUnhandledRejection(promise) { + this.unhandledRejections.push({ + promise: promise, + time: Date.now() + }); + this.scheduleRejectionCheck(); + }, + + removeUnhandeledRejection: function removeUnhandeledRejection(promise) { + promise._unhandledRejection = false; + for (var i = 0; i < this.unhandledRejections.length; i++) { + if (this.unhandledRejections[i].promise === promise) { + this.unhandledRejections.splice(i); + i--; + } + } + }, + + scheduleRejectionCheck: function scheduleRejectionCheck() { + if (this.pendingRejectionCheck) { + return; + } + this.pendingRejectionCheck = true; + setTimeout(function rejectionCheck() { + this.pendingRejectionCheck = false; + var now = Date.now(); + for (var i = 0; i < this.unhandledRejections.length; i++) { + if (now - this.unhandledRejections[i].time > REJECTION_TIMEOUT) { + var unhandled = this.unhandledRejections[i].promise._value; + var msg = 'Unhandled rejection: ' + unhandled; + if (unhandled.stack) { + msg += '\n' + unhandled.stack; + } + warn(msg); + this.unhandledRejections.splice(i); + i--; + } + } + if (this.unhandledRejections.length) { + this.scheduleRejectionCheck(); + } + }.bind(this), REJECTION_TIMEOUT); + } + }; + + function Promise(resolver) { + this._status = STATUS_PENDING; + this._handlers = []; + try { + resolver.call(this, this._resolve.bind(this), this._reject.bind(this)); + } catch (e) { + this._reject(e); + } + } + /** + * Builds a promise that is resolved when all the passed in promises are + * resolved. + * @param {array} array of data and/or promises to wait for. + * @return {Promise} New dependant promise. + */ + Promise.all = function Promise_all(promises) { + var resolveAll, rejectAll; + var deferred = new Promise(function (resolve, reject) { + resolveAll = resolve; + rejectAll = reject; + }); + var unresolved = promises.length; + var results = []; + if (unresolved === 0) { + resolveAll(results); + return deferred; + } + function reject(reason) { + if (deferred._status === STATUS_REJECTED) { + return; + } + results = []; + rejectAll(reason); + } + for (var i = 0, ii = promises.length; i < ii; ++i) { + var promise = promises[i]; + var resolve = (function(i) { + return function(value) { + if (deferred._status === STATUS_REJECTED) { + return; + } + results[i] = value; + unresolved--; + if (unresolved === 0) { + resolveAll(results); + } + }; + })(i); + if (Promise.isPromise(promise)) { + promise.then(resolve, reject); + } else { + resolve(promise); + } + } + return deferred; + }; + + /** + * Checks if the value is likely a promise (has a 'then' function). + * @return {boolean} true if value is thenable + */ + Promise.isPromise = function Promise_isPromise(value) { + return value && typeof value.then === 'function'; + }; + + /** + * Creates resolved promise + * @param value resolve value + * @returns {Promise} + */ + Promise.resolve = function Promise_resolve(value) { + return new Promise(function (resolve) { resolve(value); }); + }; + + /** + * Creates rejected promise + * @param reason rejection value + * @returns {Promise} + */ + Promise.reject = function Promise_reject(reason) { + return new Promise(function (resolve, reject) { reject(reason); }); + }; + + Promise.prototype = { + _status: null, + _value: null, + _handlers: null, + _unhandledRejection: null, + + _updateStatus: function Promise__updateStatus(status, value) { + if (this._status === STATUS_RESOLVED || + this._status === STATUS_REJECTED) { + return; + } + + if (status === STATUS_RESOLVED && + Promise.isPromise(value)) { + value.then(this._updateStatus.bind(this, STATUS_RESOLVED), + this._updateStatus.bind(this, STATUS_REJECTED)); + return; + } + + this._status = status; + this._value = value; + + if (status === STATUS_REJECTED && this._handlers.length === 0) { + this._unhandledRejection = true; + HandlerManager.addUnhandledRejection(this); + } + + HandlerManager.scheduleHandlers(this); + }, + + _resolve: function Promise_resolve(value) { + this._updateStatus(STATUS_RESOLVED, value); + }, + + _reject: function Promise_reject(reason) { + this._updateStatus(STATUS_REJECTED, reason); + }, + + then: function Promise_then(onResolve, onReject) { + var nextPromise = new Promise(function (resolve, reject) { + this.resolve = resolve; + this.reject = reject; + }); + this._handlers.push({ + thisPromise: this, + onResolve: onResolve, + onReject: onReject, + nextPromise: nextPromise + }); + HandlerManager.scheduleHandlers(this); + return nextPromise; + }, + + catch: function Promise_catch(onReject) { + return this.then(undefined, onReject); + } + }; + + globalScope.Promise = Promise; +//#else +//throw new Error('DOM Promise is not present'); +//#endif +})(); + +var StatTimer = (function StatTimerClosure() { + function rpad(str, pad, length) { + while (str.length < length) { + str += pad; + } + return str; + } + function StatTimer() { + this.started = {}; + this.times = []; + this.enabled = true; + } + StatTimer.prototype = { + time: function StatTimer_time(name) { + if (!this.enabled) { + return; + } + if (name in this.started) { + warn('Timer is already running for ' + name); + } + this.started[name] = Date.now(); + }, + timeEnd: function StatTimer_timeEnd(name) { + if (!this.enabled) { + return; + } + if (!(name in this.started)) { + warn('Timer has not been started for ' + name); + } + this.times.push({ + 'name': name, + 'start': this.started[name], + 'end': Date.now() + }); + // Remove timer from started so it can be called again. + delete this.started[name]; + }, + toString: function StatTimer_toString() { + var i, ii; + var times = this.times; + var out = ''; + // Find the longest name for padding purposes. + var longest = 0; + for (i = 0, ii = times.length; i < ii; ++i) { + var name = times[i]['name']; + if (name.length > longest) { + longest = name.length; + } + } + for (i = 0, ii = times.length; i < ii; ++i) { + var span = times[i]; + var duration = span.end - span.start; + out += rpad(span['name'], ' ', longest) + ' ' + duration + 'ms\n'; + } + return out; + } + }; + return StatTimer; +})(); + +PDFJS.createBlob = function createBlob(data, contentType) { + if (typeof Blob !== 'undefined') { + return new Blob([data], { type: contentType }); + } + // Blob builder is deprecated in FF14 and removed in FF18. + var bb = new MozBlobBuilder(); + bb.append(data); + return bb.getBlob(contentType); +}; + +PDFJS.createObjectURL = (function createObjectURLClosure() { + // Blob/createObjectURL is not available, falling back to data schema. + var digits = + 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; + + return function createObjectURL(data, contentType) { + if (!PDFJS.disableCreateObjectURL && + typeof URL !== 'undefined' && URL.createObjectURL) { + var blob = PDFJS.createBlob(data, contentType); + return URL.createObjectURL(blob); + } + + var buffer = 'data:' + contentType + ';base64,'; + for (var i = 0, ii = data.length; i < ii; i += 3) { + var b1 = data[i] & 0xFF; + var b2 = data[i + 1] & 0xFF; + var b3 = data[i + 2] & 0xFF; + var d1 = b1 >> 2, d2 = ((b1 & 3) << 4) | (b2 >> 4); + var d3 = i + 1 < ii ? ((b2 & 0xF) << 2) | (b3 >> 6) : 64; + var d4 = i + 2 < ii ? (b3 & 0x3F) : 64; + buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4]; + } + return buffer; + }; +})(); + +function MessageHandler(name, comObj) { + this.name = name; + this.comObj = comObj; + this.callbackIndex = 1; + this.postMessageTransfers = true; + var callbacksCapabilities = this.callbacksCapabilities = {}; + var ah = this.actionHandler = {}; + + ah['console_log'] = [function ahConsoleLog(data) { + console.log.apply(console, data); + }]; + ah['console_error'] = [function ahConsoleError(data) { + console.error.apply(console, data); + }]; + ah['_unsupported_feature'] = [function ah_unsupportedFeature(data) { + UnsupportedManager.notify(data); + }]; + + comObj.onmessage = function messageHandlerComObjOnMessage(event) { + var data = event.data; + if (data.isReply) { + var callbackId = data.callbackId; + if (data.callbackId in callbacksCapabilities) { + var callback = callbacksCapabilities[callbackId]; + delete callbacksCapabilities[callbackId]; + if ('error' in data) { + callback.reject(data.error); + } else { + callback.resolve(data.data); + } + } else { + error('Cannot resolve callback ' + callbackId); + } + } else if (data.action in ah) { + var action = ah[data.action]; + if (data.callbackId) { + Promise.resolve().then(function () { + return action[0].call(action[1], data.data); + }).then(function (result) { + comObj.postMessage({ + isReply: true, + callbackId: data.callbackId, + data: result + }); + }, function (reason) { + comObj.postMessage({ + isReply: true, + callbackId: data.callbackId, + error: reason + }); + }); + } else { + action[0].call(action[1], data.data); + } + } else { + error('Unknown action from worker: ' + data.action); + } + }; +} + +MessageHandler.prototype = { + on: function messageHandlerOn(actionName, handler, scope) { + var ah = this.actionHandler; + if (ah[actionName]) { + error('There is already an actionName called "' + actionName + '"'); + } + ah[actionName] = [handler, scope]; + }, + /** + * Sends a message to the comObj to invoke the action with the supplied data. + * @param {String} actionName Action to call. + * @param {JSON} data JSON data to send. + * @param {Array} [transfers] Optional list of transfers/ArrayBuffers + */ + send: function messageHandlerSend(actionName, data, transfers) { + var message = { + action: actionName, + data: data + }; + this.postMessage(message, transfers); + }, + /** + * Sends a message to the comObj to invoke the action with the supplied data. + * Expects that other side will callback with the response. + * @param {String} actionName Action to call. + * @param {JSON} data JSON data to send. + * @param {Array} [transfers] Optional list of transfers/ArrayBuffers. + * @returns {Promise} Promise to be resolved with response data. + */ + sendWithPromise: + function messageHandlerSendWithPromise(actionName, data, transfers) { + var callbackId = this.callbackIndex++; + var message = { + action: actionName, + data: data, + callbackId: callbackId + }; + var capability = createPromiseCapability(); + this.callbacksCapabilities[callbackId] = capability; + try { + this.postMessage(message, transfers); + } catch (e) { + capability.reject(e); + } + return capability.promise; + }, + /** + * Sends raw message to the comObj. + * @private + * @param message {Object} Raw message. + * @param transfers List of transfers/ArrayBuffers, or undefined. + */ + postMessage: function (message, transfers) { + if (transfers && this.postMessageTransfers) { + this.comObj.postMessage(message, transfers); + } else { + this.comObj.postMessage(message); + } + } +}; + +function loadJpegStream(id, imageUrl, objs) { + var img = new Image(); + img.onload = (function loadJpegStream_onloadClosure() { + objs.resolve(id, img); + }); + img.onerror = (function loadJpegStream_onerrorClosure() { + objs.resolve(id, null); + warn('Error during JPEG image loading'); + }); + img.src = imageUrl; +} + + + +//#if (FIREFOX || MOZCENTRAL) +// +//Components.utils.import('resource://gre/modules/Services.jsm'); +// +//var EXPORTED_SYMBOLS = ['NetworkManager']; +// +//var console = { +// log: function console_log(aMsg) { +// var msg = 'network.js: ' + (aMsg.join ? aMsg.join('') : aMsg); +// Services.console.logStringMessage(msg); +// // TODO(mack): dump() doesn't seem to work here... +// dump(msg + '\n'); +// } +//} +//#endif + +var NetworkManager = (function NetworkManagerClosure() { + + var OK_RESPONSE = 200; + var PARTIAL_CONTENT_RESPONSE = 206; + + function NetworkManager(url, args) { + this.url = url; + args = args || {}; + this.isHttp = /^https?:/i.test(url); + this.httpHeaders = (this.isHttp && args.httpHeaders) || {}; + this.withCredentials = args.withCredentials || false; + this.getXhr = args.getXhr || + function NetworkManager_getXhr() { +//#if B2G +// return new XMLHttpRequest({ mozSystem: true }); +//#else + return new XMLHttpRequest(); +//#endif + }; + + this.currXhrId = 0; + this.pendingRequests = {}; + this.loadedRequests = {}; + } + + function getArrayBuffer(xhr) { + var data = xhr.response; + if (typeof data !== 'string') { + return data; + } + var length = data.length; + var array = new Uint8Array(length); + for (var i = 0; i < length; i++) { + array[i] = data.charCodeAt(i) & 0xFF; + } + return array.buffer; + } + + NetworkManager.prototype = { + requestRange: function NetworkManager_requestRange(begin, end, listeners) { + var args = { + begin: begin, + end: end + }; + for (var prop in listeners) { + args[prop] = listeners[prop]; + } + return this.request(args); + }, + + requestFull: function NetworkManager_requestFull(listeners) { + return this.request(listeners); + }, + + request: function NetworkManager_request(args) { + var xhr = this.getXhr(); + var xhrId = this.currXhrId++; + var pendingRequest = this.pendingRequests[xhrId] = { + xhr: xhr + }; + + xhr.open('GET', this.url); + xhr.withCredentials = this.withCredentials; + for (var property in this.httpHeaders) { + var value = this.httpHeaders[property]; + if (typeof value === 'undefined') { + continue; + } + xhr.setRequestHeader(property, value); + } + if (this.isHttp && 'begin' in args && 'end' in args) { + var rangeStr = args.begin + '-' + (args.end - 1); + xhr.setRequestHeader('Range', 'bytes=' + rangeStr); + pendingRequest.expectedStatus = 206; + } else { + pendingRequest.expectedStatus = 200; + } + + if (args.onProgressiveData) { + // Some legacy browsers might throw an exception. + try { + xhr.responseType = 'moz-chunked-arraybuffer'; + } catch(e) {} + if (xhr.responseType === 'moz-chunked-arraybuffer') { + pendingRequest.onProgressiveData = args.onProgressiveData; + pendingRequest.mozChunked = true; + } else { + xhr.responseType = 'arraybuffer'; + } + } else { + xhr.responseType = 'arraybuffer'; + } + + if (args.onError) { + xhr.onerror = function(evt) { + args.onError(xhr.status); + }; + } + xhr.onreadystatechange = this.onStateChange.bind(this, xhrId); + xhr.onprogress = this.onProgress.bind(this, xhrId); + + pendingRequest.onHeadersReceived = args.onHeadersReceived; + pendingRequest.onDone = args.onDone; + pendingRequest.onError = args.onError; + pendingRequest.onProgress = args.onProgress; + + xhr.send(null); + + return xhrId; + }, + + onProgress: function NetworkManager_onProgress(xhrId, evt) { + var pendingRequest = this.pendingRequests[xhrId]; + if (!pendingRequest) { + // Maybe abortRequest was called... + return; + } + + if (pendingRequest.mozChunked) { + var chunk = getArrayBuffer(pendingRequest.xhr); + pendingRequest.onProgressiveData(chunk); + } + + var onProgress = pendingRequest.onProgress; + if (onProgress) { + onProgress(evt); + } + }, + + onStateChange: function NetworkManager_onStateChange(xhrId, evt) { + var pendingRequest = this.pendingRequests[xhrId]; + if (!pendingRequest) { + // Maybe abortRequest was called... + return; + } + + var xhr = pendingRequest.xhr; + if (xhr.readyState >= 2 && pendingRequest.onHeadersReceived) { + pendingRequest.onHeadersReceived(); + delete pendingRequest.onHeadersReceived; + } + + if (xhr.readyState !== 4) { + return; + } + + if (!(xhrId in this.pendingRequests)) { + // The XHR request might have been aborted in onHeadersReceived() + // callback, in which case we should abort request + return; + } + + delete this.pendingRequests[xhrId]; + + // success status == 0 can be on ftp, file and other protocols + if (xhr.status === 0 && this.isHttp) { + if (pendingRequest.onError) { + pendingRequest.onError(xhr.status); + } + return; + } + var xhrStatus = xhr.status || OK_RESPONSE; + + // From http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35.2: + // "A server MAY ignore the Range header". This means it's possible to + // get a 200 rather than a 206 response from a range request. + var ok_response_on_range_request = + xhrStatus === OK_RESPONSE && + pendingRequest.expectedStatus === PARTIAL_CONTENT_RESPONSE; + + if (!ok_response_on_range_request && + xhrStatus !== pendingRequest.expectedStatus) { + if (pendingRequest.onError) { + pendingRequest.onError(xhr.status); + } + return; + } + + this.loadedRequests[xhrId] = true; + + var chunk = getArrayBuffer(xhr); + if (xhrStatus === PARTIAL_CONTENT_RESPONSE) { + var rangeHeader = xhr.getResponseHeader('Content-Range'); + var matches = /bytes (\d+)-(\d+)\/(\d+)/.exec(rangeHeader); + var begin = parseInt(matches[1], 10); + pendingRequest.onDone({ + begin: begin, + chunk: chunk + }); + } else if (pendingRequest.onProgressiveData) { + pendingRequest.onDone(null); + } else { + pendingRequest.onDone({ + begin: 0, + chunk: chunk + }); + } + }, + + hasPendingRequests: function NetworkManager_hasPendingRequests() { + for (var xhrId in this.pendingRequests) { + return true; + } + return false; + }, + + getRequestXhr: function NetworkManager_getXhr(xhrId) { + return this.pendingRequests[xhrId].xhr; + }, + + isStreamingRequest: function NetworkManager_isStreamingRequest(xhrId) { + return !!(this.pendingRequests[xhrId].onProgressiveData); + }, + + isPendingRequest: function NetworkManager_isPendingRequest(xhrId) { + return xhrId in this.pendingRequests; + }, + + isLoadedRequest: function NetworkManager_isLoadedRequest(xhrId) { + return xhrId in this.loadedRequests; + }, + + abortAllRequests: function NetworkManager_abortAllRequests() { + for (var xhrId in this.pendingRequests) { + this.abortRequest(xhrId | 0); + } + }, + + abortRequest: function NetworkManager_abortRequest(xhrId) { + var xhr = this.pendingRequests[xhrId].xhr; + delete this.pendingRequests[xhrId]; + xhr.abort(); + } + }; + + return NetworkManager; +})(); + + +var ChunkedStream = (function ChunkedStreamClosure() { + function ChunkedStream(length, chunkSize, manager) { + this.bytes = new Uint8Array(length); + this.start = 0; + this.pos = 0; + this.end = length; + this.chunkSize = chunkSize; + this.loadedChunks = []; + this.numChunksLoaded = 0; + this.numChunks = Math.ceil(length / chunkSize); + this.manager = manager; + this.progressiveDataLength = 0; + this.lastSuccessfulEnsureByteChunk = -1; // a single-entry cache + } + + // required methods for a stream. if a particular stream does not + // implement these, an error should be thrown + ChunkedStream.prototype = { + + getMissingChunks: function ChunkedStream_getMissingChunks() { + var chunks = []; + for (var chunk = 0, n = this.numChunks; chunk < n; ++chunk) { + if (!this.loadedChunks[chunk]) { + chunks.push(chunk); + } + } + return chunks; + }, + + getBaseStreams: function ChunkedStream_getBaseStreams() { + return [this]; + }, + + allChunksLoaded: function ChunkedStream_allChunksLoaded() { + return this.numChunksLoaded === this.numChunks; + }, + + onReceiveData: function ChunkedStream_onReceiveData(begin, chunk) { + var end = begin + chunk.byteLength; + + assert(begin % this.chunkSize === 0, 'Bad begin offset: ' + begin); + // Using this.length is inaccurate here since this.start can be moved + // See ChunkedStream.moveStart() + var length = this.bytes.length; + assert(end % this.chunkSize === 0 || end === length, + 'Bad end offset: ' + end); + + this.bytes.set(new Uint8Array(chunk), begin); + var chunkSize = this.chunkSize; + var beginChunk = Math.floor(begin / chunkSize); + var endChunk = Math.floor((end - 1) / chunkSize) + 1; + var curChunk; + + for (curChunk = beginChunk; curChunk < endChunk; ++curChunk) { + if (!this.loadedChunks[curChunk]) { + this.loadedChunks[curChunk] = true; + ++this.numChunksLoaded; + } + } + }, + + onReceiveProgressiveData: + function ChunkedStream_onReceiveProgressiveData(data) { + var position = this.progressiveDataLength; + var beginChunk = Math.floor(position / this.chunkSize); + + this.bytes.set(new Uint8Array(data), position); + position += data.byteLength; + this.progressiveDataLength = position; + var endChunk = position >= this.end ? this.numChunks : + Math.floor(position / this.chunkSize); + var curChunk; + for (curChunk = beginChunk; curChunk < endChunk; ++curChunk) { + if (!this.loadedChunks[curChunk]) { + this.loadedChunks[curChunk] = true; + ++this.numChunksLoaded; + } + } + }, + + ensureByte: function ChunkedStream_ensureByte(pos) { + var chunk = Math.floor(pos / this.chunkSize); + if (chunk === this.lastSuccessfulEnsureByteChunk) { + return; + } + + if (!this.loadedChunks[chunk]) { + throw new MissingDataException(pos, pos + 1); + } + this.lastSuccessfulEnsureByteChunk = chunk; + }, + + ensureRange: function ChunkedStream_ensureRange(begin, end) { + if (begin >= end) { + return; + } + + if (end <= this.progressiveDataLength) { + return; + } + + var chunkSize = this.chunkSize; + var beginChunk = Math.floor(begin / chunkSize); + var endChunk = Math.floor((end - 1) / chunkSize) + 1; + for (var chunk = beginChunk; chunk < endChunk; ++chunk) { + if (!this.loadedChunks[chunk]) { + throw new MissingDataException(begin, end); + } + } + }, + + nextEmptyChunk: function ChunkedStream_nextEmptyChunk(beginChunk) { + var chunk, n; + for (chunk = beginChunk, n = this.numChunks; chunk < n; ++chunk) { + if (!this.loadedChunks[chunk]) { + return chunk; + } + } + // Wrap around to beginning + for (chunk = 0; chunk < beginChunk; ++chunk) { + if (!this.loadedChunks[chunk]) { + return chunk; + } + } + return null; + }, + + hasChunk: function ChunkedStream_hasChunk(chunk) { + return !!this.loadedChunks[chunk]; + }, + + get length() { + return this.end - this.start; + }, + + get isEmpty() { + return this.length === 0; + }, + + getByte: function ChunkedStream_getByte() { + var pos = this.pos; + if (pos >= this.end) { + return -1; + } + this.ensureByte(pos); + return this.bytes[this.pos++]; + }, + + getUint16: function ChunkedStream_getUint16() { + var b0 = this.getByte(); + var b1 = this.getByte(); + if (b0 === -1 || b1 === -1) { + return -1; + } + return (b0 << 8) + b1; + }, + + getInt32: function ChunkedStream_getInt32() { + var b0 = this.getByte(); + var b1 = this.getByte(); + var b2 = this.getByte(); + var b3 = this.getByte(); + return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3; + }, + + // returns subarray of original buffer + // should only be read + getBytes: function ChunkedStream_getBytes(length) { + var bytes = this.bytes; + var pos = this.pos; + var strEnd = this.end; + + if (!length) { + this.ensureRange(pos, strEnd); + return bytes.subarray(pos, strEnd); + } + + var end = pos + length; + if (end > strEnd) { + end = strEnd; + } + this.ensureRange(pos, end); + + this.pos = end; + return bytes.subarray(pos, end); + }, + + peekByte: function ChunkedStream_peekByte() { + var peekedByte = this.getByte(); + this.pos--; + return peekedByte; + }, + + peekBytes: function ChunkedStream_peekBytes(length) { + var bytes = this.getBytes(length); + this.pos -= bytes.length; + return bytes; + }, + + getByteRange: function ChunkedStream_getBytes(begin, end) { + this.ensureRange(begin, end); + return this.bytes.subarray(begin, end); + }, + + skip: function ChunkedStream_skip(n) { + if (!n) { + n = 1; + } + this.pos += n; + }, + + reset: function ChunkedStream_reset() { + this.pos = this.start; + }, + + moveStart: function ChunkedStream_moveStart() { + this.start = this.pos; + }, + + makeSubStream: function ChunkedStream_makeSubStream(start, length, dict) { + this.ensureRange(start, start + length); + + function ChunkedStreamSubstream() {} + ChunkedStreamSubstream.prototype = Object.create(this); + ChunkedStreamSubstream.prototype.getMissingChunks = function() { + var chunkSize = this.chunkSize; + var beginChunk = Math.floor(this.start / chunkSize); + var endChunk = Math.floor((this.end - 1) / chunkSize) + 1; + var missingChunks = []; + for (var chunk = beginChunk; chunk < endChunk; ++chunk) { + if (!this.loadedChunks[chunk]) { + missingChunks.push(chunk); + } + } + return missingChunks; + }; + var subStream = new ChunkedStreamSubstream(); + subStream.pos = subStream.start = start; + subStream.end = start + length || this.end; + subStream.dict = dict; + return subStream; + }, + + isStream: true + }; + + return ChunkedStream; +})(); + +var ChunkedStreamManager = (function ChunkedStreamManagerClosure() { + + function ChunkedStreamManager(length, chunkSize, url, args) { + this.stream = new ChunkedStream(length, chunkSize, this); + this.length = length; + this.chunkSize = chunkSize; + this.url = url; + this.disableAutoFetch = args.disableAutoFetch; + var msgHandler = this.msgHandler = args.msgHandler; + + if (args.chunkedViewerLoading) { + msgHandler.on('OnDataRange', this.onReceiveData.bind(this)); + msgHandler.on('OnDataProgress', this.onProgress.bind(this)); + this.sendRequest = function ChunkedStreamManager_sendRequest(begin, end) { + msgHandler.send('RequestDataRange', { begin: begin, end: end }); + }; + } else { + + var getXhr = function getXhr() { +//#if B2G +// return new XMLHttpRequest({ mozSystem: true }); +//#else + return new XMLHttpRequest(); +//#endif + }; + this.networkManager = new NetworkManager(this.url, { + getXhr: getXhr, + httpHeaders: args.httpHeaders, + withCredentials: args.withCredentials + }); + this.sendRequest = function ChunkedStreamManager_sendRequest(begin, end) { + this.networkManager.requestRange(begin, end, { + onDone: this.onReceiveData.bind(this), + onProgress: this.onProgress.bind(this) + }); + }; + } + + this.currRequestId = 0; + + this.chunksNeededByRequest = {}; + this.requestsByChunk = {}; + this.callbacksByRequest = {}; + this.progressiveDataLength = 0; + + this._loadedStreamCapability = createPromiseCapability(); + + if (args.initialData) { + this.onReceiveData({chunk: args.initialData}); + } + } + + ChunkedStreamManager.prototype = { + onLoadedStream: function ChunkedStreamManager_getLoadedStream() { + return this._loadedStreamCapability.promise; + }, + + // Get all the chunks that are not yet loaded and groups them into + // contiguous ranges to load in as few requests as possible + requestAllChunks: function ChunkedStreamManager_requestAllChunks() { + var missingChunks = this.stream.getMissingChunks(); + this.requestChunks(missingChunks); + return this._loadedStreamCapability.promise; + }, + + requestChunks: function ChunkedStreamManager_requestChunks(chunks, + callback) { + var requestId = this.currRequestId++; + + var chunksNeeded; + var i, ii; + this.chunksNeededByRequest[requestId] = chunksNeeded = {}; + for (i = 0, ii = chunks.length; i < ii; i++) { + if (!this.stream.hasChunk(chunks[i])) { + chunksNeeded[chunks[i]] = true; + } + } + + if (isEmptyObj(chunksNeeded)) { + if (callback) { + callback(); + } + return; + } + + this.callbacksByRequest[requestId] = callback; + + var chunksToRequest = []; + for (var chunk in chunksNeeded) { + chunk = chunk | 0; + if (!(chunk in this.requestsByChunk)) { + this.requestsByChunk[chunk] = []; + chunksToRequest.push(chunk); + } + this.requestsByChunk[chunk].push(requestId); + } + + if (!chunksToRequest.length) { + return; + } + + var groupedChunksToRequest = this.groupChunks(chunksToRequest); + + for (i = 0; i < groupedChunksToRequest.length; ++i) { + var groupedChunk = groupedChunksToRequest[i]; + var begin = groupedChunk.beginChunk * this.chunkSize; + var end = Math.min(groupedChunk.endChunk * this.chunkSize, this.length); + this.sendRequest(begin, end); + } + }, + + getStream: function ChunkedStreamManager_getStream() { + return this.stream; + }, + + // Loads any chunks in the requested range that are not yet loaded + requestRange: function ChunkedStreamManager_requestRange( + begin, end, callback) { + + end = Math.min(end, this.length); + + var beginChunk = this.getBeginChunk(begin); + var endChunk = this.getEndChunk(end); + + var chunks = []; + for (var chunk = beginChunk; chunk < endChunk; ++chunk) { + chunks.push(chunk); + } + + this.requestChunks(chunks, callback); + }, + + requestRanges: function ChunkedStreamManager_requestRanges(ranges, + callback) { + ranges = ranges || []; + var chunksToRequest = []; + + for (var i = 0; i < ranges.length; i++) { + var beginChunk = this.getBeginChunk(ranges[i].begin); + var endChunk = this.getEndChunk(ranges[i].end); + for (var chunk = beginChunk; chunk < endChunk; ++chunk) { + if (chunksToRequest.indexOf(chunk) < 0) { + chunksToRequest.push(chunk); + } + } + } + + chunksToRequest.sort(function(a, b) { return a - b; }); + this.requestChunks(chunksToRequest, callback); + }, + + // Groups a sorted array of chunks into as few continguous larger + // chunks as possible + groupChunks: function ChunkedStreamManager_groupChunks(chunks) { + var groupedChunks = []; + var beginChunk = -1; + var prevChunk = -1; + for (var i = 0; i < chunks.length; ++i) { + var chunk = chunks[i]; + + if (beginChunk < 0) { + beginChunk = chunk; + } + + if (prevChunk >= 0 && prevChunk + 1 !== chunk) { + groupedChunks.push({ beginChunk: beginChunk, + endChunk: prevChunk + 1 }); + beginChunk = chunk; + } + if (i + 1 === chunks.length) { + groupedChunks.push({ beginChunk: beginChunk, + endChunk: chunk + 1 }); + } + + prevChunk = chunk; + } + return groupedChunks; + }, + + onProgress: function ChunkedStreamManager_onProgress(args) { + var bytesLoaded = (this.stream.numChunksLoaded * this.chunkSize + + args.loaded); + this.msgHandler.send('DocProgress', { + loaded: bytesLoaded, + total: this.length + }); + }, + + onReceiveData: function ChunkedStreamManager_onReceiveData(args) { + var chunk = args.chunk; + var isProgressive = args.begin === undefined; + var begin = isProgressive ? this.progressiveDataLength : args.begin; + var end = begin + chunk.byteLength; + + var beginChunk = Math.floor(begin / this.chunkSize); + var endChunk = end < this.length ? Math.floor(end / this.chunkSize) : + Math.ceil(end / this.chunkSize); + + if (isProgressive) { + this.stream.onReceiveProgressiveData(chunk); + this.progressiveDataLength = end; + } else { + this.stream.onReceiveData(begin, chunk); + } + + if (this.stream.allChunksLoaded()) { + this._loadedStreamCapability.resolve(this.stream); + } + + var loadedRequests = []; + var i, requestId; + for (chunk = beginChunk; chunk < endChunk; ++chunk) { + // The server might return more chunks than requested + var requestIds = this.requestsByChunk[chunk] || []; + delete this.requestsByChunk[chunk]; + + for (i = 0; i < requestIds.length; ++i) { + requestId = requestIds[i]; + var chunksNeeded = this.chunksNeededByRequest[requestId]; + if (chunk in chunksNeeded) { + delete chunksNeeded[chunk]; + } + + if (!isEmptyObj(chunksNeeded)) { + continue; + } + + loadedRequests.push(requestId); + } + } + + // If there are no pending requests, automatically fetch the next + // unfetched chunk of the PDF + if (!this.disableAutoFetch && isEmptyObj(this.requestsByChunk)) { + var nextEmptyChunk; + if (this.stream.numChunksLoaded === 1) { + // This is a special optimization so that after fetching the first + // chunk, rather than fetching the second chunk, we fetch the last + // chunk. + var lastChunk = this.stream.numChunks - 1; + if (!this.stream.hasChunk(lastChunk)) { + nextEmptyChunk = lastChunk; + } + } else { + nextEmptyChunk = this.stream.nextEmptyChunk(endChunk); + } + if (isInt(nextEmptyChunk)) { + this.requestChunks([nextEmptyChunk]); + } + } + + for (i = 0; i < loadedRequests.length; ++i) { + requestId = loadedRequests[i]; + var callback = this.callbacksByRequest[requestId]; + delete this.callbacksByRequest[requestId]; + if (callback) { + callback(); + } + } + + this.msgHandler.send('DocProgress', { + loaded: this.stream.numChunksLoaded * this.chunkSize, + total: this.length + }); + }, + + onError: function ChunkedStreamManager_onError(err) { + this._loadedStreamCapability.reject(err); + }, + + getBeginChunk: function ChunkedStreamManager_getBeginChunk(begin) { + var chunk = Math.floor(begin / this.chunkSize); + return chunk; + }, + + getEndChunk: function ChunkedStreamManager_getEndChunk(end) { + if (end % this.chunkSize === 0) { + return end / this.chunkSize; + } + + // 0 -> 0 + // 1 -> 1 + // 99 -> 1 + // 100 -> 1 + // 101 -> 2 + var chunk = Math.floor((end - 1) / this.chunkSize) + 1; + return chunk; + } + }; + + return ChunkedStreamManager; +})(); + + +// The maximum number of bytes fetched per range request +var RANGE_CHUNK_SIZE = 65536; + +// TODO(mack): Make use of PDFJS.Util.inherit() when it becomes available +var BasePdfManager = (function BasePdfManagerClosure() { + function BasePdfManager() { + throw new Error('Cannot initialize BaseManagerManager'); + } + + BasePdfManager.prototype = { + onLoadedStream: function BasePdfManager_onLoadedStream() { + throw new NotImplementedException(); + }, + + ensureDoc: function BasePdfManager_ensureDoc(prop, args) { + return this.ensure(this.pdfDocument, prop, args); + }, + + ensureXRef: function BasePdfManager_ensureXRef(prop, args) { + return this.ensure(this.pdfDocument.xref, prop, args); + }, + + ensureCatalog: function BasePdfManager_ensureCatalog(prop, args) { + return this.ensure(this.pdfDocument.catalog, prop, args); + }, + + getPage: function BasePdfManager_pagePage(pageIndex) { + return this.pdfDocument.getPage(pageIndex); + }, + + cleanup: function BasePdfManager_cleanup() { + return this.pdfDocument.cleanup(); + }, + + ensure: function BasePdfManager_ensure(obj, prop, args) { + return new NotImplementedException(); + }, + + requestRange: function BasePdfManager_ensure(begin, end) { + return new NotImplementedException(); + }, + + requestLoadedStream: function BasePdfManager_requestLoadedStream() { + return new NotImplementedException(); + }, + + sendProgressiveData: function BasePdfManager_sendProgressiveData(chunk) { + return new NotImplementedException(); + }, + + updatePassword: function BasePdfManager_updatePassword(password) { + this.pdfDocument.xref.password = this.password = password; + if (this._passwordChangedCapability) { + this._passwordChangedCapability.resolve(); + } + }, + + passwordChanged: function BasePdfManager_passwordChanged() { + this._passwordChangedCapability = createPromiseCapability(); + return this._passwordChangedCapability.promise; + }, + + terminate: function BasePdfManager_terminate() { + return new NotImplementedException(); + } + }; + + return BasePdfManager; +})(); + +var LocalPdfManager = (function LocalPdfManagerClosure() { + function LocalPdfManager(data, password) { + var stream = new Stream(data); + this.pdfDocument = new PDFDocument(this, stream, password); + this._loadedStreamCapability = createPromiseCapability(); + this._loadedStreamCapability.resolve(stream); + } + + LocalPdfManager.prototype = Object.create(BasePdfManager.prototype); + LocalPdfManager.prototype.constructor = LocalPdfManager; + + LocalPdfManager.prototype.ensure = + function LocalPdfManager_ensure(obj, prop, args) { + return new Promise(function (resolve, reject) { + try { + var value = obj[prop]; + var result; + if (typeof value === 'function') { + result = value.apply(obj, args); + } else { + result = value; + } + resolve(result); + } catch (e) { + reject(e); + } + }); + }; + + LocalPdfManager.prototype.requestRange = + function LocalPdfManager_requestRange(begin, end) { + return Promise.resolve(); + }; + + LocalPdfManager.prototype.requestLoadedStream = + function LocalPdfManager_requestLoadedStream() { + }; + + LocalPdfManager.prototype.onLoadedStream = + function LocalPdfManager_getLoadedStream() { + return this._loadedStreamCapability.promise; + }; + + LocalPdfManager.prototype.terminate = + function LocalPdfManager_terminate() { + return; + }; + + return LocalPdfManager; +})(); + +var NetworkPdfManager = (function NetworkPdfManagerClosure() { + function NetworkPdfManager(args, msgHandler) { + + this.msgHandler = msgHandler; + + var params = { + msgHandler: msgHandler, + httpHeaders: args.httpHeaders, + withCredentials: args.withCredentials, + chunkedViewerLoading: args.chunkedViewerLoading, + disableAutoFetch: args.disableAutoFetch, + initialData: args.initialData + }; + this.streamManager = new ChunkedStreamManager(args.length, RANGE_CHUNK_SIZE, + args.url, params); + + this.pdfDocument = new PDFDocument(this, this.streamManager.getStream(), + args.password); + } + + NetworkPdfManager.prototype = Object.create(BasePdfManager.prototype); + NetworkPdfManager.prototype.constructor = NetworkPdfManager; + + NetworkPdfManager.prototype.ensure = + function NetworkPdfManager_ensure(obj, prop, args) { + var pdfManager = this; + + return new Promise(function (resolve, reject) { + function ensureHelper() { + try { + var result; + var value = obj[prop]; + if (typeof value === 'function') { + result = value.apply(obj, args); + } else { + result = value; + } + resolve(result); + } catch(e) { + if (!(e instanceof MissingDataException)) { + reject(e); + return; + } + pdfManager.streamManager.requestRange(e.begin, e.end, ensureHelper); + } + } + + ensureHelper(); + }); + }; + + NetworkPdfManager.prototype.requestRange = + function NetworkPdfManager_requestRange(begin, end) { + return new Promise(function (resolve) { + this.streamManager.requestRange(begin, end, function() { + resolve(); + }); + }.bind(this)); + }; + + NetworkPdfManager.prototype.requestLoadedStream = + function NetworkPdfManager_requestLoadedStream() { + this.streamManager.requestAllChunks(); + }; + + NetworkPdfManager.prototype.sendProgressiveData = + function NetworkPdfManager_sendProgressiveData(chunk) { + this.streamManager.onReceiveData({ chunk: chunk }); + }; + + NetworkPdfManager.prototype.onLoadedStream = + function NetworkPdfManager_getLoadedStream() { + return this.streamManager.onLoadedStream(); + }; + + NetworkPdfManager.prototype.terminate = + function NetworkPdfManager_terminate() { + this.streamManager.networkManager.abortAllRequests(); + }; + + return NetworkPdfManager; +})(); + + +var Page = (function PageClosure() { + + var LETTER_SIZE_MEDIABOX = [0, 0, 612, 792]; + + function Page(pdfManager, xref, pageIndex, pageDict, ref, fontCache) { + this.pdfManager = pdfManager; + this.pageIndex = pageIndex; + this.pageDict = pageDict; + this.xref = xref; + this.ref = ref; + this.fontCache = fontCache; + this.idCounters = { + obj: 0 + }; + this.resourcesPromise = null; + } + + Page.prototype = { + getPageProp: function Page_getPageProp(key) { + return this.pageDict.get(key); + }, + + getInheritedPageProp: function Page_inheritPageProp(key) { + var dict = this.pageDict; + var value = dict.get(key); + while (value === undefined) { + dict = dict.get('Parent'); + if (!dict) { + break; + } + value = dict.get(key); + } + return value; + }, + + get content() { + return this.getPageProp('Contents'); + }, + + get resources() { + var value = this.getInheritedPageProp('Resources'); + // For robustness: The spec states that a \Resources entry has to be + // present, but can be empty. Some document omit it still. In this case + // return an empty dictionary: + if (value === undefined) { + value = Dict.empty; + } + return shadow(this, 'resources', value); + }, + + get mediaBox() { + var obj = this.getInheritedPageProp('MediaBox'); + // Reset invalid media box to letter size. + if (!isArray(obj) || obj.length !== 4) { + obj = LETTER_SIZE_MEDIABOX; + } + return shadow(this, 'mediaBox', obj); + }, + + get view() { + var mediaBox = this.mediaBox; + var cropBox = this.getInheritedPageProp('CropBox'); + if (!isArray(cropBox) || cropBox.length !== 4) { + return shadow(this, 'view', mediaBox); + } + + // From the spec, 6th ed., p.963: + // "The crop, bleed, trim, and art boxes should not ordinarily + // extend beyond the boundaries of the media box. If they do, they are + // effectively reduced to their intersection with the media box." + cropBox = Util.intersect(cropBox, mediaBox); + if (!cropBox) { + return shadow(this, 'view', mediaBox); + } + return shadow(this, 'view', cropBox); + }, + + get annotationRefs() { + return shadow(this, 'annotationRefs', + this.getInheritedPageProp('Annots')); + }, + + get rotate() { + var rotate = this.getInheritedPageProp('Rotate') || 0; + // Normalize rotation so it's a multiple of 90 and between 0 and 270 + if (rotate % 90 !== 0) { + rotate = 0; + } else if (rotate >= 360) { + rotate = rotate % 360; + } else if (rotate < 0) { + // The spec doesn't cover negatives, assume its counterclockwise + // rotation. The following is the other implementation of modulo. + rotate = ((rotate % 360) + 360) % 360; + } + return shadow(this, 'rotate', rotate); + }, + + getContentStream: function Page_getContentStream() { + var content = this.content; + var stream; + if (isArray(content)) { + // fetching items + var xref = this.xref; + var i, n = content.length; + var streams = []; + for (i = 0; i < n; ++i) { + streams.push(xref.fetchIfRef(content[i])); + } + stream = new StreamsSequenceStream(streams); + } else if (isStream(content)) { + stream = content; + } else { + // replacing non-existent page content with empty one + stream = new NullStream(); + } + return stream; + }, + + loadResources: function Page_loadResources(keys) { + if (!this.resourcesPromise) { + // TODO: add async getInheritedPageProp and remove this. + this.resourcesPromise = this.pdfManager.ensure(this, 'resources'); + } + return this.resourcesPromise.then(function resourceSuccess() { + var objectLoader = new ObjectLoader(this.resources.map, + keys, + this.xref); + return objectLoader.load(); + }.bind(this)); + }, + + getOperatorList: function Page_getOperatorList(handler, intent) { + var self = this; + + var pdfManager = this.pdfManager; + var contentStreamPromise = pdfManager.ensure(this, 'getContentStream', + []); + var resourcesPromise = this.loadResources([ + 'ExtGState', + 'ColorSpace', + 'Pattern', + 'Shading', + 'XObject', + 'Font' + // ProcSet + // Properties + ]); + + var partialEvaluator = new PartialEvaluator(pdfManager, this.xref, + handler, this.pageIndex, + 'p' + this.pageIndex + '_', + this.idCounters, + this.fontCache); + + var dataPromises = Promise.all([contentStreamPromise, resourcesPromise]); + var pageListPromise = dataPromises.then(function(data) { + var contentStream = data[0]; + var opList = new OperatorList(intent, handler, self.pageIndex); + + handler.send('StartRenderPage', { + transparency: partialEvaluator.hasBlendModes(self.resources), + pageIndex: self.pageIndex, + intent: intent + }); + return partialEvaluator.getOperatorList(contentStream, self.resources, + opList).then(function () { + return opList; + }); + }); + + var annotationsPromise = pdfManager.ensure(this, 'annotations'); + return Promise.all([pageListPromise, annotationsPromise]).then( + function(datas) { + var pageOpList = datas[0]; + var annotations = datas[1]; + + if (annotations.length === 0) { + pageOpList.flush(true); + return pageOpList; + } + + var annotationsReadyPromise = Annotation.appendToOperatorList( + annotations, pageOpList, pdfManager, partialEvaluator, intent); + return annotationsReadyPromise.then(function () { + pageOpList.flush(true); + return pageOpList; + }); + }); + }, + + extractTextContent: function Page_extractTextContent() { + var handler = { + on: function nullHandlerOn() {}, + send: function nullHandlerSend() {} + }; + + var self = this; + + var pdfManager = this.pdfManager; + var contentStreamPromise = pdfManager.ensure(this, 'getContentStream', + []); + + var resourcesPromise = this.loadResources([ + 'ExtGState', + 'XObject', + 'Font' + ]); + + var dataPromises = Promise.all([contentStreamPromise, + resourcesPromise]); + return dataPromises.then(function(data) { + var contentStream = data[0]; + var partialEvaluator = new PartialEvaluator(pdfManager, self.xref, + handler, self.pageIndex, + 'p' + self.pageIndex + '_', + self.idCounters, + self.fontCache); + + return partialEvaluator.getTextContent(contentStream, + self.resources); + }); + }, + + getAnnotationsData: function Page_getAnnotationsData() { + var annotations = this.annotations; + var annotationsData = []; + for (var i = 0, n = annotations.length; i < n; ++i) { + annotationsData.push(annotations[i].getData()); + } + return annotationsData; + }, + + get annotations() { + var annotations = []; + var annotationRefs = (this.annotationRefs || []); + for (var i = 0, n = annotationRefs.length; i < n; ++i) { + var annotationRef = annotationRefs[i]; + var annotation = Annotation.fromRef(this.xref, annotationRef); + if (annotation) { + annotations.push(annotation); + } + } + return shadow(this, 'annotations', annotations); + } + }; + + return Page; +})(); + +/** + * The `PDFDocument` holds all the data of the PDF file. Compared to the + * `PDFDoc`, this one doesn't have any job management code. + * Right now there exists one PDFDocument on the main thread + one object + * for each worker. If there is no worker support enabled, there are two + * `PDFDocument` objects on the main thread created. + */ +var PDFDocument = (function PDFDocumentClosure() { + var FINGERPRINT_FIRST_BYTES = 1024; + var EMPTY_FINGERPRINT = '\x00\x00\x00\x00\x00\x00\x00' + + '\x00\x00\x00\x00\x00\x00\x00\x00\x00'; + + function PDFDocument(pdfManager, arg, password) { + if (isStream(arg)) { + init.call(this, pdfManager, arg, password); + } else if (isArrayBuffer(arg)) { + init.call(this, pdfManager, new Stream(arg), password); + } else { + error('PDFDocument: Unknown argument type'); + } + } + + function init(pdfManager, stream, password) { + assert(stream.length > 0, 'stream must have data'); + this.pdfManager = pdfManager; + this.stream = stream; + var xref = new XRef(this.stream, password, pdfManager); + this.xref = xref; + } + + function find(stream, needle, limit, backwards) { + var pos = stream.pos; + var end = stream.end; + var strBuf = []; + if (pos + limit > end) { + limit = end - pos; + } + for (var n = 0; n < limit; ++n) { + strBuf.push(String.fromCharCode(stream.getByte())); + } + var str = strBuf.join(''); + stream.pos = pos; + var index = backwards ? str.lastIndexOf(needle) : str.indexOf(needle); + if (index === -1) { + return false; /* not found */ + } + stream.pos += index; + return true; /* found */ + } + + var DocumentInfoValidators = { + get entries() { + // Lazily build this since all the validation functions below are not + // defined until after this file loads. + return shadow(this, 'entries', { + Title: isString, + Author: isString, + Subject: isString, + Keywords: isString, + Creator: isString, + Producer: isString, + CreationDate: isString, + ModDate: isString, + Trapped: isName + }); + } + }; + + PDFDocument.prototype = { + parse: function PDFDocument_parse(recoveryMode) { + this.setup(recoveryMode); + try { + // checking if AcroForm is present + this.acroForm = this.catalog.catDict.get('AcroForm'); + if (this.acroForm) { + this.xfa = this.acroForm.get('XFA'); + var fields = this.acroForm.get('Fields'); + if ((!fields || !isArray(fields) || fields.length === 0) && + !this.xfa) { + // no fields and no XFA -- not a form (?) + this.acroForm = null; + } + } + } catch (ex) { + info('Something wrong with AcroForm entry'); + this.acroForm = null; + } + }, + + get linearization() { + var linearization = null; + if (this.stream.length) { + try { + linearization = Linearization.create(this.stream); + } catch (err) { + if (err instanceof MissingDataException) { + throw err; + } + info(err); + } + } + // shadow the prototype getter with a data property + return shadow(this, 'linearization', linearization); + }, + get startXRef() { + var stream = this.stream; + var startXRef = 0; + var linearization = this.linearization; + if (linearization) { + // Find end of first obj. + stream.reset(); + if (find(stream, 'endobj', 1024)) { + startXRef = stream.pos + 6; + } + } else { + // Find startxref by jumping backward from the end of the file. + var step = 1024; + var found = false, pos = stream.end; + while (!found && pos > 0) { + pos -= step - 'startxref'.length; + if (pos < 0) { + pos = 0; + } + stream.pos = pos; + found = find(stream, 'startxref', step, true); + } + if (found) { + stream.skip(9); + var ch; + do { + ch = stream.getByte(); + } while (Lexer.isSpace(ch)); + var str = ''; + while (ch >= 0x20 && ch <= 0x39) { // < '9' + str += String.fromCharCode(ch); + ch = stream.getByte(); + } + startXRef = parseInt(str, 10); + if (isNaN(startXRef)) { + startXRef = 0; + } + } + } + // shadow the prototype getter with a data property + return shadow(this, 'startXRef', startXRef); + }, + get mainXRefEntriesOffset() { + var mainXRefEntriesOffset = 0; + var linearization = this.linearization; + if (linearization) { + mainXRefEntriesOffset = linearization.mainXRefEntriesOffset; + } + // shadow the prototype getter with a data property + return shadow(this, 'mainXRefEntriesOffset', mainXRefEntriesOffset); + }, + // Find the header, remove leading garbage and setup the stream + // starting from the header. + checkHeader: function PDFDocument_checkHeader() { + var stream = this.stream; + stream.reset(); + if (find(stream, '%PDF-', 1024)) { + // Found the header, trim off any garbage before it. + stream.moveStart(); + // Reading file format version + var MAX_VERSION_LENGTH = 12; + var version = '', ch; + while ((ch = stream.getByte()) > 0x20) { // SPACE + if (version.length >= MAX_VERSION_LENGTH) { + break; + } + version += String.fromCharCode(ch); + } + // removing "%PDF-"-prefix + this.pdfFormatVersion = version.substring(5); + return; + } + // May not be a PDF file, continue anyway. + }, + parseStartXRef: function PDFDocument_parseStartXRef() { + var startXRef = this.startXRef; + this.xref.setStartXRef(startXRef); + }, + setup: function PDFDocument_setup(recoveryMode) { + this.xref.parse(recoveryMode); + this.catalog = new Catalog(this.pdfManager, this.xref); + }, + get numPages() { + var linearization = this.linearization; + var num = linearization ? linearization.numPages : this.catalog.numPages; + // shadow the prototype getter + return shadow(this, 'numPages', num); + }, + get documentInfo() { + var docInfo = { + PDFFormatVersion: this.pdfFormatVersion, + IsAcroFormPresent: !!this.acroForm, + IsXFAPresent: !!this.xfa + }; + var infoDict; + try { + infoDict = this.xref.trailer.get('Info'); + } catch (err) { + info('The document information dictionary is invalid.'); + } + if (infoDict) { + var validEntries = DocumentInfoValidators.entries; + // Only fill the document info with valid entries from the spec. + for (var key in validEntries) { + if (infoDict.has(key)) { + var value = infoDict.get(key); + // Make sure the value conforms to the spec. + if (validEntries[key](value)) { + docInfo[key] = (typeof value !== 'string' ? + value : stringToPDFString(value)); + } else { + info('Bad value in document info for "' + key + '"'); + } + } + } + } + return shadow(this, 'documentInfo', docInfo); + }, + get fingerprint() { + var xref = this.xref, idArray, hash, fileID = ''; + + if (xref.trailer.has('ID')) { + idArray = xref.trailer.get('ID'); + } + if (idArray && isArray(idArray) && idArray[0] !== EMPTY_FINGERPRINT) { + hash = stringToBytes(idArray[0]); + } else { + if (this.stream.ensureRange) { + this.stream.ensureRange(0, + Math.min(FINGERPRINT_FIRST_BYTES, this.stream.end)); + } + hash = calculateMD5(this.stream.bytes.subarray(0, + FINGERPRINT_FIRST_BYTES), 0, FINGERPRINT_FIRST_BYTES); + } + + for (var i = 0, n = hash.length; i < n; i++) { + var hex = hash[i].toString(16); + fileID += hex.length === 1 ? '0' + hex : hex; + } + + return shadow(this, 'fingerprint', fileID); + }, + + getPage: function PDFDocument_getPage(pageIndex) { + return this.catalog.getPage(pageIndex); + }, + + cleanup: function PDFDocument_cleanup() { + return this.catalog.cleanup(); + } + }; + + return PDFDocument; +})(); + + +var Name = (function NameClosure() { + function Name(name) { + this.name = name; + } + + Name.prototype = {}; + + var nameCache = {}; + + Name.get = function Name_get(name) { + var nameValue = nameCache[name]; + return (nameValue ? nameValue : (nameCache[name] = new Name(name))); + }; + + return Name; +})(); + +var Cmd = (function CmdClosure() { + function Cmd(cmd) { + this.cmd = cmd; + } + + Cmd.prototype = {}; + + var cmdCache = {}; + + Cmd.get = function Cmd_get(cmd) { + var cmdValue = cmdCache[cmd]; + return (cmdValue ? cmdValue : (cmdCache[cmd] = new Cmd(cmd))); + }; + + return Cmd; +})(); + +var Dict = (function DictClosure() { + var nonSerializable = function nonSerializableClosure() { + return nonSerializable; // creating closure on some variable + }; + + var GETALL_DICTIONARY_TYPES_WHITELIST = { + 'Background': true, + 'ExtGState': true, + 'Halftone': true, + 'Layout': true, + 'Mask': true, + 'Pagination': true, + 'Printing': true + }; + + function isRecursionAllowedFor(dict) { + if (!isName(dict.Type)) { + return true; + } + var dictType = dict.Type.name; + return GETALL_DICTIONARY_TYPES_WHITELIST[dictType] === true; + } + + // xref is optional + function Dict(xref) { + // Map should only be used internally, use functions below to access. + this.map = Object.create(null); + this.xref = xref; + this.objId = null; + this.__nonSerializable__ = nonSerializable; // disable cloning of the Dict + } + + Dict.prototype = { + assignXref: function Dict_assignXref(newXref) { + this.xref = newXref; + }, + + // automatically dereferences Ref objects + get: function Dict_get(key1, key2, key3) { + var value; + var xref = this.xref; + if (typeof (value = this.map[key1]) !== 'undefined' || key1 in this.map || + typeof key2 === 'undefined') { + return xref ? xref.fetchIfRef(value) : value; + } + if (typeof (value = this.map[key2]) !== 'undefined' || key2 in this.map || + typeof key3 === 'undefined') { + return xref ? xref.fetchIfRef(value) : value; + } + value = this.map[key3] || null; + return xref ? xref.fetchIfRef(value) : value; + }, + + // Same as get(), but returns a promise and uses fetchIfRefAsync(). + getAsync: function Dict_getAsync(key1, key2, key3) { + var value; + var xref = this.xref; + if (typeof (value = this.map[key1]) !== 'undefined' || key1 in this.map || + typeof key2 === 'undefined') { + if (xref) { + return xref.fetchIfRefAsync(value); + } + return Promise.resolve(value); + } + if (typeof (value = this.map[key2]) !== 'undefined' || key2 in this.map || + typeof key3 === 'undefined') { + if (xref) { + return xref.fetchIfRefAsync(value); + } + return Promise.resolve(value); + } + value = this.map[key3] || null; + if (xref) { + return xref.fetchIfRefAsync(value); + } + return Promise.resolve(value); + }, + + // no dereferencing + getRaw: function Dict_getRaw(key) { + return this.map[key]; + }, + + // creates new map and dereferences all Refs + getAll: function Dict_getAll() { + var all = Object.create(null); + var queue = null; + var key, obj; + for (key in this.map) { + obj = this.get(key); + if (obj instanceof Dict) { + if (isRecursionAllowedFor(obj)) { + (queue || (queue = [])).push({target: all, key: key, obj: obj}); + } else { + all[key] = this.getRaw(key); + } + } else { + all[key] = obj; + } + } + if (!queue) { + return all; + } + + // trying to take cyclic references into the account + var processed = Object.create(null); + while (queue.length > 0) { + var item = queue.shift(); + var itemObj = item.obj; + var objId = itemObj.objId; + if (objId && objId in processed) { + item.target[item.key] = processed[objId]; + continue; + } + var dereferenced = Object.create(null); + for (key in itemObj.map) { + obj = itemObj.get(key); + if (obj instanceof Dict) { + if (isRecursionAllowedFor(obj)) { + queue.push({target: dereferenced, key: key, obj: obj}); + } else { + dereferenced[key] = itemObj.getRaw(key); + } + } else { + dereferenced[key] = obj; + } + } + if (objId) { + processed[objId] = dereferenced; + } + item.target[item.key] = dereferenced; + } + return all; + }, + + getKeys: function Dict_getKeys() { + return Object.keys(this.map); + }, + + set: function Dict_set(key, value) { + this.map[key] = value; + }, + + has: function Dict_has(key) { + return key in this.map; + }, + + forEach: function Dict_forEach(callback) { + for (var key in this.map) { + callback(key, this.get(key)); + } + } + }; + + Dict.empty = new Dict(null); + + return Dict; +})(); + +var Ref = (function RefClosure() { + function Ref(num, gen) { + this.num = num; + this.gen = gen; + } + + Ref.prototype = { + toString: function Ref_toString() { + // This function is hot, so we make the string as compact as possible. + // |this.gen| is almost always zero, so we treat that case specially. + var str = this.num + 'R'; + if (this.gen !== 0) { + str += this.gen; + } + return str; + } + }; + + return Ref; +})(); + +// The reference is identified by number and generation. +// This structure stores only one instance of the reference. +var RefSet = (function RefSetClosure() { + function RefSet() { + this.dict = {}; + } + + RefSet.prototype = { + has: function RefSet_has(ref) { + return ref.toString() in this.dict; + }, + + put: function RefSet_put(ref) { + this.dict[ref.toString()] = true; + }, + + remove: function RefSet_remove(ref) { + delete this.dict[ref.toString()]; + } + }; + + return RefSet; +})(); + +var RefSetCache = (function RefSetCacheClosure() { + function RefSetCache() { + this.dict = Object.create(null); + } + + RefSetCache.prototype = { + get: function RefSetCache_get(ref) { + return this.dict[ref.toString()]; + }, + + has: function RefSetCache_has(ref) { + return ref.toString() in this.dict; + }, + + put: function RefSetCache_put(ref, obj) { + this.dict[ref.toString()] = obj; + }, + + putAlias: function RefSetCache_putAlias(ref, aliasRef) { + this.dict[ref.toString()] = this.get(aliasRef); + }, + + forEach: function RefSetCache_forEach(fn, thisArg) { + for (var i in this.dict) { + fn.call(thisArg, this.dict[i]); + } + }, + + clear: function RefSetCache_clear() { + this.dict = Object.create(null); + } + }; + + return RefSetCache; +})(); + +var Catalog = (function CatalogClosure() { + function Catalog(pdfManager, xref) { + this.pdfManager = pdfManager; + this.xref = xref; + this.catDict = xref.getCatalogObj(); + this.fontCache = new RefSetCache(); + assert(isDict(this.catDict), + 'catalog object is not a dictionary'); + + this.pagePromises = []; + } + + Catalog.prototype = { + get metadata() { + var streamRef = this.catDict.getRaw('Metadata'); + if (!isRef(streamRef)) { + return shadow(this, 'metadata', null); + } + + var encryptMetadata = (!this.xref.encrypt ? false : + this.xref.encrypt.encryptMetadata); + + var stream = this.xref.fetch(streamRef, !encryptMetadata); + var metadata; + if (stream && isDict(stream.dict)) { + var type = stream.dict.get('Type'); + var subtype = stream.dict.get('Subtype'); + + if (isName(type) && isName(subtype) && + type.name === 'Metadata' && subtype.name === 'XML') { + // XXX: This should examine the charset the XML document defines, + // however since there are currently no real means to decode + // arbitrary charsets, let's just hope that the author of the PDF + // was reasonable enough to stick with the XML default charset, + // which is UTF-8. + try { + metadata = stringToUTF8String(bytesToString(stream.getBytes())); + } catch (e) { + info('Skipping invalid metadata.'); + } + } + } + + return shadow(this, 'metadata', metadata); + }, + get toplevelPagesDict() { + var pagesObj = this.catDict.get('Pages'); + assert(isDict(pagesObj), 'invalid top-level pages dictionary'); + // shadow the prototype getter + return shadow(this, 'toplevelPagesDict', pagesObj); + }, + get documentOutline() { + var obj = null; + try { + obj = this.readDocumentOutline(); + } catch (ex) { + if (ex instanceof MissingDataException) { + throw ex; + } + warn('Unable to read document outline'); + } + return shadow(this, 'documentOutline', obj); + }, + readDocumentOutline: function Catalog_readDocumentOutline() { + var xref = this.xref; + var obj = this.catDict.get('Outlines'); + var root = { items: [] }; + if (isDict(obj)) { + obj = obj.getRaw('First'); + var processed = new RefSet(); + if (isRef(obj)) { + var queue = [{obj: obj, parent: root}]; + // to avoid recursion keeping track of the items + // in the processed dictionary + processed.put(obj); + while (queue.length > 0) { + var i = queue.shift(); + var outlineDict = xref.fetchIfRef(i.obj); + if (outlineDict === null) { + continue; + } + if (!outlineDict.has('Title')) { + error('Invalid outline item'); + } + var dest = outlineDict.get('A'); + if (dest) { + dest = dest.get('D'); + } else if (outlineDict.has('Dest')) { + dest = outlineDict.getRaw('Dest'); + if (isName(dest)) { + dest = dest.name; + } + } + var title = outlineDict.get('Title'); + var outlineItem = { + dest: dest, + title: stringToPDFString(title), + color: outlineDict.get('C') || [0, 0, 0], + count: outlineDict.get('Count'), + bold: !!(outlineDict.get('F') & 2), + italic: !!(outlineDict.get('F') & 1), + items: [] + }; + i.parent.items.push(outlineItem); + obj = outlineDict.getRaw('First'); + if (isRef(obj) && !processed.has(obj)) { + queue.push({obj: obj, parent: outlineItem}); + processed.put(obj); + } + obj = outlineDict.getRaw('Next'); + if (isRef(obj) && !processed.has(obj)) { + queue.push({obj: obj, parent: i.parent}); + processed.put(obj); + } + } + } + } + return (root.items.length > 0 ? root.items : null); + }, + get numPages() { + var obj = this.toplevelPagesDict.get('Count'); + assert( + isInt(obj), + 'page count in top level pages object is not an integer' + ); + // shadow the prototype getter + return shadow(this, 'num', obj); + }, + get destinations() { + function fetchDestination(dest) { + return isDict(dest) ? dest.get('D') : dest; + } + + var xref = this.xref; + var dests = {}, nameTreeRef, nameDictionaryRef; + var obj = this.catDict.get('Names'); + if (obj && obj.has('Dests')) { + nameTreeRef = obj.getRaw('Dests'); + } else if (this.catDict.has('Dests')) { + nameDictionaryRef = this.catDict.get('Dests'); + } + + if (nameDictionaryRef) { + // reading simple destination dictionary + obj = nameDictionaryRef; + obj.forEach(function catalogForEach(key, value) { + if (!value) { + return; + } + dests[key] = fetchDestination(value); + }); + } + if (nameTreeRef) { + var nameTree = new NameTree(nameTreeRef, xref); + var names = nameTree.getAll(); + for (var name in names) { + if (!names.hasOwnProperty(name)) { + continue; + } + dests[name] = fetchDestination(names[name]); + } + } + return shadow(this, 'destinations', dests); + }, + getDestination: function Catalog_getDestination(destinationId) { + function fetchDestination(dest) { + return isDict(dest) ? dest.get('D') : dest; + } + + var xref = this.xref; + var dest, nameTreeRef, nameDictionaryRef; + var obj = this.catDict.get('Names'); + if (obj && obj.has('Dests')) { + nameTreeRef = obj.getRaw('Dests'); + } else if (this.catDict.has('Dests')) { + nameDictionaryRef = this.catDict.get('Dests'); + } + + if (nameDictionaryRef) { + // reading simple destination dictionary + obj = nameDictionaryRef; + obj.forEach(function catalogForEach(key, value) { + if (!value) { + return; + } + if (key === destinationId) { + dest = fetchDestination(value); + } + }); + } + if (nameTreeRef) { + var nameTree = new NameTree(nameTreeRef, xref); + dest = fetchDestination(nameTree.get(destinationId)); + } + return dest; + }, + get attachments() { + var xref = this.xref; + var attachments = null, nameTreeRef; + var obj = this.catDict.get('Names'); + if (obj) { + nameTreeRef = obj.getRaw('EmbeddedFiles'); + } + + if (nameTreeRef) { + var nameTree = new NameTree(nameTreeRef, xref); + var names = nameTree.getAll(); + for (var name in names) { + if (!names.hasOwnProperty(name)) { + continue; + } + var fs = new FileSpec(names[name], xref); + if (!attachments) { + attachments = {}; + } + attachments[stringToPDFString(name)] = fs.serializable; + } + } + return shadow(this, 'attachments', attachments); + }, + get javaScript() { + var xref = this.xref; + var obj = this.catDict.get('Names'); + + var javaScript = []; + if (obj && obj.has('JavaScript')) { + var nameTree = new NameTree(obj.getRaw('JavaScript'), xref); + var names = nameTree.getAll(); + for (var name in names) { + if (!names.hasOwnProperty(name)) { + continue; + } + // We don't really use the JavaScript right now. This code is + // defensive so we don't cause errors on document load. + var jsDict = names[name]; + if (!isDict(jsDict)) { + continue; + } + var type = jsDict.get('S'); + if (!isName(type) || type.name !== 'JavaScript') { + continue; + } + var js = jsDict.get('JS'); + if (!isString(js) && !isStream(js)) { + continue; + } + if (isStream(js)) { + js = bytesToString(js.getBytes()); + } + javaScript.push(stringToPDFString(js)); + } + } + + // Append OpenAction actions to javaScript array + var openactionDict = this.catDict.get('OpenAction'); + if (isDict(openactionDict)) { + var objType = openactionDict.get('Type'); + var actionType = openactionDict.get('S'); + var action = openactionDict.get('N'); + var isPrintAction = (isName(objType) && objType.name === 'Action' && + isName(actionType) && actionType.name === 'Named' && + isName(action) && action.name === 'Print'); + + if (isPrintAction) { + javaScript.push('print(true);'); + } + } + + return shadow(this, 'javaScript', javaScript); + }, + + cleanup: function Catalog_cleanup() { + var promises = []; + this.fontCache.forEach(function (promise) { + promises.push(promise); + }); + return Promise.all(promises).then(function (translatedFonts) { + for (var i = 0, ii = translatedFonts.length; i < ii; i++) { + var font = translatedFonts[i].dict; + delete font.translated; + } + this.fontCache.clear(); + }.bind(this)); + }, + + getPage: function Catalog_getPage(pageIndex) { + if (!(pageIndex in this.pagePromises)) { + this.pagePromises[pageIndex] = this.getPageDict(pageIndex).then( + function (a) { + var dict = a[0]; + var ref = a[1]; + return new Page(this.pdfManager, this.xref, pageIndex, dict, ref, + this.fontCache); + }.bind(this) + ); + } + return this.pagePromises[pageIndex]; + }, + + getPageDict: function Catalog_getPageDict(pageIndex) { + var capability = createPromiseCapability(); + var nodesToVisit = [this.catDict.getRaw('Pages')]; + var currentPageIndex = 0; + var xref = this.xref; + var checkAllKids = false; + + function next() { + while (nodesToVisit.length) { + var currentNode = nodesToVisit.pop(); + + if (isRef(currentNode)) { + xref.fetchAsync(currentNode).then(function (obj) { + if (isDict(obj, 'Page') || (isDict(obj) && !obj.has('Kids'))) { + if (pageIndex === currentPageIndex) { + capability.resolve([obj, currentNode]); + } else { + currentPageIndex++; + next(); + } + return; + } + nodesToVisit.push(obj); + next(); + }, capability.reject); + return; + } + + // Must be a child page dictionary. + assert( + isDict(currentNode), + 'page dictionary kid reference points to wrong type of object' + ); + var count = currentNode.get('Count'); + // If the current node doesn't have any children, avoid getting stuck + // in an empty node further down in the tree (see issue5644.pdf). + if (count === 0) { + checkAllKids = true; + } + // Skip nodes where the page can't be. + if (currentPageIndex + count <= pageIndex) { + currentPageIndex += count; + continue; + } + + var kids = currentNode.get('Kids'); + assert(isArray(kids), 'page dictionary kids object is not an array'); + if (!checkAllKids && count === kids.length) { + // Nodes that don't have the page have been skipped and this is the + // bottom of the tree which means the page requested must be a + // descendant of this pages node. Ideally we would just resolve the + // promise with the page ref here, but there is the case where more + // pages nodes could link to single a page (see issue 3666 pdf). To + // handle this push it back on the queue so if it is a pages node it + // will be descended into. + nodesToVisit = [kids[pageIndex - currentPageIndex]]; + currentPageIndex = pageIndex; + continue; + } else { + for (var last = kids.length - 1; last >= 0; last--) { + nodesToVisit.push(kids[last]); + } + } + } + capability.reject('Page index ' + pageIndex + ' not found.'); + } + next(); + return capability.promise; + }, + + getPageIndex: function Catalog_getPageIndex(ref) { + // The page tree nodes have the count of all the leaves below them. To get + // how many pages are before we just have to walk up the tree and keep + // adding the count of siblings to the left of the node. + var xref = this.xref; + function pagesBeforeRef(kidRef) { + var total = 0; + var parentRef; + return xref.fetchAsync(kidRef).then(function (node) { + if (!node) { + return null; + } + parentRef = node.getRaw('Parent'); + return node.getAsync('Parent'); + }).then(function (parent) { + if (!parent) { + return null; + } + return parent.getAsync('Kids'); + }).then(function (kids) { + if (!kids) { + return null; + } + var kidPromises = []; + var found = false; + for (var i = 0; i < kids.length; i++) { + var kid = kids[i]; + assert(isRef(kid), 'kids must be a ref'); + if (kid.num === kidRef.num) { + found = true; + break; + } + kidPromises.push(xref.fetchAsync(kid).then(function (kid) { + if (kid.has('Count')) { + var count = kid.get('Count'); + total += count; + } else { // page leaf node + total++; + } + })); + } + if (!found) { + error('kid ref not found in parents kids'); + } + return Promise.all(kidPromises).then(function () { + return [total, parentRef]; + }); + }); + } + + var total = 0; + function next(ref) { + return pagesBeforeRef(ref).then(function (args) { + if (!args) { + return total; + } + var count = args[0]; + var parentRef = args[1]; + total += count; + return next(parentRef); + }); + } + + return next(ref); + } + }; + + return Catalog; +})(); + +var XRef = (function XRefClosure() { + function XRef(stream, password) { + this.stream = stream; + this.entries = []; + this.xrefstms = {}; + // prepare the XRef cache + this.cache = []; + this.password = password; + this.stats = { + streamTypes: [], + fontTypes: [] + }; + } + + XRef.prototype = { + setStartXRef: function XRef_setStartXRef(startXRef) { + // Store the starting positions of xref tables as we process them + // so we can recover from missing data errors + this.startXRefQueue = [startXRef]; + }, + + parse: function XRef_parse(recoveryMode) { + var trailerDict; + if (!recoveryMode) { + trailerDict = this.readXRef(); + } else { + warn('Indexing all PDF objects'); + trailerDict = this.indexObjects(); + } + trailerDict.assignXref(this); + this.trailer = trailerDict; + var encrypt = trailerDict.get('Encrypt'); + if (encrypt) { + var ids = trailerDict.get('ID'); + var fileId = (ids && ids.length) ? ids[0] : ''; + this.encrypt = new CipherTransformFactory(encrypt, fileId, + this.password); + } + + // get the root dictionary (catalog) object + if (!(this.root = trailerDict.get('Root'))) { + error('Invalid root reference'); + } + }, + + processXRefTable: function XRef_processXRefTable(parser) { + if (!('tableState' in this)) { + // Stores state of the table as we process it so we can resume + // from middle of table in case of missing data error + this.tableState = { + entryNum: 0, + streamPos: parser.lexer.stream.pos, + parserBuf1: parser.buf1, + parserBuf2: parser.buf2 + }; + } + + var obj = this.readXRefTable(parser); + + // Sanity check + if (!isCmd(obj, 'trailer')) { + error('Invalid XRef table: could not find trailer dictionary'); + } + // Read trailer dictionary, e.g. + // trailer + // << /Size 22 + // /Root 20R + // /Info 10R + // /ID [ <81b14aafa313db63dbd6f981e49f94f4> ] + // >> + // The parser goes through the entire stream << ... >> and provides + // a getter interface for the key-value table + var dict = parser.getObj(); + + // The pdflib PDF generator can generate a nested trailer dictionary + if (!isDict(dict) && dict.dict) { + dict = dict.dict; + } + if (!isDict(dict)) { + error('Invalid XRef table: could not parse trailer dictionary'); + } + delete this.tableState; + + return dict; + }, + + readXRefTable: function XRef_readXRefTable(parser) { + // Example of cross-reference table: + // xref + // 0 1 <-- subsection header (first obj #, obj count) + // 0000000000 65535 f <-- actual object (offset, generation #, f/n) + // 23 2 <-- subsection header ... and so on ... + // 0000025518 00002 n + // 0000025635 00000 n + // trailer + // ... + + var stream = parser.lexer.stream; + var tableState = this.tableState; + stream.pos = tableState.streamPos; + parser.buf1 = tableState.parserBuf1; + parser.buf2 = tableState.parserBuf2; + + // Outer loop is over subsection headers + var obj; + + while (true) { + if (!('firstEntryNum' in tableState) || !('entryCount' in tableState)) { + if (isCmd(obj = parser.getObj(), 'trailer')) { + break; + } + tableState.firstEntryNum = obj; + tableState.entryCount = parser.getObj(); + } + + var first = tableState.firstEntryNum; + var count = tableState.entryCount; + if (!isInt(first) || !isInt(count)) { + error('Invalid XRef table: wrong types in subsection header'); + } + // Inner loop is over objects themselves + for (var i = tableState.entryNum; i < count; i++) { + tableState.streamPos = stream.pos; + tableState.entryNum = i; + tableState.parserBuf1 = parser.buf1; + tableState.parserBuf2 = parser.buf2; + + var entry = {}; + entry.offset = parser.getObj(); + entry.gen = parser.getObj(); + var type = parser.getObj(); + + if (isCmd(type, 'f')) { + entry.free = true; + } else if (isCmd(type, 'n')) { + entry.uncompressed = true; + } + + // Validate entry obj + if (!isInt(entry.offset) || !isInt(entry.gen) || + !(entry.free || entry.uncompressed)) { + error('Invalid entry in XRef subsection: ' + first + ', ' + count); + } + + if (!this.entries[i + first]) { + this.entries[i + first] = entry; + } + } + + tableState.entryNum = 0; + tableState.streamPos = stream.pos; + tableState.parserBuf1 = parser.buf1; + tableState.parserBuf2 = parser.buf2; + delete tableState.firstEntryNum; + delete tableState.entryCount; + } + + // Per issue 3248: hp scanners generate bad XRef + if (first === 1 && this.entries[1] && this.entries[1].free) { + // shifting the entries + this.entries.shift(); + } + + // Sanity check: as per spec, first object must be free + if (this.entries[0] && !this.entries[0].free) { + error('Invalid XRef table: unexpected first object'); + } + return obj; + }, + + processXRefStream: function XRef_processXRefStream(stream) { + if (!('streamState' in this)) { + // Stores state of the stream as we process it so we can resume + // from middle of stream in case of missing data error + var streamParameters = stream.dict; + var byteWidths = streamParameters.get('W'); + var range = streamParameters.get('Index'); + if (!range) { + range = [0, streamParameters.get('Size')]; + } + + this.streamState = { + entryRanges: range, + byteWidths: byteWidths, + entryNum: 0, + streamPos: stream.pos + }; + } + this.readXRefStream(stream); + delete this.streamState; + + return stream.dict; + }, + + readXRefStream: function XRef_readXRefStream(stream) { + var i, j; + var streamState = this.streamState; + stream.pos = streamState.streamPos; + + var byteWidths = streamState.byteWidths; + var typeFieldWidth = byteWidths[0]; + var offsetFieldWidth = byteWidths[1]; + var generationFieldWidth = byteWidths[2]; + + var entryRanges = streamState.entryRanges; + while (entryRanges.length > 0) { + var first = entryRanges[0]; + var n = entryRanges[1]; + + if (!isInt(first) || !isInt(n)) { + error('Invalid XRef range fields: ' + first + ', ' + n); + } + if (!isInt(typeFieldWidth) || !isInt(offsetFieldWidth) || + !isInt(generationFieldWidth)) { + error('Invalid XRef entry fields length: ' + first + ', ' + n); + } + for (i = streamState.entryNum; i < n; ++i) { + streamState.entryNum = i; + streamState.streamPos = stream.pos; + + var type = 0, offset = 0, generation = 0; + for (j = 0; j < typeFieldWidth; ++j) { + type = (type << 8) | stream.getByte(); + } + // if type field is absent, its default value is 1 + if (typeFieldWidth === 0) { + type = 1; + } + for (j = 0; j < offsetFieldWidth; ++j) { + offset = (offset << 8) | stream.getByte(); + } + for (j = 0; j < generationFieldWidth; ++j) { + generation = (generation << 8) | stream.getByte(); + } + var entry = {}; + entry.offset = offset; + entry.gen = generation; + switch (type) { + case 0: + entry.free = true; + break; + case 1: + entry.uncompressed = true; + break; + case 2: + break; + default: + error('Invalid XRef entry type: ' + type); + } + if (!this.entries[first + i]) { + this.entries[first + i] = entry; + } + } + + streamState.entryNum = 0; + streamState.streamPos = stream.pos; + entryRanges.splice(0, 2); + } + }, + + indexObjects: function XRef_indexObjects() { + // Simple scan through the PDF content to find objects, + // trailers and XRef streams. + function readToken(data, offset) { + var token = '', ch = data[offset]; + while (ch !== 13 && ch !== 10) { + if (++offset >= data.length) { + break; + } + token += String.fromCharCode(ch); + ch = data[offset]; + } + return token; + } + function skipUntil(data, offset, what) { + var length = what.length, dataLength = data.length; + var skipped = 0; + // finding byte sequence + while (offset < dataLength) { + var i = 0; + while (i < length && data[offset + i] === what[i]) { + ++i; + } + if (i >= length) { + break; // sequence found + } + offset++; + skipped++; + } + return skipped; + } + var trailerBytes = new Uint8Array([116, 114, 97, 105, 108, 101, 114]); + var startxrefBytes = new Uint8Array([115, 116, 97, 114, 116, 120, 114, + 101, 102]); + var endobjBytes = new Uint8Array([101, 110, 100, 111, 98, 106]); + var xrefBytes = new Uint8Array([47, 88, 82, 101, 102]); + + var stream = this.stream; + stream.pos = 0; + var buffer = stream.getBytes(); + var position = stream.start, length = buffer.length; + var trailers = [], xrefStms = []; + while (position < length) { + var ch = buffer[position]; + if (ch === 32 || ch === 9 || ch === 13 || ch === 10) { + ++position; + continue; + } + if (ch === 37) { // %-comment + do { + ++position; + if (position >= length) { + break; + } + ch = buffer[position]; + } while (ch !== 13 && ch !== 10); + continue; + } + var token = readToken(buffer, position); + var m; + if (token === 'xref') { + position += skipUntil(buffer, position, trailerBytes); + trailers.push(position); + position += skipUntil(buffer, position, startxrefBytes); + } else if ((m = /^(\d+)\s+(\d+)\s+obj\b/.exec(token))) { + this.entries[m[1]] = { + offset: position, + gen: m[2] | 0, + uncompressed: true + }; + + var contentLength = skipUntil(buffer, position, endobjBytes) + 7; + var content = buffer.subarray(position, position + contentLength); + + // checking XRef stream suspect + // (it shall have '/XRef' and next char is not a letter) + var xrefTagOffset = skipUntil(content, 0, xrefBytes); + if (xrefTagOffset < contentLength && + content[xrefTagOffset + 5] < 64) { + xrefStms.push(position); + this.xrefstms[position] = 1; // don't read it recursively + } + + position += contentLength; + } else { + position += token.length + 1; + } + } + // reading XRef streams + var i, ii; + for (i = 0, ii = xrefStms.length; i < ii; ++i) { + this.startXRefQueue.push(xrefStms[i]); + this.readXRef(/* recoveryMode */ true); + } + // finding main trailer + var dict; + for (i = 0, ii = trailers.length; i < ii; ++i) { + stream.pos = trailers[i]; + var parser = new Parser(new Lexer(stream), true, this); + var obj = parser.getObj(); + if (!isCmd(obj, 'trailer')) { + continue; + } + // read the trailer dictionary + if (!isDict(dict = parser.getObj())) { + continue; + } + // taking the first one with 'ID' + if (dict.has('ID')) { + return dict; + } + } + // no tailer with 'ID', taking last one (if exists) + if (dict) { + return dict; + } + // nothing helps + // calling error() would reject worker with an UnknownErrorException. + throw new InvalidPDFException('Invalid PDF structure'); + }, + + readXRef: function XRef_readXRef(recoveryMode) { + var stream = this.stream; + + try { + while (this.startXRefQueue.length) { + var startXRef = this.startXRefQueue[0]; + + stream.pos = startXRef + stream.start; + + var parser = new Parser(new Lexer(stream), true, this); + var obj = parser.getObj(); + var dict; + + // Get dictionary + if (isCmd(obj, 'xref')) { + // Parse end-of-file XRef + dict = this.processXRefTable(parser); + if (!this.topDict) { + this.topDict = dict; + } + + // Recursively get other XRefs 'XRefStm', if any + obj = dict.get('XRefStm'); + if (isInt(obj)) { + var pos = obj; + // ignore previously loaded xref streams + // (possible infinite recursion) + if (!(pos in this.xrefstms)) { + this.xrefstms[pos] = 1; + this.startXRefQueue.push(pos); + } + } + } else if (isInt(obj)) { + // Parse in-stream XRef + if (!isInt(parser.getObj()) || + !isCmd(parser.getObj(), 'obj') || + !isStream(obj = parser.getObj())) { + error('Invalid XRef stream'); + } + dict = this.processXRefStream(obj); + if (!this.topDict) { + this.topDict = dict; + } + if (!dict) { + error('Failed to read XRef stream'); + } + } else { + error('Invalid XRef stream header'); + } + + // Recursively get previous dictionary, if any + obj = dict.get('Prev'); + if (isInt(obj)) { + this.startXRefQueue.push(obj); + } else if (isRef(obj)) { + // The spec says Prev must not be a reference, i.e. "/Prev NNN" + // This is a fallback for non-compliant PDFs, i.e. "/Prev NNN 0 R" + this.startXRefQueue.push(obj.num); + } + + this.startXRefQueue.shift(); + } + + return this.topDict; + } catch (e) { + if (e instanceof MissingDataException) { + throw e; + } + info('(while reading XRef): ' + e); + } + + if (recoveryMode) { + return; + } + throw new XRefParseException(); + }, + + getEntry: function XRef_getEntry(i) { + var xrefEntry = this.entries[i]; + if (xrefEntry && !xrefEntry.free && xrefEntry.offset) { + return xrefEntry; + } + return null; + }, + + fetchIfRef: function XRef_fetchIfRef(obj) { + if (!isRef(obj)) { + return obj; + } + return this.fetch(obj); + }, + + fetch: function XRef_fetch(ref, suppressEncryption) { + assert(isRef(ref), 'ref object is not a reference'); + var num = ref.num; + if (num in this.cache) { + var cacheEntry = this.cache[num]; + return cacheEntry; + } + + var xrefEntry = this.getEntry(num); + + // the referenced entry can be free + if (xrefEntry === null) { + return (this.cache[num] = null); + } + + if (xrefEntry.uncompressed) { + xrefEntry = this.fetchUncompressed(ref, xrefEntry, suppressEncryption); + } else { + xrefEntry = this.fetchCompressed(xrefEntry, suppressEncryption); + } + if (isDict(xrefEntry)){ + xrefEntry.objId = ref.toString(); + } else if (isStream(xrefEntry)) { + xrefEntry.dict.objId = ref.toString(); + } + return xrefEntry; + }, + + fetchUncompressed: function XRef_fetchUncompressed(ref, xrefEntry, + suppressEncryption) { + var gen = ref.gen; + var num = ref.num; + if (xrefEntry.gen !== gen) { + error('inconsistent generation in XRef'); + } + var stream = this.stream.makeSubStream(xrefEntry.offset + + this.stream.start); + var parser = new Parser(new Lexer(stream), true, this); + var obj1 = parser.getObj(); + var obj2 = parser.getObj(); + var obj3 = parser.getObj(); + if (!isInt(obj1) || parseInt(obj1, 10) !== num || + !isInt(obj2) || parseInt(obj2, 10) !== gen || + !isCmd(obj3)) { + error('bad XRef entry'); + } + if (!isCmd(obj3, 'obj')) { + // some bad PDFs use "obj1234" and really mean 1234 + if (obj3.cmd.indexOf('obj') === 0) { + num = parseInt(obj3.cmd.substring(3), 10); + if (!isNaN(num)) { + return num; + } + } + error('bad XRef entry'); + } + if (this.encrypt && !suppressEncryption) { + xrefEntry = parser.getObj(this.encrypt.createCipherTransform(num, gen)); + } else { + xrefEntry = parser.getObj(); + } + if (!isStream(xrefEntry)) { + this.cache[num] = xrefEntry; + } + return xrefEntry; + }, + + fetchCompressed: function XRef_fetchCompressed(xrefEntry, + suppressEncryption) { + var tableOffset = xrefEntry.offset; + var stream = this.fetch(new Ref(tableOffset, 0)); + if (!isStream(stream)) { + error('bad ObjStm stream'); + } + var first = stream.dict.get('First'); + var n = stream.dict.get('N'); + if (!isInt(first) || !isInt(n)) { + error('invalid first and n parameters for ObjStm stream'); + } + var parser = new Parser(new Lexer(stream), false, this); + parser.allowStreams = true; + var i, entries = [], num, nums = []; + // read the object numbers to populate cache + for (i = 0; i < n; ++i) { + num = parser.getObj(); + if (!isInt(num)) { + error('invalid object number in the ObjStm stream: ' + num); + } + nums.push(num); + var offset = parser.getObj(); + if (!isInt(offset)) { + error('invalid object offset in the ObjStm stream: ' + offset); + } + } + // read stream objects for cache + for (i = 0; i < n; ++i) { + entries.push(parser.getObj()); + num = nums[i]; + var entry = this.entries[num]; + if (entry && entry.offset === tableOffset && entry.gen === i) { + this.cache[num] = entries[i]; + } + } + xrefEntry = entries[xrefEntry.gen]; + if (xrefEntry === undefined) { + error('bad XRef entry for compressed object'); + } + return xrefEntry; + }, + + fetchIfRefAsync: function XRef_fetchIfRefAsync(obj) { + if (!isRef(obj)) { + return Promise.resolve(obj); + } + return this.fetchAsync(obj); + }, + + fetchAsync: function XRef_fetchAsync(ref, suppressEncryption) { + var streamManager = this.stream.manager; + var xref = this; + return new Promise(function tryFetch(resolve, reject) { + try { + resolve(xref.fetch(ref, suppressEncryption)); + } catch (e) { + if (e instanceof MissingDataException) { + streamManager.requestRange(e.begin, e.end, function () { + tryFetch(resolve, reject); + }); + return; + } + reject(e); + } + }); + }, + + getCatalogObj: function XRef_getCatalogObj() { + return this.root; + } + }; + + return XRef; +})(); + +/** + * A NameTree is like a Dict but has some advantageous properties, see the + * spec (7.9.6) for more details. + * TODO: implement all the Dict functions and make this more efficent. + */ +var NameTree = (function NameTreeClosure() { + function NameTree(root, xref) { + this.root = root; + this.xref = xref; + } + + NameTree.prototype = { + getAll: function NameTree_getAll() { + var dict = {}; + if (!this.root) { + return dict; + } + var xref = this.xref; + // reading name tree + var processed = new RefSet(); + processed.put(this.root); + var queue = [this.root]; + while (queue.length > 0) { + var i, n; + var obj = xref.fetchIfRef(queue.shift()); + if (!isDict(obj)) { + continue; + } + if (obj.has('Kids')) { + var kids = obj.get('Kids'); + for (i = 0, n = kids.length; i < n; i++) { + var kid = kids[i]; + if (processed.has(kid)) { + error('invalid destinations'); + } + queue.push(kid); + processed.put(kid); + } + continue; + } + var names = obj.get('Names'); + if (names) { + for (i = 0, n = names.length; i < n; i += 2) { + dict[names[i]] = xref.fetchIfRef(names[i + 1]); + } + } + } + return dict; + }, + + get: function NameTree_get(destinationId) { + if (!this.root) { + return null; + } + + var xref = this.xref; + var kidsOrNames = xref.fetchIfRef(this.root); + var loopCount = 0; + var MAX_NAMES_LEVELS = 10; + var l, r, m; + + // Perform a binary search to quickly find the entry that + // contains the named destination we are looking for. + while (kidsOrNames.has('Kids')) { + loopCount++; + if (loopCount > MAX_NAMES_LEVELS) { + warn('Search depth limit for named destionations has been reached.'); + return null; + } + + var kids = kidsOrNames.get('Kids'); + if (!isArray(kids)) { + return null; + } + + l = 0; + r = kids.length - 1; + while (l <= r) { + m = (l + r) >> 1; + var kid = xref.fetchIfRef(kids[m]); + var limits = kid.get('Limits'); + + if (destinationId < limits[0]) { + r = m - 1; + } else if (destinationId > limits[1]) { + l = m + 1; + } else { + kidsOrNames = xref.fetchIfRef(kids[m]); + break; + } + } + if (l > r) { + return null; + } + } + + // If we get here, then we have found the right entry. Now + // go through the named destinations in the Named dictionary + // until we find the exact destination we're looking for. + var names = kidsOrNames.get('Names'); + if (isArray(names)) { + // Perform a binary search to reduce the lookup time. + l = 0; + r = names.length - 2; + while (l <= r) { + // Check only even indices (0, 2, 4, ...) because the + // odd indices contain the actual D array. + m = (l + r) & ~1; + if (destinationId < names[m]) { + r = m - 2; + } else if (destinationId > names[m]) { + l = m + 2; + } else { + return xref.fetchIfRef(names[m + 1]); + } + } + } + return null; + } + }; + return NameTree; +})(); + +/** + * "A PDF file can refer to the contents of another file by using a File + * Specification (PDF 1.1)", see the spec (7.11) for more details. + * NOTE: Only embedded files are supported (as part of the attachments support) + * TODO: support the 'URL' file system (with caching if !/V), portable + * collections attributes and related files (/RF) + */ +var FileSpec = (function FileSpecClosure() { + function FileSpec(root, xref) { + if (!root || !isDict(root)) { + return; + } + this.xref = xref; + this.root = root; + if (root.has('FS')) { + this.fs = root.get('FS'); + } + this.description = root.has('Desc') ? + stringToPDFString(root.get('Desc')) : + ''; + if (root.has('RF')) { + warn('Related file specifications are not supported'); + } + this.contentAvailable = true; + if (!root.has('EF')) { + this.contentAvailable = false; + warn('Non-embedded file specifications are not supported'); + } + } + + function pickPlatformItem(dict) { + // Look for the filename in this order: + // UF, F, Unix, Mac, DOS + if (dict.has('UF')) { + return dict.get('UF'); + } else if (dict.has('F')) { + return dict.get('F'); + } else if (dict.has('Unix')) { + return dict.get('Unix'); + } else if (dict.has('Mac')) { + return dict.get('Mac'); + } else if (dict.has('DOS')) { + return dict.get('DOS'); + } else { + return null; + } + } + + FileSpec.prototype = { + get filename() { + if (!this._filename && this.root) { + var filename = pickPlatformItem(this.root) || 'unnamed'; + this._filename = stringToPDFString(filename). + replace(/\\\\/g, '\\'). + replace(/\\\//g, '/'). + replace(/\\/g, '/'); + } + return this._filename; + }, + get content() { + if (!this.contentAvailable) { + return null; + } + if (!this.contentRef && this.root) { + this.contentRef = pickPlatformItem(this.root.get('EF')); + } + var content = null; + if (this.contentRef) { + var xref = this.xref; + var fileObj = xref.fetchIfRef(this.contentRef); + if (fileObj && isStream(fileObj)) { + content = fileObj.getBytes(); + } else { + warn('Embedded file specification points to non-existing/invalid ' + + 'content'); + } + } else { + warn('Embedded file specification does not have a content'); + } + return content; + }, + get serializable() { + return { + filename: this.filename, + content: this.content + }; + } + }; + return FileSpec; +})(); + +/** + * A helper for loading missing data in object graphs. It traverses the graph + * depth first and queues up any objects that have missing data. Once it has + * has traversed as many objects that are available it attempts to bundle the + * missing data requests and then resume from the nodes that weren't ready. + * + * NOTE: It provides protection from circular references by keeping track of + * of loaded references. However, you must be careful not to load any graphs + * that have references to the catalog or other pages since that will cause the + * entire PDF document object graph to be traversed. + */ +var ObjectLoader = (function() { + function mayHaveChildren(value) { + return isRef(value) || isDict(value) || isArray(value) || isStream(value); + } + + function addChildren(node, nodesToVisit) { + var value; + if (isDict(node) || isStream(node)) { + var map; + if (isDict(node)) { + map = node.map; + } else { + map = node.dict.map; + } + for (var key in map) { + value = map[key]; + if (mayHaveChildren(value)) { + nodesToVisit.push(value); + } + } + } else if (isArray(node)) { + for (var i = 0, ii = node.length; i < ii; i++) { + value = node[i]; + if (mayHaveChildren(value)) { + nodesToVisit.push(value); + } + } + } + } + + function ObjectLoader(obj, keys, xref) { + this.obj = obj; + this.keys = keys; + this.xref = xref; + this.refSet = null; + } + + ObjectLoader.prototype = { + load: function ObjectLoader_load() { + var keys = this.keys; + this.capability = createPromiseCapability(); + // Don't walk the graph if all the data is already loaded. + if (!(this.xref.stream instanceof ChunkedStream) || + this.xref.stream.getMissingChunks().length === 0) { + this.capability.resolve(); + return this.capability.promise; + } + + this.refSet = new RefSet(); + // Setup the initial nodes to visit. + var nodesToVisit = []; + for (var i = 0; i < keys.length; i++) { + nodesToVisit.push(this.obj[keys[i]]); + } + + this.walk(nodesToVisit); + return this.capability.promise; + }, + + walk: function ObjectLoader_walk(nodesToVisit) { + var nodesToRevisit = []; + var pendingRequests = []; + // DFS walk of the object graph. + while (nodesToVisit.length) { + var currentNode = nodesToVisit.pop(); + + // Only references or chunked streams can cause missing data exceptions. + if (isRef(currentNode)) { + // Skip nodes that have already been visited. + if (this.refSet.has(currentNode)) { + continue; + } + try { + var ref = currentNode; + this.refSet.put(ref); + currentNode = this.xref.fetch(currentNode); + } catch (e) { + if (!(e instanceof MissingDataException)) { + throw e; + } + nodesToRevisit.push(currentNode); + pendingRequests.push({ begin: e.begin, end: e.end }); + } + } + if (currentNode && currentNode.getBaseStreams) { + var baseStreams = currentNode.getBaseStreams(); + var foundMissingData = false; + for (var i = 0; i < baseStreams.length; i++) { + var stream = baseStreams[i]; + if (stream.getMissingChunks && stream.getMissingChunks().length) { + foundMissingData = true; + pendingRequests.push({ + begin: stream.start, + end: stream.end + }); + } + } + if (foundMissingData) { + nodesToRevisit.push(currentNode); + } + } + + addChildren(currentNode, nodesToVisit); + } + + if (pendingRequests.length) { + this.xref.stream.manager.requestRanges(pendingRequests, + function pendingRequestCallback() { + nodesToVisit = nodesToRevisit; + for (var i = 0; i < nodesToRevisit.length; i++) { + var node = nodesToRevisit[i]; + // Remove any reference nodes from the currrent refset so they + // aren't skipped when we revist them. + if (isRef(node)) { + this.refSet.remove(node); + } + } + this.walk(nodesToVisit); + }.bind(this)); + return; + } + // Everything is loaded. + this.refSet = null; + this.capability.resolve(); + } + }; + + return ObjectLoader; +})(); + + +var ISOAdobeCharset = [ + '.notdef', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', + 'percent', 'ampersand', 'quoteright', 'parenleft', 'parenright', + 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero', + 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', + 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question', + 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', + 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', + 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore', + 'quoteleft', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', + 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', + 'braceleft', 'bar', 'braceright', 'asciitilde', 'exclamdown', 'cent', + 'sterling', 'fraction', 'yen', 'florin', 'section', 'currency', + 'quotesingle', 'quotedblleft', 'guillemotleft', 'guilsinglleft', + 'guilsinglright', 'fi', 'fl', 'endash', 'dagger', 'daggerdbl', + 'periodcentered', 'paragraph', 'bullet', 'quotesinglbase', + 'quotedblbase', 'quotedblright', 'guillemotright', 'ellipsis', + 'perthousand', 'questiondown', 'grave', 'acute', 'circumflex', 'tilde', + 'macron', 'breve', 'dotaccent', 'dieresis', 'ring', 'cedilla', + 'hungarumlaut', 'ogonek', 'caron', 'emdash', 'AE', 'ordfeminine', + 'Lslash', 'Oslash', 'OE', 'ordmasculine', 'ae', 'dotlessi', 'lslash', + 'oslash', 'oe', 'germandbls', 'onesuperior', 'logicalnot', 'mu', + 'trademark', 'Eth', 'onehalf', 'plusminus', 'Thorn', 'onequarter', + 'divide', 'brokenbar', 'degree', 'thorn', 'threequarters', 'twosuperior', + 'registered', 'minus', 'eth', 'multiply', 'threesuperior', 'copyright', + 'Aacute', 'Acircumflex', 'Adieresis', 'Agrave', 'Aring', 'Atilde', + 'Ccedilla', 'Eacute', 'Ecircumflex', 'Edieresis', 'Egrave', 'Iacute', + 'Icircumflex', 'Idieresis', 'Igrave', 'Ntilde', 'Oacute', 'Ocircumflex', + 'Odieresis', 'Ograve', 'Otilde', 'Scaron', 'Uacute', 'Ucircumflex', + 'Udieresis', 'Ugrave', 'Yacute', 'Ydieresis', 'Zcaron', 'aacute', + 'acircumflex', 'adieresis', 'agrave', 'aring', 'atilde', 'ccedilla', + 'eacute', 'ecircumflex', 'edieresis', 'egrave', 'iacute', 'icircumflex', + 'idieresis', 'igrave', 'ntilde', 'oacute', 'ocircumflex', 'odieresis', + 'ograve', 'otilde', 'scaron', 'uacute', 'ucircumflex', 'udieresis', + 'ugrave', 'yacute', 'ydieresis', 'zcaron' +]; + +var ExpertCharset = [ + '.notdef', 'space', 'exclamsmall', 'Hungarumlautsmall', 'dollaroldstyle', + 'dollarsuperior', 'ampersandsmall', 'Acutesmall', 'parenleftsuperior', + 'parenrightsuperior', 'twodotenleader', 'onedotenleader', 'comma', + 'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle', + 'twooldstyle', 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle', + 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', + 'colon', 'semicolon', 'commasuperior', 'threequartersemdash', + 'periodsuperior', 'questionsmall', 'asuperior', 'bsuperior', + 'centsuperior', 'dsuperior', 'esuperior', 'isuperior', 'lsuperior', + 'msuperior', 'nsuperior', 'osuperior', 'rsuperior', 'ssuperior', + 'tsuperior', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior', + 'parenrightinferior', 'Circumflexsmall', 'hyphensuperior', 'Gravesmall', + 'Asmall', 'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall', + 'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall', 'Msmall', 'Nsmall', + 'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall', + 'Vsmall', 'Wsmall', 'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary', + 'onefitted', 'rupiah', 'Tildesmall', 'exclamdownsmall', 'centoldstyle', + 'Lslashsmall', 'Scaronsmall', 'Zcaronsmall', 'Dieresissmall', + 'Brevesmall', 'Caronsmall', 'Dotaccentsmall', 'Macronsmall', + 'figuredash', 'hypheninferior', 'Ogoneksmall', 'Ringsmall', + 'Cedillasmall', 'onequarter', 'onehalf', 'threequarters', + 'questiondownsmall', 'oneeighth', 'threeeighths', 'fiveeighths', + 'seveneighths', 'onethird', 'twothirds', 'zerosuperior', 'onesuperior', + 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior', + 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior', + 'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior', + 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior', + 'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior', + 'periodinferior', 'commainferior', 'Agravesmall', 'Aacutesmall', + 'Acircumflexsmall', 'Atildesmall', 'Adieresissmall', 'Aringsmall', + 'AEsmall', 'Ccedillasmall', 'Egravesmall', 'Eacutesmall', + 'Ecircumflexsmall', 'Edieresissmall', 'Igravesmall', 'Iacutesmall', + 'Icircumflexsmall', 'Idieresissmall', 'Ethsmall', 'Ntildesmall', + 'Ogravesmall', 'Oacutesmall', 'Ocircumflexsmall', 'Otildesmall', + 'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall', 'Uacutesmall', + 'Ucircumflexsmall', 'Udieresissmall', 'Yacutesmall', 'Thornsmall', + 'Ydieresissmall' +]; + +var ExpertSubsetCharset = [ + '.notdef', 'space', 'dollaroldstyle', 'dollarsuperior', + 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader', + 'onedotenleader', 'comma', 'hyphen', 'period', 'fraction', + 'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle', + 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle', + 'eightoldstyle', 'nineoldstyle', 'colon', 'semicolon', 'commasuperior', + 'threequartersemdash', 'periodsuperior', 'asuperior', 'bsuperior', + 'centsuperior', 'dsuperior', 'esuperior', 'isuperior', 'lsuperior', + 'msuperior', 'nsuperior', 'osuperior', 'rsuperior', 'ssuperior', + 'tsuperior', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior', + 'parenrightinferior', 'hyphensuperior', 'colonmonetary', 'onefitted', + 'rupiah', 'centoldstyle', 'figuredash', 'hypheninferior', 'onequarter', + 'onehalf', 'threequarters', 'oneeighth', 'threeeighths', 'fiveeighths', + 'seveneighths', 'onethird', 'twothirds', 'zerosuperior', 'onesuperior', + 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior', + 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior', + 'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior', + 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior', + 'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior', + 'periodinferior', 'commainferior' +]; + + +var DEFAULT_ICON_SIZE = 22; // px +var SUPPORTED_TYPES = ['Link', 'Text', 'Widget']; + +var Annotation = (function AnnotationClosure() { + // 12.5.5: Algorithm: Appearance streams + function getTransformMatrix(rect, bbox, matrix) { + var bounds = Util.getAxialAlignedBoundingBox(bbox, matrix); + var minX = bounds[0]; + var minY = bounds[1]; + var maxX = bounds[2]; + var maxY = bounds[3]; + + if (minX === maxX || minY === maxY) { + // From real-life file, bbox was [0, 0, 0, 0]. In this case, + // just apply the transform for rect + return [1, 0, 0, 1, rect[0], rect[1]]; + } + + var xRatio = (rect[2] - rect[0]) / (maxX - minX); + var yRatio = (rect[3] - rect[1]) / (maxY - minY); + return [ + xRatio, + 0, + 0, + yRatio, + rect[0] - minX * xRatio, + rect[1] - minY * yRatio + ]; + } + + function getDefaultAppearance(dict) { + var appearanceState = dict.get('AP'); + if (!isDict(appearanceState)) { + return; + } + + var appearance; + var appearances = appearanceState.get('N'); + if (isDict(appearances)) { + var as = dict.get('AS'); + if (as && appearances.has(as.name)) { + appearance = appearances.get(as.name); + } + } else { + appearance = appearances; + } + return appearance; + } + + function Annotation(params) { + var dict = params.dict; + var data = this.data = {}; + + data.subtype = dict.get('Subtype').name; + var rect = dict.get('Rect') || [0, 0, 0, 0]; + data.rect = Util.normalizeRect(rect); + data.annotationFlags = dict.get('F'); + + var color = dict.get('C'); + if (!color) { + // The PDF spec does not mention how a missing color array is interpreted. + // Adobe Reader seems to default to black in this case. + data.color = [0, 0, 0]; + } else if (isArray(color)) { + switch (color.length) { + case 0: + // Empty array denotes transparent border. + data.color = null; + break; + case 1: + // TODO: implement DeviceGray + break; + case 3: + data.color = color; + break; + case 4: + // TODO: implement DeviceCMYK + break; + } + } + + // Some types of annotations have border style dict which has more + // info than the border array + if (dict.has('BS')) { + var borderStyle = dict.get('BS'); + data.borderWidth = borderStyle.has('W') ? borderStyle.get('W') : 1; + } else { + var borderArray = dict.get('Border') || [0, 0, 1]; + data.borderWidth = borderArray[2] || 0; + + // TODO: implement proper support for annotations with line dash patterns. + var dashArray = borderArray[3]; + if (data.borderWidth > 0 && dashArray) { + if (!isArray(dashArray)) { + // Ignore the border if dashArray is not actually an array, + // this is consistent with the behaviour in Adobe Reader. + data.borderWidth = 0; + } else { + var dashArrayLength = dashArray.length; + if (dashArrayLength > 0) { + // According to the PDF specification: the elements in a dashArray + // shall be numbers that are nonnegative and not all equal to zero. + var isInvalid = false; + var numPositive = 0; + for (var i = 0; i < dashArrayLength; i++) { + var validNumber = (+dashArray[i] >= 0); + if (!validNumber) { + isInvalid = true; + break; + } else if (dashArray[i] > 0) { + numPositive++; + } + } + if (isInvalid || numPositive === 0) { + data.borderWidth = 0; + } + } + } + } + } + + this.appearance = getDefaultAppearance(dict); + data.hasAppearance = !!this.appearance; + data.id = params.ref.num; + } + + Annotation.prototype = { + + getData: function Annotation_getData() { + return this.data; + }, + + isInvisible: function Annotation_isInvisible() { + var data = this.data; + if (data && SUPPORTED_TYPES.indexOf(data.subtype) !== -1) { + return false; + } else { + return !!(data && + data.annotationFlags && // Default: not invisible + data.annotationFlags & 0x1); // Invisible + } + }, + + isViewable: function Annotation_isViewable() { + var data = this.data; + return !!(!this.isInvisible() && + data && + (!data.annotationFlags || + !(data.annotationFlags & 0x22)) && // Hidden or NoView + data.rect); // rectangle is necessary + }, + + isPrintable: function Annotation_isPrintable() { + var data = this.data; + return !!(!this.isInvisible() && + data && + data.annotationFlags && // Default: not printable + data.annotationFlags & 0x4 && // Print + !(data.annotationFlags & 0x2) && // Hidden + data.rect); // rectangle is necessary + }, + + loadResources: function Annotation_loadResources(keys) { + return new Promise(function (resolve, reject) { + this.appearance.dict.getAsync('Resources').then(function (resources) { + if (!resources) { + resolve(); + return; + } + var objectLoader = new ObjectLoader(resources.map, + keys, + resources.xref); + objectLoader.load().then(function() { + resolve(resources); + }, reject); + }, reject); + }.bind(this)); + }, + + getOperatorList: function Annotation_getOperatorList(evaluator) { + + if (!this.appearance) { + return Promise.resolve(new OperatorList()); + } + + var data = this.data; + + var appearanceDict = this.appearance.dict; + var resourcesPromise = this.loadResources([ + 'ExtGState', + 'ColorSpace', + 'Pattern', + 'Shading', + 'XObject', + 'Font' + // ProcSet + // Properties + ]); + var bbox = appearanceDict.get('BBox') || [0, 0, 1, 1]; + var matrix = appearanceDict.get('Matrix') || [1, 0, 0, 1, 0 ,0]; + var transform = getTransformMatrix(data.rect, bbox, matrix); + var self = this; + + return resourcesPromise.then(function(resources) { + var opList = new OperatorList(); + opList.addOp(OPS.beginAnnotation, [data.rect, transform, matrix]); + return evaluator.getOperatorList(self.appearance, resources, opList). + then(function () { + opList.addOp(OPS.endAnnotation, []); + self.appearance.reset(); + return opList; + }); + }); + } + }; + + Annotation.getConstructor = + function Annotation_getConstructor(subtype, fieldType) { + + if (!subtype) { + return; + } + + // TODO(mack): Implement FreeText annotations + if (subtype === 'Link') { + return LinkAnnotation; + } else if (subtype === 'Text') { + return TextAnnotation; + } else if (subtype === 'Widget') { + if (!fieldType) { + return; + } + + if (fieldType === 'Tx') { + return TextWidgetAnnotation; + } else { + return WidgetAnnotation; + } + } else { + return Annotation; + } + }; + + Annotation.fromRef = function Annotation_fromRef(xref, ref) { + + var dict = xref.fetchIfRef(ref); + if (!isDict(dict)) { + return; + } + + var subtype = dict.get('Subtype'); + subtype = isName(subtype) ? subtype.name : ''; + if (!subtype) { + return; + } + + var fieldType = Util.getInheritableProperty(dict, 'FT'); + fieldType = isName(fieldType) ? fieldType.name : ''; + + var Constructor = Annotation.getConstructor(subtype, fieldType); + if (!Constructor) { + return; + } + + var params = { + dict: dict, + ref: ref, + }; + + var annotation = new Constructor(params); + + if (annotation.isViewable() || annotation.isPrintable()) { + return annotation; + } else { + if (SUPPORTED_TYPES.indexOf(subtype) === -1) { + warn('unimplemented annotation type: ' + subtype); + } + } + }; + + Annotation.appendToOperatorList = function Annotation_appendToOperatorList( + annotations, opList, pdfManager, partialEvaluator, intent) { + + function reject(e) { + annotationsReadyCapability.reject(e); + } + + var annotationsReadyCapability = createPromiseCapability(); + + var annotationPromises = []; + for (var i = 0, n = annotations.length; i < n; ++i) { + if (intent === 'display' && annotations[i].isViewable() || + intent === 'print' && annotations[i].isPrintable()) { + annotationPromises.push( + annotations[i].getOperatorList(partialEvaluator)); + } + } + Promise.all(annotationPromises).then(function(datas) { + opList.addOp(OPS.beginAnnotations, []); + for (var i = 0, n = datas.length; i < n; ++i) { + var annotOpList = datas[i]; + opList.addOpList(annotOpList); + } + opList.addOp(OPS.endAnnotations, []); + annotationsReadyCapability.resolve(); + }, reject); + + return annotationsReadyCapability.promise; + }; + + return Annotation; +})(); + +var WidgetAnnotation = (function WidgetAnnotationClosure() { + + function WidgetAnnotation(params) { + Annotation.call(this, params); + + var dict = params.dict; + var data = this.data; + + data.fieldValue = stringToPDFString( + Util.getInheritableProperty(dict, 'V') || ''); + data.alternativeText = stringToPDFString(dict.get('TU') || ''); + data.defaultAppearance = Util.getInheritableProperty(dict, 'DA') || ''; + var fieldType = Util.getInheritableProperty(dict, 'FT'); + data.fieldType = isName(fieldType) ? fieldType.name : ''; + data.fieldFlags = Util.getInheritableProperty(dict, 'Ff') || 0; + this.fieldResources = Util.getInheritableProperty(dict, 'DR') || Dict.empty; + + // Building the full field name by collecting the field and + // its ancestors 'T' data and joining them using '.'. + var fieldName = []; + var namedItem = dict; + var ref = params.ref; + while (namedItem) { + var parent = namedItem.get('Parent'); + var parentRef = namedItem.getRaw('Parent'); + var name = namedItem.get('T'); + if (name) { + fieldName.unshift(stringToPDFString(name)); + } else if (parent && ref) { + // The field name is absent, that means more than one field + // with the same name may exist. Replacing the empty name + // with the '`' plus index in the parent's 'Kids' array. + // This is not in the PDF spec but necessary to id the + // the input controls. + var kids = parent.get('Kids'); + var j, jj; + for (j = 0, jj = kids.length; j < jj; j++) { + var kidRef = kids[j]; + if (kidRef.num === ref.num && kidRef.gen === ref.gen) { + break; + } + } + fieldName.unshift('`' + j); + } + namedItem = parent; + ref = parentRef; + } + data.fullName = fieldName.join('.'); + } + + var parent = Annotation.prototype; + Util.inherit(WidgetAnnotation, Annotation, { + isViewable: function WidgetAnnotation_isViewable() { + if (this.data.fieldType === 'Sig') { + warn('unimplemented annotation type: Widget signature'); + return false; + } + + return parent.isViewable.call(this); + } + }); + + return WidgetAnnotation; +})(); + +var TextWidgetAnnotation = (function TextWidgetAnnotationClosure() { + function TextWidgetAnnotation(params) { + WidgetAnnotation.call(this, params); + + this.data.textAlignment = Util.getInheritableProperty(params.dict, 'Q'); + this.data.annotationType = AnnotationType.WIDGET; + this.data.hasHtml = !this.data.hasAppearance && !!this.data.fieldValue; + } + + Util.inherit(TextWidgetAnnotation, WidgetAnnotation, { + getOperatorList: function TextWidgetAnnotation_getOperatorList(evaluator) { + if (this.appearance) { + return Annotation.prototype.getOperatorList.call(this, evaluator); + } + + var opList = new OperatorList(); + var data = this.data; + + // Even if there is an appearance stream, ignore it. This is the + // behaviour used by Adobe Reader. + if (!data.defaultAppearance) { + return Promise.resolve(opList); + } + + var stream = new Stream(stringToBytes(data.defaultAppearance)); + return evaluator.getOperatorList(stream, this.fieldResources, opList). + then(function () { + return opList; + }); + } + }); + + return TextWidgetAnnotation; +})(); + +var InteractiveAnnotation = (function InteractiveAnnotationClosure() { + function InteractiveAnnotation(params) { + Annotation.call(this, params); + + this.data.hasHtml = true; + } + + Util.inherit(InteractiveAnnotation, Annotation, { }); + + return InteractiveAnnotation; +})(); + +var TextAnnotation = (function TextAnnotationClosure() { + function TextAnnotation(params) { + InteractiveAnnotation.call(this, params); + + var dict = params.dict; + var data = this.data; + + var content = dict.get('Contents'); + var title = dict.get('T'); + data.annotationType = AnnotationType.TEXT; + data.content = stringToPDFString(content || ''); + data.title = stringToPDFString(title || ''); + + if (data.hasAppearance) { + data.name = 'NoIcon'; + } else { + data.rect[1] = data.rect[3] - DEFAULT_ICON_SIZE; + data.rect[2] = data.rect[0] + DEFAULT_ICON_SIZE; + data.name = dict.has('Name') ? dict.get('Name').name : 'Note'; + } + + if (dict.has('C')) { + data.hasBgColor = true; + } + } + + Util.inherit(TextAnnotation, InteractiveAnnotation, { }); + + return TextAnnotation; +})(); + +var LinkAnnotation = (function LinkAnnotationClosure() { + function LinkAnnotation(params) { + InteractiveAnnotation.call(this, params); + + var dict = params.dict; + var data = this.data; + data.annotationType = AnnotationType.LINK; + + var action = dict.get('A'); + if (action && isDict(action)) { + var linkType = action.get('S').name; + if (linkType === 'URI') { + var url = action.get('URI'); + if (isName(url)) { + // Some bad PDFs do not put parentheses around relative URLs. + url = '/' + url.name; + } else if (url) { + url = addDefaultProtocolToUrl(url); + } + // TODO: pdf spec mentions urls can be relative to a Base + // entry in the dictionary. + if (!isValidUrl(url, false)) { + url = ''; + } + data.url = url; + } else if (linkType === 'GoTo') { + data.dest = action.get('D'); + } else if (linkType === 'GoToR') { + var urlDict = action.get('F'); + if (isDict(urlDict)) { + // We assume that the 'url' is a Filspec dictionary + // and fetch the url without checking any further + url = urlDict.get('F') || ''; + } + + // TODO: pdf reference says that GoToR + // can also have 'NewWindow' attribute + if (!isValidUrl(url, false)) { + url = ''; + } + data.url = url; + data.dest = action.get('D'); + } else if (linkType === 'Named') { + data.action = action.get('N').name; + } else { + warn('unrecognized link type: ' + linkType); + } + } else if (dict.has('Dest')) { + // simple destination link + var dest = dict.get('Dest'); + data.dest = isName(dest) ? dest.name : dest; + } + } + + // Lets URLs beginning with 'www.' default to using the 'http://' protocol. + function addDefaultProtocolToUrl(url) { + if (url && url.indexOf('www.') === 0) { + return ('http://' + url); + } + return url; + } + + Util.inherit(LinkAnnotation, InteractiveAnnotation, { }); + + return LinkAnnotation; +})(); + + +var PDFFunction = (function PDFFunctionClosure() { + var CONSTRUCT_SAMPLED = 0; + var CONSTRUCT_INTERPOLATED = 2; + var CONSTRUCT_STICHED = 3; + var CONSTRUCT_POSTSCRIPT = 4; + + return { + getSampleArray: function PDFFunction_getSampleArray(size, outputSize, bps, + str) { + var i, ii; + var length = 1; + for (i = 0, ii = size.length; i < ii; i++) { + length *= size[i]; + } + length *= outputSize; + + var array = new Array(length); + var codeSize = 0; + var codeBuf = 0; + // 32 is a valid bps so shifting won't work + var sampleMul = 1.0 / (Math.pow(2.0, bps) - 1); + + var strBytes = str.getBytes((length * bps + 7) / 8); + var strIdx = 0; + for (i = 0; i < length; i++) { + while (codeSize < bps) { + codeBuf <<= 8; + codeBuf |= strBytes[strIdx++]; + codeSize += 8; + } + codeSize -= bps; + array[i] = (codeBuf >> codeSize) * sampleMul; + codeBuf &= (1 << codeSize) - 1; + } + return array; + }, + + getIR: function PDFFunction_getIR(xref, fn) { + var dict = fn.dict; + if (!dict) { + dict = fn; + } + + var types = [this.constructSampled, + null, + this.constructInterpolated, + this.constructStiched, + this.constructPostScript]; + + var typeNum = dict.get('FunctionType'); + var typeFn = types[typeNum]; + if (!typeFn) { + error('Unknown type of function'); + } + + return typeFn.call(this, fn, dict, xref); + }, + + fromIR: function PDFFunction_fromIR(IR) { + var type = IR[0]; + switch (type) { + case CONSTRUCT_SAMPLED: + return this.constructSampledFromIR(IR); + case CONSTRUCT_INTERPOLATED: + return this.constructInterpolatedFromIR(IR); + case CONSTRUCT_STICHED: + return this.constructStichedFromIR(IR); + //case CONSTRUCT_POSTSCRIPT: + default: + return this.constructPostScriptFromIR(IR); + } + }, + + parse: function PDFFunction_parse(xref, fn) { + var IR = this.getIR(xref, fn); + return this.fromIR(IR); + }, + + parseArray: function PDFFunction_parseArray(xref, fnObj) { + if (!isArray(fnObj)) { + // not an array -- parsing as regular function + return this.parse(xref, fnObj); + } + + var fnArray = []; + for (var j = 0, jj = fnObj.length; j < jj; j++) { + var obj = xref.fetchIfRef(fnObj[j]); + fnArray.push(PDFFunction.parse(xref, obj)); + } + return function (src, srcOffset, dest, destOffset) { + for (var i = 0, ii = fnArray.length; i < ii; i++) { + fnArray[i](src, srcOffset, dest, destOffset + i); + } + }; + }, + + constructSampled: function PDFFunction_constructSampled(str, dict) { + function toMultiArray(arr) { + var inputLength = arr.length; + var out = []; + var index = 0; + for (var i = 0; i < inputLength; i += 2) { + out[index] = [arr[i], arr[i + 1]]; + ++index; + } + return out; + } + var domain = dict.get('Domain'); + var range = dict.get('Range'); + + if (!domain || !range) { + error('No domain or range'); + } + + var inputSize = domain.length / 2; + var outputSize = range.length / 2; + + domain = toMultiArray(domain); + range = toMultiArray(range); + + var size = dict.get('Size'); + var bps = dict.get('BitsPerSample'); + var order = dict.get('Order') || 1; + if (order !== 1) { + // No description how cubic spline interpolation works in PDF32000:2008 + // As in poppler, ignoring order, linear interpolation may work as good + info('No support for cubic spline interpolation: ' + order); + } + + var encode = dict.get('Encode'); + if (!encode) { + encode = []; + for (var i = 0; i < inputSize; ++i) { + encode.push(0); + encode.push(size[i] - 1); + } + } + encode = toMultiArray(encode); + + var decode = dict.get('Decode'); + if (!decode) { + decode = range; + } else { + decode = toMultiArray(decode); + } + + var samples = this.getSampleArray(size, outputSize, bps, str); + + return [ + CONSTRUCT_SAMPLED, inputSize, domain, encode, decode, samples, size, + outputSize, Math.pow(2, bps) - 1, range + ]; + }, + + constructSampledFromIR: function PDFFunction_constructSampledFromIR(IR) { + // See chapter 3, page 109 of the PDF reference + function interpolate(x, xmin, xmax, ymin, ymax) { + return ymin + ((x - xmin) * ((ymax - ymin) / (xmax - xmin))); + } + + return function constructSampledFromIRResult(src, srcOffset, + dest, destOffset) { + // See chapter 3, page 110 of the PDF reference. + var m = IR[1]; + var domain = IR[2]; + var encode = IR[3]; + var decode = IR[4]; + var samples = IR[5]; + var size = IR[6]; + var n = IR[7]; + //var mask = IR[8]; + var range = IR[9]; + + // Building the cube vertices: its part and sample index + // http://rjwagner49.com/Mathematics/Interpolation.pdf + var cubeVertices = 1 << m; + var cubeN = new Float64Array(cubeVertices); + var cubeVertex = new Uint32Array(cubeVertices); + var i, j; + for (j = 0; j < cubeVertices; j++) { + cubeN[j] = 1; + } + + var k = n, pos = 1; + // Map x_i to y_j for 0 <= i < m using the sampled function. + for (i = 0; i < m; ++i) { + // x_i' = min(max(x_i, Domain_2i), Domain_2i+1) + var domain_2i = domain[i][0]; + var domain_2i_1 = domain[i][1]; + var xi = Math.min(Math.max(src[srcOffset +i], domain_2i), + domain_2i_1); + + // e_i = Interpolate(x_i', Domain_2i, Domain_2i+1, + // Encode_2i, Encode_2i+1) + var e = interpolate(xi, domain_2i, domain_2i_1, + encode[i][0], encode[i][1]); + + // e_i' = min(max(e_i, 0), Size_i - 1) + var size_i = size[i]; + e = Math.min(Math.max(e, 0), size_i - 1); + + // Adjusting the cube: N and vertex sample index + var e0 = e < size_i - 1 ? Math.floor(e) : e - 1; // e1 = e0 + 1; + var n0 = e0 + 1 - e; // (e1 - e) / (e1 - e0); + var n1 = e - e0; // (e - e0) / (e1 - e0); + var offset0 = e0 * k; + var offset1 = offset0 + k; // e1 * k + for (j = 0; j < cubeVertices; j++) { + if (j & pos) { + cubeN[j] *= n1; + cubeVertex[j] += offset1; + } else { + cubeN[j] *= n0; + cubeVertex[j] += offset0; + } + } + + k *= size_i; + pos <<= 1; + } + + for (j = 0; j < n; ++j) { + // Sum all cube vertices' samples portions + var rj = 0; + for (i = 0; i < cubeVertices; i++) { + rj += samples[cubeVertex[i] + j] * cubeN[i]; + } + + // r_j' = Interpolate(r_j, 0, 2^BitsPerSample - 1, + // Decode_2j, Decode_2j+1) + rj = interpolate(rj, 0, 1, decode[j][0], decode[j][1]); + + // y_j = min(max(r_j, range_2j), range_2j+1) + dest[destOffset + j] = Math.min(Math.max(rj, range[j][0]), + range[j][1]); + } + }; + }, + + constructInterpolated: function PDFFunction_constructInterpolated(str, + dict) { + var c0 = dict.get('C0') || [0]; + var c1 = dict.get('C1') || [1]; + var n = dict.get('N'); + + if (!isArray(c0) || !isArray(c1)) { + error('Illegal dictionary for interpolated function'); + } + + var length = c0.length; + var diff = []; + for (var i = 0; i < length; ++i) { + diff.push(c1[i] - c0[i]); + } + + return [CONSTRUCT_INTERPOLATED, c0, diff, n]; + }, + + constructInterpolatedFromIR: + function PDFFunction_constructInterpolatedFromIR(IR) { + var c0 = IR[1]; + var diff = IR[2]; + var n = IR[3]; + + var length = diff.length; + + return function constructInterpolatedFromIRResult(src, srcOffset, + dest, destOffset) { + var x = n === 1 ? src[srcOffset] : Math.pow(src[srcOffset], n); + + for (var j = 0; j < length; ++j) { + dest[destOffset + j] = c0[j] + (x * diff[j]); + } + }; + }, + + constructStiched: function PDFFunction_constructStiched(fn, dict, xref) { + var domain = dict.get('Domain'); + + if (!domain) { + error('No domain'); + } + + var inputSize = domain.length / 2; + if (inputSize !== 1) { + error('Bad domain for stiched function'); + } + + var fnRefs = dict.get('Functions'); + var fns = []; + for (var i = 0, ii = fnRefs.length; i < ii; ++i) { + fns.push(PDFFunction.getIR(xref, xref.fetchIfRef(fnRefs[i]))); + } + + var bounds = dict.get('Bounds'); + var encode = dict.get('Encode'); + + return [CONSTRUCT_STICHED, domain, bounds, encode, fns]; + }, + + constructStichedFromIR: function PDFFunction_constructStichedFromIR(IR) { + var domain = IR[1]; + var bounds = IR[2]; + var encode = IR[3]; + var fnsIR = IR[4]; + var fns = []; + var tmpBuf = new Float32Array(1); + + for (var i = 0, ii = fnsIR.length; i < ii; i++) { + fns.push(PDFFunction.fromIR(fnsIR[i])); + } + + return function constructStichedFromIRResult(src, srcOffset, + dest, destOffset) { + var clip = function constructStichedFromIRClip(v, min, max) { + if (v > max) { + v = max; + } else if (v < min) { + v = min; + } + return v; + }; + + // clip to domain + var v = clip(src[srcOffset], domain[0], domain[1]); + // calulate which bound the value is in + for (var i = 0, ii = bounds.length; i < ii; ++i) { + if (v < bounds[i]) { + break; + } + } + + // encode value into domain of function + var dmin = domain[0]; + if (i > 0) { + dmin = bounds[i - 1]; + } + var dmax = domain[1]; + if (i < bounds.length) { + dmax = bounds[i]; + } + + var rmin = encode[2 * i]; + var rmax = encode[2 * i + 1]; + + tmpBuf[0] = rmin + (v - dmin) * (rmax - rmin) / (dmax - dmin); + + // call the appropriate function + fns[i](tmpBuf, 0, dest, destOffset); + }; + }, + + constructPostScript: function PDFFunction_constructPostScript(fn, dict, + xref) { + var domain = dict.get('Domain'); + var range = dict.get('Range'); + + if (!domain) { + error('No domain.'); + } + + if (!range) { + error('No range.'); + } + + var lexer = new PostScriptLexer(fn); + var parser = new PostScriptParser(lexer); + var code = parser.parse(); + + return [CONSTRUCT_POSTSCRIPT, domain, range, code]; + }, + + constructPostScriptFromIR: function PDFFunction_constructPostScriptFromIR( + IR) { + var domain = IR[1]; + var range = IR[2]; + var code = IR[3]; + + var compiled = (new PostScriptCompiler()).compile(code, domain, range); + if (compiled) { + // Compiled function consists of simple expressions such as addition, + // subtraction, Math.max, and also contains 'var' and 'return' + // statements. See the generation in the PostScriptCompiler below. + /*jshint -W054 */ + return new Function('src', 'srcOffset', 'dest', 'destOffset', compiled); + } + + info('Unable to compile PS function'); + + var numOutputs = range.length >> 1; + var numInputs = domain.length >> 1; + var evaluator = new PostScriptEvaluator(code); + // Cache the values for a big speed up, the cache size is limited though + // since the number of possible values can be huge from a PS function. + var cache = {}; + // The MAX_CACHE_SIZE is set to ~4x the maximum number of distinct values + // seen in our tests. + var MAX_CACHE_SIZE = 2048 * 4; + var cache_available = MAX_CACHE_SIZE; + var tmpBuf = new Float32Array(numInputs); + + return function constructPostScriptFromIRResult(src, srcOffset, + dest, destOffset) { + var i, value; + var key = ''; + var input = tmpBuf; + for (i = 0; i < numInputs; i++) { + value = src[srcOffset + i]; + input[i] = value; + key += value + '_'; + } + + var cachedValue = cache[key]; + if (cachedValue !== undefined) { + dest.set(cachedValue, destOffset); + return; + } + + var output = new Float32Array(numOutputs); + var stack = evaluator.execute(input); + var stackIndex = stack.length - numOutputs; + for (i = 0; i < numOutputs; i++) { + value = stack[stackIndex + i]; + var bound = range[i * 2]; + if (value < bound) { + value = bound; + } else { + bound = range[i * 2 +1]; + if (value > bound) { + value = bound; + } + } + output[i] = value; + } + if (cache_available > 0) { + cache_available--; + cache[key] = output; + } + dest.set(output, destOffset); + }; + } + }; +})(); + +function isPDFFunction(v) { + var fnDict; + if (typeof v !== 'object') { + return false; + } else if (isDict(v)) { + fnDict = v; + } else if (isStream(v)) { + fnDict = v.dict; + } else { + return false; + } + return fnDict.has('FunctionType'); +} + +var PostScriptStack = (function PostScriptStackClosure() { + var MAX_STACK_SIZE = 100; + function PostScriptStack(initialStack) { + this.stack = !initialStack ? [] : + Array.prototype.slice.call(initialStack, 0); + } + + PostScriptStack.prototype = { + push: function PostScriptStack_push(value) { + if (this.stack.length >= MAX_STACK_SIZE) { + error('PostScript function stack overflow.'); + } + this.stack.push(value); + }, + pop: function PostScriptStack_pop() { + if (this.stack.length <= 0) { + error('PostScript function stack underflow.'); + } + return this.stack.pop(); + }, + copy: function PostScriptStack_copy(n) { + if (this.stack.length + n >= MAX_STACK_SIZE) { + error('PostScript function stack overflow.'); + } + var stack = this.stack; + for (var i = stack.length - n, j = n - 1; j >= 0; j--, i++) { + stack.push(stack[i]); + } + }, + index: function PostScriptStack_index(n) { + this.push(this.stack[this.stack.length - n - 1]); + }, + // rotate the last n stack elements p times + roll: function PostScriptStack_roll(n, p) { + var stack = this.stack; + var l = stack.length - n; + var r = stack.length - 1, c = l + (p - Math.floor(p / n) * n), i, j, t; + for (i = l, j = r; i < j; i++, j--) { + t = stack[i]; stack[i] = stack[j]; stack[j] = t; + } + for (i = l, j = c - 1; i < j; i++, j--) { + t = stack[i]; stack[i] = stack[j]; stack[j] = t; + } + for (i = c, j = r; i < j; i++, j--) { + t = stack[i]; stack[i] = stack[j]; stack[j] = t; + } + } + }; + return PostScriptStack; +})(); +var PostScriptEvaluator = (function PostScriptEvaluatorClosure() { + function PostScriptEvaluator(operators) { + this.operators = operators; + } + PostScriptEvaluator.prototype = { + execute: function PostScriptEvaluator_execute(initialStack) { + var stack = new PostScriptStack(initialStack); + var counter = 0; + var operators = this.operators; + var length = operators.length; + var operator, a, b; + while (counter < length) { + operator = operators[counter++]; + if (typeof operator === 'number') { + // Operator is really an operand and should be pushed to the stack. + stack.push(operator); + continue; + } + switch (operator) { + // non standard ps operators + case 'jz': // jump if false + b = stack.pop(); + a = stack.pop(); + if (!a) { + counter = b; + } + break; + case 'j': // jump + a = stack.pop(); + counter = a; + break; + + // all ps operators in alphabetical order (excluding if/ifelse) + case 'abs': + a = stack.pop(); + stack.push(Math.abs(a)); + break; + case 'add': + b = stack.pop(); + a = stack.pop(); + stack.push(a + b); + break; + case 'and': + b = stack.pop(); + a = stack.pop(); + if (isBool(a) && isBool(b)) { + stack.push(a && b); + } else { + stack.push(a & b); + } + break; + case 'atan': + a = stack.pop(); + stack.push(Math.atan(a)); + break; + case 'bitshift': + b = stack.pop(); + a = stack.pop(); + if (a > 0) { + stack.push(a << b); + } else { + stack.push(a >> b); + } + break; + case 'ceiling': + a = stack.pop(); + stack.push(Math.ceil(a)); + break; + case 'copy': + a = stack.pop(); + stack.copy(a); + break; + case 'cos': + a = stack.pop(); + stack.push(Math.cos(a)); + break; + case 'cvi': + a = stack.pop() | 0; + stack.push(a); + break; + case 'cvr': + // noop + break; + case 'div': + b = stack.pop(); + a = stack.pop(); + stack.push(a / b); + break; + case 'dup': + stack.copy(1); + break; + case 'eq': + b = stack.pop(); + a = stack.pop(); + stack.push(a === b); + break; + case 'exch': + stack.roll(2, 1); + break; + case 'exp': + b = stack.pop(); + a = stack.pop(); + stack.push(Math.pow(a, b)); + break; + case 'false': + stack.push(false); + break; + case 'floor': + a = stack.pop(); + stack.push(Math.floor(a)); + break; + case 'ge': + b = stack.pop(); + a = stack.pop(); + stack.push(a >= b); + break; + case 'gt': + b = stack.pop(); + a = stack.pop(); + stack.push(a > b); + break; + case 'idiv': + b = stack.pop(); + a = stack.pop(); + stack.push((a / b) | 0); + break; + case 'index': + a = stack.pop(); + stack.index(a); + break; + case 'le': + b = stack.pop(); + a = stack.pop(); + stack.push(a <= b); + break; + case 'ln': + a = stack.pop(); + stack.push(Math.log(a)); + break; + case 'log': + a = stack.pop(); + stack.push(Math.log(a) / Math.LN10); + break; + case 'lt': + b = stack.pop(); + a = stack.pop(); + stack.push(a < b); + break; + case 'mod': + b = stack.pop(); + a = stack.pop(); + stack.push(a % b); + break; + case 'mul': + b = stack.pop(); + a = stack.pop(); + stack.push(a * b); + break; + case 'ne': + b = stack.pop(); + a = stack.pop(); + stack.push(a !== b); + break; + case 'neg': + a = stack.pop(); + stack.push(-a); + break; + case 'not': + a = stack.pop(); + if (isBool(a)) { + stack.push(!a); + } else { + stack.push(~a); + } + break; + case 'or': + b = stack.pop(); + a = stack.pop(); + if (isBool(a) && isBool(b)) { + stack.push(a || b); + } else { + stack.push(a | b); + } + break; + case 'pop': + stack.pop(); + break; + case 'roll': + b = stack.pop(); + a = stack.pop(); + stack.roll(a, b); + break; + case 'round': + a = stack.pop(); + stack.push(Math.round(a)); + break; + case 'sin': + a = stack.pop(); + stack.push(Math.sin(a)); + break; + case 'sqrt': + a = stack.pop(); + stack.push(Math.sqrt(a)); + break; + case 'sub': + b = stack.pop(); + a = stack.pop(); + stack.push(a - b); + break; + case 'true': + stack.push(true); + break; + case 'truncate': + a = stack.pop(); + a = a < 0 ? Math.ceil(a) : Math.floor(a); + stack.push(a); + break; + case 'xor': + b = stack.pop(); + a = stack.pop(); + if (isBool(a) && isBool(b)) { + stack.push(a !== b); + } else { + stack.push(a ^ b); + } + break; + default: + error('Unknown operator ' + operator); + break; + } + } + return stack.stack; + } + }; + return PostScriptEvaluator; +})(); + +// Most of the PDFs functions consist of simple operations such as: +// roll, exch, sub, cvr, pop, index, dup, mul, if, gt, add. +// +// We can compile most of such programs, and at the same moment, we can +// optimize some expressions using basic math properties. Keeping track of +// min/max values will allow us to avoid extra Math.min/Math.max calls. +var PostScriptCompiler = (function PostScriptCompilerClosure() { + function AstNode(type) { + this.type = type; + } + AstNode.prototype.visit = function (visitor) { + throw new Error('abstract method'); + }; + + function AstArgument(index, min, max) { + AstNode.call(this, 'args'); + this.index = index; + this.min = min; + this.max = max; + } + AstArgument.prototype = Object.create(AstNode.prototype); + AstArgument.prototype.visit = function (visitor) { + visitor.visitArgument(this); + }; + + function AstLiteral(number) { + AstNode.call(this, 'literal'); + this.number = number; + this.min = number; + this.max = number; + } + AstLiteral.prototype = Object.create(AstNode.prototype); + AstLiteral.prototype.visit = function (visitor) { + visitor.visitLiteral(this); + }; + + function AstBinaryOperation(op, arg1, arg2, min, max) { + AstNode.call(this, 'binary'); + this.op = op; + this.arg1 = arg1; + this.arg2 = arg2; + this.min = min; + this.max = max; + } + AstBinaryOperation.prototype = Object.create(AstNode.prototype); + AstBinaryOperation.prototype.visit = function (visitor) { + visitor.visitBinaryOperation(this); + }; + + function AstMin(arg, max) { + AstNode.call(this, 'max'); + this.arg = arg; + this.min = arg.min; + this.max = max; + } + AstMin.prototype = Object.create(AstNode.prototype); + AstMin.prototype.visit = function (visitor) { + visitor.visitMin(this); + }; + + function AstVariable(index, min, max) { + AstNode.call(this, 'var'); + this.index = index; + this.min = min; + this.max = max; + } + AstVariable.prototype = Object.create(AstNode.prototype); + AstVariable.prototype.visit = function (visitor) { + visitor.visitVariable(this); + }; + + function AstVariableDefinition(variable, arg) { + AstNode.call(this, 'definition'); + this.variable = variable; + this.arg = arg; + } + AstVariableDefinition.prototype = Object.create(AstNode.prototype); + AstVariableDefinition.prototype.visit = function (visitor) { + visitor.visitVariableDefinition(this); + }; + + function ExpressionBuilderVisitor() { + this.parts = []; + } + ExpressionBuilderVisitor.prototype = { + visitArgument: function (arg) { + this.parts.push('Math.max(', arg.min, ', Math.min(', + arg.max, ', src[srcOffset + ', arg.index, ']))'); + }, + visitVariable: function (variable) { + this.parts.push('v', variable.index); + }, + visitLiteral: function (literal) { + this.parts.push(literal.number); + }, + visitBinaryOperation: function (operation) { + this.parts.push('('); + operation.arg1.visit(this); + this.parts.push(' ', operation.op, ' '); + operation.arg2.visit(this); + this.parts.push(')'); + }, + visitVariableDefinition: function (definition) { + this.parts.push('var '); + definition.variable.visit(this); + this.parts.push(' = '); + definition.arg.visit(this); + this.parts.push(';'); + }, + visitMin: function (max) { + this.parts.push('Math.min('); + max.arg.visit(this); + this.parts.push(', ', max.max, ')'); + }, + toString: function () { + return this.parts.join(''); + } + }; + + function buildAddOperation(num1, num2) { + if (num2.type === 'literal' && num2.number === 0) { + // optimization: second operand is 0 + return num1; + } + if (num1.type === 'literal' && num1.number === 0) { + // optimization: first operand is 0 + return num2; + } + if (num2.type === 'literal' && num1.type === 'literal') { + // optimization: operands operand are literals + return new AstLiteral(num1.number + num2.number); + } + return new AstBinaryOperation('+', num1, num2, + num1.min + num2.min, num1.max + num2.max); + } + + function buildMulOperation(num1, num2) { + if (num2.type === 'literal') { + // optimization: second operands is a literal... + if (num2.number === 0) { + return new AstLiteral(0); // and it's 0 + } else if (num2.number === 1) { + return num1; // and it's 1 + } else if (num1.type === 'literal') { + // ... and first operands is a literal too + return new AstLiteral(num1.number * num2.number); + } + } + if (num1.type === 'literal') { + // optimization: first operands is a literal... + if (num1.number === 0) { + return new AstLiteral(0); // and it's 0 + } else if (num1.number === 1) { + return num2; // and it's 1 + } + } + var min = Math.min(num1.min * num2.min, num1.min * num2.max, + num1.max * num2.min, num1.max * num2.max); + var max = Math.max(num1.min * num2.min, num1.min * num2.max, + num1.max * num2.min, num1.max * num2.max); + return new AstBinaryOperation('*', num1, num2, min, max); + } + + function buildSubOperation(num1, num2) { + if (num2.type === 'literal') { + // optimization: second operands is a literal... + if (num2.number === 0) { + return num1; // ... and it's 0 + } else if (num1.type === 'literal') { + // ... and first operands is a literal too + return new AstLiteral(num1.number - num2.number); + } + } + if (num2.type === 'binary' && num2.op === '-' && + num1.type === 'literal' && num1.number === 1 && + num2.arg1.type === 'literal' && num2.arg1.number === 1) { + // optimization for case: 1 - (1 - x) + return num2.arg2; + } + return new AstBinaryOperation('-', num1, num2, + num1.min - num2.max, num1.max - num2.min); + } + + function buildMinOperation(num1, max) { + if (num1.min >= max) { + // optimization: num1 min value is not less than required max + return new AstLiteral(max); // just returning max + } else if (num1.max <= max) { + // optimization: num1 max value is not greater than required max + return num1; // just returning an argument + } + return new AstMin(num1, max); + } + + function PostScriptCompiler() {} + PostScriptCompiler.prototype = { + compile: function PostScriptCompiler_compile(code, domain, range) { + var stack = []; + var i, ii; + var instructions = []; + var inputSize = domain.length >> 1, outputSize = range.length >> 1; + var lastRegister = 0; + var n, j, min, max; + var num1, num2, ast1, ast2, tmpVar, item; + for (i = 0; i < inputSize; i++) { + stack.push(new AstArgument(i, domain[i * 2], domain[i * 2 + 1])); + } + + for (i = 0, ii = code.length; i < ii; i++) { + item = code[i]; + if (typeof item === 'number') { + stack.push(new AstLiteral(item)); + continue; + } + + switch (item) { + case 'add': + if (stack.length < 2) { + return null; + } + num2 = stack.pop(); + num1 = stack.pop(); + stack.push(buildAddOperation(num1, num2)); + break; + case 'cvr': + if (stack.length < 1) { + return null; + } + break; + case 'mul': + if (stack.length < 2) { + return null; + } + num2 = stack.pop(); + num1 = stack.pop(); + stack.push(buildMulOperation(num1, num2)); + break; + case 'sub': + if (stack.length < 2) { + return null; + } + num2 = stack.pop(); + num1 = stack.pop(); + stack.push(buildSubOperation(num1, num2)); + break; + case 'exch': + if (stack.length < 2) { + return null; + } + ast1 = stack.pop(); ast2 = stack.pop(); + stack.push(ast1, ast2); + break; + case 'pop': + if (stack.length < 1) { + return null; + } + stack.pop(); + break; + case 'index': + if (stack.length < 1) { + return null; + } + num1 = stack.pop(); + if (num1.type !== 'literal') { + return null; + } + n = num1.number; + if (n < 0 || (n|0) !== n || stack.length < n) { + return null; + } + ast1 = stack[stack.length - n - 1]; + if (ast1.type === 'literal' || ast1.type === 'var') { + stack.push(ast1); + break; + } + tmpVar = new AstVariable(lastRegister++, ast1.min, ast1.max); + stack[stack.length - n - 1] = tmpVar; + stack.push(tmpVar); + instructions.push(new AstVariableDefinition(tmpVar, ast1)); + break; + case 'dup': + if (stack.length < 1) { + return null; + } + if (typeof code[i + 1] === 'number' && code[i + 2] === 'gt' && + code[i + 3] === i + 7 && code[i + 4] === 'jz' && + code[i + 5] === 'pop' && code[i + 6] === code[i + 1]) { + // special case of the commands sequence for the min operation + num1 = stack.pop(); + stack.push(buildMinOperation(num1, code[i + 1])); + i += 6; + break; + } + ast1 = stack[stack.length - 1]; + if (ast1.type === 'literal' || ast1.type === 'var') { + // we don't have to save into intermediate variable a literal or + // variable. + stack.push(ast1); + break; + } + tmpVar = new AstVariable(lastRegister++, ast1.min, ast1.max); + stack[stack.length - 1] = tmpVar; + stack.push(tmpVar); + instructions.push(new AstVariableDefinition(tmpVar, ast1)); + break; + case 'roll': + if (stack.length < 2) { + return null; + } + num2 = stack.pop(); + num1 = stack.pop(); + if (num2.type !== 'literal' || num1.type !== 'literal') { + // both roll operands must be numbers + return null; + } + j = num2.number; + n = num1.number; + if (n <= 0 || (n|0) !== n || (j|0) !== j || stack.length < n) { + // ... and integers + return null; + } + j = ((j % n) + n) % n; + if (j === 0) { + break; // just skipping -- there are nothing to rotate + } + Array.prototype.push.apply(stack, + stack.splice(stack.length - n, n - j)); + break; + default: + return null; // unsupported operator + } + } + + if (stack.length !== outputSize) { + return null; + } + + var result = []; + instructions.forEach(function (instruction) { + var statementBuilder = new ExpressionBuilderVisitor(); + instruction.visit(statementBuilder); + result.push(statementBuilder.toString()); + }); + stack.forEach(function (expr, i) { + var statementBuilder = new ExpressionBuilderVisitor(); + expr.visit(statementBuilder); + var min = range[i * 2], max = range[i * 2 + 1]; + var out = [statementBuilder.toString()]; + if (min > expr.min) { + out.unshift('Math.max(', min, ', '); + out.push(')'); + } + if (max < expr.max) { + out.unshift('Math.min(', max, ', '); + out.push(')'); + } + out.unshift('dest[destOffset + ', i, '] = '); + out.push(';'); + result.push(out.join('')); + }); + return result.join('\n'); + } + }; + + return PostScriptCompiler; +})(); + + +var ColorSpace = (function ColorSpaceClosure() { + // Constructor should define this.numComps, this.defaultColor, this.name + function ColorSpace() { + error('should not call ColorSpace constructor'); + } + + ColorSpace.prototype = { + /** + * Converts the color value to the RGB color. The color components are + * located in the src array starting from the srcOffset. Returns the array + * of the rgb components, each value ranging from [0,255]. + */ + getRgb: function ColorSpace_getRgb(src, srcOffset) { + var rgb = new Uint8Array(3); + this.getRgbItem(src, srcOffset, rgb, 0); + return rgb; + }, + /** + * Converts the color value to the RGB color, similar to the getRgb method. + * The result placed into the dest array starting from the destOffset. + */ + getRgbItem: function ColorSpace_getRgbItem(src, srcOffset, + dest, destOffset) { + error('Should not call ColorSpace.getRgbItem'); + }, + /** + * Converts the specified number of the color values to the RGB colors. + * The colors are located in the src array starting from the srcOffset. + * The result is placed into the dest array starting from the destOffset. + * The src array items shall be in [0,2^bits) range, the dest array items + * will be in [0,255] range. alpha01 indicates how many alpha components + * there are in the dest array; it will be either 0 (RGB array) or 1 (RGBA + * array). + */ + getRgbBuffer: function ColorSpace_getRgbBuffer(src, srcOffset, count, + dest, destOffset, bits, + alpha01) { + error('Should not call ColorSpace.getRgbBuffer'); + }, + /** + * Determines the number of bytes required to store the result of the + * conversion done by the getRgbBuffer method. As in getRgbBuffer, + * |alpha01| is either 0 (RGB output) or 1 (RGBA output). + */ + getOutputLength: function ColorSpace_getOutputLength(inputLength, + alpha01) { + error('Should not call ColorSpace.getOutputLength'); + }, + /** + * Returns true if source data will be equal the result/output data. + */ + isPassthrough: function ColorSpace_isPassthrough(bits) { + return false; + }, + /** + * Fills in the RGB colors in the destination buffer. alpha01 indicates + * how many alpha components there are in the dest array; it will be either + * 0 (RGB array) or 1 (RGBA array). + */ + fillRgb: function ColorSpace_fillRgb(dest, originalWidth, + originalHeight, width, height, + actualHeight, bpc, comps, alpha01) { + var count = originalWidth * originalHeight; + var rgbBuf = null; + var numComponentColors = 1 << bpc; + var needsResizing = originalHeight !== height || originalWidth !== width; + var i, ii; + + if (this.isPassthrough(bpc)) { + rgbBuf = comps; + } else if (this.numComps === 1 && count > numComponentColors && + this.name !== 'DeviceGray' && this.name !== 'DeviceRGB') { + // Optimization: create a color map when there is just one component and + // we are converting more colors than the size of the color map. We + // don't build the map if the colorspace is gray or rgb since those + // methods are faster than building a map. This mainly offers big speed + // ups for indexed and alternate colorspaces. + // + // TODO it may be worth while to cache the color map. While running + // testing I never hit a cache so I will leave that out for now (perhaps + // we are reparsing colorspaces too much?). + var allColors = bpc <= 8 ? new Uint8Array(numComponentColors) : + new Uint16Array(numComponentColors); + var key; + for (i = 0; i < numComponentColors; i++) { + allColors[i] = i; + } + var colorMap = new Uint8Array(numComponentColors * 3); + this.getRgbBuffer(allColors, 0, numComponentColors, colorMap, 0, bpc, + /* alpha01 = */ 0); + + var destPos, rgbPos; + if (!needsResizing) { + // Fill in the RGB values directly into |dest|. + destPos = 0; + for (i = 0; i < count; ++i) { + key = comps[i] * 3; + dest[destPos++] = colorMap[key]; + dest[destPos++] = colorMap[key + 1]; + dest[destPos++] = colorMap[key + 2]; + destPos += alpha01; + } + } else { + rgbBuf = new Uint8Array(count * 3); + rgbPos = 0; + for (i = 0; i < count; ++i) { + key = comps[i] * 3; + rgbBuf[rgbPos++] = colorMap[key]; + rgbBuf[rgbPos++] = colorMap[key + 1]; + rgbBuf[rgbPos++] = colorMap[key + 2]; + } + } + } else { + if (!needsResizing) { + // Fill in the RGB values directly into |dest|. + this.getRgbBuffer(comps, 0, width * actualHeight, dest, 0, bpc, + alpha01); + } else { + rgbBuf = new Uint8Array(count * 3); + this.getRgbBuffer(comps, 0, count, rgbBuf, 0, bpc, + /* alpha01 = */ 0); + } + } + + if (rgbBuf) { + if (needsResizing) { + PDFImage.resize(rgbBuf, bpc, 3, originalWidth, originalHeight, width, + height, dest, alpha01); + } else { + rgbPos = 0; + destPos = 0; + for (i = 0, ii = width * actualHeight; i < ii; i++) { + dest[destPos++] = rgbBuf[rgbPos++]; + dest[destPos++] = rgbBuf[rgbPos++]; + dest[destPos++] = rgbBuf[rgbPos++]; + destPos += alpha01; + } + } + } + }, + /** + * True if the colorspace has components in the default range of [0, 1]. + * This should be true for all colorspaces except for lab color spaces + * which are [0,100], [-128, 127], [-128, 127]. + */ + usesZeroToOneRange: true + }; + + ColorSpace.parse = function ColorSpace_parse(cs, xref, res) { + var IR = ColorSpace.parseToIR(cs, xref, res); + if (IR instanceof AlternateCS) { + return IR; + } + return ColorSpace.fromIR(IR); + }; + + ColorSpace.fromIR = function ColorSpace_fromIR(IR) { + var name = isArray(IR) ? IR[0] : IR; + var whitePoint, blackPoint, gamma; + + switch (name) { + case 'DeviceGrayCS': + return this.singletons.gray; + case 'DeviceRgbCS': + return this.singletons.rgb; + case 'DeviceCmykCS': + return this.singletons.cmyk; + case 'CalGrayCS': + whitePoint = IR[1].WhitePoint; + blackPoint = IR[1].BlackPoint; + gamma = IR[1].Gamma; + return new CalGrayCS(whitePoint, blackPoint, gamma); + case 'CalRGBCS': + whitePoint = IR[1].WhitePoint; + blackPoint = IR[1].BlackPoint; + gamma = IR[1].Gamma; + var matrix = IR[1].Matrix; + return new CalRGBCS(whitePoint, blackPoint, gamma, matrix); + case 'PatternCS': + var basePatternCS = IR[1]; + if (basePatternCS) { + basePatternCS = ColorSpace.fromIR(basePatternCS); + } + return new PatternCS(basePatternCS); + case 'IndexedCS': + var baseIndexedCS = IR[1]; + var hiVal = IR[2]; + var lookup = IR[3]; + return new IndexedCS(ColorSpace.fromIR(baseIndexedCS), hiVal, lookup); + case 'AlternateCS': + var numComps = IR[1]; + var alt = IR[2]; + var tintFnIR = IR[3]; + + return new AlternateCS(numComps, ColorSpace.fromIR(alt), + PDFFunction.fromIR(tintFnIR)); + case 'LabCS': + whitePoint = IR[1].WhitePoint; + blackPoint = IR[1].BlackPoint; + var range = IR[1].Range; + return new LabCS(whitePoint, blackPoint, range); + default: + error('Unknown name ' + name); + } + return null; + }; + + ColorSpace.parseToIR = function ColorSpace_parseToIR(cs, xref, res) { + if (isName(cs)) { + var colorSpaces = res.get('ColorSpace'); + if (isDict(colorSpaces)) { + var refcs = colorSpaces.get(cs.name); + if (refcs) { + cs = refcs; + } + } + } + + cs = xref.fetchIfRef(cs); + var mode; + + if (isName(cs)) { + mode = cs.name; + this.mode = mode; + + switch (mode) { + case 'DeviceGray': + case 'G': + return 'DeviceGrayCS'; + case 'DeviceRGB': + case 'RGB': + return 'DeviceRgbCS'; + case 'DeviceCMYK': + case 'CMYK': + return 'DeviceCmykCS'; + case 'Pattern': + return ['PatternCS', null]; + default: + error('unrecognized colorspace ' + mode); + } + } else if (isArray(cs)) { + mode = cs[0].name; + this.mode = mode; + var numComps, params; + + switch (mode) { + case 'DeviceGray': + case 'G': + return 'DeviceGrayCS'; + case 'DeviceRGB': + case 'RGB': + return 'DeviceRgbCS'; + case 'DeviceCMYK': + case 'CMYK': + return 'DeviceCmykCS'; + case 'CalGray': + params = xref.fetchIfRef(cs[1]).getAll(); + return ['CalGrayCS', params]; + case 'CalRGB': + params = xref.fetchIfRef(cs[1]).getAll(); + return ['CalRGBCS', params]; + case 'ICCBased': + var stream = xref.fetchIfRef(cs[1]); + var dict = stream.dict; + numComps = dict.get('N'); + if (numComps === 1) { + return 'DeviceGrayCS'; + } else if (numComps === 3) { + return 'DeviceRgbCS'; + } else if (numComps === 4) { + return 'DeviceCmykCS'; + } + break; + case 'Pattern': + var basePatternCS = cs[1]; + if (basePatternCS) { + basePatternCS = ColorSpace.parseToIR(basePatternCS, xref, res); + } + return ['PatternCS', basePatternCS]; + case 'Indexed': + case 'I': + var baseIndexedCS = ColorSpace.parseToIR(cs[1], xref, res); + var hiVal = cs[2] + 1; + var lookup = xref.fetchIfRef(cs[3]); + if (isStream(lookup)) { + lookup = lookup.getBytes(); + } + return ['IndexedCS', baseIndexedCS, hiVal, lookup]; + case 'Separation': + case 'DeviceN': + var name = cs[1]; + numComps = 1; + if (isName(name)) { + numComps = 1; + } else if (isArray(name)) { + numComps = name.length; + } + var alt = ColorSpace.parseToIR(cs[2], xref, res); + var tintFnIR = PDFFunction.getIR(xref, xref.fetchIfRef(cs[3])); + return ['AlternateCS', numComps, alt, tintFnIR]; + case 'Lab': + params = cs[1].getAll(); + return ['LabCS', params]; + default: + error('unimplemented color space object "' + mode + '"'); + } + } else { + error('unrecognized color space object: "' + cs + '"'); + } + return null; + }; + /** + * Checks if a decode map matches the default decode map for a color space. + * This handles the general decode maps where there are two values per + * component. e.g. [0, 1, 0, 1, 0, 1] for a RGB color. + * This does not handle Lab, Indexed, or Pattern decode maps since they are + * slightly different. + * @param {Array} decode Decode map (usually from an image). + * @param {Number} n Number of components the color space has. + */ + ColorSpace.isDefaultDecode = function ColorSpace_isDefaultDecode(decode, n) { + if (!decode) { + return true; + } + + if (n * 2 !== decode.length) { + warn('The decode map is not the correct length'); + return true; + } + for (var i = 0, ii = decode.length; i < ii; i += 2) { + if (decode[i] !== 0 || decode[i + 1] !== 1) { + return false; + } + } + return true; + }; + + ColorSpace.singletons = { + get gray() { + return shadow(this, 'gray', new DeviceGrayCS()); + }, + get rgb() { + return shadow(this, 'rgb', new DeviceRgbCS()); + }, + get cmyk() { + return shadow(this, 'cmyk', new DeviceCmykCS()); + } + }; + + return ColorSpace; +})(); + +/** + * Alternate color space handles both Separation and DeviceN color spaces. A + * Separation color space is actually just a DeviceN with one color component. + * Both color spaces use a tinting function to convert colors to a base color + * space. + */ +var AlternateCS = (function AlternateCSClosure() { + function AlternateCS(numComps, base, tintFn) { + this.name = 'Alternate'; + this.numComps = numComps; + this.defaultColor = new Float32Array(numComps); + for (var i = 0; i < numComps; ++i) { + this.defaultColor[i] = 1; + } + this.base = base; + this.tintFn = tintFn; + this.tmpBuf = new Float32Array(base.numComps); + } + + AlternateCS.prototype = { + getRgb: ColorSpace.prototype.getRgb, + getRgbItem: function AlternateCS_getRgbItem(src, srcOffset, + dest, destOffset) { + var tmpBuf = this.tmpBuf; + this.tintFn(src, srcOffset, tmpBuf, 0); + this.base.getRgbItem(tmpBuf, 0, dest, destOffset); + }, + getRgbBuffer: function AlternateCS_getRgbBuffer(src, srcOffset, count, + dest, destOffset, bits, + alpha01) { + var tintFn = this.tintFn; + var base = this.base; + var scale = 1 / ((1 << bits) - 1); + var baseNumComps = base.numComps; + var usesZeroToOneRange = base.usesZeroToOneRange; + var isPassthrough = (base.isPassthrough(8) || !usesZeroToOneRange) && + alpha01 === 0; + var pos = isPassthrough ? destOffset : 0; + var baseBuf = isPassthrough ? dest : new Uint8Array(baseNumComps * count); + var numComps = this.numComps; + + var scaled = new Float32Array(numComps); + var tinted = new Float32Array(baseNumComps); + var i, j; + if (usesZeroToOneRange) { + for (i = 0; i < count; i++) { + for (j = 0; j < numComps; j++) { + scaled[j] = src[srcOffset++] * scale; + } + tintFn(scaled, 0, tinted, 0); + for (j = 0; j < baseNumComps; j++) { + baseBuf[pos++] = tinted[j] * 255; + } + } + } else { + for (i = 0; i < count; i++) { + for (j = 0; j < numComps; j++) { + scaled[j] = src[srcOffset++] * scale; + } + tintFn(scaled, 0, tinted, 0); + base.getRgbItem(tinted, 0, baseBuf, pos); + pos += baseNumComps; + } + } + if (!isPassthrough) { + base.getRgbBuffer(baseBuf, 0, count, dest, destOffset, 8, alpha01); + } + }, + getOutputLength: function AlternateCS_getOutputLength(inputLength, + alpha01) { + return this.base.getOutputLength(inputLength * + this.base.numComps / this.numComps, + alpha01); + }, + isPassthrough: ColorSpace.prototype.isPassthrough, + fillRgb: ColorSpace.prototype.fillRgb, + isDefaultDecode: function AlternateCS_isDefaultDecode(decodeMap) { + return ColorSpace.isDefaultDecode(decodeMap, this.numComps); + }, + usesZeroToOneRange: true + }; + + return AlternateCS; +})(); + +var PatternCS = (function PatternCSClosure() { + function PatternCS(baseCS) { + this.name = 'Pattern'; + this.base = baseCS; + } + PatternCS.prototype = {}; + + return PatternCS; +})(); + +var IndexedCS = (function IndexedCSClosure() { + function IndexedCS(base, highVal, lookup) { + this.name = 'Indexed'; + this.numComps = 1; + this.defaultColor = new Uint8Array([0]); + this.base = base; + this.highVal = highVal; + + var baseNumComps = base.numComps; + var length = baseNumComps * highVal; + var lookupArray; + + if (isStream(lookup)) { + lookupArray = new Uint8Array(length); + var bytes = lookup.getBytes(length); + lookupArray.set(bytes); + } else if (isString(lookup)) { + lookupArray = new Uint8Array(length); + for (var i = 0; i < length; ++i) { + lookupArray[i] = lookup.charCodeAt(i); + } + } else if (lookup instanceof Uint8Array || lookup instanceof Array) { + lookupArray = lookup; + } else { + error('Unrecognized lookup table: ' + lookup); + } + this.lookup = lookupArray; + } + + IndexedCS.prototype = { + getRgb: ColorSpace.prototype.getRgb, + getRgbItem: function IndexedCS_getRgbItem(src, srcOffset, + dest, destOffset) { + var numComps = this.base.numComps; + var start = src[srcOffset] * numComps; + this.base.getRgbItem(this.lookup, start, dest, destOffset); + }, + getRgbBuffer: function IndexedCS_getRgbBuffer(src, srcOffset, count, + dest, destOffset, bits, + alpha01) { + var base = this.base; + var numComps = base.numComps; + var outputDelta = base.getOutputLength(numComps, alpha01); + var lookup = this.lookup; + + for (var i = 0; i < count; ++i) { + var lookupPos = src[srcOffset++] * numComps; + base.getRgbBuffer(lookup, lookupPos, 1, dest, destOffset, 8, alpha01); + destOffset += outputDelta; + } + }, + getOutputLength: function IndexedCS_getOutputLength(inputLength, alpha01) { + return this.base.getOutputLength(inputLength * this.base.numComps, + alpha01); + }, + isPassthrough: ColorSpace.prototype.isPassthrough, + fillRgb: ColorSpace.prototype.fillRgb, + isDefaultDecode: function IndexedCS_isDefaultDecode(decodeMap) { + // indexed color maps shouldn't be changed + return true; + }, + usesZeroToOneRange: true + }; + return IndexedCS; +})(); + +var DeviceGrayCS = (function DeviceGrayCSClosure() { + function DeviceGrayCS() { + this.name = 'DeviceGray'; + this.numComps = 1; + this.defaultColor = new Float32Array([0]); + } + + DeviceGrayCS.prototype = { + getRgb: ColorSpace.prototype.getRgb, + getRgbItem: function DeviceGrayCS_getRgbItem(src, srcOffset, + dest, destOffset) { + var c = (src[srcOffset] * 255) | 0; + c = c < 0 ? 0 : c > 255 ? 255 : c; + dest[destOffset] = dest[destOffset + 1] = dest[destOffset + 2] = c; + }, + getRgbBuffer: function DeviceGrayCS_getRgbBuffer(src, srcOffset, count, + dest, destOffset, bits, + alpha01) { + var scale = 255 / ((1 << bits) - 1); + var j = srcOffset, q = destOffset; + for (var i = 0; i < count; ++i) { + var c = (scale * src[j++]) | 0; + dest[q++] = c; + dest[q++] = c; + dest[q++] = c; + q += alpha01; + } + }, + getOutputLength: function DeviceGrayCS_getOutputLength(inputLength, + alpha01) { + return inputLength * (3 + alpha01); + }, + isPassthrough: ColorSpace.prototype.isPassthrough, + fillRgb: ColorSpace.prototype.fillRgb, + isDefaultDecode: function DeviceGrayCS_isDefaultDecode(decodeMap) { + return ColorSpace.isDefaultDecode(decodeMap, this.numComps); + }, + usesZeroToOneRange: true + }; + return DeviceGrayCS; +})(); + +var DeviceRgbCS = (function DeviceRgbCSClosure() { + function DeviceRgbCS() { + this.name = 'DeviceRGB'; + this.numComps = 3; + this.defaultColor = new Float32Array([0, 0, 0]); + } + DeviceRgbCS.prototype = { + getRgb: ColorSpace.prototype.getRgb, + getRgbItem: function DeviceRgbCS_getRgbItem(src, srcOffset, + dest, destOffset) { + var r = (src[srcOffset] * 255) | 0; + var g = (src[srcOffset + 1] * 255) | 0; + var b = (src[srcOffset + 2] * 255) | 0; + dest[destOffset] = r < 0 ? 0 : r > 255 ? 255 : r; + dest[destOffset + 1] = g < 0 ? 0 : g > 255 ? 255 : g; + dest[destOffset + 2] = b < 0 ? 0 : b > 255 ? 255 : b; + }, + getRgbBuffer: function DeviceRgbCS_getRgbBuffer(src, srcOffset, count, + dest, destOffset, bits, + alpha01) { + if (bits === 8 && alpha01 === 0) { + dest.set(src.subarray(srcOffset, srcOffset + count * 3), destOffset); + return; + } + var scale = 255 / ((1 << bits) - 1); + var j = srcOffset, q = destOffset; + for (var i = 0; i < count; ++i) { + dest[q++] = (scale * src[j++]) | 0; + dest[q++] = (scale * src[j++]) | 0; + dest[q++] = (scale * src[j++]) | 0; + q += alpha01; + } + }, + getOutputLength: function DeviceRgbCS_getOutputLength(inputLength, + alpha01) { + return (inputLength * (3 + alpha01) / 3) | 0; + }, + isPassthrough: function DeviceRgbCS_isPassthrough(bits) { + return bits === 8; + }, + fillRgb: ColorSpace.prototype.fillRgb, + isDefaultDecode: function DeviceRgbCS_isDefaultDecode(decodeMap) { + return ColorSpace.isDefaultDecode(decodeMap, this.numComps); + }, + usesZeroToOneRange: true + }; + return DeviceRgbCS; +})(); + +var DeviceCmykCS = (function DeviceCmykCSClosure() { + // The coefficients below was found using numerical analysis: the method of + // steepest descent for the sum((f_i - color_value_i)^2) for r/g/b colors, + // where color_value is the tabular value from the table of sampled RGB colors + // from CMYK US Web Coated (SWOP) colorspace, and f_i is the corresponding + // CMYK color conversion using the estimation below: + // f(A, B,.. N) = Acc+Bcm+Ccy+Dck+c+Fmm+Gmy+Hmk+Im+Jyy+Kyk+Ly+Mkk+Nk+255 + function convertToRgb(src, srcOffset, srcScale, dest, destOffset) { + var c = src[srcOffset + 0] * srcScale; + var m = src[srcOffset + 1] * srcScale; + var y = src[srcOffset + 2] * srcScale; + var k = src[srcOffset + 3] * srcScale; + + var r = + (c * (-4.387332384609988 * c + 54.48615194189176 * m + + 18.82290502165302 * y + 212.25662451639585 * k + + -285.2331026137004) + + m * (1.7149763477362134 * m - 5.6096736904047315 * y + + -17.873870861415444 * k - 5.497006427196366) + + y * (-2.5217340131683033 * y - 21.248923337353073 * k + + 17.5119270841813) + + k * (-21.86122147463605 * k - 189.48180835922747) + 255) | 0; + var g = + (c * (8.841041422036149 * c + 60.118027045597366 * m + + 6.871425592049007 * y + 31.159100130055922 * k + + -79.2970844816548) + + m * (-15.310361306967817 * m + 17.575251261109482 * y + + 131.35250912493976 * k - 190.9453302588951) + + y * (4.444339102852739 * y + 9.8632861493405 * k - 24.86741582555878) + + k * (-20.737325471181034 * k - 187.80453709719578) + 255) | 0; + var b = + (c * (0.8842522430003296 * c + 8.078677503112928 * m + + 30.89978309703729 * y - 0.23883238689178934 * k + + -14.183576799673286) + + m * (10.49593273432072 * m + 63.02378494754052 * y + + 50.606957656360734 * k - 112.23884253719248) + + y * (0.03296041114873217 * y + 115.60384449646641 * k + + -193.58209356861505) + + k * (-22.33816807309886 * k - 180.12613974708367) + 255) | 0; + + dest[destOffset] = r > 255 ? 255 : r < 0 ? 0 : r; + dest[destOffset + 1] = g > 255 ? 255 : g < 0 ? 0 : g; + dest[destOffset + 2] = b > 255 ? 255 : b < 0 ? 0 : b; + } + + function DeviceCmykCS() { + this.name = 'DeviceCMYK'; + this.numComps = 4; + this.defaultColor = new Float32Array([0, 0, 0, 1]); + } + DeviceCmykCS.prototype = { + getRgb: ColorSpace.prototype.getRgb, + getRgbItem: function DeviceCmykCS_getRgbItem(src, srcOffset, + dest, destOffset) { + convertToRgb(src, srcOffset, 1, dest, destOffset); + }, + getRgbBuffer: function DeviceCmykCS_getRgbBuffer(src, srcOffset, count, + dest, destOffset, bits, + alpha01) { + var scale = 1 / ((1 << bits) - 1); + for (var i = 0; i < count; i++) { + convertToRgb(src, srcOffset, scale, dest, destOffset); + srcOffset += 4; + destOffset += 3 + alpha01; + } + }, + getOutputLength: function DeviceCmykCS_getOutputLength(inputLength, + alpha01) { + return (inputLength / 4 * (3 + alpha01)) | 0; + }, + isPassthrough: ColorSpace.prototype.isPassthrough, + fillRgb: ColorSpace.prototype.fillRgb, + isDefaultDecode: function DeviceCmykCS_isDefaultDecode(decodeMap) { + return ColorSpace.isDefaultDecode(decodeMap, this.numComps); + }, + usesZeroToOneRange: true + }; + + return DeviceCmykCS; +})(); + +// +// CalGrayCS: Based on "PDF Reference, Sixth Ed", p.245 +// +var CalGrayCS = (function CalGrayCSClosure() { + function CalGrayCS(whitePoint, blackPoint, gamma) { + this.name = 'CalGray'; + this.numComps = 1; + this.defaultColor = new Float32Array([0]); + + if (!whitePoint) { + error('WhitePoint missing - required for color space CalGray'); + } + blackPoint = blackPoint || [0, 0, 0]; + gamma = gamma || 1; + + // Translate arguments to spec variables. + this.XW = whitePoint[0]; + this.YW = whitePoint[1]; + this.ZW = whitePoint[2]; + + this.XB = blackPoint[0]; + this.YB = blackPoint[1]; + this.ZB = blackPoint[2]; + + this.G = gamma; + + // Validate variables as per spec. + if (this.XW < 0 || this.ZW < 0 || this.YW !== 1) { + error('Invalid WhitePoint components for ' + this.name + + ', no fallback available'); + } + + if (this.XB < 0 || this.YB < 0 || this.ZB < 0) { + info('Invalid BlackPoint for ' + this.name + ', falling back to default'); + this.XB = this.YB = this.ZB = 0; + } + + if (this.XB !== 0 || this.YB !== 0 || this.ZB !== 0) { + warn(this.name + ', BlackPoint: XB: ' + this.XB + ', YB: ' + this.YB + + ', ZB: ' + this.ZB + ', only default values are supported.'); + } + + if (this.G < 1) { + info('Invalid Gamma: ' + this.G + ' for ' + this.name + + ', falling back to default'); + this.G = 1; + } + } + + function convertToRgb(cs, src, srcOffset, dest, destOffset, scale) { + // A represents a gray component of a calibrated gray space. + // A <---> AG in the spec + var A = src[srcOffset] * scale; + var AG = Math.pow(A, cs.G); + + // Computes L as per spec. ( = cs.YW * AG ) + // Except if other than default BlackPoint values are used. + var L = cs.YW * AG; + // http://www.poynton.com/notes/colour_and_gamma/ColorFAQ.html, Ch 4. + // Convert values to rgb range [0, 255]. + var val = Math.max(295.8 * Math.pow(L, 0.333333333333333333) - 40.8, 0) | 0; + dest[destOffset] = val; + dest[destOffset + 1] = val; + dest[destOffset + 2] = val; + } + + CalGrayCS.prototype = { + getRgb: ColorSpace.prototype.getRgb, + getRgbItem: function CalGrayCS_getRgbItem(src, srcOffset, + dest, destOffset) { + convertToRgb(this, src, srcOffset, dest, destOffset, 1); + }, + getRgbBuffer: function CalGrayCS_getRgbBuffer(src, srcOffset, count, + dest, destOffset, bits, + alpha01) { + var scale = 1 / ((1 << bits) - 1); + + for (var i = 0; i < count; ++i) { + convertToRgb(this, src, srcOffset, dest, destOffset, scale); + srcOffset += 1; + destOffset += 3 + alpha01; + } + }, + getOutputLength: function CalGrayCS_getOutputLength(inputLength, alpha01) { + return inputLength * (3 + alpha01); + }, + isPassthrough: ColorSpace.prototype.isPassthrough, + fillRgb: ColorSpace.prototype.fillRgb, + isDefaultDecode: function CalGrayCS_isDefaultDecode(decodeMap) { + return ColorSpace.isDefaultDecode(decodeMap, this.numComps); + }, + usesZeroToOneRange: true + }; + return CalGrayCS; +})(); + +// +// CalRGBCS: Based on "PDF Reference, Sixth Ed", p.247 +// +var CalRGBCS = (function CalRGBCSClosure() { + + // See http://www.brucelindbloom.com/index.html?Eqn_ChromAdapt.html for these + // matrices. + var BRADFORD_SCALE_MATRIX = new Float32Array([ + 0.8951, 0.2664, -0.1614, + -0.7502, 1.7135, 0.0367, + 0.0389, -0.0685, 1.0296]); + + var BRADFORD_SCALE_INVERSE_MATRIX = new Float32Array([ + 0.9869929, -0.1470543, 0.1599627, + 0.4323053, 0.5183603, 0.0492912, + -0.0085287, 0.0400428, 0.9684867]); + + // See http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html. + var SRGB_D65_XYZ_TO_RGB_MATRIX = new Float32Array([ + 3.2404542, -1.5371385, -0.4985314, + -0.9692660, 1.8760108, 0.0415560, + 0.0556434, -0.2040259, 1.0572252]); + + var FLAT_WHITEPOINT_MATRIX = new Float32Array([1, 1, 1]); + + var tempNormalizeMatrix = new Float32Array(3); + var tempConvertMatrix1 = new Float32Array(3); + var tempConvertMatrix2 = new Float32Array(3); + + var DECODE_L_CONSTANT = Math.pow(((8 + 16) / 116), 3) / 8.0; + + function CalRGBCS(whitePoint, blackPoint, gamma, matrix) { + this.name = 'CalRGB'; + this.numComps = 3; + this.defaultColor = new Float32Array(3); + + if (!whitePoint) { + error('WhitePoint missing - required for color space CalRGB'); + } + blackPoint = blackPoint || new Float32Array(3); + gamma = gamma || new Float32Array([1, 1, 1]); + matrix = matrix || new Float32Array([1, 0, 0, 0, 1, 0, 0, 0, 1]); + + // Translate arguments to spec variables. + var XW = whitePoint[0]; + var YW = whitePoint[1]; + var ZW = whitePoint[2]; + this.whitePoint = whitePoint; + + var XB = blackPoint[0]; + var YB = blackPoint[1]; + var ZB = blackPoint[2]; + this.blackPoint = blackPoint; + + this.GR = gamma[0]; + this.GG = gamma[1]; + this.GB = gamma[2]; + + this.MXA = matrix[0]; + this.MYA = matrix[1]; + this.MZA = matrix[2]; + this.MXB = matrix[3]; + this.MYB = matrix[4]; + this.MZB = matrix[5]; + this.MXC = matrix[6]; + this.MYC = matrix[7]; + this.MZC = matrix[8]; + + // Validate variables as per spec. + if (XW < 0 || ZW < 0 || YW !== 1) { + error('Invalid WhitePoint components for ' + this.name + + ', no fallback available'); + } + + if (XB < 0 || YB < 0 || ZB < 0) { + info('Invalid BlackPoint for ' + this.name + ' [' + XB + ', ' + YB + + ', ' + ZB + '], falling back to default'); + this.blackPoint = new Float32Array(3); + } + + if (this.GR < 0 || this.GG < 0 || this.GB < 0) { + info('Invalid Gamma [' + this.GR + ', ' + this.GG + ', ' + this.GB + + '] for ' + this.name + ', falling back to default'); + this.GR = this.GG = this.GB = 1; + } + + if (this.MXA < 0 || this.MYA < 0 || this.MZA < 0 || + this.MXB < 0 || this.MYB < 0 || this.MZB < 0 || + this.MXC < 0 || this.MYC < 0 || this.MZC < 0) { + info('Invalid Matrix for ' + this.name + ' [' + + this.MXA + ', ' + this.MYA + ', ' + this.MZA + + this.MXB + ', ' + this.MYB + ', ' + this.MZB + + this.MXC + ', ' + this.MYC + ', ' + this.MZC + + '], falling back to default'); + this.MXA = this.MYB = this.MZC = 1; + this.MXB = this.MYA = this.MZA = this.MXC = this.MYC = this.MZB = 0; + } + } + + function matrixProduct(a, b, result) { + result[0] = a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; + result[1] = a[3] * b[0] + a[4] * b[1] + a[5] * b[2]; + result[2] = a[6] * b[0] + a[7] * b[1] + a[8] * b[2]; + } + + function convertToFlat(sourceWhitePoint, LMS, result) { + result[0] = LMS[0] * 1 / sourceWhitePoint[0]; + result[1] = LMS[1] * 1 / sourceWhitePoint[1]; + result[2] = LMS[2] * 1 / sourceWhitePoint[2]; + } + + function convertToD65(sourceWhitePoint, LMS, result) { + var D65X = 0.95047; + var D65Y = 1; + var D65Z = 1.08883; + + result[0] = LMS[0] * D65X / sourceWhitePoint[0]; + result[1] = LMS[1] * D65Y / sourceWhitePoint[1]; + result[2] = LMS[2] * D65Z / sourceWhitePoint[2]; + } + + function sRGBTransferFunction(color) { + // See http://en.wikipedia.org/wiki/SRGB. + if (color <= 0.0031308){ + return adjustToRange(0, 1, 12.92 * color); + } + + return adjustToRange(0, 1, (1 + 0.055) * Math.pow(color, 1 / 2.4) - 0.055); + } + + function adjustToRange(min, max, value) { + return Math.max(min, Math.min(max, value)); + } + + function decodeL(L) { + if (L < 0) { + return -decodeL(-L); + } + + if (L > 8.0) { + return Math.pow(((L + 16) / 116), 3); + } + + return L * DECODE_L_CONSTANT; + } + + function compensateBlackPoint(sourceBlackPoint, XYZ_Flat, result) { + + // In case the blackPoint is already the default blackPoint then there is + // no need to do compensation. + if (sourceBlackPoint[0] === 0 && + sourceBlackPoint[1] === 0 && + sourceBlackPoint[2] === 0) { + result[0] = XYZ_Flat[0]; + result[1] = XYZ_Flat[1]; + result[2] = XYZ_Flat[2]; + return; + } + + // For the blackPoint calculation details, please see + // http://www.adobe.com/content/dam/Adobe/en/devnet/photoshop/sdk/ + // AdobeBPC.pdf. + // The destination blackPoint is the default blackPoint [0, 0, 0]. + var zeroDecodeL = decodeL(0); + + var X_DST = zeroDecodeL; + var X_SRC = decodeL(sourceBlackPoint[0]); + + var Y_DST = zeroDecodeL; + var Y_SRC = decodeL(sourceBlackPoint[1]); + + var Z_DST = zeroDecodeL; + var Z_SRC = decodeL(sourceBlackPoint[2]); + + var X_Scale = (1 - X_DST) / (1 - X_SRC); + var X_Offset = 1 - X_Scale; + + var Y_Scale = (1 - Y_DST) / (1 - Y_SRC); + var Y_Offset = 1 - Y_Scale; + + var Z_Scale = (1 - Z_DST) / (1 - Z_SRC); + var Z_Offset = 1 - Z_Scale; + + result[0] = XYZ_Flat[0] * X_Scale + X_Offset; + result[1] = XYZ_Flat[1] * Y_Scale + Y_Offset; + result[2] = XYZ_Flat[2] * Z_Scale + Z_Offset; + } + + function normalizeWhitePointToFlat(sourceWhitePoint, XYZ_In, result) { + + // In case the whitePoint is already flat then there is no need to do + // normalization. + if (sourceWhitePoint[0] === 1 && sourceWhitePoint[2] === 1) { + result[0] = XYZ_In[0]; + result[1] = XYZ_In[1]; + result[2] = XYZ_In[2]; + return; + } + + var LMS = result; + matrixProduct(BRADFORD_SCALE_MATRIX, XYZ_In, LMS); + + var LMS_Flat = tempNormalizeMatrix; + convertToFlat(sourceWhitePoint, LMS, LMS_Flat); + + matrixProduct(BRADFORD_SCALE_INVERSE_MATRIX, LMS_Flat, result); + } + + function normalizeWhitePointToD65(sourceWhitePoint, XYZ_In, result) { + + var LMS = result; + matrixProduct(BRADFORD_SCALE_MATRIX, XYZ_In, LMS); + + var LMS_D65 = tempNormalizeMatrix; + convertToD65(sourceWhitePoint, LMS, LMS_D65); + + matrixProduct(BRADFORD_SCALE_INVERSE_MATRIX, LMS_D65, result); + } + + function convertToRgb(cs, src, srcOffset, dest, destOffset, scale) { + // A, B and C represent a red, green and blue components of a calibrated + // rgb space. + var A = adjustToRange(0, 1, src[srcOffset] * scale); + var B = adjustToRange(0, 1, src[srcOffset + 1] * scale); + var C = adjustToRange(0, 1, src[srcOffset + 2] * scale); + + // A <---> AGR in the spec + // B <---> BGG in the spec + // C <---> CGB in the spec + var AGR = Math.pow(A, cs.GR); + var BGG = Math.pow(B, cs.GG); + var CGB = Math.pow(C, cs.GB); + + // Computes intermediate variables L, M, N as per spec. + // To decode X, Y, Z values map L, M, N directly to them. + var X = cs.MXA * AGR + cs.MXB * BGG + cs.MXC * CGB; + var Y = cs.MYA * AGR + cs.MYB * BGG + cs.MYC * CGB; + var Z = cs.MZA * AGR + cs.MZB * BGG + cs.MZC * CGB; + + // The following calculations are based on this document: + // http://www.adobe.com/content/dam/Adobe/en/devnet/photoshop/sdk/ + // AdobeBPC.pdf. + var XYZ = tempConvertMatrix1; + XYZ[0] = X; + XYZ[1] = Y; + XYZ[2] = Z; + var XYZ_Flat = tempConvertMatrix2; + + normalizeWhitePointToFlat(cs.whitePoint, XYZ, XYZ_Flat); + + var XYZ_Black = tempConvertMatrix1; + compensateBlackPoint(cs.blackPoint, XYZ_Flat, XYZ_Black); + + var XYZ_D65 = tempConvertMatrix2; + normalizeWhitePointToD65(FLAT_WHITEPOINT_MATRIX, XYZ_Black, XYZ_D65); + + var SRGB = tempConvertMatrix1; + matrixProduct(SRGB_D65_XYZ_TO_RGB_MATRIX, XYZ_D65, SRGB); + + var sR = sRGBTransferFunction(SRGB[0]); + var sG = sRGBTransferFunction(SRGB[1]); + var sB = sRGBTransferFunction(SRGB[2]); + + // Convert the values to rgb range [0, 255]. + dest[destOffset] = Math.round(sR * 255); + dest[destOffset + 1] = Math.round(sG * 255); + dest[destOffset + 2] = Math.round(sB * 255); + } + + CalRGBCS.prototype = { + getRgb: function CalRGBCS_getRgb(src, srcOffset) { + var rgb = new Uint8Array(3); + this.getRgbItem(src, srcOffset, rgb, 0); + return rgb; + }, + getRgbItem: function CalRGBCS_getRgbItem(src, srcOffset, + dest, destOffset) { + convertToRgb(this, src, srcOffset, dest, destOffset, 1); + }, + getRgbBuffer: function CalRGBCS_getRgbBuffer(src, srcOffset, count, + dest, destOffset, bits, + alpha01) { + var scale = 1 / ((1 << bits) - 1); + + for (var i = 0; i < count; ++i) { + convertToRgb(this, src, srcOffset, dest, destOffset, scale); + srcOffset += 3; + destOffset += 3 + alpha01; + } + }, + getOutputLength: function CalRGBCS_getOutputLength(inputLength, alpha01) { + return (inputLength * (3 + alpha01) / 3) | 0; + }, + isPassthrough: ColorSpace.prototype.isPassthrough, + fillRgb: ColorSpace.prototype.fillRgb, + isDefaultDecode: function CalRGBCS_isDefaultDecode(decodeMap) { + return ColorSpace.isDefaultDecode(decodeMap, this.numComps); + }, + usesZeroToOneRange: true + }; + return CalRGBCS; +})(); + +// +// LabCS: Based on "PDF Reference, Sixth Ed", p.250 +// +var LabCS = (function LabCSClosure() { + function LabCS(whitePoint, blackPoint, range) { + this.name = 'Lab'; + this.numComps = 3; + this.defaultColor = new Float32Array([0, 0, 0]); + + if (!whitePoint) { + error('WhitePoint missing - required for color space Lab'); + } + blackPoint = blackPoint || [0, 0, 0]; + range = range || [-100, 100, -100, 100]; + + // Translate args to spec variables + this.XW = whitePoint[0]; + this.YW = whitePoint[1]; + this.ZW = whitePoint[2]; + this.amin = range[0]; + this.amax = range[1]; + this.bmin = range[2]; + this.bmax = range[3]; + + // These are here just for completeness - the spec doesn't offer any + // formulas that use BlackPoint in Lab + this.XB = blackPoint[0]; + this.YB = blackPoint[1]; + this.ZB = blackPoint[2]; + + // Validate vars as per spec + if (this.XW < 0 || this.ZW < 0 || this.YW !== 1) { + error('Invalid WhitePoint components, no fallback available'); + } + + if (this.XB < 0 || this.YB < 0 || this.ZB < 0) { + info('Invalid BlackPoint, falling back to default'); + this.XB = this.YB = this.ZB = 0; + } + + if (this.amin > this.amax || this.bmin > this.bmax) { + info('Invalid Range, falling back to defaults'); + this.amin = -100; + this.amax = 100; + this.bmin = -100; + this.bmax = 100; + } + } + + // Function g(x) from spec + function fn_g(x) { + if (x >= 6 / 29) { + return x * x * x; + } else { + return (108 / 841) * (x - 4 / 29); + } + } + + function decode(value, high1, low2, high2) { + return low2 + (value) * (high2 - low2) / (high1); + } + + // If decoding is needed maxVal should be 2^bits per component - 1. + function convertToRgb(cs, src, srcOffset, maxVal, dest, destOffset) { + // XXX: Lab input is in the range of [0, 100], [amin, amax], [bmin, bmax] + // not the usual [0, 1]. If a command like setFillColor is used the src + // values will already be within the correct range. However, if we are + // converting an image we have to map the values to the correct range given + // above. + // Ls,as,bs <---> L*,a*,b* in the spec + var Ls = src[srcOffset]; + var as = src[srcOffset + 1]; + var bs = src[srcOffset + 2]; + if (maxVal !== false) { + Ls = decode(Ls, maxVal, 0, 100); + as = decode(as, maxVal, cs.amin, cs.amax); + bs = decode(bs, maxVal, cs.bmin, cs.bmax); + } + + // Adjust limits of 'as' and 'bs' + as = as > cs.amax ? cs.amax : as < cs.amin ? cs.amin : as; + bs = bs > cs.bmax ? cs.bmax : bs < cs.bmin ? cs.bmin : bs; + + // Computes intermediate variables X,Y,Z as per spec + var M = (Ls + 16) / 116; + var L = M + (as / 500); + var N = M - (bs / 200); + + var X = cs.XW * fn_g(L); + var Y = cs.YW * fn_g(M); + var Z = cs.ZW * fn_g(N); + + var r, g, b; + // Using different conversions for D50 and D65 white points, + // per http://www.color.org/srgb.pdf + if (cs.ZW < 1) { + // Assuming D50 (X=0.9642, Y=1.00, Z=0.8249) + r = X * 3.1339 + Y * -1.6170 + Z * -0.4906; + g = X * -0.9785 + Y * 1.9160 + Z * 0.0333; + b = X * 0.0720 + Y * -0.2290 + Z * 1.4057; + } else { + // Assuming D65 (X=0.9505, Y=1.00, Z=1.0888) + r = X * 3.2406 + Y * -1.5372 + Z * -0.4986; + g = X * -0.9689 + Y * 1.8758 + Z * 0.0415; + b = X * 0.0557 + Y * -0.2040 + Z * 1.0570; + } + // clamp color values to [0,1] range then convert to [0,255] range. + dest[destOffset] = r <= 0 ? 0 : r >= 1 ? 255 : Math.sqrt(r) * 255 | 0; + dest[destOffset + 1] = g <= 0 ? 0 : g >= 1 ? 255 : Math.sqrt(g) * 255 | 0; + dest[destOffset + 2] = b <= 0 ? 0 : b >= 1 ? 255 : Math.sqrt(b) * 255 | 0; + } + + LabCS.prototype = { + getRgb: ColorSpace.prototype.getRgb, + getRgbItem: function LabCS_getRgbItem(src, srcOffset, dest, destOffset) { + convertToRgb(this, src, srcOffset, false, dest, destOffset); + }, + getRgbBuffer: function LabCS_getRgbBuffer(src, srcOffset, count, + dest, destOffset, bits, + alpha01) { + var maxVal = (1 << bits) - 1; + for (var i = 0; i < count; i++) { + convertToRgb(this, src, srcOffset, maxVal, dest, destOffset); + srcOffset += 3; + destOffset += 3 + alpha01; + } + }, + getOutputLength: function LabCS_getOutputLength(inputLength, alpha01) { + return (inputLength * (3 + alpha01) / 3) | 0; + }, + isPassthrough: ColorSpace.prototype.isPassthrough, + fillRgb: ColorSpace.prototype.fillRgb, + isDefaultDecode: function LabCS_isDefaultDecode(decodeMap) { + // XXX: Decoding is handled with the lab conversion because of the strange + // ranges that are used. + return true; + }, + usesZeroToOneRange: false + }; + return LabCS; +})(); + + +var ARCFourCipher = (function ARCFourCipherClosure() { + function ARCFourCipher(key) { + this.a = 0; + this.b = 0; + var s = new Uint8Array(256); + var i, j = 0, tmp, keyLength = key.length; + for (i = 0; i < 256; ++i) { + s[i] = i; + } + for (i = 0; i < 256; ++i) { + tmp = s[i]; + j = (j + tmp + key[i % keyLength]) & 0xFF; + s[i] = s[j]; + s[j] = tmp; + } + this.s = s; + } + + ARCFourCipher.prototype = { + encryptBlock: function ARCFourCipher_encryptBlock(data) { + var i, n = data.length, tmp, tmp2; + var a = this.a, b = this.b, s = this.s; + var output = new Uint8Array(n); + for (i = 0; i < n; ++i) { + a = (a + 1) & 0xFF; + tmp = s[a]; + b = (b + tmp) & 0xFF; + tmp2 = s[b]; + s[a] = tmp2; + s[b] = tmp; + output[i] = data[i] ^ s[(tmp + tmp2) & 0xFF]; + } + this.a = a; + this.b = b; + return output; + } + }; + ARCFourCipher.prototype.decryptBlock = ARCFourCipher.prototype.encryptBlock; + + return ARCFourCipher; +})(); + +var calculateMD5 = (function calculateMD5Closure() { + var r = new Uint8Array([ + 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, + 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, + 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, + 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21]); + + var k = new Int32Array([ + -680876936, -389564586, 606105819, -1044525330, -176418897, 1200080426, + -1473231341, -45705983, 1770035416, -1958414417, -42063, -1990404162, + 1804603682, -40341101, -1502002290, 1236535329, -165796510, -1069501632, + 643717713, -373897302, -701558691, 38016083, -660478335, -405537848, + 568446438, -1019803690, -187363961, 1163531501, -1444681467, -51403784, + 1735328473, -1926607734, -378558, -2022574463, 1839030562, -35309556, + -1530992060, 1272893353, -155497632, -1094730640, 681279174, -358537222, + -722521979, 76029189, -640364487, -421815835, 530742520, -995338651, + -198630844, 1126891415, -1416354905, -57434055, 1700485571, -1894986606, + -1051523, -2054922799, 1873313359, -30611744, -1560198380, 1309151649, + -145523070, -1120210379, 718787259, -343485551]); + + function hash(data, offset, length) { + var h0 = 1732584193, h1 = -271733879, h2 = -1732584194, h3 = 271733878; + // pre-processing + var paddedLength = (length + 72) & ~63; // data + 9 extra bytes + var padded = new Uint8Array(paddedLength); + var i, j, n; + for (i = 0; i < length; ++i) { + padded[i] = data[offset++]; + } + padded[i++] = 0x80; + n = paddedLength - 8; + while (i < n) { + padded[i++] = 0; + } + padded[i++] = (length << 3) & 0xFF; + padded[i++] = (length >> 5) & 0xFF; + padded[i++] = (length >> 13) & 0xFF; + padded[i++] = (length >> 21) & 0xFF; + padded[i++] = (length >>> 29) & 0xFF; + padded[i++] = 0; + padded[i++] = 0; + padded[i++] = 0; + var w = new Int32Array(16); + for (i = 0; i < paddedLength;) { + for (j = 0; j < 16; ++j, i += 4) { + w[j] = (padded[i] | (padded[i + 1] << 8) | + (padded[i + 2] << 16) | (padded[i + 3] << 24)); + } + var a = h0, b = h1, c = h2, d = h3, f, g; + for (j = 0; j < 64; ++j) { + if (j < 16) { + f = (b & c) | ((~b) & d); + g = j; + } else if (j < 32) { + f = (d & b) | ((~d) & c); + g = (5 * j + 1) & 15; + } else if (j < 48) { + f = b ^ c ^ d; + g = (3 * j + 5) & 15; + } else { + f = c ^ (b | (~d)); + g = (7 * j) & 15; + } + var tmp = d, rotateArg = (a + f + k[j] + w[g]) | 0, rotate = r[j]; + d = c; + c = b; + b = (b + ((rotateArg << rotate) | (rotateArg >>> (32 - rotate)))) | 0; + a = tmp; + } + h0 = (h0 + a) | 0; + h1 = (h1 + b) | 0; + h2 = (h2 + c) | 0; + h3 = (h3 + d) | 0; + } + return new Uint8Array([ + h0 & 0xFF, (h0 >> 8) & 0xFF, (h0 >> 16) & 0xFF, (h0 >>> 24) & 0xFF, + h1 & 0xFF, (h1 >> 8) & 0xFF, (h1 >> 16) & 0xFF, (h1 >>> 24) & 0xFF, + h2 & 0xFF, (h2 >> 8) & 0xFF, (h2 >> 16) & 0xFF, (h2 >>> 24) & 0xFF, + h3 & 0xFF, (h3 >> 8) & 0xFF, (h3 >> 16) & 0xFF, (h3 >>> 24) & 0xFF + ]); + } + + return hash; +})(); +var Word64 = (function Word64Closure() { + function Word64(highInteger, lowInteger) { + this.high = highInteger | 0; + this.low = lowInteger | 0; + } + Word64.prototype = { + and: function Word64_and(word) { + this.high &= word.high; + this.low &= word.low; + }, + xor: function Word64_xor(word) { + this.high ^= word.high; + this.low ^= word.low; + }, + + or: function Word64_or(word) { + this.high |= word.high; + this.low |= word.low; + }, + + shiftRight: function Word64_shiftRight(places) { + if (places >= 32) { + this.low = (this.high >>> (places - 32)) | 0; + this.high = 0; + } else { + this.low = (this.low >>> places) | (this.high << (32 - places)); + this.high = (this.high >>> places) | 0; + } + }, + + shiftLeft: function Word64_shiftLeft(places) { + if (places >= 32) { + this.high = this.low << (places - 32); + this.low = 0; + } else { + this.high = (this.high << places) | (this.low >>> (32 - places)); + this.low = this.low << places; + } + }, + + rotateRight: function Word64_rotateRight(places) { + var low, high; + if (places & 32) { + high = this.low; + low = this.high; + } else { + low = this.low; + high = this.high; + } + places &= 31; + this.low = (low >>> places) | (high << (32 - places)); + this.high = (high >>> places) | (low << (32 - places)); + }, + + not: function Word64_not() { + this.high = ~this.high; + this.low = ~this.low; + }, + + add: function Word64_add(word) { + var lowAdd = (this.low >>> 0) + (word.low >>> 0); + var highAdd = (this.high >>> 0) + (word.high >>> 0); + if (lowAdd > 0xFFFFFFFF) { + highAdd += 1; + } + this.low = lowAdd | 0; + this.high = highAdd | 0; + }, + + copyTo: function Word64_copyTo(bytes, offset) { + bytes[offset] = (this.high >>> 24) & 0xFF; + bytes[offset + 1] = (this.high >> 16) & 0xFF; + bytes[offset + 2] = (this.high >> 8) & 0xFF; + bytes[offset + 3] = this.high & 0xFF; + bytes[offset + 4] = (this.low >>> 24) & 0xFF; + bytes[offset + 5] = (this.low >> 16) & 0xFF; + bytes[offset + 6] = (this.low >> 8) & 0xFF; + bytes[offset + 7] = this.low & 0xFF; + }, + + assign: function Word64_assign(word) { + this.high = word.high; + this.low = word.low; + } + }; + return Word64; +})(); + +var calculateSHA256 = (function calculateSHA256Closure() { + function rotr(x, n) { + return (x >>> n) | (x << 32 - n); + } + + function ch(x, y, z) { + return (x & y) ^ (~x & z); + } + + function maj(x, y, z) { + return (x & y) ^ (x & z) ^ (y & z); + } + + function sigma(x) { + return rotr(x, 2) ^ rotr(x, 13) ^ rotr(x, 22); + } + + function sigmaPrime(x) { + return rotr(x, 6) ^ rotr(x, 11) ^ rotr(x, 25); + } + + function littleSigma(x) { + return rotr(x, 7) ^ rotr(x, 18) ^ x >>> 3; + } + + function littleSigmaPrime(x) { + return rotr(x, 17) ^ rotr(x, 19) ^ x >>> 10; + } + + var k = [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, + 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, + 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, + 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, + 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, + 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, + 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, + 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, + 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, + 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, + 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, + 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, + 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, + 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, + 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, + 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2]; + + function hash(data, offset, length) { + // initial hash values + var h0 = 0x6a09e667, h1 = 0xbb67ae85, h2 = 0x3c6ef372, + h3 = 0xa54ff53a, h4 = 0x510e527f, h5 = 0x9b05688c, + h6 = 0x1f83d9ab, h7 = 0x5be0cd19; + // pre-processing + var paddedLength = Math.ceil((length + 9) / 64) * 64; + var padded = new Uint8Array(paddedLength); + var i, j, n; + for (i = 0; i < length; ++i) { + padded[i] = data[offset++]; + } + padded[i++] = 0x80; + n = paddedLength - 8; + while (i < n) { + padded[i++] = 0; + } + padded[i++] = 0; + padded[i++] = 0; + padded[i++] = 0; + padded[i++] = (length >>> 29) & 0xFF; + padded[i++] = (length >> 21) & 0xFF; + padded[i++] = (length >> 13) & 0xFF; + padded[i++] = (length >> 5) & 0xFF; + padded[i++] = (length << 3) & 0xFF; + var w = new Uint32Array(64); + // for each 512 bit block + for (i = 0; i < paddedLength;) { + for (j = 0; j < 16; ++j) { + w[j] = (padded[i] << 24 | (padded[i + 1] << 16) | + (padded[i + 2] << 8) | (padded[i + 3])); + i += 4; + } + + for (j = 16; j < 64; ++j) { + w[j] = littleSigmaPrime(w[j - 2]) + w[j - 7] + + littleSigma(w[j - 15]) + w[j - 16] | 0; + } + var a = h0, b = h1, c = h2, d = h3, e = h4, + f = h5, g = h6, h = h7, t1, t2; + for (j = 0; j < 64; ++j) { + t1 = h + sigmaPrime(e) + ch(e, f, g) + k[j] + w[j]; + t2 = sigma(a) + maj(a, b, c); + h = g; + g = f; + f = e; + e = (d + t1) | 0; + d = c; + c = b; + b = a; + a = (t1 + t2) | 0; + } + h0 = (h0 + a) | 0; + h1 = (h1 + b) | 0; + h2 = (h2 + c) | 0; + h3 = (h3 + d) | 0; + h4 = (h4 + e) | 0; + h5 = (h5 + f) | 0; + h6 = (h6 + g) | 0; + h7 = (h7 + h) | 0; + } + return new Uint8Array([ + (h0 >> 24) & 0xFF, (h0 >> 16) & 0xFF, (h0 >> 8) & 0xFF, (h0) & 0xFF, + (h1 >> 24) & 0xFF, (h1 >> 16) & 0xFF, (h1 >> 8) & 0xFF, (h1) & 0xFF, + (h2 >> 24) & 0xFF, (h2 >> 16) & 0xFF, (h2 >> 8) & 0xFF, (h2) & 0xFF, + (h3 >> 24) & 0xFF, (h3 >> 16) & 0xFF, (h3 >> 8) & 0xFF, (h3) & 0xFF, + (h4 >> 24) & 0xFF, (h4 >> 16) & 0xFF, (h4 >> 8) & 0xFF, (h4) & 0xFF, + (h5 >> 24) & 0xFF, (h5 >> 16) & 0xFF, (h5 >> 8) & 0xFF, (h5) & 0xFF, + (h6 >> 24) & 0xFF, (h6 >> 16) & 0xFF, (h6 >> 8) & 0xFF, (h6) & 0xFF, + (h7 >> 24) & 0xFF, (h7 >> 16) & 0xFF, (h7 >> 8) & 0xFF, (h7) & 0xFF + ]); + } + + return hash; +})(); + +var calculateSHA512 = (function calculateSHA512Closure() { + function ch(result, x, y, z, tmp) { + result.assign(x); + result.and(y); + tmp.assign(x); + tmp.not(); + tmp.and(z); + result.xor(tmp); + } + + function maj(result, x, y, z, tmp) { + result.assign(x); + result.and(y); + tmp.assign(x); + tmp.and(z); + result.xor(tmp); + tmp.assign(y); + tmp.and(z); + result.xor(tmp); + } + + function sigma(result, x, tmp) { + result.assign(x); + result.rotateRight(28); + tmp.assign(x); + tmp.rotateRight(34); + result.xor(tmp); + tmp.assign(x); + tmp.rotateRight(39); + result.xor(tmp); + } + + function sigmaPrime(result, x, tmp) { + result.assign(x); + result.rotateRight(14); + tmp.assign(x); + tmp.rotateRight(18); + result.xor(tmp); + tmp.assign(x); + tmp.rotateRight(41); + result.xor(tmp); + } + + function littleSigma(result, x, tmp) { + result.assign(x); + result.rotateRight(1); + tmp.assign(x); + tmp.rotateRight(8); + result.xor(tmp); + tmp.assign(x); + tmp.shiftRight(7); + result.xor(tmp); + } + + function littleSigmaPrime(result, x, tmp) { + result.assign(x); + result.rotateRight(19); + tmp.assign(x); + tmp.rotateRight(61); + result.xor(tmp); + tmp.assign(x); + tmp.shiftRight(6); + result.xor(tmp); + } + + var k = [ + new Word64(0x428a2f98, 0xd728ae22), new Word64(0x71374491, 0x23ef65cd), + new Word64(0xb5c0fbcf, 0xec4d3b2f), new Word64(0xe9b5dba5, 0x8189dbbc), + new Word64(0x3956c25b, 0xf348b538), new Word64(0x59f111f1, 0xb605d019), + new Word64(0x923f82a4, 0xaf194f9b), new Word64(0xab1c5ed5, 0xda6d8118), + new Word64(0xd807aa98, 0xa3030242), new Word64(0x12835b01, 0x45706fbe), + new Word64(0x243185be, 0x4ee4b28c), new Word64(0x550c7dc3, 0xd5ffb4e2), + new Word64(0x72be5d74, 0xf27b896f), new Word64(0x80deb1fe, 0x3b1696b1), + new Word64(0x9bdc06a7, 0x25c71235), new Word64(0xc19bf174, 0xcf692694), + new Word64(0xe49b69c1, 0x9ef14ad2), new Word64(0xefbe4786, 0x384f25e3), + new Word64(0x0fc19dc6, 0x8b8cd5b5), new Word64(0x240ca1cc, 0x77ac9c65), + new Word64(0x2de92c6f, 0x592b0275), new Word64(0x4a7484aa, 0x6ea6e483), + new Word64(0x5cb0a9dc, 0xbd41fbd4), new Word64(0x76f988da, 0x831153b5), + new Word64(0x983e5152, 0xee66dfab), new Word64(0xa831c66d, 0x2db43210), + new Word64(0xb00327c8, 0x98fb213f), new Word64(0xbf597fc7, 0xbeef0ee4), + new Word64(0xc6e00bf3, 0x3da88fc2), new Word64(0xd5a79147, 0x930aa725), + new Word64(0x06ca6351, 0xe003826f), new Word64(0x14292967, 0x0a0e6e70), + new Word64(0x27b70a85, 0x46d22ffc), new Word64(0x2e1b2138, 0x5c26c926), + new Word64(0x4d2c6dfc, 0x5ac42aed), new Word64(0x53380d13, 0x9d95b3df), + new Word64(0x650a7354, 0x8baf63de), new Word64(0x766a0abb, 0x3c77b2a8), + new Word64(0x81c2c92e, 0x47edaee6), new Word64(0x92722c85, 0x1482353b), + new Word64(0xa2bfe8a1, 0x4cf10364), new Word64(0xa81a664b, 0xbc423001), + new Word64(0xc24b8b70, 0xd0f89791), new Word64(0xc76c51a3, 0x0654be30), + new Word64(0xd192e819, 0xd6ef5218), new Word64(0xd6990624, 0x5565a910), + new Word64(0xf40e3585, 0x5771202a), new Word64(0x106aa070, 0x32bbd1b8), + new Word64(0x19a4c116, 0xb8d2d0c8), new Word64(0x1e376c08, 0x5141ab53), + new Word64(0x2748774c, 0xdf8eeb99), new Word64(0x34b0bcb5, 0xe19b48a8), + new Word64(0x391c0cb3, 0xc5c95a63), new Word64(0x4ed8aa4a, 0xe3418acb), + new Word64(0x5b9cca4f, 0x7763e373), new Word64(0x682e6ff3, 0xd6b2b8a3), + new Word64(0x748f82ee, 0x5defb2fc), new Word64(0x78a5636f, 0x43172f60), + new Word64(0x84c87814, 0xa1f0ab72), new Word64(0x8cc70208, 0x1a6439ec), + new Word64(0x90befffa, 0x23631e28), new Word64(0xa4506ceb, 0xde82bde9), + new Word64(0xbef9a3f7, 0xb2c67915), new Word64(0xc67178f2, 0xe372532b), + new Word64(0xca273ece, 0xea26619c), new Word64(0xd186b8c7, 0x21c0c207), + new Word64(0xeada7dd6, 0xcde0eb1e), new Word64(0xf57d4f7f, 0xee6ed178), + new Word64(0x06f067aa, 0x72176fba), new Word64(0x0a637dc5, 0xa2c898a6), + new Word64(0x113f9804, 0xbef90dae), new Word64(0x1b710b35, 0x131c471b), + new Word64(0x28db77f5, 0x23047d84), new Word64(0x32caab7b, 0x40c72493), + new Word64(0x3c9ebe0a, 0x15c9bebc), new Word64(0x431d67c4, 0x9c100d4c), + new Word64(0x4cc5d4be, 0xcb3e42b6), new Word64(0x597f299c, 0xfc657e2a), + new Word64(0x5fcb6fab, 0x3ad6faec), new Word64(0x6c44198c, 0x4a475817)]; + + function hash(data, offset, length, mode384) { + mode384 = !!mode384; + // initial hash values + var h0, h1, h2, h3, h4, h5, h6, h7; + if (!mode384) { + h0 = new Word64(0x6a09e667, 0xf3bcc908); + h1 = new Word64(0xbb67ae85, 0x84caa73b); + h2 = new Word64(0x3c6ef372, 0xfe94f82b); + h3 = new Word64(0xa54ff53a, 0x5f1d36f1); + h4 = new Word64(0x510e527f, 0xade682d1); + h5 = new Word64(0x9b05688c, 0x2b3e6c1f); + h6 = new Word64(0x1f83d9ab, 0xfb41bd6b); + h7 = new Word64(0x5be0cd19, 0x137e2179); + } + else { + // SHA384 is exactly the same + // except with different starting values and a trimmed result + h0 = new Word64(0xcbbb9d5d, 0xc1059ed8); + h1 = new Word64(0x629a292a, 0x367cd507); + h2 = new Word64(0x9159015a, 0x3070dd17); + h3 = new Word64(0x152fecd8, 0xf70e5939); + h4 = new Word64(0x67332667, 0xffc00b31); + h5 = new Word64(0x8eb44a87, 0x68581511); + h6 = new Word64(0xdb0c2e0d, 0x64f98fa7); + h7 = new Word64(0x47b5481d, 0xbefa4fa4); + } + + // pre-processing + var paddedLength = Math.ceil((length + 17) / 128) * 128; + var padded = new Uint8Array(paddedLength); + var i, j, n; + for (i = 0; i < length; ++i) { + padded[i] = data[offset++]; + } + padded[i++] = 0x80; + n = paddedLength - 16; + while (i < n) { + padded[i++] = 0; + } + padded[i++] = 0; + padded[i++] = 0; + padded[i++] = 0; + padded[i++] = 0; + padded[i++] = 0; + padded[i++] = 0; + padded[i++] = 0; + padded[i++] = 0; + padded[i++] = 0; + padded[i++] = 0; + padded[i++] = 0; + padded[i++] = (length >>> 29) & 0xFF; + padded[i++] = (length >> 21) & 0xFF; + padded[i++] = (length >> 13) & 0xFF; + padded[i++] = (length >> 5) & 0xFF; + padded[i++] = (length << 3) & 0xFF; + + var w = new Array(80); + for (i = 0; i < 80; i++) { + w[i] = new Word64(0, 0); + } + var a = new Word64(0, 0), b = new Word64(0, 0), c = new Word64(0, 0); + var d = new Word64(0, 0), e = new Word64(0, 0), f = new Word64(0, 0); + var g = new Word64(0, 0), h = new Word64(0, 0); + var t1 = new Word64(0, 0), t2 = new Word64(0, 0); + var tmp1 = new Word64(0, 0), tmp2 = new Word64(0, 0), tmp3; + + // for each 1024 bit block + for (i = 0; i < paddedLength;) { + for (j = 0; j < 16; ++j) { + w[j].high = (padded[i] << 24) | (padded[i + 1] << 16) | + (padded[i + 2] << 8) | (padded[i + 3]); + w[j].low = (padded[i + 4]) << 24 | (padded[i + 5]) << 16 | + (padded[i + 6]) << 8 | (padded[i + 7]); + i += 8; + } + for (j = 16; j < 80; ++j) { + tmp3 = w[j]; + littleSigmaPrime(tmp3, w[j - 2], tmp2); + tmp3.add(w[j - 7]); + littleSigma(tmp1, w[j - 15], tmp2); + tmp3.add(tmp1); + tmp3.add(w[j - 16]); + } + + a.assign(h0); b.assign(h1); c.assign(h2); d.assign(h3); + e.assign(h4); f.assign(h5); g.assign(h6); h.assign(h7); + for (j = 0; j < 80; ++j) { + t1.assign(h); + sigmaPrime(tmp1, e, tmp2); + t1.add(tmp1); + ch(tmp1, e, f, g, tmp2); + t1.add(tmp1); + t1.add(k[j]); + t1.add(w[j]); + + sigma(t2, a, tmp2); + maj(tmp1, a, b, c, tmp2); + t2.add(tmp1); + + tmp3 = h; + h = g; + g = f; + f = e; + d.add(t1); + e = d; + d = c; + c = b; + b = a; + tmp3.assign(t1); + tmp3.add(t2); + a = tmp3; + } + h0.add(a); + h1.add(b); + h2.add(c); + h3.add(d); + h4.add(e); + h5.add(f); + h6.add(g); + h7.add(h); + } + + var result; + if (!mode384) { + result = new Uint8Array(64); + h0.copyTo(result,0); + h1.copyTo(result,8); + h2.copyTo(result,16); + h3.copyTo(result,24); + h4.copyTo(result,32); + h5.copyTo(result,40); + h6.copyTo(result,48); + h7.copyTo(result,56); + } + else { + result = new Uint8Array(48); + h0.copyTo(result,0); + h1.copyTo(result,8); + h2.copyTo(result,16); + h3.copyTo(result,24); + h4.copyTo(result,32); + h5.copyTo(result,40); + } + return result; + } + + return hash; +})(); +var calculateSHA384 = (function calculateSHA384Closure() { + function hash(data, offset, length) { + return calculateSHA512(data, offset, length, true); + } + + return hash; +})(); +var NullCipher = (function NullCipherClosure() { + function NullCipher() { + } + + NullCipher.prototype = { + decryptBlock: function NullCipher_decryptBlock(data) { + return data; + } + }; + + return NullCipher; +})(); + +var AES128Cipher = (function AES128CipherClosure() { + var rcon = new Uint8Array([ + 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, + 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, + 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, + 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, + 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, + 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, + 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, + 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, + 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, + 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, + 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, + 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, + 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, + 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, + 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, + 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, + 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, + 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, + 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, + 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, + 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, + 0x74, 0xe8, 0xcb, 0x8d]); + + var s = new Uint8Array([ + 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, + 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, + 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, + 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, + 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, + 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, + 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, + 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, + 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, + 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, + 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, + 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, + 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, + 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, + 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, + 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, + 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, + 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, + 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, + 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, + 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, + 0xb0, 0x54, 0xbb, 0x16]); + + var inv_s = new Uint8Array([ + 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, + 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, + 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, + 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, + 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, + 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, + 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, + 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, + 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, + 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, + 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, + 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, + 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, + 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, + 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, + 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, + 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, + 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, + 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, + 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, + 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, + 0x55, 0x21, 0x0c, 0x7d]); + var mixCol = new Uint8Array(256); + for (var i = 0; i < 256; i++) { + if (i < 128) { + mixCol[i] = i << 1; + } else { + mixCol[i] = (i << 1) ^ 0x1b; + } + } + var mix = new Uint32Array([ + 0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927, + 0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45, + 0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb, + 0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381, + 0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf, + 0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66, + 0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28, + 0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012, + 0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec, + 0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e, + 0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd, + 0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7, + 0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89, + 0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b, + 0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815, + 0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f, + 0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa, + 0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8, + 0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36, + 0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c, + 0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742, + 0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea, + 0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4, + 0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e, + 0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360, + 0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502, + 0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87, + 0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd, + 0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3, + 0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621, + 0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f, + 0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55, + 0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26, + 0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844, + 0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba, + 0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480, + 0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce, + 0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67, + 0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929, + 0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713, + 0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed, + 0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f, + 0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3]); + + function expandKey128(cipherKey) { + var b = 176, result = new Uint8Array(b); + result.set(cipherKey); + for (var j = 16, i = 1; j < b; ++i) { + // RotWord + var t1 = result[j - 3], t2 = result[j - 2], + t3 = result[j - 1], t4 = result[j - 4]; + // SubWord + t1 = s[t1]; + t2 = s[t2]; + t3 = s[t3]; + t4 = s[t4]; + // Rcon + t1 = t1 ^ rcon[i]; + for (var n = 0; n < 4; ++n) { + result[j] = (t1 ^= result[j - 16]); + j++; + result[j] = (t2 ^= result[j - 16]); + j++; + result[j] = (t3 ^= result[j - 16]); + j++; + result[j] = (t4 ^= result[j - 16]); + j++; + } + } + return result; + } + + function decrypt128(input, key) { + var state = new Uint8Array(16); + state.set(input); + var i, j, k; + var t, u, v; + // AddRoundKey + for (j = 0, k = 160; j < 16; ++j, ++k) { + state[j] ^= key[k]; + } + for (i = 9; i >= 1; --i) { + // InvShiftRows + t = state[13]; + state[13] = state[9]; + state[9] = state[5]; + state[5] = state[1]; + state[1] = t; + t = state[14]; + u = state[10]; + state[14] = state[6]; + state[10] = state[2]; + state[6] = t; + state[2] = u; + t = state[15]; + u = state[11]; + v = state[7]; + state[15] = state[3]; + state[11] = t; + state[7] = u; + state[3] = v; + // InvSubBytes + for (j = 0; j < 16; ++j) { + state[j] = inv_s[state[j]]; + } + // AddRoundKey + for (j = 0, k = i * 16; j < 16; ++j, ++k) { + state[j] ^= key[k]; + } + // InvMixColumns + for (j = 0; j < 16; j += 4) { + var s0 = mix[state[j]], s1 = mix[state[j + 1]], + s2 = mix[state[j + 2]], s3 = mix[state[j + 3]]; + t = (s0 ^ (s1 >>> 8) ^ (s1 << 24) ^ (s2 >>> 16) ^ (s2 << 16) ^ + (s3 >>> 24) ^ (s3 << 8)); + state[j] = (t >>> 24) & 0xFF; + state[j + 1] = (t >> 16) & 0xFF; + state[j + 2] = (t >> 8) & 0xFF; + state[j + 3] = t & 0xFF; + } + } + // InvShiftRows + t = state[13]; + state[13] = state[9]; + state[9] = state[5]; + state[5] = state[1]; + state[1] = t; + t = state[14]; + u = state[10]; + state[14] = state[6]; + state[10] = state[2]; + state[6] = t; + state[2] = u; + t = state[15]; + u = state[11]; + v = state[7]; + state[15] = state[3]; + state[11] = t; + state[7] = u; + state[3] = v; + for (j = 0; j < 16; ++j) { + // InvSubBytes + state[j] = inv_s[state[j]]; + // AddRoundKey + state[j] ^= key[j]; + } + return state; + } + + function encrypt128(input, key) { + var t, u, v, k; + var state = new Uint8Array(16); + state.set(input); + for (j = 0; j < 16; ++j) { + // AddRoundKey + state[j] ^= key[j]; + } + + for (i = 1; i < 10; i++) { + //SubBytes + for (j = 0; j < 16; ++j) { + state[j] = s[state[j]]; + } + //ShiftRows + v = state[1]; + state[1] = state[5]; + state[5] = state[9]; + state[9] = state[13]; + state[13] = v; + v = state[2]; + u = state[6]; + state[2] = state[10]; + state[6] = state[14]; + state[10] = v; + state[14] = u; + v = state[3]; + u = state[7]; + t = state[11]; + state[3] = state[15]; + state[7] = v; + state[11] = u; + state[15] = t; + //MixColumns + for (var j = 0; j < 16; j += 4) { + var s0 = state[j + 0], s1 = state[j + 1]; + var s2 = state[j + 2], s3 = state[j + 3]; + t = s0 ^ s1 ^ s2 ^ s3; + state[j + 0] ^= t ^ mixCol[s0 ^ s1]; + state[j + 1] ^= t ^ mixCol[s1 ^ s2]; + state[j + 2] ^= t ^ mixCol[s2 ^ s3]; + state[j + 3] ^= t ^ mixCol[s3 ^ s0]; + } + //AddRoundKey + for (j = 0, k = i * 16; j < 16; ++j, ++k) { + state[j] ^= key[k]; + } + } + + //SubBytes + for (j = 0; j < 16; ++j) { + state[j] = s[state[j]]; + } + //ShiftRows + v = state[1]; + state[1] = state[5]; + state[5] = state[9]; + state[9] = state[13]; + state[13] = v; + v = state[2]; + u = state[6]; + state[2] = state[10]; + state[6] = state[14]; + state[10] = v; + state[14] = u; + v = state[3]; + u = state[7]; + t = state[11]; + state[3] = state[15]; + state[7] = v; + state[11] = u; + state[15] = t; + //AddRoundKey + for (j = 0, k = 160; j < 16; ++j, ++k) { + state[j] ^= key[k]; + } + return state; + } + + function AES128Cipher(key) { + this.key = expandKey128(key); + this.buffer = new Uint8Array(16); + this.bufferPosition = 0; + } + + function decryptBlock2(data, finalize) { + var i, j, ii, sourceLength = data.length, + buffer = this.buffer, bufferLength = this.bufferPosition, + result = [], iv = this.iv; + for (i = 0; i < sourceLength; ++i) { + buffer[bufferLength] = data[i]; + ++bufferLength; + if (bufferLength < 16) { + continue; + } + // buffer is full, decrypting + var plain = decrypt128(buffer, this.key); + // xor-ing the IV vector to get plain text + for (j = 0; j < 16; ++j) { + plain[j] ^= iv[j]; + } + iv = buffer; + result.push(plain); + buffer = new Uint8Array(16); + bufferLength = 0; + } + // saving incomplete buffer + this.buffer = buffer; + this.bufferLength = bufferLength; + this.iv = iv; + if (result.length === 0) { + return new Uint8Array([]); + } + // combining plain text blocks into one + var outputLength = 16 * result.length; + if (finalize) { + // undo a padding that is described in RFC 2898 + var lastBlock = result[result.length - 1]; + var psLen = lastBlock[15]; + if (psLen <= 16) { + for (i = 15, ii = 16 - psLen; i >= ii; --i) { + if (lastBlock[i] !== psLen) { + // Invalid padding, assume that the block has no padding. + psLen = 0; + break; + } + } + outputLength -= psLen; + result[result.length - 1] = lastBlock.subarray(0, 16 - psLen); + } + } + var output = new Uint8Array(outputLength); + for (i = 0, j = 0, ii = result.length; i < ii; ++i, j += 16) { + output.set(result[i], j); + } + return output; + } + + AES128Cipher.prototype = { + decryptBlock: function AES128Cipher_decryptBlock(data, finalize) { + var i, sourceLength = data.length; + var buffer = this.buffer, bufferLength = this.bufferPosition; + // waiting for IV values -- they are at the start of the stream + for (i = 0; bufferLength < 16 && i < sourceLength; ++i, ++bufferLength) { + buffer[bufferLength] = data[i]; + } + if (bufferLength < 16) { + // need more data + this.bufferLength = bufferLength; + return new Uint8Array([]); + } + this.iv = buffer; + this.buffer = new Uint8Array(16); + this.bufferLength = 0; + // starting decryption + this.decryptBlock = decryptBlock2; + return this.decryptBlock(data.subarray(16), finalize); + }, + encrypt: function AES128Cipher_encrypt(data, iv) { + var i, j, ii, sourceLength = data.length, + buffer = this.buffer, bufferLength = this.bufferPosition, + result = []; + if (!iv) { + iv = new Uint8Array(16); + } + for (i = 0; i < sourceLength; ++i) { + buffer[bufferLength] = data[i]; + ++bufferLength; + if (bufferLength < 16) { + continue; + } + for (j = 0; j < 16; ++j) { + buffer[j] ^= iv[j]; + } + + // buffer is full, encrypting + var cipher = encrypt128(buffer, this.key); + iv = cipher; + result.push(cipher); + buffer = new Uint8Array(16); + bufferLength = 0; + } + // saving incomplete buffer + this.buffer = buffer; + this.bufferLength = bufferLength; + this.iv = iv; + if (result.length === 0) { + return new Uint8Array([]); + } + // combining plain text blocks into one + var outputLength = 16 * result.length; + var output = new Uint8Array(outputLength); + for (i = 0, j = 0, ii = result.length; i < ii; ++i, j += 16) { + output.set(result[i], j); + } + return output; + } + }; + + return AES128Cipher; +})(); + +var AES256Cipher = (function AES256CipherClosure() { + var rcon = new Uint8Array([ + 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, + 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, + 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, + 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, + 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, + 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, + 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, + 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, + 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, + 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, + 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, + 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, + 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, + 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, + 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, + 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, + 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, + 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, + 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, + 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, + 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, + 0x74, 0xe8, 0xcb, 0x8d]); + + var s = new Uint8Array([ + 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, + 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, + 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, + 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, + 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, + 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, + 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, + 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, + 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, + 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, + 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, + 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, + 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, + 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, + 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, + 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, + 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, + 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, + 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, + 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, + 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, + 0xb0, 0x54, 0xbb, 0x16]); + + var inv_s = new Uint8Array([ + 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, + 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, + 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, + 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, + 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, + 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, + 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, + 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, + 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, + 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, + 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, + 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, + 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, + 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, + 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, + 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, + 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, + 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, + 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, + 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, + 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, + 0x55, 0x21, 0x0c, 0x7d]); + + var mixCol = new Uint8Array(256); + for (var i = 0; i < 256; i++) { + if (i < 128) { + mixCol[i] = i << 1; + } else { + mixCol[i] = (i << 1) ^ 0x1b; + } + } + var mix = new Uint32Array([ + 0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927, + 0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45, + 0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb, + 0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381, + 0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf, + 0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66, + 0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28, + 0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012, + 0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec, + 0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e, + 0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd, + 0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7, + 0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89, + 0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b, + 0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815, + 0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f, + 0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa, + 0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8, + 0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36, + 0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c, + 0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742, + 0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea, + 0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4, + 0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e, + 0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360, + 0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502, + 0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87, + 0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd, + 0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3, + 0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621, + 0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f, + 0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55, + 0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26, + 0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844, + 0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba, + 0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480, + 0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce, + 0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67, + 0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929, + 0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713, + 0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed, + 0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f, + 0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3]); + + function expandKey256(cipherKey) { + var b = 240, result = new Uint8Array(b); + var r = 1; + + result.set(cipherKey); + for (var j = 32, i = 1; j < b; ++i) { + if (j % 32 === 16) { + t1 = s[t1]; + t2 = s[t2]; + t3 = s[t3]; + t4 = s[t4]; + } else if (j % 32 === 0) { + // RotWord + var t1 = result[j - 3], t2 = result[j - 2], + t3 = result[j - 1], t4 = result[j - 4]; + // SubWord + t1 = s[t1]; + t2 = s[t2]; + t3 = s[t3]; + t4 = s[t4]; + // Rcon + t1 = t1 ^ r; + if ((r <<= 1) >= 256) { + r = (r ^ 0x1b) & 0xFF; + } + } + + for (var n = 0; n < 4; ++n) { + result[j] = (t1 ^= result[j - 32]); + j++; + result[j] = (t2 ^= result[j - 32]); + j++; + result[j] = (t3 ^= result[j - 32]); + j++; + result[j] = (t4 ^= result[j - 32]); + j++; + } + } + return result; + } + + function decrypt256(input, key) { + var state = new Uint8Array(16); + state.set(input); + var i, j, k; + var t, u, v; + // AddRoundKey + for (j = 0, k = 224; j < 16; ++j, ++k) { + state[j] ^= key[k]; + } + for (i = 13; i >= 1; --i) { + // InvShiftRows + t = state[13]; + state[13] = state[9]; + state[9] = state[5]; + state[5] = state[1]; + state[1] = t; + t = state[14]; + u = state[10]; + state[14] = state[6]; + state[10] = state[2]; + state[6] = t; + state[2] = u; + t = state[15]; + u = state[11]; + v = state[7]; + state[15] = state[3]; + state[11] = t; + state[7] = u; + state[3] = v; + // InvSubBytes + for (j = 0; j < 16; ++j) { + state[j] = inv_s[state[j]]; + } + // AddRoundKey + for (j = 0, k = i * 16; j < 16; ++j, ++k) { + state[j] ^= key[k]; + } + // InvMixColumns + for (j = 0; j < 16; j += 4) { + var s0 = mix[state[j]], s1 = mix[state[j + 1]], + s2 = mix[state[j + 2]], s3 = mix[state[j + 3]]; + t = (s0 ^ (s1 >>> 8) ^ (s1 << 24) ^ (s2 >>> 16) ^ (s2 << 16) ^ + (s3 >>> 24) ^ (s3 << 8)); + state[j] = (t >>> 24) & 0xFF; + state[j + 1] = (t >> 16) & 0xFF; + state[j + 2] = (t >> 8) & 0xFF; + state[j + 3] = t & 0xFF; + } + } + // InvShiftRows + t = state[13]; + state[13] = state[9]; + state[9] = state[5]; + state[5] = state[1]; + state[1] = t; + t = state[14]; + u = state[10]; + state[14] = state[6]; + state[10] = state[2]; + state[6] = t; + state[2] = u; + t = state[15]; + u = state[11]; + v = state[7]; + state[15] = state[3]; + state[11] = t; + state[7] = u; + state[3] = v; + for (j = 0; j < 16; ++j) { + // InvSubBytes + state[j] = inv_s[state[j]]; + // AddRoundKey + state[j] ^= key[j]; + } + return state; + } + + function encrypt256(input, key) { + var t, u, v, k; + var state = new Uint8Array(16); + state.set(input); + for (j = 0; j < 16; ++j) { + // AddRoundKey + state[j] ^= key[j]; + } + + for (i = 1; i < 14; i++) { + //SubBytes + for (j = 0; j < 16; ++j) { + state[j] = s[state[j]]; + } + //ShiftRows + v = state[1]; + state[1] = state[5]; + state[5] = state[9]; + state[9] = state[13]; + state[13] = v; + v = state[2]; + u = state[6]; + state[2] = state[10]; + state[6] = state[14]; + state[10] = v; + state[14] = u; + v = state[3]; + u = state[7]; + t = state[11]; + state[3] = state[15]; + state[7] = v; + state[11] = u; + state[15] = t; + //MixColumns + for (var j = 0; j < 16; j += 4) { + var s0 = state[j + 0], s1 = state[j + 1]; + var s2 = state[j + 2], s3 = state[j + 3]; + t = s0 ^ s1 ^ s2 ^ s3; + state[j + 0] ^= t ^ mixCol[s0 ^ s1]; + state[j + 1] ^= t ^ mixCol[s1 ^ s2]; + state[j + 2] ^= t ^ mixCol[s2 ^ s3]; + state[j + 3] ^= t ^ mixCol[s3 ^ s0]; + } + //AddRoundKey + for (j = 0, k = i * 16; j < 16; ++j, ++k) { + state[j] ^= key[k]; + } + } + + //SubBytes + for (j = 0; j < 16; ++j) { + state[j] = s[state[j]]; + } + //ShiftRows + v = state[1]; + state[1] = state[5]; + state[5] = state[9]; + state[9] = state[13]; + state[13] = v; + v = state[2]; + u = state[6]; + state[2] = state[10]; + state[6] = state[14]; + state[10] = v; + state[14] = u; + v = state[3]; + u = state[7]; + t = state[11]; + state[3] = state[15]; + state[7] = v; + state[11] = u; + state[15] = t; + //AddRoundKey + for (j = 0, k = 224; j < 16; ++j, ++k) { + state[j] ^= key[k]; + } + + return state; + + } + + function AES256Cipher(key) { + this.key = expandKey256(key); + this.buffer = new Uint8Array(16); + this.bufferPosition = 0; + } + + function decryptBlock2(data, finalize) { + var i, j, ii, sourceLength = data.length, + buffer = this.buffer, bufferLength = this.bufferPosition, + result = [], iv = this.iv; + + for (i = 0; i < sourceLength; ++i) { + buffer[bufferLength] = data[i]; + ++bufferLength; + if (bufferLength < 16) { + continue; + } + // buffer is full, decrypting + var plain = decrypt256(buffer, this.key); + // xor-ing the IV vector to get plain text + for (j = 0; j < 16; ++j) { + plain[j] ^= iv[j]; + } + iv = buffer; + result.push(plain); + buffer = new Uint8Array(16); + bufferLength = 0; + } + // saving incomplete buffer + this.buffer = buffer; + this.bufferLength = bufferLength; + this.iv = iv; + if (result.length === 0) { + return new Uint8Array([]); + } + // combining plain text blocks into one + var outputLength = 16 * result.length; + if (finalize) { + // undo a padding that is described in RFC 2898 + var lastBlock = result[result.length - 1]; + var psLen = lastBlock[15]; + if (psLen <= 16) { + for (i = 15, ii = 16 - psLen; i >= ii; --i) { + if (lastBlock[i] !== psLen) { + // Invalid padding, assume that the block has no padding. + psLen = 0; + break; + } + } + outputLength -= psLen; + result[result.length - 1] = lastBlock.subarray(0, 16 - psLen); + } + } + var output = new Uint8Array(outputLength); + for (i = 0, j = 0, ii = result.length; i < ii; ++i, j += 16) { + output.set(result[i], j); + } + return output; + + } + + AES256Cipher.prototype = { + decryptBlock: function AES256Cipher_decryptBlock(data, finalize, iv) { + var i, sourceLength = data.length; + var buffer = this.buffer, bufferLength = this.bufferPosition; + // if not supplied an IV wait for IV values + // they are at the start of the stream + if (iv) { + this.iv = iv; + } else { + for (i = 0; bufferLength < 16 && + i < sourceLength; ++i, ++bufferLength) { + buffer[bufferLength] = data[i]; + } + if (bufferLength < 16) { + //need more data + this.bufferLength = bufferLength; + return new Uint8Array([]); + } + this.iv = buffer; + data = data.subarray(16); + } + this.buffer = new Uint8Array(16); + this.bufferLength = 0; + // starting decryption + this.decryptBlock = decryptBlock2; + return this.decryptBlock(data, finalize); + }, + encrypt: function AES256Cipher_encrypt(data, iv) { + var i, j, ii, sourceLength = data.length, + buffer = this.buffer, bufferLength = this.bufferPosition, + result = []; + if (!iv) { + iv = new Uint8Array(16); + } + for (i = 0; i < sourceLength; ++i) { + buffer[bufferLength] = data[i]; + ++bufferLength; + if (bufferLength < 16) { + continue; + } + for (j = 0; j < 16; ++j) { + buffer[j] ^= iv[j]; + } + + // buffer is full, encrypting + var cipher = encrypt256(buffer, this.key); + this.iv = cipher; + result.push(cipher); + buffer = new Uint8Array(16); + bufferLength = 0; + } + // saving incomplete buffer + this.buffer = buffer; + this.bufferLength = bufferLength; + this.iv = iv; + if (result.length === 0) { + return new Uint8Array([]); + } + // combining plain text blocks into one + var outputLength = 16 * result.length; + var output = new Uint8Array(outputLength); + for (i = 0, j = 0, ii = result.length; i < ii; ++i, j += 16) { + output.set(result[i], j); + } + return output; + } + }; + + return AES256Cipher; +})(); + +var PDF17 = (function PDF17Closure() { + + function compareByteArrays(array1, array2) { + if (array1.length !== array2.length) { + return false; + } + for (var i = 0; i < array1.length; i++) { + if (array1[i] !== array2[i]) { + return false; + } + } + return true; + } + + function PDF17() { + } + + PDF17.prototype = { + checkOwnerPassword: function PDF17_checkOwnerPassword(password, + ownerValidationSalt, + userBytes, + ownerPassword) { + var hashData = new Uint8Array(password.length + 56); + hashData.set(password, 0); + hashData.set(ownerValidationSalt, password.length); + hashData.set(userBytes, password.length + ownerValidationSalt.length); + var result = calculateSHA256(hashData, 0, hashData.length); + return compareByteArrays(result, ownerPassword); + }, + checkUserPassword: function PDF17_checkUserPassword(password, + userValidationSalt, + userPassword) { + var hashData = new Uint8Array(password.length + 8); + hashData.set(password, 0); + hashData.set(userValidationSalt, password.length); + var result = calculateSHA256(hashData, 0, hashData.length); + return compareByteArrays(result, userPassword); + }, + getOwnerKey: function PDF17_getOwnerKey(password, ownerKeySalt, userBytes, + ownerEncryption) { + var hashData = new Uint8Array(password.length + 56); + hashData.set(password, 0); + hashData.set(ownerKeySalt, password.length); + hashData.set(userBytes, password.length + ownerKeySalt.length); + var key = calculateSHA256(hashData, 0, hashData.length); + var cipher = new AES256Cipher(key); + return cipher.decryptBlock(ownerEncryption, + false, + new Uint8Array(16)); + + }, + getUserKey: function PDF17_getUserKey(password, userKeySalt, + userEncryption) { + var hashData = new Uint8Array(password.length + 8); + hashData.set(password, 0); + hashData.set(userKeySalt, password.length); + //key is the decryption key for the UE string + var key = calculateSHA256(hashData, 0, hashData.length); + var cipher = new AES256Cipher(key); + return cipher.decryptBlock(userEncryption, + false, + new Uint8Array(16)); + } + }; + return PDF17; +})(); + +var PDF20 = (function PDF20Closure() { + + function concatArrays(array1, array2) { + var t = new Uint8Array(array1.length + array2.length); + t.set(array1, 0); + t.set(array2, array1.length); + return t; + } + + function calculatePDF20Hash(password, input, userBytes) { + //This refers to Algorithm 2.B as defined in ISO 32000-2 + var k = calculateSHA256(input, 0, input.length).subarray(0, 32); + var e = [0]; + var i = 0; + while (i < 64 || e[e.length - 1] > i - 32) { + var arrayLength = password.length + k.length + userBytes.length; + + var k1 = new Uint8Array(arrayLength * 64); + var array = concatArrays(password, k); + array = concatArrays(array, userBytes); + for (var j = 0, pos = 0; j < 64; j++, pos += arrayLength) { + k1.set(array, pos); + } + //AES128 CBC NO PADDING with + //first 16 bytes of k as the key and the second 16 as the iv. + var cipher = new AES128Cipher(k.subarray(0, 16)); + e = cipher.encrypt(k1, k.subarray(16, 32)); + //Now we have to take the first 16 bytes of an unsigned + //big endian integer... and compute the remainder + //modulo 3.... That is a fairly large number and + //JavaScript isn't going to handle that well... + //So we're using a trick that allows us to perform + //modulo math byte by byte + var remainder = 0; + for (var z = 0; z < 16; z++) { + remainder *= (256 % 3); + remainder %= 3; + remainder += ((e[z] >>> 0) % 3); + remainder %= 3; + } + if (remainder === 0) { + k = calculateSHA256(e, 0, e.length); + } + else if (remainder === 1) { + k = calculateSHA384(e, 0, e.length); + } + else if (remainder === 2) { + k = calculateSHA512(e, 0, e.length); + } + i++; + } + return k.subarray(0, 32); + } + + function PDF20() { + } + + function compareByteArrays(array1, array2) { + if (array1.length !== array2.length) { + return false; + } + for (var i = 0; i < array1.length; i++) { + if (array1[i] !== array2[i]) { + return false; + } + } + return true; + } + + PDF20.prototype = { + hash: function PDF20_hash(password, concatBytes, userBytes) { + return calculatePDF20Hash(password, concatBytes, userBytes); + }, + checkOwnerPassword: function PDF20_checkOwnerPassword(password, + ownerValidationSalt, + userBytes, + ownerPassword) { + var hashData = new Uint8Array(password.length + 56); + hashData.set(password, 0); + hashData.set(ownerValidationSalt, password.length); + hashData.set(userBytes, password.length + ownerValidationSalt.length); + var result = calculatePDF20Hash(password, hashData, userBytes); + return compareByteArrays(result, ownerPassword); + }, + checkUserPassword: function PDF20_checkUserPassword(password, + userValidationSalt, + userPassword) { + var hashData = new Uint8Array(password.length + 8); + hashData.set(password, 0); + hashData.set(userValidationSalt, password.length); + var result = calculatePDF20Hash(password, hashData, []); + return compareByteArrays(result, userPassword); + }, + getOwnerKey: function PDF20_getOwnerKey(password, ownerKeySalt, userBytes, + ownerEncryption) { + var hashData = new Uint8Array(password.length + 56); + hashData.set(password, 0); + hashData.set(ownerKeySalt, password.length); + hashData.set(userBytes, password.length + ownerKeySalt.length); + var key = calculatePDF20Hash(password, hashData, userBytes); + var cipher = new AES256Cipher(key); + return cipher.decryptBlock(ownerEncryption, + false, + new Uint8Array(16)); + + }, + getUserKey: function PDF20_getUserKey(password, userKeySalt, + userEncryption) { + var hashData = new Uint8Array(password.length + 8); + hashData.set(password, 0); + hashData.set(userKeySalt, password.length); + //key is the decryption key for the UE string + var key = calculatePDF20Hash(password, hashData, []); + var cipher = new AES256Cipher(key); + return cipher.decryptBlock(userEncryption, + false, + new Uint8Array(16)); + } + }; + return PDF20; +})(); + +var CipherTransform = (function CipherTransformClosure() { + function CipherTransform(stringCipherConstructor, streamCipherConstructor) { + this.stringCipherConstructor = stringCipherConstructor; + this.streamCipherConstructor = streamCipherConstructor; + } + + CipherTransform.prototype = { + createStream: function CipherTransform_createStream(stream, length) { + var cipher = new this.streamCipherConstructor(); + return new DecryptStream(stream, length, + function cipherTransformDecryptStream(data, finalize) { + return cipher.decryptBlock(data, finalize); + } + ); + }, + decryptString: function CipherTransform_decryptString(s) { + var cipher = new this.stringCipherConstructor(); + var data = stringToBytes(s); + data = cipher.decryptBlock(data, true); + return bytesToString(data); + } + }; + return CipherTransform; +})(); + +var CipherTransformFactory = (function CipherTransformFactoryClosure() { + var defaultPasswordBytes = new Uint8Array([ + 0x28, 0xBF, 0x4E, 0x5E, 0x4E, 0x75, 0x8A, 0x41, + 0x64, 0x00, 0x4E, 0x56, 0xFF, 0xFA, 0x01, 0x08, + 0x2E, 0x2E, 0x00, 0xB6, 0xD0, 0x68, 0x3E, 0x80, + 0x2F, 0x0C, 0xA9, 0xFE, 0x64, 0x53, 0x69, 0x7A]); + + function createEncryptionKey20(revision, password, ownerPassword, + ownerValidationSalt, ownerKeySalt, uBytes, + userPassword, userValidationSalt, userKeySalt, + ownerEncryption, userEncryption, perms) { + if (password) { + var passwordLength = Math.min(127, password.length); + password = password.subarray(0, passwordLength); + } else { + password = []; + } + var pdfAlgorithm; + if (revision === 6) { + pdfAlgorithm = new PDF20(); + } else { + pdfAlgorithm = new PDF17(); + } + + if (pdfAlgorithm) { + if (pdfAlgorithm.checkUserPassword(password, userValidationSalt, + userPassword)) { + return pdfAlgorithm.getUserKey(password, userKeySalt, userEncryption); + } else if (pdfAlgorithm.checkOwnerPassword(password, ownerValidationSalt, + uBytes, + ownerPassword)) { + return pdfAlgorithm.getOwnerKey(password, ownerKeySalt, uBytes, + ownerEncryption); + } + } + + return null; + } + + function prepareKeyData(fileId, password, ownerPassword, userPassword, + flags, revision, keyLength, encryptMetadata) { + var hashDataSize = 40 + ownerPassword.length + fileId.length; + var hashData = new Uint8Array(hashDataSize), i = 0, j, n; + if (password) { + n = Math.min(32, password.length); + for (; i < n; ++i) { + hashData[i] = password[i]; + } + } + j = 0; + while (i < 32) { + hashData[i++] = defaultPasswordBytes[j++]; + } + // as now the padded password in the hashData[0..i] + for (j = 0, n = ownerPassword.length; j < n; ++j) { + hashData[i++] = ownerPassword[j]; + } + hashData[i++] = flags & 0xFF; + hashData[i++] = (flags >> 8) & 0xFF; + hashData[i++] = (flags >> 16) & 0xFF; + hashData[i++] = (flags >>> 24) & 0xFF; + for (j = 0, n = fileId.length; j < n; ++j) { + hashData[i++] = fileId[j]; + } + if (revision >= 4 && !encryptMetadata) { + hashData[i++] = 0xFF; + hashData[i++] = 0xFF; + hashData[i++] = 0xFF; + hashData[i++] = 0xFF; + } + var hash = calculateMD5(hashData, 0, i); + var keyLengthInBytes = keyLength >> 3; + if (revision >= 3) { + for (j = 0; j < 50; ++j) { + hash = calculateMD5(hash, 0, keyLengthInBytes); + } + } + var encryptionKey = hash.subarray(0, keyLengthInBytes); + var cipher, checkData; + + if (revision >= 3) { + for (i = 0; i < 32; ++i) { + hashData[i] = defaultPasswordBytes[i]; + } + for (j = 0, n = fileId.length; j < n; ++j) { + hashData[i++] = fileId[j]; + } + cipher = new ARCFourCipher(encryptionKey); + checkData = cipher.encryptBlock(calculateMD5(hashData, 0, i)); + n = encryptionKey.length; + var derivedKey = new Uint8Array(n), k; + for (j = 1; j <= 19; ++j) { + for (k = 0; k < n; ++k) { + derivedKey[k] = encryptionKey[k] ^ j; + } + cipher = new ARCFourCipher(derivedKey); + checkData = cipher.encryptBlock(checkData); + } + for (j = 0, n = checkData.length; j < n; ++j) { + if (userPassword[j] !== checkData[j]) { + return null; + } + } + } else { + cipher = new ARCFourCipher(encryptionKey); + checkData = cipher.encryptBlock(defaultPasswordBytes); + for (j = 0, n = checkData.length; j < n; ++j) { + if (userPassword[j] !== checkData[j]) { + return null; + } + } + } + return encryptionKey; + } + + function decodeUserPassword(password, ownerPassword, revision, keyLength) { + var hashData = new Uint8Array(32), i = 0, j, n; + n = Math.min(32, password.length); + for (; i < n; ++i) { + hashData[i] = password[i]; + } + j = 0; + while (i < 32) { + hashData[i++] = defaultPasswordBytes[j++]; + } + var hash = calculateMD5(hashData, 0, i); + var keyLengthInBytes = keyLength >> 3; + if (revision >= 3) { + for (j = 0; j < 50; ++j) { + hash = calculateMD5(hash, 0, hash.length); + } + } + + var cipher, userPassword; + if (revision >= 3) { + userPassword = ownerPassword; + var derivedKey = new Uint8Array(keyLengthInBytes), k; + for (j = 19; j >= 0; j--) { + for (k = 0; k < keyLengthInBytes; ++k) { + derivedKey[k] = hash[k] ^ j; + } + cipher = new ARCFourCipher(derivedKey); + userPassword = cipher.encryptBlock(userPassword); + } + } else { + cipher = new ARCFourCipher(hash.subarray(0, keyLengthInBytes)); + userPassword = cipher.encryptBlock(ownerPassword); + } + return userPassword; + } + + var identityName = Name.get('Identity'); + + function CipherTransformFactory(dict, fileId, password) { + var filter = dict.get('Filter'); + if (!isName(filter) || filter.name !== 'Standard') { + error('unknown encryption method'); + } + this.dict = dict; + var algorithm = dict.get('V'); + if (!isInt(algorithm) || + (algorithm !== 1 && algorithm !== 2 && algorithm !== 4 && + algorithm !== 5)) { + error('unsupported encryption algorithm'); + } + this.algorithm = algorithm; + var keyLength = dict.get('Length') || 40; + if (!isInt(keyLength) || + keyLength < 40 || (keyLength % 8) !== 0) { + error('invalid key length'); + } + + // prepare keys + var ownerPassword = stringToBytes(dict.get('O')).subarray(0, 32); + var userPassword = stringToBytes(dict.get('U')).subarray(0, 32); + var flags = dict.get('P'); + var revision = dict.get('R'); + // meaningful when V is 4 or 5 + var encryptMetadata = ((algorithm === 4 || algorithm === 5) && + dict.get('EncryptMetadata') !== false); + this.encryptMetadata = encryptMetadata; + + var fileIdBytes = stringToBytes(fileId); + var passwordBytes; + if (password) { + passwordBytes = stringToBytes(password); + } + + var encryptionKey; + if (algorithm !== 5) { + encryptionKey = prepareKeyData(fileIdBytes, passwordBytes, + ownerPassword, userPassword, flags, + revision, keyLength, encryptMetadata); + } + else { + var ownerValidationSalt = stringToBytes(dict.get('O')).subarray(32, 40); + var ownerKeySalt = stringToBytes(dict.get('O')).subarray(40, 48); + var uBytes = stringToBytes(dict.get('U')).subarray(0, 48); + var userValidationSalt = stringToBytes(dict.get('U')).subarray(32, 40); + var userKeySalt = stringToBytes(dict.get('U')).subarray(40, 48); + var ownerEncryption = stringToBytes(dict.get('OE')); + var userEncryption = stringToBytes(dict.get('UE')); + var perms = stringToBytes(dict.get('Perms')); + encryptionKey = + createEncryptionKey20(revision, passwordBytes, + ownerPassword, ownerValidationSalt, + ownerKeySalt, uBytes, + userPassword, userValidationSalt, + userKeySalt, ownerEncryption, + userEncryption, perms); + } + if (!encryptionKey && !password) { + throw new PasswordException('No password given', + PasswordResponses.NEED_PASSWORD); + } else if (!encryptionKey && password) { + // Attempting use the password as an owner password + var decodedPassword = decodeUserPassword(passwordBytes, ownerPassword, + revision, keyLength); + encryptionKey = prepareKeyData(fileIdBytes, decodedPassword, + ownerPassword, userPassword, flags, + revision, keyLength, encryptMetadata); + } + + if (!encryptionKey) { + throw new PasswordException('Incorrect Password', + PasswordResponses.INCORRECT_PASSWORD); + } + + this.encryptionKey = encryptionKey; + + if (algorithm >= 4) { + this.cf = dict.get('CF'); + this.stmf = dict.get('StmF') || identityName; + this.strf = dict.get('StrF') || identityName; + this.eff = dict.get('EFF') || this.stmf; + } + } + + function buildObjectKey(num, gen, encryptionKey, isAes) { + var key = new Uint8Array(encryptionKey.length + 9), i, n; + for (i = 0, n = encryptionKey.length; i < n; ++i) { + key[i] = encryptionKey[i]; + } + key[i++] = num & 0xFF; + key[i++] = (num >> 8) & 0xFF; + key[i++] = (num >> 16) & 0xFF; + key[i++] = gen & 0xFF; + key[i++] = (gen >> 8) & 0xFF; + if (isAes) { + key[i++] = 0x73; + key[i++] = 0x41; + key[i++] = 0x6C; + key[i++] = 0x54; + } + var hash = calculateMD5(key, 0, i); + return hash.subarray(0, Math.min(encryptionKey.length + 5, 16)); + } + + function buildCipherConstructor(cf, name, num, gen, key) { + var cryptFilter = cf.get(name.name); + var cfm; + if (cryptFilter !== null && cryptFilter !== undefined) { + cfm = cryptFilter.get('CFM'); + } + if (!cfm || cfm.name === 'None') { + return function cipherTransformFactoryBuildCipherConstructorNone() { + return new NullCipher(); + }; + } + if ('V2' === cfm.name) { + return function cipherTransformFactoryBuildCipherConstructorV2() { + return new ARCFourCipher(buildObjectKey(num, gen, key, false)); + }; + } + if ('AESV2' === cfm.name) { + return function cipherTransformFactoryBuildCipherConstructorAESV2() { + return new AES128Cipher(buildObjectKey(num, gen, key, true)); + }; + } + if ('AESV3' === cfm.name) { + return function cipherTransformFactoryBuildCipherConstructorAESV3() { + return new AES256Cipher(key); + }; + } + error('Unknown crypto method'); + } + + CipherTransformFactory.prototype = { + createCipherTransform: + function CipherTransformFactory_createCipherTransform(num, gen) { + if (this.algorithm === 4 || this.algorithm === 5) { + return new CipherTransform( + buildCipherConstructor(this.cf, this.stmf, + num, gen, this.encryptionKey), + buildCipherConstructor(this.cf, this.strf, + num, gen, this.encryptionKey)); + } + // algorithms 1 and 2 + var key = buildObjectKey(num, gen, this.encryptionKey, false); + var cipherConstructor = function buildCipherCipherConstructor() { + return new ARCFourCipher(key); + }; + return new CipherTransform(cipherConstructor, cipherConstructor); + } + }; + + return CipherTransformFactory; +})(); + + +var PatternType = { + FUNCTION_BASED: 1, + AXIAL: 2, + RADIAL: 3, + FREE_FORM_MESH: 4, + LATTICE_FORM_MESH: 5, + COONS_PATCH_MESH: 6, + TENSOR_PATCH_MESH: 7 +}; + +var Pattern = (function PatternClosure() { + // Constructor should define this.getPattern + function Pattern() { + error('should not call Pattern constructor'); + } + + Pattern.prototype = { + // Input: current Canvas context + // Output: the appropriate fillStyle or strokeStyle + getPattern: function Pattern_getPattern(ctx) { + error('Should not call Pattern.getStyle: ' + ctx); + } + }; + + Pattern.parseShading = function Pattern_parseShading(shading, matrix, xref, + res) { + + var dict = isStream(shading) ? shading.dict : shading; + var type = dict.get('ShadingType'); + + try { + switch (type) { + case PatternType.AXIAL: + case PatternType.RADIAL: + // Both radial and axial shadings are handled by RadialAxial shading. + return new Shadings.RadialAxial(dict, matrix, xref, res); + case PatternType.FREE_FORM_MESH: + case PatternType.LATTICE_FORM_MESH: + case PatternType.COONS_PATCH_MESH: + case PatternType.TENSOR_PATCH_MESH: + return new Shadings.Mesh(shading, matrix, xref, res); + default: + throw new Error('Unknown PatternType: ' + type); + } + } catch (ex) { + if (ex instanceof MissingDataException) { + throw ex; + } + UnsupportedManager.notify(UNSUPPORTED_FEATURES.shadingPattern); + warn(ex); + return new Shadings.Dummy(); + } + }; + return Pattern; +})(); + +var Shadings = {}; + +// A small number to offset the first/last color stops so we can insert ones to +// support extend. Number.MIN_VALUE appears to be too small and breaks the +// extend. 1e-7 works in FF but chrome seems to use an even smaller sized number +// internally so we have to go bigger. +Shadings.SMALL_NUMBER = 1e-2; + +// Radial and axial shading have very similar implementations +// If needed, the implementations can be broken into two classes +Shadings.RadialAxial = (function RadialAxialClosure() { + function RadialAxial(dict, matrix, xref, res) { + this.matrix = matrix; + this.coordsArr = dict.get('Coords'); + this.shadingType = dict.get('ShadingType'); + this.type = 'Pattern'; + var cs = dict.get('ColorSpace', 'CS'); + cs = ColorSpace.parse(cs, xref, res); + this.cs = cs; + + var t0 = 0.0, t1 = 1.0; + if (dict.has('Domain')) { + var domainArr = dict.get('Domain'); + t0 = domainArr[0]; + t1 = domainArr[1]; + } + + var extendStart = false, extendEnd = false; + if (dict.has('Extend')) { + var extendArr = dict.get('Extend'); + extendStart = extendArr[0]; + extendEnd = extendArr[1]; + } + + if (this.shadingType === PatternType.RADIAL && + (!extendStart || !extendEnd)) { + // Radial gradient only currently works if either circle is fully within + // the other circle. + var x1 = this.coordsArr[0]; + var y1 = this.coordsArr[1]; + var r1 = this.coordsArr[2]; + var x2 = this.coordsArr[3]; + var y2 = this.coordsArr[4]; + var r2 = this.coordsArr[5]; + var distance = Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)); + if (r1 <= r2 + distance && + r2 <= r1 + distance) { + warn('Unsupported radial gradient.'); + } + } + + this.extendStart = extendStart; + this.extendEnd = extendEnd; + + var fnObj = dict.get('Function'); + var fn = PDFFunction.parseArray(xref, fnObj); + + // 10 samples seems good enough for now, but probably won't work + // if there are sharp color changes. Ideally, we would implement + // the spec faithfully and add lossless optimizations. + var diff = t1 - t0; + var step = diff / 10; + + var colorStops = this.colorStops = []; + + // Protect against bad domains so we don't end up in an infinte loop below. + if (t0 >= t1 || step <= 0) { + // Acrobat doesn't seem to handle these cases so we'll ignore for + // now. + info('Bad shading domain.'); + return; + } + + var color = new Float32Array(cs.numComps), ratio = new Float32Array(1); + var rgbColor; + for (var i = t0; i <= t1; i += step) { + ratio[0] = i; + fn(ratio, 0, color, 0); + rgbColor = cs.getRgb(color, 0); + var cssColor = Util.makeCssRgb(rgbColor[0], rgbColor[1], rgbColor[2]); + colorStops.push([(i - t0) / diff, cssColor]); + } + + var background = 'transparent'; + if (dict.has('Background')) { + rgbColor = cs.getRgb(dict.get('Background'), 0); + background = Util.makeCssRgb(rgbColor[0], rgbColor[1], rgbColor[2]); + } + + if (!extendStart) { + // Insert a color stop at the front and offset the first real color stop + // so it doesn't conflict with the one we insert. + colorStops.unshift([0, background]); + colorStops[1][0] += Shadings.SMALL_NUMBER; + } + if (!extendEnd) { + // Same idea as above in extendStart but for the end. + colorStops[colorStops.length - 1][0] -= Shadings.SMALL_NUMBER; + colorStops.push([1, background]); + } + + this.colorStops = colorStops; + } + + RadialAxial.prototype = { + getIR: function RadialAxial_getIR() { + var coordsArr = this.coordsArr; + var shadingType = this.shadingType; + var type, p0, p1, r0, r1; + if (shadingType === PatternType.AXIAL) { + p0 = [coordsArr[0], coordsArr[1]]; + p1 = [coordsArr[2], coordsArr[3]]; + r0 = null; + r1 = null; + type = 'axial'; + } else if (shadingType === PatternType.RADIAL) { + p0 = [coordsArr[0], coordsArr[1]]; + p1 = [coordsArr[3], coordsArr[4]]; + r0 = coordsArr[2]; + r1 = coordsArr[5]; + type = 'radial'; + } else { + error('getPattern type unknown: ' + shadingType); + } + + var matrix = this.matrix; + if (matrix) { + p0 = Util.applyTransform(p0, matrix); + p1 = Util.applyTransform(p1, matrix); + } + + return ['RadialAxial', type, this.colorStops, p0, p1, r0, r1]; + } + }; + + return RadialAxial; +})(); + +// All mesh shading. For now, they will be presented as set of the triangles +// to be drawn on the canvas and rgb color for each vertex. +Shadings.Mesh = (function MeshClosure() { + function MeshStreamReader(stream, context) { + this.stream = stream; + this.context = context; + this.buffer = 0; + this.bufferLength = 0; + + var numComps = context.numComps; + this.tmpCompsBuf = new Float32Array(numComps); + var csNumComps = context.colorSpace; + this.tmpCsCompsBuf = context.colorFn ? new Float32Array(csNumComps) : + this.tmpCompsBuf; + } + MeshStreamReader.prototype = { + get hasData() { + if (this.stream.end) { + return this.stream.pos < this.stream.end; + } + if (this.bufferLength > 0) { + return true; + } + var nextByte = this.stream.getByte(); + if (nextByte < 0) { + return false; + } + this.buffer = nextByte; + this.bufferLength = 8; + return true; + }, + readBits: function MeshStreamReader_readBits(n) { + var buffer = this.buffer; + var bufferLength = this.bufferLength; + if (n === 32) { + if (bufferLength === 0) { + return ((this.stream.getByte() << 24) | + (this.stream.getByte() << 16) | (this.stream.getByte() << 8) | + this.stream.getByte()) >>> 0; + } + buffer = (buffer << 24) | (this.stream.getByte() << 16) | + (this.stream.getByte() << 8) | this.stream.getByte(); + var nextByte = this.stream.getByte(); + this.buffer = nextByte & ((1 << bufferLength) - 1); + return ((buffer << (8 - bufferLength)) | + ((nextByte & 0xFF) >> bufferLength)) >>> 0; + } + if (n === 8 && bufferLength === 0) { + return this.stream.getByte(); + } + while (bufferLength < n) { + buffer = (buffer << 8) | this.stream.getByte(); + bufferLength += 8; + } + bufferLength -= n; + this.bufferLength = bufferLength; + this.buffer = buffer & ((1 << bufferLength) - 1); + return buffer >> bufferLength; + }, + align: function MeshStreamReader_align() { + this.buffer = 0; + this.bufferLength = 0; + }, + readFlag: function MeshStreamReader_readFlag() { + return this.readBits(this.context.bitsPerFlag); + }, + readCoordinate: function MeshStreamReader_readCoordinate() { + var bitsPerCoordinate = this.context.bitsPerCoordinate; + var xi = this.readBits(bitsPerCoordinate); + var yi = this.readBits(bitsPerCoordinate); + var decode = this.context.decode; + var scale = bitsPerCoordinate < 32 ? 1 / ((1 << bitsPerCoordinate) - 1) : + 2.3283064365386963e-10; // 2 ^ -32 + return [ + xi * scale * (decode[1] - decode[0]) + decode[0], + yi * scale * (decode[3] - decode[2]) + decode[2] + ]; + }, + readComponents: function MeshStreamReader_readComponents() { + var numComps = this.context.numComps; + var bitsPerComponent = this.context.bitsPerComponent; + var scale = bitsPerComponent < 32 ? 1 / ((1 << bitsPerComponent) - 1) : + 2.3283064365386963e-10; // 2 ^ -32 + var decode = this.context.decode; + var components = this.tmpCompsBuf; + for (var i = 0, j = 4; i < numComps; i++, j += 2) { + var ci = this.readBits(bitsPerComponent); + components[i] = ci * scale * (decode[j + 1] - decode[j]) + decode[j]; + } + var color = this.tmpCsCompsBuf; + if (this.context.colorFn) { + this.context.colorFn(components, 0, color, 0); + } + return this.context.colorSpace.getRgb(color, 0); + } + }; + + function decodeType4Shading(mesh, reader) { + var coords = mesh.coords; + var colors = mesh.colors; + var operators = []; + var ps = []; // not maintaining cs since that will match ps + var verticesLeft = 0; // assuming we have all data to start a new triangle + while (reader.hasData) { + var f = reader.readFlag(); + var coord = reader.readCoordinate(); + var color = reader.readComponents(); + if (verticesLeft === 0) { // ignoring flags if we started a triangle + assert(0 <= f && f <= 2, 'Unknown type4 flag'); + switch (f) { + case 0: + verticesLeft = 3; + break; + case 1: + ps.push(ps[ps.length - 2], ps[ps.length - 1]); + verticesLeft = 1; + break; + case 2: + ps.push(ps[ps.length - 3], ps[ps.length - 1]); + verticesLeft = 1; + break; + } + operators.push(f); + } + ps.push(coords.length); + coords.push(coord); + colors.push(color); + verticesLeft--; + + reader.align(); + } + + var psPacked = new Int32Array(ps); + + mesh.figures.push({ + type: 'triangles', + coords: psPacked, + colors: psPacked + }); + } + + function decodeType5Shading(mesh, reader, verticesPerRow) { + var coords = mesh.coords; + var colors = mesh.colors; + var ps = []; // not maintaining cs since that will match ps + while (reader.hasData) { + var coord = reader.readCoordinate(); + var color = reader.readComponents(); + ps.push(coords.length); + coords.push(coord); + colors.push(color); + } + + var psPacked = new Int32Array(ps); + + mesh.figures.push({ + type: 'lattice', + coords: psPacked, + colors: psPacked, + verticesPerRow: verticesPerRow + }); + } + + var MIN_SPLIT_PATCH_CHUNKS_AMOUNT = 3; + var MAX_SPLIT_PATCH_CHUNKS_AMOUNT = 20; + + var TRIANGLE_DENSITY = 20; // count of triangles per entire mesh bounds + + var getB = (function getBClosure() { + function buildB(count) { + var lut = []; + for (var i = 0; i <= count; i++) { + var t = i / count, t_ = 1 - t; + lut.push(new Float32Array([t_ * t_ * t_, 3 * t * t_ * t_, + 3 * t * t * t_, t * t * t])); + } + return lut; + } + var cache = []; + return function getB(count) { + if (!cache[count]) { + cache[count] = buildB(count); + } + return cache[count]; + }; + })(); + + function buildFigureFromPatch(mesh, index) { + var figure = mesh.figures[index]; + assert(figure.type === 'patch', 'Unexpected patch mesh figure'); + + var coords = mesh.coords, colors = mesh.colors; + var pi = figure.coords; + var ci = figure.colors; + + var figureMinX = Math.min(coords[pi[0]][0], coords[pi[3]][0], + coords[pi[12]][0], coords[pi[15]][0]); + var figureMinY = Math.min(coords[pi[0]][1], coords[pi[3]][1], + coords[pi[12]][1], coords[pi[15]][1]); + var figureMaxX = Math.max(coords[pi[0]][0], coords[pi[3]][0], + coords[pi[12]][0], coords[pi[15]][0]); + var figureMaxY = Math.max(coords[pi[0]][1], coords[pi[3]][1], + coords[pi[12]][1], coords[pi[15]][1]); + var splitXBy = Math.ceil((figureMaxX - figureMinX) * TRIANGLE_DENSITY / + (mesh.bounds[2] - mesh.bounds[0])); + splitXBy = Math.max(MIN_SPLIT_PATCH_CHUNKS_AMOUNT, + Math.min(MAX_SPLIT_PATCH_CHUNKS_AMOUNT, splitXBy)); + var splitYBy = Math.ceil((figureMaxY - figureMinY) * TRIANGLE_DENSITY / + (mesh.bounds[3] - mesh.bounds[1])); + splitYBy = Math.max(MIN_SPLIT_PATCH_CHUNKS_AMOUNT, + Math.min(MAX_SPLIT_PATCH_CHUNKS_AMOUNT, splitYBy)); + + var verticesPerRow = splitXBy + 1; + var figureCoords = new Int32Array((splitYBy + 1) * verticesPerRow); + var figureColors = new Int32Array((splitYBy + 1) * verticesPerRow); + var k = 0; + var cl = new Uint8Array(3), cr = new Uint8Array(3); + var c0 = colors[ci[0]], c1 = colors[ci[1]], + c2 = colors[ci[2]], c3 = colors[ci[3]]; + var bRow = getB(splitYBy), bCol = getB(splitXBy); + for (var row = 0; row <= splitYBy; row++) { + cl[0] = ((c0[0] * (splitYBy - row) + c2[0] * row) / splitYBy) | 0; + cl[1] = ((c0[1] * (splitYBy - row) + c2[1] * row) / splitYBy) | 0; + cl[2] = ((c0[2] * (splitYBy - row) + c2[2] * row) / splitYBy) | 0; + + cr[0] = ((c1[0] * (splitYBy - row) + c3[0] * row) / splitYBy) | 0; + cr[1] = ((c1[1] * (splitYBy - row) + c3[1] * row) / splitYBy) | 0; + cr[2] = ((c1[2] * (splitYBy - row) + c3[2] * row) / splitYBy) | 0; + + for (var col = 0; col <= splitXBy; col++, k++) { + if ((row === 0 || row === splitYBy) && + (col === 0 || col === splitXBy)) { + continue; + } + var x = 0, y = 0; + var q = 0; + for (var i = 0; i <= 3; i++) { + for (var j = 0; j <= 3; j++, q++) { + var m = bRow[row][i] * bCol[col][j]; + x += coords[pi[q]][0] * m; + y += coords[pi[q]][1] * m; + } + } + figureCoords[k] = coords.length; + coords.push([x, y]); + figureColors[k] = colors.length; + var newColor = new Uint8Array(3); + newColor[0] = ((cl[0] * (splitXBy - col) + cr[0] * col) / splitXBy) | 0; + newColor[1] = ((cl[1] * (splitXBy - col) + cr[1] * col) / splitXBy) | 0; + newColor[2] = ((cl[2] * (splitXBy - col) + cr[2] * col) / splitXBy) | 0; + colors.push(newColor); + } + } + figureCoords[0] = pi[0]; + figureColors[0] = ci[0]; + figureCoords[splitXBy] = pi[3]; + figureColors[splitXBy] = ci[1]; + figureCoords[verticesPerRow * splitYBy] = pi[12]; + figureColors[verticesPerRow * splitYBy] = ci[2]; + figureCoords[verticesPerRow * splitYBy + splitXBy] = pi[15]; + figureColors[verticesPerRow * splitYBy + splitXBy] = ci[3]; + + mesh.figures[index] = { + type: 'lattice', + coords: figureCoords, + colors: figureColors, + verticesPerRow: verticesPerRow + }; + } + + function decodeType6Shading(mesh, reader) { + // A special case of Type 7. The p11, p12, p21, p22 automatically filled + var coords = mesh.coords; + var colors = mesh.colors; + var ps = new Int32Array(16); // p00, p10, ..., p30, p01, ..., p33 + var cs = new Int32Array(4); // c00, c30, c03, c33 + while (reader.hasData) { + var f = reader.readFlag(); + assert(0 <= f && f <= 3, 'Unknown type6 flag'); + var i, ii; + var pi = coords.length; + for (i = 0, ii = (f !== 0 ? 8 : 12); i < ii; i++) { + coords.push(reader.readCoordinate()); + } + var ci = colors.length; + for (i = 0, ii = (f !== 0 ? 2 : 4); i < ii; i++) { + colors.push(reader.readComponents()); + } + var tmp1, tmp2, tmp3, tmp4; + switch (f) { + case 0: + ps[12] = pi + 3; ps[13] = pi + 4; ps[14] = pi + 5; ps[15] = pi + 6; + ps[ 8] = pi + 2; /* values for 5, 6, 9, 10 are */ ps[11] = pi + 7; + ps[ 4] = pi + 1; /* calculated below */ ps[ 7] = pi + 8; + ps[ 0] = pi; ps[ 1] = pi + 11; ps[ 2] = pi + 10; ps[ 3] = pi + 9; + cs[2] = ci + 1; cs[3] = ci + 2; + cs[0] = ci; cs[1] = ci + 3; + break; + case 1: + tmp1 = ps[12]; tmp2 = ps[13]; tmp3 = ps[14]; tmp4 = ps[15]; + ps[12] = pi + 5; ps[13] = pi + 4; ps[14] = pi + 3; ps[15] = pi + 2; + ps[ 8] = pi + 6; /* values for 5, 6, 9, 10 are */ ps[11] = pi + 1; + ps[ 4] = pi + 7; /* calculated below */ ps[ 7] = pi; + ps[ 0] = tmp1; ps[ 1] = tmp2; ps[ 2] = tmp3; ps[ 3] = tmp4; + tmp1 = cs[2]; tmp2 = cs[3]; + cs[2] = ci + 1; cs[3] = ci; + cs[0] = tmp1; cs[1] = tmp2; + break; + case 2: + ps[12] = ps[15]; ps[13] = pi + 7; ps[14] = pi + 6; ps[15] = pi + 5; + ps[ 8] = ps[11]; /* values for 5, 6, 9, 10 are */ ps[11] = pi + 4; + ps[ 4] = ps[7]; /* calculated below */ ps[ 7] = pi + 3; + ps[ 0] = ps[3]; ps[ 1] = pi; ps[ 2] = pi + 1; ps[ 3] = pi + 2; + cs[2] = cs[3]; cs[3] = ci + 1; + cs[0] = cs[1]; cs[1] = ci; + break; + case 3: + ps[12] = ps[0]; ps[13] = ps[1]; ps[14] = ps[2]; ps[15] = ps[3]; + ps[ 8] = pi; /* values for 5, 6, 9, 10 are */ ps[11] = pi + 7; + ps[ 4] = pi + 1; /* calculated below */ ps[ 7] = pi + 6; + ps[ 0] = pi + 2; ps[ 1] = pi + 3; ps[ 2] = pi + 4; ps[ 3] = pi + 5; + cs[2] = cs[0]; cs[3] = cs[1]; + cs[0] = ci; cs[1] = ci + 1; + break; + } + // set p11, p12, p21, p22 + ps[5] = coords.length; + coords.push([ + (-4 * coords[ps[0]][0] - coords[ps[15]][0] + + 6 * (coords[ps[4]][0] + coords[ps[1]][0]) - + 2 * (coords[ps[12]][0] + coords[ps[3]][0]) + + 3 * (coords[ps[13]][0] + coords[ps[7]][0])) / 9, + (-4 * coords[ps[0]][1] - coords[ps[15]][1] + + 6 * (coords[ps[4]][1] + coords[ps[1]][1]) - + 2 * (coords[ps[12]][1] + coords[ps[3]][1]) + + 3 * (coords[ps[13]][1] + coords[ps[7]][1])) / 9 + ]); + ps[6] = coords.length; + coords.push([ + (-4 * coords[ps[3]][0] - coords[ps[12]][0] + + 6 * (coords[ps[2]][0] + coords[ps[7]][0]) - + 2 * (coords[ps[0]][0] + coords[ps[15]][0]) + + 3 * (coords[ps[4]][0] + coords[ps[14]][0])) / 9, + (-4 * coords[ps[3]][1] - coords[ps[12]][1] + + 6 * (coords[ps[2]][1] + coords[ps[7]][1]) - + 2 * (coords[ps[0]][1] + coords[ps[15]][1]) + + 3 * (coords[ps[4]][1] + coords[ps[14]][1])) / 9 + ]); + ps[9] = coords.length; + coords.push([ + (-4 * coords[ps[12]][0] - coords[ps[3]][0] + + 6 * (coords[ps[8]][0] + coords[ps[13]][0]) - + 2 * (coords[ps[0]][0] + coords[ps[15]][0]) + + 3 * (coords[ps[11]][0] + coords[ps[1]][0])) / 9, + (-4 * coords[ps[12]][1] - coords[ps[3]][1] + + 6 * (coords[ps[8]][1] + coords[ps[13]][1]) - + 2 * (coords[ps[0]][1] + coords[ps[15]][1]) + + 3 * (coords[ps[11]][1] + coords[ps[1]][1])) / 9 + ]); + ps[10] = coords.length; + coords.push([ + (-4 * coords[ps[15]][0] - coords[ps[0]][0] + + 6 * (coords[ps[11]][0] + coords[ps[14]][0]) - + 2 * (coords[ps[12]][0] + coords[ps[3]][0]) + + 3 * (coords[ps[2]][0] + coords[ps[8]][0])) / 9, + (-4 * coords[ps[15]][1] - coords[ps[0]][1] + + 6 * (coords[ps[11]][1] + coords[ps[14]][1]) - + 2 * (coords[ps[12]][1] + coords[ps[3]][1]) + + 3 * (coords[ps[2]][1] + coords[ps[8]][1])) / 9 + ]); + mesh.figures.push({ + type: 'patch', + coords: new Int32Array(ps), // making copies of ps and cs + colors: new Int32Array(cs) + }); + } + } + + function decodeType7Shading(mesh, reader) { + var coords = mesh.coords; + var colors = mesh.colors; + var ps = new Int32Array(16); // p00, p10, ..., p30, p01, ..., p33 + var cs = new Int32Array(4); // c00, c30, c03, c33 + while (reader.hasData) { + var f = reader.readFlag(); + assert(0 <= f && f <= 3, 'Unknown type7 flag'); + var i, ii; + var pi = coords.length; + for (i = 0, ii = (f !== 0 ? 12 : 16); i < ii; i++) { + coords.push(reader.readCoordinate()); + } + var ci = colors.length; + for (i = 0, ii = (f !== 0 ? 2 : 4); i < ii; i++) { + colors.push(reader.readComponents()); + } + var tmp1, tmp2, tmp3, tmp4; + switch (f) { + case 0: + ps[12] = pi + 3; ps[13] = pi + 4; ps[14] = pi + 5; ps[15] = pi + 6; + ps[ 8] = pi + 2; ps[ 9] = pi + 13; ps[10] = pi + 14; ps[11] = pi + 7; + ps[ 4] = pi + 1; ps[ 5] = pi + 12; ps[ 6] = pi + 15; ps[ 7] = pi + 8; + ps[ 0] = pi; ps[ 1] = pi + 11; ps[ 2] = pi + 10; ps[ 3] = pi + 9; + cs[2] = ci + 1; cs[3] = ci + 2; + cs[0] = ci; cs[1] = ci + 3; + break; + case 1: + tmp1 = ps[12]; tmp2 = ps[13]; tmp3 = ps[14]; tmp4 = ps[15]; + ps[12] = pi + 5; ps[13] = pi + 4; ps[14] = pi + 3; ps[15] = pi + 2; + ps[ 8] = pi + 6; ps[ 9] = pi + 11; ps[10] = pi + 10; ps[11] = pi + 1; + ps[ 4] = pi + 7; ps[ 5] = pi + 8; ps[ 6] = pi + 9; ps[ 7] = pi; + ps[ 0] = tmp1; ps[ 1] = tmp2; ps[ 2] = tmp3; ps[ 3] = tmp4; + tmp1 = cs[2]; tmp2 = cs[3]; + cs[2] = ci + 1; cs[3] = ci; + cs[0] = tmp1; cs[1] = tmp2; + break; + case 2: + ps[12] = ps[15]; ps[13] = pi + 7; ps[14] = pi + 6; ps[15] = pi + 5; + ps[ 8] = ps[11]; ps[ 9] = pi + 8; ps[10] = pi + 11; ps[11] = pi + 4; + ps[ 4] = ps[7]; ps[ 5] = pi + 9; ps[ 6] = pi + 10; ps[ 7] = pi + 3; + ps[ 0] = ps[3]; ps[ 1] = pi; ps[ 2] = pi + 1; ps[ 3] = pi + 2; + cs[2] = cs[3]; cs[3] = ci + 1; + cs[0] = cs[1]; cs[1] = ci; + break; + case 3: + ps[12] = ps[0]; ps[13] = ps[1]; ps[14] = ps[2]; ps[15] = ps[3]; + ps[ 8] = pi; ps[ 9] = pi + 9; ps[10] = pi + 8; ps[11] = pi + 7; + ps[ 4] = pi + 1; ps[ 5] = pi + 10; ps[ 6] = pi + 11; ps[ 7] = pi + 6; + ps[ 0] = pi + 2; ps[ 1] = pi + 3; ps[ 2] = pi + 4; ps[ 3] = pi + 5; + cs[2] = cs[0]; cs[3] = cs[1]; + cs[0] = ci; cs[1] = ci + 1; + break; + } + mesh.figures.push({ + type: 'patch', + coords: new Int32Array(ps), // making copies of ps and cs + colors: new Int32Array(cs) + }); + } + } + + function updateBounds(mesh) { + var minX = mesh.coords[0][0], minY = mesh.coords[0][1], + maxX = minX, maxY = minY; + for (var i = 1, ii = mesh.coords.length; i < ii; i++) { + var x = mesh.coords[i][0], y = mesh.coords[i][1]; + minX = minX > x ? x : minX; + minY = minY > y ? y : minY; + maxX = maxX < x ? x : maxX; + maxY = maxY < y ? y : maxY; + } + mesh.bounds = [minX, minY, maxX, maxY]; + } + + function packData(mesh) { + var i, ii, j, jj; + + var coords = mesh.coords; + var coordsPacked = new Float32Array(coords.length * 2); + for (i = 0, j = 0, ii = coords.length; i < ii; i++) { + var xy = coords[i]; + coordsPacked[j++] = xy[0]; + coordsPacked[j++] = xy[1]; + } + mesh.coords = coordsPacked; + + var colors = mesh.colors; + var colorsPacked = new Uint8Array(colors.length * 3); + for (i = 0, j = 0, ii = colors.length; i < ii; i++) { + var c = colors[i]; + colorsPacked[j++] = c[0]; + colorsPacked[j++] = c[1]; + colorsPacked[j++] = c[2]; + } + mesh.colors = colorsPacked; + + var figures = mesh.figures; + for (i = 0, ii = figures.length; i < ii; i++) { + var figure = figures[i], ps = figure.coords, cs = figure.colors; + for (j = 0, jj = ps.length; j < jj; j++) { + ps[j] *= 2; + cs[j] *= 3; + } + } + } + + function Mesh(stream, matrix, xref, res) { + assert(isStream(stream), 'Mesh data is not a stream'); + var dict = stream.dict; + this.matrix = matrix; + this.shadingType = dict.get('ShadingType'); + this.type = 'Pattern'; + this.bbox = dict.get('BBox'); + var cs = dict.get('ColorSpace', 'CS'); + cs = ColorSpace.parse(cs, xref, res); + this.cs = cs; + this.background = dict.has('Background') ? + cs.getRgb(dict.get('Background'), 0) : null; + + var fnObj = dict.get('Function'); + var fn = fnObj ? PDFFunction.parseArray(xref, fnObj) : null; + + this.coords = []; + this.colors = []; + this.figures = []; + + var decodeContext = { + bitsPerCoordinate: dict.get('BitsPerCoordinate'), + bitsPerComponent: dict.get('BitsPerComponent'), + bitsPerFlag: dict.get('BitsPerFlag'), + decode: dict.get('Decode'), + colorFn: fn, + colorSpace: cs, + numComps: fn ? 1 : cs.numComps + }; + var reader = new MeshStreamReader(stream, decodeContext); + + var patchMesh = false; + switch (this.shadingType) { + case PatternType.FREE_FORM_MESH: + decodeType4Shading(this, reader); + break; + case PatternType.LATTICE_FORM_MESH: + var verticesPerRow = dict.get('VerticesPerRow') | 0; + assert(verticesPerRow >= 2, 'Invalid VerticesPerRow'); + decodeType5Shading(this, reader, verticesPerRow); + break; + case PatternType.COONS_PATCH_MESH: + decodeType6Shading(this, reader); + patchMesh = true; + break; + case PatternType.TENSOR_PATCH_MESH: + decodeType7Shading(this, reader); + patchMesh = true; + break; + default: + error('Unsupported mesh type.'); + break; + } + + if (patchMesh) { + // dirty bounds calculation for determining, how dense shall be triangles + updateBounds(this); + for (var i = 0, ii = this.figures.length; i < ii; i++) { + buildFigureFromPatch(this, i); + } + } + // calculate bounds + updateBounds(this); + + packData(this); + } + + Mesh.prototype = { + getIR: function Mesh_getIR() { + return ['Mesh', this.shadingType, this.coords, this.colors, this.figures, + this.bounds, this.matrix, this.bbox, this.background]; + } + }; + + return Mesh; +})(); + +Shadings.Dummy = (function DummyClosure() { + function Dummy() { + this.type = 'Pattern'; + } + + Dummy.prototype = { + getIR: function Dummy_getIR() { + return ['Dummy']; + } + }; + return Dummy; +})(); + +function getTilingPatternIR(operatorList, dict, args) { + var matrix = dict.get('Matrix'); + var bbox = dict.get('BBox'); + var xstep = dict.get('XStep'); + var ystep = dict.get('YStep'); + var paintType = dict.get('PaintType'); + var tilingType = dict.get('TilingType'); + + return [ + 'TilingPattern', args, operatorList, matrix, bbox, xstep, ystep, + paintType, tilingType + ]; +} + + +var PartialEvaluator = (function PartialEvaluatorClosure() { + function PartialEvaluator(pdfManager, xref, handler, pageIndex, + uniquePrefix, idCounters, fontCache) { + this.pdfManager = pdfManager; + this.xref = xref; + this.handler = handler; + this.pageIndex = pageIndex; + this.uniquePrefix = uniquePrefix; + this.idCounters = idCounters; + this.fontCache = fontCache; + } + + // Trying to minimize Date.now() usage and check every 100 time + var TIME_SLOT_DURATION_MS = 20; + var CHECK_TIME_EVERY = 100; + function TimeSlotManager() { + this.reset(); + } + TimeSlotManager.prototype = { + check: function TimeSlotManager_check() { + if (++this.checked < CHECK_TIME_EVERY) { + return false; + } + this.checked = 0; + return this.endTime <= Date.now(); + }, + reset: function TimeSlotManager_reset() { + this.endTime = Date.now() + TIME_SLOT_DURATION_MS; + this.checked = 0; + } + }; + + var deferred = Promise.resolve(); + + var TILING_PATTERN = 1, SHADING_PATTERN = 2; + + PartialEvaluator.prototype = { + hasBlendModes: function PartialEvaluator_hasBlendModes(resources) { + if (!isDict(resources)) { + return false; + } + + var processed = Object.create(null); + if (resources.objId) { + processed[resources.objId] = true; + } + + var nodes = [resources]; + while (nodes.length) { + var key; + var node = nodes.shift(); + // First check the current resources for blend modes. + var graphicStates = node.get('ExtGState'); + if (isDict(graphicStates)) { + graphicStates = graphicStates.getAll(); + for (key in graphicStates) { + var graphicState = graphicStates[key]; + var bm = graphicState['BM']; + if (isName(bm) && bm.name !== 'Normal') { + return true; + } + } + } + // Descend into the XObjects to look for more resources and blend modes. + var xObjects = node.get('XObject'); + if (!isDict(xObjects)) { + continue; + } + xObjects = xObjects.getAll(); + for (key in xObjects) { + var xObject = xObjects[key]; + if (!isStream(xObject)) { + continue; + } + if (xObject.dict.objId) { + if (processed[xObject.dict.objId]) { + // stream has objId and is processed already + continue; + } + processed[xObject.dict.objId] = true; + } + var xResources = xObject.dict.get('Resources'); + // Checking objId to detect an infinite loop. + if (isDict(xResources) && + (!xResources.objId || !processed[xResources.objId])) { + nodes.push(xResources); + if (xResources.objId) { + processed[xResources.objId] = true; + } + } + } + } + return false; + }, + + buildFormXObject: function PartialEvaluator_buildFormXObject(resources, + xobj, smask, + operatorList, + initialState) { + var matrix = xobj.dict.get('Matrix'); + var bbox = xobj.dict.get('BBox'); + var group = xobj.dict.get('Group'); + if (group) { + var groupOptions = { + matrix: matrix, + bbox: bbox, + smask: smask, + isolated: false, + knockout: false + }; + + var groupSubtype = group.get('S'); + var colorSpace; + if (isName(groupSubtype) && groupSubtype.name === 'Transparency') { + groupOptions.isolated = (group.get('I') || false); + groupOptions.knockout = (group.get('K') || false); + colorSpace = (group.has('CS') ? + ColorSpace.parse(group.get('CS'), this.xref, resources) : null); + } + + if (smask && smask.backdrop) { + colorSpace = colorSpace || ColorSpace.singletons.rgb; + smask.backdrop = colorSpace.getRgb(smask.backdrop, 0); + } + + operatorList.addOp(OPS.beginGroup, [groupOptions]); + } + + operatorList.addOp(OPS.paintFormXObjectBegin, [matrix, bbox]); + + return this.getOperatorList(xobj, + (xobj.dict.get('Resources') || resources), operatorList, initialState). + then(function () { + operatorList.addOp(OPS.paintFormXObjectEnd, []); + + if (group) { + operatorList.addOp(OPS.endGroup, [groupOptions]); + } + }); + }, + + buildPaintImageXObject: + function PartialEvaluator_buildPaintImageXObject(resources, image, + inline, operatorList, + cacheKey, imageCache) { + var self = this; + var dict = image.dict; + var w = dict.get('Width', 'W'); + var h = dict.get('Height', 'H'); + + if (!(w && isNum(w)) || !(h && isNum(h))) { + warn('Image dimensions are missing, or not numbers.'); + return; + } + if (PDFJS.maxImageSize !== -1 && w * h > PDFJS.maxImageSize) { + warn('Image exceeded maximum allowed size and was removed.'); + return; + } + + var imageMask = (dict.get('ImageMask', 'IM') || false); + var imgData, args; + if (imageMask) { + // This depends on a tmpCanvas being filled with the + // current fillStyle, such that processing the pixel + // data can't be done here. Instead of creating a + // complete PDFImage, only read the information needed + // for later. + + var width = dict.get('Width', 'W'); + var height = dict.get('Height', 'H'); + var bitStrideLength = (width + 7) >> 3; + var imgArray = image.getBytes(bitStrideLength * height); + var decode = dict.get('Decode', 'D'); + var inverseDecode = (!!decode && decode[0] > 0); + + imgData = PDFImage.createMask(imgArray, width, height, + image instanceof DecodeStream, + inverseDecode); + imgData.cached = true; + args = [imgData]; + operatorList.addOp(OPS.paintImageMaskXObject, args); + if (cacheKey) { + imageCache[cacheKey] = { + fn: OPS.paintImageMaskXObject, + args: args + }; + } + return; + } + + var softMask = (dict.get('SMask', 'SM') || false); + var mask = (dict.get('Mask') || false); + + var SMALL_IMAGE_DIMENSIONS = 200; + // Inlining small images into the queue as RGB data + if (inline && !softMask && !mask && !(image instanceof JpegStream) && + (w + h) < SMALL_IMAGE_DIMENSIONS) { + var imageObj = new PDFImage(this.xref, resources, image, + inline, null, null); + // We force the use of RGBA_32BPP images here, because we can't handle + // any other kind. + imgData = imageObj.createImageData(/* forceRGBA = */ true); + operatorList.addOp(OPS.paintInlineImageXObject, [imgData]); + return; + } + + // If there is no imageMask, create the PDFImage and a lot + // of image processing can be done here. + var uniquePrefix = (this.uniquePrefix || ''); + var objId = 'img_' + uniquePrefix + (++this.idCounters.obj); + operatorList.addDependency(objId); + args = [objId, w, h]; + + if (!softMask && !mask && image instanceof JpegStream && + image.isNativelySupported(this.xref, resources)) { + // These JPEGs don't need any more processing so we can just send it. + operatorList.addOp(OPS.paintJpegXObject, args); + this.handler.send('obj', + [objId, this.pageIndex, 'JpegStream', image.getIR()]); + return; + } + + PDFImage.buildImage(self.handler, self.xref, resources, image, inline). + then(function(imageObj) { + var imgData = imageObj.createImageData(/* forceRGBA = */ false); + self.handler.send('obj', [objId, self.pageIndex, 'Image', imgData], + [imgData.data.buffer]); + }).then(undefined, function (reason) { + warn('Unable to decode image: ' + reason); + self.handler.send('obj', [objId, self.pageIndex, 'Image', null]); + }); + + operatorList.addOp(OPS.paintImageXObject, args); + if (cacheKey) { + imageCache[cacheKey] = { + fn: OPS.paintImageXObject, + args: args + }; + } + }, + + handleSMask: function PartialEvaluator_handleSmask(smask, resources, + operatorList, + stateManager) { + var smaskContent = smask.get('G'); + var smaskOptions = { + subtype: smask.get('S').name, + backdrop: smask.get('BC') + }; + return this.buildFormXObject(resources, smaskContent, smaskOptions, + operatorList, stateManager.state.clone()); + }, + + handleTilingType: + function PartialEvaluator_handleTilingType(fn, args, resources, + pattern, patternDict, + operatorList) { + // Create an IR of the pattern code. + var tilingOpList = new OperatorList(); + return this.getOperatorList(pattern, + (patternDict.get('Resources') || resources), tilingOpList). + then(function () { + // Add the dependencies to the parent operator list so they are + // resolved before sub operator list is executed synchronously. + operatorList.addDependencies(tilingOpList.dependencies); + operatorList.addOp(fn, getTilingPatternIR({ + fnArray: tilingOpList.fnArray, + argsArray: tilingOpList.argsArray + }, patternDict, args)); + }); + }, + + handleSetFont: + function PartialEvaluator_handleSetFont(resources, fontArgs, fontRef, + operatorList, state) { + // TODO(mack): Not needed? + var fontName; + if (fontArgs) { + fontArgs = fontArgs.slice(); + fontName = fontArgs[0].name; + } + + var self = this; + return this.loadFont(fontName, fontRef, this.xref, resources).then( + function (translated) { + if (!translated.font.isType3Font) { + return translated; + } + return translated.loadType3Data(self, resources, operatorList).then( + function () { + return translated; + }); + }).then(function (translated) { + state.font = translated.font; + translated.send(self.handler); + return translated.loadedName; + }); + }, + + handleText: function PartialEvaluator_handleText(chars, state) { + var font = state.font; + var glyphs = font.charsToGlyphs(chars); + var isAddToPathSet = !!(state.textRenderingMode & + TextRenderingMode.ADD_TO_PATH_FLAG); + if (font.data && (isAddToPathSet || PDFJS.disableFontFace)) { + var buildPath = function (fontChar) { + if (!font.renderer.hasBuiltPath(fontChar)) { + var path = font.renderer.getPathJs(fontChar); + this.handler.send('commonobj', [ + font.loadedName + '_path_' + fontChar, + 'FontPath', + path + ]); + } + }.bind(this); + + for (var i = 0, ii = glyphs.length; i < ii; i++) { + var glyph = glyphs[i]; + if (glyph === null) { + continue; + } + buildPath(glyph.fontChar); + + // If the glyph has an accent we need to build a path for its + // fontChar too, otherwise CanvasGraphics_paintChar will fail. + var accent = glyph.accent; + if (accent && accent.fontChar) { + buildPath(accent.fontChar); + } + } + } + + return glyphs; + }, + + setGState: function PartialEvaluator_setGState(resources, gState, + operatorList, xref, + stateManager) { + // This array holds the converted/processed state data. + var gStateObj = []; + var gStateMap = gState.map; + var self = this; + var promise = Promise.resolve(); + for (var key in gStateMap) { + var value = gStateMap[key]; + switch (key) { + case 'Type': + break; + case 'LW': + case 'LC': + case 'LJ': + case 'ML': + case 'D': + case 'RI': + case 'FL': + case 'CA': + case 'ca': + gStateObj.push([key, value]); + break; + case 'Font': + promise = promise.then(function () { + return self.handleSetFont(resources, null, value[0], + operatorList, stateManager.state). + then(function (loadedName) { + operatorList.addDependency(loadedName); + gStateObj.push([key, [loadedName, value[1]]]); + }); + }); + break; + case 'BM': + gStateObj.push([key, value]); + break; + case 'SMask': + if (isName(value) && value.name === 'None') { + gStateObj.push([key, false]); + break; + } + var dict = xref.fetchIfRef(value); + if (isDict(dict)) { + promise = promise.then(function () { + return self.handleSMask(dict, resources, operatorList, + stateManager); + }); + gStateObj.push([key, true]); + } else { + warn('Unsupported SMask type'); + } + + break; + // Only generate info log messages for the following since + // they are unlikely to have a big impact on the rendering. + case 'OP': + case 'op': + case 'OPM': + case 'BG': + case 'BG2': + case 'UCR': + case 'UCR2': + case 'TR': + case 'TR2': + case 'HT': + case 'SM': + case 'SA': + case 'AIS': + case 'TK': + // TODO implement these operators. + info('graphic state operator ' + key); + break; + default: + info('Unknown graphic state operator ' + key); + break; + } + } + return promise.then(function () { + if (gStateObj.length >= 0) { + operatorList.addOp(OPS.setGState, [gStateObj]); + } + }); + }, + + loadFont: function PartialEvaluator_loadFont(fontName, font, xref, + resources) { + + function errorFont() { + return Promise.resolve(new TranslatedFont('g_font_error', + new ErrorFont('Font ' + fontName + ' is not available'), font)); + } + var fontRef; + if (font) { // Loading by ref. + assert(isRef(font)); + fontRef = font; + } else { // Loading by name. + var fontRes = resources.get('Font'); + if (fontRes) { + fontRef = fontRes.getRaw(fontName); + } else { + warn('fontRes not available'); + return errorFont(); + } + } + if (!fontRef) { + warn('fontRef not available'); + return errorFont(); + } + + if (this.fontCache.has(fontRef)) { + return this.fontCache.get(fontRef); + } + + font = xref.fetchIfRef(fontRef); + if (!isDict(font)) { + return errorFont(); + } + + // We are holding font.translated references just for fontRef that are not + // dictionaries (Dict). See explanation below. + if (font.translated) { + return font.translated; + } + + var fontCapability = createPromiseCapability(); + + var preEvaluatedFont = this.preEvaluateFont(font, xref); + var descriptor = preEvaluatedFont.descriptor; + var fontID = fontRef.num + '_' + fontRef.gen; + if (isDict(descriptor)) { + if (!descriptor.fontAliases) { + descriptor.fontAliases = Object.create(null); + } + + var fontAliases = descriptor.fontAliases; + var hash = preEvaluatedFont.hash; + if (fontAliases[hash]) { + var aliasFontRef = fontAliases[hash].aliasRef; + if (aliasFontRef && this.fontCache.has(aliasFontRef)) { + this.fontCache.putAlias(fontRef, aliasFontRef); + return this.fontCache.get(fontRef); + } + } + + if (!fontAliases[hash]) { + fontAliases[hash] = { + fontID: Font.getFontID() + }; + } + + fontAliases[hash].aliasRef = fontRef; + fontID = fontAliases[hash].fontID; + } + + // Workaround for bad PDF generators that don't reference fonts + // properly, i.e. by not using an object identifier. + // Check if the fontRef is a Dict (as opposed to a standard object), + // in which case we don't cache the font and instead reference it by + // fontName in font.loadedName below. + var fontRefIsDict = isDict(fontRef); + if (!fontRefIsDict) { + this.fontCache.put(fontRef, fontCapability.promise); + } + + // Keep track of each font we translated so the caller can + // load them asynchronously before calling display on a page. + font.loadedName = 'g_font_' + (fontRefIsDict ? + fontName.replace(/\W/g, '') : fontID); + + font.translated = fontCapability.promise; + + // TODO move promises into translate font + var translatedPromise; + try { + translatedPromise = Promise.resolve( + this.translateFont(preEvaluatedFont, xref)); + } catch (e) { + translatedPromise = Promise.reject(e); + } + + translatedPromise.then(function (translatedFont) { + if (translatedFont.fontType !== undefined) { + var xrefFontStats = xref.stats.fontTypes; + xrefFontStats[translatedFont.fontType] = true; + } + + fontCapability.resolve(new TranslatedFont(font.loadedName, + translatedFont, font)); + }, function (reason) { + // TODO fontCapability.reject? + UnsupportedManager.notify(UNSUPPORTED_FEATURES.font); + + try { + // error, but it's still nice to have font type reported + var descriptor = preEvaluatedFont.descriptor; + var fontFile3 = descriptor && descriptor.get('FontFile3'); + var subtype = fontFile3 && fontFile3.get('Subtype'); + var fontType = getFontType(preEvaluatedFont.type, + subtype && subtype.name); + var xrefFontStats = xref.stats.fontTypes; + xrefFontStats[fontType] = true; + } catch (ex) { } + + fontCapability.resolve(new TranslatedFont(font.loadedName, + new ErrorFont(reason instanceof Error ? reason.message : reason), + font)); + }); + return fontCapability.promise; + }, + + buildPath: function PartialEvaluator_buildPath(operatorList, fn, args) { + var lastIndex = operatorList.length - 1; + if (!args) { + args = []; + } + if (lastIndex < 0 || + operatorList.fnArray[lastIndex] !== OPS.constructPath) { + operatorList.addOp(OPS.constructPath, [[fn], args]); + } else { + var opArgs = operatorList.argsArray[lastIndex]; + opArgs[0].push(fn); + Array.prototype.push.apply(opArgs[1], args); + } + }, + + handleColorN: function PartialEvaluator_handleColorN(operatorList, fn, args, + cs, patterns, resources, xref) { + // compile tiling patterns + var patternName = args[args.length - 1]; + // SCN/scn applies patterns along with normal colors + var pattern; + if (isName(patternName) && + (pattern = patterns.get(patternName.name))) { + var dict = (isStream(pattern) ? pattern.dict : pattern); + var typeNum = dict.get('PatternType'); + + if (typeNum === TILING_PATTERN) { + var color = cs.base ? cs.base.getRgb(args, 0) : null; + return this.handleTilingType(fn, color, resources, pattern, + dict, operatorList); + } else if (typeNum === SHADING_PATTERN) { + var shading = dict.get('Shading'); + var matrix = dict.get('Matrix'); + pattern = Pattern.parseShading(shading, matrix, xref, resources); + operatorList.addOp(fn, pattern.getIR()); + return Promise.resolve(); + } else { + return Promise.reject('Unknown PatternType: ' + typeNum); + } + } + // TODO shall we fail here? + operatorList.addOp(fn, args); + return Promise.resolve(); + }, + + getOperatorList: function PartialEvaluator_getOperatorList(stream, + resources, + operatorList, + initialState) { + + var self = this; + var xref = this.xref; + var imageCache = {}; + + assert(operatorList); + + resources = (resources || Dict.empty); + var xobjs = (resources.get('XObject') || Dict.empty); + var patterns = (resources.get('Pattern') || Dict.empty); + var stateManager = new StateManager(initialState || new EvalState()); + var preprocessor = new EvaluatorPreprocessor(stream, xref, stateManager); + var timeSlotManager = new TimeSlotManager(); + + return new Promise(function next(resolve, reject) { + timeSlotManager.reset(); + var stop, operation = {}, i, ii, cs; + while (!(stop = timeSlotManager.check())) { + // The arguments parsed by read() are used beyond this loop, so we + // cannot reuse the same array on each iteration. Therefore we pass + // in |null| as the initial value (see the comment on + // EvaluatorPreprocessor_read() for why). + operation.args = null; + if (!(preprocessor.read(operation))) { + break; + } + var args = operation.args; + var fn = operation.fn; + + switch (fn | 0) { + case OPS.paintXObject: + if (args[0].code) { + break; + } + // eagerly compile XForm objects + var name = args[0].name; + if (imageCache[name] !== undefined) { + operatorList.addOp(imageCache[name].fn, imageCache[name].args); + args = null; + continue; + } + + var xobj = xobjs.get(name); + if (xobj) { + assert(isStream(xobj), 'XObject should be a stream'); + + var type = xobj.dict.get('Subtype'); + assert(isName(type), + 'XObject should have a Name subtype'); + + if (type.name === 'Form') { + stateManager.save(); + return self.buildFormXObject(resources, xobj, null, + operatorList, + stateManager.state.clone()). + then(function () { + stateManager.restore(); + next(resolve, reject); + }, reject); + } else if (type.name === 'Image') { + self.buildPaintImageXObject(resources, xobj, false, + operatorList, name, imageCache); + args = null; + continue; + } else if (type.name === 'PS') { + // PostScript XObjects are unused when viewing documents. + // See section 4.7.1 of Adobe's PDF reference. + info('Ignored XObject subtype PS'); + continue; + } else { + error('Unhandled XObject subtype ' + type.name); + } + } + break; + case OPS.setFont: + var fontSize = args[1]; + // eagerly collect all fonts + return self.handleSetFont(resources, args, null, + operatorList, stateManager.state). + then(function (loadedName) { + operatorList.addDependency(loadedName); + operatorList.addOp(OPS.setFont, [loadedName, fontSize]); + next(resolve, reject); + }, reject); + case OPS.endInlineImage: + var cacheKey = args[0].cacheKey; + if (cacheKey) { + var cacheEntry = imageCache[cacheKey]; + if (cacheEntry !== undefined) { + operatorList.addOp(cacheEntry.fn, cacheEntry.args); + args = null; + continue; + } + } + self.buildPaintImageXObject(resources, args[0], true, + operatorList, cacheKey, imageCache); + args = null; + continue; + case OPS.showText: + args[0] = self.handleText(args[0], stateManager.state); + break; + case OPS.showSpacedText: + var arr = args[0]; + var combinedGlyphs = []; + var arrLength = arr.length; + for (i = 0; i < arrLength; ++i) { + var arrItem = arr[i]; + if (isString(arrItem)) { + Array.prototype.push.apply(combinedGlyphs, + self.handleText(arrItem, stateManager.state)); + } else if (isNum(arrItem)) { + combinedGlyphs.push(arrItem); + } + } + args[0] = combinedGlyphs; + fn = OPS.showText; + break; + case OPS.nextLineShowText: + operatorList.addOp(OPS.nextLine); + args[0] = self.handleText(args[0], stateManager.state); + fn = OPS.showText; + break; + case OPS.nextLineSetSpacingShowText: + operatorList.addOp(OPS.nextLine); + operatorList.addOp(OPS.setWordSpacing, [args.shift()]); + operatorList.addOp(OPS.setCharSpacing, [args.shift()]); + args[0] = self.handleText(args[0], stateManager.state); + fn = OPS.showText; + break; + case OPS.setTextRenderingMode: + stateManager.state.textRenderingMode = args[0]; + break; + + case OPS.setFillColorSpace: + stateManager.state.fillColorSpace = + ColorSpace.parse(args[0], xref, resources); + continue; + case OPS.setStrokeColorSpace: + stateManager.state.strokeColorSpace = + ColorSpace.parse(args[0], xref, resources); + continue; + case OPS.setFillColor: + cs = stateManager.state.fillColorSpace; + args = cs.getRgb(args, 0); + fn = OPS.setFillRGBColor; + break; + case OPS.setStrokeColor: + cs = stateManager.state.strokeColorSpace; + args = cs.getRgb(args, 0); + fn = OPS.setStrokeRGBColor; + break; + case OPS.setFillGray: + stateManager.state.fillColorSpace = ColorSpace.singletons.gray; + args = ColorSpace.singletons.gray.getRgb(args, 0); + fn = OPS.setFillRGBColor; + break; + case OPS.setStrokeGray: + stateManager.state.strokeColorSpace = ColorSpace.singletons.gray; + args = ColorSpace.singletons.gray.getRgb(args, 0); + fn = OPS.setStrokeRGBColor; + break; + case OPS.setFillCMYKColor: + stateManager.state.fillColorSpace = ColorSpace.singletons.cmyk; + args = ColorSpace.singletons.cmyk.getRgb(args, 0); + fn = OPS.setFillRGBColor; + break; + case OPS.setStrokeCMYKColor: + stateManager.state.strokeColorSpace = ColorSpace.singletons.cmyk; + args = ColorSpace.singletons.cmyk.getRgb(args, 0); + fn = OPS.setStrokeRGBColor; + break; + case OPS.setFillRGBColor: + stateManager.state.fillColorSpace = ColorSpace.singletons.rgb; + args = ColorSpace.singletons.rgb.getRgb(args, 0); + break; + case OPS.setStrokeRGBColor: + stateManager.state.strokeColorSpace = ColorSpace.singletons.rgb; + args = ColorSpace.singletons.rgb.getRgb(args, 0); + break; + case OPS.setFillColorN: + cs = stateManager.state.fillColorSpace; + if (cs.name === 'Pattern') { + return self.handleColorN(operatorList, OPS.setFillColorN, + args, cs, patterns, resources, xref).then(function() { + next(resolve, reject); + }, reject); + } + args = cs.getRgb(args, 0); + fn = OPS.setFillRGBColor; + break; + case OPS.setStrokeColorN: + cs = stateManager.state.strokeColorSpace; + if (cs.name === 'Pattern') { + return self.handleColorN(operatorList, OPS.setStrokeColorN, + args, cs, patterns, resources, xref).then(function() { + next(resolve, reject); + }, reject); + } + args = cs.getRgb(args, 0); + fn = OPS.setStrokeRGBColor; + break; + + case OPS.shadingFill: + var shadingRes = resources.get('Shading'); + if (!shadingRes) { + error('No shading resource found'); + } + + var shading = shadingRes.get(args[0].name); + if (!shading) { + error('No shading object found'); + } + + var shadingFill = Pattern.parseShading(shading, null, xref, + resources); + var patternIR = shadingFill.getIR(); + args = [patternIR]; + fn = OPS.shadingFill; + break; + case OPS.setGState: + var dictName = args[0]; + var extGState = resources.get('ExtGState'); + + if (!isDict(extGState) || !extGState.has(dictName.name)) { + break; + } + + var gState = extGState.get(dictName.name); + return self.setGState(resources, gState, operatorList, xref, + stateManager).then(function() { + next(resolve, reject); + }, reject); + case OPS.moveTo: + case OPS.lineTo: + case OPS.curveTo: + case OPS.curveTo2: + case OPS.curveTo3: + case OPS.closePath: + self.buildPath(operatorList, fn, args); + continue; + case OPS.rectangle: + self.buildPath(operatorList, fn, args); + continue; + } + operatorList.addOp(fn, args); + } + if (stop) { + deferred.then(function () { + next(resolve, reject); + }); + return; + } + // Some PDFs don't close all restores inside object/form. + // Closing those for them. + for (i = 0, ii = preprocessor.savedStatesDepth; i < ii; i++) { + operatorList.addOp(OPS.restore, []); + } + resolve(); + }); + }, + + getTextContent: function PartialEvaluator_getTextContent(stream, resources, + stateManager) { + + stateManager = (stateManager || new StateManager(new TextState())); + + var textContent = { + items: [], + styles: Object.create(null) + }; + var bidiTexts = textContent.items; + var SPACE_FACTOR = 0.3; + var MULTI_SPACE_FACTOR = 1.5; + + var self = this; + var xref = this.xref; + + resources = (xref.fetchIfRef(resources) || Dict.empty); + + // The xobj is parsed iff it's needed, e.g. if there is a `DO` cmd. + var xobjs = null; + var xobjsCache = {}; + + var preprocessor = new EvaluatorPreprocessor(stream, xref, stateManager); + + var textState; + + function newTextChunk() { + var font = textState.font; + if (!(font.loadedName in textContent.styles)) { + textContent.styles[font.loadedName] = { + fontFamily: font.fallbackName, + ascent: font.ascent, + descent: font.descent, + vertical: font.vertical + }; + } + return { + // |str| is initially an array which we push individual chars to, and + // then runBidi() overwrites it with the final string. + str: [], + dir: null, + width: 0, + height: 0, + transform: null, + fontName: font.loadedName + }; + } + + function runBidi(textChunk) { + var str = textChunk.str.join(''); + var bidiResult = PDFJS.bidi(str, -1, textState.font.vertical); + textChunk.str = bidiResult.str; + textChunk.dir = bidiResult.dir; + return textChunk; + } + + function handleSetFont(fontName, fontRef) { + return self.loadFont(fontName, fontRef, xref, resources). + then(function (translated) { + textState.font = translated.font; + textState.fontMatrix = translated.font.fontMatrix || + FONT_IDENTITY_MATRIX; + }); + } + + function buildTextGeometry(chars, textChunk) { + var font = textState.font; + textChunk = textChunk || newTextChunk(); + if (!textChunk.transform) { + // 9.4.4 Text Space Details + var tsm = [textState.fontSize * textState.textHScale, 0, + 0, textState.fontSize, + 0, textState.textRise]; + var trm = textChunk.transform = Util.transform(textState.ctm, + Util.transform(textState.textMatrix, tsm)); + if (!font.vertical) { + textChunk.height = Math.sqrt(trm[2] * trm[2] + trm[3] * trm[3]); + } else { + textChunk.width = Math.sqrt(trm[0] * trm[0] + trm[1] * trm[1]); + } + } + var width = 0; + var height = 0; + var glyphs = font.charsToGlyphs(chars); + var defaultVMetrics = font.defaultVMetrics; + for (var i = 0; i < glyphs.length; i++) { + var glyph = glyphs[i]; + if (!glyph) { // Previous glyph was a space. + width += textState.wordSpacing * textState.textHScale; + continue; + } + var vMetricX = null; + var vMetricY = null; + var glyphWidth = null; + if (font.vertical) { + if (glyph.vmetric) { + glyphWidth = glyph.vmetric[0]; + vMetricX = glyph.vmetric[1]; + vMetricY = glyph.vmetric[2]; + } else { + glyphWidth = glyph.width; + vMetricX = glyph.width * 0.5; + vMetricY = defaultVMetrics[2]; + } + } else { + glyphWidth = glyph.width; + } + + var glyphUnicode = glyph.unicode; + if (NormalizedUnicodes[glyphUnicode] !== undefined) { + glyphUnicode = NormalizedUnicodes[glyphUnicode]; + } + glyphUnicode = reverseIfRtl(glyphUnicode); + + // The following will calculate the x and y of the individual glyphs. + // if (font.vertical) { + // tsm[4] -= vMetricX * Math.abs(textState.fontSize) * + // textState.fontMatrix[0]; + // tsm[5] -= vMetricY * textState.fontSize * + // textState.fontMatrix[0]; + // } + // var trm = Util.transform(textState.textMatrix, tsm); + // var pt = Util.applyTransform([trm[4], trm[5]], textState.ctm); + // var x = pt[0]; + // var y = pt[1]; + + var tx = 0; + var ty = 0; + if (!font.vertical) { + var w0 = glyphWidth * textState.fontMatrix[0]; + tx = (w0 * textState.fontSize + textState.charSpacing) * + textState.textHScale; + width += tx; + } else { + var w1 = glyphWidth * textState.fontMatrix[0]; + ty = w1 * textState.fontSize + textState.charSpacing; + height += ty; + } + textState.translateTextMatrix(tx, ty); + + textChunk.str.push(glyphUnicode); + } + + var a = textState.textLineMatrix[0]; + var b = textState.textLineMatrix[1]; + var scaleLineX = Math.sqrt(a * a + b * b); + a = textState.ctm[0]; + b = textState.ctm[1]; + var scaleCtmX = Math.sqrt(a * a + b * b); + if (!font.vertical) { + textChunk.width += width * scaleCtmX * scaleLineX; + } else { + textChunk.height += Math.abs(height * scaleCtmX * scaleLineX); + } + return textChunk; + } + + var timeSlotManager = new TimeSlotManager(); + + return new Promise(function next(resolve, reject) { + timeSlotManager.reset(); + var stop, operation = {}, args = []; + while (!(stop = timeSlotManager.check())) { + // The arguments parsed by read() are not used beyond this loop, so + // we can reuse the same array on every iteration, thus avoiding + // unnecessary allocations. + args.length = 0; + operation.args = args; + if (!(preprocessor.read(operation))) { + break; + } + textState = stateManager.state; + var fn = operation.fn; + args = operation.args; + + switch (fn | 0) { + case OPS.setFont: + textState.fontSize = args[1]; + return handleSetFont(args[0].name).then(function() { + next(resolve, reject); + }, reject); + case OPS.setTextRise: + textState.textRise = args[0]; + break; + case OPS.setHScale: + textState.textHScale = args[0] / 100; + break; + case OPS.setLeading: + textState.leading = args[0]; + break; + case OPS.moveText: + textState.translateTextLineMatrix(args[0], args[1]); + textState.textMatrix = textState.textLineMatrix.slice(); + break; + case OPS.setLeadingMoveText: + textState.leading = -args[1]; + textState.translateTextLineMatrix(args[0], args[1]); + textState.textMatrix = textState.textLineMatrix.slice(); + break; + case OPS.nextLine: + textState.carriageReturn(); + break; + case OPS.setTextMatrix: + textState.setTextMatrix(args[0], args[1], args[2], args[3], + args[4], args[5]); + textState.setTextLineMatrix(args[0], args[1], args[2], args[3], + args[4], args[5]); + break; + case OPS.setCharSpacing: + textState.charSpacing = args[0]; + break; + case OPS.setWordSpacing: + textState.wordSpacing = args[0]; + break; + case OPS.beginText: + textState.textMatrix = IDENTITY_MATRIX.slice(); + textState.textLineMatrix = IDENTITY_MATRIX.slice(); + break; + case OPS.showSpacedText: + var items = args[0]; + var textChunk = newTextChunk(); + var offset; + for (var j = 0, jj = items.length; j < jj; j++) { + if (typeof items[j] === 'string') { + buildTextGeometry(items[j], textChunk); + } else { + var val = items[j] / 1000; + if (!textState.font.vertical) { + offset = -val * textState.fontSize * textState.textHScale * + textState.textMatrix[0]; + textState.translateTextMatrix(offset, 0); + textChunk.width += offset; + } else { + offset = -val * textState.fontSize * + textState.textMatrix[3]; + textState.translateTextMatrix(0, offset); + textChunk.height += offset; + } + if (items[j] < 0 && textState.font.spaceWidth > 0) { + var fakeSpaces = -items[j] / textState.font.spaceWidth; + if (fakeSpaces > MULTI_SPACE_FACTOR) { + fakeSpaces = Math.round(fakeSpaces); + while (fakeSpaces--) { + textChunk.str.push(' '); + } + } else if (fakeSpaces > SPACE_FACTOR) { + textChunk.str.push(' '); + } + } + } + } + bidiTexts.push(runBidi(textChunk)); + break; + case OPS.showText: + bidiTexts.push(runBidi(buildTextGeometry(args[0]))); + break; + case OPS.nextLineShowText: + textState.carriageReturn(); + bidiTexts.push(runBidi(buildTextGeometry(args[0]))); + break; + case OPS.nextLineSetSpacingShowText: + textState.wordSpacing = args[0]; + textState.charSpacing = args[1]; + textState.carriageReturn(); + bidiTexts.push(runBidi(buildTextGeometry(args[2]))); + break; + case OPS.paintXObject: + if (args[0].code) { + break; + } + + if (!xobjs) { + xobjs = (resources.get('XObject') || Dict.empty); + } + + var name = args[0].name; + if (xobjsCache.key === name) { + if (xobjsCache.texts) { + Util.appendToArray(bidiTexts, xobjsCache.texts.items); + Util.extendObj(textContent.styles, xobjsCache.texts.styles); + } + break; + } + + var xobj = xobjs.get(name); + if (!xobj) { + break; + } + assert(isStream(xobj), 'XObject should be a stream'); + + var type = xobj.dict.get('Subtype'); + assert(isName(type), + 'XObject should have a Name subtype'); + + if ('Form' !== type.name) { + xobjsCache.key = name; + xobjsCache.texts = null; + break; + } + + stateManager.save(); + var matrix = xobj.dict.get('Matrix'); + if (isArray(matrix) && matrix.length === 6) { + stateManager.transform(matrix); + } + + return self.getTextContent(xobj, + xobj.dict.get('Resources') || resources, stateManager). + then(function (formTextContent) { + Util.appendToArray(bidiTexts, formTextContent.items); + Util.extendObj(textContent.styles, formTextContent.styles); + stateManager.restore(); + + xobjsCache.key = name; + xobjsCache.texts = formTextContent; + + next(resolve, reject); + }, reject); + case OPS.setGState: + var dictName = args[0]; + var extGState = resources.get('ExtGState'); + + if (!isDict(extGState) || !extGState.has(dictName.name)) { + break; + } + + var gsStateMap = extGState.get(dictName.name); + var gsStateFont = null; + for (var key in gsStateMap) { + if (key === 'Font') { + assert(!gsStateFont); + gsStateFont = gsStateMap[key]; + } + } + if (gsStateFont) { + textState.fontSize = gsStateFont[1]; + return handleSetFont(gsStateFont[0]).then(function() { + next(resolve, reject); + }, reject); + } + break; + } // switch + } // while + if (stop) { + deferred.then(function () { + next(resolve, reject); + }); + return; + } + resolve(textContent); + }); + }, + + extractDataStructures: function + partialEvaluatorExtractDataStructures(dict, baseDict, + xref, properties) { + // 9.10.2 + var toUnicode = (dict.get('ToUnicode') || baseDict.get('ToUnicode')); + if (toUnicode) { + properties.toUnicode = this.readToUnicode(toUnicode); + } + if (properties.composite) { + // CIDSystemInfo helps to match CID to glyphs + var cidSystemInfo = dict.get('CIDSystemInfo'); + if (isDict(cidSystemInfo)) { + properties.cidSystemInfo = { + registry: cidSystemInfo.get('Registry'), + ordering: cidSystemInfo.get('Ordering'), + supplement: cidSystemInfo.get('Supplement') + }; + } + + var cidToGidMap = dict.get('CIDToGIDMap'); + if (isStream(cidToGidMap)) { + properties.cidToGidMap = this.readCidToGidMap(cidToGidMap); + } + } + + // Based on 9.6.6 of the spec the encoding can come from multiple places + // and depends on the font type. The base encoding and differences are + // read here, but the encoding that is actually used is chosen during + // glyph mapping in the font. + // TODO: Loading the built in encoding in the font would allow the + // differences to be merged in here not require us to hold on to it. + var differences = []; + var baseEncodingName = null; + var encoding; + if (dict.has('Encoding')) { + encoding = dict.get('Encoding'); + if (isDict(encoding)) { + baseEncodingName = encoding.get('BaseEncoding'); + baseEncodingName = (isName(baseEncodingName) ? + baseEncodingName.name : null); + // Load the differences between the base and original + if (encoding.has('Differences')) { + var diffEncoding = encoding.get('Differences'); + var index = 0; + for (var j = 0, jj = diffEncoding.length; j < jj; j++) { + var data = diffEncoding[j]; + if (isNum(data)) { + index = data; + } else { + differences[index++] = data.name; + } + } + } + } else if (isName(encoding)) { + baseEncodingName = encoding.name; + } else { + error('Encoding is not a Name nor a Dict'); + } + // According to table 114 if the encoding is a named encoding it must be + // one of these predefined encodings. + if ((baseEncodingName !== 'MacRomanEncoding' && + baseEncodingName !== 'MacExpertEncoding' && + baseEncodingName !== 'WinAnsiEncoding')) { + baseEncodingName = null; + } + } + + if (baseEncodingName) { + properties.defaultEncoding = Encodings[baseEncodingName].slice(); + } else { + encoding = (properties.type === 'TrueType' ? + Encodings.WinAnsiEncoding : Encodings.StandardEncoding); + // The Symbolic attribute can be misused for regular fonts + // Heuristic: we have to check if the font is a standard one also + if (!!(properties.flags & FontFlags.Symbolic)) { + encoding = Encodings.MacRomanEncoding; + if (!properties.file) { + if (/Symbol/i.test(properties.name)) { + encoding = Encodings.SymbolSetEncoding; + } else if (/Dingbats/i.test(properties.name)) { + encoding = Encodings.ZapfDingbatsEncoding; + } + } + } + properties.defaultEncoding = encoding; + } + + properties.differences = differences; + properties.baseEncodingName = baseEncodingName; + properties.dict = dict; + }, + + readToUnicode: function PartialEvaluator_readToUnicode(toUnicode) { + var cmap, cmapObj = toUnicode; + if (isName(cmapObj)) { + cmap = CMapFactory.create(cmapObj, + { url: PDFJS.cMapUrl, packed: PDFJS.cMapPacked }, null); + if (cmap instanceof IdentityCMap) { + return new IdentityToUnicodeMap(0, 0xFFFF); + } + return new ToUnicodeMap(cmap.getMap()); + } else if (isStream(cmapObj)) { + cmap = CMapFactory.create(cmapObj, + { url: PDFJS.cMapUrl, packed: PDFJS.cMapPacked }, null); + if (cmap instanceof IdentityCMap) { + return new IdentityToUnicodeMap(0, 0xFFFF); + } + cmap = cmap.getMap(); + // Convert UTF-16BE + // NOTE: cmap can be a sparse array, so use forEach instead of for(;;) + // to iterate over all keys. + cmap.forEach(function(token, i) { + var str = []; + for (var k = 0; k < token.length; k += 2) { + var w1 = (token.charCodeAt(k) << 8) | token.charCodeAt(k + 1); + if ((w1 & 0xF800) !== 0xD800) { // w1 < 0xD800 || w1 > 0xDFFF + str.push(w1); + continue; + } + k += 2; + var w2 = (token.charCodeAt(k) << 8) | token.charCodeAt(k + 1); + str.push(((w1 & 0x3ff) << 10) + (w2 & 0x3ff) + 0x10000); + } + cmap[i] = String.fromCharCode.apply(String, str); + }); + return new ToUnicodeMap(cmap); + } + return null; + }, + + readCidToGidMap: function PartialEvaluator_readCidToGidMap(cidToGidStream) { + // Extract the encoding from the CIDToGIDMap + var glyphsData = cidToGidStream.getBytes(); + + // Set encoding 0 to later verify the font has an encoding + var result = []; + for (var j = 0, jj = glyphsData.length; j < jj; j++) { + var glyphID = (glyphsData[j++] << 8) | glyphsData[j]; + if (glyphID === 0) { + continue; + } + var code = j >> 1; + result[code] = glyphID; + } + return result; + }, + + extractWidths: function PartialEvaluator_extractWidths(dict, xref, + descriptor, + properties) { + var glyphsWidths = []; + var defaultWidth = 0; + var glyphsVMetrics = []; + var defaultVMetrics; + var i, ii, j, jj, start, code, widths; + if (properties.composite) { + defaultWidth = dict.get('DW') || 1000; + + widths = dict.get('W'); + if (widths) { + for (i = 0, ii = widths.length; i < ii; i++) { + start = widths[i++]; + code = xref.fetchIfRef(widths[i]); + if (isArray(code)) { + for (j = 0, jj = code.length; j < jj; j++) { + glyphsWidths[start++] = code[j]; + } + } else { + var width = widths[++i]; + for (j = start; j <= code; j++) { + glyphsWidths[j] = width; + } + } + } + } + + if (properties.vertical) { + var vmetrics = (dict.get('DW2') || [880, -1000]); + defaultVMetrics = [vmetrics[1], defaultWidth * 0.5, vmetrics[0]]; + vmetrics = dict.get('W2'); + if (vmetrics) { + for (i = 0, ii = vmetrics.length; i < ii; i++) { + start = vmetrics[i++]; + code = xref.fetchIfRef(vmetrics[i]); + if (isArray(code)) { + for (j = 0, jj = code.length; j < jj; j++) { + glyphsVMetrics[start++] = [code[j++], code[j++], code[j]]; + } + } else { + var vmetric = [vmetrics[++i], vmetrics[++i], vmetrics[++i]]; + for (j = start; j <= code; j++) { + glyphsVMetrics[j] = vmetric; + } + } + } + } + } + } else { + var firstChar = properties.firstChar; + widths = dict.get('Widths'); + if (widths) { + j = firstChar; + for (i = 0, ii = widths.length; i < ii; i++) { + glyphsWidths[j++] = widths[i]; + } + defaultWidth = (parseFloat(descriptor.get('MissingWidth')) || 0); + } else { + // Trying get the BaseFont metrics (see comment above). + var baseFontName = dict.get('BaseFont'); + if (isName(baseFontName)) { + var metrics = this.getBaseFontMetrics(baseFontName.name); + + glyphsWidths = this.buildCharCodeToWidth(metrics.widths, + properties); + defaultWidth = metrics.defaultWidth; + } + } + } + + // Heuristic: detection of monospace font by checking all non-zero widths + var isMonospace = true; + var firstWidth = defaultWidth; + for (var glyph in glyphsWidths) { + var glyphWidth = glyphsWidths[glyph]; + if (!glyphWidth) { + continue; + } + if (!firstWidth) { + firstWidth = glyphWidth; + continue; + } + if (firstWidth !== glyphWidth) { + isMonospace = false; + break; + } + } + if (isMonospace) { + properties.flags |= FontFlags.FixedPitch; + } + + properties.defaultWidth = defaultWidth; + properties.widths = glyphsWidths; + properties.defaultVMetrics = defaultVMetrics; + properties.vmetrics = glyphsVMetrics; + }, + + isSerifFont: function PartialEvaluator_isSerifFont(baseFontName) { + // Simulating descriptor flags attribute + var fontNameWoStyle = baseFontName.split('-')[0]; + return (fontNameWoStyle in serifFonts) || + (fontNameWoStyle.search(/serif/gi) !== -1); + }, + + getBaseFontMetrics: function PartialEvaluator_getBaseFontMetrics(name) { + var defaultWidth = 0; + var widths = []; + var monospace = false; + var lookupName = (stdFontMap[name] || name); + + if (!(lookupName in Metrics)) { + // Use default fonts for looking up font metrics if the passed + // font is not a base font + if (this.isSerifFont(name)) { + lookupName = 'Times-Roman'; + } else { + lookupName = 'Helvetica'; + } + } + var glyphWidths = Metrics[lookupName]; + + if (isNum(glyphWidths)) { + defaultWidth = glyphWidths; + monospace = true; + } else { + widths = glyphWidths; + } + + return { + defaultWidth: defaultWidth, + monospace: monospace, + widths: widths + }; + }, + + buildCharCodeToWidth: + function PartialEvaluator_bulildCharCodeToWidth(widthsByGlyphName, + properties) { + var widths = Object.create(null); + var differences = properties.differences; + var encoding = properties.defaultEncoding; + for (var charCode = 0; charCode < 256; charCode++) { + if (charCode in differences && + widthsByGlyphName[differences[charCode]]) { + widths[charCode] = widthsByGlyphName[differences[charCode]]; + continue; + } + if (charCode in encoding && widthsByGlyphName[encoding[charCode]]) { + widths[charCode] = widthsByGlyphName[encoding[charCode]]; + continue; + } + } + return widths; + }, + + preEvaluateFont: function PartialEvaluator_preEvaluateFont(dict, xref) { + var baseDict = dict; + var type = dict.get('Subtype'); + assert(isName(type), 'invalid font Subtype'); + + var composite = false; + var uint8array; + if (type.name === 'Type0') { + // If font is a composite + // - get the descendant font + // - set the type according to the descendant font + // - get the FontDescriptor from the descendant font + var df = dict.get('DescendantFonts'); + if (!df) { + error('Descendant fonts are not specified'); + } + dict = (isArray(df) ? xref.fetchIfRef(df[0]) : df); + + type = dict.get('Subtype'); + assert(isName(type), 'invalid font Subtype'); + composite = true; + } + + var descriptor = dict.get('FontDescriptor'); + if (descriptor) { + var hash = new MurmurHash3_64(); + var encoding = baseDict.getRaw('Encoding'); + if (isName(encoding)) { + hash.update(encoding.name); + } else if (isRef(encoding)) { + hash.update(encoding.num + '_' + encoding.gen); + } else if (isDict(encoding)) { + var keys = encoding.getKeys(); + for (var i = 0, ii = keys.length; i < ii; i++) { + var entry = encoding.getRaw(keys[i]); + if (isName(entry)) { + hash.update(entry.name); + } else if (isRef(entry)) { + hash.update(entry.num + '_' + entry.gen); + } else if (isArray(entry)) { // 'Differences' entry. + // Ideally we should check the contents of the array, but to avoid + // parsing it here and then again in |extractDataStructures|, + // we only use the array length for now (fixes bug1157493.pdf). + hash.update(entry.length.toString()); + } + } + } + + var toUnicode = dict.get('ToUnicode') || baseDict.get('ToUnicode'); + if (isStream(toUnicode)) { + var stream = toUnicode.str || toUnicode; + uint8array = stream.buffer ? + new Uint8Array(stream.buffer.buffer, 0, stream.bufferLength) : + new Uint8Array(stream.bytes.buffer, + stream.start, stream.end - stream.start); + hash.update(uint8array); + + } else if (isName(toUnicode)) { + hash.update(toUnicode.name); + } + + var widths = dict.get('Widths') || baseDict.get('Widths'); + if (widths) { + uint8array = new Uint8Array(new Uint32Array(widths).buffer); + hash.update(uint8array); + } + } + + return { + descriptor: descriptor, + dict: dict, + baseDict: baseDict, + composite: composite, + type: type.name, + hash: hash ? hash.hexdigest() : '' + }; + }, + + translateFont: function PartialEvaluator_translateFont(preEvaluatedFont, + xref) { + var baseDict = preEvaluatedFont.baseDict; + var dict = preEvaluatedFont.dict; + var composite = preEvaluatedFont.composite; + var descriptor = preEvaluatedFont.descriptor; + var type = preEvaluatedFont.type; + var maxCharIndex = (composite ? 0xFFFF : 0xFF); + var properties; + + if (!descriptor) { + if (type === 'Type3') { + // FontDescriptor is only required for Type3 fonts when the document + // is a tagged pdf. Create a barbebones one to get by. + descriptor = new Dict(null); + descriptor.set('FontName', Name.get(type)); + } else { + // Before PDF 1.5 if the font was one of the base 14 fonts, having a + // FontDescriptor was not required. + // This case is here for compatibility. + var baseFontName = dict.get('BaseFont'); + if (!isName(baseFontName)) { + error('Base font is not specified'); + } + + // Using base font name as a font name. + baseFontName = baseFontName.name.replace(/[,_]/g, '-'); + var metrics = this.getBaseFontMetrics(baseFontName); + + // Simulating descriptor flags attribute + var fontNameWoStyle = baseFontName.split('-')[0]; + var flags = + (this.isSerifFont(fontNameWoStyle) ? FontFlags.Serif : 0) | + (metrics.monospace ? FontFlags.FixedPitch : 0) | + (symbolsFonts[fontNameWoStyle] ? FontFlags.Symbolic : + FontFlags.Nonsymbolic); + + properties = { + type: type, + name: baseFontName, + widths: metrics.widths, + defaultWidth: metrics.defaultWidth, + flags: flags, + firstChar: 0, + lastChar: maxCharIndex + }; + this.extractDataStructures(dict, dict, xref, properties); + properties.widths = this.buildCharCodeToWidth(metrics.widths, + properties); + return new Font(baseFontName, null, properties); + } + } + + // According to the spec if 'FontDescriptor' is declared, 'FirstChar', + // 'LastChar' and 'Widths' should exist too, but some PDF encoders seem + // to ignore this rule when a variant of a standart font is used. + // TODO Fill the width array depending on which of the base font this is + // a variant. + var firstChar = (dict.get('FirstChar') || 0); + var lastChar = (dict.get('LastChar') || maxCharIndex); + + var fontName = descriptor.get('FontName'); + var baseFont = dict.get('BaseFont'); + // Some bad PDFs have a string as the font name. + if (isString(fontName)) { + fontName = Name.get(fontName); + } + if (isString(baseFont)) { + baseFont = Name.get(baseFont); + } + + if (type !== 'Type3') { + var fontNameStr = fontName && fontName.name; + var baseFontStr = baseFont && baseFont.name; + if (fontNameStr !== baseFontStr) { + info('The FontDescriptor\'s FontName is "' + fontNameStr + + '" but should be the same as the Font\'s BaseFont "' + + baseFontStr + '"'); + // Workaround for cases where e.g. fontNameStr = 'Arial' and + // baseFontStr = 'Arial,Bold' (needed when no font file is embedded). + if (fontNameStr && baseFontStr && + baseFontStr.indexOf(fontNameStr) === 0) { + fontName = baseFont; + } + } + } + fontName = (fontName || baseFont); + + assert(isName(fontName), 'invalid font name'); + + var fontFile = descriptor.get('FontFile', 'FontFile2', 'FontFile3'); + if (fontFile) { + if (fontFile.dict) { + var subtype = fontFile.dict.get('Subtype'); + if (subtype) { + subtype = subtype.name; + } + var length1 = fontFile.dict.get('Length1'); + var length2 = fontFile.dict.get('Length2'); + } + } + + properties = { + type: type, + name: fontName.name, + subtype: subtype, + file: fontFile, + length1: length1, + length2: length2, + loadedName: baseDict.loadedName, + composite: composite, + wideChars: composite, + fixedPitch: false, + fontMatrix: (dict.get('FontMatrix') || FONT_IDENTITY_MATRIX), + firstChar: firstChar || 0, + lastChar: (lastChar || maxCharIndex), + bbox: descriptor.get('FontBBox'), + ascent: descriptor.get('Ascent'), + descent: descriptor.get('Descent'), + xHeight: descriptor.get('XHeight'), + capHeight: descriptor.get('CapHeight'), + flags: descriptor.get('Flags'), + italicAngle: descriptor.get('ItalicAngle'), + coded: false + }; + + if (composite) { + var cidEncoding = baseDict.get('Encoding'); + if (isName(cidEncoding)) { + properties.cidEncoding = cidEncoding.name; + } + properties.cMap = CMapFactory.create(cidEncoding, + { url: PDFJS.cMapUrl, packed: PDFJS.cMapPacked }, null); + properties.vertical = properties.cMap.vertical; + } + this.extractDataStructures(dict, baseDict, xref, properties); + this.extractWidths(dict, xref, descriptor, properties); + + if (type === 'Type3') { + properties.isType3Font = true; + } + + return new Font(fontName.name, fontFile, properties); + } + }; + + return PartialEvaluator; +})(); + +var TranslatedFont = (function TranslatedFontClosure() { + function TranslatedFont(loadedName, font, dict) { + this.loadedName = loadedName; + this.font = font; + this.dict = dict; + this.type3Loaded = null; + this.sent = false; + } + TranslatedFont.prototype = { + send: function (handler) { + if (this.sent) { + return; + } + var fontData = this.font.exportData(); + handler.send('commonobj', [ + this.loadedName, + 'Font', + fontData + ]); + this.sent = true; + }, + loadType3Data: function (evaluator, resources, parentOperatorList) { + assert(this.font.isType3Font); + + if (this.type3Loaded) { + return this.type3Loaded; + } + + var translatedFont = this.font; + var loadCharProcsPromise = Promise.resolve(); + var charProcs = this.dict.get('CharProcs').getAll(); + var fontResources = this.dict.get('Resources') || resources; + var charProcKeys = Object.keys(charProcs); + var charProcOperatorList = {}; + for (var i = 0, n = charProcKeys.length; i < n; ++i) { + loadCharProcsPromise = loadCharProcsPromise.then(function (key) { + var glyphStream = charProcs[key]; + var operatorList = new OperatorList(); + return evaluator.getOperatorList(glyphStream, fontResources, + operatorList).then(function () { + charProcOperatorList[key] = operatorList.getIR(); + + // Add the dependencies to the parent operator list so they are + // resolved before sub operator list is executed synchronously. + parentOperatorList.addDependencies(operatorList.dependencies); + }, function (reason) { + warn('Type3 font resource \"' + key + '\" is not available'); + var operatorList = new OperatorList(); + charProcOperatorList[key] = operatorList.getIR(); + }); + }.bind(this, charProcKeys[i])); + } + this.type3Loaded = loadCharProcsPromise.then(function () { + translatedFont.charProcOperatorList = charProcOperatorList; + }); + return this.type3Loaded; + } + }; + return TranslatedFont; +})(); + +var OperatorList = (function OperatorListClosure() { + var CHUNK_SIZE = 1000; + var CHUNK_SIZE_ABOUT = CHUNK_SIZE - 5; // close to chunk size + + function getTransfers(queue) { + var transfers = []; + var fnArray = queue.fnArray, argsArray = queue.argsArray; + for (var i = 0, ii = queue.length; i < ii; i++) { + switch (fnArray[i]) { + case OPS.paintInlineImageXObject: + case OPS.paintInlineImageXObjectGroup: + case OPS.paintImageMaskXObject: + var arg = argsArray[i][0]; // first param in imgData + if (!arg.cached) { + transfers.push(arg.data.buffer); + } + break; + } + } + return transfers; + } + + function OperatorList(intent, messageHandler, pageIndex) { + this.messageHandler = messageHandler; + this.fnArray = []; + this.argsArray = []; + this.dependencies = {}; + this.pageIndex = pageIndex; + this.intent = intent; + } + + OperatorList.prototype = { + get length() { + return this.argsArray.length; + }, + + addOp: function(fn, args) { + this.fnArray.push(fn); + this.argsArray.push(args); + if (this.messageHandler) { + if (this.fnArray.length >= CHUNK_SIZE) { + this.flush(); + } else if (this.fnArray.length >= CHUNK_SIZE_ABOUT && + (fn === OPS.restore || fn === OPS.endText)) { + // heuristic to flush on boundary of restore or endText + this.flush(); + } + } + }, + + addDependency: function(dependency) { + if (dependency in this.dependencies) { + return; + } + this.dependencies[dependency] = true; + this.addOp(OPS.dependency, [dependency]); + }, + + addDependencies: function(dependencies) { + for (var key in dependencies) { + this.addDependency(key); + } + }, + + addOpList: function(opList) { + Util.extendObj(this.dependencies, opList.dependencies); + for (var i = 0, ii = opList.length; i < ii; i++) { + this.addOp(opList.fnArray[i], opList.argsArray[i]); + } + }, + + getIR: function() { + return { + fnArray: this.fnArray, + argsArray: this.argsArray, + length: this.length + }; + }, + + flush: function(lastChunk) { + if (this.intent !== 'oplist') { + new QueueOptimizer().optimize(this); + } + var transfers = getTransfers(this); + this.messageHandler.send('RenderPageChunk', { + operatorList: { + fnArray: this.fnArray, + argsArray: this.argsArray, + lastChunk: lastChunk, + length: this.length + }, + pageIndex: this.pageIndex, + intent: this.intent + }, transfers); + this.dependencies = {}; + this.fnArray.length = 0; + this.argsArray.length = 0; + } + }; + + return OperatorList; +})(); + +var StateManager = (function StateManagerClosure() { + function StateManager(initialState) { + this.state = initialState; + this.stateStack = []; + } + StateManager.prototype = { + save: function () { + var old = this.state; + this.stateStack.push(this.state); + this.state = old.clone(); + }, + restore: function () { + var prev = this.stateStack.pop(); + if (prev) { + this.state = prev; + } + }, + transform: function (args) { + this.state.ctm = Util.transform(this.state.ctm, args); + } + }; + return StateManager; +})(); + +var TextState = (function TextStateClosure() { + function TextState() { + this.ctm = new Float32Array(IDENTITY_MATRIX); + this.fontSize = 0; + this.font = null; + this.fontMatrix = FONT_IDENTITY_MATRIX; + this.textMatrix = IDENTITY_MATRIX.slice(); + this.textLineMatrix = IDENTITY_MATRIX.slice(); + this.charSpacing = 0; + this.wordSpacing = 0; + this.leading = 0; + this.textHScale = 1; + this.textRise = 0; + } + + TextState.prototype = { + setTextMatrix: function TextState_setTextMatrix(a, b, c, d, e, f) { + var m = this.textMatrix; + m[0] = a; m[1] = b; m[2] = c; m[3] = d; m[4] = e; m[5] = f; + }, + setTextLineMatrix: function TextState_setTextMatrix(a, b, c, d, e, f) { + var m = this.textLineMatrix; + m[0] = a; m[1] = b; m[2] = c; m[3] = d; m[4] = e; m[5] = f; + }, + translateTextMatrix: function TextState_translateTextMatrix(x, y) { + var m = this.textMatrix; + m[4] = m[0] * x + m[2] * y + m[4]; + m[5] = m[1] * x + m[3] * y + m[5]; + }, + translateTextLineMatrix: function TextState_translateTextMatrix(x, y) { + var m = this.textLineMatrix; + m[4] = m[0] * x + m[2] * y + m[4]; + m[5] = m[1] * x + m[3] * y + m[5]; + }, + calcRenderMatrix: function TextState_calcRendeMatrix(ctm) { + // 9.4.4 Text Space Details + var tsm = [this.fontSize * this.textHScale, 0, + 0, this.fontSize, + 0, this.textRise]; + return Util.transform(ctm, Util.transform(this.textMatrix, tsm)); + }, + carriageReturn: function TextState_carriageReturn() { + this.translateTextLineMatrix(0, -this.leading); + this.textMatrix = this.textLineMatrix.slice(); + }, + clone: function TextState_clone() { + var clone = Object.create(this); + clone.textMatrix = this.textMatrix.slice(); + clone.textLineMatrix = this.textLineMatrix.slice(); + clone.fontMatrix = this.fontMatrix.slice(); + return clone; + } + }; + return TextState; +})(); + +var EvalState = (function EvalStateClosure() { + function EvalState() { + this.ctm = new Float32Array(IDENTITY_MATRIX); + this.font = null; + this.textRenderingMode = TextRenderingMode.FILL; + this.fillColorSpace = ColorSpace.singletons.gray; + this.strokeColorSpace = ColorSpace.singletons.gray; + } + EvalState.prototype = { + clone: function CanvasExtraState_clone() { + return Object.create(this); + }, + }; + return EvalState; +})(); + +var EvaluatorPreprocessor = (function EvaluatorPreprocessorClosure() { + // Specifies properties for each command + // + // If variableArgs === true: [0, `numArgs`] expected + // If variableArgs === false: exactly `numArgs` expected + var OP_MAP = { + // Graphic state + w: { id: OPS.setLineWidth, numArgs: 1, variableArgs: false }, + J: { id: OPS.setLineCap, numArgs: 1, variableArgs: false }, + j: { id: OPS.setLineJoin, numArgs: 1, variableArgs: false }, + M: { id: OPS.setMiterLimit, numArgs: 1, variableArgs: false }, + d: { id: OPS.setDash, numArgs: 2, variableArgs: false }, + ri: { id: OPS.setRenderingIntent, numArgs: 1, variableArgs: false }, + i: { id: OPS.setFlatness, numArgs: 1, variableArgs: false }, + gs: { id: OPS.setGState, numArgs: 1, variableArgs: false }, + q: { id: OPS.save, numArgs: 0, variableArgs: false }, + Q: { id: OPS.restore, numArgs: 0, variableArgs: false }, + cm: { id: OPS.transform, numArgs: 6, variableArgs: false }, + + // Path + m: { id: OPS.moveTo, numArgs: 2, variableArgs: false }, + l: { id: OPS.lineTo, numArgs: 2, variableArgs: false }, + c: { id: OPS.curveTo, numArgs: 6, variableArgs: false }, + v: { id: OPS.curveTo2, numArgs: 4, variableArgs: false }, + y: { id: OPS.curveTo3, numArgs: 4, variableArgs: false }, + h: { id: OPS.closePath, numArgs: 0, variableArgs: false }, + re: { id: OPS.rectangle, numArgs: 4, variableArgs: false }, + S: { id: OPS.stroke, numArgs: 0, variableArgs: false }, + s: { id: OPS.closeStroke, numArgs: 0, variableArgs: false }, + f: { id: OPS.fill, numArgs: 0, variableArgs: false }, + F: { id: OPS.fill, numArgs: 0, variableArgs: false }, + 'f*': { id: OPS.eoFill, numArgs: 0, variableArgs: false }, + B: { id: OPS.fillStroke, numArgs: 0, variableArgs: false }, + 'B*': { id: OPS.eoFillStroke, numArgs: 0, variableArgs: false }, + b: { id: OPS.closeFillStroke, numArgs: 0, variableArgs: false }, + 'b*': { id: OPS.closeEOFillStroke, numArgs: 0, variableArgs: false }, + n: { id: OPS.endPath, numArgs: 0, variableArgs: false }, + + // Clipping + W: { id: OPS.clip, numArgs: 0, variableArgs: false }, + 'W*': { id: OPS.eoClip, numArgs: 0, variableArgs: false }, + + // Text + BT: { id: OPS.beginText, numArgs: 0, variableArgs: false }, + ET: { id: OPS.endText, numArgs: 0, variableArgs: false }, + Tc: { id: OPS.setCharSpacing, numArgs: 1, variableArgs: false }, + Tw: { id: OPS.setWordSpacing, numArgs: 1, variableArgs: false }, + Tz: { id: OPS.setHScale, numArgs: 1, variableArgs: false }, + TL: { id: OPS.setLeading, numArgs: 1, variableArgs: false }, + Tf: { id: OPS.setFont, numArgs: 2, variableArgs: false }, + Tr: { id: OPS.setTextRenderingMode, numArgs: 1, variableArgs: false }, + Ts: { id: OPS.setTextRise, numArgs: 1, variableArgs: false }, + Td: { id: OPS.moveText, numArgs: 2, variableArgs: false }, + TD: { id: OPS.setLeadingMoveText, numArgs: 2, variableArgs: false }, + Tm: { id: OPS.setTextMatrix, numArgs: 6, variableArgs: false }, + 'T*': { id: OPS.nextLine, numArgs: 0, variableArgs: false }, + Tj: { id: OPS.showText, numArgs: 1, variableArgs: false }, + TJ: { id: OPS.showSpacedText, numArgs: 1, variableArgs: false }, + '\'': { id: OPS.nextLineShowText, numArgs: 1, variableArgs: false }, + '"': { id: OPS.nextLineSetSpacingShowText, numArgs: 3, + variableArgs: false }, + + // Type3 fonts + d0: { id: OPS.setCharWidth, numArgs: 2, variableArgs: false }, + d1: { id: OPS.setCharWidthAndBounds, numArgs: 6, variableArgs: false }, + + // Color + CS: { id: OPS.setStrokeColorSpace, numArgs: 1, variableArgs: false }, + cs: { id: OPS.setFillColorSpace, numArgs: 1, variableArgs: false }, + SC: { id: OPS.setStrokeColor, numArgs: 4, variableArgs: true }, + SCN: { id: OPS.setStrokeColorN, numArgs: 33, variableArgs: true }, + sc: { id: OPS.setFillColor, numArgs: 4, variableArgs: true }, + scn: { id: OPS.setFillColorN, numArgs: 33, variableArgs: true }, + G: { id: OPS.setStrokeGray, numArgs: 1, variableArgs: false }, + g: { id: OPS.setFillGray, numArgs: 1, variableArgs: false }, + RG: { id: OPS.setStrokeRGBColor, numArgs: 3, variableArgs: false }, + rg: { id: OPS.setFillRGBColor, numArgs: 3, variableArgs: false }, + K: { id: OPS.setStrokeCMYKColor, numArgs: 4, variableArgs: false }, + k: { id: OPS.setFillCMYKColor, numArgs: 4, variableArgs: false }, + + // Shading + sh: { id: OPS.shadingFill, numArgs: 1, variableArgs: false }, + + // Images + BI: { id: OPS.beginInlineImage, numArgs: 0, variableArgs: false }, + ID: { id: OPS.beginImageData, numArgs: 0, variableArgs: false }, + EI: { id: OPS.endInlineImage, numArgs: 1, variableArgs: false }, + + // XObjects + Do: { id: OPS.paintXObject, numArgs: 1, variableArgs: false }, + MP: { id: OPS.markPoint, numArgs: 1, variableArgs: false }, + DP: { id: OPS.markPointProps, numArgs: 2, variableArgs: false }, + BMC: { id: OPS.beginMarkedContent, numArgs: 1, variableArgs: false }, + BDC: { id: OPS.beginMarkedContentProps, numArgs: 2, + variableArgs: false }, + EMC: { id: OPS.endMarkedContent, numArgs: 0, variableArgs: false }, + + // Compatibility + BX: { id: OPS.beginCompat, numArgs: 0, variableArgs: false }, + EX: { id: OPS.endCompat, numArgs: 0, variableArgs: false }, + + // (reserved partial commands for the lexer) + BM: null, + BD: null, + 'true': null, + fa: null, + fal: null, + fals: null, + 'false': null, + nu: null, + nul: null, + 'null': null + }; + + function EvaluatorPreprocessor(stream, xref, stateManager) { + // TODO(mduan): pass array of knownCommands rather than OP_MAP + // dictionary + this.parser = new Parser(new Lexer(stream, OP_MAP), false, xref); + this.stateManager = stateManager; + this.nonProcessedArgs = []; + } + + EvaluatorPreprocessor.prototype = { + get savedStatesDepth() { + return this.stateManager.stateStack.length; + }, + + // |operation| is an object with two fields: + // + // - |fn| is an out param. + // + // - |args| is an inout param. On entry, it should have one of two values. + // + // - An empty array. This indicates that the caller is providing the + // array in which the args will be stored in. The caller should use + // this value if it can reuse a single array for each call to read(). + // + // - |null|. This indicates that the caller needs this function to create + // the array in which any args are stored in. If there are zero args, + // this function will leave |operation.args| as |null| (thus avoiding + // allocations that would occur if we used an empty array to represent + // zero arguments). Otherwise, it will replace |null| with a new array + // containing the arguments. The caller should use this value if it + // cannot reuse an array for each call to read(). + // + // These two modes are present because this function is very hot and so + // avoiding allocations where possible is worthwhile. + // + read: function EvaluatorPreprocessor_read(operation) { + var args = operation.args; + while (true) { + var obj = this.parser.getObj(); + if (isCmd(obj)) { + var cmd = obj.cmd; + // Check that the command is valid + var opSpec = OP_MAP[cmd]; + if (!opSpec) { + warn('Unknown command "' + cmd + '"'); + continue; + } + + var fn = opSpec.id; + var numArgs = opSpec.numArgs; + var argsLength = args !== null ? args.length : 0; + + if (!opSpec.variableArgs) { + // Postscript commands can be nested, e.g. /F2 /GS2 gs 5.711 Tf + if (argsLength !== numArgs) { + var nonProcessedArgs = this.nonProcessedArgs; + while (argsLength > numArgs) { + nonProcessedArgs.push(args.shift()); + argsLength--; + } + while (argsLength < numArgs && nonProcessedArgs.length !== 0) { + if (!args) { + args = []; + } + args.unshift(nonProcessedArgs.pop()); + argsLength++; + } + } + + if (argsLength < numArgs) { + // If we receive too few args, it's not possible to possible + // to execute the command, so skip the command + info('Command ' + fn + ': because expected ' + + numArgs + ' args, but received ' + argsLength + + ' args; skipping'); + args = null; + continue; + } + } else if (argsLength > numArgs) { + info('Command ' + fn + ': expected [0,' + numArgs + + '] args, but received ' + argsLength + ' args'); + } + + // TODO figure out how to type-check vararg functions + this.preprocessCommand(fn, args); + + operation.fn = fn; + operation.args = args; + return true; + } else { + if (isEOF(obj)) { + return false; // no more commands + } + // argument + if (obj !== null) { + if (!args) { + args = []; + } + args.push((obj instanceof Dict ? obj.getAll() : obj)); + assert(args.length <= 33, 'Too many arguments'); + } + } + } + }, + + preprocessCommand: + function EvaluatorPreprocessor_preprocessCommand(fn, args) { + switch (fn | 0) { + case OPS.save: + this.stateManager.save(); + break; + case OPS.restore: + this.stateManager.restore(); + break; + case OPS.transform: + this.stateManager.transform(args); + break; + } + } + }; + return EvaluatorPreprocessor; +})(); + +var QueueOptimizer = (function QueueOptimizerClosure() { + function addState(parentState, pattern, fn) { + var state = parentState; + for (var i = 0, ii = pattern.length - 1; i < ii; i++) { + var item = pattern[i]; + state = (state[item] || (state[item] = [])); + } + state[pattern[pattern.length - 1]] = fn; + } + + function handlePaintSolidColorImageMask(iFirstSave, count, fnArray, + argsArray) { + // Handles special case of mainly LaTeX documents which use image masks to + // draw lines with the current fill style. + // 'count' groups of (save, transform, paintImageMaskXObject, restore)+ + // have been found at iFirstSave. + var iFirstPIMXO = iFirstSave + 2; + for (var i = 0; i < count; i++) { + var arg = argsArray[iFirstPIMXO + 4 * i]; + var imageMask = arg.length === 1 && arg[0]; + if (imageMask && imageMask.width === 1 && imageMask.height === 1 && + (!imageMask.data.length || + (imageMask.data.length === 1 && imageMask.data[0] === 0))) { + fnArray[iFirstPIMXO + 4 * i] = OPS.paintSolidColorImageMask; + continue; + } + break; + } + return count - i; + } + + var InitialState = []; + + // This replaces (save, transform, paintInlineImageXObject, restore)+ + // sequences with one |paintInlineImageXObjectGroup| operation. + addState(InitialState, + [OPS.save, OPS.transform, OPS.paintInlineImageXObject, OPS.restore], + function foundInlineImageGroup(context) { + var MIN_IMAGES_IN_INLINE_IMAGES_BLOCK = 10; + var MAX_IMAGES_IN_INLINE_IMAGES_BLOCK = 200; + var MAX_WIDTH = 1000; + var IMAGE_PADDING = 1; + + var fnArray = context.fnArray, argsArray = context.argsArray; + var curr = context.iCurr; + var iFirstSave = curr - 3; + var iFirstTransform = curr - 2; + var iFirstPIIXO = curr - 1; + + // Look for the quartets. + var i = iFirstSave + 4; + var ii = fnArray.length; + while (i + 3 < ii) { + if (fnArray[i] !== OPS.save || + fnArray[i + 1] !== OPS.transform || + fnArray[i + 2] !== OPS.paintInlineImageXObject || + fnArray[i + 3] !== OPS.restore) { + break; // ops don't match + } + i += 4; + } + + // At this point, i is the index of the first op past the last valid + // quartet. + var count = Math.min((i - iFirstSave) / 4, + MAX_IMAGES_IN_INLINE_IMAGES_BLOCK); + if (count < MIN_IMAGES_IN_INLINE_IMAGES_BLOCK) { + return i; + } + + // assuming that heights of those image is too small (~1 pixel) + // packing as much as possible by lines + var maxX = 0; + var map = [], maxLineHeight = 0; + var currentX = IMAGE_PADDING, currentY = IMAGE_PADDING; + var q; + for (q = 0; q < count; q++) { + var transform = argsArray[iFirstTransform + (q << 2)]; + var img = argsArray[iFirstPIIXO + (q << 2)][0]; + if (currentX + img.width > MAX_WIDTH) { + // starting new line + maxX = Math.max(maxX, currentX); + currentY += maxLineHeight + 2 * IMAGE_PADDING; + currentX = 0; + maxLineHeight = 0; + } + map.push({ + transform: transform, + x: currentX, y: currentY, + w: img.width, h: img.height + }); + currentX += img.width + 2 * IMAGE_PADDING; + maxLineHeight = Math.max(maxLineHeight, img.height); + } + var imgWidth = Math.max(maxX, currentX) + IMAGE_PADDING; + var imgHeight = currentY + maxLineHeight + IMAGE_PADDING; + var imgData = new Uint8Array(imgWidth * imgHeight * 4); + var imgRowSize = imgWidth << 2; + for (q = 0; q < count; q++) { + var data = argsArray[iFirstPIIXO + (q << 2)][0].data; + // Copy image by lines and extends pixels into padding. + var rowSize = map[q].w << 2; + var dataOffset = 0; + var offset = (map[q].x + map[q].y * imgWidth) << 2; + imgData.set(data.subarray(0, rowSize), offset - imgRowSize); + for (var k = 0, kk = map[q].h; k < kk; k++) { + imgData.set(data.subarray(dataOffset, dataOffset + rowSize), offset); + dataOffset += rowSize; + offset += imgRowSize; + } + imgData.set(data.subarray(dataOffset - rowSize, dataOffset), offset); + while (offset >= 0) { + data[offset - 4] = data[offset]; + data[offset - 3] = data[offset + 1]; + data[offset - 2] = data[offset + 2]; + data[offset - 1] = data[offset + 3]; + data[offset + rowSize] = data[offset + rowSize - 4]; + data[offset + rowSize + 1] = data[offset + rowSize - 3]; + data[offset + rowSize + 2] = data[offset + rowSize - 2]; + data[offset + rowSize + 3] = data[offset + rowSize - 1]; + offset -= imgRowSize; + } + } + + // Replace queue items. + fnArray.splice(iFirstSave, count * 4, OPS.paintInlineImageXObjectGroup); + argsArray.splice(iFirstSave, count * 4, + [{ width: imgWidth, height: imgHeight, kind: ImageKind.RGBA_32BPP, + data: imgData }, map]); + + return iFirstSave + 1; + }); + + // This replaces (save, transform, paintImageMaskXObject, restore)+ + // sequences with one |paintImageMaskXObjectGroup| or one + // |paintImageMaskXObjectRepeat| operation. + addState(InitialState, + [OPS.save, OPS.transform, OPS.paintImageMaskXObject, OPS.restore], + function foundImageMaskGroup(context) { + var MIN_IMAGES_IN_MASKS_BLOCK = 10; + var MAX_IMAGES_IN_MASKS_BLOCK = 100; + var MAX_SAME_IMAGES_IN_MASKS_BLOCK = 1000; + + var fnArray = context.fnArray, argsArray = context.argsArray; + var curr = context.iCurr; + var iFirstSave = curr - 3; + var iFirstTransform = curr - 2; + var iFirstPIMXO = curr - 1; + + // Look for the quartets. + var i = iFirstSave + 4; + var ii = fnArray.length; + while (i + 3 < ii) { + if (fnArray[i] !== OPS.save || + fnArray[i + 1] !== OPS.transform || + fnArray[i + 2] !== OPS.paintImageMaskXObject || + fnArray[i + 3] !== OPS.restore) { + break; // ops don't match + } + i += 4; + } + + // At this point, i is the index of the first op past the last valid + // quartet. + var count = (i - iFirstSave) / 4; + count = handlePaintSolidColorImageMask(iFirstSave, count, fnArray, + argsArray); + if (count < MIN_IMAGES_IN_MASKS_BLOCK) { + return i; + } + + var q; + var isSameImage = false; + var iTransform, transformArgs; + var firstPIMXOArg0 = argsArray[iFirstPIMXO][0]; + if (argsArray[iFirstTransform][1] === 0 && + argsArray[iFirstTransform][2] === 0) { + isSameImage = true; + var firstTransformArg0 = argsArray[iFirstTransform][0]; + var firstTransformArg3 = argsArray[iFirstTransform][3]; + iTransform = iFirstTransform + 4; + var iPIMXO = iFirstPIMXO + 4; + for (q = 1; q < count; q++, iTransform += 4, iPIMXO += 4) { + transformArgs = argsArray[iTransform]; + if (argsArray[iPIMXO][0] !== firstPIMXOArg0 || + transformArgs[0] !== firstTransformArg0 || + transformArgs[1] !== 0 || + transformArgs[2] !== 0 || + transformArgs[3] !== firstTransformArg3) { + if (q < MIN_IMAGES_IN_MASKS_BLOCK) { + isSameImage = false; + } else { + count = q; + } + break; // different image or transform + } + } + } + + if (isSameImage) { + count = Math.min(count, MAX_SAME_IMAGES_IN_MASKS_BLOCK); + var positions = new Float32Array(count * 2); + iTransform = iFirstTransform; + for (q = 0; q < count; q++, iTransform += 4) { + transformArgs = argsArray[iTransform]; + positions[(q << 1)] = transformArgs[4]; + positions[(q << 1) + 1] = transformArgs[5]; + } + + // Replace queue items. + fnArray.splice(iFirstSave, count * 4, OPS.paintImageMaskXObjectRepeat); + argsArray.splice(iFirstSave, count * 4, + [firstPIMXOArg0, firstTransformArg0, firstTransformArg3, positions]); + } else { + count = Math.min(count, MAX_IMAGES_IN_MASKS_BLOCK); + var images = []; + for (q = 0; q < count; q++) { + transformArgs = argsArray[iFirstTransform + (q << 2)]; + var maskParams = argsArray[iFirstPIMXO + (q << 2)][0]; + images.push({ data: maskParams.data, width: maskParams.width, + height: maskParams.height, + transform: transformArgs }); + } + + // Replace queue items. + fnArray.splice(iFirstSave, count * 4, OPS.paintImageMaskXObjectGroup); + argsArray.splice(iFirstSave, count * 4, [images]); + } + + return iFirstSave + 1; + }); + + // This replaces (save, transform, paintImageXObject, restore)+ sequences + // with one paintImageXObjectRepeat operation, if the |transform| and + // |paintImageXObjectRepeat| ops are appropriate. + addState(InitialState, + [OPS.save, OPS.transform, OPS.paintImageXObject, OPS.restore], + function (context) { + var MIN_IMAGES_IN_BLOCK = 3; + var MAX_IMAGES_IN_BLOCK = 1000; + + var fnArray = context.fnArray, argsArray = context.argsArray; + var curr = context.iCurr; + var iFirstSave = curr - 3; + var iFirstTransform = curr - 2; + var iFirstPIXO = curr - 1; + var iFirstRestore = curr; + + if (argsArray[iFirstTransform][1] !== 0 || + argsArray[iFirstTransform][2] !== 0) { + return iFirstRestore + 1; // transform has the wrong form + } + + // Look for the quartets. + var firstPIXOArg0 = argsArray[iFirstPIXO][0]; + var firstTransformArg0 = argsArray[iFirstTransform][0]; + var firstTransformArg3 = argsArray[iFirstTransform][3]; + var i = iFirstSave + 4; + var ii = fnArray.length; + while (i + 3 < ii) { + if (fnArray[i] !== OPS.save || + fnArray[i + 1] !== OPS.transform || + fnArray[i + 2] !== OPS.paintImageXObject || + fnArray[i + 3] !== OPS.restore) { + break; // ops don't match + } + if (argsArray[i + 1][0] !== firstTransformArg0 || + argsArray[i + 1][1] !== 0 || + argsArray[i + 1][2] !== 0 || + argsArray[i + 1][3] !== firstTransformArg3) { + break; // transforms don't match + } + if (argsArray[i + 2][0] !== firstPIXOArg0) { + break; // images don't match + } + i += 4; + } + + // At this point, i is the index of the first op past the last valid + // quartet. + var count = Math.min((i - iFirstSave) / 4, MAX_IMAGES_IN_BLOCK); + if (count < MIN_IMAGES_IN_BLOCK) { + return i; + } + + // Extract the (x,y) positions from all of the matching transforms. + var positions = new Float32Array(count * 2); + var iTransform = iFirstTransform; + for (var q = 0; q < count; q++, iTransform += 4) { + var transformArgs = argsArray[iTransform]; + positions[(q << 1)] = transformArgs[4]; + positions[(q << 1) + 1] = transformArgs[5]; + } + + // Replace queue items. + var args = [firstPIXOArg0, firstTransformArg0, firstTransformArg3, + positions]; + fnArray.splice(iFirstSave, count * 4, OPS.paintImageXObjectRepeat); + argsArray.splice(iFirstSave, count * 4, args); + + return iFirstSave + 1; + }); + + // This replaces (beginText, setFont, setTextMatrix, showText, endText)+ + // sequences with (beginText, setFont, (setTextMatrix, showText)+, endText)+ + // sequences, if the font for each one is the same. + addState(InitialState, + [OPS.beginText, OPS.setFont, OPS.setTextMatrix, OPS.showText, OPS.endText], + function (context) { + var MIN_CHARS_IN_BLOCK = 3; + var MAX_CHARS_IN_BLOCK = 1000; + + var fnArray = context.fnArray, argsArray = context.argsArray; + var curr = context.iCurr; + var iFirstBeginText = curr - 4; + var iFirstSetFont = curr - 3; + var iFirstSetTextMatrix = curr - 2; + var iFirstShowText = curr - 1; + var iFirstEndText = curr; + + // Look for the quintets. + var firstSetFontArg0 = argsArray[iFirstSetFont][0]; + var firstSetFontArg1 = argsArray[iFirstSetFont][1]; + var i = iFirstBeginText + 5; + var ii = fnArray.length; + while (i + 4 < ii) { + if (fnArray[i] !== OPS.beginText || + fnArray[i + 1] !== OPS.setFont || + fnArray[i + 2] !== OPS.setTextMatrix || + fnArray[i + 3] !== OPS.showText || + fnArray[i + 4] !== OPS.endText) { + break; // ops don't match + } + if (argsArray[i + 1][0] !== firstSetFontArg0 || + argsArray[i + 1][1] !== firstSetFontArg1) { + break; // fonts don't match + } + i += 5; + } + + // At this point, i is the index of the first op past the last valid + // quintet. + var count = Math.min(((i - iFirstBeginText) / 5), MAX_CHARS_IN_BLOCK); + if (count < MIN_CHARS_IN_BLOCK) { + return i; + } + + // If the preceding quintet is (<something>, setFont, setTextMatrix, + // showText, endText), include that as well. (E.g. <something> might be + // |dependency|.) + var iFirst = iFirstBeginText; + if (iFirstBeginText >= 4 && + fnArray[iFirstBeginText - 4] === fnArray[iFirstSetFont] && + fnArray[iFirstBeginText - 3] === fnArray[iFirstSetTextMatrix] && + fnArray[iFirstBeginText - 2] === fnArray[iFirstShowText] && + fnArray[iFirstBeginText - 1] === fnArray[iFirstEndText] && + argsArray[iFirstBeginText - 4][0] === firstSetFontArg0 && + argsArray[iFirstBeginText - 4][1] === firstSetFontArg1) { + count++; + iFirst -= 5; + } + + // Remove (endText, beginText, setFont) trios. + var iEndText = iFirst + 4; + for (var q = 1; q < count; q++) { + fnArray.splice(iEndText, 3); + argsArray.splice(iEndText, 3); + iEndText += 2; + } + + return iEndText + 1; + }); + + function QueueOptimizer() {} + + QueueOptimizer.prototype = { + optimize: function QueueOptimizer_optimize(queue) { + var fnArray = queue.fnArray, argsArray = queue.argsArray; + var context = { + iCurr: 0, + fnArray: fnArray, + argsArray: argsArray + }; + var state; + var i = 0, ii = fnArray.length; + while (i < ii) { + state = (state || InitialState)[fnArray[i]]; + if (typeof state === 'function') { // we found some handler + context.iCurr = i; + // state() returns the index of the first non-matching op (if we + // didn't match) or the first op past the modified ops (if we did + // match and replace). + i = state(context); + state = undefined; // reset the state machine + ii = context.fnArray.length; + } else { + i++; + } + } + } + }; + return QueueOptimizer; +})(); + + +var BUILT_IN_CMAPS = [ +// << Start unicode maps. +'Adobe-GB1-UCS2', +'Adobe-CNS1-UCS2', +'Adobe-Japan1-UCS2', +'Adobe-Korea1-UCS2', +// >> End unicode maps. +'78-EUC-H', +'78-EUC-V', +'78-H', +'78-RKSJ-H', +'78-RKSJ-V', +'78-V', +'78ms-RKSJ-H', +'78ms-RKSJ-V', +'83pv-RKSJ-H', +'90ms-RKSJ-H', +'90ms-RKSJ-V', +'90msp-RKSJ-H', +'90msp-RKSJ-V', +'90pv-RKSJ-H', +'90pv-RKSJ-V', +'Add-H', +'Add-RKSJ-H', +'Add-RKSJ-V', +'Add-V', +'Adobe-CNS1-0', +'Adobe-CNS1-1', +'Adobe-CNS1-2', +'Adobe-CNS1-3', +'Adobe-CNS1-4', +'Adobe-CNS1-5', +'Adobe-CNS1-6', +'Adobe-GB1-0', +'Adobe-GB1-1', +'Adobe-GB1-2', +'Adobe-GB1-3', +'Adobe-GB1-4', +'Adobe-GB1-5', +'Adobe-Japan1-0', +'Adobe-Japan1-1', +'Adobe-Japan1-2', +'Adobe-Japan1-3', +'Adobe-Japan1-4', +'Adobe-Japan1-5', +'Adobe-Japan1-6', +'Adobe-Korea1-0', +'Adobe-Korea1-1', +'Adobe-Korea1-2', +'B5-H', +'B5-V', +'B5pc-H', +'B5pc-V', +'CNS-EUC-H', +'CNS-EUC-V', +'CNS1-H', +'CNS1-V', +'CNS2-H', +'CNS2-V', +'ETHK-B5-H', +'ETHK-B5-V', +'ETen-B5-H', +'ETen-B5-V', +'ETenms-B5-H', +'ETenms-B5-V', +'EUC-H', +'EUC-V', +'Ext-H', +'Ext-RKSJ-H', +'Ext-RKSJ-V', +'Ext-V', +'GB-EUC-H', +'GB-EUC-V', +'GB-H', +'GB-V', +'GBK-EUC-H', +'GBK-EUC-V', +'GBK2K-H', +'GBK2K-V', +'GBKp-EUC-H', +'GBKp-EUC-V', +'GBT-EUC-H', +'GBT-EUC-V', +'GBT-H', +'GBT-V', +'GBTpc-EUC-H', +'GBTpc-EUC-V', +'GBpc-EUC-H', +'GBpc-EUC-V', +'H', +'HKdla-B5-H', +'HKdla-B5-V', +'HKdlb-B5-H', +'HKdlb-B5-V', +'HKgccs-B5-H', +'HKgccs-B5-V', +'HKm314-B5-H', +'HKm314-B5-V', +'HKm471-B5-H', +'HKm471-B5-V', +'HKscs-B5-H', +'HKscs-B5-V', +'Hankaku', +'Hiragana', +'KSC-EUC-H', +'KSC-EUC-V', +'KSC-H', +'KSC-Johab-H', +'KSC-Johab-V', +'KSC-V', +'KSCms-UHC-H', +'KSCms-UHC-HW-H', +'KSCms-UHC-HW-V', +'KSCms-UHC-V', +'KSCpc-EUC-H', +'KSCpc-EUC-V', +'Katakana', +'NWP-H', +'NWP-V', +'RKSJ-H', +'RKSJ-V', +'Roman', +'UniCNS-UCS2-H', +'UniCNS-UCS2-V', +'UniCNS-UTF16-H', +'UniCNS-UTF16-V', +'UniCNS-UTF32-H', +'UniCNS-UTF32-V', +'UniCNS-UTF8-H', +'UniCNS-UTF8-V', +'UniGB-UCS2-H', +'UniGB-UCS2-V', +'UniGB-UTF16-H', +'UniGB-UTF16-V', +'UniGB-UTF32-H', +'UniGB-UTF32-V', +'UniGB-UTF8-H', +'UniGB-UTF8-V', +'UniJIS-UCS2-H', +'UniJIS-UCS2-HW-H', +'UniJIS-UCS2-HW-V', +'UniJIS-UCS2-V', +'UniJIS-UTF16-H', +'UniJIS-UTF16-V', +'UniJIS-UTF32-H', +'UniJIS-UTF32-V', +'UniJIS-UTF8-H', +'UniJIS-UTF8-V', +'UniJIS2004-UTF16-H', +'UniJIS2004-UTF16-V', +'UniJIS2004-UTF32-H', +'UniJIS2004-UTF32-V', +'UniJIS2004-UTF8-H', +'UniJIS2004-UTF8-V', +'UniJISPro-UCS2-HW-V', +'UniJISPro-UCS2-V', +'UniJISPro-UTF8-V', +'UniJISX0213-UTF32-H', +'UniJISX0213-UTF32-V', +'UniJISX02132004-UTF32-H', +'UniJISX02132004-UTF32-V', +'UniKS-UCS2-H', +'UniKS-UCS2-V', +'UniKS-UTF16-H', +'UniKS-UTF16-V', +'UniKS-UTF32-H', +'UniKS-UTF32-V', +'UniKS-UTF8-H', +'UniKS-UTF8-V', +'V', +'WP-Symbol']; + +// CMap, not to be confused with TrueType's cmap. +var CMap = (function CMapClosure() { + function CMap(builtInCMap) { + // Codespace ranges are stored as follows: + // [[1BytePairs], [2BytePairs], [3BytePairs], [4BytePairs]] + // where nBytePairs are ranges e.g. [low1, high1, low2, high2, ...] + this.codespaceRanges = [[], [], [], []]; + this.numCodespaceRanges = 0; + // Map entries have one of two forms. + // - cid chars are 16-bit unsigned integers, stored as integers. + // - bf chars are variable-length byte sequences, stored as strings, with + // one byte per character. + this._map = []; + this.name = ''; + this.vertical = false; + this.useCMap = null; + this.builtInCMap = builtInCMap; + } + CMap.prototype = { + addCodespaceRange: function(n, low, high) { + this.codespaceRanges[n - 1].push(low, high); + this.numCodespaceRanges++; + }, + + mapCidRange: function(low, high, dstLow) { + while (low <= high) { + this._map[low++] = dstLow++; + } + }, + + mapBfRange: function(low, high, dstLow) { + var lastByte = dstLow.length - 1; + while (low <= high) { + this._map[low++] = dstLow; + // Only the last byte has to be incremented. + dstLow = dstLow.substr(0, lastByte) + + String.fromCharCode(dstLow.charCodeAt(lastByte) + 1); + } + }, + + mapBfRangeToArray: function(low, high, array) { + var i = 0, ii = array.length; + while (low <= high && i < ii) { + this._map[low] = array[i++]; + ++low; + } + }, + + // This is used for both bf and cid chars. + mapOne: function(src, dst) { + this._map[src] = dst; + }, + + lookup: function(code) { + return this._map[code]; + }, + + contains: function(code) { + return this._map[code] !== undefined; + }, + + forEach: function(callback) { + // Most maps have fewer than 65536 entries, and for those we use normal + // array iteration. But really sparse tables are possible -- e.g. with + // indices in the *billions*. For such tables we use for..in, which isn't + // ideal because it stringifies the indices for all present elements, but + // it does avoid iterating over every undefined entry. + var map = this._map; + var length = map.length; + var i; + if (length <= 0x10000) { + for (i = 0; i < length; i++) { + if (map[i] !== undefined) { + callback(i, map[i]); + } + } + } else { + for (i in this._map) { + callback(i, map[i]); + } + } + }, + + charCodeOf: function(value) { + return this._map.indexOf(value); + }, + + getMap: function() { + return this._map; + }, + + readCharCode: function(str, offset, out) { + var c = 0; + var codespaceRanges = this.codespaceRanges; + var codespaceRangesLen = this.codespaceRanges.length; + // 9.7.6.2 CMap Mapping + // The code length is at most 4. + for (var n = 0; n < codespaceRangesLen; n++) { + c = ((c << 8) | str.charCodeAt(offset + n)) >>> 0; + // Check each codespace range to see if it falls within. + var codespaceRange = codespaceRanges[n]; + for (var k = 0, kk = codespaceRange.length; k < kk;) { + var low = codespaceRange[k++]; + var high = codespaceRange[k++]; + if (c >= low && c <= high) { + out.charcode = c; + out.length = n + 1; + return; + } + } + } + out.charcode = 0; + out.length = 1; + }, + + get isIdentityCMap() { + if (!(this.name === 'Identity-H' || this.name === 'Identity-V')) { + return false; + } + if (this._map.length !== 0x10000) { + return false; + } + for (var i = 0; i < 0x10000; i++) { + if (this._map[i] !== i) { + return false; + } + } + return true; + } + }; + return CMap; +})(); + +// A special case of CMap, where the _map array implicitly has a length of +// 65536 and each element is equal to its index. +var IdentityCMap = (function IdentityCMapClosure() { + function IdentityCMap(vertical, n) { + CMap.call(this); + this.vertical = vertical; + this.addCodespaceRange(n, 0, 0xffff); + } + Util.inherit(IdentityCMap, CMap, {}); + + IdentityCMap.prototype = { + addCodespaceRange: CMap.prototype.addCodespaceRange, + + mapCidRange: function(low, high, dstLow) { + error('should not call mapCidRange'); + }, + + mapBfRange: function(low, high, dstLow) { + error('should not call mapBfRange'); + }, + + mapBfRangeToArray: function(low, high, array) { + error('should not call mapBfRangeToArray'); + }, + + mapOne: function(src, dst) { + error('should not call mapCidOne'); + }, + + lookup: function(code) { + return (isInt(code) && code <= 0xffff) ? code : undefined; + }, + + contains: function(code) { + return isInt(code) && code <= 0xffff; + }, + + forEach: function(callback) { + for (var i = 0; i <= 0xffff; i++) { + callback(i, i); + } + }, + + charCodeOf: function(value) { + return (isInt(value) && value <= 0xffff) ? value : -1; + }, + + getMap: function() { + // Sometimes identity maps must be instantiated, but it's rare. + var map = new Array(0x10000); + for (var i = 0; i <= 0xffff; i++) { + map[i] = i; + } + return map; + }, + + readCharCode: CMap.prototype.readCharCode, + + get isIdentityCMap() { + error('should not access .isIdentityCMap'); + } + }; + + return IdentityCMap; +})(); + +var BinaryCMapReader = (function BinaryCMapReaderClosure() { + function fetchBinaryData(url) { + var nonBinaryRequest = PDFJS.disableWorker; + var request = new XMLHttpRequest(); + request.open('GET', url, false); + if (!nonBinaryRequest) { + try { + request.responseType = 'arraybuffer'; + nonBinaryRequest = request.responseType !== 'arraybuffer'; + } catch (e) { + nonBinaryRequest = true; + } + } + if (nonBinaryRequest && request.overrideMimeType) { + request.overrideMimeType('text/plain; charset=x-user-defined'); + } + request.send(null); + if (nonBinaryRequest ? !request.responseText : !request.response) { + error('Unable to get binary cMap at: ' + url); + } + if (nonBinaryRequest) { + var data = Array.prototype.map.call(request.responseText, function (ch) { + return ch.charCodeAt(0) & 255; + }); + return new Uint8Array(data); + } + return new Uint8Array(request.response); + } + + function hexToInt(a, size) { + var n = 0; + for (var i = 0; i <= size; i++) { + n = (n << 8) | a[i]; + } + return n >>> 0; + } + + function hexToStr(a, size) { + // This code is hot. Special-case some common values to avoid creating an + // object with subarray(). + if (size === 1) { + return String.fromCharCode(a[0], a[1]); + } + if (size === 3) { + return String.fromCharCode(a[0], a[1], a[2], a[3]); + } + return String.fromCharCode.apply(null, a.subarray(0, size + 1)); + } + + function addHex(a, b, size) { + var c = 0; + for (var i = size; i >= 0; i--) { + c += a[i] + b[i]; + a[i] = c & 255; + c >>= 8; + } + } + + function incHex(a, size) { + var c = 1; + for (var i = size; i >= 0 && c > 0; i--) { + c += a[i]; + a[i] = c & 255; + c >>= 8; + } + } + + var MAX_NUM_SIZE = 16; + var MAX_ENCODED_NUM_SIZE = 19; // ceil(MAX_NUM_SIZE * 7 / 8) + + function BinaryCMapStream(data) { + this.buffer = data; + this.pos = 0; + this.end = data.length; + this.tmpBuf = new Uint8Array(MAX_ENCODED_NUM_SIZE); + } + + BinaryCMapStream.prototype = { + readByte: function () { + if (this.pos >= this.end) { + return -1; + } + return this.buffer[this.pos++]; + }, + readNumber: function () { + var n = 0; + var last; + do { + var b = this.readByte(); + if (b < 0) { + error('unexpected EOF in bcmap'); + } + last = !(b & 0x80); + n = (n << 7) | (b & 0x7F); + } while (!last); + return n; + }, + readSigned: function () { + var n = this.readNumber(); + return (n & 1) ? ~(n >>> 1) : n >>> 1; + }, + readHex: function (num, size) { + num.set(this.buffer.subarray(this.pos, + this.pos + size + 1)); + this.pos += size + 1; + }, + readHexNumber: function (num, size) { + var last; + var stack = this.tmpBuf, sp = 0; + do { + var b = this.readByte(); + if (b < 0) { + error('unexpected EOF in bcmap'); + } + last = !(b & 0x80); + stack[sp++] = b & 0x7F; + } while (!last); + var i = size, buffer = 0, bufferSize = 0; + while (i >= 0) { + while (bufferSize < 8 && stack.length > 0) { + buffer = (stack[--sp] << bufferSize) | buffer; + bufferSize += 7; + } + num[i] = buffer & 255; + i--; + buffer >>= 8; + bufferSize -= 8; + } + }, + readHexSigned: function (num, size) { + this.readHexNumber(num, size); + var sign = num[size] & 1 ? 255 : 0; + var c = 0; + for (var i = 0; i <= size; i++) { + c = ((c & 1) << 8) | num[i]; + num[i] = (c >> 1) ^ sign; + } + }, + readString: function () { + var len = this.readNumber(); + var s = ''; + for (var i = 0; i < len; i++) { + s += String.fromCharCode(this.readNumber()); + } + return s; + } + }; + + function processBinaryCMap(url, cMap, extend) { + var data = fetchBinaryData(url); + var stream = new BinaryCMapStream(data); + + var header = stream.readByte(); + cMap.vertical = !!(header & 1); + + var useCMap = null; + var start = new Uint8Array(MAX_NUM_SIZE); + var end = new Uint8Array(MAX_NUM_SIZE); + var char = new Uint8Array(MAX_NUM_SIZE); + var charCode = new Uint8Array(MAX_NUM_SIZE); + var tmp = new Uint8Array(MAX_NUM_SIZE); + var code; + + var b; + while ((b = stream.readByte()) >= 0) { + var type = b >> 5; + if (type === 7) { // metadata, e.g. comment or usecmap + switch (b & 0x1F) { + case 0: + stream.readString(); // skipping comment + break; + case 1: + useCMap = stream.readString(); + break; + } + continue; + } + var sequence = !!(b & 0x10); + var dataSize = b & 15; + + assert(dataSize + 1 <= MAX_NUM_SIZE); + + var ucs2DataSize = 1; + var subitemsCount = stream.readNumber(); + var i; + switch (type) { + case 0: // codespacerange + stream.readHex(start, dataSize); + stream.readHexNumber(end, dataSize); + addHex(end, start, dataSize); + cMap.addCodespaceRange(dataSize + 1, hexToInt(start, dataSize), + hexToInt(end, dataSize)); + for (i = 1; i < subitemsCount; i++) { + incHex(end, dataSize); + stream.readHexNumber(start, dataSize); + addHex(start, end, dataSize); + stream.readHexNumber(end, dataSize); + addHex(end, start, dataSize); + cMap.addCodespaceRange(dataSize + 1, hexToInt(start, dataSize), + hexToInt(end, dataSize)); + } + break; + case 1: // notdefrange + stream.readHex(start, dataSize); + stream.readHexNumber(end, dataSize); + addHex(end, start, dataSize); + code = stream.readNumber(); + // undefined range, skipping + for (i = 1; i < subitemsCount; i++) { + incHex(end, dataSize); + stream.readHexNumber(start, dataSize); + addHex(start, end, dataSize); + stream.readHexNumber(end, dataSize); + addHex(end, start, dataSize); + code = stream.readNumber(); + // nop + } + break; + case 2: // cidchar + stream.readHex(char, dataSize); + code = stream.readNumber(); + cMap.mapOne(hexToInt(char, dataSize), code); + for (i = 1; i < subitemsCount; i++) { + incHex(char, dataSize); + if (!sequence) { + stream.readHexNumber(tmp, dataSize); + addHex(char, tmp, dataSize); + } + code = stream.readSigned() + (code + 1); + cMap.mapOne(hexToInt(char, dataSize), code); + } + break; + case 3: // cidrange + stream.readHex(start, dataSize); + stream.readHexNumber(end, dataSize); + addHex(end, start, dataSize); + code = stream.readNumber(); + cMap.mapCidRange(hexToInt(start, dataSize), hexToInt(end, dataSize), + code); + for (i = 1; i < subitemsCount; i++) { + incHex(end, dataSize); + if (!sequence) { + stream.readHexNumber(start, dataSize); + addHex(start, end, dataSize); + } else { + start.set(end); + } + stream.readHexNumber(end, dataSize); + addHex(end, start, dataSize); + code = stream.readNumber(); + cMap.mapCidRange(hexToInt(start, dataSize), hexToInt(end, dataSize), + code); + } + break; + case 4: // bfchar + stream.readHex(char, ucs2DataSize); + stream.readHex(charCode, dataSize); + cMap.mapOne(hexToInt(char, ucs2DataSize), + hexToStr(charCode, dataSize)); + for (i = 1; i < subitemsCount; i++) { + incHex(char, ucs2DataSize); + if (!sequence) { + stream.readHexNumber(tmp, ucs2DataSize); + addHex(char, tmp, ucs2DataSize); + } + incHex(charCode, dataSize); + stream.readHexSigned(tmp, dataSize); + addHex(charCode, tmp, dataSize); + cMap.mapOne(hexToInt(char, ucs2DataSize), + hexToStr(charCode, dataSize)); + } + break; + case 5: // bfrange + stream.readHex(start, ucs2DataSize); + stream.readHexNumber(end, ucs2DataSize); + addHex(end, start, ucs2DataSize); + stream.readHex(charCode, dataSize); + cMap.mapBfRange(hexToInt(start, ucs2DataSize), + hexToInt(end, ucs2DataSize), + hexToStr(charCode, dataSize)); + for (i = 1; i < subitemsCount; i++) { + incHex(end, ucs2DataSize); + if (!sequence) { + stream.readHexNumber(start, ucs2DataSize); + addHex(start, end, ucs2DataSize); + } else { + start.set(end); + } + stream.readHexNumber(end, ucs2DataSize); + addHex(end, start, ucs2DataSize); + stream.readHex(charCode, dataSize); + cMap.mapBfRange(hexToInt(start, ucs2DataSize), + hexToInt(end, ucs2DataSize), + hexToStr(charCode, dataSize)); + } + break; + default: + error('Unknown type: ' + type); + break; + } + } + + if (useCMap) { + extend(useCMap); + } + return cMap; + } + + function BinaryCMapReader() {} + + BinaryCMapReader.prototype = { + read: processBinaryCMap + }; + + return BinaryCMapReader; +})(); + +var CMapFactory = (function CMapFactoryClosure() { + function strToInt(str) { + var a = 0; + for (var i = 0; i < str.length; i++) { + a = (a << 8) | str.charCodeAt(i); + } + return a >>> 0; + } + + function expectString(obj) { + if (!isString(obj)) { + error('Malformed CMap: expected string.'); + } + } + + function expectInt(obj) { + if (!isInt(obj)) { + error('Malformed CMap: expected int.'); + } + } + + function parseBfChar(cMap, lexer) { + while (true) { + var obj = lexer.getObj(); + if (isEOF(obj)) { + break; + } + if (isCmd(obj, 'endbfchar')) { + return; + } + expectString(obj); + var src = strToInt(obj); + obj = lexer.getObj(); + // TODO are /dstName used? + expectString(obj); + var dst = obj; + cMap.mapOne(src, dst); + } + } + + function parseBfRange(cMap, lexer) { + while (true) { + var obj = lexer.getObj(); + if (isEOF(obj)) { + break; + } + if (isCmd(obj, 'endbfrange')) { + return; + } + expectString(obj); + var low = strToInt(obj); + obj = lexer.getObj(); + expectString(obj); + var high = strToInt(obj); + obj = lexer.getObj(); + if (isInt(obj) || isString(obj)) { + var dstLow = isInt(obj) ? String.fromCharCode(obj) : obj; + cMap.mapBfRange(low, high, dstLow); + } else if (isCmd(obj, '[')) { + obj = lexer.getObj(); + var array = []; + while (!isCmd(obj, ']') && !isEOF(obj)) { + array.push(obj); + obj = lexer.getObj(); + } + cMap.mapBfRangeToArray(low, high, array); + } else { + break; + } + } + error('Invalid bf range.'); + } + + function parseCidChar(cMap, lexer) { + while (true) { + var obj = lexer.getObj(); + if (isEOF(obj)) { + break; + } + if (isCmd(obj, 'endcidchar')) { + return; + } + expectString(obj); + var src = strToInt(obj); + obj = lexer.getObj(); + expectInt(obj); + var dst = obj; + cMap.mapOne(src, dst); + } + } + + function parseCidRange(cMap, lexer) { + while (true) { + var obj = lexer.getObj(); + if (isEOF(obj)) { + break; + } + if (isCmd(obj, 'endcidrange')) { + return; + } + expectString(obj); + var low = strToInt(obj); + obj = lexer.getObj(); + expectString(obj); + var high = strToInt(obj); + obj = lexer.getObj(); + expectInt(obj); + var dstLow = obj; + cMap.mapCidRange(low, high, dstLow); + } + } + + function parseCodespaceRange(cMap, lexer) { + while (true) { + var obj = lexer.getObj(); + if (isEOF(obj)) { + break; + } + if (isCmd(obj, 'endcodespacerange')) { + return; + } + if (!isString(obj)) { + break; + } + var low = strToInt(obj); + obj = lexer.getObj(); + if (!isString(obj)) { + break; + } + var high = strToInt(obj); + cMap.addCodespaceRange(obj.length, low, high); + } + error('Invalid codespace range.'); + } + + function parseWMode(cMap, lexer) { + var obj = lexer.getObj(); + if (isInt(obj)) { + cMap.vertical = !!obj; + } + } + + function parseCMapName(cMap, lexer) { + var obj = lexer.getObj(); + if (isName(obj) && isString(obj.name)) { + cMap.name = obj.name; + } + } + + function parseCMap(cMap, lexer, builtInCMapParams, useCMap) { + var previous; + var embededUseCMap; + objLoop: while (true) { + var obj = lexer.getObj(); + if (isEOF(obj)) { + break; + } else if (isName(obj)) { + if (obj.name === 'WMode') { + parseWMode(cMap, lexer); + } else if (obj.name === 'CMapName') { + parseCMapName(cMap, lexer); + } + previous = obj; + } else if (isCmd(obj)) { + switch (obj.cmd) { + case 'endcmap': + break objLoop; + case 'usecmap': + if (isName(previous)) { + embededUseCMap = previous.name; + } + break; + case 'begincodespacerange': + parseCodespaceRange(cMap, lexer); + break; + case 'beginbfchar': + parseBfChar(cMap, lexer); + break; + case 'begincidchar': + parseCidChar(cMap, lexer); + break; + case 'beginbfrange': + parseBfRange(cMap, lexer); + break; + case 'begincidrange': + parseCidRange(cMap, lexer); + break; + } + } + } + + if (!useCMap && embededUseCMap) { + // Load the usecmap definition from the file only if there wasn't one + // specified. + useCMap = embededUseCMap; + } + if (useCMap) { + extendCMap(cMap, builtInCMapParams, useCMap); + } + } + + function extendCMap(cMap, builtInCMapParams, useCMap) { + cMap.useCMap = createBuiltInCMap(useCMap, builtInCMapParams); + // If there aren't any code space ranges defined clone all the parent ones + // into this cMap. + if (cMap.numCodespaceRanges === 0) { + var useCodespaceRanges = cMap.useCMap.codespaceRanges; + for (var i = 0; i < useCodespaceRanges.length; i++) { + cMap.codespaceRanges[i] = useCodespaceRanges[i].slice(); + } + cMap.numCodespaceRanges = cMap.useCMap.numCodespaceRanges; + } + // Merge the map into the current one, making sure not to override + // any previously defined entries. + cMap.useCMap.forEach(function(key, value) { + if (!cMap.contains(key)) { + cMap.mapOne(key, cMap.useCMap.lookup(key)); + } + }); + } + + function parseBinaryCMap(name, builtInCMapParams) { + var url = builtInCMapParams.url + name + '.bcmap'; + var cMap = new CMap(true); + new BinaryCMapReader().read(url, cMap, function (useCMap) { + extendCMap(cMap, builtInCMapParams, useCMap); + }); + return cMap; + } + + function createBuiltInCMap(name, builtInCMapParams) { + if (name === 'Identity-H') { + return new IdentityCMap(false, 2); + } else if (name === 'Identity-V') { + return new IdentityCMap(true, 2); + } + if (BUILT_IN_CMAPS.indexOf(name) === -1) { + error('Unknown cMap name: ' + name); + } + assert(builtInCMapParams, 'built-in cMap parameters are not provided'); + + if (builtInCMapParams.packed) { + return parseBinaryCMap(name, builtInCMapParams); + } + + var request = new XMLHttpRequest(); + var url = builtInCMapParams.url + name; + request.open('GET', url, false); + request.send(null); + if (!request.responseText) { + error('Unable to get cMap at: ' + url); + } + var cMap = new CMap(true); + var lexer = new Lexer(new StringStream(request.responseText)); + parseCMap(cMap, lexer, builtInCMapParams, null); + return cMap; + } + + return { + create: function (encoding, builtInCMapParams, useCMap) { + if (isName(encoding)) { + return createBuiltInCMap(encoding.name, builtInCMapParams); + } else if (isStream(encoding)) { + var cMap = new CMap(); + var lexer = new Lexer(encoding); + try { + parseCMap(cMap, lexer, builtInCMapParams, useCMap); + } catch (e) { + warn('Invalid CMap data. ' + e); + } + if (cMap.isIdentityCMap) { + return createBuiltInCMap(cMap.name, builtInCMapParams); + } + return cMap; + } + error('Encoding required.'); + } + }; +})(); + + +// Unicode Private Use Area +var PRIVATE_USE_OFFSET_START = 0xE000; +var PRIVATE_USE_OFFSET_END = 0xF8FF; +var SKIP_PRIVATE_USE_RANGE_F000_TO_F01F = false; + +// PDF Glyph Space Units are one Thousandth of a TextSpace Unit +// except for Type 3 fonts +var PDF_GLYPH_SPACE_UNITS = 1000; + +// Hinting is currently disabled due to unknown problems on windows +// in tracemonkey and various other pdfs with type1 fonts. +var HINTING_ENABLED = false; + +// Accented charactars are not displayed properly on windows, using this flag +// to control analysis of seac charstrings. +var SEAC_ANALYSIS_ENABLED = false; + +var FontFlags = { + FixedPitch: 1, + Serif: 2, + Symbolic: 4, + Script: 8, + Nonsymbolic: 32, + Italic: 64, + AllCap: 65536, + SmallCap: 131072, + ForceBold: 262144 +}; + +var Encodings = { + ExpertEncoding: ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', + 'space', 'exclamsmall', 'Hungarumlautsmall', '', 'dollaroldstyle', + 'dollarsuperior', 'ampersandsmall', 'Acutesmall', 'parenleftsuperior', + 'parenrightsuperior', 'twodotenleader', 'onedotenleader', 'comma', + 'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle', + 'twooldstyle', 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle', + 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', 'colon', + 'semicolon', 'commasuperior', 'threequartersemdash', 'periodsuperior', + 'questionsmall', '', 'asuperior', 'bsuperior', 'centsuperior', 'dsuperior', + 'esuperior', '', '', 'isuperior', '', '', 'lsuperior', 'msuperior', + 'nsuperior', 'osuperior', '', '', 'rsuperior', 'ssuperior', 'tsuperior', + '', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior', '', + 'parenrightinferior', 'Circumflexsmall', 'hyphensuperior', 'Gravesmall', + 'Asmall', 'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall', + 'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall', 'Msmall', 'Nsmall', + 'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall', + 'Vsmall', 'Wsmall', 'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary', + 'onefitted', 'rupiah', 'Tildesmall', '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', 'exclamdownsmall', 'centoldstyle', 'Lslashsmall', + '', '', 'Scaronsmall', 'Zcaronsmall', 'Dieresissmall', 'Brevesmall', + 'Caronsmall', '', 'Dotaccentsmall', '', '', 'Macronsmall', '', '', + 'figuredash', 'hypheninferior', '', '', 'Ogoneksmall', 'Ringsmall', + 'Cedillasmall', '', '', '', 'onequarter', 'onehalf', 'threequarters', + 'questiondownsmall', 'oneeighth', 'threeeighths', 'fiveeighths', + 'seveneighths', 'onethird', 'twothirds', '', '', 'zerosuperior', + 'onesuperior', 'twosuperior', 'threesuperior', 'foursuperior', + 'fivesuperior', 'sixsuperior', 'sevensuperior', 'eightsuperior', + 'ninesuperior', 'zeroinferior', 'oneinferior', 'twoinferior', + 'threeinferior', 'fourinferior', 'fiveinferior', 'sixinferior', + 'seveninferior', 'eightinferior', 'nineinferior', 'centinferior', + 'dollarinferior', 'periodinferior', 'commainferior', 'Agravesmall', + 'Aacutesmall', 'Acircumflexsmall', 'Atildesmall', 'Adieresissmall', + 'Aringsmall', 'AEsmall', 'Ccedillasmall', 'Egravesmall', 'Eacutesmall', + 'Ecircumflexsmall', 'Edieresissmall', 'Igravesmall', 'Iacutesmall', + 'Icircumflexsmall', 'Idieresissmall', 'Ethsmall', 'Ntildesmall', + 'Ogravesmall', 'Oacutesmall', 'Ocircumflexsmall', 'Otildesmall', + 'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall', 'Uacutesmall', + 'Ucircumflexsmall', 'Udieresissmall', 'Yacutesmall', 'Thornsmall', + 'Ydieresissmall'], + MacExpertEncoding: ['', '', '', '', '', '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', + 'space', 'exclamsmall', 'Hungarumlautsmall', 'centoldstyle', + 'dollaroldstyle', 'dollarsuperior', 'ampersandsmall', 'Acutesmall', + 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader', + 'onedotenleader', 'comma', 'hyphen', 'period', 'fraction', 'zerooldstyle', + 'oneoldstyle', 'twooldstyle', 'threeoldstyle', 'fouroldstyle', + 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', + 'nineoldstyle', 'colon', 'semicolon', '', 'threequartersemdash', '', + 'questionsmall', '', '', '', '', 'Ethsmall', '', '', 'onequarter', + 'onehalf', 'threequarters', 'oneeighth', 'threeeighths', 'fiveeighths', + 'seveneighths', 'onethird', 'twothirds', '', '', '', '', '', '', 'ff', + 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior', '', 'parenrightinferior', + 'Circumflexsmall', 'hypheninferior', 'Gravesmall', 'Asmall', 'Bsmall', + 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall', 'Hsmall', 'Ismall', + 'Jsmall', 'Ksmall', 'Lsmall', 'Msmall', 'Nsmall', 'Osmall', 'Psmall', + 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall', 'Vsmall', 'Wsmall', + 'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary', 'onefitted', 'rupiah', + 'Tildesmall', '', '', 'asuperior', 'centsuperior', '', '', '', '', + 'Aacutesmall', 'Agravesmall', 'Acircumflexsmall', 'Adieresissmall', + 'Atildesmall', 'Aringsmall', 'Ccedillasmall', 'Eacutesmall', 'Egravesmall', + 'Ecircumflexsmall', 'Edieresissmall', 'Iacutesmall', 'Igravesmall', + 'Icircumflexsmall', 'Idieresissmall', 'Ntildesmall', 'Oacutesmall', + 'Ogravesmall', 'Ocircumflexsmall', 'Odieresissmall', 'Otildesmall', + 'Uacutesmall', 'Ugravesmall', 'Ucircumflexsmall', 'Udieresissmall', '', + 'eightsuperior', 'fourinferior', 'threeinferior', 'sixinferior', + 'eightinferior', 'seveninferior', 'Scaronsmall', '', 'centinferior', + 'twoinferior', '', 'Dieresissmall', '', 'Caronsmall', 'osuperior', + 'fiveinferior', '', 'commainferior', 'periodinferior', 'Yacutesmall', '', + 'dollarinferior', '', 'Thornsmall', '', 'nineinferior', 'zeroinferior', + 'Zcaronsmall', 'AEsmall', 'Oslashsmall', 'questiondownsmall', + 'oneinferior', 'Lslashsmall', '', '', '', '', '', '', 'Cedillasmall', '', + '', '', '', '', 'OEsmall', 'figuredash', 'hyphensuperior', '', '', '', '', + 'exclamdownsmall', '', 'Ydieresissmall', '', 'onesuperior', 'twosuperior', + 'threesuperior', 'foursuperior', 'fivesuperior', 'sixsuperior', + 'sevensuperior', 'ninesuperior', 'zerosuperior', '', 'esuperior', + 'rsuperior', 'tsuperior', '', '', 'isuperior', 'ssuperior', 'dsuperior', + '', '', '', '', '', 'lsuperior', 'Ogoneksmall', 'Brevesmall', + 'Macronsmall', 'bsuperior', 'nsuperior', 'msuperior', 'commasuperior', + 'periodsuperior', 'Dotaccentsmall', 'Ringsmall'], + MacRomanEncoding: ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', + 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', + 'ampersand', 'quotesingle', 'parenleft', 'parenright', 'asterisk', 'plus', + 'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two', 'three', + 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', + 'less', 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', + 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', + 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', + 'asciicircum', 'underscore', 'grave', 'a', 'b', 'c', 'd', 'e', 'f', 'g', + 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', + 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', '', + 'Adieresis', 'Aring', 'Ccedilla', 'Eacute', 'Ntilde', 'Odieresis', + 'Udieresis', 'aacute', 'agrave', 'acircumflex', 'adieresis', 'atilde', + 'aring', 'ccedilla', 'eacute', 'egrave', 'ecircumflex', 'edieresis', + 'iacute', 'igrave', 'icircumflex', 'idieresis', 'ntilde', 'oacute', + 'ograve', 'ocircumflex', 'odieresis', 'otilde', 'uacute', 'ugrave', + 'ucircumflex', 'udieresis', 'dagger', 'degree', 'cent', 'sterling', + 'section', 'bullet', 'paragraph', 'germandbls', 'registered', 'copyright', + 'trademark', 'acute', 'dieresis', 'notequal', 'AE', 'Oslash', 'infinity', + 'plusminus', 'lessequal', 'greaterequal', 'yen', 'mu', 'partialdiff', + 'summation', 'product', 'pi', 'integral', 'ordfeminine', 'ordmasculine', + 'Omega', 'ae', 'oslash', 'questiondown', 'exclamdown', 'logicalnot', + 'radical', 'florin', 'approxequal', 'Delta', 'guillemotleft', + 'guillemotright', 'ellipsis', 'space', 'Agrave', 'Atilde', 'Otilde', 'OE', + 'oe', 'endash', 'emdash', 'quotedblleft', 'quotedblright', 'quoteleft', + 'quoteright', 'divide', 'lozenge', 'ydieresis', 'Ydieresis', 'fraction', + 'currency', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', 'daggerdbl', + 'periodcentered', 'quotesinglbase', 'quotedblbase', 'perthousand', + 'Acircumflex', 'Ecircumflex', 'Aacute', 'Edieresis', 'Egrave', 'Iacute', + 'Icircumflex', 'Idieresis', 'Igrave', 'Oacute', 'Ocircumflex', 'apple', + 'Ograve', 'Uacute', 'Ucircumflex', 'Ugrave', 'dotlessi', 'circumflex', + 'tilde', 'macron', 'breve', 'dotaccent', 'ring', 'cedilla', 'hungarumlaut', + 'ogonek', 'caron'], + StandardEncoding: ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', + 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', + 'ampersand', 'quoteright', 'parenleft', 'parenright', 'asterisk', 'plus', + 'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two', 'three', + 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', + 'less', 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', + 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', + 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', + 'asciicircum', 'underscore', 'quoteleft', 'a', 'b', 'c', 'd', 'e', 'f', + 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', + 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', + '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'exclamdown', + 'cent', 'sterling', 'fraction', 'yen', 'florin', 'section', 'currency', + 'quotesingle', 'quotedblleft', 'guillemotleft', 'guilsinglleft', + 'guilsinglright', 'fi', 'fl', '', 'endash', 'dagger', 'daggerdbl', + 'periodcentered', '', 'paragraph', 'bullet', 'quotesinglbase', + 'quotedblbase', 'quotedblright', 'guillemotright', 'ellipsis', + 'perthousand', '', 'questiondown', '', 'grave', 'acute', 'circumflex', + 'tilde', 'macron', 'breve', 'dotaccent', 'dieresis', '', 'ring', 'cedilla', + '', 'hungarumlaut', 'ogonek', 'caron', 'emdash', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', '', 'AE', '', 'ordfeminine', '', '', + '', '', 'Lslash', 'Oslash', 'OE', 'ordmasculine', '', '', '', '', '', 'ae', + '', '', '', 'dotlessi', '', '', 'lslash', 'oslash', 'oe', 'germandbls'], + WinAnsiEncoding: ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', + 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', + 'ampersand', 'quotesingle', 'parenleft', 'parenright', 'asterisk', 'plus', + 'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two', 'three', + 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', + 'less', 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', + 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', + 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', + 'asciicircum', 'underscore', 'grave', 'a', 'b', 'c', 'd', 'e', 'f', 'g', + 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', + 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', + 'bullet', 'Euro', 'bullet', 'quotesinglbase', 'florin', 'quotedblbase', + 'ellipsis', 'dagger', 'daggerdbl', 'circumflex', 'perthousand', 'Scaron', + 'guilsinglleft', 'OE', 'bullet', 'Zcaron', 'bullet', 'bullet', 'quoteleft', + 'quoteright', 'quotedblleft', 'quotedblright', 'bullet', 'endash', + 'emdash', 'tilde', 'trademark', 'scaron', 'guilsinglright', 'oe', 'bullet', + 'zcaron', 'Ydieresis', 'space', 'exclamdown', 'cent', 'sterling', + 'currency', 'yen', 'brokenbar', 'section', 'dieresis', 'copyright', + 'ordfeminine', 'guillemotleft', 'logicalnot', 'hyphen', 'registered', + 'macron', 'degree', 'plusminus', 'twosuperior', 'threesuperior', 'acute', + 'mu', 'paragraph', 'periodcentered', 'cedilla', 'onesuperior', + 'ordmasculine', 'guillemotright', 'onequarter', 'onehalf', 'threequarters', + 'questiondown', 'Agrave', 'Aacute', 'Acircumflex', 'Atilde', 'Adieresis', + 'Aring', 'AE', 'Ccedilla', 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis', + 'Igrave', 'Iacute', 'Icircumflex', 'Idieresis', 'Eth', 'Ntilde', 'Ograve', + 'Oacute', 'Ocircumflex', 'Otilde', 'Odieresis', 'multiply', 'Oslash', + 'Ugrave', 'Uacute', 'Ucircumflex', 'Udieresis', 'Yacute', 'Thorn', + 'germandbls', 'agrave', 'aacute', 'acircumflex', 'atilde', 'adieresis', + 'aring', 'ae', 'ccedilla', 'egrave', 'eacute', 'ecircumflex', 'edieresis', + 'igrave', 'iacute', 'icircumflex', 'idieresis', 'eth', 'ntilde', 'ograve', + 'oacute', 'ocircumflex', 'otilde', 'odieresis', 'divide', 'oslash', + 'ugrave', 'uacute', 'ucircumflex', 'udieresis', 'yacute', 'thorn', + 'ydieresis'], + SymbolSetEncoding: ['', '', '', '', '', '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', + 'space', 'exclam', 'universal', 'numbersign', 'existential', 'percent', + 'ampersand', 'suchthat', 'parenleft', 'parenright', 'asteriskmath', 'plus', + 'comma', 'minus', 'period', 'slash', 'zero', 'one', 'two', 'three', 'four', + 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', + 'equal', 'greater', 'question', 'congruent', 'Alpha', 'Beta', 'Chi', + 'Delta', 'Epsilon', 'Phi', 'Gamma', 'Eta', 'Iota', 'theta1', 'Kappa', + 'Lambda', 'Mu', 'Nu', 'Omicron', 'Pi', 'Theta', 'Rho', 'Sigma', 'Tau', + 'Upsilon', 'sigma1', 'Omega', 'Xi', 'Psi', 'Zeta', 'bracketleft', + 'therefore', 'bracketright', 'perpendicular', 'underscore', 'radicalex', + 'alpha', 'beta', 'chi', 'delta', 'epsilon', 'phi', 'gamma', 'eta', 'iota', + 'phi1', 'kappa', 'lambda', 'mu', 'nu', 'omicron', 'pi', 'theta', 'rho', + 'sigma', 'tau', 'upsilon', 'omega1', 'omega', 'xi', 'psi', 'zeta', + 'braceleft', 'bar', 'braceright', 'similar', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', 'Euro', 'Upsilon1', 'minute', 'lessequal', + 'fraction', 'infinity', 'florin', 'club', 'diamond', 'heart', 'spade', + 'arrowboth', 'arrowleft', 'arrowup', 'arrowright', 'arrowdown', 'degree', + 'plusminus', 'second', 'greaterequal', 'multiply', 'proportional', + 'partialdiff', 'bullet', 'divide', 'notequal', 'equivalence', + 'approxequal', 'ellipsis', 'arrowvertex', 'arrowhorizex', 'carriagereturn', + 'aleph', 'Ifraktur', 'Rfraktur', 'weierstrass', 'circlemultiply', + 'circleplus', 'emptyset', 'intersection', 'union', 'propersuperset', + 'reflexsuperset', 'notsubset', 'propersubset', 'reflexsubset', 'element', + 'notelement', 'angle', 'gradient', 'registerserif', 'copyrightserif', + 'trademarkserif', 'product', 'radical', 'dotmath', 'logicalnot', + 'logicaland', 'logicalor', 'arrowdblboth', 'arrowdblleft', 'arrowdblup', + 'arrowdblright', 'arrowdbldown', 'lozenge', 'angleleft', 'registersans', + 'copyrightsans', 'trademarksans', 'summation', 'parenlefttp', + 'parenleftex', 'parenleftbt', 'bracketlefttp', 'bracketleftex', + 'bracketleftbt', 'bracelefttp', 'braceleftmid', 'braceleftbt', 'braceex', + '', 'angleright', 'integral', 'integraltp', 'integralex', 'integralbt', + 'parenrighttp', 'parenrightex', 'parenrightbt', 'bracketrighttp', + 'bracketrightex', 'bracketrightbt', 'bracerighttp', 'bracerightmid', + 'bracerightbt'], + ZapfDingbatsEncoding: ['', '', '', '', '', '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', + 'space', 'a1', 'a2', 'a202', 'a3', 'a4', 'a5', 'a119', 'a118', 'a117', + 'a11', 'a12', 'a13', 'a14', 'a15', 'a16', 'a105', 'a17', 'a18', 'a19', + 'a20', 'a21', 'a22', 'a23', 'a24', 'a25', 'a26', 'a27', 'a28', 'a6', 'a7', + 'a8', 'a9', 'a10', 'a29', 'a30', 'a31', 'a32', 'a33', 'a34', 'a35', 'a36', + 'a37', 'a38', 'a39', 'a40', 'a41', 'a42', 'a43', 'a44', 'a45', 'a46', + 'a47', 'a48', 'a49', 'a50', 'a51', 'a52', 'a53', 'a54', 'a55', 'a56', + 'a57', 'a58', 'a59', 'a60', 'a61', 'a62', 'a63', 'a64', 'a65', 'a66', + 'a67', 'a68', 'a69', 'a70', 'a71', 'a72', 'a73', 'a74', 'a203', 'a75', + 'a204', 'a76', 'a77', 'a78', 'a79', 'a81', 'a82', 'a83', 'a84', 'a97', + 'a98', 'a99', 'a100', '', 'a89', 'a90', 'a93', 'a94', 'a91', 'a92', 'a205', + 'a85', 'a206', 'a86', 'a87', 'a88', 'a95', 'a96', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', '', '', '', '', 'a101', 'a102', 'a103', + 'a104', 'a106', 'a107', 'a108', 'a112', 'a111', 'a110', 'a109', 'a120', + 'a121', 'a122', 'a123', 'a124', 'a125', 'a126', 'a127', 'a128', 'a129', + 'a130', 'a131', 'a132', 'a133', 'a134', 'a135', 'a136', 'a137', 'a138', + 'a139', 'a140', 'a141', 'a142', 'a143', 'a144', 'a145', 'a146', 'a147', + 'a148', 'a149', 'a150', 'a151', 'a152', 'a153', 'a154', 'a155', 'a156', + 'a157', 'a158', 'a159', 'a160', 'a161', 'a163', 'a164', 'a196', 'a165', + 'a192', 'a166', 'a167', 'a168', 'a169', 'a170', 'a171', 'a172', 'a173', + 'a162', 'a174', 'a175', 'a176', 'a177', 'a178', 'a179', 'a193', 'a180', + 'a199', 'a181', 'a200', 'a182', '', 'a201', 'a183', 'a184', 'a197', 'a185', + 'a194', 'a198', 'a186', 'a195', 'a187', 'a188', 'a189', 'a190', 'a191'] +}; + +/** + * Hold a map of decoded fonts and of the standard fourteen Type1 + * fonts and their acronyms. + */ +var stdFontMap = { + 'ArialNarrow': 'Helvetica', + 'ArialNarrow-Bold': 'Helvetica-Bold', + 'ArialNarrow-BoldItalic': 'Helvetica-BoldOblique', + 'ArialNarrow-Italic': 'Helvetica-Oblique', + 'ArialBlack': 'Helvetica', + 'ArialBlack-Bold': 'Helvetica-Bold', + 'ArialBlack-BoldItalic': 'Helvetica-BoldOblique', + 'ArialBlack-Italic': 'Helvetica-Oblique', + 'Arial': 'Helvetica', + 'Arial-Bold': 'Helvetica-Bold', + 'Arial-BoldItalic': 'Helvetica-BoldOblique', + 'Arial-Italic': 'Helvetica-Oblique', + 'Arial-BoldItalicMT': 'Helvetica-BoldOblique', + 'Arial-BoldMT': 'Helvetica-Bold', + 'Arial-ItalicMT': 'Helvetica-Oblique', + 'ArialMT': 'Helvetica', + 'Courier-Bold': 'Courier-Bold', + 'Courier-BoldItalic': 'Courier-BoldOblique', + 'Courier-Italic': 'Courier-Oblique', + 'CourierNew': 'Courier', + 'CourierNew-Bold': 'Courier-Bold', + 'CourierNew-BoldItalic': 'Courier-BoldOblique', + 'CourierNew-Italic': 'Courier-Oblique', + 'CourierNewPS-BoldItalicMT': 'Courier-BoldOblique', + 'CourierNewPS-BoldMT': 'Courier-Bold', + 'CourierNewPS-ItalicMT': 'Courier-Oblique', + 'CourierNewPSMT': 'Courier', + 'Helvetica': 'Helvetica', + 'Helvetica-Bold': 'Helvetica-Bold', + 'Helvetica-BoldItalic': 'Helvetica-BoldOblique', + 'Helvetica-BoldOblique': 'Helvetica-BoldOblique', + 'Helvetica-Italic': 'Helvetica-Oblique', + 'Helvetica-Oblique':'Helvetica-Oblique', + 'Symbol-Bold': 'Symbol', + 'Symbol-BoldItalic': 'Symbol', + 'Symbol-Italic': 'Symbol', + 'TimesNewRoman': 'Times-Roman', + 'TimesNewRoman-Bold': 'Times-Bold', + 'TimesNewRoman-BoldItalic': 'Times-BoldItalic', + 'TimesNewRoman-Italic': 'Times-Italic', + 'TimesNewRomanPS': 'Times-Roman', + 'TimesNewRomanPS-Bold': 'Times-Bold', + 'TimesNewRomanPS-BoldItalic': 'Times-BoldItalic', + 'TimesNewRomanPS-BoldItalicMT': 'Times-BoldItalic', + 'TimesNewRomanPS-BoldMT': 'Times-Bold', + 'TimesNewRomanPS-Italic': 'Times-Italic', + 'TimesNewRomanPS-ItalicMT': 'Times-Italic', + 'TimesNewRomanPSMT': 'Times-Roman', + 'TimesNewRomanPSMT-Bold': 'Times-Bold', + 'TimesNewRomanPSMT-BoldItalic': 'Times-BoldItalic', + 'TimesNewRomanPSMT-Italic': 'Times-Italic' +}; + +/** + * Holds the map of the non-standard fonts that might be included as a standard + * fonts without glyph data. + */ +var nonStdFontMap = { + 'CenturyGothic': 'Helvetica', + 'CenturyGothic-Bold': 'Helvetica-Bold', + 'CenturyGothic-BoldItalic': 'Helvetica-BoldOblique', + 'CenturyGothic-Italic': 'Helvetica-Oblique', + 'ComicSansMS': 'Comic Sans MS', + 'ComicSansMS-Bold': 'Comic Sans MS-Bold', + 'ComicSansMS-BoldItalic': 'Comic Sans MS-BoldItalic', + 'ComicSansMS-Italic': 'Comic Sans MS-Italic', + 'LucidaConsole': 'Courier', + 'LucidaConsole-Bold': 'Courier-Bold', + 'LucidaConsole-BoldItalic': 'Courier-BoldOblique', + 'LucidaConsole-Italic': 'Courier-Oblique', + 'MS-Gothic': 'MS Gothic', + 'MS-Gothic-Bold': 'MS Gothic-Bold', + 'MS-Gothic-BoldItalic': 'MS Gothic-BoldItalic', + 'MS-Gothic-Italic': 'MS Gothic-Italic', + 'MS-Mincho': 'MS Mincho', + 'MS-Mincho-Bold': 'MS Mincho-Bold', + 'MS-Mincho-BoldItalic': 'MS Mincho-BoldItalic', + 'MS-Mincho-Italic': 'MS Mincho-Italic', + 'MS-PGothic': 'MS PGothic', + 'MS-PGothic-Bold': 'MS PGothic-Bold', + 'MS-PGothic-BoldItalic': 'MS PGothic-BoldItalic', + 'MS-PGothic-Italic': 'MS PGothic-Italic', + 'MS-PMincho': 'MS PMincho', + 'MS-PMincho-Bold': 'MS PMincho-Bold', + 'MS-PMincho-BoldItalic': 'MS PMincho-BoldItalic', + 'MS-PMincho-Italic': 'MS PMincho-Italic', + 'Wingdings': 'ZapfDingbats' +}; + +var serifFonts = { + 'Adobe Jenson': true, 'Adobe Text': true, 'Albertus': true, + 'Aldus': true, 'Alexandria': true, 'Algerian': true, + 'American Typewriter': true, 'Antiqua': true, 'Apex': true, + 'Arno': true, 'Aster': true, 'Aurora': true, + 'Baskerville': true, 'Bell': true, 'Bembo': true, + 'Bembo Schoolbook': true, 'Benguiat': true, 'Berkeley Old Style': true, + 'Bernhard Modern': true, 'Berthold City': true, 'Bodoni': true, + 'Bauer Bodoni': true, 'Book Antiqua': true, 'Bookman': true, + 'Bordeaux Roman': true, 'Californian FB': true, 'Calisto': true, + 'Calvert': true, 'Capitals': true, 'Cambria': true, + 'Cartier': true, 'Caslon': true, 'Catull': true, + 'Centaur': true, 'Century Old Style': true, 'Century Schoolbook': true, + 'Chaparral': true, 'Charis SIL': true, 'Cheltenham': true, + 'Cholla Slab': true, 'Clarendon': true, 'Clearface': true, + 'Cochin': true, 'Colonna': true, 'Computer Modern': true, + 'Concrete Roman': true, 'Constantia': true, 'Cooper Black': true, + 'Corona': true, 'Ecotype': true, 'Egyptienne': true, + 'Elephant': true, 'Excelsior': true, 'Fairfield': true, + 'FF Scala': true, 'Folkard': true, 'Footlight': true, + 'FreeSerif': true, 'Friz Quadrata': true, 'Garamond': true, + 'Gentium': true, 'Georgia': true, 'Gloucester': true, + 'Goudy Old Style': true, 'Goudy Schoolbook': true, 'Goudy Pro Font': true, + 'Granjon': true, 'Guardian Egyptian': true, 'Heather': true, + 'Hercules': true, 'High Tower Text': true, 'Hiroshige': true, + 'Hoefler Text': true, 'Humana Serif': true, 'Imprint': true, + 'Ionic No. 5': true, 'Janson': true, 'Joanna': true, + 'Korinna': true, 'Lexicon': true, 'Liberation Serif': true, + 'Linux Libertine': true, 'Literaturnaya': true, 'Lucida': true, + 'Lucida Bright': true, 'Melior': true, 'Memphis': true, + 'Miller': true, 'Minion': true, 'Modern': true, + 'Mona Lisa': true, 'Mrs Eaves': true, 'MS Serif': true, + 'Museo Slab': true, 'New York': true, 'Nimbus Roman': true, + 'NPS Rawlinson Roadway': true, 'Palatino': true, 'Perpetua': true, + 'Plantin': true, 'Plantin Schoolbook': true, 'Playbill': true, + 'Poor Richard': true, 'Rawlinson Roadway': true, 'Renault': true, + 'Requiem': true, 'Rockwell': true, 'Roman': true, + 'Rotis Serif': true, 'Sabon': true, 'Scala': true, + 'Seagull': true, 'Sistina': true, 'Souvenir': true, + 'STIX': true, 'Stone Informal': true, 'Stone Serif': true, + 'Sylfaen': true, 'Times': true, 'Trajan': true, + 'Trinité': true, 'Trump Mediaeval': true, 'Utopia': true, + 'Vale Type': true, 'Bitstream Vera': true, 'Vera Serif': true, + 'Versailles': true, 'Wanted': true, 'Weiss': true, + 'Wide Latin': true, 'Windsor': true, 'XITS': true +}; + +var symbolsFonts = { + 'Dingbats': true, 'Symbol': true, 'ZapfDingbats': true +}; + +// Glyph map for well-known standard fonts. Sometimes Ghostscript uses CID fonts +// but does not embed the CID to GID mapping. The mapping is incomplete for all +// glyphs, but common for some set of the standard fonts. +var GlyphMapForStandardFonts = { + '2': 10, '3': 32, '4': 33, '5': 34, '6': 35, '7': 36, '8': 37, '9': 38, + '10': 39, '11': 40, '12': 41, '13': 42, '14': 43, '15': 44, '16': 45, + '17': 46, '18': 47, '19': 48, '20': 49, '21': 50, '22': 51, '23': 52, + '24': 53, '25': 54, '26': 55, '27': 56, '28': 57, '29': 58, '30': 894, + '31': 60, '32': 61, '33': 62, '34': 63, '35': 64, '36': 65, '37': 66, + '38': 67, '39': 68, '40': 69, '41': 70, '42': 71, '43': 72, '44': 73, + '45': 74, '46': 75, '47': 76, '48': 77, '49': 78, '50': 79, '51': 80, + '52': 81, '53': 82, '54': 83, '55': 84, '56': 85, '57': 86, '58': 87, + '59': 88, '60': 89, '61': 90, '62': 91, '63': 92, '64': 93, '65': 94, + '66': 95, '67': 96, '68': 97, '69': 98, '70': 99, '71': 100, '72': 101, + '73': 102, '74': 103, '75': 104, '76': 105, '77': 106, '78': 107, '79': 108, + '80': 109, '81': 110, '82': 111, '83': 112, '84': 113, '85': 114, '86': 115, + '87': 116, '88': 117, '89': 118, '90': 119, '91': 120, '92': 121, '93': 122, + '94': 123, '95': 124, '96': 125, '97': 126, '98': 196, '99': 197, '100': 199, + '101': 201, '102': 209, '103': 214, '104': 220, '105': 225, '106': 224, + '107': 226, '108': 228, '109': 227, '110': 229, '111': 231, '112': 233, + '113': 232, '114': 234, '115': 235, '116': 237, '117': 236, '118': 238, + '119': 239, '120': 241, '121': 243, '122': 242, '123': 244, '124': 246, + '125': 245, '126': 250, '127': 249, '128': 251, '129': 252, '130': 8224, + '131': 176, '132': 162, '133': 163, '134': 167, '135': 8226, '136': 182, + '137': 223, '138': 174, '139': 169, '140': 8482, '141': 180, '142': 168, + '143': 8800, '144': 198, '145': 216, '146': 8734, '147': 177, '148': 8804, + '149': 8805, '150': 165, '151': 181, '152': 8706, '153': 8721, '154': 8719, + '156': 8747, '157': 170, '158': 186, '159': 8486, '160': 230, '161': 248, + '162': 191, '163': 161, '164': 172, '165': 8730, '166': 402, '167': 8776, + '168': 8710, '169': 171, '170': 187, '171': 8230, '210': 218, '223': 711, + '224': 321, '225': 322, '227': 353, '229': 382, '234': 253, '252': 263, + '253': 268, '254': 269, '258': 258, '260': 260, '261': 261, '265': 280, + '266': 281, '268': 283, '269': 313, '275': 323, '276': 324, '278': 328, + '284': 345, '285': 346, '286': 347, '292': 367, '295': 377, '296': 378, + '298': 380, '305': 963, + '306': 964, '307': 966, '308': 8215, '309': 8252, '310': 8319, '311': 8359, + '312': 8592, '313': 8593, '337': 9552, '493': 1039, '494': 1040, '705': 1524, + '706': 8362, '710': 64288, '711': 64298, '759': 1617, '761': 1776, + '763': 1778, '775': 1652, '777': 1764, '778': 1780, '779': 1781, '780': 1782, + '782': 771, '783': 64726, '786': 8363, '788': 8532, '790': 768, '791': 769, + '792': 768, '795': 803, '797': 64336, '798': 64337, '799': 64342, + '800': 64343, '801': 64344, '802': 64345, '803': 64362, '804': 64363, + '805': 64364, '2424': 7821, '2425': 7822, '2426': 7823, '2427': 7824, + '2428': 7825, '2429': 7826, '2430': 7827, '2433': 7682, '2678': 8045, + '2679': 8046, '2830': 1552, '2838': 686, '2840': 751, '2842': 753, + '2843': 754, '2844': 755, '2846': 757, '2856': 767, '2857': 848, '2858': 849, + '2862': 853, '2863': 854, '2864': 855, '2865': 861, '2866': 862, '2906': 7460, + '2908': 7462, '2909': 7463, '2910': 7464, '2912': 7466, '2913': 7467, + '2914': 7468, '2916': 7470, '2917': 7471, '2918': 7472, '2920': 7474, + '2921': 7475, '2922': 7476, '2924': 7478, '2925': 7479, '2926': 7480, + '2928': 7482, '2929': 7483, '2930': 7484, '2932': 7486, '2933': 7487, + '2934': 7488, '2936': 7490, '2937': 7491, '2938': 7492, '2940': 7494, + '2941': 7495, '2942': 7496, '2944': 7498, '2946': 7500, '2948': 7502, + '2950': 7504, '2951': 7505, '2952': 7506, '2954': 7508, '2955': 7509, + '2956': 7510, '2958': 7512, '2959': 7513, '2960': 7514, '2962': 7516, + '2963': 7517, '2964': 7518, '2966': 7520, '2967': 7521, '2968': 7522, + '2970': 7524, '2971': 7525, '2972': 7526, '2974': 7528, '2975': 7529, + '2976': 7530, '2978': 1537, '2979': 1538, '2980': 1539, '2982': 1549, + '2983': 1551, '2984': 1552, '2986': 1554, '2987': 1555, '2988': 1556, + '2990': 1623, '2991': 1624, '2995': 1775, '2999': 1791, '3002': 64290, + '3003': 64291, '3004': 64292, '3006': 64294, '3007': 64295, '3008': 64296, + '3011': 1900, '3014': 8223, '3015': 8244, '3017': 7532, '3018': 7533, + '3019': 7534, '3075': 7590, '3076': 7591, '3079': 7594, '3080': 7595, + '3083': 7598, '3084': 7599, '3087': 7602, '3088': 7603, '3091': 7606, + '3092': 7607, '3095': 7610, '3096': 7611, '3099': 7614, '3100': 7615, + '3103': 7618, '3104': 7619, '3107': 8337, '3108': 8338, '3116': 1884, + '3119': 1885, '3120': 1885, '3123': 1886, '3124': 1886, '3127': 1887, + '3128': 1887, '3131': 1888, '3132': 1888, '3135': 1889, '3136': 1889, + '3139': 1890, '3140': 1890, '3143': 1891, '3144': 1891, '3147': 1892, + '3148': 1892, '3153': 580, '3154': 581, '3157': 584, '3158': 585, '3161': 588, + '3162': 589, '3165': 891, '3166': 892, '3169': 1274, '3170': 1275, + '3173': 1278, '3174': 1279, '3181': 7622, '3182': 7623, '3282': 11799, + '3316': 578, '3379': 42785, '3393': 1159, '3416': 8377 +}; + +// Some characters, e.g. copyrightserif, are mapped to the private use area and +// might not be displayed using standard fonts. Mapping/hacking well-known chars +// to the similar equivalents in the normal characters range. +var SpecialPUASymbols = { + '63721': 0x00A9, // copyrightsans (0xF8E9) => copyright + '63193': 0x00A9, // copyrightserif (0xF6D9) => copyright + '63720': 0x00AE, // registersans (0xF8E8) => registered + '63194': 0x00AE, // registerserif (0xF6DA) => registered + '63722': 0x2122, // trademarksans (0xF8EA) => trademark + '63195': 0x2122, // trademarkserif (0xF6DB) => trademark + '63729': 0x23A7, // bracelefttp (0xF8F1) + '63730': 0x23A8, // braceleftmid (0xF8F2) + '63731': 0x23A9, // braceleftbt (0xF8F3) + '63740': 0x23AB, // bracerighttp (0xF8FC) + '63741': 0x23AC, // bracerightmid (0xF8FD) + '63742': 0x23AD, // bracerightbt (0xF8FE) + '63726': 0x23A1, // bracketlefttp (0xF8EE) + '63727': 0x23A2, // bracketleftex (0xF8EF) + '63728': 0x23A3, // bracketleftbt (0xF8F0) + '63737': 0x23A4, // bracketrighttp (0xF8F9) + '63738': 0x23A5, // bracketrightex (0xF8FA) + '63739': 0x23A6, // bracketrightbt (0xF8FB) + '63723': 0x239B, // parenlefttp (0xF8EB) + '63724': 0x239C, // parenleftex (0xF8EC) + '63725': 0x239D, // parenleftbt (0xF8ED) + '63734': 0x239E, // parenrighttp (0xF8F6) + '63735': 0x239F, // parenrightex (0xF8F7) + '63736': 0x23A0, // parenrightbt (0xF8F8) +}; +function mapSpecialUnicodeValues(code) { + if (code >= 0xFFF0 && code <= 0xFFFF) { // Specials unicode block. + return 0; + } else if (code >= 0xF600 && code <= 0xF8FF) { + return (SpecialPUASymbols[code] || code); + } + return code; +} + +var UnicodeRanges = [ + { 'begin': 0x0000, 'end': 0x007F }, // Basic Latin + { 'begin': 0x0080, 'end': 0x00FF }, // Latin-1 Supplement + { 'begin': 0x0100, 'end': 0x017F }, // Latin Extended-A + { 'begin': 0x0180, 'end': 0x024F }, // Latin Extended-B + { 'begin': 0x0250, 'end': 0x02AF }, // IPA Extensions + { 'begin': 0x02B0, 'end': 0x02FF }, // Spacing Modifier Letters + { 'begin': 0x0300, 'end': 0x036F }, // Combining Diacritical Marks + { 'begin': 0x0370, 'end': 0x03FF }, // Greek and Coptic + { 'begin': 0x2C80, 'end': 0x2CFF }, // Coptic + { 'begin': 0x0400, 'end': 0x04FF }, // Cyrillic + { 'begin': 0x0530, 'end': 0x058F }, // Armenian + { 'begin': 0x0590, 'end': 0x05FF }, // Hebrew + { 'begin': 0xA500, 'end': 0xA63F }, // Vai + { 'begin': 0x0600, 'end': 0x06FF }, // Arabic + { 'begin': 0x07C0, 'end': 0x07FF }, // NKo + { 'begin': 0x0900, 'end': 0x097F }, // Devanagari + { 'begin': 0x0980, 'end': 0x09FF }, // Bengali + { 'begin': 0x0A00, 'end': 0x0A7F }, // Gurmukhi + { 'begin': 0x0A80, 'end': 0x0AFF }, // Gujarati + { 'begin': 0x0B00, 'end': 0x0B7F }, // Oriya + { 'begin': 0x0B80, 'end': 0x0BFF }, // Tamil + { 'begin': 0x0C00, 'end': 0x0C7F }, // Telugu + { 'begin': 0x0C80, 'end': 0x0CFF }, // Kannada + { 'begin': 0x0D00, 'end': 0x0D7F }, // Malayalam + { 'begin': 0x0E00, 'end': 0x0E7F }, // Thai + { 'begin': 0x0E80, 'end': 0x0EFF }, // Lao + { 'begin': 0x10A0, 'end': 0x10FF }, // Georgian + { 'begin': 0x1B00, 'end': 0x1B7F }, // Balinese + { 'begin': 0x1100, 'end': 0x11FF }, // Hangul Jamo + { 'begin': 0x1E00, 'end': 0x1EFF }, // Latin Extended Additional + { 'begin': 0x1F00, 'end': 0x1FFF }, // Greek Extended + { 'begin': 0x2000, 'end': 0x206F }, // General Punctuation + { 'begin': 0x2070, 'end': 0x209F }, // Superscripts And Subscripts + { 'begin': 0x20A0, 'end': 0x20CF }, // Currency Symbol + { 'begin': 0x20D0, 'end': 0x20FF }, // Combining Diacritical Marks For Symbols + { 'begin': 0x2100, 'end': 0x214F }, // Letterlike Symbols + { 'begin': 0x2150, 'end': 0x218F }, // Number Forms + { 'begin': 0x2190, 'end': 0x21FF }, // Arrows + { 'begin': 0x2200, 'end': 0x22FF }, // Mathematical Operators + { 'begin': 0x2300, 'end': 0x23FF }, // Miscellaneous Technical + { 'begin': 0x2400, 'end': 0x243F }, // Control Pictures + { 'begin': 0x2440, 'end': 0x245F }, // Optical Character Recognition + { 'begin': 0x2460, 'end': 0x24FF }, // Enclosed Alphanumerics + { 'begin': 0x2500, 'end': 0x257F }, // Box Drawing + { 'begin': 0x2580, 'end': 0x259F }, // Block Elements + { 'begin': 0x25A0, 'end': 0x25FF }, // Geometric Shapes + { 'begin': 0x2600, 'end': 0x26FF }, // Miscellaneous Symbols + { 'begin': 0x2700, 'end': 0x27BF }, // Dingbats + { 'begin': 0x3000, 'end': 0x303F }, // CJK Symbols And Punctuation + { 'begin': 0x3040, 'end': 0x309F }, // Hiragana + { 'begin': 0x30A0, 'end': 0x30FF }, // Katakana + { 'begin': 0x3100, 'end': 0x312F }, // Bopomofo + { 'begin': 0x3130, 'end': 0x318F }, // Hangul Compatibility Jamo + { 'begin': 0xA840, 'end': 0xA87F }, // Phags-pa + { 'begin': 0x3200, 'end': 0x32FF }, // Enclosed CJK Letters And Months + { 'begin': 0x3300, 'end': 0x33FF }, // CJK Compatibility + { 'begin': 0xAC00, 'end': 0xD7AF }, // Hangul Syllables + { 'begin': 0xD800, 'end': 0xDFFF }, // Non-Plane 0 * + { 'begin': 0x10900, 'end': 0x1091F }, // Phoenicia + { 'begin': 0x4E00, 'end': 0x9FFF }, // CJK Unified Ideographs + { 'begin': 0xE000, 'end': 0xF8FF }, // Private Use Area (plane 0) + { 'begin': 0x31C0, 'end': 0x31EF }, // CJK Strokes + { 'begin': 0xFB00, 'end': 0xFB4F }, // Alphabetic Presentation Forms + { 'begin': 0xFB50, 'end': 0xFDFF }, // Arabic Presentation Forms-A + { 'begin': 0xFE20, 'end': 0xFE2F }, // Combining Half Marks + { 'begin': 0xFE10, 'end': 0xFE1F }, // Vertical Forms + { 'begin': 0xFE50, 'end': 0xFE6F }, // Small Form Variants + { 'begin': 0xFE70, 'end': 0xFEFF }, // Arabic Presentation Forms-B + { 'begin': 0xFF00, 'end': 0xFFEF }, // Halfwidth And Fullwidth Forms + { 'begin': 0xFFF0, 'end': 0xFFFF }, // Specials + { 'begin': 0x0F00, 'end': 0x0FFF }, // Tibetan + { 'begin': 0x0700, 'end': 0x074F }, // Syriac + { 'begin': 0x0780, 'end': 0x07BF }, // Thaana + { 'begin': 0x0D80, 'end': 0x0DFF }, // Sinhala + { 'begin': 0x1000, 'end': 0x109F }, // Myanmar + { 'begin': 0x1200, 'end': 0x137F }, // Ethiopic + { 'begin': 0x13A0, 'end': 0x13FF }, // Cherokee + { 'begin': 0x1400, 'end': 0x167F }, // Unified Canadian Aboriginal Syllabics + { 'begin': 0x1680, 'end': 0x169F }, // Ogham + { 'begin': 0x16A0, 'end': 0x16FF }, // Runic + { 'begin': 0x1780, 'end': 0x17FF }, // Khmer + { 'begin': 0x1800, 'end': 0x18AF }, // Mongolian + { 'begin': 0x2800, 'end': 0x28FF }, // Braille Patterns + { 'begin': 0xA000, 'end': 0xA48F }, // Yi Syllables + { 'begin': 0x1700, 'end': 0x171F }, // Tagalog + { 'begin': 0x10300, 'end': 0x1032F }, // Old Italic + { 'begin': 0x10330, 'end': 0x1034F }, // Gothic + { 'begin': 0x10400, 'end': 0x1044F }, // Deseret + { 'begin': 0x1D000, 'end': 0x1D0FF }, // Byzantine Musical Symbols + { 'begin': 0x1D400, 'end': 0x1D7FF }, // Mathematical Alphanumeric Symbols + { 'begin': 0xFF000, 'end': 0xFFFFD }, // Private Use (plane 15) + { 'begin': 0xFE00, 'end': 0xFE0F }, // Variation Selectors + { 'begin': 0xE0000, 'end': 0xE007F }, // Tags + { 'begin': 0x1900, 'end': 0x194F }, // Limbu + { 'begin': 0x1950, 'end': 0x197F }, // Tai Le + { 'begin': 0x1980, 'end': 0x19DF }, // New Tai Lue + { 'begin': 0x1A00, 'end': 0x1A1F }, // Buginese + { 'begin': 0x2C00, 'end': 0x2C5F }, // Glagolitic + { 'begin': 0x2D30, 'end': 0x2D7F }, // Tifinagh + { 'begin': 0x4DC0, 'end': 0x4DFF }, // Yijing Hexagram Symbols + { 'begin': 0xA800, 'end': 0xA82F }, // Syloti Nagri + { 'begin': 0x10000, 'end': 0x1007F }, // Linear B Syllabary + { 'begin': 0x10140, 'end': 0x1018F }, // Ancient Greek Numbers + { 'begin': 0x10380, 'end': 0x1039F }, // Ugaritic + { 'begin': 0x103A0, 'end': 0x103DF }, // Old Persian + { 'begin': 0x10450, 'end': 0x1047F }, // Shavian + { 'begin': 0x10480, 'end': 0x104AF }, // Osmanya + { 'begin': 0x10800, 'end': 0x1083F }, // Cypriot Syllabary + { 'begin': 0x10A00, 'end': 0x10A5F }, // Kharoshthi + { 'begin': 0x1D300, 'end': 0x1D35F }, // Tai Xuan Jing Symbols + { 'begin': 0x12000, 'end': 0x123FF }, // Cuneiform + { 'begin': 0x1D360, 'end': 0x1D37F }, // Counting Rod Numerals + { 'begin': 0x1B80, 'end': 0x1BBF }, // Sundanese + { 'begin': 0x1C00, 'end': 0x1C4F }, // Lepcha + { 'begin': 0x1C50, 'end': 0x1C7F }, // Ol Chiki + { 'begin': 0xA880, 'end': 0xA8DF }, // Saurashtra + { 'begin': 0xA900, 'end': 0xA92F }, // Kayah Li + { 'begin': 0xA930, 'end': 0xA95F }, // Rejang + { 'begin': 0xAA00, 'end': 0xAA5F }, // Cham + { 'begin': 0x10190, 'end': 0x101CF }, // Ancient Symbols + { 'begin': 0x101D0, 'end': 0x101FF }, // Phaistos Disc + { 'begin': 0x102A0, 'end': 0x102DF }, // Carian + { 'begin': 0x1F030, 'end': 0x1F09F } // Domino Tiles +]; + +var MacStandardGlyphOrdering = [ + '.notdef', '.null', 'nonmarkingreturn', 'space', 'exclam', 'quotedbl', + 'numbersign', 'dollar', 'percent', 'ampersand', 'quotesingle', 'parenleft', + 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', + 'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', + 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question', 'at', + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', + 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', + 'backslash', 'bracketright', 'asciicircum', 'underscore', 'grave', 'a', 'b', + 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', + 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', + 'asciitilde', 'Adieresis', 'Aring', 'Ccedilla', 'Eacute', 'Ntilde', + 'Odieresis', 'Udieresis', 'aacute', 'agrave', 'acircumflex', 'adieresis', + 'atilde', 'aring', 'ccedilla', 'eacute', 'egrave', 'ecircumflex', 'edieresis', + 'iacute', 'igrave', 'icircumflex', 'idieresis', 'ntilde', 'oacute', 'ograve', + 'ocircumflex', 'odieresis', 'otilde', 'uacute', 'ugrave', 'ucircumflex', + 'udieresis', 'dagger', 'degree', 'cent', 'sterling', 'section', 'bullet', + 'paragraph', 'germandbls', 'registered', 'copyright', 'trademark', 'acute', + 'dieresis', 'notequal', 'AE', 'Oslash', 'infinity', 'plusminus', 'lessequal', + 'greaterequal', 'yen', 'mu', 'partialdiff', 'summation', 'product', 'pi', + 'integral', 'ordfeminine', 'ordmasculine', 'Omega', 'ae', 'oslash', + 'questiondown', 'exclamdown', 'logicalnot', 'radical', 'florin', + 'approxequal', 'Delta', 'guillemotleft', 'guillemotright', 'ellipsis', + 'nonbreakingspace', 'Agrave', 'Atilde', 'Otilde', 'OE', 'oe', 'endash', + 'emdash', 'quotedblleft', 'quotedblright', 'quoteleft', 'quoteright', + 'divide', 'lozenge', 'ydieresis', 'Ydieresis', 'fraction', 'currency', + 'guilsinglleft', 'guilsinglright', 'fi', 'fl', 'daggerdbl', 'periodcentered', + 'quotesinglbase', 'quotedblbase', 'perthousand', 'Acircumflex', + 'Ecircumflex', 'Aacute', 'Edieresis', 'Egrave', 'Iacute', 'Icircumflex', + 'Idieresis', 'Igrave', 'Oacute', 'Ocircumflex', 'apple', 'Ograve', 'Uacute', + 'Ucircumflex', 'Ugrave', 'dotlessi', 'circumflex', 'tilde', 'macron', + 'breve', 'dotaccent', 'ring', 'cedilla', 'hungarumlaut', 'ogonek', 'caron', + 'Lslash', 'lslash', 'Scaron', 'scaron', 'Zcaron', 'zcaron', 'brokenbar', + 'Eth', 'eth', 'Yacute', 'yacute', 'Thorn', 'thorn', 'minus', 'multiply', + 'onesuperior', 'twosuperior', 'threesuperior', 'onehalf', 'onequarter', + 'threequarters', 'franc', 'Gbreve', 'gbreve', 'Idotaccent', 'Scedilla', + 'scedilla', 'Cacute', 'cacute', 'Ccaron', 'ccaron', 'dcroat']; + +function getUnicodeRangeFor(value) { + for (var i = 0, ii = UnicodeRanges.length; i < ii; i++) { + var range = UnicodeRanges[i]; + if (value >= range.begin && value < range.end) { + return i; + } + } + return -1; +} + +function isRTLRangeFor(value) { + var range = UnicodeRanges[13]; + if (value >= range.begin && value < range.end) { + return true; + } + range = UnicodeRanges[11]; + if (value >= range.begin && value < range.end) { + return true; + } + return false; +} + +// The normalization table is obtained by filtering the Unicode characters +// database with <compat> entries. +var NormalizedUnicodes = { + '\u00A8': '\u0020\u0308', + '\u00AF': '\u0020\u0304', + '\u00B4': '\u0020\u0301', + '\u00B5': '\u03BC', + '\u00B8': '\u0020\u0327', + '\u0132': '\u0049\u004A', + '\u0133': '\u0069\u006A', + '\u013F': '\u004C\u00B7', + '\u0140': '\u006C\u00B7', + '\u0149': '\u02BC\u006E', + '\u017F': '\u0073', + '\u01C4': '\u0044\u017D', + '\u01C5': '\u0044\u017E', + '\u01C6': '\u0064\u017E', + '\u01C7': '\u004C\u004A', + '\u01C8': '\u004C\u006A', + '\u01C9': '\u006C\u006A', + '\u01CA': '\u004E\u004A', + '\u01CB': '\u004E\u006A', + '\u01CC': '\u006E\u006A', + '\u01F1': '\u0044\u005A', + '\u01F2': '\u0044\u007A', + '\u01F3': '\u0064\u007A', + '\u02D8': '\u0020\u0306', + '\u02D9': '\u0020\u0307', + '\u02DA': '\u0020\u030A', + '\u02DB': '\u0020\u0328', + '\u02DC': '\u0020\u0303', + '\u02DD': '\u0020\u030B', + '\u037A': '\u0020\u0345', + '\u0384': '\u0020\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', + '\u0F77': '\u0FB2\u0F81', + '\u0F79': '\u0FB3\u0F81', + '\u1E9A': '\u0061\u02BE', + '\u1FBD': '\u0020\u0313', + '\u1FBF': '\u0020\u0313', + '\u1FC0': '\u0020\u0342', + '\u1FFE': '\u0020\u0314', + '\u2002': '\u0020', + '\u2003': '\u0020', + '\u2004': '\u0020', + '\u2005': '\u0020', + '\u2006': '\u0020', + '\u2008': '\u0020', + '\u2009': '\u0020', + '\u200A': '\u0020', + '\u2017': '\u0020\u0333', + '\u2024': '\u002E', + '\u2025': '\u002E\u002E', + '\u2026': '\u002E\u002E\u002E', + '\u2033': '\u2032\u2032', + '\u2034': '\u2032\u2032\u2032', + '\u2036': '\u2035\u2035', + '\u2037': '\u2035\u2035\u2035', + '\u203C': '\u0021\u0021', + '\u203E': '\u0020\u0305', + '\u2047': '\u003F\u003F', + '\u2048': '\u003F\u0021', + '\u2049': '\u0021\u003F', + '\u2057': '\u2032\u2032\u2032\u2032', + '\u205F': '\u0020', + '\u20A8': '\u0052\u0073', + '\u2100': '\u0061\u002F\u0063', + '\u2101': '\u0061\u002F\u0073', + '\u2103': '\u00B0\u0043', + '\u2105': '\u0063\u002F\u006F', + '\u2106': '\u0063\u002F\u0075', + '\u2107': '\u0190', + '\u2109': '\u00B0\u0046', + '\u2116': '\u004E\u006F', + '\u2121': '\u0054\u0045\u004C', + '\u2135': '\u05D0', + '\u2136': '\u05D1', + '\u2137': '\u05D2', + '\u2138': '\u05D3', + '\u213B': '\u0046\u0041\u0058', + '\u2160': '\u0049', + '\u2161': '\u0049\u0049', + '\u2162': '\u0049\u0049\u0049', + '\u2163': '\u0049\u0056', + '\u2164': '\u0056', + '\u2165': '\u0056\u0049', + '\u2166': '\u0056\u0049\u0049', + '\u2167': '\u0056\u0049\u0049\u0049', + '\u2168': '\u0049\u0058', + '\u2169': '\u0058', + '\u216A': '\u0058\u0049', + '\u216B': '\u0058\u0049\u0049', + '\u216C': '\u004C', + '\u216D': '\u0043', + '\u216E': '\u0044', + '\u216F': '\u004D', + '\u2170': '\u0069', + '\u2171': '\u0069\u0069', + '\u2172': '\u0069\u0069\u0069', + '\u2173': '\u0069\u0076', + '\u2174': '\u0076', + '\u2175': '\u0076\u0069', + '\u2176': '\u0076\u0069\u0069', + '\u2177': '\u0076\u0069\u0069\u0069', + '\u2178': '\u0069\u0078', + '\u2179': '\u0078', + '\u217A': '\u0078\u0069', + '\u217B': '\u0078\u0069\u0069', + '\u217C': '\u006C', + '\u217D': '\u0063', + '\u217E': '\u0064', + '\u217F': '\u006D', + '\u222C': '\u222B\u222B', + '\u222D': '\u222B\u222B\u222B', + '\u222F': '\u222E\u222E', + '\u2230': '\u222E\u222E\u222E', + '\u2474': '\u0028\u0031\u0029', + '\u2475': '\u0028\u0032\u0029', + '\u2476': '\u0028\u0033\u0029', + '\u2477': '\u0028\u0034\u0029', + '\u2478': '\u0028\u0035\u0029', + '\u2479': '\u0028\u0036\u0029', + '\u247A': '\u0028\u0037\u0029', + '\u247B': '\u0028\u0038\u0029', + '\u247C': '\u0028\u0039\u0029', + '\u247D': '\u0028\u0031\u0030\u0029', + '\u247E': '\u0028\u0031\u0031\u0029', + '\u247F': '\u0028\u0031\u0032\u0029', + '\u2480': '\u0028\u0031\u0033\u0029', + '\u2481': '\u0028\u0031\u0034\u0029', + '\u2482': '\u0028\u0031\u0035\u0029', + '\u2483': '\u0028\u0031\u0036\u0029', + '\u2484': '\u0028\u0031\u0037\u0029', + '\u2485': '\u0028\u0031\u0038\u0029', + '\u2486': '\u0028\u0031\u0039\u0029', + '\u2487': '\u0028\u0032\u0030\u0029', + '\u2488': '\u0031\u002E', + '\u2489': '\u0032\u002E', + '\u248A': '\u0033\u002E', + '\u248B': '\u0034\u002E', + '\u248C': '\u0035\u002E', + '\u248D': '\u0036\u002E', + '\u248E': '\u0037\u002E', + '\u248F': '\u0038\u002E', + '\u2490': '\u0039\u002E', + '\u2491': '\u0031\u0030\u002E', + '\u2492': '\u0031\u0031\u002E', + '\u2493': '\u0031\u0032\u002E', + '\u2494': '\u0031\u0033\u002E', + '\u2495': '\u0031\u0034\u002E', + '\u2496': '\u0031\u0035\u002E', + '\u2497': '\u0031\u0036\u002E', + '\u2498': '\u0031\u0037\u002E', + '\u2499': '\u0031\u0038\u002E', + '\u249A': '\u0031\u0039\u002E', + '\u249B': '\u0032\u0030\u002E', + '\u249C': '\u0028\u0061\u0029', + '\u249D': '\u0028\u0062\u0029', + '\u249E': '\u0028\u0063\u0029', + '\u249F': '\u0028\u0064\u0029', + '\u24A0': '\u0028\u0065\u0029', + '\u24A1': '\u0028\u0066\u0029', + '\u24A2': '\u0028\u0067\u0029', + '\u24A3': '\u0028\u0068\u0029', + '\u24A4': '\u0028\u0069\u0029', + '\u24A5': '\u0028\u006A\u0029', + '\u24A6': '\u0028\u006B\u0029', + '\u24A7': '\u0028\u006C\u0029', + '\u24A8': '\u0028\u006D\u0029', + '\u24A9': '\u0028\u006E\u0029', + '\u24AA': '\u0028\u006F\u0029', + '\u24AB': '\u0028\u0070\u0029', + '\u24AC': '\u0028\u0071\u0029', + '\u24AD': '\u0028\u0072\u0029', + '\u24AE': '\u0028\u0073\u0029', + '\u24AF': '\u0028\u0074\u0029', + '\u24B0': '\u0028\u0075\u0029', + '\u24B1': '\u0028\u0076\u0029', + '\u24B2': '\u0028\u0077\u0029', + '\u24B3': '\u0028\u0078\u0029', + '\u24B4': '\u0028\u0079\u0029', + '\u24B5': '\u0028\u007A\u0029', + '\u2A0C': '\u222B\u222B\u222B\u222B', + '\u2A74': '\u003A\u003A\u003D', + '\u2A75': '\u003D\u003D', + '\u2A76': '\u003D\u003D\u003D', + '\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', + '\u3036': '\u3012', + '\u3038': '\u5341', + '\u3039': '\u5344', + '\u303A': '\u5345', + '\u309B': '\u0020\u3099', + '\u309C': '\u0020\u309A', + '\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', + '\u3200': '\u0028\u1100\u0029', + '\u3201': '\u0028\u1102\u0029', + '\u3202': '\u0028\u1103\u0029', + '\u3203': '\u0028\u1105\u0029', + '\u3204': '\u0028\u1106\u0029', + '\u3205': '\u0028\u1107\u0029', + '\u3206': '\u0028\u1109\u0029', + '\u3207': '\u0028\u110B\u0029', + '\u3208': '\u0028\u110C\u0029', + '\u3209': '\u0028\u110E\u0029', + '\u320A': '\u0028\u110F\u0029', + '\u320B': '\u0028\u1110\u0029', + '\u320C': '\u0028\u1111\u0029', + '\u320D': '\u0028\u1112\u0029', + '\u320E': '\u0028\u1100\u1161\u0029', + '\u320F': '\u0028\u1102\u1161\u0029', + '\u3210': '\u0028\u1103\u1161\u0029', + '\u3211': '\u0028\u1105\u1161\u0029', + '\u3212': '\u0028\u1106\u1161\u0029', + '\u3213': '\u0028\u1107\u1161\u0029', + '\u3214': '\u0028\u1109\u1161\u0029', + '\u3215': '\u0028\u110B\u1161\u0029', + '\u3216': '\u0028\u110C\u1161\u0029', + '\u3217': '\u0028\u110E\u1161\u0029', + '\u3218': '\u0028\u110F\u1161\u0029', + '\u3219': '\u0028\u1110\u1161\u0029', + '\u321A': '\u0028\u1111\u1161\u0029', + '\u321B': '\u0028\u1112\u1161\u0029', + '\u321C': '\u0028\u110C\u116E\u0029', + '\u321D': '\u0028\u110B\u1169\u110C\u1165\u11AB\u0029', + '\u321E': '\u0028\u110B\u1169\u1112\u116E\u0029', + '\u3220': '\u0028\u4E00\u0029', + '\u3221': '\u0028\u4E8C\u0029', + '\u3222': '\u0028\u4E09\u0029', + '\u3223': '\u0028\u56DB\u0029', + '\u3224': '\u0028\u4E94\u0029', + '\u3225': '\u0028\u516D\u0029', + '\u3226': '\u0028\u4E03\u0029', + '\u3227': '\u0028\u516B\u0029', + '\u3228': '\u0028\u4E5D\u0029', + '\u3229': '\u0028\u5341\u0029', + '\u322A': '\u0028\u6708\u0029', + '\u322B': '\u0028\u706B\u0029', + '\u322C': '\u0028\u6C34\u0029', + '\u322D': '\u0028\u6728\u0029', + '\u322E': '\u0028\u91D1\u0029', + '\u322F': '\u0028\u571F\u0029', + '\u3230': '\u0028\u65E5\u0029', + '\u3231': '\u0028\u682A\u0029', + '\u3232': '\u0028\u6709\u0029', + '\u3233': '\u0028\u793E\u0029', + '\u3234': '\u0028\u540D\u0029', + '\u3235': '\u0028\u7279\u0029', + '\u3236': '\u0028\u8CA1\u0029', + '\u3237': '\u0028\u795D\u0029', + '\u3238': '\u0028\u52B4\u0029', + '\u3239': '\u0028\u4EE3\u0029', + '\u323A': '\u0028\u547C\u0029', + '\u323B': '\u0028\u5B66\u0029', + '\u323C': '\u0028\u76E3\u0029', + '\u323D': '\u0028\u4F01\u0029', + '\u323E': '\u0028\u8CC7\u0029', + '\u323F': '\u0028\u5354\u0029', + '\u3240': '\u0028\u796D\u0029', + '\u3241': '\u0028\u4F11\u0029', + '\u3242': '\u0028\u81EA\u0029', + '\u3243': '\u0028\u81F3\u0029', + '\u32C0': '\u0031\u6708', + '\u32C1': '\u0032\u6708', + '\u32C2': '\u0033\u6708', + '\u32C3': '\u0034\u6708', + '\u32C4': '\u0035\u6708', + '\u32C5': '\u0036\u6708', + '\u32C6': '\u0037\u6708', + '\u32C7': '\u0038\u6708', + '\u32C8': '\u0039\u6708', + '\u32C9': '\u0031\u0030\u6708', + '\u32CA': '\u0031\u0031\u6708', + '\u32CB': '\u0031\u0032\u6708', + '\u3358': '\u0030\u70B9', + '\u3359': '\u0031\u70B9', + '\u335A': '\u0032\u70B9', + '\u335B': '\u0033\u70B9', + '\u335C': '\u0034\u70B9', + '\u335D': '\u0035\u70B9', + '\u335E': '\u0036\u70B9', + '\u335F': '\u0037\u70B9', + '\u3360': '\u0038\u70B9', + '\u3361': '\u0039\u70B9', + '\u3362': '\u0031\u0030\u70B9', + '\u3363': '\u0031\u0031\u70B9', + '\u3364': '\u0031\u0032\u70B9', + '\u3365': '\u0031\u0033\u70B9', + '\u3366': '\u0031\u0034\u70B9', + '\u3367': '\u0031\u0035\u70B9', + '\u3368': '\u0031\u0036\u70B9', + '\u3369': '\u0031\u0037\u70B9', + '\u336A': '\u0031\u0038\u70B9', + '\u336B': '\u0031\u0039\u70B9', + '\u336C': '\u0032\u0030\u70B9', + '\u336D': '\u0032\u0031\u70B9', + '\u336E': '\u0032\u0032\u70B9', + '\u336F': '\u0032\u0033\u70B9', + '\u3370': '\u0032\u0034\u70B9', + '\u33E0': '\u0031\u65E5', + '\u33E1': '\u0032\u65E5', + '\u33E2': '\u0033\u65E5', + '\u33E3': '\u0034\u65E5', + '\u33E4': '\u0035\u65E5', + '\u33E5': '\u0036\u65E5', + '\u33E6': '\u0037\u65E5', + '\u33E7': '\u0038\u65E5', + '\u33E8': '\u0039\u65E5', + '\u33E9': '\u0031\u0030\u65E5', + '\u33EA': '\u0031\u0031\u65E5', + '\u33EB': '\u0031\u0032\u65E5', + '\u33EC': '\u0031\u0033\u65E5', + '\u33ED': '\u0031\u0034\u65E5', + '\u33EE': '\u0031\u0035\u65E5', + '\u33EF': '\u0031\u0036\u65E5', + '\u33F0': '\u0031\u0037\u65E5', + '\u33F1': '\u0031\u0038\u65E5', + '\u33F2': '\u0031\u0039\u65E5', + '\u33F3': '\u0032\u0030\u65E5', + '\u33F4': '\u0032\u0031\u65E5', + '\u33F5': '\u0032\u0032\u65E5', + '\u33F6': '\u0032\u0033\u65E5', + '\u33F7': '\u0032\u0034\u65E5', + '\u33F8': '\u0032\u0035\u65E5', + '\u33F9': '\u0032\u0036\u65E5', + '\u33FA': '\u0032\u0037\u65E5', + '\u33FB': '\u0032\u0038\u65E5', + '\u33FC': '\u0032\u0039\u65E5', + '\u33FD': '\u0033\u0030\u65E5', + '\u33FE': '\u0033\u0031\u65E5', + '\uFB00': '\u0066\u0066', + '\uFB01': '\u0066\u0069', + '\uFB02': '\u0066\u006C', + '\uFB03': '\u0066\u0066\u0069', + '\uFB04': '\u0066\u0066\u006C', + '\uFB05': '\u017F\u0074', + '\uFB06': '\u0073\u0074', + '\uFB13': '\u0574\u0576', + '\uFB14': '\u0574\u0565', + '\uFB15': '\u0574\u056B', + '\uFB16': '\u057E\u0576', + '\uFB17': '\u0574\u056D', + '\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': '\u0677', + '\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': '\u0020\u064C\u0651', + '\uFC5F': '\u0020\u064D\u0651', + '\uFC60': '\u0020\u064E\u0651', + '\uFC61': '\u0020\u064F\u0651', + '\uFC62': '\u0020\u0650\u0651', + '\uFC63': '\u0020\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', + '\uFE49': '\u203E', + '\uFE4A': '\u203E', + '\uFE4B': '\u203E', + '\uFE4C': '\u203E', + '\uFE4D': '\u005F', + '\uFE4E': '\u005F', + '\uFE4F': '\u005F', + '\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' +}; + +function reverseIfRtl(chars) { + var charsLength = chars.length; + //reverse an arabic ligature + if (charsLength <= 1 || !isRTLRangeFor(chars.charCodeAt(0))) { + return chars; + } + var s = ''; + for (var ii = charsLength - 1; ii >= 0; ii--) { + s += chars[ii]; + } + return s; +} + +function adjustWidths(properties) { + if (properties.fontMatrix[0] === FONT_IDENTITY_MATRIX[0]) { + return; + } + // adjusting width to fontMatrix scale + var scale = 0.001 / properties.fontMatrix[0]; + var glyphsWidths = properties.widths; + for (var glyph in glyphsWidths) { + glyphsWidths[glyph] *= scale; + } + properties.defaultWidth *= scale; +} + +function getFontType(type, subtype) { + switch (type) { + case 'Type1': + return subtype === 'Type1C' ? FontType.TYPE1C : FontType.TYPE1; + case 'CIDFontType0': + return subtype === 'CIDFontType0C' ? FontType.CIDFONTTYPE0C : + FontType.CIDFONTTYPE0; + case 'OpenType': + return FontType.OPENTYPE; + case 'TrueType': + return FontType.TRUETYPE; + case 'CIDFontType2': + return FontType.CIDFONTTYPE2; + case 'MMType1': + return FontType.MMTYPE1; + case 'Type0': + return FontType.TYPE0; + default: + return FontType.UNKNOWN; + } +} + +var Glyph = (function GlyphClosure() { + function Glyph(fontChar, unicode, accent, width, vmetric, operatorListId) { + this.fontChar = fontChar; + this.unicode = unicode; + this.accent = accent; + this.width = width; + this.vmetric = vmetric; + this.operatorListId = operatorListId; + } + + Glyph.prototype.matchesForCache = + function(fontChar, unicode, accent, width, vmetric, operatorListId) { + return this.fontChar === fontChar && + this.unicode === unicode && + this.accent === accent && + this.width === width && + this.vmetric === vmetric && + this.operatorListId === operatorListId; + }; + + return Glyph; +})(); + +var ToUnicodeMap = (function ToUnicodeMapClosure() { + function ToUnicodeMap(cmap) { + // The elements of this._map can be integers or strings, depending on how + // |cmap| was created. + this._map = cmap; + } + + ToUnicodeMap.prototype = { + get length() { + return this._map.length; + }, + + forEach: function(callback) { + for (var charCode in this._map) { + callback(charCode, this._map[charCode].charCodeAt(0)); + } + }, + + has: function(i) { + return this._map[i] !== undefined; + }, + + get: function(i) { + return this._map[i]; + }, + + charCodeOf: function(v) { + return this._map.indexOf(v); + } + }; + + return ToUnicodeMap; +})(); + +var IdentityToUnicodeMap = (function IdentityToUnicodeMapClosure() { + function IdentityToUnicodeMap(firstChar, lastChar) { + this.firstChar = firstChar; + this.lastChar = lastChar; + } + + IdentityToUnicodeMap.prototype = { + get length() { + return (this.lastChar + 1) - this.firstChar; + }, + + forEach: function (callback) { + for (var i = this.firstChar, ii = this.lastChar; i <= ii; i++) { + callback(i, i); + } + }, + + has: function (i) { + return this.firstChar <= i && i <= this.lastChar; + }, + + get: function (i) { + if (this.firstChar <= i && i <= this.lastChar) { + return String.fromCharCode(i); + } + return undefined; + }, + + charCodeOf: function (v) { + error('should not call .charCodeOf'); + } + }; + + return IdentityToUnicodeMap; +})(); + +var OpenTypeFileBuilder = (function OpenTypeFileBuilderClosure() { + function writeInt16(dest, offset, num) { + dest[offset] = (num >> 8) & 0xFF; + dest[offset + 1] = num & 0xFF; + } + + function writeInt32(dest, offset, num) { + dest[offset] = (num >> 24) & 0xFF; + dest[offset + 1] = (num >> 16) & 0xFF; + dest[offset + 2] = (num >> 8) & 0xFF; + dest[offset + 3] = num & 0xFF; + } + + function writeData(dest, offset, data) { + var i, ii; + if (data instanceof Uint8Array) { + dest.set(data, offset); + } else if (typeof data === 'string') { + for (i = 0, ii = data.length; i < ii; i++) { + dest[offset++] = data.charCodeAt(i) & 0xFF; + } + } else { + // treating everything else as array + for (i = 0, ii = data.length; i < ii; i++) { + dest[offset++] = data[i] & 0xFF; + } + } + } + + function OpenTypeFileBuilder(sfnt) { + this.sfnt = sfnt; + this.tables = Object.create(null); + } + + OpenTypeFileBuilder.getSearchParams = + function OpenTypeFileBuilder_getSearchParams(entriesCount, entrySize) { + var maxPower2 = 1, log2 = 0; + while ((maxPower2 ^ entriesCount) > maxPower2) { + maxPower2 <<= 1; + log2++; + } + var searchRange = maxPower2 * entrySize; + return { + range: searchRange, + entry: log2, + rangeShift: entrySize * entriesCount - searchRange + }; + }; + + var OTF_HEADER_SIZE = 12; + var OTF_TABLE_ENTRY_SIZE = 16; + + OpenTypeFileBuilder.prototype = { + toArray: function OpenTypeFileBuilder_toArray() { + var sfnt = this.sfnt; + + // Tables needs to be written by ascendant alphabetic order + var tables = this.tables; + var tablesNames = Object.keys(tables); + tablesNames.sort(); + var numTables = tablesNames.length; + + var i, j, jj, table, tableName; + // layout the tables data + var offset = OTF_HEADER_SIZE + numTables * OTF_TABLE_ENTRY_SIZE; + var tableOffsets = [offset]; + for (i = 0; i < numTables; i++) { + table = tables[tablesNames[i]]; + var paddedLength = ((table.length + 3) & ~3) >>> 0; + offset += paddedLength; + tableOffsets.push(offset); + } + + var file = new Uint8Array(offset); + // write the table data first (mostly for checksum) + for (i = 0; i < numTables; i++) { + table = tables[tablesNames[i]]; + writeData(file, tableOffsets[i], table); + } + + // sfnt version (4 bytes) + if (sfnt === 'true') { + // Windows hates the Mac TrueType sfnt version number + sfnt = string32(0x00010000); + } + file[0] = sfnt.charCodeAt(0) & 0xFF; + file[1] = sfnt.charCodeAt(1) & 0xFF; + file[2] = sfnt.charCodeAt(2) & 0xFF; + file[3] = sfnt.charCodeAt(3) & 0xFF; + + // numTables (2 bytes) + writeInt16(file, 4, numTables); + + var searchParams = OpenTypeFileBuilder.getSearchParams(numTables, 16); + + // searchRange (2 bytes) + writeInt16(file, 6, searchParams.range); + // entrySelector (2 bytes) + writeInt16(file, 8, searchParams.entry); + // rangeShift (2 bytes) + writeInt16(file, 10, searchParams.rangeShift); + + offset = OTF_HEADER_SIZE; + // writing table entries + for (i = 0; i < numTables; i++) { + tableName = tablesNames[i]; + file[offset] = tableName.charCodeAt(0) & 0xFF; + file[offset + 1] = tableName.charCodeAt(1) & 0xFF; + file[offset + 2] = tableName.charCodeAt(2) & 0xFF; + file[offset + 3] = tableName.charCodeAt(3) & 0xFF; + + // checksum + var checksum = 0; + for (j = tableOffsets[i], jj = tableOffsets[i + 1]; j < jj; j += 4) { + var quad = (file[j] << 24) + (file[j + 1] << 16) + + (file[j + 2] << 8) + file[j + 3]; + checksum = (checksum + quad) | 0; + } + writeInt32(file, offset + 4, checksum); + + // offset + writeInt32(file, offset + 8, tableOffsets[i]); + // length + writeInt32(file, offset + 12, tables[tableName].length); + + offset += OTF_TABLE_ENTRY_SIZE; + } + return file; + }, + + addTable: function OpenTypeFileBuilder_addTable(tag, data) { + if (tag in this.tables) { + throw new Error('Table ' + tag + ' already exists'); + } + this.tables[tag] = data; + } + }; + + return OpenTypeFileBuilder; +})(); + +/** + * 'Font' is the class the outside world should use, it encapsulate all the font + * decoding logics whatever type it is (assuming the font type is supported). + * + * For example to read a Type1 font and to attach it to the document: + * var type1Font = new Font("MyFontName", binaryFile, propertiesObject); + * type1Font.bind(); + */ +var Font = (function FontClosure() { + function Font(name, file, properties) { + var charCode, glyphName, fontChar; + + this.name = name; + this.loadedName = properties.loadedName; + this.isType3Font = properties.isType3Font; + this.sizes = []; + + this.glyphCache = {}; + + var names = name.split('+'); + names = names.length > 1 ? names[1] : names[0]; + names = names.split(/[-,_]/g)[0]; + this.isSerifFont = !!(properties.flags & FontFlags.Serif); + this.isSymbolicFont = !!(properties.flags & FontFlags.Symbolic); + this.isMonospace = !!(properties.flags & FontFlags.FixedPitch); + + var type = properties.type; + var subtype = properties.subtype; + this.type = type; + + this.fallbackName = (this.isMonospace ? 'monospace' : + (this.isSerifFont ? 'serif' : 'sans-serif')); + + this.differences = properties.differences; + this.widths = properties.widths; + this.defaultWidth = properties.defaultWidth; + this.composite = properties.composite; + this.wideChars = properties.wideChars; + this.cMap = properties.cMap; + this.ascent = properties.ascent / PDF_GLYPH_SPACE_UNITS; + this.descent = properties.descent / PDF_GLYPH_SPACE_UNITS; + this.fontMatrix = properties.fontMatrix; + + this.toUnicode = properties.toUnicode = this.buildToUnicode(properties); + + this.toFontChar = []; + + if (properties.type === 'Type3') { + for (charCode = 0; charCode < 256; charCode++) { + this.toFontChar[charCode] = (this.differences[charCode] || + properties.defaultEncoding[charCode]); + } + this.fontType = FontType.TYPE3; + return; + } + + this.cidEncoding = properties.cidEncoding; + this.vertical = properties.vertical; + if (this.vertical) { + this.vmetrics = properties.vmetrics; + this.defaultVMetrics = properties.defaultVMetrics; + } + + if (!file || file.isEmpty) { + if (file) { + // Some bad PDF generators will include empty font files, + // attempting to recover by assuming that no file exists. + warn('Font file is empty in "' + name + '" (' + this.loadedName + ')'); + } + + this.missingFile = true; + // The file data is not specified. Trying to fix the font name + // to be used with the canvas.font. + var fontName = name.replace(/[,_]/g, '-'); + var isStandardFont = !!stdFontMap[fontName] || + !!(nonStdFontMap[fontName] && stdFontMap[nonStdFontMap[fontName]]); + fontName = stdFontMap[fontName] || nonStdFontMap[fontName] || fontName; + + this.bold = (fontName.search(/bold/gi) !== -1); + this.italic = ((fontName.search(/oblique/gi) !== -1) || + (fontName.search(/italic/gi) !== -1)); + + // Use 'name' instead of 'fontName' here because the original + // name ArialBlack for example will be replaced by Helvetica. + this.black = (name.search(/Black/g) !== -1); + + // if at least one width is present, remeasure all chars when exists + this.remeasure = Object.keys(this.widths).length > 0; + if (isStandardFont && type === 'CIDFontType2' && + properties.cidEncoding.indexOf('Identity-') === 0) { + // Standard fonts might be embedded as CID font without glyph mapping. + // Building one based on GlyphMapForStandardFonts. + var map = []; + for (var code in GlyphMapForStandardFonts) { + map[+code] = GlyphMapForStandardFonts[code]; + } + var isIdentityUnicode = this.toUnicode instanceof IdentityToUnicodeMap; + if (!isIdentityUnicode) { + this.toUnicode.forEach(function(charCode, unicodeCharCode) { + map[+charCode] = unicodeCharCode; + }); + } + this.toFontChar = map; + this.toUnicode = new ToUnicodeMap(map); + } else if (/Symbol/i.test(fontName)) { + var symbols = Encodings.SymbolSetEncoding; + for (charCode in symbols) { + fontChar = GlyphsUnicode[symbols[charCode]]; + if (!fontChar) { + continue; + } + this.toFontChar[charCode] = fontChar; + } + for (charCode in properties.differences) { + fontChar = GlyphsUnicode[properties.differences[charCode]]; + if (!fontChar) { + continue; + } + this.toFontChar[charCode] = fontChar; + } + } else if (/Dingbats/i.test(fontName)) { + if (/Wingdings/i.test(name)) { + warn('Wingdings font without embedded font file, ' + + 'falling back to the ZapfDingbats encoding.'); + } + var dingbats = Encodings.ZapfDingbatsEncoding; + for (charCode in dingbats) { + fontChar = DingbatsGlyphsUnicode[dingbats[charCode]]; + if (!fontChar) { + continue; + } + this.toFontChar[charCode] = fontChar; + } + for (charCode in properties.differences) { + fontChar = DingbatsGlyphsUnicode[properties.differences[charCode]]; + if (!fontChar) { + continue; + } + this.toFontChar[charCode] = fontChar; + } + } else if (isStandardFont) { + this.toFontChar = []; + for (charCode in properties.defaultEncoding) { + glyphName = (properties.differences[charCode] || + properties.defaultEncoding[charCode]); + this.toFontChar[charCode] = GlyphsUnicode[glyphName]; + } + } else { + var unicodeCharCode, notCidFont = (type.indexOf('CIDFontType') === -1); + this.toUnicode.forEach(function(charCode, unicodeCharCode) { + if (notCidFont) { + glyphName = (properties.differences[charCode] || + properties.defaultEncoding[charCode]); + unicodeCharCode = (GlyphsUnicode[glyphName] || unicodeCharCode); + } + this.toFontChar[charCode] = unicodeCharCode; + }.bind(this)); + } + this.loadedName = fontName.split('-')[0]; + this.loading = false; + this.fontType = getFontType(type, subtype); + return; + } + + // Some fonts might use wrong font types for Type1C or CIDFontType0C + if (subtype === 'Type1C' && (type !== 'Type1' && type !== 'MMType1')) { + // Some TrueType fonts by mistake claim Type1C + if (isTrueTypeFile(file)) { + subtype = 'TrueType'; + } else { + type = 'Type1'; + } + } + if (subtype === 'CIDFontType0C' && type !== 'CIDFontType0') { + type = 'CIDFontType0'; + } + if (subtype === 'OpenType') { + type = 'OpenType'; + } + // Some CIDFontType0C fonts by mistake claim CIDFontType0. + if (type === 'CIDFontType0') { + subtype = isType1File(file) ? 'CIDFontType0' : 'CIDFontType0C'; + } + + var data; + switch (type) { + case 'MMType1': + info('MMType1 font (' + name + '), falling back to Type1.'); + /* falls through */ + case 'Type1': + case 'CIDFontType0': + this.mimetype = 'font/opentype'; + + var cff = (subtype === 'Type1C' || subtype === 'CIDFontType0C') ? + new CFFFont(file, properties) : new Type1Font(name, file, properties); + + adjustWidths(properties); + + // Wrap the CFF data inside an OTF font file + data = this.convert(name, cff, properties); + break; + + case 'OpenType': + case 'TrueType': + case 'CIDFontType2': + this.mimetype = 'font/opentype'; + + // Repair the TrueType file. It is can be damaged in the point of + // view of the sanitizer + data = this.checkAndRepair(name, file, properties); + if (this.isOpenType) { + type = 'OpenType'; + } + break; + + default: + error('Font ' + type + ' is not supported'); + break; + } + + this.data = data; + this.fontType = getFontType(type, subtype); + + // Transfer some properties again that could change during font conversion + this.fontMatrix = properties.fontMatrix; + this.widths = properties.widths; + this.defaultWidth = properties.defaultWidth; + this.encoding = properties.baseEncoding; + this.seacMap = properties.seacMap; + + this.loading = true; + } + + Font.getFontID = (function () { + var ID = 1; + return function Font_getFontID() { + return String(ID++); + }; + })(); + + function int16(b0, b1) { + return (b0 << 8) + b1; + } + + function int32(b0, b1, b2, b3) { + return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3; + } + + function string16(value) { + return String.fromCharCode((value >> 8) & 0xff, value & 0xff); + } + + function safeString16(value) { + // clamp value to the 16-bit int range + value = (value > 0x7FFF ? 0x7FFF : (value < -0x8000 ? -0x8000 : value)); + return String.fromCharCode((value >> 8) & 0xff, value & 0xff); + } + + function isTrueTypeFile(file) { + var header = file.peekBytes(4); + return readUint32(header, 0) === 0x00010000; + } + + function isType1File(file) { + var header = file.peekBytes(2); + // All Type1 font programs must begin with the comment '%!' (0x25 + 0x21). + if (header[0] === 0x25 && header[1] === 0x21) { + return true; + } + // ... obviously some fonts violate that part of the specification, + // please refer to the comment in |Type1Font| below. + if (header[0] === 0x80 && header[1] === 0x01) { // pfb file header. + return true; + } + return false; + } + + /** + * Helper function for |adjustMapping|. + * @return {boolean} + */ + function isProblematicUnicodeLocation(code) { + if (code <= 0x1F) { // Control chars + return true; + } + if (code >= 0x80 && code <= 0x9F) { // Control chars + return true; + } + if ((code >= 0x2000 && code <= 0x200F) || // General punctuation chars + (code >= 0x2028 && code <= 0x202F) || + (code >= 0x2060 && code <= 0x206F)) { + return true; + } + if (code >= 0xFFF0 && code <= 0xFFFF) { // Specials Unicode block + return true; + } + switch (code) { + case 0x7F: // Control char + case 0xA0: // Non breaking space + case 0xAD: // Soft hyphen + case 0x0E33: // Thai character SARA AM + case 0x2011: // Non breaking hyphen + case 0x205F: // Medium mathematical space + case 0x25CC: // Dotted circle (combining mark) + return true; + } + return false; + } + + /** + * Rebuilds the char code to glyph ID map by trying to replace the char codes + * with their unicode value. It also moves char codes that are in known + * problematic locations. + * @return {Object} Two properties: + * 'toFontChar' - maps original char codes(the value that will be read + * from commands such as show text) to the char codes that will be used in the + * font that we build + * 'charCodeToGlyphId' - maps the new font char codes to glyph ids + */ + function adjustMapping(charCodeToGlyphId, properties) { + var toUnicode = properties.toUnicode; + var isSymbolic = !!(properties.flags & FontFlags.Symbolic); + var isIdentityUnicode = + properties.toUnicode instanceof IdentityToUnicodeMap; + var newMap = Object.create(null); + var toFontChar = []; + var usedFontCharCodes = []; + var nextAvailableFontCharCode = PRIVATE_USE_OFFSET_START; + for (var originalCharCode in charCodeToGlyphId) { + originalCharCode |= 0; + var glyphId = charCodeToGlyphId[originalCharCode]; + var fontCharCode = originalCharCode; + // First try to map the value to a unicode position if a non identity map + // was created. + if (!isIdentityUnicode && toUnicode.has(originalCharCode)) { + var unicode = toUnicode.get(fontCharCode); + // TODO: Try to map ligatures to the correct spot. + if (unicode.length === 1) { + fontCharCode = unicode.charCodeAt(0); + } + } + // Try to move control characters, special characters and already mapped + // characters to the private use area since they will not be drawn by + // canvas if left in their current position. Also, move characters if the + // font was symbolic and there is only an identity unicode map since the + // characters probably aren't in the correct position (fixes an issue + // with firefox and thuluthfont). + if ((usedFontCharCodes[fontCharCode] !== undefined || + isProblematicUnicodeLocation(fontCharCode) || + (isSymbolic && isIdentityUnicode)) && + nextAvailableFontCharCode <= PRIVATE_USE_OFFSET_END) { // Room left. + // Loop to try and find a free spot in the private use area. + do { + fontCharCode = nextAvailableFontCharCode++; + + if (SKIP_PRIVATE_USE_RANGE_F000_TO_F01F && fontCharCode === 0xF000) { + fontCharCode = 0xF020; + nextAvailableFontCharCode = fontCharCode + 1; + } + + } while (usedFontCharCodes[fontCharCode] !== undefined && + nextAvailableFontCharCode <= PRIVATE_USE_OFFSET_END); + } + + newMap[fontCharCode] = glyphId; + toFontChar[originalCharCode] = fontCharCode; + usedFontCharCodes[fontCharCode] = true; + } + return { + toFontChar: toFontChar, + charCodeToGlyphId: newMap, + nextAvailableFontCharCode: nextAvailableFontCharCode + }; + } + + function getRanges(glyphs) { + // Array.sort() sorts by characters, not numerically, so convert to an + // array of characters. + var codes = []; + for (var charCode in glyphs) { + codes.push({ fontCharCode: charCode | 0, glyphId: glyphs[charCode] }); + } + codes.sort(function fontGetRangesSort(a, b) { + return a.fontCharCode - b.fontCharCode; + }); + + // Split the sorted codes into ranges. + var ranges = []; + var length = codes.length; + for (var n = 0; n < length; ) { + var start = codes[n].fontCharCode; + var codeIndices = [codes[n].glyphId]; + ++n; + var end = start; + while (n < length && end + 1 === codes[n].fontCharCode) { + codeIndices.push(codes[n].glyphId); + ++end; + ++n; + if (end === 0xFFFF) { + break; + } + } + ranges.push([start, end, codeIndices]); + } + + return ranges; + } + + function createCmapTable(glyphs) { + var ranges = getRanges(glyphs); + var numTables = ranges[ranges.length - 1][1] > 0xFFFF ? 2 : 1; + var cmap = '\x00\x00' + // version + string16(numTables) + // numTables + '\x00\x03' + // platformID + '\x00\x01' + // encodingID + string32(4 + numTables * 8); // start of the table record + + var i, ii, j, jj; + for (i = ranges.length - 1; i >= 0; --i) { + if (ranges[i][0] <= 0xFFFF) { break; } + } + var bmpLength = i + 1; + + if (ranges[i][0] < 0xFFFF && ranges[i][1] === 0xFFFF) { + ranges[i][1] = 0xFFFE; + } + var trailingRangesCount = ranges[i][1] < 0xFFFF ? 1 : 0; + var segCount = bmpLength + trailingRangesCount; + var searchParams = OpenTypeFileBuilder.getSearchParams(segCount, 2); + + // Fill up the 4 parallel arrays describing the segments. + var startCount = ''; + var endCount = ''; + var idDeltas = ''; + var idRangeOffsets = ''; + var glyphsIds = ''; + var bias = 0; + + var range, start, end, codes; + for (i = 0, ii = bmpLength; i < ii; i++) { + range = ranges[i]; + start = range[0]; + end = range[1]; + startCount += string16(start); + endCount += string16(end); + codes = range[2]; + var contiguous = true; + for (j = 1, jj = codes.length; j < jj; ++j) { + if (codes[j] !== codes[j - 1] + 1) { + contiguous = false; + break; + } + } + if (!contiguous) { + var offset = (segCount - i) * 2 + bias * 2; + bias += (end - start + 1); + + idDeltas += string16(0); + idRangeOffsets += string16(offset); + + for (j = 0, jj = codes.length; j < jj; ++j) { + glyphsIds += string16(codes[j]); + } + } else { + var startCode = codes[0]; + + idDeltas += string16((startCode - start) & 0xFFFF); + idRangeOffsets += string16(0); + } + } + + if (trailingRangesCount > 0) { + endCount += '\xFF\xFF'; + startCount += '\xFF\xFF'; + idDeltas += '\x00\x01'; + idRangeOffsets += '\x00\x00'; + } + + var format314 = '\x00\x00' + // language + string16(2 * segCount) + + string16(searchParams.range) + + string16(searchParams.entry) + + string16(searchParams.rangeShift) + + endCount + '\x00\x00' + startCount + + idDeltas + idRangeOffsets + glyphsIds; + + var format31012 = ''; + var header31012 = ''; + if (numTables > 1) { + cmap += '\x00\x03' + // platformID + '\x00\x0A' + // encodingID + string32(4 + numTables * 8 + + 4 + format314.length); // start of the table record + format31012 = ''; + for (i = 0, ii = ranges.length; i < ii; i++) { + range = ranges[i]; + start = range[0]; + codes = range[2]; + var code = codes[0]; + for (j = 1, jj = codes.length; j < jj; ++j) { + if (codes[j] !== codes[j - 1] + 1) { + end = range[0] + j - 1; + format31012 += string32(start) + // startCharCode + string32(end) + // endCharCode + string32(code); // startGlyphID + start = end + 1; + code = codes[j]; + } + } + format31012 += string32(start) + // startCharCode + string32(range[1]) + // endCharCode + string32(code); // startGlyphID + } + header31012 = '\x00\x0C' + // format + '\x00\x00' + // reserved + string32(format31012.length + 16) + // length + '\x00\x00\x00\x00' + // language + string32(format31012.length / 12); // nGroups + } + + return cmap + '\x00\x04' + // format + string16(format314.length + 4) + // length + format314 + header31012 + format31012; + } + + function validateOS2Table(os2) { + var stream = new Stream(os2.data); + var version = stream.getUint16(); + // TODO verify all OS/2 tables fields, but currently we validate only those + // that give us issues + stream.getBytes(60); // skipping type, misc sizes, panose, unicode ranges + var selection = stream.getUint16(); + if (version < 4 && (selection & 0x0300)) { + return false; + } + var firstChar = stream.getUint16(); + var lastChar = stream.getUint16(); + if (firstChar > lastChar) { + return false; + } + stream.getBytes(6); // skipping sTypoAscender/Descender/LineGap + var usWinAscent = stream.getUint16(); + if (usWinAscent === 0) { // makes font unreadable by windows + return false; + } + + // OS/2 appears to be valid, resetting some fields + os2.data[8] = os2.data[9] = 0; // IE rejects fonts if fsType != 0 + return true; + } + + function createOS2Table(properties, charstrings, override) { + override = override || { + unitsPerEm: 0, + yMax: 0, + yMin: 0, + ascent: 0, + descent: 0 + }; + + var ulUnicodeRange1 = 0; + var ulUnicodeRange2 = 0; + var ulUnicodeRange3 = 0; + var ulUnicodeRange4 = 0; + + var firstCharIndex = null; + var lastCharIndex = 0; + + if (charstrings) { + for (var code in charstrings) { + code |= 0; + if (firstCharIndex > code || !firstCharIndex) { + firstCharIndex = code; + } + if (lastCharIndex < code) { + lastCharIndex = code; + } + + var position = getUnicodeRangeFor(code); + if (position < 32) { + ulUnicodeRange1 |= 1 << position; + } else if (position < 64) { + ulUnicodeRange2 |= 1 << position - 32; + } else if (position < 96) { + ulUnicodeRange3 |= 1 << position - 64; + } else if (position < 123) { + ulUnicodeRange4 |= 1 << position - 96; + } else { + error('Unicode ranges Bits > 123 are reserved for internal usage'); + } + } + } else { + // TODO + firstCharIndex = 0; + lastCharIndex = 255; + } + + var bbox = properties.bbox || [0, 0, 0, 0]; + var unitsPerEm = (override.unitsPerEm || + 1 / (properties.fontMatrix || FONT_IDENTITY_MATRIX)[0]); + + // if the font units differ to the PDF glyph space units + // then scale up the values + var scale = (properties.ascentScaled ? 1.0 : + unitsPerEm / PDF_GLYPH_SPACE_UNITS); + + var typoAscent = (override.ascent || + Math.round(scale * (properties.ascent || bbox[3]))); + var typoDescent = (override.descent || + Math.round(scale * (properties.descent || bbox[1]))); + if (typoDescent > 0 && properties.descent > 0 && bbox[1] < 0) { + typoDescent = -typoDescent; // fixing incorrect descent + } + var winAscent = override.yMax || typoAscent; + var winDescent = -override.yMin || -typoDescent; + + return '\x00\x03' + // version + '\x02\x24' + // xAvgCharWidth + '\x01\xF4' + // usWeightClass + '\x00\x05' + // usWidthClass + '\x00\x00' + // fstype (0 to let the font loads via font-face on IE) + '\x02\x8A' + // ySubscriptXSize + '\x02\xBB' + // ySubscriptYSize + '\x00\x00' + // ySubscriptXOffset + '\x00\x8C' + // ySubscriptYOffset + '\x02\x8A' + // ySuperScriptXSize + '\x02\xBB' + // ySuperScriptYSize + '\x00\x00' + // ySuperScriptXOffset + '\x01\xDF' + // ySuperScriptYOffset + '\x00\x31' + // yStrikeOutSize + '\x01\x02' + // yStrikeOutPosition + '\x00\x00' + // sFamilyClass + '\x00\x00\x06' + + String.fromCharCode(properties.fixedPitch ? 0x09 : 0x00) + + '\x00\x00\x00\x00\x00\x00' + // Panose + string32(ulUnicodeRange1) + // ulUnicodeRange1 (Bits 0-31) + string32(ulUnicodeRange2) + // ulUnicodeRange2 (Bits 32-63) + string32(ulUnicodeRange3) + // ulUnicodeRange3 (Bits 64-95) + string32(ulUnicodeRange4) + // ulUnicodeRange4 (Bits 96-127) + '\x2A\x32\x31\x2A' + // achVendID + string16(properties.italicAngle ? 1 : 0) + // fsSelection + string16(firstCharIndex || + properties.firstChar) + // usFirstCharIndex + string16(lastCharIndex || properties.lastChar) + // usLastCharIndex + string16(typoAscent) + // sTypoAscender + string16(typoDescent) + // sTypoDescender + '\x00\x64' + // sTypoLineGap (7%-10% of the unitsPerEM value) + string16(winAscent) + // usWinAscent + string16(winDescent) + // usWinDescent + '\x00\x00\x00\x00' + // ulCodePageRange1 (Bits 0-31) + '\x00\x00\x00\x00' + // ulCodePageRange2 (Bits 32-63) + string16(properties.xHeight) + // sxHeight + string16(properties.capHeight) + // sCapHeight + string16(0) + // usDefaultChar + string16(firstCharIndex || properties.firstChar) + // usBreakChar + '\x00\x03'; // usMaxContext + } + + function createPostTable(properties) { + var angle = Math.floor(properties.italicAngle * (Math.pow(2, 16))); + return ('\x00\x03\x00\x00' + // Version number + string32(angle) + // italicAngle + '\x00\x00' + // underlinePosition + '\x00\x00' + // underlineThickness + string32(properties.fixedPitch) + // isFixedPitch + '\x00\x00\x00\x00' + // minMemType42 + '\x00\x00\x00\x00' + // maxMemType42 + '\x00\x00\x00\x00' + // minMemType1 + '\x00\x00\x00\x00'); // maxMemType1 + } + + function createNameTable(name, proto) { + if (!proto) { + proto = [[], []]; // no strings and unicode strings + } + + var strings = [ + proto[0][0] || 'Original licence', // 0.Copyright + proto[0][1] || name, // 1.Font family + proto[0][2] || 'Unknown', // 2.Font subfamily (font weight) + proto[0][3] || 'uniqueID', // 3.Unique ID + proto[0][4] || name, // 4.Full font name + proto[0][5] || 'Version 0.11', // 5.Version + proto[0][6] || '', // 6.Postscript name + proto[0][7] || 'Unknown', // 7.Trademark + proto[0][8] || 'Unknown', // 8.Manufacturer + proto[0][9] || 'Unknown' // 9.Designer + ]; + + // Mac want 1-byte per character strings while Windows want + // 2-bytes per character, so duplicate the names table + var stringsUnicode = []; + var i, ii, j, jj, str; + for (i = 0, ii = strings.length; i < ii; i++) { + str = proto[1][i] || strings[i]; + + var strBufUnicode = []; + for (j = 0, jj = str.length; j < jj; j++) { + strBufUnicode.push(string16(str.charCodeAt(j))); + } + stringsUnicode.push(strBufUnicode.join('')); + } + + var names = [strings, stringsUnicode]; + var platforms = ['\x00\x01', '\x00\x03']; + var encodings = ['\x00\x00', '\x00\x01']; + var languages = ['\x00\x00', '\x04\x09']; + + var namesRecordCount = strings.length * platforms.length; + var nameTable = + '\x00\x00' + // format + string16(namesRecordCount) + // Number of names Record + string16(namesRecordCount * 12 + 6); // Storage + + // Build the name records field + var strOffset = 0; + for (i = 0, ii = platforms.length; i < ii; i++) { + var strs = names[i]; + for (j = 0, jj = strs.length; j < jj; j++) { + str = strs[j]; + var nameRecord = + platforms[i] + // platform ID + encodings[i] + // encoding ID + languages[i] + // language ID + string16(j) + // name ID + string16(str.length) + + string16(strOffset); + nameTable += nameRecord; + strOffset += str.length; + } + } + + nameTable += strings.join('') + stringsUnicode.join(''); + return nameTable; + } + + Font.prototype = { + name: null, + font: null, + mimetype: null, + encoding: null, + get renderer() { + var renderer = FontRendererFactory.create(this); + return shadow(this, 'renderer', renderer); + }, + + exportData: function Font_exportData() { + var data = {}; + for (var i in this) { + if (this.hasOwnProperty(i)) { + data[i] = this[i]; + } + } + return data; + }, + + checkAndRepair: function Font_checkAndRepair(name, font, properties) { + function readTableEntry(file) { + var tag = bytesToString(file.getBytes(4)); + + var checksum = file.getInt32(); + var offset = file.getInt32() >>> 0; + var length = file.getInt32() >>> 0; + + // Read the table associated data + var previousPosition = file.pos; + file.pos = file.start ? file.start : 0; + file.skip(offset); + var data = file.getBytes(length); + file.pos = previousPosition; + + if (tag === 'head') { + // clearing checksum adjustment + data[8] = data[9] = data[10] = data[11] = 0; + data[17] |= 0x20; //Set font optimized for cleartype flag + } + + return { + tag: tag, + checksum: checksum, + length: length, + offset: offset, + data: data + }; + } + + function readOpenTypeHeader(ttf) { + return { + version: bytesToString(ttf.getBytes(4)), + numTables: ttf.getUint16(), + searchRange: ttf.getUint16(), + entrySelector: ttf.getUint16(), + rangeShift: ttf.getUint16() + }; + } + + /** + * Read the appropriate subtable from the cmap according to 9.6.6.4 from + * PDF spec + */ + function readCmapTable(cmap, font, isSymbolicFont) { + var segment; + var start = (font.start ? font.start : 0) + cmap.offset; + font.pos = start; + + var version = font.getUint16(); + var numTables = font.getUint16(); + + var potentialTable; + var canBreak = false; + // There's an order of preference in terms of which cmap subtable to + // use: + // - non-symbolic fonts the preference is a 3,1 table then a 1,0 table + // - symbolic fonts the preference is a 3,0 table then a 1,0 table + // The following takes advantage of the fact that the tables are sorted + // to work. + for (var i = 0; i < numTables; i++) { + var platformId = font.getUint16(); + var encodingId = font.getUint16(); + var offset = font.getInt32() >>> 0; + var useTable = false; + + if (platformId === 0 && encodingId === 0) { + useTable = true; + // Continue the loop since there still may be a higher priority + // table. + } else if (platformId === 1 && encodingId === 0) { + useTable = true; + // Continue the loop since there still may be a higher priority + // table. + } else if (platformId === 3 && encodingId === 1 && + (!isSymbolicFont || !potentialTable)) { + useTable = true; + if (!isSymbolicFont) { + canBreak = true; + } + } else if (isSymbolicFont && platformId === 3 && encodingId === 0) { + useTable = true; + canBreak = true; + } + + if (useTable) { + potentialTable = { + platformId: platformId, + encodingId: encodingId, + offset: offset + }; + } + if (canBreak) { + break; + } + } + + if (!potentialTable) { + warn('Could not find a preferred cmap table.'); + return { + platformId: -1, + encodingId: -1, + mappings: [], + hasShortCmap: false + }; + } + + font.pos = start + potentialTable.offset; + var format = font.getUint16(); + var length = font.getUint16(); + var language = font.getUint16(); + + var hasShortCmap = false; + var mappings = []; + var j, glyphId; + + // TODO(mack): refactor this cmap subtable reading logic out + if (format === 0) { + for (j = 0; j < 256; j++) { + var index = font.getByte(); + if (!index) { + continue; + } + mappings.push({ + charCode: j, + glyphId: index + }); + } + hasShortCmap = true; + } else if (format === 4) { + // re-creating the table in format 4 since the encoding + // might be changed + var segCount = (font.getUint16() >> 1); + font.getBytes(6); // skipping range fields + var segIndex, segments = []; + for (segIndex = 0; segIndex < segCount; segIndex++) { + segments.push({ end: font.getUint16() }); + } + font.getUint16(); + for (segIndex = 0; segIndex < segCount; segIndex++) { + segments[segIndex].start = font.getUint16(); + } + + for (segIndex = 0; segIndex < segCount; segIndex++) { + segments[segIndex].delta = font.getUint16(); + } + + var offsetsCount = 0; + for (segIndex = 0; segIndex < segCount; segIndex++) { + segment = segments[segIndex]; + var rangeOffset = font.getUint16(); + if (!rangeOffset) { + segment.offsetIndex = -1; + continue; + } + + var offsetIndex = (rangeOffset >> 1) - (segCount - segIndex); + segment.offsetIndex = offsetIndex; + offsetsCount = Math.max(offsetsCount, offsetIndex + + segment.end - segment.start + 1); + } + + var offsets = []; + for (j = 0; j < offsetsCount; j++) { + offsets.push(font.getUint16()); + } + + for (segIndex = 0; segIndex < segCount; segIndex++) { + segment = segments[segIndex]; + start = segment.start; + var end = segment.end; + var delta = segment.delta; + offsetIndex = segment.offsetIndex; + + for (j = start; j <= end; j++) { + if (j === 0xFFFF) { + continue; + } + + glyphId = (offsetIndex < 0 ? + j : offsets[offsetIndex + j - start]); + glyphId = (glyphId + delta) & 0xFFFF; + if (glyphId === 0) { + continue; + } + mappings.push({ + charCode: j, + glyphId: glyphId + }); + } + } + } else if (format === 6) { + // Format 6 is a 2-bytes dense mapping, which means the font data + // lives glue together even if they are pretty far in the unicode + // table. (This looks weird, so I can have missed something), this + // works on Linux but seems to fails on Mac so let's rewrite the + // cmap table to a 3-1-4 style + var firstCode = font.getUint16(); + var entryCount = font.getUint16(); + + for (j = 0; j < entryCount; j++) { + glyphId = font.getUint16(); + var charCode = firstCode + j; + + mappings.push({ + charCode: charCode, + glyphId: glyphId + }); + } + } else { + error('cmap table has unsupported format: ' + format); + } + + // removing duplicate entries + mappings.sort(function (a, b) { + return a.charCode - b.charCode; + }); + for (i = 1; i < mappings.length; i++) { + if (mappings[i - 1].charCode === mappings[i].charCode) { + mappings.splice(i, 1); + i--; + } + } + + return { + platformId: potentialTable.platformId, + encodingId: potentialTable.encodingId, + mappings: mappings, + hasShortCmap: hasShortCmap + }; + } + + function sanitizeMetrics(font, header, metrics, numGlyphs) { + if (!header) { + if (metrics) { + metrics.data = null; + } + return; + } + + font.pos = (font.start ? font.start : 0) + header.offset; + font.pos += header.length - 2; + var numOfMetrics = font.getUint16(); + + if (numOfMetrics > numGlyphs) { + info('The numOfMetrics (' + numOfMetrics + ') should not be ' + + 'greater than the numGlyphs (' + numGlyphs + ')'); + // Reduce numOfMetrics if it is greater than numGlyphs + numOfMetrics = numGlyphs; + header.data[34] = (numOfMetrics & 0xff00) >> 8; + header.data[35] = numOfMetrics & 0x00ff; + } + + var numOfSidebearings = numGlyphs - numOfMetrics; + var numMissing = numOfSidebearings - + ((metrics.length - numOfMetrics * 4) >> 1); + + if (numMissing > 0) { + // For each missing glyph, we set both the width and lsb to 0 (zero). + // Since we need to add two properties for each glyph, this explains + // the use of |numMissing * 2| when initializing the typed array. + var entries = new Uint8Array(metrics.length + numMissing * 2); + entries.set(metrics.data); + metrics.data = entries; + } + } + + function sanitizeGlyph(source, sourceStart, sourceEnd, dest, destStart, + hintsValid) { + if (sourceEnd - sourceStart <= 12) { + // glyph with data less than 12 is invalid one + return 0; + } + var glyf = source.subarray(sourceStart, sourceEnd); + var contoursCount = (glyf[0] << 8) | glyf[1]; + if (contoursCount & 0x8000) { + // complex glyph, writing as is + dest.set(glyf, destStart); + return glyf.length; + } + + var i, j = 10, flagsCount = 0; + for (i = 0; i < contoursCount; i++) { + var endPoint = (glyf[j] << 8) | glyf[j + 1]; + flagsCount = endPoint + 1; + j += 2; + } + // skipping instructions + var instructionsStart = j; + var instructionsLength = (glyf[j] << 8) | glyf[j + 1]; + j += 2 + instructionsLength; + var instructionsEnd = j; + // validating flags + var coordinatesLength = 0; + for (i = 0; i < flagsCount; i++) { + var flag = glyf[j++]; + if (flag & 0xC0) { + // reserved flags must be zero, cleaning up + glyf[j - 1] = flag & 0x3F; + } + var xyLength = ((flag & 2) ? 1 : (flag & 16) ? 0 : 2) + + ((flag & 4) ? 1 : (flag & 32) ? 0 : 2); + coordinatesLength += xyLength; + if (flag & 8) { + var repeat = glyf[j++]; + i += repeat; + coordinatesLength += repeat * xyLength; + } + } + // glyph without coordinates will be rejected + if (coordinatesLength === 0) { + return 0; + } + var glyphDataLength = j + coordinatesLength; + if (glyphDataLength > glyf.length) { + // not enough data for coordinates + return 0; + } + if (!hintsValid && instructionsLength > 0) { + dest.set(glyf.subarray(0, instructionsStart), destStart); + dest.set([0, 0], destStart + instructionsStart); + dest.set(glyf.subarray(instructionsEnd, glyphDataLength), + destStart + instructionsStart + 2); + glyphDataLength -= instructionsLength; + if (glyf.length - glyphDataLength > 3) { + glyphDataLength = (glyphDataLength + 3) & ~3; + } + return glyphDataLength; + } + if (glyf.length - glyphDataLength > 3) { + // truncating and aligning to 4 bytes the long glyph data + glyphDataLength = (glyphDataLength + 3) & ~3; + dest.set(glyf.subarray(0, glyphDataLength), destStart); + return glyphDataLength; + } + // glyph data is fine + dest.set(glyf, destStart); + return glyf.length; + } + + function sanitizeHead(head, numGlyphs, locaLength) { + var data = head.data; + + // Validate version: + // Should always be 0x00010000 + var version = int32(data[0], data[1], data[2], data[3]); + if (version >> 16 !== 1) { + info('Attempting to fix invalid version in head table: ' + version); + data[0] = 0; + data[1] = 1; + data[2] = 0; + data[3] = 0; + } + + var indexToLocFormat = int16(data[50], data[51]); + if (indexToLocFormat < 0 || indexToLocFormat > 1) { + info('Attempting to fix invalid indexToLocFormat in head table: ' + + indexToLocFormat); + + // The value of indexToLocFormat should be 0 if the loca table + // consists of short offsets, and should be 1 if the loca table + // consists of long offsets. + // + // The number of entries in the loca table should be numGlyphs + 1. + // + // Using this information, we can work backwards to deduce if the + // size of each offset in the loca table, and thus figure out the + // appropriate value for indexToLocFormat. + + var numGlyphsPlusOne = numGlyphs + 1; + if (locaLength === numGlyphsPlusOne << 1) { + // 0x0000 indicates the loca table consists of short offsets + data[50] = 0; + data[51] = 0; + } else if (locaLength === numGlyphsPlusOne << 2) { + // 0x0001 indicates the loca table consists of long offsets + data[50] = 0; + data[51] = 1; + } else { + warn('Could not fix indexToLocFormat: ' + indexToLocFormat); + } + } + } + + function sanitizeGlyphLocations(loca, glyf, numGlyphs, + isGlyphLocationsLong, hintsValid, + dupFirstEntry) { + var itemSize, itemDecode, itemEncode; + if (isGlyphLocationsLong) { + itemSize = 4; + itemDecode = function fontItemDecodeLong(data, offset) { + return (data[offset] << 24) | (data[offset + 1] << 16) | + (data[offset + 2] << 8) | data[offset + 3]; + }; + itemEncode = function fontItemEncodeLong(data, offset, value) { + data[offset] = (value >>> 24) & 0xFF; + data[offset + 1] = (value >> 16) & 0xFF; + data[offset + 2] = (value >> 8) & 0xFF; + data[offset + 3] = value & 0xFF; + }; + } else { + itemSize = 2; + itemDecode = function fontItemDecode(data, offset) { + return (data[offset] << 9) | (data[offset + 1] << 1); + }; + itemEncode = function fontItemEncode(data, offset, value) { + data[offset] = (value >> 9) & 0xFF; + data[offset + 1] = (value >> 1) & 0xFF; + }; + } + var locaData = loca.data; + var locaDataSize = itemSize * (1 + numGlyphs); + // is loca.data too short or long? + if (locaData.length !== locaDataSize) { + locaData = new Uint8Array(locaDataSize); + locaData.set(loca.data.subarray(0, locaDataSize)); + loca.data = locaData; + } + // removing the invalid glyphs + var oldGlyfData = glyf.data; + var oldGlyfDataLength = oldGlyfData.length; + var newGlyfData = new Uint8Array(oldGlyfDataLength); + var startOffset = itemDecode(locaData, 0); + var writeOffset = 0; + var missingGlyphData = {}; + itemEncode(locaData, 0, writeOffset); + var i, j; + for (i = 0, j = itemSize; i < numGlyphs; i++, j += itemSize) { + var endOffset = itemDecode(locaData, j); + if (endOffset > oldGlyfDataLength && + ((oldGlyfDataLength + 3) & ~3) === endOffset) { + // Aspose breaks fonts by aligning the glyphs to the qword, but not + // the glyf table size, which makes last glyph out of range. + endOffset = oldGlyfDataLength; + } + if (endOffset > oldGlyfDataLength) { + // glyph end offset points outside glyf data, rejecting the glyph + itemEncode(locaData, j, writeOffset); + startOffset = endOffset; + continue; + } + + if (startOffset === endOffset) { + missingGlyphData[i] = true; + } + + var newLength = sanitizeGlyph(oldGlyfData, startOffset, endOffset, + newGlyfData, writeOffset, hintsValid); + writeOffset += newLength; + itemEncode(locaData, j, writeOffset); + startOffset = endOffset; + } + + if (writeOffset === 0) { + // glyf table cannot be empty -- redoing the glyf and loca tables + // to have single glyph with one point + var simpleGlyph = new Uint8Array( + [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0]); + for (i = 0, j = itemSize; i < numGlyphs; i++, j += itemSize) { + itemEncode(locaData, j, simpleGlyph.length); + } + glyf.data = simpleGlyph; + return missingGlyphData; + } + + if (dupFirstEntry) { + var firstEntryLength = itemDecode(locaData, itemSize); + if (newGlyfData.length > firstEntryLength + writeOffset) { + glyf.data = newGlyfData.subarray(0, firstEntryLength + writeOffset); + } else { + glyf.data = new Uint8Array(firstEntryLength + writeOffset); + glyf.data.set(newGlyfData.subarray(0, writeOffset)); + } + glyf.data.set(newGlyfData.subarray(0, firstEntryLength), writeOffset); + itemEncode(loca.data, locaData.length - itemSize, + writeOffset + firstEntryLength); + } else { + glyf.data = newGlyfData.subarray(0, writeOffset); + } + return missingGlyphData; + } + + function readPostScriptTable(post, properties, maxpNumGlyphs) { + var start = (font.start ? font.start : 0) + post.offset; + font.pos = start; + + var length = post.length, end = start + length; + var version = font.getInt32(); + // skip rest to the tables + font.getBytes(28); + + var glyphNames; + var valid = true; + var i; + + switch (version) { + case 0x00010000: + glyphNames = MacStandardGlyphOrdering; + break; + case 0x00020000: + var numGlyphs = font.getUint16(); + if (numGlyphs !== maxpNumGlyphs) { + valid = false; + break; + } + var glyphNameIndexes = []; + for (i = 0; i < numGlyphs; ++i) { + var index = font.getUint16(); + if (index >= 32768) { + valid = false; + break; + } + glyphNameIndexes.push(index); + } + if (!valid) { + break; + } + var customNames = []; + var strBuf = []; + while (font.pos < end) { + var stringLength = font.getByte(); + strBuf.length = stringLength; + for (i = 0; i < stringLength; ++i) { + strBuf[i] = String.fromCharCode(font.getByte()); + } + customNames.push(strBuf.join('')); + } + glyphNames = []; + for (i = 0; i < numGlyphs; ++i) { + var j = glyphNameIndexes[i]; + if (j < 258) { + glyphNames.push(MacStandardGlyphOrdering[j]); + continue; + } + glyphNames.push(customNames[j - 258]); + } + break; + case 0x00030000: + break; + default: + warn('Unknown/unsupported post table version ' + version); + valid = false; + break; + } + properties.glyphNames = glyphNames; + return valid; + } + + function readNameTable(nameTable) { + var start = (font.start ? font.start : 0) + nameTable.offset; + font.pos = start; + + var names = [[], []]; + var length = nameTable.length, end = start + length; + var format = font.getUint16(); + var FORMAT_0_HEADER_LENGTH = 6; + if (format !== 0 || length < FORMAT_0_HEADER_LENGTH) { + // unsupported name table format or table "too" small + return names; + } + var numRecords = font.getUint16(); + var stringsStart = font.getUint16(); + var records = []; + var NAME_RECORD_LENGTH = 12; + var i, ii; + + for (i = 0; i < numRecords && + font.pos + NAME_RECORD_LENGTH <= end; i++) { + var r = { + platform: font.getUint16(), + encoding: font.getUint16(), + language: font.getUint16(), + name: font.getUint16(), + length: font.getUint16(), + offset: font.getUint16() + }; + // using only Macintosh and Windows platform/encoding names + if ((r.platform === 1 && r.encoding === 0 && r.language === 0) || + (r.platform === 3 && r.encoding === 1 && r.language === 0x409)) { + records.push(r); + } + } + for (i = 0, ii = records.length; i < ii; i++) { + var record = records[i]; + var pos = start + stringsStart + record.offset; + if (pos + record.length > end) { + continue; // outside of name table, ignoring + } + font.pos = pos; + var nameIndex = record.name; + if (record.encoding) { + // unicode + var str = ''; + for (var j = 0, jj = record.length; j < jj; j += 2) { + str += String.fromCharCode(font.getUint16()); + } + names[1][nameIndex] = str; + } else { + names[0][nameIndex] = bytesToString(font.getBytes(record.length)); + } + } + return names; + } + + var TTOpsStackDeltas = [ + 0, 0, 0, 0, 0, 0, 0, 0, -2, -2, -2, -2, 0, 0, -2, -5, + -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1, 0, -1, -1, -1, -1, + 1, -1, -999, 0, 1, 0, -1, -2, 0, -1, -2, -1, -1, 0, -1, -1, + 0, 0, -999, -999, -1, -1, -1, -1, -2, -999, -2, -2, -999, 0, -2, -2, + 0, 0, -2, 0, -2, 0, 0, 0, -2, -1, -1, 1, 1, 0, 0, -1, + -1, -1, -1, -1, -1, -1, 0, 0, -1, 0, -1, -1, 0, -999, -1, -1, + -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -2, -999, -999, -999, -999, -999, -1, -1, -2, -2, 0, 0, 0, 0, -1, -1, + -999, -2, -2, 0, 0, -1, -2, -2, 0, 0, 0, -1, -1, -1, -2]; + // 0xC0-DF == -1 and 0xE0-FF == -2 + + function sanitizeTTProgram(table, ttContext) { + var data = table.data; + var i = 0, j, n, b, funcId, pc, lastEndf = 0, lastDeff = 0; + var stack = []; + var callstack = []; + var functionsCalled = []; + var tooComplexToFollowFunctions = + ttContext.tooComplexToFollowFunctions; + var inFDEF = false, ifLevel = 0, inELSE = 0; + for (var ii = data.length; i < ii;) { + var op = data[i++]; + // The TrueType instruction set docs can be found at + // https://developer.apple.com/fonts/TTRefMan/RM05/Chap5.html + if (op === 0x40) { // NPUSHB - pushes n bytes + n = data[i++]; + if (inFDEF || inELSE) { + i += n; + } else { + for (j = 0; j < n; j++) { + stack.push(data[i++]); + } + } + } else if (op === 0x41) { // NPUSHW - pushes n words + n = data[i++]; + if (inFDEF || inELSE) { + i += n * 2; + } else { + for (j = 0; j < n; j++) { + b = data[i++]; + stack.push((b << 8) | data[i++]); + } + } + } else if ((op & 0xF8) === 0xB0) { // PUSHB - pushes bytes + n = op - 0xB0 + 1; + if (inFDEF || inELSE) { + i += n; + } else { + for (j = 0; j < n; j++) { + stack.push(data[i++]); + } + } + } else if ((op & 0xF8) === 0xB8) { // PUSHW - pushes words + n = op - 0xB8 + 1; + if (inFDEF || inELSE) { + i += n * 2; + } else { + for (j = 0; j < n; j++) { + b = data[i++]; + stack.push((b << 8) | data[i++]); + } + } + } else if (op === 0x2B && !tooComplexToFollowFunctions) { // CALL + if (!inFDEF && !inELSE) { + // collecting inforamtion about which functions are used + funcId = stack[stack.length - 1]; + ttContext.functionsUsed[funcId] = true; + if (funcId in ttContext.functionsStackDeltas) { + stack.length += ttContext.functionsStackDeltas[funcId]; + } else if (funcId in ttContext.functionsDefined && + functionsCalled.indexOf(funcId) < 0) { + callstack.push({data: data, i: i, stackTop: stack.length - 1}); + functionsCalled.push(funcId); + pc = ttContext.functionsDefined[funcId]; + if (!pc) { + warn('TT: CALL non-existent function'); + ttContext.hintsValid = false; + return; + } + data = pc.data; + i = pc.i; + } + } + } else if (op === 0x2C && !tooComplexToFollowFunctions) { // FDEF + if (inFDEF || inELSE) { + warn('TT: nested FDEFs not allowed'); + tooComplexToFollowFunctions = true; + } + inFDEF = true; + // collecting inforamtion about which functions are defined + lastDeff = i; + funcId = stack.pop(); + ttContext.functionsDefined[funcId] = {data: data, i: i}; + } else if (op === 0x2D) { // ENDF - end of function + if (inFDEF) { + inFDEF = false; + lastEndf = i; + } else { + pc = callstack.pop(); + if (!pc) { + warn('TT: ENDF bad stack'); + ttContext.hintsValid = false; + return; + } + funcId = functionsCalled.pop(); + data = pc.data; + i = pc.i; + ttContext.functionsStackDeltas[funcId] = + stack.length - pc.stackTop; + } + } else if (op === 0x89) { // IDEF - instruction definition + if (inFDEF || inELSE) { + warn('TT: nested IDEFs not allowed'); + tooComplexToFollowFunctions = true; + } + inFDEF = true; + // recording it as a function to track ENDF + lastDeff = i; + } else if (op === 0x58) { // IF + ++ifLevel; + } else if (op === 0x1B) { // ELSE + inELSE = ifLevel; + } else if (op === 0x59) { // EIF + if (inELSE === ifLevel) { + inELSE = 0; + } + --ifLevel; + } else if (op === 0x1C) { // JMPR + if (!inFDEF && !inELSE) { + var offset = stack[stack.length - 1]; + // only jumping forward to prevent infinite loop + if (offset > 0) { + i += offset - 1; + } + } + } + // Adjusting stack not extactly, but just enough to get function id + if (!inFDEF && !inELSE) { + var stackDelta = op <= 0x8E ? TTOpsStackDeltas[op] : + op >= 0xC0 && op <= 0xDF ? -1 : op >= 0xE0 ? -2 : 0; + if (op >= 0x71 && op <= 0x75) { + n = stack.pop(); + if (n === n) { + stackDelta = -n * 2; + } + } + while (stackDelta < 0 && stack.length > 0) { + stack.pop(); + stackDelta++; + } + while (stackDelta > 0) { + stack.push(NaN); // pushing any number into stack + stackDelta--; + } + } + } + ttContext.tooComplexToFollowFunctions = tooComplexToFollowFunctions; + var content = [data]; + if (i > data.length) { + content.push(new Uint8Array(i - data.length)); + } + if (lastDeff > lastEndf) { + warn('TT: complementing a missing function tail'); + // new function definition started, but not finished + // complete function by [CLEAR, ENDF] + content.push(new Uint8Array([0x22, 0x2D])); + } + foldTTTable(table, content); + } + + function checkInvalidFunctions(ttContext, maxFunctionDefs) { + if (ttContext.tooComplexToFollowFunctions) { + return; + } + if (ttContext.functionsDefined.length > maxFunctionDefs) { + warn('TT: more functions defined than expected'); + ttContext.hintsValid = false; + return; + } + for (var j = 0, jj = ttContext.functionsUsed.length; j < jj; j++) { + if (j > maxFunctionDefs) { + warn('TT: invalid function id: ' + j); + ttContext.hintsValid = false; + return; + } + if (ttContext.functionsUsed[j] && !ttContext.functionsDefined[j]) { + warn('TT: undefined function: ' + j); + ttContext.hintsValid = false; + return; + } + } + } + + function foldTTTable(table, content) { + if (content.length > 1) { + // concatenating the content items + var newLength = 0; + var j, jj; + for (j = 0, jj = content.length; j < jj; j++) { + newLength += content[j].length; + } + newLength = (newLength + 3) & ~3; + var result = new Uint8Array(newLength); + var pos = 0; + for (j = 0, jj = content.length; j < jj; j++) { + result.set(content[j], pos); + pos += content[j].length; + } + table.data = result; + table.length = newLength; + } + } + + function sanitizeTTPrograms(fpgm, prep, cvt) { + var ttContext = { + functionsDefined: [], + functionsUsed: [], + functionsStackDeltas: [], + tooComplexToFollowFunctions: false, + hintsValid: true + }; + if (fpgm) { + sanitizeTTProgram(fpgm, ttContext); + } + if (prep) { + sanitizeTTProgram(prep, ttContext); + } + if (fpgm) { + checkInvalidFunctions(ttContext, maxFunctionDefs); + } + if (cvt && (cvt.length & 1)) { + var cvtData = new Uint8Array(cvt.length + 1); + cvtData.set(cvt.data); + cvt.data = cvtData; + } + return ttContext.hintsValid; + } + + // The following steps modify the original font data, making copy + font = new Stream(new Uint8Array(font.getBytes())); + + var VALID_TABLES = ['OS/2', 'cmap', 'head', 'hhea', 'hmtx', 'maxp', + 'name', 'post', 'loca', 'glyf', 'fpgm', 'prep', 'cvt ', 'CFF ']; + + var header = readOpenTypeHeader(font); + var numTables = header.numTables; + var cff, cffFile; + + var tables = { 'OS/2': null, cmap: null, head: null, hhea: null, + hmtx: null, maxp: null, name: null, post: null }; + var table; + for (var i = 0; i < numTables; i++) { + table = readTableEntry(font); + if (VALID_TABLES.indexOf(table.tag) < 0) { + continue; // skipping table if it's not a required or optional table + } + if (table.length === 0) { + continue; // skipping empty tables + } + tables[table.tag] = table; + } + + var isTrueType = !tables['CFF ']; + if (!isTrueType) { + // OpenType font + if (header.version === 'OTTO' || + !tables.head || !tables.hhea || !tables.maxp || !tables.post) { + // no major tables: throwing everything at CFFFont + cffFile = new Stream(tables['CFF '].data); + cff = new CFFFont(cffFile, properties); + + return this.convert(name, cff, properties); + } + + delete tables.glyf; + delete tables.loca; + delete tables.fpgm; + delete tables.prep; + delete tables['cvt ']; + this.isOpenType = true; + } else { + if (!tables.glyf || !tables.loca) { + error('Required "glyf" or "loca" tables are not found'); + } + this.isOpenType = false; + } + + if (!tables.maxp) { + error('Required "maxp" table is not found'); + } + + font.pos = (font.start || 0) + tables.maxp.offset; + var version = font.getInt32(); + var numGlyphs = font.getUint16(); + var maxFunctionDefs = 0; + if (version >= 0x00010000 && tables.maxp.length >= 22) { + // maxZones can be invalid + font.pos += 8; + var maxZones = font.getUint16(); + if (maxZones > 2) { // reset to 2 if font has invalid maxZones + tables.maxp.data[14] = 0; + tables.maxp.data[15] = 2; + } + font.pos += 4; + maxFunctionDefs = font.getUint16(); + } + + var dupFirstEntry = false; + if (properties.type === 'CIDFontType2' && properties.toUnicode && + properties.toUnicode.get(0) > '\u0000') { + // oracle's defect (see 3427), duplicating first entry + dupFirstEntry = true; + numGlyphs++; + tables.maxp.data[4] = numGlyphs >> 8; + tables.maxp.data[5] = numGlyphs & 255; + } + + var hintsValid = sanitizeTTPrograms(tables.fpgm, tables.prep, + tables['cvt '], maxFunctionDefs); + if (!hintsValid) { + delete tables.fpgm; + delete tables.prep; + delete tables['cvt ']; + } + + // Ensure the hmtx table contains the advance width and + // sidebearings information for numGlyphs in the maxp table + sanitizeMetrics(font, tables.hhea, tables.hmtx, numGlyphs); + + if (!tables.head) { + error('Required "head" table is not found'); + } + + sanitizeHead(tables.head, numGlyphs, isTrueType ? tables.loca.length : 0); + + var missingGlyphs = {}; + if (isTrueType) { + var isGlyphLocationsLong = int16(tables.head.data[50], + tables.head.data[51]); + missingGlyphs = sanitizeGlyphLocations(tables.loca, tables.glyf, + numGlyphs, isGlyphLocationsLong, + hintsValid, dupFirstEntry); + } + + if (!tables.hhea) { + error('Required "hhea" table is not found'); + } + + // Sanitizer reduces the glyph advanceWidth to the maxAdvanceWidth + // Sometimes it's 0. That needs to be fixed + if (tables.hhea.data[10] === 0 && tables.hhea.data[11] === 0) { + tables.hhea.data[10] = 0xFF; + tables.hhea.data[11] = 0xFF; + } + + // The 'post' table has glyphs names. + if (tables.post) { + var valid = readPostScriptTable(tables.post, properties, numGlyphs); + if (!valid) { + tables.post = null; + } + } + + var charCodeToGlyphId = [], charCode, toUnicode = properties.toUnicode; + + function hasGlyph(glyphId, charCode) { + if (!missingGlyphs[glyphId]) { + return true; + } + if (charCode >= 0 && toUnicode.has(charCode)) { + return true; + } + return false; + } + + if (properties.type === 'CIDFontType2') { + var cidToGidMap = properties.cidToGidMap || []; + var isCidToGidMapEmpty = cidToGidMap.length === 0; + + properties.cMap.forEach(function(charCode, cid) { + assert(cid <= 0xffff, 'Max size of CID is 65,535'); + var glyphId = -1; + if (isCidToGidMapEmpty) { + glyphId = charCode; + } else if (cidToGidMap[cid] !== undefined) { + glyphId = cidToGidMap[cid]; + } + + if (glyphId >= 0 && glyphId < numGlyphs && + hasGlyph(glyphId, charCode)) { + charCodeToGlyphId[charCode] = glyphId; + } + }); + if (dupFirstEntry) { + charCodeToGlyphId[0] = numGlyphs - 1; + } + } else { + // Most of the following logic in this code branch is based on the + // 9.6.6.4 of the PDF spec. + var cmapTable = readCmapTable(tables.cmap, font, this.isSymbolicFont); + var cmapPlatformId = cmapTable.platformId; + var cmapEncodingId = cmapTable.encodingId; + var cmapMappings = cmapTable.mappings; + var cmapMappingsLength = cmapMappings.length; + var hasEncoding = properties.differences.length || + !!properties.baseEncodingName; + + // The spec seems to imply that if the font is symbolic the encoding + // should be ignored, this doesn't appear to work for 'preistabelle.pdf' + // where the the font is symbolic and it has an encoding. + if (hasEncoding && + (cmapPlatformId === 3 && cmapEncodingId === 1 || + cmapPlatformId === 1 && cmapEncodingId === 0) || + (cmapPlatformId === -1 && cmapEncodingId === -1 && // Temporary hack + !!Encodings[properties.baseEncodingName])) { // Temporary hack + // When no preferred cmap table was found and |baseEncodingName| is + // one of the predefined encodings, we seem to obtain a better + // |charCodeToGlyphId| map from the code below (fixes bug 1057544). + // TODO: Note that this is a hack which should be removed as soon as + // we have proper support for more exotic cmap tables. + + var baseEncoding = []; + if (properties.baseEncodingName === 'MacRomanEncoding' || + properties.baseEncodingName === 'WinAnsiEncoding') { + baseEncoding = Encodings[properties.baseEncodingName]; + } + for (charCode = 0; charCode < 256; charCode++) { + var glyphName; + if (this.differences && charCode in this.differences) { + glyphName = this.differences[charCode]; + } else if (charCode in baseEncoding && + baseEncoding[charCode] !== '') { + glyphName = baseEncoding[charCode]; + } else { + glyphName = Encodings.StandardEncoding[charCode]; + } + if (!glyphName) { + continue; + } + var unicodeOrCharCode; + if (cmapPlatformId === 3 && cmapEncodingId === 1) { + unicodeOrCharCode = GlyphsUnicode[glyphName]; + } else if (cmapPlatformId === 1 && cmapEncodingId === 0) { + // TODO: the encoding needs to be updated with mac os table. + unicodeOrCharCode = Encodings.MacRomanEncoding.indexOf(glyphName); + } + + var found = false; + for (i = 0; i < cmapMappingsLength; ++i) { + if (cmapMappings[i].charCode === unicodeOrCharCode && + hasGlyph(cmapMappings[i].glyphId, unicodeOrCharCode)) { + charCodeToGlyphId[charCode] = cmapMappings[i].glyphId; + found = true; + break; + } + } + if (!found && properties.glyphNames) { + // Try to map using the post table. There are currently no known + // pdfs that this fixes. + var glyphId = properties.glyphNames.indexOf(glyphName); + if (glyphId > 0 && hasGlyph(glyphId, -1)) { + charCodeToGlyphId[charCode] = glyphId; + } + } + } + } else if (cmapPlatformId === 0 && cmapEncodingId === 0) { + // Default Unicode semantics, use the charcodes as is. + for (i = 0; i < cmapMappingsLength; ++i) { + charCodeToGlyphId[cmapMappings[i].charCode] = + cmapMappings[i].glyphId; + } + } else { + // For (3, 0) cmap tables: + // The charcode key being stored in charCodeToGlyphId is the lower + // byte of the two-byte charcodes of the cmap table since according to + // the spec: 'each byte from the string shall be prepended with the + // high byte of the range [of charcodes in the cmap table], to form + // a two-byte character, which shall be used to select the + // associated glyph description from the subtable'. + // + // For (1, 0) cmap tables: + // 'single bytes from the string shall be used to look up the + // associated glyph descriptions from the subtable'. This means + // charcodes in the cmap will be single bytes, so no-op since + // glyph.charCode & 0xFF === glyph.charCode + for (i = 0; i < cmapMappingsLength; ++i) { + charCode = cmapMappings[i].charCode & 0xFF; + charCodeToGlyphId[charCode] = cmapMappings[i].glyphId; + } + } + } + + if (charCodeToGlyphId.length === 0) { + // defines at least one glyph + charCodeToGlyphId[0] = 0; + } + + // Converting glyphs and ids into font's cmap table + var newMapping = adjustMapping(charCodeToGlyphId, properties); + this.toFontChar = newMapping.toFontChar; + tables.cmap = { + tag: 'cmap', + data: createCmapTable(newMapping.charCodeToGlyphId) + }; + + if (!tables['OS/2'] || !validateOS2Table(tables['OS/2'])) { + // extract some more font properties from the OpenType head and + // hhea tables; yMin and descent value are always negative + var override = { + unitsPerEm: int16(tables.head.data[18], tables.head.data[19]), + yMax: int16(tables.head.data[42], tables.head.data[43]), + yMin: int16(tables.head.data[38], tables.head.data[39]) - 0x10000, + ascent: int16(tables.hhea.data[4], tables.hhea.data[5]), + descent: int16(tables.hhea.data[6], tables.hhea.data[7]) - 0x10000 + }; + + tables['OS/2'] = { + tag: 'OS/2', + data: createOS2Table(properties, newMapping.charCodeToGlyphId, + override) + }; + } + + // Rewrite the 'post' table if needed + if (!tables.post) { + tables.post = { + tag: 'post', + data: createPostTable(properties) + }; + } + + if (!isTrueType) { + try { + // Trying to repair CFF file + cffFile = new Stream(tables['CFF '].data); + var parser = new CFFParser(cffFile, properties); + cff = parser.parse(); + var compiler = new CFFCompiler(cff); + tables['CFF '].data = compiler.compile(); + } catch (e) { + warn('Failed to compile font ' + properties.loadedName); + } + } + + // Re-creating 'name' table + if (!tables.name) { + tables.name = { + tag: 'name', + data: createNameTable(this.name) + }; + } else { + // ... using existing 'name' table as prototype + var namePrototype = readNameTable(tables.name); + tables.name.data = createNameTable(name, namePrototype); + } + + var builder = new OpenTypeFileBuilder(header.version); + for (var tableTag in tables) { + builder.addTable(tableTag, tables[tableTag].data); + } + return builder.toArray(); + }, + + convert: function Font_convert(fontName, font, properties) { + // TODO: Check the charstring widths to determine this. + properties.fixedPitch = false; + + var mapping = font.getGlyphMapping(properties); + var newMapping = adjustMapping(mapping, properties); + this.toFontChar = newMapping.toFontChar; + var numGlyphs = font.numGlyphs; + + function getCharCodes(charCodeToGlyphId, glyphId) { + var charCodes = null; + for (var charCode in charCodeToGlyphId) { + if (glyphId === charCodeToGlyphId[charCode]) { + if (!charCodes) { + charCodes = []; + } + charCodes.push(charCode | 0); + } + } + return charCodes; + } + + function createCharCode(charCodeToGlyphId, glyphId) { + for (var charCode in charCodeToGlyphId) { + if (glyphId === charCodeToGlyphId[charCode]) { + return charCode | 0; + } + } + newMapping.charCodeToGlyphId[newMapping.nextAvailableFontCharCode] = + glyphId; + return newMapping.nextAvailableFontCharCode++; + } + + var seacs = font.seacs; + if (SEAC_ANALYSIS_ENABLED && seacs && seacs.length) { + var matrix = properties.fontMatrix || FONT_IDENTITY_MATRIX; + var charset = font.getCharset(); + var seacMap = Object.create(null); + for (var glyphId in seacs) { + glyphId |= 0; + var seac = seacs[glyphId]; + var baseGlyphName = Encodings.StandardEncoding[seac[2]]; + var accentGlyphName = Encodings.StandardEncoding[seac[3]]; + var baseGlyphId = charset.indexOf(baseGlyphName); + var accentGlyphId = charset.indexOf(accentGlyphName); + if (baseGlyphId < 0 || accentGlyphId < 0) { + continue; + } + var accentOffset = { + x: seac[0] * matrix[0] + seac[1] * matrix[2] + matrix[4], + y: seac[0] * matrix[1] + seac[1] * matrix[3] + matrix[5] + }; + + var charCodes = getCharCodes(mapping, glyphId); + if (!charCodes) { + // There's no point in mapping it if the char code was never mapped + // to begin with. + continue; + } + for (var i = 0, ii = charCodes.length; i < ii; i++) { + var charCode = charCodes[i]; + // Find a fontCharCode that maps to the base and accent glyphs. + // If one doesn't exists, create it. + var charCodeToGlyphId = newMapping.charCodeToGlyphId; + var baseFontCharCode = createCharCode(charCodeToGlyphId, + baseGlyphId); + var accentFontCharCode = createCharCode(charCodeToGlyphId, + accentGlyphId); + seacMap[charCode] = { + baseFontCharCode: baseFontCharCode, + accentFontCharCode: accentFontCharCode, + accentOffset: accentOffset + }; + } + } + properties.seacMap = seacMap; + } + + var unitsPerEm = 1 / (properties.fontMatrix || FONT_IDENTITY_MATRIX)[0]; + + var builder = new OpenTypeFileBuilder('\x4F\x54\x54\x4F'); + // PostScript Font Program + builder.addTable('CFF ', font.data); + // OS/2 and Windows Specific metrics + builder.addTable('OS/2', createOS2Table(properties, + newMapping.charCodeToGlyphId)); + // Character to glyphs mapping + builder.addTable('cmap', createCmapTable(newMapping.charCodeToGlyphId)); + // Font header + builder.addTable('head', + '\x00\x01\x00\x00' + // Version number + '\x00\x00\x10\x00' + // fontRevision + '\x00\x00\x00\x00' + // checksumAdjustement + '\x5F\x0F\x3C\xF5' + // magicNumber + '\x00\x00' + // Flags + safeString16(unitsPerEm) + // unitsPerEM + '\x00\x00\x00\x00\x9e\x0b\x7e\x27' + // creation date + '\x00\x00\x00\x00\x9e\x0b\x7e\x27' + // modifification date + '\x00\x00' + // xMin + safeString16(properties.descent) + // yMin + '\x0F\xFF' + // xMax + safeString16(properties.ascent) + // yMax + string16(properties.italicAngle ? 2 : 0) + // macStyle + '\x00\x11' + // lowestRecPPEM + '\x00\x00' + // fontDirectionHint + '\x00\x00' + // indexToLocFormat + '\x00\x00'); // glyphDataFormat + + // Horizontal header + builder.addTable('hhea', + '\x00\x01\x00\x00' + // Version number + safeString16(properties.ascent) + // Typographic Ascent + safeString16(properties.descent) + // Typographic Descent + '\x00\x00' + // Line Gap + '\xFF\xFF' + // advanceWidthMax + '\x00\x00' + // minLeftSidebearing + '\x00\x00' + // minRightSidebearing + '\x00\x00' + // xMaxExtent + safeString16(properties.capHeight) + // caretSlopeRise + safeString16(Math.tan(properties.italicAngle) * + properties.xHeight) + // caretSlopeRun + '\x00\x00' + // caretOffset + '\x00\x00' + // -reserved- + '\x00\x00' + // -reserved- + '\x00\x00' + // -reserved- + '\x00\x00' + // -reserved- + '\x00\x00' + // metricDataFormat + string16(numGlyphs)); // Number of HMetrics + + // Horizontal metrics + builder.addTable('hmtx', (function fontFieldsHmtx() { + var charstrings = font.charstrings; + var cffWidths = font.cff ? font.cff.widths : null; + var hmtx = '\x00\x00\x00\x00'; // Fake .notdef + for (var i = 1, ii = numGlyphs; i < ii; i++) { + var width = 0; + if (charstrings) { + var charstring = charstrings[i - 1]; + width = 'width' in charstring ? charstring.width : 0; + } else if (cffWidths) { + width = Math.ceil(cffWidths[i] || 0); + } + hmtx += string16(width) + string16(0); + } + return hmtx; + })()); + + // Maximum profile + builder.addTable('maxp', + '\x00\x00\x50\x00' + // Version number + string16(numGlyphs)); // Num of glyphs + + // Naming tables + builder.addTable('name', createNameTable(fontName)); + + // PostScript informations + builder.addTable('post', createPostTable(properties)); + + return builder.toArray(); + }, + + /** + * Builds a char code to unicode map based on section 9.10 of the spec. + * @param {Object} properties Font properties object. + * @return {Object} A ToUnicodeMap object. + */ + buildToUnicode: function Font_buildToUnicode(properties) { + // Section 9.10.2 Mapping Character Codes to Unicode Values + if (properties.toUnicode && properties.toUnicode.length !== 0) { + return properties.toUnicode; + } + // According to the spec if the font is a simple font we should only map + // to unicode if the base encoding is MacRoman, MacExpert, or WinAnsi or + // the differences array only contains adobe standard or symbol set names, + // in pratice it seems better to always try to create a toUnicode + // map based of the default encoding. + var toUnicode, charcode; + if (!properties.composite /* is simple font */) { + toUnicode = []; + var encoding = properties.defaultEncoding.slice(); + var baseEncodingName = properties.baseEncodingName; + // Merge in the differences array. + var differences = properties.differences; + for (charcode in differences) { + encoding[charcode] = differences[charcode]; + } + for (charcode in encoding) { + // a) Map the character code to a character name. + var glyphName = encoding[charcode]; + // b) Look up the character name in the Adobe Glyph List (see the + // Bibliography) to obtain the corresponding Unicode value. + if (glyphName === '') { + continue; + } else if (GlyphsUnicode[glyphName] === undefined) { + // (undocumented) c) Few heuristics to recognize unknown glyphs + // NOTE: Adobe Reader does not do this step, but OSX Preview does + var code = 0; + switch (glyphName[0]) { + case 'G': // Gxx glyph + if (glyphName.length === 3) { + code = parseInt(glyphName.substr(1), 16); + } + break; + case 'g': // g00xx glyph + if (glyphName.length === 5) { + code = parseInt(glyphName.substr(1), 16); + } + break; + case 'C': // Cddd glyph + case 'c': // cddd glyph + if (glyphName.length >= 3) { + code = +glyphName.substr(1); + } + break; + } + if (code) { + // If |baseEncodingName| is one the predefined encodings, + // and |code| equals |charcode|, using the glyph defined in the + // baseEncoding seems to yield a better |toUnicode| mapping + // (fixes issue 5070). + if (baseEncodingName && code === +charcode) { + var baseEncoding = Encodings[baseEncodingName]; + if (baseEncoding && (glyphName = baseEncoding[charcode])) { + toUnicode[charcode] = + String.fromCharCode(GlyphsUnicode[glyphName]); + continue; + } + } + toUnicode[charcode] = String.fromCharCode(code); + } + continue; + } + toUnicode[charcode] = String.fromCharCode(GlyphsUnicode[glyphName]); + } + return new ToUnicodeMap(toUnicode); + } + // If the font is a composite font that uses one of the predefined CMaps + // listed in Table 118 (except Identity–H and Identity–V) or whose + // descendant CIDFont uses the Adobe-GB1, Adobe-CNS1, Adobe-Japan1, or + // Adobe-Korea1 character collection: + if (properties.composite && ( + (properties.cMap.builtInCMap && + !(properties.cMap instanceof IdentityCMap)) || + (properties.cidSystemInfo.registry === 'Adobe' && + (properties.cidSystemInfo.ordering === 'GB1' || + properties.cidSystemInfo.ordering === 'CNS1' || + properties.cidSystemInfo.ordering === 'Japan1' || + properties.cidSystemInfo.ordering === 'Korea1')))) { + // Then: + // a) Map the character code to a character identifier (CID) according + // to the font’s CMap. + // b) Obtain the registry and ordering of the character collection used + // by the font’s CMap (for example, Adobe and Japan1) from its + // CIDSystemInfo dictionary. + var registry = properties.cidSystemInfo.registry; + var ordering = properties.cidSystemInfo.ordering; + // c) Construct a second CMap name by concatenating the registry and + // ordering obtained in step (b) in the format registry–ordering–UCS2 + // (for example, Adobe–Japan1–UCS2). + var ucs2CMapName = new Name(registry + '-' + ordering + '-UCS2'); + // d) Obtain the CMap with the name constructed in step (c) (available + // from the ASN Web site; see the Bibliography). + var ucs2CMap = CMapFactory.create(ucs2CMapName, + { url: PDFJS.cMapUrl, packed: PDFJS.cMapPacked }, null); + var cMap = properties.cMap; + toUnicode = []; + cMap.forEach(function(charcode, cid) { + assert(cid <= 0xffff, 'Max size of CID is 65,535'); + // e) Map the CID obtained in step (a) according to the CMap obtained + // in step (d), producing a Unicode value. + var ucs2 = ucs2CMap.lookup(cid); + if (ucs2) { + toUnicode[charcode] = + String.fromCharCode((ucs2.charCodeAt(0) << 8) + + ucs2.charCodeAt(1)); + } + }); + return new ToUnicodeMap(toUnicode); + } + + // The viewer's choice, just use an identity map. + return new IdentityToUnicodeMap(properties.firstChar, + properties.lastChar); + }, + + get spaceWidth() { + if ('_shadowWidth' in this) { + return this._shadowWidth; + } + + // trying to estimate space character width + var possibleSpaceReplacements = ['space', 'minus', 'one', 'i']; + var width; + for (var i = 0, ii = possibleSpaceReplacements.length; i < ii; i++) { + var glyphName = possibleSpaceReplacements[i]; + // if possible, getting width by glyph name + if (glyphName in this.widths) { + width = this.widths[glyphName]; + break; + } + var glyphUnicode = GlyphsUnicode[glyphName]; + // finding the charcode via unicodeToCID map + var charcode = 0; + if (this.composite) { + if (this.cMap.contains(glyphUnicode)) { + charcode = this.cMap.lookup(glyphUnicode); + } + } + // ... via toUnicode map + if (!charcode && 'toUnicode' in this) { + charcode = this.toUnicode.charCodeOf(glyphUnicode); + } + // setting it to unicode if negative or undefined + if (charcode <= 0) { + charcode = glyphUnicode; + } + // trying to get width via charcode + width = this.widths[charcode]; + if (width) { + break; // the non-zero width found + } + } + width = width || this.defaultWidth; + // Do not shadow the property here. See discussion: + // https://github.com/mozilla/pdf.js/pull/2127#discussion_r1662280 + this._shadowWidth = width; + return width; + }, + + charToGlyph: function Font_charToGlyph(charcode) { + var fontCharCode, width, operatorListId; + + var widthCode = charcode; + if (this.cMap && this.cMap.contains(charcode)) { + widthCode = this.cMap.lookup(charcode); + } + width = this.widths[widthCode]; + width = isNum(width) ? width : this.defaultWidth; + var vmetric = this.vmetrics && this.vmetrics[widthCode]; + + var unicode = this.toUnicode.get(charcode) || charcode; + if (typeof unicode === 'number') { + unicode = String.fromCharCode(unicode); + } + + // First try the toFontChar map, if it's not there then try falling + // back to the char code. + fontCharCode = this.toFontChar[charcode] || charcode; + if (this.missingFile) { + fontCharCode = mapSpecialUnicodeValues(fontCharCode); + } + + if (this.isType3Font) { + // Font char code in this case is actually a glyph name. + operatorListId = fontCharCode; + } + + var accent = null; + if (this.seacMap && this.seacMap[charcode]) { + var seac = this.seacMap[charcode]; + fontCharCode = seac.baseFontCharCode; + accent = { + fontChar: String.fromCharCode(seac.accentFontCharCode), + offset: seac.accentOffset + }; + } + + var fontChar = String.fromCharCode(fontCharCode); + + var glyph = this.glyphCache[charcode]; + if (!glyph || + !glyph.matchesForCache(fontChar, unicode, accent, width, vmetric, + operatorListId)) { + glyph = new Glyph(fontChar, unicode, accent, width, vmetric, + operatorListId); + this.glyphCache[charcode] = glyph; + } + return glyph; + }, + + charsToGlyphs: function Font_charsToGlyphs(chars) { + var charsCache = this.charsCache; + var glyphs, glyph, charcode; + + // if we translated this string before, just grab it from the cache + if (charsCache) { + glyphs = charsCache[chars]; + if (glyphs) { + return glyphs; + } + } + + // lazily create the translation cache + if (!charsCache) { + charsCache = this.charsCache = Object.create(null); + } + + glyphs = []; + var charsCacheKey = chars; + var i = 0, ii; + + if (this.cMap) { + // composite fonts have multi-byte strings convert the string from + // single-byte to multi-byte + var c = {}; + while (i < chars.length) { + this.cMap.readCharCode(chars, i, c); + charcode = c.charcode; + var length = c.length; + i += length; + glyph = this.charToGlyph(charcode); + glyphs.push(glyph); + // placing null after each word break charcode (ASCII SPACE) + // Ignore occurences of 0x20 in multiple-byte codes. + if (length === 1 && chars.charCodeAt(i - 1) === 0x20) { + glyphs.push(null); + } + } + } else { + for (i = 0, ii = chars.length; i < ii; ++i) { + charcode = chars.charCodeAt(i); + glyph = this.charToGlyph(charcode); + glyphs.push(glyph); + if (charcode === 0x20) { + glyphs.push(null); + } + } + } + + // Enter the translated string into the cache + return (charsCache[charsCacheKey] = glyphs); + } + }; + + return Font; +})(); + +var ErrorFont = (function ErrorFontClosure() { + function ErrorFont(error) { + this.error = error; + this.loadedName = 'g_font_error'; + this.loading = false; + } + + ErrorFont.prototype = { + charsToGlyphs: function ErrorFont_charsToGlyphs() { + return []; + }, + exportData: function ErrorFont_exportData() { + return {error: this.error}; + } + }; + + return ErrorFont; +})(); + +/** + * Shared logic for building a char code to glyph id mapping for Type1 and + * simple CFF fonts. See section 9.6.6.2 of the spec. + * @param {Object} properties Font properties object. + * @param {Object} builtInEncoding The encoding contained within the actual font + * data. + * @param {Array} Array of glyph names where the index is the glyph ID. + * @returns {Object} A char code to glyph ID map. + */ +function type1FontGlyphMapping(properties, builtInEncoding, glyphNames) { + var charCodeToGlyphId = Object.create(null); + var glyphId, charCode, baseEncoding; + + if (properties.baseEncodingName) { + // If a valid base encoding name was used, the mapping is initialized with + // that. + baseEncoding = Encodings[properties.baseEncodingName]; + for (charCode = 0; charCode < baseEncoding.length; charCode++) { + glyphId = glyphNames.indexOf(baseEncoding[charCode]); + if (glyphId >= 0) { + charCodeToGlyphId[charCode] = glyphId; + } else { + charCodeToGlyphId[charCode] = 0; // notdef + } + } + } else if (!!(properties.flags & FontFlags.Symbolic)) { + // For a symbolic font the encoding should be the fonts built-in + // encoding. + for (charCode in builtInEncoding) { + charCodeToGlyphId[charCode] = builtInEncoding[charCode]; + } + } else { + // For non-symbolic fonts that don't have a base encoding the standard + // encoding should be used. + baseEncoding = Encodings.StandardEncoding; + for (charCode = 0; charCode < baseEncoding.length; charCode++) { + glyphId = glyphNames.indexOf(baseEncoding[charCode]); + if (glyphId >= 0) { + charCodeToGlyphId[charCode] = glyphId; + } else { + charCodeToGlyphId[charCode] = 0; // notdef + } + } + } + + // Lastly, merge in the differences. + var differences = properties.differences; + if (differences) { + for (charCode in differences) { + var glyphName = differences[charCode]; + glyphId = glyphNames.indexOf(glyphName); + if (glyphId >= 0) { + charCodeToGlyphId[charCode] = glyphId; + } else { + charCodeToGlyphId[charCode] = 0; // notdef + } + } + } + return charCodeToGlyphId; +} + +/* + * CharStrings are encoded following the the CharString Encoding sequence + * describe in Chapter 6 of the "Adobe Type1 Font Format" specification. + * The value in a byte indicates a command, a number, or subsequent bytes + * that are to be interpreted in a special way. + * + * CharString Number Encoding: + * A CharString byte containing the values from 32 through 255 inclusive + * indicate an integer. These values are decoded in four ranges. + * + * 1. A CharString byte containing a value, v, between 32 and 246 inclusive, + * indicate the integer v - 139. Thus, the integer values from -107 through + * 107 inclusive may be encoded in single byte. + * + * 2. A CharString byte containing a value, v, between 247 and 250 inclusive, + * indicates an integer involving the next byte, w, according to the formula: + * [(v - 247) x 256] + w + 108 + * + * 3. A CharString byte containing a value, v, between 251 and 254 inclusive, + * indicates an integer involving the next byte, w, according to the formula: + * -[(v - 251) * 256] - w - 108 + * + * 4. A CharString containing the value 255 indicates that the next 4 bytes + * are a two complement signed integer. The first of these bytes contains the + * highest order bits, the second byte contains the next higher order bits + * and the fourth byte contain the lowest order bits. + * + * + * CharString Command Encoding: + * CharStrings commands are encoded in 1 or 2 bytes. + * + * Single byte commands are encoded in 1 byte that contains a value between + * 0 and 31 inclusive. + * If a command byte contains the value 12, then the value in the next byte + * indicates a command. This "escape" mechanism allows many extra commands + * to be encoded and this encoding technique helps to minimize the length of + * the charStrings. + */ +var Type1CharString = (function Type1CharStringClosure() { + var COMMAND_MAP = { + 'hstem': [1], + 'vstem': [3], + 'vmoveto': [4], + 'rlineto': [5], + 'hlineto': [6], + 'vlineto': [7], + 'rrcurveto': [8], + 'callsubr': [10], + 'flex': [12, 35], + 'drop' : [12, 18], + 'endchar': [14], + 'rmoveto': [21], + 'hmoveto': [22], + 'vhcurveto': [30], + 'hvcurveto': [31] + }; + + function Type1CharString() { + this.width = 0; + this.lsb = 0; + this.flexing = false; + this.output = []; + this.stack = []; + } + + Type1CharString.prototype = { + convert: function Type1CharString_convert(encoded, subrs) { + var count = encoded.length; + var error = false; + var wx, sbx, subrNumber; + for (var i = 0; i < count; i++) { + var value = encoded[i]; + if (value < 32) { + if (value === 12) { + value = (value << 8) + encoded[++i]; + } + switch (value) { + case 1: // hstem + if (!HINTING_ENABLED) { + this.stack = []; + break; + } + error = this.executeCommand(2, COMMAND_MAP.hstem); + break; + case 3: // vstem + if (!HINTING_ENABLED) { + this.stack = []; + break; + } + error = this.executeCommand(2, COMMAND_MAP.vstem); + break; + case 4: // vmoveto + if (this.flexing) { + if (this.stack.length < 1) { + error = true; + break; + } + // Add the dx for flex and but also swap the values so they are + // the right order. + var dy = this.stack.pop(); + this.stack.push(0, dy); + break; + } + error = this.executeCommand(1, COMMAND_MAP.vmoveto); + break; + case 5: // rlineto + error = this.executeCommand(2, COMMAND_MAP.rlineto); + break; + case 6: // hlineto + error = this.executeCommand(1, COMMAND_MAP.hlineto); + break; + case 7: // vlineto + error = this.executeCommand(1, COMMAND_MAP.vlineto); + break; + case 8: // rrcurveto + error = this.executeCommand(6, COMMAND_MAP.rrcurveto); + break; + case 9: // closepath + // closepath is a Type1 command that does not take argument and is + // useless in Type2 and it can simply be ignored. + this.stack = []; + break; + case 10: // callsubr + if (this.stack.length < 1) { + error = true; + break; + } + subrNumber = this.stack.pop(); + error = this.convert(subrs[subrNumber], subrs); + break; + case 11: // return + return error; + case 13: // hsbw + if (this.stack.length < 2) { + error = true; + break; + } + // To convert to type2 we have to move the width value to the + // first part of the charstring and then use hmoveto with lsb. + wx = this.stack.pop(); + sbx = this.stack.pop(); + this.lsb = sbx; + this.width = wx; + this.stack.push(wx, sbx); + error = this.executeCommand(2, COMMAND_MAP.hmoveto); + break; + case 14: // endchar + this.output.push(COMMAND_MAP.endchar[0]); + break; + case 21: // rmoveto + if (this.flexing) { + break; + } + error = this.executeCommand(2, COMMAND_MAP.rmoveto); + break; + case 22: // hmoveto + if (this.flexing) { + // Add the dy for flex. + this.stack.push(0); + break; + } + error = this.executeCommand(1, COMMAND_MAP.hmoveto); + break; + case 30: // vhcurveto + error = this.executeCommand(4, COMMAND_MAP.vhcurveto); + break; + case 31: // hvcurveto + error = this.executeCommand(4, COMMAND_MAP.hvcurveto); + break; + case (12 << 8) + 0: // dotsection + // dotsection is a Type1 command to specify some hinting feature + // for dots that do not take a parameter and it can safely be + // ignored for Type2. + this.stack = []; + break; + case (12 << 8) + 1: // vstem3 + if (!HINTING_ENABLED) { + this.stack = []; + break; + } + // [vh]stem3 are Type1 only and Type2 supports [vh]stem with + // multiple parameters, so instead of returning [vh]stem3 take a + // shortcut and return [vhstem] instead. + error = this.executeCommand(2, COMMAND_MAP.vstem); + break; + case (12 << 8) + 2: // hstem3 + if (!HINTING_ENABLED) { + this.stack = []; + break; + } + // See vstem3. + error = this.executeCommand(2, COMMAND_MAP.hstem); + break; + case (12 << 8) + 6: // seac + // seac is like type 2's special endchar but it doesn't use the + // first argument asb, so remove it. + if (SEAC_ANALYSIS_ENABLED) { + this.seac = this.stack.splice(-4, 4); + error = this.executeCommand(0, COMMAND_MAP.endchar); + } else { + error = this.executeCommand(4, COMMAND_MAP.endchar); + } + break; + case (12 << 8) + 7: // sbw + if (this.stack.length < 4) { + error = true; + break; + } + // To convert to type2 we have to move the width value to the + // first part of the charstring and then use rmoveto with + // (dx, dy). The height argument will not be used for vmtx and + // vhea tables reconstruction -- ignoring it. + var wy = this.stack.pop(); + wx = this.stack.pop(); + var sby = this.stack.pop(); + sbx = this.stack.pop(); + this.lsb = sbx; + this.width = wx; + this.stack.push(wx, sbx, sby); + error = this.executeCommand(3, COMMAND_MAP.rmoveto); + break; + case (12 << 8) + 12: // div + if (this.stack.length < 2) { + error = true; + break; + } + var num2 = this.stack.pop(); + var num1 = this.stack.pop(); + this.stack.push(num1 / num2); + break; + case (12 << 8) + 16: // callothersubr + if (this.stack.length < 2) { + error = true; + break; + } + subrNumber = this.stack.pop(); + var numArgs = this.stack.pop(); + if (subrNumber === 0 && numArgs === 3) { + var flexArgs = this.stack.splice(this.stack.length - 17, 17); + this.stack.push( + flexArgs[2] + flexArgs[0], // bcp1x + rpx + flexArgs[3] + flexArgs[1], // bcp1y + rpy + flexArgs[4], // bcp2x + flexArgs[5], // bcp2y + flexArgs[6], // p2x + flexArgs[7], // p2y + flexArgs[8], // bcp3x + flexArgs[9], // bcp3y + flexArgs[10], // bcp4x + flexArgs[11], // bcp4y + flexArgs[12], // p3x + flexArgs[13], // p3y + flexArgs[14] // flexDepth + // 15 = finalx unused by flex + // 16 = finaly unused by flex + ); + error = this.executeCommand(13, COMMAND_MAP.flex, true); + this.flexing = false; + this.stack.push(flexArgs[15], flexArgs[16]); + } else if (subrNumber === 1 && numArgs === 0) { + this.flexing = true; + } + break; + case (12 << 8) + 17: // pop + // Ignore this since it is only used with othersubr. + break; + case (12 << 8) + 33: // setcurrentpoint + // Ignore for now. + this.stack = []; + break; + default: + warn('Unknown type 1 charstring command of "' + value + '"'); + break; + } + if (error) { + break; + } + continue; + } else if (value <= 246) { + value = value - 139; + } else if (value <= 250) { + value = ((value - 247) * 256) + encoded[++i] + 108; + } else if (value <= 254) { + value = -((value - 251) * 256) - encoded[++i] - 108; + } else { + value = (encoded[++i] & 0xff) << 24 | (encoded[++i] & 0xff) << 16 | + (encoded[++i] & 0xff) << 8 | (encoded[++i] & 0xff) << 0; + } + this.stack.push(value); + } + return error; + }, + + executeCommand: function(howManyArgs, command, keepStack) { + var stackLength = this.stack.length; + if (howManyArgs > stackLength) { + return true; + } + var start = stackLength - howManyArgs; + for (var i = start; i < stackLength; i++) { + var value = this.stack[i]; + if (value === (value | 0)) { // int + this.output.push(28, (value >> 8) & 0xff, value & 0xff); + } else { // fixed point + value = (65536 * value) | 0; + this.output.push(255, + (value >> 24) & 0xFF, + (value >> 16) & 0xFF, + (value >> 8) & 0xFF, + value & 0xFF); + } + } + this.output.push.apply(this.output, command); + if (keepStack) { + this.stack.splice(start, howManyArgs); + } else { + this.stack.length = 0; + } + return false; + } + }; + + return Type1CharString; +})(); + +/* + * Type1Parser encapsulate the needed code for parsing a Type1 font + * program. Some of its logic depends on the Type2 charstrings + * structure. + * Note: this doesn't really parse the font since that would require evaluation + * of PostScript, but it is possible in most cases to extract what we need + * without a full parse. + */ +var Type1Parser = (function Type1ParserClosure() { + /* + * Decrypt a Sequence of Ciphertext Bytes to Produce the Original Sequence + * of Plaintext Bytes. The function took a key as a parameter which can be + * for decrypting the eexec block of for decoding charStrings. + */ + var EEXEC_ENCRYPT_KEY = 55665; + var CHAR_STRS_ENCRYPT_KEY = 4330; + + function isHexDigit(code) { + return code >= 48 && code <= 57 || // '0'-'9' + code >= 65 && code <= 70 || // 'A'-'F' + code >= 97 && code <= 102; // 'a'-'f' + } + + function decrypt(data, key, discardNumber) { + var r = key | 0, c1 = 52845, c2 = 22719; + var count = data.length; + var decrypted = new Uint8Array(count); + for (var i = 0; i < count; i++) { + var value = data[i]; + decrypted[i] = value ^ (r >> 8); + r = ((value + r) * c1 + c2) & ((1 << 16) - 1); + } + return Array.prototype.slice.call(decrypted, discardNumber); + } + + function decryptAscii(data, key, discardNumber) { + var r = key | 0, c1 = 52845, c2 = 22719; + var count = data.length, maybeLength = count >>> 1; + var decrypted = new Uint8Array(maybeLength); + var i, j; + for (i = 0, j = 0; i < count; i++) { + var digit1 = data[i]; + if (!isHexDigit(digit1)) { + continue; + } + i++; + var digit2; + while (i < count && !isHexDigit(digit2 = data[i])) { + i++; + } + if (i < count) { + var value = parseInt(String.fromCharCode(digit1, digit2), 16); + decrypted[j++] = value ^ (r >> 8); + r = ((value + r) * c1 + c2) & ((1 << 16) - 1); + } + } + return Array.prototype.slice.call(decrypted, discardNumber, j); + } + + function isSpecial(c) { + return c === 0x2F || // '/' + c === 0x5B || c === 0x5D || // '[', ']' + c === 0x7B || c === 0x7D || // '{', '}' + c === 0x28 || c === 0x29; // '(', ')' + } + + function Type1Parser(stream, encrypted) { + if (encrypted) { + var data = stream.getBytes(); + var isBinary = !(isHexDigit(data[0]) && isHexDigit(data[1]) && + isHexDigit(data[2]) && isHexDigit(data[3])); + stream = new Stream(isBinary ? decrypt(data, EEXEC_ENCRYPT_KEY, 4) : + decryptAscii(data, EEXEC_ENCRYPT_KEY, 4)); + } + this.stream = stream; + this.nextChar(); + } + + Type1Parser.prototype = { + readNumberArray: function Type1Parser_readNumberArray() { + this.getToken(); // read '[' or '{' (arrays can start with either) + var array = []; + while (true) { + var token = this.getToken(); + if (token === null || token === ']' || token === '}') { + break; + } + array.push(parseFloat(token || 0)); + } + return array; + }, + + readNumber: function Type1Parser_readNumber() { + var token = this.getToken(); + return parseFloat(token || 0); + }, + + readInt: function Type1Parser_readInt() { + // Use '| 0' to prevent setting a double into length such as the double + // does not flow into the loop variable. + var token = this.getToken(); + return parseInt(token || 0, 10) | 0; + }, + + readBoolean: function Type1Parser_readBoolean() { + var token = this.getToken(); + + // Use 1 and 0 since that's what type2 charstrings use. + return token === 'true' ? 1 : 0; + }, + + nextChar : function Type1_nextChar() { + return (this.currentChar = this.stream.getByte()); + }, + + getToken: function Type1Parser_getToken() { + // Eat whitespace and comments. + var comment = false; + var ch = this.currentChar; + while (true) { + if (ch === -1) { + return null; + } + + if (comment) { + if (ch === 0x0A || ch === 0x0D) { + comment = false; + } + } else if (ch === 0x25) { // '%' + comment = true; + } else if (!Lexer.isSpace(ch)) { + break; + } + ch = this.nextChar(); + } + if (isSpecial(ch)) { + this.nextChar(); + return String.fromCharCode(ch); + } + var token = ''; + do { + token += String.fromCharCode(ch); + ch = this.nextChar(); + } while (ch >= 0 && !Lexer.isSpace(ch) && !isSpecial(ch)); + return token; + }, + + /* + * Returns an object containing a Subrs array and a CharStrings + * array extracted from and eexec encrypted block of data + */ + extractFontProgram: function Type1Parser_extractFontProgram() { + var stream = this.stream; + + var subrs = [], charstrings = []; + var program = { + subrs: [], + charstrings: [], + properties: { + 'privateData': { + 'lenIV': 4 + } + } + }; + var token, length, data, lenIV, encoded; + while ((token = this.getToken()) !== null) { + if (token !== '/') { + continue; + } + token = this.getToken(); + switch (token) { + case 'CharStrings': + // The number immediately following CharStrings must be greater or + // equal to the number of CharStrings. + this.getToken(); + this.getToken(); // read in 'dict' + this.getToken(); // read in 'dup' + this.getToken(); // read in 'begin' + while(true) { + token = this.getToken(); + if (token === null || token === 'end') { + break; + } + + if (token !== '/') { + continue; + } + var glyph = this.getToken(); + length = this.readInt(); + this.getToken(); // read in 'RD' or '-|' + data = stream.makeSubStream(stream.pos, length); + lenIV = program.properties.privateData['lenIV']; + encoded = decrypt(data.getBytes(), CHAR_STRS_ENCRYPT_KEY, lenIV); + // Skip past the required space and binary data. + stream.skip(length); + this.nextChar(); + token = this.getToken(); // read in 'ND' or '|-' + if (token === 'noaccess') { + this.getToken(); // read in 'def' + } + charstrings.push({ + glyph: glyph, + encoded: encoded + }); + } + break; + case 'Subrs': + var num = this.readInt(); + this.getToken(); // read in 'array' + while ((token = this.getToken()) === 'dup') { + var index = this.readInt(); + length = this.readInt(); + this.getToken(); // read in 'RD' or '-|' + data = stream.makeSubStream(stream.pos, length); + lenIV = program.properties.privateData['lenIV']; + encoded = decrypt(data.getBytes(), CHAR_STRS_ENCRYPT_KEY, lenIV); + // Skip past the required space and binary data. + stream.skip(length); + this.nextChar(); + token = this.getToken(); // read in 'NP' or '|' + if (token === 'noaccess') { + this.getToken(); // read in 'put' + } + subrs[index] = encoded; + } + break; + case 'BlueValues': + case 'OtherBlues': + case 'FamilyBlues': + case 'FamilyOtherBlues': + var blueArray = this.readNumberArray(); + // *Blue* values may contain invalid data: disables reading of + // those values when hinting is disabled. + if (blueArray.length > 0 && (blueArray.length % 2) === 0 && + HINTING_ENABLED) { + program.properties.privateData[token] = blueArray; + } + break; + case 'StemSnapH': + case 'StemSnapV': + program.properties.privateData[token] = this.readNumberArray(); + break; + case 'StdHW': + case 'StdVW': + program.properties.privateData[token] = + this.readNumberArray()[0]; + break; + case 'BlueShift': + case 'lenIV': + case 'BlueFuzz': + case 'BlueScale': + case 'LanguageGroup': + case 'ExpansionFactor': + program.properties.privateData[token] = this.readNumber(); + break; + case 'ForceBold': + program.properties.privateData[token] = this.readBoolean(); + break; + } + } + + for (var i = 0; i < charstrings.length; i++) { + glyph = charstrings[i].glyph; + encoded = charstrings[i].encoded; + var charString = new Type1CharString(); + var error = charString.convert(encoded, subrs); + var output = charString.output; + if (error) { + // It seems when FreeType encounters an error while evaluating a glyph + // that it completely ignores the glyph so we'll mimic that behaviour + // here and put an endchar to make the validator happy. + output = [14]; + } + program.charstrings.push({ + glyphName: glyph, + charstring: output, + width: charString.width, + lsb: charString.lsb, + seac: charString.seac + }); + } + + return program; + }, + + extractFontHeader: function Type1Parser_extractFontHeader(properties) { + var token; + while ((token = this.getToken()) !== null) { + if (token !== '/') { + continue; + } + token = this.getToken(); + switch (token) { + case 'FontMatrix': + var matrix = this.readNumberArray(); + properties.fontMatrix = matrix; + break; + case 'Encoding': + var encodingArg = this.getToken(); + var encoding; + if (!/^\d+$/.test(encodingArg)) { + // encoding name is specified + encoding = Encodings[encodingArg]; + } else { + encoding = []; + var size = parseInt(encodingArg, 10) | 0; + this.getToken(); // read in 'array' + + for (var j = 0; j < size; j++) { + token = this.getToken(); + // skipping till first dup or def (e.g. ignoring for statement) + while (token !== 'dup' && token !== 'def') { + token = this.getToken(); + if (token === null) { + return; // invalid header + } + } + if (token === 'def') { + break; // read all array data + } + var index = this.readInt(); + this.getToken(); // read in '/' + var glyph = this.getToken(); + encoding[index] = glyph; + this.getToken(); // read the in 'put' + } + } + properties.builtInEncoding = encoding; + break; + case 'FontBBox': + var fontBBox = this.readNumberArray(); + // adjusting ascent/descent + properties.ascent = fontBBox[3]; + properties.descent = fontBBox[1]; + properties.ascentScaled = true; + break; + } + } + } + }; + + return Type1Parser; +})(); + +/** + * The CFF class takes a Type1 file and wrap it into a + * 'Compact Font Format' which itself embed Type2 charstrings. + */ +var CFFStandardStrings = [ + '.notdef', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', + 'ampersand', 'quoteright', 'parenleft', 'parenright', 'asterisk', 'plus', + 'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two', 'three', 'four', + 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', + 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', + 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', + 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', 'asciicircum', + 'underscore', 'quoteleft', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', + 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', + 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', 'exclamdown', 'cent', + 'sterling', 'fraction', 'yen', 'florin', 'section', 'currency', + 'quotesingle', 'quotedblleft', 'guillemotleft', 'guilsinglleft', + 'guilsinglright', 'fi', 'fl', 'endash', 'dagger', 'daggerdbl', + 'periodcentered', 'paragraph', 'bullet', 'quotesinglbase', 'quotedblbase', + 'quotedblright', 'guillemotright', 'ellipsis', 'perthousand', 'questiondown', + 'grave', 'acute', 'circumflex', 'tilde', 'macron', 'breve', 'dotaccent', + 'dieresis', 'ring', 'cedilla', 'hungarumlaut', 'ogonek', 'caron', 'emdash', + 'AE', 'ordfeminine', 'Lslash', 'Oslash', 'OE', 'ordmasculine', 'ae', + 'dotlessi', 'lslash', 'oslash', 'oe', 'germandbls', 'onesuperior', + 'logicalnot', 'mu', 'trademark', 'Eth', 'onehalf', 'plusminus', 'Thorn', + 'onequarter', 'divide', 'brokenbar', 'degree', 'thorn', 'threequarters', + 'twosuperior', 'registered', 'minus', 'eth', 'multiply', 'threesuperior', + 'copyright', 'Aacute', 'Acircumflex', 'Adieresis', 'Agrave', 'Aring', + 'Atilde', 'Ccedilla', 'Eacute', 'Ecircumflex', 'Edieresis', 'Egrave', + 'Iacute', 'Icircumflex', 'Idieresis', 'Igrave', 'Ntilde', 'Oacute', + 'Ocircumflex', 'Odieresis', 'Ograve', 'Otilde', 'Scaron', 'Uacute', + 'Ucircumflex', 'Udieresis', 'Ugrave', 'Yacute', 'Ydieresis', 'Zcaron', + 'aacute', 'acircumflex', 'adieresis', 'agrave', 'aring', 'atilde', + 'ccedilla', 'eacute', 'ecircumflex', 'edieresis', 'egrave', 'iacute', + 'icircumflex', 'idieresis', 'igrave', 'ntilde', 'oacute', 'ocircumflex', + 'odieresis', 'ograve', 'otilde', 'scaron', 'uacute', 'ucircumflex', + 'udieresis', 'ugrave', 'yacute', 'ydieresis', 'zcaron', 'exclamsmall', + 'Hungarumlautsmall', 'dollaroldstyle', 'dollarsuperior', 'ampersandsmall', + 'Acutesmall', 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader', + 'onedotenleader', 'zerooldstyle', 'oneoldstyle', 'twooldstyle', + 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', + 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', 'commasuperior', + 'threequartersemdash', 'periodsuperior', 'questionsmall', 'asuperior', + 'bsuperior', 'centsuperior', 'dsuperior', 'esuperior', 'isuperior', + 'lsuperior', 'msuperior', 'nsuperior', 'osuperior', 'rsuperior', 'ssuperior', + 'tsuperior', 'ff', 'ffi', 'ffl', 'parenleftinferior', 'parenrightinferior', + 'Circumflexsmall', 'hyphensuperior', 'Gravesmall', 'Asmall', 'Bsmall', + 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall', 'Hsmall', 'Ismall', + 'Jsmall', 'Ksmall', 'Lsmall', 'Msmall', 'Nsmall', 'Osmall', 'Psmall', + 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall', 'Vsmall', 'Wsmall', + 'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary', 'onefitted', 'rupiah', + 'Tildesmall', 'exclamdownsmall', 'centoldstyle', 'Lslashsmall', + 'Scaronsmall', 'Zcaronsmall', 'Dieresissmall', 'Brevesmall', 'Caronsmall', + 'Dotaccentsmall', 'Macronsmall', 'figuredash', 'hypheninferior', + 'Ogoneksmall', 'Ringsmall', 'Cedillasmall', 'questiondownsmall', 'oneeighth', + 'threeeighths', 'fiveeighths', 'seveneighths', 'onethird', 'twothirds', + 'zerosuperior', 'foursuperior', 'fivesuperior', 'sixsuperior', + 'sevensuperior', 'eightsuperior', 'ninesuperior', 'zeroinferior', + 'oneinferior', 'twoinferior', 'threeinferior', 'fourinferior', + 'fiveinferior', 'sixinferior', 'seveninferior', 'eightinferior', + 'nineinferior', 'centinferior', 'dollarinferior', 'periodinferior', + 'commainferior', 'Agravesmall', 'Aacutesmall', 'Acircumflexsmall', + 'Atildesmall', 'Adieresissmall', 'Aringsmall', 'AEsmall', 'Ccedillasmall', + 'Egravesmall', 'Eacutesmall', 'Ecircumflexsmall', 'Edieresissmall', + 'Igravesmall', 'Iacutesmall', 'Icircumflexsmall', 'Idieresissmall', + 'Ethsmall', 'Ntildesmall', 'Ogravesmall', 'Oacutesmall', 'Ocircumflexsmall', + 'Otildesmall', 'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall', + 'Uacutesmall', 'Ucircumflexsmall', 'Udieresissmall', 'Yacutesmall', + 'Thornsmall', 'Ydieresissmall', '001.000', '001.001', '001.002', '001.003', + 'Black', 'Bold', 'Book', 'Light', 'Medium', 'Regular', 'Roman', 'Semibold' +]; + +// Type1Font is also a CIDFontType0. +var Type1Font = function Type1Font(name, file, properties) { + // Some bad generators embed pfb file as is, we have to strip 6-byte headers. + // Also, length1 and length2 might be off by 6 bytes as well. + // http://www.math.ubc.ca/~cass/piscript/type1.pdf + var PFB_HEADER_SIZE = 6; + var headerBlockLength = properties.length1; + var eexecBlockLength = properties.length2; + var pfbHeader = file.peekBytes(PFB_HEADER_SIZE); + var pfbHeaderPresent = pfbHeader[0] === 0x80 && pfbHeader[1] === 0x01; + if (pfbHeaderPresent) { + file.skip(PFB_HEADER_SIZE); + headerBlockLength = (pfbHeader[5] << 24) | (pfbHeader[4] << 16) | + (pfbHeader[3] << 8) | pfbHeader[2]; + } + + // Get the data block containing glyphs and subrs informations + var headerBlock = new Stream(file.getBytes(headerBlockLength)); + var headerBlockParser = new Type1Parser(headerBlock); + headerBlockParser.extractFontHeader(properties); + + if (pfbHeaderPresent) { + pfbHeader = file.getBytes(PFB_HEADER_SIZE); + eexecBlockLength = (pfbHeader[5] << 24) | (pfbHeader[4] << 16) | + (pfbHeader[3] << 8) | pfbHeader[2]; + } + + // Decrypt the data blocks and retrieve it's content + var eexecBlock = new Stream(file.getBytes(eexecBlockLength)); + var eexecBlockParser = new Type1Parser(eexecBlock, true); + var data = eexecBlockParser.extractFontProgram(); + for (var info in data.properties) { + properties[info] = data.properties[info]; + } + + var charstrings = data.charstrings; + var type2Charstrings = this.getType2Charstrings(charstrings); + var subrs = this.getType2Subrs(data.subrs); + + this.charstrings = charstrings; + this.data = this.wrap(name, type2Charstrings, this.charstrings, + subrs, properties); + this.seacs = this.getSeacs(data.charstrings); +}; + +Type1Font.prototype = { + get numGlyphs() { + return this.charstrings.length + 1; + }, + + getCharset: function Type1Font_getCharset() { + var charset = ['.notdef']; + var charstrings = this.charstrings; + for (var glyphId = 0; glyphId < charstrings.length; glyphId++) { + charset.push(charstrings[glyphId].glyphName); + } + return charset; + }, + + getGlyphMapping: function Type1Font_getGlyphMapping(properties) { + var charstrings = this.charstrings; + var glyphNames = ['.notdef'], glyphId; + for (glyphId = 0; glyphId < charstrings.length; glyphId++) { + glyphNames.push(charstrings[glyphId].glyphName); + } + var encoding = properties.builtInEncoding; + if (encoding) { + var builtInEncoding = {}; + for (var charCode in encoding) { + glyphId = glyphNames.indexOf(encoding[charCode]); + if (glyphId >= 0) { + builtInEncoding[charCode] = glyphId; + } + } + } + + return type1FontGlyphMapping(properties, builtInEncoding, glyphNames); + }, + + getSeacs: function Type1Font_getSeacs(charstrings) { + var i, ii; + var seacMap = []; + for (i = 0, ii = charstrings.length; i < ii; i++) { + var charstring = charstrings[i]; + if (charstring.seac) { + // Offset by 1 for .notdef + seacMap[i + 1] = charstring.seac; + } + } + return seacMap; + }, + + getType2Charstrings: function Type1Font_getType2Charstrings( + type1Charstrings) { + var type2Charstrings = []; + for (var i = 0, ii = type1Charstrings.length; i < ii; i++) { + type2Charstrings.push(type1Charstrings[i].charstring); + } + return type2Charstrings; + }, + + getType2Subrs: function Type1Font_getType2Subrs(type1Subrs) { + var bias = 0; + var count = type1Subrs.length; + if (count < 1133) { + bias = 107; + } else if (count < 33769) { + bias = 1131; + } else { + bias = 32768; + } + + // Add a bunch of empty subrs to deal with the Type2 bias + var type2Subrs = []; + var i; + for (i = 0; i < bias; i++) { + type2Subrs.push([0x0B]); + } + + for (i = 0; i < count; i++) { + type2Subrs.push(type1Subrs[i]); + } + + return type2Subrs; + }, + + wrap: function Type1Font_wrap(name, glyphs, charstrings, subrs, properties) { + var cff = new CFF(); + cff.header = new CFFHeader(1, 0, 4, 4); + + cff.names = [name]; + + var topDict = new CFFTopDict(); + // CFF strings IDs 0...390 are predefined names, so refering + // to entries in our own String INDEX starts at SID 391. + topDict.setByName('version', 391); + topDict.setByName('Notice', 392); + topDict.setByName('FullName', 393); + topDict.setByName('FamilyName', 394); + topDict.setByName('Weight', 395); + topDict.setByName('Encoding', null); // placeholder + topDict.setByName('FontMatrix', properties.fontMatrix); + topDict.setByName('FontBBox', properties.bbox); + topDict.setByName('charset', null); // placeholder + topDict.setByName('CharStrings', null); // placeholder + topDict.setByName('Private', null); // placeholder + cff.topDict = topDict; + + var strings = new CFFStrings(); + strings.add('Version 0.11'); // Version + strings.add('See original notice'); // Notice + strings.add(name); // FullName + strings.add(name); // FamilyName + strings.add('Medium'); // Weight + cff.strings = strings; + + cff.globalSubrIndex = new CFFIndex(); + + var count = glyphs.length; + var charsetArray = [0]; + var i, ii; + for (i = 0; i < count; i++) { + var index = CFFStandardStrings.indexOf(charstrings[i].glyphName); + // TODO: Insert the string and correctly map it. Previously it was + // thought mapping names that aren't in the standard strings to .notdef + // was fine, however in issue818 when mapping them all to .notdef the + // adieresis glyph no longer worked. + if (index === -1) { + index = 0; + } + charsetArray.push((index >> 8) & 0xff, index & 0xff); + } + cff.charset = new CFFCharset(false, 0, [], charsetArray); + + var charStringsIndex = new CFFIndex(); + charStringsIndex.add([0x8B, 0x0E]); // .notdef + for (i = 0; i < count; i++) { + charStringsIndex.add(glyphs[i]); + } + cff.charStrings = charStringsIndex; + + var privateDict = new CFFPrivateDict(); + privateDict.setByName('Subrs', null); // placeholder + var fields = [ + 'BlueValues', + 'OtherBlues', + 'FamilyBlues', + 'FamilyOtherBlues', + 'StemSnapH', + 'StemSnapV', + 'BlueShift', + 'BlueFuzz', + 'BlueScale', + 'LanguageGroup', + 'ExpansionFactor', + 'ForceBold', + 'StdHW', + 'StdVW' + ]; + for (i = 0, ii = fields.length; i < ii; i++) { + var field = fields[i]; + if (!properties.privateData.hasOwnProperty(field)) { + continue; + } + var value = properties.privateData[field]; + if (isArray(value)) { + // All of the private dictionary array data in CFF must be stored as + // "delta-encoded" numbers. + for (var j = value.length - 1; j > 0; j--) { + value[j] -= value[j - 1]; // ... difference from previous value + } + } + privateDict.setByName(field, value); + } + cff.topDict.privateDict = privateDict; + + var subrIndex = new CFFIndex(); + for (i = 0, ii = subrs.length; i < ii; i++) { + subrIndex.add(subrs[i]); + } + privateDict.subrsIndex = subrIndex; + + var compiler = new CFFCompiler(cff); + return compiler.compile(); + } +}; + +var CFFFont = (function CFFFontClosure() { + function CFFFont(file, properties) { + this.properties = properties; + + var parser = new CFFParser(file, properties); + this.cff = parser.parse(); + var compiler = new CFFCompiler(this.cff); + this.seacs = this.cff.seacs; + try { + this.data = compiler.compile(); + } catch (e) { + warn('Failed to compile font ' + properties.loadedName); + // There may have just been an issue with the compiler, set the data + // anyway and hope the font loaded. + this.data = file; + } + } + + CFFFont.prototype = { + get numGlyphs() { + return this.cff.charStrings.count; + }, + getCharset: function CFFFont_getCharset() { + return this.cff.charset.charset; + }, + getGlyphMapping: function CFFFont_getGlyphMapping() { + var cff = this.cff; + var properties = this.properties; + var charsets = cff.charset.charset; + var charCodeToGlyphId; + var glyphId; + + if (properties.composite) { + charCodeToGlyphId = Object.create(null); + if (cff.isCIDFont) { + // If the font is actually a CID font then we should use the charset + // to map CIDs to GIDs. + for (glyphId = 0; glyphId < charsets.length; glyphId++) { + var cid = charsets[glyphId]; + var charCode = properties.cMap.charCodeOf(cid); + charCodeToGlyphId[charCode] = glyphId; + } + } else { + // If it is NOT actually a CID font then CIDs should be mapped + // directly to GIDs. + for (glyphId = 0; glyphId < cff.charStrings.count; glyphId++) { + charCodeToGlyphId[glyphId] = glyphId; + } + } + return charCodeToGlyphId; + } + + var encoding = cff.encoding ? cff.encoding.encoding : null; + charCodeToGlyphId = type1FontGlyphMapping(properties, encoding, charsets); + return charCodeToGlyphId; + } + }; + + return CFFFont; +})(); + +var CFFParser = (function CFFParserClosure() { + var CharstringValidationData = [ + null, + { id: 'hstem', min: 2, stackClearing: true, stem: true }, + null, + { id: 'vstem', min: 2, stackClearing: true, stem: true }, + { id: 'vmoveto', min: 1, stackClearing: true }, + { id: 'rlineto', min: 2, resetStack: true }, + { id: 'hlineto', min: 1, resetStack: true }, + { id: 'vlineto', min: 1, resetStack: true }, + { id: 'rrcurveto', min: 6, resetStack: true }, + null, + { id: 'callsubr', min: 1, undefStack: true }, + { id: 'return', min: 0, undefStack: true }, + null, // 12 + null, + { id: 'endchar', min: 0, stackClearing: true }, + null, + null, + null, + { id: 'hstemhm', min: 2, stackClearing: true, stem: true }, + { id: 'hintmask', min: 0, stackClearing: true }, + { id: 'cntrmask', min: 0, stackClearing: true }, + { id: 'rmoveto', min: 2, stackClearing: true }, + { id: 'hmoveto', min: 1, stackClearing: true }, + { id: 'vstemhm', min: 2, stackClearing: true, stem: true }, + { id: 'rcurveline', min: 8, resetStack: true }, + { id: 'rlinecurve', min: 8, resetStack: true }, + { id: 'vvcurveto', min: 4, resetStack: true }, + { id: 'hhcurveto', min: 4, resetStack: true }, + null, // shortint + { id: 'callgsubr', min: 1, undefStack: true }, + { id: 'vhcurveto', min: 4, resetStack: true }, + { id: 'hvcurveto', min: 4, resetStack: true } + ]; + var CharstringValidationData12 = [ + null, + null, + null, + { id: 'and', min: 2, stackDelta: -1 }, + { id: 'or', min: 2, stackDelta: -1 }, + { id: 'not', min: 1, stackDelta: 0 }, + null, + null, + null, + { id: 'abs', min: 1, stackDelta: 0 }, + { id: 'add', min: 2, stackDelta: -1, + stackFn: function stack_div(stack, index) { + stack[index - 2] = stack[index - 2] + stack[index - 1]; + } + }, + { id: 'sub', min: 2, stackDelta: -1, + stackFn: function stack_div(stack, index) { + stack[index - 2] = stack[index - 2] - stack[index - 1]; + } + }, + { id: 'div', min: 2, stackDelta: -1, + stackFn: function stack_div(stack, index) { + stack[index - 2] = stack[index - 2] / stack[index - 1]; + } + }, + null, + { id: 'neg', min: 1, stackDelta: 0, + stackFn: function stack_div(stack, index) { + stack[index - 1] = -stack[index - 1]; + } + }, + { id: 'eq', min: 2, stackDelta: -1 }, + null, + null, + { id: 'drop', min: 1, stackDelta: -1 }, + null, + { id: 'put', min: 2, stackDelta: -2 }, + { id: 'get', min: 1, stackDelta: 0 }, + { id: 'ifelse', min: 4, stackDelta: -3 }, + { id: 'random', min: 0, stackDelta: 1 }, + { id: 'mul', min: 2, stackDelta: -1, + stackFn: function stack_div(stack, index) { + stack[index - 2] = stack[index - 2] * stack[index - 1]; + } + }, + null, + { id: 'sqrt', min: 1, stackDelta: 0 }, + { id: 'dup', min: 1, stackDelta: 1 }, + { id: 'exch', min: 2, stackDelta: 0 }, + { id: 'index', min: 2, stackDelta: 0 }, + { id: 'roll', min: 3, stackDelta: -2 }, + null, + null, + null, + { id: 'hflex', min: 7, resetStack: true }, + { id: 'flex', min: 13, resetStack: true }, + { id: 'hflex1', min: 9, resetStack: true }, + { id: 'flex1', min: 11, resetStack: true } + ]; + + function CFFParser(file, properties) { + this.bytes = file.getBytes(); + this.properties = properties; + } + CFFParser.prototype = { + parse: function CFFParser_parse() { + var properties = this.properties; + var cff = new CFF(); + this.cff = cff; + + // The first five sections must be in order, all the others are reached + // via offsets contained in one of the below. + var header = this.parseHeader(); + var nameIndex = this.parseIndex(header.endPos); + var topDictIndex = this.parseIndex(nameIndex.endPos); + var stringIndex = this.parseIndex(topDictIndex.endPos); + var globalSubrIndex = this.parseIndex(stringIndex.endPos); + + var topDictParsed = this.parseDict(topDictIndex.obj.get(0)); + var topDict = this.createDict(CFFTopDict, topDictParsed, cff.strings); + + cff.header = header.obj; + cff.names = this.parseNameIndex(nameIndex.obj); + cff.strings = this.parseStringIndex(stringIndex.obj); + cff.topDict = topDict; + cff.globalSubrIndex = globalSubrIndex.obj; + + this.parsePrivateDict(cff.topDict); + + cff.isCIDFont = topDict.hasName('ROS'); + + var charStringOffset = topDict.getByName('CharStrings'); + var charStringsAndSeacs = this.parseCharStrings(charStringOffset); + cff.charStrings = charStringsAndSeacs.charStrings; + cff.seacs = charStringsAndSeacs.seacs; + cff.widths = charStringsAndSeacs.widths; + + var fontMatrix = topDict.getByName('FontMatrix'); + if (fontMatrix) { + properties.fontMatrix = fontMatrix; + } + + var fontBBox = topDict.getByName('FontBBox'); + if (fontBBox) { + // adjusting ascent/descent + properties.ascent = fontBBox[3]; + properties.descent = fontBBox[1]; + properties.ascentScaled = true; + } + + var charset, encoding; + if (cff.isCIDFont) { + var fdArrayIndex = this.parseIndex(topDict.getByName('FDArray')).obj; + for (var i = 0, ii = fdArrayIndex.count; i < ii; ++i) { + var dictRaw = fdArrayIndex.get(i); + var fontDict = this.createDict(CFFTopDict, this.parseDict(dictRaw), + cff.strings); + this.parsePrivateDict(fontDict); + cff.fdArray.push(fontDict); + } + // cid fonts don't have an encoding + encoding = null; + charset = this.parseCharsets(topDict.getByName('charset'), + cff.charStrings.count, cff.strings, true); + cff.fdSelect = this.parseFDSelect(topDict.getByName('FDSelect'), + cff.charStrings.count); + } else { + charset = this.parseCharsets(topDict.getByName('charset'), + cff.charStrings.count, cff.strings, false); + encoding = this.parseEncoding(topDict.getByName('Encoding'), + properties, + cff.strings, charset.charset); + } + cff.charset = charset; + cff.encoding = encoding; + + return cff; + }, + parseHeader: function CFFParser_parseHeader() { + var bytes = this.bytes; + var bytesLength = bytes.length; + var offset = 0; + + // Prevent an infinite loop, by checking that the offset is within the + // bounds of the bytes array. Necessary in empty, or invalid, font files. + while (offset < bytesLength && bytes[offset] !== 1) { + ++offset; + } + if (offset >= bytesLength) { + error('Invalid CFF header'); + } else if (offset !== 0) { + info('cff data is shifted'); + bytes = bytes.subarray(offset); + this.bytes = bytes; + } + var major = bytes[0]; + var minor = bytes[1]; + var hdrSize = bytes[2]; + var offSize = bytes[3]; + var header = new CFFHeader(major, minor, hdrSize, offSize); + return { obj: header, endPos: hdrSize }; + }, + parseDict: function CFFParser_parseDict(dict) { + var pos = 0; + + function parseOperand() { + var value = dict[pos++]; + if (value === 30) { + return parseFloatOperand(pos); + } else if (value === 28) { + value = dict[pos++]; + value = ((value << 24) | (dict[pos++] << 16)) >> 16; + return value; + } else if (value === 29) { + value = dict[pos++]; + value = (value << 8) | dict[pos++]; + value = (value << 8) | dict[pos++]; + value = (value << 8) | dict[pos++]; + return value; + } else if (value >= 32 && value <= 246) { + return value - 139; + } else if (value >= 247 && value <= 250) { + return ((value - 247) * 256) + dict[pos++] + 108; + } else if (value >= 251 && value <= 254) { + return -((value - 251) * 256) - dict[pos++] - 108; + } else { + error('255 is not a valid DICT command'); + } + return -1; + } + + function parseFloatOperand() { + var str = ''; + var eof = 15; + var lookup = ['0', '1', '2', '3', '4', '5', '6', '7', '8', + '9', '.', 'E', 'E-', null, '-']; + var length = dict.length; + while (pos < length) { + var b = dict[pos++]; + var b1 = b >> 4; + var b2 = b & 15; + + if (b1 === eof) { + break; + } + str += lookup[b1]; + + if (b2 === eof) { + break; + } + str += lookup[b2]; + } + return parseFloat(str); + } + + var operands = []; + var entries = []; + + pos = 0; + var end = dict.length; + while (pos < end) { + var b = dict[pos]; + if (b <= 21) { + if (b === 12) { + b = (b << 8) | dict[++pos]; + } + entries.push([b, operands]); + operands = []; + ++pos; + } else { + operands.push(parseOperand()); + } + } + return entries; + }, + parseIndex: function CFFParser_parseIndex(pos) { + var cffIndex = new CFFIndex(); + var bytes = this.bytes; + var count = (bytes[pos++] << 8) | bytes[pos++]; + var offsets = []; + var end = pos; + var i, ii; + + if (count !== 0) { + var offsetSize = bytes[pos++]; + // add 1 for offset to determine size of last object + var startPos = pos + ((count + 1) * offsetSize) - 1; + + for (i = 0, ii = count + 1; i < ii; ++i) { + var offset = 0; + for (var j = 0; j < offsetSize; ++j) { + offset <<= 8; + offset += bytes[pos++]; + } + offsets.push(startPos + offset); + } + end = offsets[count]; + } + for (i = 0, ii = offsets.length - 1; i < ii; ++i) { + var offsetStart = offsets[i]; + var offsetEnd = offsets[i + 1]; + cffIndex.add(bytes.subarray(offsetStart, offsetEnd)); + } + return {obj: cffIndex, endPos: end}; + }, + parseNameIndex: function CFFParser_parseNameIndex(index) { + var names = []; + for (var i = 0, ii = index.count; i < ii; ++i) { + var name = index.get(i); + // OTS doesn't allow names to be over 127 characters. + var length = Math.min(name.length, 127); + var data = []; + // OTS also only permits certain characters in the name. + for (var j = 0; j < length; ++j) { + var c = name[j]; + if (j === 0 && c === 0) { + data[j] = c; + continue; + } + if ((c < 33 || c > 126) || c === 91 /* [ */ || c === 93 /* ] */ || + c === 40 /* ( */ || c === 41 /* ) */ || c === 123 /* { */ || + c === 125 /* } */ || c === 60 /* < */ || c === 62 /* > */ || + c === 47 /* / */ || c === 37 /* % */ || c === 35 /* # */) { + data[j] = 95; + continue; + } + data[j] = c; + } + names.push(bytesToString(data)); + } + return names; + }, + parseStringIndex: function CFFParser_parseStringIndex(index) { + var strings = new CFFStrings(); + for (var i = 0, ii = index.count; i < ii; ++i) { + var data = index.get(i); + strings.add(bytesToString(data)); + } + return strings; + }, + createDict: function CFFParser_createDict(Type, dict, strings) { + var cffDict = new Type(strings); + for (var i = 0, ii = dict.length; i < ii; ++i) { + var pair = dict[i]; + var key = pair[0]; + var value = pair[1]; + cffDict.setByKey(key, value); + } + return cffDict; + }, + parseCharStrings: function CFFParser_parseCharStrings(charStringOffset) { + var charStrings = this.parseIndex(charStringOffset).obj; + var seacs = []; + var widths = []; + var count = charStrings.count; + for (var i = 0; i < count; i++) { + var charstring = charStrings.get(i); + + var stackSize = 0; + var stack = []; + var undefStack = true; + var hints = 0; + var valid = true; + var data = charstring; + var length = data.length; + var firstStackClearing = true; + for (var j = 0; j < length;) { + var value = data[j++]; + var validationCommand = null; + if (value === 12) { + var q = data[j++]; + if (q === 0) { + // The CFF specification state that the 'dotsection' command + // (12, 0) is deprecated and treated as a no-op, but all Type2 + // charstrings processors should support them. Unfortunately + // the font sanitizer don't. As a workaround the sequence (12, 0) + // is replaced by a useless (0, hmoveto). + data[j - 2] = 139; + data[j - 1] = 22; + stackSize = 0; + } else { + validationCommand = CharstringValidationData12[q]; + } + } else if (value === 28) { // number (16 bit) + stack[stackSize] = ((data[j] << 24) | (data[j + 1] << 16)) >> 16; + j += 2; + stackSize++; + } else if (value === 14) { + if (stackSize >= 4) { + stackSize -= 4; + if (SEAC_ANALYSIS_ENABLED) { + seacs[i] = stack.slice(stackSize, stackSize + 4); + valid = false; + } + } + validationCommand = CharstringValidationData[value]; + } else if (value >= 32 && value <= 246) { // number + stack[stackSize] = value - 139; + stackSize++; + } else if (value >= 247 && value <= 254) { // number (+1 bytes) + stack[stackSize] = (value < 251 ? + ((value - 247) << 8) + data[j] + 108 : + -((value - 251) << 8) - data[j] - 108); + j++; + stackSize++; + } else if (value === 255) { // number (32 bit) + stack[stackSize] = ((data[j] << 24) | (data[j + 1] << 16) | + (data[j + 2] << 8) | data[j + 3]) / 65536; + j += 4; + stackSize++; + } else if (value === 19 || value === 20) { + hints += stackSize >> 1; + j += (hints + 7) >> 3; // skipping right amount of hints flag data + stackSize %= 2; + validationCommand = CharstringValidationData[value]; + } else { + validationCommand = CharstringValidationData[value]; + } + if (validationCommand) { + if (validationCommand.stem) { + hints += stackSize >> 1; + } + if ('min' in validationCommand) { + if (!undefStack && stackSize < validationCommand.min) { + warn('Not enough parameters for ' + validationCommand.id + + '; actual: ' + stackSize + + ', expected: ' + validationCommand.min); + valid = false; + break; + } + } + if (firstStackClearing && validationCommand.stackClearing) { + firstStackClearing = false; + // the optional character width can be found before the first + // stack-clearing command arguments + stackSize -= validationCommand.min; + if (stackSize >= 2 && validationCommand.stem) { + // there are even amount of arguments for stem commands + stackSize %= 2; + } else if (stackSize > 1) { + warn('Found too many parameters for stack-clearing command'); + } + if (stackSize > 0 && stack[stackSize - 1] >= 0) { + widths[i] = stack[stackSize - 1]; + } + } + if ('stackDelta' in validationCommand) { + if ('stackFn' in validationCommand) { + validationCommand.stackFn(stack, stackSize); + } + stackSize += validationCommand.stackDelta; + } else if (validationCommand.stackClearing) { + stackSize = 0; + } else if (validationCommand.resetStack) { + stackSize = 0; + undefStack = false; + } else if (validationCommand.undefStack) { + stackSize = 0; + undefStack = true; + firstStackClearing = false; + } + } + } + if (!valid) { + // resetting invalid charstring to single 'endchar' + charStrings.set(i, new Uint8Array([14])); + } + } + return { charStrings: charStrings, seacs: seacs, widths: widths }; + }, + emptyPrivateDictionary: + function CFFParser_emptyPrivateDictionary(parentDict) { + var privateDict = this.createDict(CFFPrivateDict, [], + parentDict.strings); + parentDict.setByKey(18, [0, 0]); + parentDict.privateDict = privateDict; + }, + parsePrivateDict: function CFFParser_parsePrivateDict(parentDict) { + // no private dict, do nothing + if (!parentDict.hasName('Private')) { + this.emptyPrivateDictionary(parentDict); + return; + } + var privateOffset = parentDict.getByName('Private'); + // make sure the params are formatted correctly + if (!isArray(privateOffset) || privateOffset.length !== 2) { + parentDict.removeByName('Private'); + return; + } + var size = privateOffset[0]; + var offset = privateOffset[1]; + // remove empty dicts or ones that refer to invalid location + if (size === 0 || offset >= this.bytes.length) { + this.emptyPrivateDictionary(parentDict); + return; + } + + var privateDictEnd = offset + size; + var dictData = this.bytes.subarray(offset, privateDictEnd); + var dict = this.parseDict(dictData); + var privateDict = this.createDict(CFFPrivateDict, dict, + parentDict.strings); + parentDict.privateDict = privateDict; + + // Parse the Subrs index also since it's relative to the private dict. + if (!privateDict.getByName('Subrs')) { + return; + } + var subrsOffset = privateDict.getByName('Subrs'); + var relativeOffset = offset + subrsOffset; + // Validate the offset. + if (subrsOffset === 0 || relativeOffset >= this.bytes.length) { + this.emptyPrivateDictionary(parentDict); + return; + } + var subrsIndex = this.parseIndex(relativeOffset); + privateDict.subrsIndex = subrsIndex.obj; + }, + parseCharsets: function CFFParser_parseCharsets(pos, length, strings, cid) { + if (pos === 0) { + return new CFFCharset(true, CFFCharsetPredefinedTypes.ISO_ADOBE, + ISOAdobeCharset); + } else if (pos === 1) { + return new CFFCharset(true, CFFCharsetPredefinedTypes.EXPERT, + ExpertCharset); + } else if (pos === 2) { + return new CFFCharset(true, CFFCharsetPredefinedTypes.EXPERT_SUBSET, + ExpertSubsetCharset); + } + + var bytes = this.bytes; + var start = pos; + var format = bytes[pos++]; + var charset = ['.notdef']; + var id, count, i; + + // subtract 1 for the .notdef glyph + length -= 1; + + switch (format) { + case 0: + for (i = 0; i < length; i++) { + id = (bytes[pos++] << 8) | bytes[pos++]; + charset.push(cid ? id : strings.get(id)); + } + break; + case 1: + while (charset.length <= length) { + id = (bytes[pos++] << 8) | bytes[pos++]; + count = bytes[pos++]; + for (i = 0; i <= count; i++) { + charset.push(cid ? id++ : strings.get(id++)); + } + } + break; + case 2: + while (charset.length <= length) { + id = (bytes[pos++] << 8) | bytes[pos++]; + count = (bytes[pos++] << 8) | bytes[pos++]; + for (i = 0; i <= count; i++) { + charset.push(cid ? id++ : strings.get(id++)); + } + } + break; + default: + error('Unknown charset format'); + } + // Raw won't be needed if we actually compile the charset. + var end = pos; + var raw = bytes.subarray(start, end); + + return new CFFCharset(false, format, charset, raw); + }, + parseEncoding: function CFFParser_parseEncoding(pos, + properties, + strings, + charset) { + var encoding = {}; + var bytes = this.bytes; + var predefined = false; + var hasSupplement = false; + var format, i, ii; + var raw = null; + + function readSupplement() { + var supplementsCount = bytes[pos++]; + for (i = 0; i < supplementsCount; i++) { + var code = bytes[pos++]; + var sid = (bytes[pos++] << 8) + (bytes[pos++] & 0xff); + encoding[code] = charset.indexOf(strings.get(sid)); + } + } + + if (pos === 0 || pos === 1) { + predefined = true; + format = pos; + var baseEncoding = pos ? Encodings.ExpertEncoding : + Encodings.StandardEncoding; + for (i = 0, ii = charset.length; i < ii; i++) { + var index = baseEncoding.indexOf(charset[i]); + if (index !== -1) { + encoding[index] = i; + } + } + } else { + var dataStart = pos; + format = bytes[pos++]; + switch (format & 0x7f) { + case 0: + var glyphsCount = bytes[pos++]; + for (i = 1; i <= glyphsCount; i++) { + encoding[bytes[pos++]] = i; + } + break; + + case 1: + var rangesCount = bytes[pos++]; + var gid = 1; + for (i = 0; i < rangesCount; i++) { + var start = bytes[pos++]; + var left = bytes[pos++]; + for (var j = start; j <= start + left; j++) { + encoding[j] = gid++; + } + } + break; + + default: + error('Unknow encoding format: ' + format + ' in CFF'); + break; + } + var dataEnd = pos; + if (format & 0x80) { + // The font sanitizer does not support CFF encoding with a + // supplement, since the encoding is not really used to map + // between gid to glyph, let's overwrite what is declared in + // the top dictionary to let the sanitizer think the font use + // StandardEncoding, that's a lie but that's ok. + bytes[dataStart] &= 0x7f; + readSupplement(); + hasSupplement = true; + } + raw = bytes.subarray(dataStart, dataEnd); + } + format = format & 0x7f; + return new CFFEncoding(predefined, format, encoding, raw); + }, + parseFDSelect: function CFFParser_parseFDSelect(pos, length) { + var start = pos; + var bytes = this.bytes; + var format = bytes[pos++]; + var fdSelect = []; + var i; + + switch (format) { + case 0: + for (i = 0; i < length; ++i) { + var id = bytes[pos++]; + fdSelect.push(id); + } + break; + case 3: + var rangesCount = (bytes[pos++] << 8) | bytes[pos++]; + for (i = 0; i < rangesCount; ++i) { + var first = (bytes[pos++] << 8) | bytes[pos++]; + var fdIndex = bytes[pos++]; + var next = (bytes[pos] << 8) | bytes[pos + 1]; + for (var j = first; j < next; ++j) { + fdSelect.push(fdIndex); + } + } + // Advance past the sentinel(next). + pos += 2; + break; + default: + error('Unknown fdselect format ' + format); + break; + } + var end = pos; + return new CFFFDSelect(fdSelect, bytes.subarray(start, end)); + } + }; + return CFFParser; +})(); + +// Compact Font Format +var CFF = (function CFFClosure() { + function CFF() { + this.header = null; + this.names = []; + this.topDict = null; + this.strings = new CFFStrings(); + this.globalSubrIndex = null; + + // The following could really be per font, but since we only have one font + // store them here. + this.encoding = null; + this.charset = null; + this.charStrings = null; + this.fdArray = []; + this.fdSelect = null; + + this.isCIDFont = false; + } + return CFF; +})(); + +var CFFHeader = (function CFFHeaderClosure() { + function CFFHeader(major, minor, hdrSize, offSize) { + this.major = major; + this.minor = minor; + this.hdrSize = hdrSize; + this.offSize = offSize; + } + return CFFHeader; +})(); + +var CFFStrings = (function CFFStringsClosure() { + function CFFStrings() { + this.strings = []; + } + CFFStrings.prototype = { + get: function CFFStrings_get(index) { + if (index >= 0 && index <= 390) { + return CFFStandardStrings[index]; + } + if (index - 391 <= this.strings.length) { + return this.strings[index - 391]; + } + return CFFStandardStrings[0]; + }, + add: function CFFStrings_add(value) { + this.strings.push(value); + }, + get count() { + return this.strings.length; + } + }; + return CFFStrings; +})(); + +var CFFIndex = (function CFFIndexClosure() { + function CFFIndex() { + this.objects = []; + this.length = 0; + } + CFFIndex.prototype = { + add: function CFFIndex_add(data) { + this.length += data.length; + this.objects.push(data); + }, + set: function CFFIndex_set(index, data) { + this.length += data.length - this.objects[index].length; + this.objects[index] = data; + }, + get: function CFFIndex_get(index) { + return this.objects[index]; + }, + get count() { + return this.objects.length; + } + }; + return CFFIndex; +})(); + +var CFFDict = (function CFFDictClosure() { + function CFFDict(tables, strings) { + this.keyToNameMap = tables.keyToNameMap; + this.nameToKeyMap = tables.nameToKeyMap; + this.defaults = tables.defaults; + this.types = tables.types; + this.opcodes = tables.opcodes; + this.order = tables.order; + this.strings = strings; + this.values = {}; + } + CFFDict.prototype = { + // value should always be an array + setByKey: function CFFDict_setByKey(key, value) { + if (!(key in this.keyToNameMap)) { + return false; + } + // ignore empty values + if (value.length === 0) { + return true; + } + var type = this.types[key]; + // remove the array wrapping these types of values + if (type === 'num' || type === 'sid' || type === 'offset') { + value = value[0]; + } + this.values[key] = value; + return true; + }, + setByName: function CFFDict_setByName(name, value) { + if (!(name in this.nameToKeyMap)) { + error('Invalid dictionary name "' + name + '"'); + } + this.values[this.nameToKeyMap[name]] = value; + }, + hasName: function CFFDict_hasName(name) { + return this.nameToKeyMap[name] in this.values; + }, + getByName: function CFFDict_getByName(name) { + if (!(name in this.nameToKeyMap)) { + error('Invalid dictionary name "' + name + '"'); + } + var key = this.nameToKeyMap[name]; + if (!(key in this.values)) { + return this.defaults[key]; + } + return this.values[key]; + }, + removeByName: function CFFDict_removeByName(name) { + delete this.values[this.nameToKeyMap[name]]; + } + }; + CFFDict.createTables = function CFFDict_createTables(layout) { + var tables = { + keyToNameMap: {}, + nameToKeyMap: {}, + defaults: {}, + types: {}, + opcodes: {}, + order: [] + }; + for (var i = 0, ii = layout.length; i < ii; ++i) { + var entry = layout[i]; + var key = isArray(entry[0]) ? (entry[0][0] << 8) + entry[0][1] : entry[0]; + tables.keyToNameMap[key] = entry[1]; + tables.nameToKeyMap[entry[1]] = key; + tables.types[key] = entry[2]; + tables.defaults[key] = entry[3]; + tables.opcodes[key] = isArray(entry[0]) ? entry[0] : [entry[0]]; + tables.order.push(key); + } + return tables; + }; + return CFFDict; +})(); + +var CFFTopDict = (function CFFTopDictClosure() { + var layout = [ + [[12, 30], 'ROS', ['sid', 'sid', 'num'], null], + [[12, 20], 'SyntheticBase', 'num', null], + [0, 'version', 'sid', null], + [1, 'Notice', 'sid', null], + [[12, 0], 'Copyright', 'sid', null], + [2, 'FullName', 'sid', null], + [3, 'FamilyName', 'sid', null], + [4, 'Weight', 'sid', null], + [[12, 1], 'isFixedPitch', 'num', 0], + [[12, 2], 'ItalicAngle', 'num', 0], + [[12, 3], 'UnderlinePosition', 'num', -100], + [[12, 4], 'UnderlineThickness', 'num', 50], + [[12, 5], 'PaintType', 'num', 0], + [[12, 6], 'CharstringType', 'num', 2], + [[12, 7], 'FontMatrix', ['num', 'num', 'num', 'num', 'num', 'num'], + [0.001, 0, 0, 0.001, 0, 0]], + [13, 'UniqueID', 'num', null], + [5, 'FontBBox', ['num', 'num', 'num', 'num'], [0, 0, 0, 0]], + [[12, 8], 'StrokeWidth', 'num', 0], + [14, 'XUID', 'array', null], + [15, 'charset', 'offset', 0], + [16, 'Encoding', 'offset', 0], + [17, 'CharStrings', 'offset', 0], + [18, 'Private', ['offset', 'offset'], null], + [[12, 21], 'PostScript', 'sid', null], + [[12, 22], 'BaseFontName', 'sid', null], + [[12, 23], 'BaseFontBlend', 'delta', null], + [[12, 31], 'CIDFontVersion', 'num', 0], + [[12, 32], 'CIDFontRevision', 'num', 0], + [[12, 33], 'CIDFontType', 'num', 0], + [[12, 34], 'CIDCount', 'num', 8720], + [[12, 35], 'UIDBase', 'num', null], + // XXX: CID Fonts on DirectWrite 6.1 only seem to work if FDSelect comes + // before FDArray. + [[12, 37], 'FDSelect', 'offset', null], + [[12, 36], 'FDArray', 'offset', null], + [[12, 38], 'FontName', 'sid', null] + ]; + var tables = null; + function CFFTopDict(strings) { + if (tables === null) { + tables = CFFDict.createTables(layout); + } + CFFDict.call(this, tables, strings); + this.privateDict = null; + } + CFFTopDict.prototype = Object.create(CFFDict.prototype); + return CFFTopDict; +})(); + +var CFFPrivateDict = (function CFFPrivateDictClosure() { + var layout = [ + [6, 'BlueValues', 'delta', null], + [7, 'OtherBlues', 'delta', null], + [8, 'FamilyBlues', 'delta', null], + [9, 'FamilyOtherBlues', 'delta', null], + [[12, 9], 'BlueScale', 'num', 0.039625], + [[12, 10], 'BlueShift', 'num', 7], + [[12, 11], 'BlueFuzz', 'num', 1], + [10, 'StdHW', 'num', null], + [11, 'StdVW', 'num', null], + [[12, 12], 'StemSnapH', 'delta', null], + [[12, 13], 'StemSnapV', 'delta', null], + [[12, 14], 'ForceBold', 'num', 0], + [[12, 17], 'LanguageGroup', 'num', 0], + [[12, 18], 'ExpansionFactor', 'num', 0.06], + [[12, 19], 'initialRandomSeed', 'num', 0], + [20, 'defaultWidthX', 'num', 0], + [21, 'nominalWidthX', 'num', 0], + [19, 'Subrs', 'offset', null] + ]; + var tables = null; + function CFFPrivateDict(strings) { + if (tables === null) { + tables = CFFDict.createTables(layout); + } + CFFDict.call(this, tables, strings); + this.subrsIndex = null; + } + CFFPrivateDict.prototype = Object.create(CFFDict.prototype); + return CFFPrivateDict; +})(); + +var CFFCharsetPredefinedTypes = { + ISO_ADOBE: 0, + EXPERT: 1, + EXPERT_SUBSET: 2 +}; +var CFFCharset = (function CFFCharsetClosure() { + function CFFCharset(predefined, format, charset, raw) { + this.predefined = predefined; + this.format = format; + this.charset = charset; + this.raw = raw; + } + return CFFCharset; +})(); + +var CFFEncoding = (function CFFEncodingClosure() { + function CFFEncoding(predefined, format, encoding, raw) { + this.predefined = predefined; + this.format = format; + this.encoding = encoding; + this.raw = raw; + } + return CFFEncoding; +})(); + +var CFFFDSelect = (function CFFFDSelectClosure() { + function CFFFDSelect(fdSelect, raw) { + this.fdSelect = fdSelect; + this.raw = raw; + } + return CFFFDSelect; +})(); + +// Helper class to keep track of where an offset is within the data and helps +// filling in that offset once it's known. +var CFFOffsetTracker = (function CFFOffsetTrackerClosure() { + function CFFOffsetTracker() { + this.offsets = {}; + } + CFFOffsetTracker.prototype = { + isTracking: function CFFOffsetTracker_isTracking(key) { + return key in this.offsets; + }, + track: function CFFOffsetTracker_track(key, location) { + if (key in this.offsets) { + error('Already tracking location of ' + key); + } + this.offsets[key] = location; + }, + offset: function CFFOffsetTracker_offset(value) { + for (var key in this.offsets) { + this.offsets[key] += value; + } + }, + setEntryLocation: function CFFOffsetTracker_setEntryLocation(key, + values, + output) { + if (!(key in this.offsets)) { + error('Not tracking location of ' + key); + } + var data = output.data; + var dataOffset = this.offsets[key]; + var size = 5; + for (var i = 0, ii = values.length; i < ii; ++i) { + var offset0 = i * size + dataOffset; + var offset1 = offset0 + 1; + var offset2 = offset0 + 2; + var offset3 = offset0 + 3; + var offset4 = offset0 + 4; + // It's easy to screw up offsets so perform this sanity check. + if (data[offset0] !== 0x1d || data[offset1] !== 0 || + data[offset2] !== 0 || data[offset3] !== 0 || data[offset4] !== 0) { + error('writing to an offset that is not empty'); + } + var value = values[i]; + data[offset0] = 0x1d; + data[offset1] = (value >> 24) & 0xFF; + data[offset2] = (value >> 16) & 0xFF; + data[offset3] = (value >> 8) & 0xFF; + data[offset4] = value & 0xFF; + } + } + }; + return CFFOffsetTracker; +})(); + +// Takes a CFF and converts it to the binary representation. +var CFFCompiler = (function CFFCompilerClosure() { + function CFFCompiler(cff) { + this.cff = cff; + } + CFFCompiler.prototype = { + compile: function CFFCompiler_compile() { + var cff = this.cff; + var output = { + data: [], + length: 0, + add: function CFFCompiler_add(data) { + this.data = this.data.concat(data); + this.length = this.data.length; + } + }; + + // Compile the five entries that must be in order. + var header = this.compileHeader(cff.header); + output.add(header); + + var nameIndex = this.compileNameIndex(cff.names); + output.add(nameIndex); + + if (cff.isCIDFont) { + // The spec is unclear on how font matrices should relate to each other + // when there is one in the main top dict and the sub top dicts. + // Windows handles this differently than linux and osx so we have to + // normalize to work on all. + // Rules based off of some mailing list discussions: + // - If main font has a matrix and subfont doesn't, use the main matrix. + // - If no main font matrix and there is a subfont matrix, use the + // subfont matrix. + // - If both have matrices, concat together. + // - If neither have matrices, use default. + // To make this work on all platforms we move the top matrix into each + // sub top dict and concat if necessary. + if (cff.topDict.hasName('FontMatrix')) { + var base = cff.topDict.getByName('FontMatrix'); + cff.topDict.removeByName('FontMatrix'); + for (var i = 0, ii = cff.fdArray.length; i < ii; i++) { + var subDict = cff.fdArray[i]; + var matrix = base.slice(0); + if (subDict.hasName('FontMatrix')) { + matrix = Util.transform(matrix, subDict.getByName('FontMatrix')); + } + subDict.setByName('FontMatrix', matrix); + } + } + } + + var compiled = this.compileTopDicts([cff.topDict], + output.length, + cff.isCIDFont); + output.add(compiled.output); + var topDictTracker = compiled.trackers[0]; + + var stringIndex = this.compileStringIndex(cff.strings.strings); + output.add(stringIndex); + + var globalSubrIndex = this.compileIndex(cff.globalSubrIndex); + output.add(globalSubrIndex); + + // Now start on the other entries that have no specfic order. + if (cff.encoding && cff.topDict.hasName('Encoding')) { + if (cff.encoding.predefined) { + topDictTracker.setEntryLocation('Encoding', [cff.encoding.format], + output); + } else { + var encoding = this.compileEncoding(cff.encoding); + topDictTracker.setEntryLocation('Encoding', [output.length], output); + output.add(encoding); + } + } + + if (cff.charset && cff.topDict.hasName('charset')) { + if (cff.charset.predefined) { + topDictTracker.setEntryLocation('charset', [cff.charset.format], + output); + } else { + var charset = this.compileCharset(cff.charset); + topDictTracker.setEntryLocation('charset', [output.length], output); + output.add(charset); + } + } + + var charStrings = this.compileCharStrings(cff.charStrings); + topDictTracker.setEntryLocation('CharStrings', [output.length], output); + output.add(charStrings); + + if (cff.isCIDFont) { + // For some reason FDSelect must be in front of FDArray on windows. OSX + // and linux don't seem to care. + topDictTracker.setEntryLocation('FDSelect', [output.length], output); + var fdSelect = this.compileFDSelect(cff.fdSelect.raw); + output.add(fdSelect); + // It is unclear if the sub font dictionary can have CID related + // dictionary keys, but the sanitizer doesn't like them so remove them. + compiled = this.compileTopDicts(cff.fdArray, output.length, true); + topDictTracker.setEntryLocation('FDArray', [output.length], output); + output.add(compiled.output); + var fontDictTrackers = compiled.trackers; + + this.compilePrivateDicts(cff.fdArray, fontDictTrackers, output); + } + + this.compilePrivateDicts([cff.topDict], [topDictTracker], output); + + // If the font data ends with INDEX whose object data is zero-length, + // the sanitizer will bail out. Add a dummy byte to avoid that. + output.add([0]); + + return output.data; + }, + encodeNumber: function CFFCompiler_encodeNumber(value) { + if (parseFloat(value) === parseInt(value, 10) && !isNaN(value)) { // isInt + return this.encodeInteger(value); + } else { + return this.encodeFloat(value); + } + }, + encodeFloat: function CFFCompiler_encodeFloat(num) { + var value = num.toString(); + + // rounding inaccurate doubles + var m = /\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/.exec(value); + if (m) { + var epsilon = parseFloat('1e' + ((m[2] ? +m[2] : 0) + m[1].length)); + value = (Math.round(num * epsilon) / epsilon).toString(); + } + + var nibbles = ''; + var i, ii; + for (i = 0, ii = value.length; i < ii; ++i) { + var a = value[i]; + if (a === 'e') { + nibbles += value[++i] === '-' ? 'c' : 'b'; + } else if (a === '.') { + nibbles += 'a'; + } else if (a === '-') { + nibbles += 'e'; + } else { + nibbles += a; + } + } + nibbles += (nibbles.length & 1) ? 'f' : 'ff'; + var out = [30]; + for (i = 0, ii = nibbles.length; i < ii; i += 2) { + out.push(parseInt(nibbles.substr(i, 2), 16)); + } + return out; + }, + encodeInteger: function CFFCompiler_encodeInteger(value) { + var code; + if (value >= -107 && value <= 107) { + code = [value + 139]; + } else if (value >= 108 && value <= 1131) { + value = [value - 108]; + code = [(value >> 8) + 247, value & 0xFF]; + } else if (value >= -1131 && value <= -108) { + value = -value - 108; + code = [(value >> 8) + 251, value & 0xFF]; + } else if (value >= -32768 && value <= 32767) { + code = [0x1c, (value >> 8) & 0xFF, value & 0xFF]; + } else { + code = [0x1d, + (value >> 24) & 0xFF, + (value >> 16) & 0xFF, + (value >> 8) & 0xFF, + value & 0xFF]; + } + return code; + }, + compileHeader: function CFFCompiler_compileHeader(header) { + return [ + header.major, + header.minor, + header.hdrSize, + header.offSize + ]; + }, + compileNameIndex: function CFFCompiler_compileNameIndex(names) { + var nameIndex = new CFFIndex(); + for (var i = 0, ii = names.length; i < ii; ++i) { + nameIndex.add(stringToBytes(names[i])); + } + return this.compileIndex(nameIndex); + }, + compileTopDicts: function CFFCompiler_compileTopDicts(dicts, + length, + removeCidKeys) { + var fontDictTrackers = []; + var fdArrayIndex = new CFFIndex(); + for (var i = 0, ii = dicts.length; i < ii; ++i) { + var fontDict = dicts[i]; + if (removeCidKeys) { + fontDict.removeByName('CIDFontVersion'); + fontDict.removeByName('CIDFontRevision'); + fontDict.removeByName('CIDFontType'); + fontDict.removeByName('CIDCount'); + fontDict.removeByName('UIDBase'); + } + var fontDictTracker = new CFFOffsetTracker(); + var fontDictData = this.compileDict(fontDict, fontDictTracker); + fontDictTrackers.push(fontDictTracker); + fdArrayIndex.add(fontDictData); + fontDictTracker.offset(length); + } + fdArrayIndex = this.compileIndex(fdArrayIndex, fontDictTrackers); + return { + trackers: fontDictTrackers, + output: fdArrayIndex + }; + }, + compilePrivateDicts: function CFFCompiler_compilePrivateDicts(dicts, + trackers, + output) { + for (var i = 0, ii = dicts.length; i < ii; ++i) { + var fontDict = dicts[i]; + assert(fontDict.privateDict && fontDict.hasName('Private'), + 'There must be an private dictionary.'); + var privateDict = fontDict.privateDict; + var privateDictTracker = new CFFOffsetTracker(); + var privateDictData = this.compileDict(privateDict, privateDictTracker); + + var outputLength = output.length; + privateDictTracker.offset(outputLength); + if (!privateDictData.length) { + // The private dictionary was empty, set the output length to zero to + // ensure the offset length isn't out of bounds in the eyes of the + // sanitizer. + outputLength = 0; + } + + trackers[i].setEntryLocation('Private', + [privateDictData.length, outputLength], + output); + output.add(privateDictData); + + if (privateDict.subrsIndex && privateDict.hasName('Subrs')) { + var subrs = this.compileIndex(privateDict.subrsIndex); + privateDictTracker.setEntryLocation('Subrs', [privateDictData.length], + output); + output.add(subrs); + } + } + }, + compileDict: function CFFCompiler_compileDict(dict, offsetTracker) { + var out = []; + // The dictionary keys must be in a certain order. + var order = dict.order; + for (var i = 0; i < order.length; ++i) { + var key = order[i]; + if (!(key in dict.values)) { + continue; + } + var values = dict.values[key]; + var types = dict.types[key]; + if (!isArray(types)) { + types = [types]; + } + if (!isArray(values)) { + values = [values]; + } + + // Remove any empty dict values. + if (values.length === 0) { + continue; + } + + for (var j = 0, jj = types.length; j < jj; ++j) { + var type = types[j]; + var value = values[j]; + switch (type) { + case 'num': + case 'sid': + out = out.concat(this.encodeNumber(value)); + break; + case 'offset': + // For offsets we just insert a 32bit integer so we don't have to + // deal with figuring out the length of the offset when it gets + // replaced later on by the compiler. + var name = dict.keyToNameMap[key]; + // Some offsets have the offset and the length, so just record the + // position of the first one. + if (!offsetTracker.isTracking(name)) { + offsetTracker.track(name, out.length); + } + out = out.concat([0x1d, 0, 0, 0, 0]); + break; + case 'array': + case 'delta': + out = out.concat(this.encodeNumber(value)); + for (var k = 1, kk = values.length; k < kk; ++k) { + out = out.concat(this.encodeNumber(values[k])); + } + break; + default: + error('Unknown data type of ' + type); + break; + } + } + out = out.concat(dict.opcodes[key]); + } + return out; + }, + compileStringIndex: function CFFCompiler_compileStringIndex(strings) { + var stringIndex = new CFFIndex(); + for (var i = 0, ii = strings.length; i < ii; ++i) { + stringIndex.add(stringToBytes(strings[i])); + } + return this.compileIndex(stringIndex); + }, + compileGlobalSubrIndex: function CFFCompiler_compileGlobalSubrIndex() { + var globalSubrIndex = this.cff.globalSubrIndex; + this.out.writeByteArray(this.compileIndex(globalSubrIndex)); + }, + compileCharStrings: function CFFCompiler_compileCharStrings(charStrings) { + return this.compileIndex(charStrings); + }, + compileCharset: function CFFCompiler_compileCharset(charset) { + return this.compileTypedArray(charset.raw); + }, + compileEncoding: function CFFCompiler_compileEncoding(encoding) { + return this.compileTypedArray(encoding.raw); + }, + compileFDSelect: function CFFCompiler_compileFDSelect(fdSelect) { + return this.compileTypedArray(fdSelect); + }, + compileTypedArray: function CFFCompiler_compileTypedArray(data) { + var out = []; + for (var i = 0, ii = data.length; i < ii; ++i) { + out[i] = data[i]; + } + return out; + }, + compileIndex: function CFFCompiler_compileIndex(index, trackers) { + trackers = trackers || []; + var objects = index.objects; + // First 2 bytes contains the number of objects contained into this index + var count = objects.length; + + // If there is no object, just create an index. This technically + // should just be [0, 0] but OTS has an issue with that. + if (count === 0) { + return [0, 0, 0]; + } + + var data = [(count >> 8) & 0xFF, count & 0xff]; + + var lastOffset = 1, i; + for (i = 0; i < count; ++i) { + lastOffset += objects[i].length; + } + + var offsetSize; + if (lastOffset < 0x100) { + offsetSize = 1; + } else if (lastOffset < 0x10000) { + offsetSize = 2; + } else if (lastOffset < 0x1000000) { + offsetSize = 3; + } else { + offsetSize = 4; + } + + // Next byte contains the offset size use to reference object in the file + data.push(offsetSize); + + // Add another offset after this one because we need a new offset + var relativeOffset = 1; + for (i = 0; i < count + 1; i++) { + if (offsetSize === 1) { + data.push(relativeOffset & 0xFF); + } else if (offsetSize === 2) { + data.push((relativeOffset >> 8) & 0xFF, + relativeOffset & 0xFF); + } else if (offsetSize === 3) { + data.push((relativeOffset >> 16) & 0xFF, + (relativeOffset >> 8) & 0xFF, + relativeOffset & 0xFF); + } else { + data.push((relativeOffset >>> 24) & 0xFF, + (relativeOffset >> 16) & 0xFF, + (relativeOffset >> 8) & 0xFF, + relativeOffset & 0xFF); + } + + if (objects[i]) { + relativeOffset += objects[i].length; + } + } + + for (i = 0; i < count; i++) { + // Notify the tracker where the object will be offset in the data. + if (trackers[i]) { + trackers[i].offset(data.length); + } + for (var j = 0, jj = objects[i].length; j < jj; j++) { + data.push(objects[i][j]); + } + } + return data; + } + }; + return CFFCompiler; +})(); + +// Workaround for seac on Windows. +(function checkSeacSupport() { + if (/Windows/.test(navigator.userAgent)) { + SEAC_ANALYSIS_ENABLED = true; + } +})(); + +// Workaround for Private Use Area characters in Chrome on Windows +// http://code.google.com/p/chromium/issues/detail?id=122465 +// https://github.com/mozilla/pdf.js/issues/1689 +(function checkChromeWindows() { + if (/Windows.*Chrome/.test(navigator.userAgent)) { + SKIP_PRIVATE_USE_RANGE_F000_TO_F01F = true; + } +})(); + + +var FontRendererFactory = (function FontRendererFactoryClosure() { + function getLong(data, offset) { + return (data[offset] << 24) | (data[offset + 1] << 16) | + (data[offset + 2] << 8) | data[offset + 3]; + } + + function getUshort(data, offset) { + return (data[offset] << 8) | data[offset + 1]; + } + + function parseCmap(data, start, end) { + var offset = (getUshort(data, start + 2) === 1 ? + getLong(data, start + 8) : getLong(data, start + 16)); + var format = getUshort(data, start + offset); + var length, ranges, p, i; + if (format === 4) { + length = getUshort(data, start + offset + 2); + var segCount = getUshort(data, start + offset + 6) >> 1; + p = start + offset + 14; + ranges = []; + for (i = 0; i < segCount; i++, p += 2) { + ranges[i] = {end: getUshort(data, p)}; + } + p += 2; + for (i = 0; i < segCount; i++, p += 2) { + ranges[i].start = getUshort(data, p); + } + for (i = 0; i < segCount; i++, p += 2) { + ranges[i].idDelta = getUshort(data, p); + } + for (i = 0; i < segCount; i++, p += 2) { + var idOffset = getUshort(data, p); + if (idOffset === 0) { + continue; + } + ranges[i].ids = []; + for (var j = 0, jj = ranges[i].end - ranges[i].start + 1; j < jj; j++) { + ranges[i].ids[j] = getUshort(data, p + idOffset); + idOffset += 2; + } + } + return ranges; + } else if (format === 12) { + length = getLong(data, start + offset + 4); + var groups = getLong(data, start + offset + 12); + p = start + offset + 16; + ranges = []; + for (i = 0; i < groups; i++) { + ranges.push({ + start: getLong(data, p), + end: getLong(data, p + 4), + idDelta: getLong(data, p + 8) - getLong(data, p) + }); + p += 12; + } + return ranges; + } + error('not supported cmap: ' + format); + } + + function parseCff(data, start, end) { + var properties = {}; + var parser = new CFFParser(new Stream(data, start, end - start), + properties); + var cff = parser.parse(); + return { + glyphs: cff.charStrings.objects, + subrs: (cff.topDict.privateDict && cff.topDict.privateDict.subrsIndex && + cff.topDict.privateDict.subrsIndex.objects), + gsubrs: cff.globalSubrIndex && cff.globalSubrIndex.objects + }; + } + + function parseGlyfTable(glyf, loca, isGlyphLocationsLong) { + var itemSize, itemDecode; + if (isGlyphLocationsLong) { + itemSize = 4; + itemDecode = function fontItemDecodeLong(data, offset) { + return (data[offset] << 24) | (data[offset + 1] << 16) | + (data[offset + 2] << 8) | data[offset + 3]; + }; + } else { + itemSize = 2; + itemDecode = function fontItemDecode(data, offset) { + return (data[offset] << 9) | (data[offset + 1] << 1); + }; + } + var glyphs = []; + var startOffset = itemDecode(loca, 0); + for (var j = itemSize; j < loca.length; j += itemSize) { + var endOffset = itemDecode(loca, j); + glyphs.push(glyf.subarray(startOffset, endOffset)); + startOffset = endOffset; + } + return glyphs; + } + + function lookupCmap(ranges, unicode) { + var code = unicode.charCodeAt(0); + var l = 0, r = ranges.length - 1; + while (l < r) { + var c = (l + r + 1) >> 1; + if (code < ranges[c].start) { + r = c - 1; + } else { + l = c; + } + } + if (ranges[l].start <= code && code <= ranges[l].end) { + return (ranges[l].idDelta + (ranges[l].ids ? + ranges[l].ids[code - ranges[l].start] : code)) & 0xFFFF; + } + return 0; + } + + function compileGlyf(code, js, font) { + function moveTo(x, y) { + js.push('c.moveTo(' + x + ',' + y + ');'); + } + function lineTo(x, y) { + js.push('c.lineTo(' + x + ',' + y + ');'); + } + function quadraticCurveTo(xa, ya, x, y) { + js.push('c.quadraticCurveTo(' + xa + ',' + ya + ',' + + x + ',' + y + ');'); + } + + var i = 0; + var numberOfContours = ((code[i] << 24) | (code[i + 1] << 16)) >> 16; + var flags; + var x = 0, y = 0; + i += 10; + if (numberOfContours < 0) { + // composite glyph + do { + flags = (code[i] << 8) | code[i + 1]; + var glyphIndex = (code[i + 2] << 8) | code[i + 3]; + i += 4; + var arg1, arg2; + if ((flags & 0x01)) { + arg1 = ((code[i] << 24) | (code[i + 1] << 16)) >> 16; + arg2 = ((code[i + 2] << 24) | (code[i + 3] << 16)) >> 16; + i += 4; + } else { + arg1 = code[i++]; arg2 = code[i++]; + } + if ((flags & 0x02)) { + x = arg1; + y = arg2; + } else { + x = 0; y = 0; // TODO "they are points" ? + } + var scaleX = 1, scaleY = 1, scale01 = 0, scale10 = 0; + if ((flags & 0x08)) { + scaleX = + scaleY = ((code[i] << 24) | (code[i + 1] << 16)) / 1073741824; + i += 2; + } else if ((flags & 0x40)) { + scaleX = ((code[i] << 24) | (code[i + 1] << 16)) / 1073741824; + scaleY = ((code[i + 2] << 24) | (code[i + 3] << 16)) / 1073741824; + i += 4; + } else if ((flags & 0x80)) { + scaleX = ((code[i] << 24) | (code[i + 1] << 16)) / 1073741824; + scale01 = ((code[i + 2] << 24) | (code[i + 3] << 16)) / 1073741824; + scale10 = ((code[i + 4] << 24) | (code[i + 5] << 16)) / 1073741824; + scaleY = ((code[i + 6] << 24) | (code[i + 7] << 16)) / 1073741824; + i += 8; + } + var subglyph = font.glyphs[glyphIndex]; + if (subglyph) { + js.push('c.save();'); + js.push('c.transform(' + scaleX + ',' + scale01 + ',' + + scale10 + ',' + scaleY + ',' + x + ',' + y + ');'); + compileGlyf(subglyph, js, font); + js.push('c.restore();'); + } + } while ((flags & 0x20)); + } else { + // simple glyph + var endPtsOfContours = []; + var j, jj; + for (j = 0; j < numberOfContours; j++) { + endPtsOfContours.push((code[i] << 8) | code[i + 1]); + i += 2; + } + var instructionLength = (code[i] << 8) | code[i + 1]; + i += 2 + instructionLength; // skipping the instructions + var numberOfPoints = endPtsOfContours[endPtsOfContours.length - 1] + 1; + var points = []; + while (points.length < numberOfPoints) { + flags = code[i++]; + var repeat = 1; + if ((flags & 0x08)) { + repeat += code[i++]; + } + while (repeat-- > 0) { + points.push({flags: flags}); + } + } + for (j = 0; j < numberOfPoints; j++) { + switch (points[j].flags & 0x12) { + case 0x00: + x += ((code[i] << 24) | (code[i + 1] << 16)) >> 16; + i += 2; + break; + case 0x02: + x -= code[i++]; + break; + case 0x12: + x += code[i++]; + break; + } + points[j].x = x; + } + for (j = 0; j < numberOfPoints; j++) { + switch (points[j].flags & 0x24) { + case 0x00: + y += ((code[i] << 24) | (code[i + 1] << 16)) >> 16; + i += 2; + break; + case 0x04: + y -= code[i++]; + break; + case 0x24: + y += code[i++]; + break; + } + points[j].y = y; + } + + var startPoint = 0; + for (i = 0; i < numberOfContours; i++) { + var endPoint = endPtsOfContours[i]; + // contours might have implicit points, which is located in the middle + // between two neighboring off-curve points + var contour = points.slice(startPoint, endPoint + 1); + if ((contour[0].flags & 1)) { + contour.push(contour[0]); // using start point at the contour end + } else if ((contour[contour.length - 1].flags & 1)) { + // first is off-curve point, trying to use one from the end + contour.unshift(contour[contour.length - 1]); + } else { + // start and end are off-curve points, creating implicit one + var p = { + flags: 1, + x: (contour[0].x + contour[contour.length - 1].x) / 2, + y: (contour[0].y + contour[contour.length - 1].y) / 2 + }; + contour.unshift(p); + contour.push(p); + } + moveTo(contour[0].x, contour[0].y); + for (j = 1, jj = contour.length; j < jj; j++) { + if ((contour[j].flags & 1)) { + lineTo(contour[j].x, contour[j].y); + } else if ((contour[j + 1].flags & 1)){ + quadraticCurveTo(contour[j].x, contour[j].y, + contour[j + 1].x, contour[j + 1].y); + j++; + } else { + quadraticCurveTo(contour[j].x, contour[j].y, + (contour[j].x + contour[j + 1].x) / 2, + (contour[j].y + contour[j + 1].y) / 2); + } + } + startPoint = endPoint + 1; + } + } + } + + function compileCharString(code, js, font) { + var stack = []; + var x = 0, y = 0; + var stems = 0; + + function moveTo(x, y) { + js.push('c.moveTo(' + x + ',' + y + ');'); + } + function lineTo(x, y) { + js.push('c.lineTo(' + x + ',' + y + ');'); + } + function bezierCurveTo(x1, y1, x2, y2, x, y) { + js.push('c.bezierCurveTo(' + x1 + ',' + y1 + ',' + x2 + ',' + y2 + ',' + + x + ',' + y + ');'); + } + + function parse(code) { + var i = 0; + while (i < code.length) { + var stackClean = false; + var v = code[i++]; + var xa, xb, ya, yb, y1, y2, y3, n, subrCode; + switch (v) { + case 1: // hstem + stems += stack.length >> 1; + stackClean = true; + break; + case 3: // vstem + stems += stack.length >> 1; + stackClean = true; + break; + case 4: // vmoveto + y += stack.pop(); + moveTo(x, y); + stackClean = true; + break; + case 5: // rlineto + while (stack.length > 0) { + x += stack.shift(); + y += stack.shift(); + lineTo(x, y); + } + break; + case 6: // hlineto + while (stack.length > 0) { + x += stack.shift(); + lineTo(x, y); + if (stack.length === 0) { + break; + } + y += stack.shift(); + lineTo(x, y); + } + break; + case 7: // vlineto + while (stack.length > 0) { + y += stack.shift(); + lineTo(x, y); + if (stack.length === 0) { + break; + } + x += stack.shift(); + lineTo(x, y); + } + break; + case 8: // rrcurveto + while (stack.length > 0) { + xa = x + stack.shift(); ya = y + stack.shift(); + xb = xa + stack.shift(); yb = ya + stack.shift(); + x = xb + stack.shift(); y = yb + stack.shift(); + bezierCurveTo(xa, ya, xb, yb, x, y); + } + break; + case 10: // callsubr + n = stack.pop() + font.subrsBias; + subrCode = font.subrs[n]; + if (subrCode) { + parse(subrCode); + } + break; + case 11: // return + return; + case 12: + v = code[i++]; + switch (v) { + case 34: // flex + xa = x + stack.shift(); + xb = xa + stack.shift(); y1 = y + stack.shift(); + x = xb + stack.shift(); + bezierCurveTo(xa, y, xb, y1, x, y1); + xa = x + stack.shift(); + xb = xa + stack.shift(); + x = xb + stack.shift(); + bezierCurveTo(xa, y1, xb, y, x, y); + break; + case 35: // flex + xa = x + stack.shift(); ya = y + stack.shift(); + xb = xa + stack.shift(); yb = ya + stack.shift(); + x = xb + stack.shift(); y = yb + stack.shift(); + bezierCurveTo(xa, ya, xb, yb, x, y); + xa = x + stack.shift(); ya = y + stack.shift(); + xb = xa + stack.shift(); yb = ya + stack.shift(); + x = xb + stack.shift(); y = yb + stack.shift(); + bezierCurveTo(xa, ya, xb, yb, x, y); + stack.pop(); // fd + break; + case 36: // hflex1 + xa = x + stack.shift(); y1 = y + stack.shift(); + xb = xa + stack.shift(); y2 = y1 + stack.shift(); + x = xb + stack.shift(); + bezierCurveTo(xa, y1, xb, y2, x, y2); + xa = x + stack.shift(); + xb = xa + stack.shift(); y3 = y2 + stack.shift(); + x = xb + stack.shift(); + bezierCurveTo(xa, y2, xb, y3, x, y); + break; + case 37: // flex1 + var x0 = x, y0 = y; + xa = x + stack.shift(); ya = y + stack.shift(); + xb = xa + stack.shift(); yb = ya + stack.shift(); + x = xb + stack.shift(); y = yb + stack.shift(); + bezierCurveTo(xa, ya, xb, yb, x, y); + xa = x + stack.shift(); ya = y + stack.shift(); + xb = xa + stack.shift(); yb = ya + stack.shift(); + x = xb; y = yb; + if (Math.abs(x - x0) > Math.abs(y - y0)) { + x += stack.shift(); + } else { + y += stack.shift(); + } + bezierCurveTo(xa, ya, xb, yb, x, y); + break; + default: + error('unknown operator: 12 ' + v); + } + break; + case 14: // endchar + if (stack.length >= 4) { + var achar = stack.pop(); + var bchar = stack.pop(); + y = stack.pop(); + x = stack.pop(); + js.push('c.save();'); + js.push('c.translate('+ x + ',' + y + ');'); + var gid = lookupCmap(font.cmap, String.fromCharCode( + font.glyphNameMap[Encodings.StandardEncoding[achar]])); + compileCharString(font.glyphs[gid], js, font); + js.push('c.restore();'); + + gid = lookupCmap(font.cmap, String.fromCharCode( + font.glyphNameMap[Encodings.StandardEncoding[bchar]])); + compileCharString(font.glyphs[gid], js, font); + } + return; + case 18: // hstemhm + stems += stack.length >> 1; + stackClean = true; + break; + case 19: // hintmask + stems += stack.length >> 1; + i += (stems + 7) >> 3; + stackClean = true; + break; + case 20: // cntrmask + stems += stack.length >> 1; + i += (stems + 7) >> 3; + stackClean = true; + break; + case 21: // rmoveto + y += stack.pop(); + x += stack.pop(); + moveTo(x, y); + stackClean = true; + break; + case 22: // hmoveto + x += stack.pop(); + moveTo(x, y); + stackClean = true; + break; + case 23: // vstemhm + stems += stack.length >> 1; + stackClean = true; + break; + case 24: // rcurveline + while (stack.length > 2) { + xa = x + stack.shift(); ya = y + stack.shift(); + xb = xa + stack.shift(); yb = ya + stack.shift(); + x = xb + stack.shift(); y = yb + stack.shift(); + bezierCurveTo(xa, ya, xb, yb, x, y); + } + x += stack.shift(); + y += stack.shift(); + lineTo(x, y); + break; + case 25: // rlinecurve + while (stack.length > 6) { + x += stack.shift(); + y += stack.shift(); + lineTo(x, y); + } + xa = x + stack.shift(); ya = y + stack.shift(); + xb = xa + stack.shift(); yb = ya + stack.shift(); + x = xb + stack.shift(); y = yb + stack.shift(); + bezierCurveTo(xa, ya, xb, yb, x, y); + break; + case 26: // vvcurveto + if (stack.length % 2) { + x += stack.shift(); + } + while (stack.length > 0) { + xa = x; ya = y + stack.shift(); + xb = xa + stack.shift(); yb = ya + stack.shift(); + x = xb; y = yb + stack.shift(); + bezierCurveTo(xa, ya, xb, yb, x, y); + } + break; + case 27: // hhcurveto + if (stack.length % 2) { + y += stack.shift(); + } + while (stack.length > 0) { + xa = x + stack.shift(); ya = y; + xb = xa + stack.shift(); yb = ya + stack.shift(); + x = xb + stack.shift(); y = yb; + bezierCurveTo(xa, ya, xb, yb, x, y); + } + break; + case 28: + stack.push(((code[i] << 24) | (code[i + 1] << 16)) >> 16); + i += 2; + break; + case 29: // callgsubr + n = stack.pop() + font.gsubrsBias; + subrCode = font.gsubrs[n]; + if (subrCode) { + parse(subrCode); + } + break; + case 30: // vhcurveto + while (stack.length > 0) { + xa = x; ya = y + stack.shift(); + xb = xa + stack.shift(); yb = ya + stack.shift(); + x = xb + stack.shift(); + y = yb + (stack.length === 1 ? stack.shift() : 0); + bezierCurveTo(xa, ya, xb, yb, x, y); + if (stack.length === 0) { + break; + } + + xa = x + stack.shift(); ya = y; + xb = xa + stack.shift(); yb = ya + stack.shift(); + y = yb + stack.shift(); + x = xb + (stack.length === 1 ? stack.shift() : 0); + bezierCurveTo(xa, ya, xb, yb, x, y); + } + break; + case 31: // hvcurveto + while (stack.length > 0) { + xa = x + stack.shift(); ya = y; + xb = xa + stack.shift(); yb = ya + stack.shift(); + y = yb + stack.shift(); + x = xb + (stack.length === 1 ? stack.shift() : 0); + bezierCurveTo(xa, ya, xb, yb, x, y); + if (stack.length === 0) { + break; + } + + xa = x; ya = y + stack.shift(); + xb = xa + stack.shift(); yb = ya + stack.shift(); + x = xb + stack.shift(); + y = yb + (stack.length === 1 ? stack.shift() : 0); + bezierCurveTo(xa, ya, xb, yb, x, y); + } + break; + default: + if (v < 32) { + error('unknown operator: ' + v); + } + if (v < 247) { + stack.push(v - 139); + } else if (v < 251) { + stack.push((v - 247) * 256 + code[i++] + 108); + } else if (v < 255) { + stack.push(-(v - 251) * 256 - code[i++] - 108); + } else { + stack.push(((code[i] << 24) | (code[i + 1] << 16) | + (code[i + 2] << 8) | code[i + 3]) / 65536); + i += 4; + } + break; + } + if (stackClean) { + stack.length = 0; + } + } + } + parse(code); + } + + var noop = ''; + + function CompiledFont(fontMatrix) { + this.compiledGlyphs = {}; + this.fontMatrix = fontMatrix; + } + CompiledFont.prototype = { + getPathJs: function (unicode) { + var gid = lookupCmap(this.cmap, unicode); + var fn = this.compiledGlyphs[gid]; + if (!fn) { + this.compiledGlyphs[gid] = fn = this.compileGlyph(this.glyphs[gid]); + } + return fn; + }, + + compileGlyph: function (code) { + if (!code || code.length === 0 || code[0] === 14) { + return noop; + } + + var js = []; + js.push('c.save();'); + js.push('c.transform(' + this.fontMatrix.join(',') + ');'); + js.push('c.scale(size, -size);'); + + this.compileGlyphImpl(code, js); + + js.push('c.restore();'); + + return js.join('\n'); + }, + + compileGlyphImpl: function () { + error('Children classes should implement this.'); + }, + + hasBuiltPath: function (unicode) { + var gid = lookupCmap(this.cmap, unicode); + return gid in this.compiledGlyphs; + } + }; + + function TrueTypeCompiled(glyphs, cmap, fontMatrix) { + fontMatrix = fontMatrix || [0.000488, 0, 0, 0.000488, 0, 0]; + CompiledFont.call(this, fontMatrix); + + this.glyphs = glyphs; + this.cmap = cmap; + + this.compiledGlyphs = []; + } + + Util.inherit(TrueTypeCompiled, CompiledFont, { + compileGlyphImpl: function (code, js) { + compileGlyf(code, js, this); + } + }); + + function Type2Compiled(cffInfo, cmap, fontMatrix, glyphNameMap) { + fontMatrix = fontMatrix || [0.001, 0, 0, 0.001, 0, 0]; + CompiledFont.call(this, fontMatrix); + this.glyphs = cffInfo.glyphs; + this.gsubrs = cffInfo.gsubrs || []; + this.subrs = cffInfo.subrs || []; + this.cmap = cmap; + this.glyphNameMap = glyphNameMap || GlyphsUnicode; + + this.compiledGlyphs = []; + this.gsubrsBias = (this.gsubrs.length < 1240 ? + 107 : (this.gsubrs.length < 33900 ? 1131 : 32768)); + this.subrsBias = (this.subrs.length < 1240 ? + 107 : (this.subrs.length < 33900 ? 1131 : 32768)); + } + + Util.inherit(Type2Compiled, CompiledFont, { + compileGlyphImpl: function (code, js) { + compileCharString(code, js, this); + } + }); + + + return { + create: function FontRendererFactory_create(font) { + var data = new Uint8Array(font.data); + var cmap, glyf, loca, cff, indexToLocFormat, unitsPerEm; + var numTables = getUshort(data, 4); + for (var i = 0, p = 12; i < numTables; i++, p += 16) { + var tag = bytesToString(data.subarray(p, p + 4)); + var offset = getLong(data, p + 8); + var length = getLong(data, p + 12); + switch (tag) { + case 'cmap': + cmap = parseCmap(data, offset, offset + length); + break; + case 'glyf': + glyf = data.subarray(offset, offset + length); + break; + case 'loca': + loca = data.subarray(offset, offset + length); + break; + case 'head': + unitsPerEm = getUshort(data, offset + 18); + indexToLocFormat = getUshort(data, offset + 50); + break; + case 'CFF ': + cff = parseCff(data, offset, offset + length); + break; + } + } + + if (glyf) { + var fontMatrix = (!unitsPerEm ? font.fontMatrix : + [1 / unitsPerEm, 0, 0, 1 / unitsPerEm, 0, 0]); + return new TrueTypeCompiled( + parseGlyfTable(glyf, loca, indexToLocFormat), cmap, fontMatrix); + } else { + return new Type2Compiled(cff, cmap, font.fontMatrix, font.glyphNameMap); + } + } + }; +})(); + + +var GlyphsUnicode = { + A: 0x0041, + AE: 0x00C6, + AEacute: 0x01FC, + AEmacron: 0x01E2, + AEsmall: 0xF7E6, + Aacute: 0x00C1, + Aacutesmall: 0xF7E1, + Abreve: 0x0102, + Abreveacute: 0x1EAE, + Abrevecyrillic: 0x04D0, + Abrevedotbelow: 0x1EB6, + Abrevegrave: 0x1EB0, + Abrevehookabove: 0x1EB2, + Abrevetilde: 0x1EB4, + Acaron: 0x01CD, + Acircle: 0x24B6, + Acircumflex: 0x00C2, + Acircumflexacute: 0x1EA4, + Acircumflexdotbelow: 0x1EAC, + Acircumflexgrave: 0x1EA6, + Acircumflexhookabove: 0x1EA8, + Acircumflexsmall: 0xF7E2, + Acircumflextilde: 0x1EAA, + Acute: 0xF6C9, + Acutesmall: 0xF7B4, + Acyrillic: 0x0410, + Adblgrave: 0x0200, + Adieresis: 0x00C4, + Adieresiscyrillic: 0x04D2, + Adieresismacron: 0x01DE, + Adieresissmall: 0xF7E4, + Adotbelow: 0x1EA0, + Adotmacron: 0x01E0, + Agrave: 0x00C0, + Agravesmall: 0xF7E0, + Ahookabove: 0x1EA2, + Aiecyrillic: 0x04D4, + Ainvertedbreve: 0x0202, + Alpha: 0x0391, + Alphatonos: 0x0386, + Amacron: 0x0100, + Amonospace: 0xFF21, + Aogonek: 0x0104, + Aring: 0x00C5, + Aringacute: 0x01FA, + Aringbelow: 0x1E00, + Aringsmall: 0xF7E5, + Asmall: 0xF761, + Atilde: 0x00C3, + Atildesmall: 0xF7E3, + Aybarmenian: 0x0531, + B: 0x0042, + Bcircle: 0x24B7, + Bdotaccent: 0x1E02, + Bdotbelow: 0x1E04, + Becyrillic: 0x0411, + Benarmenian: 0x0532, + Beta: 0x0392, + Bhook: 0x0181, + Blinebelow: 0x1E06, + Bmonospace: 0xFF22, + Brevesmall: 0xF6F4, + Bsmall: 0xF762, + Btopbar: 0x0182, + C: 0x0043, + Caarmenian: 0x053E, + Cacute: 0x0106, + Caron: 0xF6CA, + Caronsmall: 0xF6F5, + Ccaron: 0x010C, + Ccedilla: 0x00C7, + Ccedillaacute: 0x1E08, + Ccedillasmall: 0xF7E7, + Ccircle: 0x24B8, + Ccircumflex: 0x0108, + Cdot: 0x010A, + Cdotaccent: 0x010A, + Cedillasmall: 0xF7B8, + Chaarmenian: 0x0549, + Cheabkhasiancyrillic: 0x04BC, + Checyrillic: 0x0427, + Chedescenderabkhasiancyrillic: 0x04BE, + Chedescendercyrillic: 0x04B6, + Chedieresiscyrillic: 0x04F4, + Cheharmenian: 0x0543, + Chekhakassiancyrillic: 0x04CB, + Cheverticalstrokecyrillic: 0x04B8, + Chi: 0x03A7, + Chook: 0x0187, + Circumflexsmall: 0xF6F6, + Cmonospace: 0xFF23, + Coarmenian: 0x0551, + Csmall: 0xF763, + D: 0x0044, + DZ: 0x01F1, + DZcaron: 0x01C4, + Daarmenian: 0x0534, + Dafrican: 0x0189, + Dcaron: 0x010E, + Dcedilla: 0x1E10, + Dcircle: 0x24B9, + Dcircumflexbelow: 0x1E12, + Dcroat: 0x0110, + Ddotaccent: 0x1E0A, + Ddotbelow: 0x1E0C, + Decyrillic: 0x0414, + Deicoptic: 0x03EE, + Delta: 0x2206, + Deltagreek: 0x0394, + Dhook: 0x018A, + Dieresis: 0xF6CB, + DieresisAcute: 0xF6CC, + DieresisGrave: 0xF6CD, + Dieresissmall: 0xF7A8, + Digammagreek: 0x03DC, + Djecyrillic: 0x0402, + Dlinebelow: 0x1E0E, + Dmonospace: 0xFF24, + Dotaccentsmall: 0xF6F7, + Dslash: 0x0110, + Dsmall: 0xF764, + Dtopbar: 0x018B, + Dz: 0x01F2, + Dzcaron: 0x01C5, + Dzeabkhasiancyrillic: 0x04E0, + Dzecyrillic: 0x0405, + Dzhecyrillic: 0x040F, + E: 0x0045, + Eacute: 0x00C9, + Eacutesmall: 0xF7E9, + Ebreve: 0x0114, + Ecaron: 0x011A, + Ecedillabreve: 0x1E1C, + Echarmenian: 0x0535, + Ecircle: 0x24BA, + Ecircumflex: 0x00CA, + Ecircumflexacute: 0x1EBE, + Ecircumflexbelow: 0x1E18, + Ecircumflexdotbelow: 0x1EC6, + Ecircumflexgrave: 0x1EC0, + Ecircumflexhookabove: 0x1EC2, + Ecircumflexsmall: 0xF7EA, + Ecircumflextilde: 0x1EC4, + Ecyrillic: 0x0404, + Edblgrave: 0x0204, + Edieresis: 0x00CB, + Edieresissmall: 0xF7EB, + Edot: 0x0116, + Edotaccent: 0x0116, + Edotbelow: 0x1EB8, + Efcyrillic: 0x0424, + Egrave: 0x00C8, + Egravesmall: 0xF7E8, + Eharmenian: 0x0537, + Ehookabove: 0x1EBA, + Eightroman: 0x2167, + Einvertedbreve: 0x0206, + Eiotifiedcyrillic: 0x0464, + Elcyrillic: 0x041B, + Elevenroman: 0x216A, + Emacron: 0x0112, + Emacronacute: 0x1E16, + Emacrongrave: 0x1E14, + Emcyrillic: 0x041C, + Emonospace: 0xFF25, + Encyrillic: 0x041D, + Endescendercyrillic: 0x04A2, + Eng: 0x014A, + Enghecyrillic: 0x04A4, + Enhookcyrillic: 0x04C7, + Eogonek: 0x0118, + Eopen: 0x0190, + Epsilon: 0x0395, + Epsilontonos: 0x0388, + Ercyrillic: 0x0420, + Ereversed: 0x018E, + Ereversedcyrillic: 0x042D, + Escyrillic: 0x0421, + Esdescendercyrillic: 0x04AA, + Esh: 0x01A9, + Esmall: 0xF765, + Eta: 0x0397, + Etarmenian: 0x0538, + Etatonos: 0x0389, + Eth: 0x00D0, + Ethsmall: 0xF7F0, + Etilde: 0x1EBC, + Etildebelow: 0x1E1A, + Euro: 0x20AC, + Ezh: 0x01B7, + Ezhcaron: 0x01EE, + Ezhreversed: 0x01B8, + F: 0x0046, + Fcircle: 0x24BB, + Fdotaccent: 0x1E1E, + Feharmenian: 0x0556, + Feicoptic: 0x03E4, + Fhook: 0x0191, + Fitacyrillic: 0x0472, + Fiveroman: 0x2164, + Fmonospace: 0xFF26, + Fourroman: 0x2163, + Fsmall: 0xF766, + G: 0x0047, + GBsquare: 0x3387, + Gacute: 0x01F4, + Gamma: 0x0393, + Gammaafrican: 0x0194, + Gangiacoptic: 0x03EA, + Gbreve: 0x011E, + Gcaron: 0x01E6, + Gcedilla: 0x0122, + Gcircle: 0x24BC, + Gcircumflex: 0x011C, + Gcommaaccent: 0x0122, + Gdot: 0x0120, + Gdotaccent: 0x0120, + Gecyrillic: 0x0413, + Ghadarmenian: 0x0542, + Ghemiddlehookcyrillic: 0x0494, + Ghestrokecyrillic: 0x0492, + Gheupturncyrillic: 0x0490, + Ghook: 0x0193, + Gimarmenian: 0x0533, + Gjecyrillic: 0x0403, + Gmacron: 0x1E20, + Gmonospace: 0xFF27, + Grave: 0xF6CE, + Gravesmall: 0xF760, + Gsmall: 0xF767, + Gsmallhook: 0x029B, + Gstroke: 0x01E4, + H: 0x0048, + H18533: 0x25CF, + H18543: 0x25AA, + H18551: 0x25AB, + H22073: 0x25A1, + HPsquare: 0x33CB, + Haabkhasiancyrillic: 0x04A8, + Hadescendercyrillic: 0x04B2, + Hardsigncyrillic: 0x042A, + Hbar: 0x0126, + Hbrevebelow: 0x1E2A, + Hcedilla: 0x1E28, + Hcircle: 0x24BD, + Hcircumflex: 0x0124, + Hdieresis: 0x1E26, + Hdotaccent: 0x1E22, + Hdotbelow: 0x1E24, + Hmonospace: 0xFF28, + Hoarmenian: 0x0540, + Horicoptic: 0x03E8, + Hsmall: 0xF768, + Hungarumlaut: 0xF6CF, + Hungarumlautsmall: 0xF6F8, + Hzsquare: 0x3390, + I: 0x0049, + IAcyrillic: 0x042F, + IJ: 0x0132, + IUcyrillic: 0x042E, + Iacute: 0x00CD, + Iacutesmall: 0xF7ED, + Ibreve: 0x012C, + Icaron: 0x01CF, + Icircle: 0x24BE, + Icircumflex: 0x00CE, + Icircumflexsmall: 0xF7EE, + Icyrillic: 0x0406, + Idblgrave: 0x0208, + Idieresis: 0x00CF, + Idieresisacute: 0x1E2E, + Idieresiscyrillic: 0x04E4, + Idieresissmall: 0xF7EF, + Idot: 0x0130, + Idotaccent: 0x0130, + Idotbelow: 0x1ECA, + Iebrevecyrillic: 0x04D6, + Iecyrillic: 0x0415, + Ifraktur: 0x2111, + Igrave: 0x00CC, + Igravesmall: 0xF7EC, + Ihookabove: 0x1EC8, + Iicyrillic: 0x0418, + Iinvertedbreve: 0x020A, + Iishortcyrillic: 0x0419, + Imacron: 0x012A, + Imacroncyrillic: 0x04E2, + Imonospace: 0xFF29, + Iniarmenian: 0x053B, + Iocyrillic: 0x0401, + Iogonek: 0x012E, + Iota: 0x0399, + Iotaafrican: 0x0196, + Iotadieresis: 0x03AA, + Iotatonos: 0x038A, + Ismall: 0xF769, + Istroke: 0x0197, + Itilde: 0x0128, + Itildebelow: 0x1E2C, + Izhitsacyrillic: 0x0474, + Izhitsadblgravecyrillic: 0x0476, + J: 0x004A, + Jaarmenian: 0x0541, + Jcircle: 0x24BF, + Jcircumflex: 0x0134, + Jecyrillic: 0x0408, + Jheharmenian: 0x054B, + Jmonospace: 0xFF2A, + Jsmall: 0xF76A, + K: 0x004B, + KBsquare: 0x3385, + KKsquare: 0x33CD, + Kabashkircyrillic: 0x04A0, + Kacute: 0x1E30, + Kacyrillic: 0x041A, + Kadescendercyrillic: 0x049A, + Kahookcyrillic: 0x04C3, + Kappa: 0x039A, + Kastrokecyrillic: 0x049E, + Kaverticalstrokecyrillic: 0x049C, + Kcaron: 0x01E8, + Kcedilla: 0x0136, + Kcircle: 0x24C0, + Kcommaaccent: 0x0136, + Kdotbelow: 0x1E32, + Keharmenian: 0x0554, + Kenarmenian: 0x053F, + Khacyrillic: 0x0425, + Kheicoptic: 0x03E6, + Khook: 0x0198, + Kjecyrillic: 0x040C, + Klinebelow: 0x1E34, + Kmonospace: 0xFF2B, + Koppacyrillic: 0x0480, + Koppagreek: 0x03DE, + Ksicyrillic: 0x046E, + Ksmall: 0xF76B, + L: 0x004C, + LJ: 0x01C7, + LL: 0xF6BF, + Lacute: 0x0139, + Lambda: 0x039B, + Lcaron: 0x013D, + Lcedilla: 0x013B, + Lcircle: 0x24C1, + Lcircumflexbelow: 0x1E3C, + Lcommaaccent: 0x013B, + Ldot: 0x013F, + Ldotaccent: 0x013F, + Ldotbelow: 0x1E36, + Ldotbelowmacron: 0x1E38, + Liwnarmenian: 0x053C, + Lj: 0x01C8, + Ljecyrillic: 0x0409, + Llinebelow: 0x1E3A, + Lmonospace: 0xFF2C, + Lslash: 0x0141, + Lslashsmall: 0xF6F9, + Lsmall: 0xF76C, + M: 0x004D, + MBsquare: 0x3386, + Macron: 0xF6D0, + Macronsmall: 0xF7AF, + Macute: 0x1E3E, + Mcircle: 0x24C2, + Mdotaccent: 0x1E40, + Mdotbelow: 0x1E42, + Menarmenian: 0x0544, + Mmonospace: 0xFF2D, + Msmall: 0xF76D, + Mturned: 0x019C, + Mu: 0x039C, + N: 0x004E, + NJ: 0x01CA, + Nacute: 0x0143, + Ncaron: 0x0147, + Ncedilla: 0x0145, + Ncircle: 0x24C3, + Ncircumflexbelow: 0x1E4A, + Ncommaaccent: 0x0145, + Ndotaccent: 0x1E44, + Ndotbelow: 0x1E46, + Nhookleft: 0x019D, + Nineroman: 0x2168, + Nj: 0x01CB, + Njecyrillic: 0x040A, + Nlinebelow: 0x1E48, + Nmonospace: 0xFF2E, + Nowarmenian: 0x0546, + Nsmall: 0xF76E, + Ntilde: 0x00D1, + Ntildesmall: 0xF7F1, + Nu: 0x039D, + O: 0x004F, + OE: 0x0152, + OEsmall: 0xF6FA, + Oacute: 0x00D3, + Oacutesmall: 0xF7F3, + Obarredcyrillic: 0x04E8, + Obarreddieresiscyrillic: 0x04EA, + Obreve: 0x014E, + Ocaron: 0x01D1, + Ocenteredtilde: 0x019F, + Ocircle: 0x24C4, + Ocircumflex: 0x00D4, + Ocircumflexacute: 0x1ED0, + Ocircumflexdotbelow: 0x1ED8, + Ocircumflexgrave: 0x1ED2, + Ocircumflexhookabove: 0x1ED4, + Ocircumflexsmall: 0xF7F4, + Ocircumflextilde: 0x1ED6, + Ocyrillic: 0x041E, + Odblacute: 0x0150, + Odblgrave: 0x020C, + Odieresis: 0x00D6, + Odieresiscyrillic: 0x04E6, + Odieresissmall: 0xF7F6, + Odotbelow: 0x1ECC, + Ogoneksmall: 0xF6FB, + Ograve: 0x00D2, + Ogravesmall: 0xF7F2, + Oharmenian: 0x0555, + Ohm: 0x2126, + Ohookabove: 0x1ECE, + Ohorn: 0x01A0, + Ohornacute: 0x1EDA, + Ohorndotbelow: 0x1EE2, + Ohorngrave: 0x1EDC, + Ohornhookabove: 0x1EDE, + Ohorntilde: 0x1EE0, + Ohungarumlaut: 0x0150, + Oi: 0x01A2, + Oinvertedbreve: 0x020E, + Omacron: 0x014C, + Omacronacute: 0x1E52, + Omacrongrave: 0x1E50, + Omega: 0x2126, + Omegacyrillic: 0x0460, + Omegagreek: 0x03A9, + Omegaroundcyrillic: 0x047A, + Omegatitlocyrillic: 0x047C, + Omegatonos: 0x038F, + Omicron: 0x039F, + Omicrontonos: 0x038C, + Omonospace: 0xFF2F, + Oneroman: 0x2160, + Oogonek: 0x01EA, + Oogonekmacron: 0x01EC, + Oopen: 0x0186, + Oslash: 0x00D8, + Oslashacute: 0x01FE, + Oslashsmall: 0xF7F8, + Osmall: 0xF76F, + Ostrokeacute: 0x01FE, + Otcyrillic: 0x047E, + Otilde: 0x00D5, + Otildeacute: 0x1E4C, + Otildedieresis: 0x1E4E, + Otildesmall: 0xF7F5, + P: 0x0050, + Pacute: 0x1E54, + Pcircle: 0x24C5, + Pdotaccent: 0x1E56, + Pecyrillic: 0x041F, + Peharmenian: 0x054A, + Pemiddlehookcyrillic: 0x04A6, + Phi: 0x03A6, + Phook: 0x01A4, + Pi: 0x03A0, + Piwrarmenian: 0x0553, + Pmonospace: 0xFF30, + Psi: 0x03A8, + Psicyrillic: 0x0470, + Psmall: 0xF770, + Q: 0x0051, + Qcircle: 0x24C6, + Qmonospace: 0xFF31, + Qsmall: 0xF771, + R: 0x0052, + Raarmenian: 0x054C, + Racute: 0x0154, + Rcaron: 0x0158, + Rcedilla: 0x0156, + Rcircle: 0x24C7, + Rcommaaccent: 0x0156, + Rdblgrave: 0x0210, + Rdotaccent: 0x1E58, + Rdotbelow: 0x1E5A, + Rdotbelowmacron: 0x1E5C, + Reharmenian: 0x0550, + Rfraktur: 0x211C, + Rho: 0x03A1, + Ringsmall: 0xF6FC, + Rinvertedbreve: 0x0212, + Rlinebelow: 0x1E5E, + Rmonospace: 0xFF32, + Rsmall: 0xF772, + Rsmallinverted: 0x0281, + Rsmallinvertedsuperior: 0x02B6, + S: 0x0053, + SF010000: 0x250C, + SF020000: 0x2514, + SF030000: 0x2510, + SF040000: 0x2518, + SF050000: 0x253C, + SF060000: 0x252C, + SF070000: 0x2534, + SF080000: 0x251C, + SF090000: 0x2524, + SF100000: 0x2500, + SF110000: 0x2502, + SF190000: 0x2561, + SF200000: 0x2562, + SF210000: 0x2556, + SF220000: 0x2555, + SF230000: 0x2563, + SF240000: 0x2551, + SF250000: 0x2557, + SF260000: 0x255D, + SF270000: 0x255C, + SF280000: 0x255B, + SF360000: 0x255E, + SF370000: 0x255F, + SF380000: 0x255A, + SF390000: 0x2554, + SF400000: 0x2569, + SF410000: 0x2566, + SF420000: 0x2560, + SF430000: 0x2550, + SF440000: 0x256C, + SF450000: 0x2567, + SF460000: 0x2568, + SF470000: 0x2564, + SF480000: 0x2565, + SF490000: 0x2559, + SF500000: 0x2558, + SF510000: 0x2552, + SF520000: 0x2553, + SF530000: 0x256B, + SF540000: 0x256A, + Sacute: 0x015A, + Sacutedotaccent: 0x1E64, + Sampigreek: 0x03E0, + Scaron: 0x0160, + Scarondotaccent: 0x1E66, + Scaronsmall: 0xF6FD, + Scedilla: 0x015E, + Schwa: 0x018F, + Schwacyrillic: 0x04D8, + Schwadieresiscyrillic: 0x04DA, + Scircle: 0x24C8, + Scircumflex: 0x015C, + Scommaaccent: 0x0218, + Sdotaccent: 0x1E60, + Sdotbelow: 0x1E62, + Sdotbelowdotaccent: 0x1E68, + Seharmenian: 0x054D, + Sevenroman: 0x2166, + Shaarmenian: 0x0547, + Shacyrillic: 0x0428, + Shchacyrillic: 0x0429, + Sheicoptic: 0x03E2, + Shhacyrillic: 0x04BA, + Shimacoptic: 0x03EC, + Sigma: 0x03A3, + Sixroman: 0x2165, + Smonospace: 0xFF33, + Softsigncyrillic: 0x042C, + Ssmall: 0xF773, + Stigmagreek: 0x03DA, + T: 0x0054, + Tau: 0x03A4, + Tbar: 0x0166, + Tcaron: 0x0164, + Tcedilla: 0x0162, + Tcircle: 0x24C9, + Tcircumflexbelow: 0x1E70, + Tcommaaccent: 0x0162, + Tdotaccent: 0x1E6A, + Tdotbelow: 0x1E6C, + Tecyrillic: 0x0422, + Tedescendercyrillic: 0x04AC, + Tenroman: 0x2169, + Tetsecyrillic: 0x04B4, + Theta: 0x0398, + Thook: 0x01AC, + Thorn: 0x00DE, + Thornsmall: 0xF7FE, + Threeroman: 0x2162, + Tildesmall: 0xF6FE, + Tiwnarmenian: 0x054F, + Tlinebelow: 0x1E6E, + Tmonospace: 0xFF34, + Toarmenian: 0x0539, + Tonefive: 0x01BC, + Tonesix: 0x0184, + Tonetwo: 0x01A7, + Tretroflexhook: 0x01AE, + Tsecyrillic: 0x0426, + Tshecyrillic: 0x040B, + Tsmall: 0xF774, + Twelveroman: 0x216B, + Tworoman: 0x2161, + U: 0x0055, + Uacute: 0x00DA, + Uacutesmall: 0xF7FA, + Ubreve: 0x016C, + Ucaron: 0x01D3, + Ucircle: 0x24CA, + Ucircumflex: 0x00DB, + Ucircumflexbelow: 0x1E76, + Ucircumflexsmall: 0xF7FB, + Ucyrillic: 0x0423, + Udblacute: 0x0170, + Udblgrave: 0x0214, + Udieresis: 0x00DC, + Udieresisacute: 0x01D7, + Udieresisbelow: 0x1E72, + Udieresiscaron: 0x01D9, + Udieresiscyrillic: 0x04F0, + Udieresisgrave: 0x01DB, + Udieresismacron: 0x01D5, + Udieresissmall: 0xF7FC, + Udotbelow: 0x1EE4, + Ugrave: 0x00D9, + Ugravesmall: 0xF7F9, + Uhookabove: 0x1EE6, + Uhorn: 0x01AF, + Uhornacute: 0x1EE8, + Uhorndotbelow: 0x1EF0, + Uhorngrave: 0x1EEA, + Uhornhookabove: 0x1EEC, + Uhorntilde: 0x1EEE, + Uhungarumlaut: 0x0170, + Uhungarumlautcyrillic: 0x04F2, + Uinvertedbreve: 0x0216, + Ukcyrillic: 0x0478, + Umacron: 0x016A, + Umacroncyrillic: 0x04EE, + Umacrondieresis: 0x1E7A, + Umonospace: 0xFF35, + Uogonek: 0x0172, + Upsilon: 0x03A5, + Upsilon1: 0x03D2, + Upsilonacutehooksymbolgreek: 0x03D3, + Upsilonafrican: 0x01B1, + Upsilondieresis: 0x03AB, + Upsilondieresishooksymbolgreek: 0x03D4, + Upsilonhooksymbol: 0x03D2, + Upsilontonos: 0x038E, + Uring: 0x016E, + Ushortcyrillic: 0x040E, + Usmall: 0xF775, + Ustraightcyrillic: 0x04AE, + Ustraightstrokecyrillic: 0x04B0, + Utilde: 0x0168, + Utildeacute: 0x1E78, + Utildebelow: 0x1E74, + V: 0x0056, + Vcircle: 0x24CB, + Vdotbelow: 0x1E7E, + Vecyrillic: 0x0412, + Vewarmenian: 0x054E, + Vhook: 0x01B2, + Vmonospace: 0xFF36, + Voarmenian: 0x0548, + Vsmall: 0xF776, + Vtilde: 0x1E7C, + W: 0x0057, + Wacute: 0x1E82, + Wcircle: 0x24CC, + Wcircumflex: 0x0174, + Wdieresis: 0x1E84, + Wdotaccent: 0x1E86, + Wdotbelow: 0x1E88, + Wgrave: 0x1E80, + Wmonospace: 0xFF37, + Wsmall: 0xF777, + X: 0x0058, + Xcircle: 0x24CD, + Xdieresis: 0x1E8C, + Xdotaccent: 0x1E8A, + Xeharmenian: 0x053D, + Xi: 0x039E, + Xmonospace: 0xFF38, + Xsmall: 0xF778, + Y: 0x0059, + Yacute: 0x00DD, + Yacutesmall: 0xF7FD, + Yatcyrillic: 0x0462, + Ycircle: 0x24CE, + Ycircumflex: 0x0176, + Ydieresis: 0x0178, + Ydieresissmall: 0xF7FF, + Ydotaccent: 0x1E8E, + Ydotbelow: 0x1EF4, + Yericyrillic: 0x042B, + Yerudieresiscyrillic: 0x04F8, + Ygrave: 0x1EF2, + Yhook: 0x01B3, + Yhookabove: 0x1EF6, + Yiarmenian: 0x0545, + Yicyrillic: 0x0407, + Yiwnarmenian: 0x0552, + Ymonospace: 0xFF39, + Ysmall: 0xF779, + Ytilde: 0x1EF8, + Yusbigcyrillic: 0x046A, + Yusbigiotifiedcyrillic: 0x046C, + Yuslittlecyrillic: 0x0466, + Yuslittleiotifiedcyrillic: 0x0468, + Z: 0x005A, + Zaarmenian: 0x0536, + Zacute: 0x0179, + Zcaron: 0x017D, + Zcaronsmall: 0xF6FF, + Zcircle: 0x24CF, + Zcircumflex: 0x1E90, + Zdot: 0x017B, + Zdotaccent: 0x017B, + Zdotbelow: 0x1E92, + Zecyrillic: 0x0417, + Zedescendercyrillic: 0x0498, + Zedieresiscyrillic: 0x04DE, + Zeta: 0x0396, + Zhearmenian: 0x053A, + Zhebrevecyrillic: 0x04C1, + Zhecyrillic: 0x0416, + Zhedescendercyrillic: 0x0496, + Zhedieresiscyrillic: 0x04DC, + Zlinebelow: 0x1E94, + Zmonospace: 0xFF3A, + Zsmall: 0xF77A, + Zstroke: 0x01B5, + a: 0x0061, + aabengali: 0x0986, + aacute: 0x00E1, + aadeva: 0x0906, + aagujarati: 0x0A86, + aagurmukhi: 0x0A06, + aamatragurmukhi: 0x0A3E, + aarusquare: 0x3303, + aavowelsignbengali: 0x09BE, + aavowelsigndeva: 0x093E, + aavowelsigngujarati: 0x0ABE, + abbreviationmarkarmenian: 0x055F, + abbreviationsigndeva: 0x0970, + abengali: 0x0985, + abopomofo: 0x311A, + abreve: 0x0103, + abreveacute: 0x1EAF, + abrevecyrillic: 0x04D1, + abrevedotbelow: 0x1EB7, + abrevegrave: 0x1EB1, + abrevehookabove: 0x1EB3, + abrevetilde: 0x1EB5, + acaron: 0x01CE, + acircle: 0x24D0, + acircumflex: 0x00E2, + acircumflexacute: 0x1EA5, + acircumflexdotbelow: 0x1EAD, + acircumflexgrave: 0x1EA7, + acircumflexhookabove: 0x1EA9, + acircumflextilde: 0x1EAB, + acute: 0x00B4, + acutebelowcmb: 0x0317, + acutecmb: 0x0301, + acutecomb: 0x0301, + acutedeva: 0x0954, + acutelowmod: 0x02CF, + acutetonecmb: 0x0341, + acyrillic: 0x0430, + adblgrave: 0x0201, + addakgurmukhi: 0x0A71, + adeva: 0x0905, + adieresis: 0x00E4, + adieresiscyrillic: 0x04D3, + adieresismacron: 0x01DF, + adotbelow: 0x1EA1, + adotmacron: 0x01E1, + ae: 0x00E6, + aeacute: 0x01FD, + aekorean: 0x3150, + aemacron: 0x01E3, + afii00208: 0x2015, + afii08941: 0x20A4, + afii10017: 0x0410, + afii10018: 0x0411, + afii10019: 0x0412, + afii10020: 0x0413, + afii10021: 0x0414, + afii10022: 0x0415, + afii10023: 0x0401, + afii10024: 0x0416, + afii10025: 0x0417, + afii10026: 0x0418, + afii10027: 0x0419, + afii10028: 0x041A, + afii10029: 0x041B, + afii10030: 0x041C, + afii10031: 0x041D, + afii10032: 0x041E, + afii10033: 0x041F, + afii10034: 0x0420, + afii10035: 0x0421, + afii10036: 0x0422, + afii10037: 0x0423, + afii10038: 0x0424, + afii10039: 0x0425, + afii10040: 0x0426, + afii10041: 0x0427, + afii10042: 0x0428, + afii10043: 0x0429, + afii10044: 0x042A, + afii10045: 0x042B, + afii10046: 0x042C, + afii10047: 0x042D, + afii10048: 0x042E, + afii10049: 0x042F, + afii10050: 0x0490, + afii10051: 0x0402, + afii10052: 0x0403, + afii10053: 0x0404, + afii10054: 0x0405, + afii10055: 0x0406, + afii10056: 0x0407, + afii10057: 0x0408, + afii10058: 0x0409, + afii10059: 0x040A, + afii10060: 0x040B, + afii10061: 0x040C, + afii10062: 0x040E, + afii10063: 0xF6C4, + afii10064: 0xF6C5, + afii10065: 0x0430, + afii10066: 0x0431, + afii10067: 0x0432, + afii10068: 0x0433, + afii10069: 0x0434, + afii10070: 0x0435, + afii10071: 0x0451, + afii10072: 0x0436, + afii10073: 0x0437, + afii10074: 0x0438, + afii10075: 0x0439, + afii10076: 0x043A, + afii10077: 0x043B, + afii10078: 0x043C, + afii10079: 0x043D, + afii10080: 0x043E, + afii10081: 0x043F, + afii10082: 0x0440, + afii10083: 0x0441, + afii10084: 0x0442, + afii10085: 0x0443, + afii10086: 0x0444, + afii10087: 0x0445, + afii10088: 0x0446, + afii10089: 0x0447, + afii10090: 0x0448, + afii10091: 0x0449, + afii10092: 0x044A, + afii10093: 0x044B, + afii10094: 0x044C, + afii10095: 0x044D, + afii10096: 0x044E, + afii10097: 0x044F, + afii10098: 0x0491, + afii10099: 0x0452, + afii10100: 0x0453, + afii10101: 0x0454, + afii10102: 0x0455, + afii10103: 0x0456, + afii10104: 0x0457, + afii10105: 0x0458, + afii10106: 0x0459, + afii10107: 0x045A, + afii10108: 0x045B, + afii10109: 0x045C, + afii10110: 0x045E, + afii10145: 0x040F, + afii10146: 0x0462, + afii10147: 0x0472, + afii10148: 0x0474, + afii10192: 0xF6C6, + afii10193: 0x045F, + afii10194: 0x0463, + afii10195: 0x0473, + afii10196: 0x0475, + afii10831: 0xF6C7, + afii10832: 0xF6C8, + afii10846: 0x04D9, + afii299: 0x200E, + afii300: 0x200F, + afii301: 0x200D, + afii57381: 0x066A, + afii57388: 0x060C, + afii57392: 0x0660, + afii57393: 0x0661, + afii57394: 0x0662, + afii57395: 0x0663, + afii57396: 0x0664, + afii57397: 0x0665, + afii57398: 0x0666, + afii57399: 0x0667, + afii57400: 0x0668, + afii57401: 0x0669, + afii57403: 0x061B, + afii57407: 0x061F, + afii57409: 0x0621, + afii57410: 0x0622, + afii57411: 0x0623, + afii57412: 0x0624, + afii57413: 0x0625, + afii57414: 0x0626, + afii57415: 0x0627, + afii57416: 0x0628, + afii57417: 0x0629, + afii57418: 0x062A, + afii57419: 0x062B, + afii57420: 0x062C, + afii57421: 0x062D, + afii57422: 0x062E, + afii57423: 0x062F, + afii57424: 0x0630, + afii57425: 0x0631, + afii57426: 0x0632, + afii57427: 0x0633, + afii57428: 0x0634, + afii57429: 0x0635, + afii57430: 0x0636, + afii57431: 0x0637, + afii57432: 0x0638, + afii57433: 0x0639, + afii57434: 0x063A, + afii57440: 0x0640, + afii57441: 0x0641, + afii57442: 0x0642, + afii57443: 0x0643, + afii57444: 0x0644, + afii57445: 0x0645, + afii57446: 0x0646, + afii57448: 0x0648, + afii57449: 0x0649, + afii57450: 0x064A, + afii57451: 0x064B, + afii57452: 0x064C, + afii57453: 0x064D, + afii57454: 0x064E, + afii57455: 0x064F, + afii57456: 0x0650, + afii57457: 0x0651, + afii57458: 0x0652, + afii57470: 0x0647, + afii57505: 0x06A4, + afii57506: 0x067E, + afii57507: 0x0686, + afii57508: 0x0698, + afii57509: 0x06AF, + afii57511: 0x0679, + afii57512: 0x0688, + afii57513: 0x0691, + afii57514: 0x06BA, + afii57519: 0x06D2, + afii57534: 0x06D5, + afii57636: 0x20AA, + afii57645: 0x05BE, + afii57658: 0x05C3, + afii57664: 0x05D0, + afii57665: 0x05D1, + afii57666: 0x05D2, + afii57667: 0x05D3, + afii57668: 0x05D4, + afii57669: 0x05D5, + afii57670: 0x05D6, + afii57671: 0x05D7, + afii57672: 0x05D8, + afii57673: 0x05D9, + afii57674: 0x05DA, + afii57675: 0x05DB, + afii57676: 0x05DC, + afii57677: 0x05DD, + afii57678: 0x05DE, + afii57679: 0x05DF, + afii57680: 0x05E0, + afii57681: 0x05E1, + afii57682: 0x05E2, + afii57683: 0x05E3, + afii57684: 0x05E4, + afii57685: 0x05E5, + afii57686: 0x05E6, + afii57687: 0x05E7, + afii57688: 0x05E8, + afii57689: 0x05E9, + afii57690: 0x05EA, + afii57694: 0xFB2A, + afii57695: 0xFB2B, + afii57700: 0xFB4B, + afii57705: 0xFB1F, + afii57716: 0x05F0, + afii57717: 0x05F1, + afii57718: 0x05F2, + afii57723: 0xFB35, + afii57793: 0x05B4, + afii57794: 0x05B5, + afii57795: 0x05B6, + afii57796: 0x05BB, + afii57797: 0x05B8, + afii57798: 0x05B7, + afii57799: 0x05B0, + afii57800: 0x05B2, + afii57801: 0x05B1, + afii57802: 0x05B3, + afii57803: 0x05C2, + afii57804: 0x05C1, + afii57806: 0x05B9, + afii57807: 0x05BC, + afii57839: 0x05BD, + afii57841: 0x05BF, + afii57842: 0x05C0, + afii57929: 0x02BC, + afii61248: 0x2105, + afii61289: 0x2113, + afii61352: 0x2116, + afii61573: 0x202C, + afii61574: 0x202D, + afii61575: 0x202E, + afii61664: 0x200C, + afii63167: 0x066D, + afii64937: 0x02BD, + agrave: 0x00E0, + agujarati: 0x0A85, + agurmukhi: 0x0A05, + ahiragana: 0x3042, + ahookabove: 0x1EA3, + aibengali: 0x0990, + aibopomofo: 0x311E, + aideva: 0x0910, + aiecyrillic: 0x04D5, + aigujarati: 0x0A90, + aigurmukhi: 0x0A10, + aimatragurmukhi: 0x0A48, + ainarabic: 0x0639, + ainfinalarabic: 0xFECA, + aininitialarabic: 0xFECB, + ainmedialarabic: 0xFECC, + ainvertedbreve: 0x0203, + aivowelsignbengali: 0x09C8, + aivowelsigndeva: 0x0948, + aivowelsigngujarati: 0x0AC8, + akatakana: 0x30A2, + akatakanahalfwidth: 0xFF71, + akorean: 0x314F, + alef: 0x05D0, + alefarabic: 0x0627, + alefdageshhebrew: 0xFB30, + aleffinalarabic: 0xFE8E, + alefhamzaabovearabic: 0x0623, + alefhamzaabovefinalarabic: 0xFE84, + alefhamzabelowarabic: 0x0625, + alefhamzabelowfinalarabic: 0xFE88, + alefhebrew: 0x05D0, + aleflamedhebrew: 0xFB4F, + alefmaddaabovearabic: 0x0622, + alefmaddaabovefinalarabic: 0xFE82, + alefmaksuraarabic: 0x0649, + alefmaksurafinalarabic: 0xFEF0, + alefmaksurainitialarabic: 0xFEF3, + alefmaksuramedialarabic: 0xFEF4, + alefpatahhebrew: 0xFB2E, + alefqamatshebrew: 0xFB2F, + aleph: 0x2135, + allequal: 0x224C, + alpha: 0x03B1, + alphatonos: 0x03AC, + amacron: 0x0101, + amonospace: 0xFF41, + ampersand: 0x0026, + ampersandmonospace: 0xFF06, + ampersandsmall: 0xF726, + amsquare: 0x33C2, + anbopomofo: 0x3122, + angbopomofo: 0x3124, + angbracketleft: 0x3008, // This glyph is missing from Adobe's original list. + angbracketright: 0x3009, // This glyph is missing from Adobe's original list. + angkhankhuthai: 0x0E5A, + angle: 0x2220, + anglebracketleft: 0x3008, + anglebracketleftvertical: 0xFE3F, + anglebracketright: 0x3009, + anglebracketrightvertical: 0xFE40, + angleleft: 0x2329, + angleright: 0x232A, + angstrom: 0x212B, + anoteleia: 0x0387, + anudattadeva: 0x0952, + anusvarabengali: 0x0982, + anusvaradeva: 0x0902, + anusvaragujarati: 0x0A82, + aogonek: 0x0105, + apaatosquare: 0x3300, + aparen: 0x249C, + apostrophearmenian: 0x055A, + apostrophemod: 0x02BC, + apple: 0xF8FF, + approaches: 0x2250, + approxequal: 0x2248, + approxequalorimage: 0x2252, + approximatelyequal: 0x2245, + araeaekorean: 0x318E, + araeakorean: 0x318D, + arc: 0x2312, + arighthalfring: 0x1E9A, + aring: 0x00E5, + aringacute: 0x01FB, + aringbelow: 0x1E01, + arrowboth: 0x2194, + arrowdashdown: 0x21E3, + arrowdashleft: 0x21E0, + arrowdashright: 0x21E2, + arrowdashup: 0x21E1, + arrowdblboth: 0x21D4, + arrowdbldown: 0x21D3, + arrowdblleft: 0x21D0, + arrowdblright: 0x21D2, + arrowdblup: 0x21D1, + arrowdown: 0x2193, + arrowdownleft: 0x2199, + arrowdownright: 0x2198, + arrowdownwhite: 0x21E9, + arrowheaddownmod: 0x02C5, + arrowheadleftmod: 0x02C2, + arrowheadrightmod: 0x02C3, + arrowheadupmod: 0x02C4, + arrowhorizex: 0xF8E7, + arrowleft: 0x2190, + arrowleftdbl: 0x21D0, + arrowleftdblstroke: 0x21CD, + arrowleftoverright: 0x21C6, + arrowleftwhite: 0x21E6, + arrowright: 0x2192, + arrowrightdblstroke: 0x21CF, + arrowrightheavy: 0x279E, + arrowrightoverleft: 0x21C4, + arrowrightwhite: 0x21E8, + arrowtableft: 0x21E4, + arrowtabright: 0x21E5, + arrowup: 0x2191, + arrowupdn: 0x2195, + arrowupdnbse: 0x21A8, + arrowupdownbase: 0x21A8, + arrowupleft: 0x2196, + arrowupleftofdown: 0x21C5, + arrowupright: 0x2197, + arrowupwhite: 0x21E7, + arrowvertex: 0xF8E6, + asciicircum: 0x005E, + asciicircummonospace: 0xFF3E, + asciitilde: 0x007E, + asciitildemonospace: 0xFF5E, + ascript: 0x0251, + ascriptturned: 0x0252, + asmallhiragana: 0x3041, + asmallkatakana: 0x30A1, + asmallkatakanahalfwidth: 0xFF67, + asterisk: 0x002A, + asteriskaltonearabic: 0x066D, + asteriskarabic: 0x066D, + asteriskmath: 0x2217, + asteriskmonospace: 0xFF0A, + asterisksmall: 0xFE61, + asterism: 0x2042, + asuperior: 0xF6E9, + asymptoticallyequal: 0x2243, + at: 0x0040, + atilde: 0x00E3, + atmonospace: 0xFF20, + atsmall: 0xFE6B, + aturned: 0x0250, + aubengali: 0x0994, + aubopomofo: 0x3120, + audeva: 0x0914, + augujarati: 0x0A94, + augurmukhi: 0x0A14, + aulengthmarkbengali: 0x09D7, + aumatragurmukhi: 0x0A4C, + auvowelsignbengali: 0x09CC, + auvowelsigndeva: 0x094C, + auvowelsigngujarati: 0x0ACC, + avagrahadeva: 0x093D, + aybarmenian: 0x0561, + ayin: 0x05E2, + ayinaltonehebrew: 0xFB20, + ayinhebrew: 0x05E2, + b: 0x0062, + babengali: 0x09AC, + backslash: 0x005C, + backslashmonospace: 0xFF3C, + badeva: 0x092C, + bagujarati: 0x0AAC, + bagurmukhi: 0x0A2C, + bahiragana: 0x3070, + bahtthai: 0x0E3F, + bakatakana: 0x30D0, + bar: 0x007C, + barmonospace: 0xFF5C, + bbopomofo: 0x3105, + bcircle: 0x24D1, + bdotaccent: 0x1E03, + bdotbelow: 0x1E05, + beamedsixteenthnotes: 0x266C, + because: 0x2235, + becyrillic: 0x0431, + beharabic: 0x0628, + behfinalarabic: 0xFE90, + behinitialarabic: 0xFE91, + behiragana: 0x3079, + behmedialarabic: 0xFE92, + behmeeminitialarabic: 0xFC9F, + behmeemisolatedarabic: 0xFC08, + behnoonfinalarabic: 0xFC6D, + bekatakana: 0x30D9, + benarmenian: 0x0562, + bet: 0x05D1, + beta: 0x03B2, + betasymbolgreek: 0x03D0, + betdagesh: 0xFB31, + betdageshhebrew: 0xFB31, + bethebrew: 0x05D1, + betrafehebrew: 0xFB4C, + bhabengali: 0x09AD, + bhadeva: 0x092D, + bhagujarati: 0x0AAD, + bhagurmukhi: 0x0A2D, + bhook: 0x0253, + bihiragana: 0x3073, + bikatakana: 0x30D3, + bilabialclick: 0x0298, + bindigurmukhi: 0x0A02, + birusquare: 0x3331, + blackcircle: 0x25CF, + blackdiamond: 0x25C6, + blackdownpointingtriangle: 0x25BC, + blackleftpointingpointer: 0x25C4, + blackleftpointingtriangle: 0x25C0, + blacklenticularbracketleft: 0x3010, + blacklenticularbracketleftvertical: 0xFE3B, + blacklenticularbracketright: 0x3011, + blacklenticularbracketrightvertical: 0xFE3C, + blacklowerlefttriangle: 0x25E3, + blacklowerrighttriangle: 0x25E2, + blackrectangle: 0x25AC, + blackrightpointingpointer: 0x25BA, + blackrightpointingtriangle: 0x25B6, + blacksmallsquare: 0x25AA, + blacksmilingface: 0x263B, + blacksquare: 0x25A0, + blackstar: 0x2605, + blackupperlefttriangle: 0x25E4, + blackupperrighttriangle: 0x25E5, + blackuppointingsmalltriangle: 0x25B4, + blackuppointingtriangle: 0x25B2, + blank: 0x2423, + blinebelow: 0x1E07, + block: 0x2588, + bmonospace: 0xFF42, + bobaimaithai: 0x0E1A, + bohiragana: 0x307C, + bokatakana: 0x30DC, + bparen: 0x249D, + bqsquare: 0x33C3, + braceex: 0xF8F4, + braceleft: 0x007B, + braceleftbt: 0xF8F3, + braceleftmid: 0xF8F2, + braceleftmonospace: 0xFF5B, + braceleftsmall: 0xFE5B, + bracelefttp: 0xF8F1, + braceleftvertical: 0xFE37, + braceright: 0x007D, + bracerightbt: 0xF8FE, + bracerightmid: 0xF8FD, + bracerightmonospace: 0xFF5D, + bracerightsmall: 0xFE5C, + bracerighttp: 0xF8FC, + bracerightvertical: 0xFE38, + bracketleft: 0x005B, + bracketleftbt: 0xF8F0, + bracketleftex: 0xF8EF, + bracketleftmonospace: 0xFF3B, + bracketlefttp: 0xF8EE, + bracketright: 0x005D, + bracketrightbt: 0xF8FB, + bracketrightex: 0xF8FA, + bracketrightmonospace: 0xFF3D, + bracketrighttp: 0xF8F9, + breve: 0x02D8, + brevebelowcmb: 0x032E, + brevecmb: 0x0306, + breveinvertedbelowcmb: 0x032F, + breveinvertedcmb: 0x0311, + breveinverteddoublecmb: 0x0361, + bridgebelowcmb: 0x032A, + bridgeinvertedbelowcmb: 0x033A, + brokenbar: 0x00A6, + bstroke: 0x0180, + bsuperior: 0xF6EA, + btopbar: 0x0183, + buhiragana: 0x3076, + bukatakana: 0x30D6, + bullet: 0x2022, + bulletinverse: 0x25D8, + bulletoperator: 0x2219, + bullseye: 0x25CE, + c: 0x0063, + caarmenian: 0x056E, + cabengali: 0x099A, + cacute: 0x0107, + cadeva: 0x091A, + cagujarati: 0x0A9A, + cagurmukhi: 0x0A1A, + calsquare: 0x3388, + candrabindubengali: 0x0981, + candrabinducmb: 0x0310, + candrabindudeva: 0x0901, + candrabindugujarati: 0x0A81, + capslock: 0x21EA, + careof: 0x2105, + caron: 0x02C7, + caronbelowcmb: 0x032C, + caroncmb: 0x030C, + carriagereturn: 0x21B5, + cbopomofo: 0x3118, + ccaron: 0x010D, + ccedilla: 0x00E7, + ccedillaacute: 0x1E09, + ccircle: 0x24D2, + ccircumflex: 0x0109, + ccurl: 0x0255, + cdot: 0x010B, + cdotaccent: 0x010B, + cdsquare: 0x33C5, + cedilla: 0x00B8, + cedillacmb: 0x0327, + cent: 0x00A2, + centigrade: 0x2103, + centinferior: 0xF6DF, + centmonospace: 0xFFE0, + centoldstyle: 0xF7A2, + centsuperior: 0xF6E0, + chaarmenian: 0x0579, + chabengali: 0x099B, + chadeva: 0x091B, + chagujarati: 0x0A9B, + chagurmukhi: 0x0A1B, + chbopomofo: 0x3114, + cheabkhasiancyrillic: 0x04BD, + checkmark: 0x2713, + checyrillic: 0x0447, + chedescenderabkhasiancyrillic: 0x04BF, + chedescendercyrillic: 0x04B7, + chedieresiscyrillic: 0x04F5, + cheharmenian: 0x0573, + chekhakassiancyrillic: 0x04CC, + cheverticalstrokecyrillic: 0x04B9, + chi: 0x03C7, + chieuchacirclekorean: 0x3277, + chieuchaparenkorean: 0x3217, + chieuchcirclekorean: 0x3269, + chieuchkorean: 0x314A, + chieuchparenkorean: 0x3209, + chochangthai: 0x0E0A, + chochanthai: 0x0E08, + chochingthai: 0x0E09, + chochoethai: 0x0E0C, + chook: 0x0188, + cieucacirclekorean: 0x3276, + cieucaparenkorean: 0x3216, + cieuccirclekorean: 0x3268, + cieuckorean: 0x3148, + cieucparenkorean: 0x3208, + cieucuparenkorean: 0x321C, + circle: 0x25CB, + circlecopyrt: 0x00A9, // This glyph is missing from Adobe's original list. + circlemultiply: 0x2297, + circleot: 0x2299, + circleplus: 0x2295, + circlepostalmark: 0x3036, + circlewithlefthalfblack: 0x25D0, + circlewithrighthalfblack: 0x25D1, + circumflex: 0x02C6, + circumflexbelowcmb: 0x032D, + circumflexcmb: 0x0302, + clear: 0x2327, + clickalveolar: 0x01C2, + clickdental: 0x01C0, + clicklateral: 0x01C1, + clickretroflex: 0x01C3, + club: 0x2663, + clubsuitblack: 0x2663, + clubsuitwhite: 0x2667, + cmcubedsquare: 0x33A4, + cmonospace: 0xFF43, + cmsquaredsquare: 0x33A0, + coarmenian: 0x0581, + colon: 0x003A, + colonmonetary: 0x20A1, + colonmonospace: 0xFF1A, + colonsign: 0x20A1, + colonsmall: 0xFE55, + colontriangularhalfmod: 0x02D1, + colontriangularmod: 0x02D0, + comma: 0x002C, + commaabovecmb: 0x0313, + commaaboverightcmb: 0x0315, + commaaccent: 0xF6C3, + commaarabic: 0x060C, + commaarmenian: 0x055D, + commainferior: 0xF6E1, + commamonospace: 0xFF0C, + commareversedabovecmb: 0x0314, + commareversedmod: 0x02BD, + commasmall: 0xFE50, + commasuperior: 0xF6E2, + commaturnedabovecmb: 0x0312, + commaturnedmod: 0x02BB, + compass: 0x263C, + congruent: 0x2245, + contourintegral: 0x222E, + control: 0x2303, + controlACK: 0x0006, + controlBEL: 0x0007, + controlBS: 0x0008, + controlCAN: 0x0018, + controlCR: 0x000D, + controlDC1: 0x0011, + controlDC2: 0x0012, + controlDC3: 0x0013, + controlDC4: 0x0014, + controlDEL: 0x007F, + controlDLE: 0x0010, + controlEM: 0x0019, + controlENQ: 0x0005, + controlEOT: 0x0004, + controlESC: 0x001B, + controlETB: 0x0017, + controlETX: 0x0003, + controlFF: 0x000C, + controlFS: 0x001C, + controlGS: 0x001D, + controlHT: 0x0009, + controlLF: 0x000A, + controlNAK: 0x0015, + controlRS: 0x001E, + controlSI: 0x000F, + controlSO: 0x000E, + controlSOT: 0x0002, + controlSTX: 0x0001, + controlSUB: 0x001A, + controlSYN: 0x0016, + controlUS: 0x001F, + controlVT: 0x000B, + copyright: 0x00A9, + copyrightsans: 0xF8E9, + copyrightserif: 0xF6D9, + cornerbracketleft: 0x300C, + cornerbracketlefthalfwidth: 0xFF62, + cornerbracketleftvertical: 0xFE41, + cornerbracketright: 0x300D, + cornerbracketrighthalfwidth: 0xFF63, + cornerbracketrightvertical: 0xFE42, + corporationsquare: 0x337F, + cosquare: 0x33C7, + coverkgsquare: 0x33C6, + cparen: 0x249E, + cruzeiro: 0x20A2, + cstretched: 0x0297, + curlyand: 0x22CF, + curlyor: 0x22CE, + currency: 0x00A4, + cyrBreve: 0xF6D1, + cyrFlex: 0xF6D2, + cyrbreve: 0xF6D4, + cyrflex: 0xF6D5, + d: 0x0064, + daarmenian: 0x0564, + dabengali: 0x09A6, + dadarabic: 0x0636, + dadeva: 0x0926, + dadfinalarabic: 0xFEBE, + dadinitialarabic: 0xFEBF, + dadmedialarabic: 0xFEC0, + dagesh: 0x05BC, + dageshhebrew: 0x05BC, + dagger: 0x2020, + daggerdbl: 0x2021, + dagujarati: 0x0AA6, + dagurmukhi: 0x0A26, + dahiragana: 0x3060, + dakatakana: 0x30C0, + dalarabic: 0x062F, + dalet: 0x05D3, + daletdagesh: 0xFB33, + daletdageshhebrew: 0xFB33, + dalethebrew: 0x05D3, + dalfinalarabic: 0xFEAA, + dammaarabic: 0x064F, + dammalowarabic: 0x064F, + dammatanaltonearabic: 0x064C, + dammatanarabic: 0x064C, + danda: 0x0964, + dargahebrew: 0x05A7, + dargalefthebrew: 0x05A7, + dasiapneumatacyrilliccmb: 0x0485, + dblGrave: 0xF6D3, + dblanglebracketleft: 0x300A, + dblanglebracketleftvertical: 0xFE3D, + dblanglebracketright: 0x300B, + dblanglebracketrightvertical: 0xFE3E, + dblarchinvertedbelowcmb: 0x032B, + dblarrowleft: 0x21D4, + dblarrowright: 0x21D2, + dbldanda: 0x0965, + dblgrave: 0xF6D6, + dblgravecmb: 0x030F, + dblintegral: 0x222C, + dbllowline: 0x2017, + dbllowlinecmb: 0x0333, + dbloverlinecmb: 0x033F, + dblprimemod: 0x02BA, + dblverticalbar: 0x2016, + dblverticallineabovecmb: 0x030E, + dbopomofo: 0x3109, + dbsquare: 0x33C8, + dcaron: 0x010F, + dcedilla: 0x1E11, + dcircle: 0x24D3, + dcircumflexbelow: 0x1E13, + dcroat: 0x0111, + ddabengali: 0x09A1, + ddadeva: 0x0921, + ddagujarati: 0x0AA1, + ddagurmukhi: 0x0A21, + ddalarabic: 0x0688, + ddalfinalarabic: 0xFB89, + dddhadeva: 0x095C, + ddhabengali: 0x09A2, + ddhadeva: 0x0922, + ddhagujarati: 0x0AA2, + ddhagurmukhi: 0x0A22, + ddotaccent: 0x1E0B, + ddotbelow: 0x1E0D, + decimalseparatorarabic: 0x066B, + decimalseparatorpersian: 0x066B, + decyrillic: 0x0434, + degree: 0x00B0, + dehihebrew: 0x05AD, + dehiragana: 0x3067, + deicoptic: 0x03EF, + dekatakana: 0x30C7, + deleteleft: 0x232B, + deleteright: 0x2326, + delta: 0x03B4, + deltaturned: 0x018D, + denominatorminusonenumeratorbengali: 0x09F8, + dezh: 0x02A4, + dhabengali: 0x09A7, + dhadeva: 0x0927, + dhagujarati: 0x0AA7, + dhagurmukhi: 0x0A27, + dhook: 0x0257, + dialytikatonos: 0x0385, + dialytikatonoscmb: 0x0344, + diamond: 0x2666, + diamondsuitwhite: 0x2662, + dieresis: 0x00A8, + dieresisacute: 0xF6D7, + dieresisbelowcmb: 0x0324, + dieresiscmb: 0x0308, + dieresisgrave: 0xF6D8, + dieresistonos: 0x0385, + dihiragana: 0x3062, + dikatakana: 0x30C2, + dittomark: 0x3003, + divide: 0x00F7, + divides: 0x2223, + divisionslash: 0x2215, + djecyrillic: 0x0452, + dkshade: 0x2593, + dlinebelow: 0x1E0F, + dlsquare: 0x3397, + dmacron: 0x0111, + dmonospace: 0xFF44, + dnblock: 0x2584, + dochadathai: 0x0E0E, + dodekthai: 0x0E14, + dohiragana: 0x3069, + dokatakana: 0x30C9, + dollar: 0x0024, + dollarinferior: 0xF6E3, + dollarmonospace: 0xFF04, + dollaroldstyle: 0xF724, + dollarsmall: 0xFE69, + dollarsuperior: 0xF6E4, + dong: 0x20AB, + dorusquare: 0x3326, + dotaccent: 0x02D9, + dotaccentcmb: 0x0307, + dotbelowcmb: 0x0323, + dotbelowcomb: 0x0323, + dotkatakana: 0x30FB, + dotlessi: 0x0131, + dotlessj: 0xF6BE, + dotlessjstrokehook: 0x0284, + dotmath: 0x22C5, + dottedcircle: 0x25CC, + doubleyodpatah: 0xFB1F, + doubleyodpatahhebrew: 0xFB1F, + downtackbelowcmb: 0x031E, + downtackmod: 0x02D5, + dparen: 0x249F, + dsuperior: 0xF6EB, + dtail: 0x0256, + dtopbar: 0x018C, + duhiragana: 0x3065, + dukatakana: 0x30C5, + dz: 0x01F3, + dzaltone: 0x02A3, + dzcaron: 0x01C6, + dzcurl: 0x02A5, + dzeabkhasiancyrillic: 0x04E1, + dzecyrillic: 0x0455, + dzhecyrillic: 0x045F, + e: 0x0065, + eacute: 0x00E9, + earth: 0x2641, + ebengali: 0x098F, + ebopomofo: 0x311C, + ebreve: 0x0115, + ecandradeva: 0x090D, + ecandragujarati: 0x0A8D, + ecandravowelsigndeva: 0x0945, + ecandravowelsigngujarati: 0x0AC5, + ecaron: 0x011B, + ecedillabreve: 0x1E1D, + echarmenian: 0x0565, + echyiwnarmenian: 0x0587, + ecircle: 0x24D4, + ecircumflex: 0x00EA, + ecircumflexacute: 0x1EBF, + ecircumflexbelow: 0x1E19, + ecircumflexdotbelow: 0x1EC7, + ecircumflexgrave: 0x1EC1, + ecircumflexhookabove: 0x1EC3, + ecircumflextilde: 0x1EC5, + ecyrillic: 0x0454, + edblgrave: 0x0205, + edeva: 0x090F, + edieresis: 0x00EB, + edot: 0x0117, + edotaccent: 0x0117, + edotbelow: 0x1EB9, + eegurmukhi: 0x0A0F, + eematragurmukhi: 0x0A47, + efcyrillic: 0x0444, + egrave: 0x00E8, + egujarati: 0x0A8F, + eharmenian: 0x0567, + ehbopomofo: 0x311D, + ehiragana: 0x3048, + ehookabove: 0x1EBB, + eibopomofo: 0x311F, + eight: 0x0038, + eightarabic: 0x0668, + eightbengali: 0x09EE, + eightcircle: 0x2467, + eightcircleinversesansserif: 0x2791, + eightdeva: 0x096E, + eighteencircle: 0x2471, + eighteenparen: 0x2485, + eighteenperiod: 0x2499, + eightgujarati: 0x0AEE, + eightgurmukhi: 0x0A6E, + eighthackarabic: 0x0668, + eighthangzhou: 0x3028, + eighthnotebeamed: 0x266B, + eightideographicparen: 0x3227, + eightinferior: 0x2088, + eightmonospace: 0xFF18, + eightoldstyle: 0xF738, + eightparen: 0x247B, + eightperiod: 0x248F, + eightpersian: 0x06F8, + eightroman: 0x2177, + eightsuperior: 0x2078, + eightthai: 0x0E58, + einvertedbreve: 0x0207, + eiotifiedcyrillic: 0x0465, + ekatakana: 0x30A8, + ekatakanahalfwidth: 0xFF74, + ekonkargurmukhi: 0x0A74, + ekorean: 0x3154, + elcyrillic: 0x043B, + element: 0x2208, + elevencircle: 0x246A, + elevenparen: 0x247E, + elevenperiod: 0x2492, + elevenroman: 0x217A, + ellipsis: 0x2026, + ellipsisvertical: 0x22EE, + emacron: 0x0113, + emacronacute: 0x1E17, + emacrongrave: 0x1E15, + emcyrillic: 0x043C, + emdash: 0x2014, + emdashvertical: 0xFE31, + emonospace: 0xFF45, + emphasismarkarmenian: 0x055B, + emptyset: 0x2205, + enbopomofo: 0x3123, + encyrillic: 0x043D, + endash: 0x2013, + endashvertical: 0xFE32, + endescendercyrillic: 0x04A3, + eng: 0x014B, + engbopomofo: 0x3125, + enghecyrillic: 0x04A5, + enhookcyrillic: 0x04C8, + enspace: 0x2002, + eogonek: 0x0119, + eokorean: 0x3153, + eopen: 0x025B, + eopenclosed: 0x029A, + eopenreversed: 0x025C, + eopenreversedclosed: 0x025E, + eopenreversedhook: 0x025D, + eparen: 0x24A0, + epsilon: 0x03B5, + epsilontonos: 0x03AD, + equal: 0x003D, + equalmonospace: 0xFF1D, + equalsmall: 0xFE66, + equalsuperior: 0x207C, + equivalence: 0x2261, + erbopomofo: 0x3126, + ercyrillic: 0x0440, + ereversed: 0x0258, + ereversedcyrillic: 0x044D, + escyrillic: 0x0441, + esdescendercyrillic: 0x04AB, + esh: 0x0283, + eshcurl: 0x0286, + eshortdeva: 0x090E, + eshortvowelsigndeva: 0x0946, + eshreversedloop: 0x01AA, + eshsquatreversed: 0x0285, + esmallhiragana: 0x3047, + esmallkatakana: 0x30A7, + esmallkatakanahalfwidth: 0xFF6A, + estimated: 0x212E, + esuperior: 0xF6EC, + eta: 0x03B7, + etarmenian: 0x0568, + etatonos: 0x03AE, + eth: 0x00F0, + etilde: 0x1EBD, + etildebelow: 0x1E1B, + etnahtafoukhhebrew: 0x0591, + etnahtafoukhlefthebrew: 0x0591, + etnahtahebrew: 0x0591, + etnahtalefthebrew: 0x0591, + eturned: 0x01DD, + eukorean: 0x3161, + euro: 0x20AC, + evowelsignbengali: 0x09C7, + evowelsigndeva: 0x0947, + evowelsigngujarati: 0x0AC7, + exclam: 0x0021, + exclamarmenian: 0x055C, + exclamdbl: 0x203C, + exclamdown: 0x00A1, + exclamdownsmall: 0xF7A1, + exclammonospace: 0xFF01, + exclamsmall: 0xF721, + existential: 0x2203, + ezh: 0x0292, + ezhcaron: 0x01EF, + ezhcurl: 0x0293, + ezhreversed: 0x01B9, + ezhtail: 0x01BA, + f: 0x0066, + fadeva: 0x095E, + fagurmukhi: 0x0A5E, + fahrenheit: 0x2109, + fathaarabic: 0x064E, + fathalowarabic: 0x064E, + fathatanarabic: 0x064B, + fbopomofo: 0x3108, + fcircle: 0x24D5, + fdotaccent: 0x1E1F, + feharabic: 0x0641, + feharmenian: 0x0586, + fehfinalarabic: 0xFED2, + fehinitialarabic: 0xFED3, + fehmedialarabic: 0xFED4, + feicoptic: 0x03E5, + female: 0x2640, + ff: 0xFB00, + ffi: 0xFB03, + ffl: 0xFB04, + fi: 0xFB01, + fifteencircle: 0x246E, + fifteenparen: 0x2482, + fifteenperiod: 0x2496, + figuredash: 0x2012, + filledbox: 0x25A0, + filledrect: 0x25AC, + finalkaf: 0x05DA, + finalkafdagesh: 0xFB3A, + finalkafdageshhebrew: 0xFB3A, + finalkafhebrew: 0x05DA, + finalmem: 0x05DD, + finalmemhebrew: 0x05DD, + finalnun: 0x05DF, + finalnunhebrew: 0x05DF, + finalpe: 0x05E3, + finalpehebrew: 0x05E3, + finaltsadi: 0x05E5, + finaltsadihebrew: 0x05E5, + firsttonechinese: 0x02C9, + fisheye: 0x25C9, + fitacyrillic: 0x0473, + five: 0x0035, + fivearabic: 0x0665, + fivebengali: 0x09EB, + fivecircle: 0x2464, + fivecircleinversesansserif: 0x278E, + fivedeva: 0x096B, + fiveeighths: 0x215D, + fivegujarati: 0x0AEB, + fivegurmukhi: 0x0A6B, + fivehackarabic: 0x0665, + fivehangzhou: 0x3025, + fiveideographicparen: 0x3224, + fiveinferior: 0x2085, + fivemonospace: 0xFF15, + fiveoldstyle: 0xF735, + fiveparen: 0x2478, + fiveperiod: 0x248C, + fivepersian: 0x06F5, + fiveroman: 0x2174, + fivesuperior: 0x2075, + fivethai: 0x0E55, + fl: 0xFB02, + florin: 0x0192, + fmonospace: 0xFF46, + fmsquare: 0x3399, + fofanthai: 0x0E1F, + fofathai: 0x0E1D, + fongmanthai: 0x0E4F, + forall: 0x2200, + four: 0x0034, + fourarabic: 0x0664, + fourbengali: 0x09EA, + fourcircle: 0x2463, + fourcircleinversesansserif: 0x278D, + fourdeva: 0x096A, + fourgujarati: 0x0AEA, + fourgurmukhi: 0x0A6A, + fourhackarabic: 0x0664, + fourhangzhou: 0x3024, + fourideographicparen: 0x3223, + fourinferior: 0x2084, + fourmonospace: 0xFF14, + fournumeratorbengali: 0x09F7, + fouroldstyle: 0xF734, + fourparen: 0x2477, + fourperiod: 0x248B, + fourpersian: 0x06F4, + fourroman: 0x2173, + foursuperior: 0x2074, + fourteencircle: 0x246D, + fourteenparen: 0x2481, + fourteenperiod: 0x2495, + fourthai: 0x0E54, + fourthtonechinese: 0x02CB, + fparen: 0x24A1, + fraction: 0x2044, + franc: 0x20A3, + g: 0x0067, + gabengali: 0x0997, + gacute: 0x01F5, + gadeva: 0x0917, + gafarabic: 0x06AF, + gaffinalarabic: 0xFB93, + gafinitialarabic: 0xFB94, + gafmedialarabic: 0xFB95, + gagujarati: 0x0A97, + gagurmukhi: 0x0A17, + gahiragana: 0x304C, + gakatakana: 0x30AC, + gamma: 0x03B3, + gammalatinsmall: 0x0263, + gammasuperior: 0x02E0, + gangiacoptic: 0x03EB, + gbopomofo: 0x310D, + gbreve: 0x011F, + gcaron: 0x01E7, + gcedilla: 0x0123, + gcircle: 0x24D6, + gcircumflex: 0x011D, + gcommaaccent: 0x0123, + gdot: 0x0121, + gdotaccent: 0x0121, + gecyrillic: 0x0433, + gehiragana: 0x3052, + gekatakana: 0x30B2, + geometricallyequal: 0x2251, + gereshaccenthebrew: 0x059C, + gereshhebrew: 0x05F3, + gereshmuqdamhebrew: 0x059D, + germandbls: 0x00DF, + gershayimaccenthebrew: 0x059E, + gershayimhebrew: 0x05F4, + getamark: 0x3013, + ghabengali: 0x0998, + ghadarmenian: 0x0572, + ghadeva: 0x0918, + ghagujarati: 0x0A98, + ghagurmukhi: 0x0A18, + ghainarabic: 0x063A, + ghainfinalarabic: 0xFECE, + ghaininitialarabic: 0xFECF, + ghainmedialarabic: 0xFED0, + ghemiddlehookcyrillic: 0x0495, + ghestrokecyrillic: 0x0493, + gheupturncyrillic: 0x0491, + ghhadeva: 0x095A, + ghhagurmukhi: 0x0A5A, + ghook: 0x0260, + ghzsquare: 0x3393, + gihiragana: 0x304E, + gikatakana: 0x30AE, + gimarmenian: 0x0563, + gimel: 0x05D2, + gimeldagesh: 0xFB32, + gimeldageshhebrew: 0xFB32, + gimelhebrew: 0x05D2, + gjecyrillic: 0x0453, + glottalinvertedstroke: 0x01BE, + glottalstop: 0x0294, + glottalstopinverted: 0x0296, + glottalstopmod: 0x02C0, + glottalstopreversed: 0x0295, + glottalstopreversedmod: 0x02C1, + glottalstopreversedsuperior: 0x02E4, + glottalstopstroke: 0x02A1, + glottalstopstrokereversed: 0x02A2, + gmacron: 0x1E21, + gmonospace: 0xFF47, + gohiragana: 0x3054, + gokatakana: 0x30B4, + gparen: 0x24A2, + gpasquare: 0x33AC, + gradient: 0x2207, + grave: 0x0060, + gravebelowcmb: 0x0316, + gravecmb: 0x0300, + gravecomb: 0x0300, + gravedeva: 0x0953, + gravelowmod: 0x02CE, + gravemonospace: 0xFF40, + gravetonecmb: 0x0340, + greater: 0x003E, + greaterequal: 0x2265, + greaterequalorless: 0x22DB, + greatermonospace: 0xFF1E, + greaterorequivalent: 0x2273, + greaterorless: 0x2277, + greateroverequal: 0x2267, + greatersmall: 0xFE65, + gscript: 0x0261, + gstroke: 0x01E5, + guhiragana: 0x3050, + guillemotleft: 0x00AB, + guillemotright: 0x00BB, + guilsinglleft: 0x2039, + guilsinglright: 0x203A, + gukatakana: 0x30B0, + guramusquare: 0x3318, + gysquare: 0x33C9, + h: 0x0068, + haabkhasiancyrillic: 0x04A9, + haaltonearabic: 0x06C1, + habengali: 0x09B9, + hadescendercyrillic: 0x04B3, + hadeva: 0x0939, + hagujarati: 0x0AB9, + hagurmukhi: 0x0A39, + haharabic: 0x062D, + hahfinalarabic: 0xFEA2, + hahinitialarabic: 0xFEA3, + hahiragana: 0x306F, + hahmedialarabic: 0xFEA4, + haitusquare: 0x332A, + hakatakana: 0x30CF, + hakatakanahalfwidth: 0xFF8A, + halantgurmukhi: 0x0A4D, + hamzaarabic: 0x0621, + hamzalowarabic: 0x0621, + hangulfiller: 0x3164, + hardsigncyrillic: 0x044A, + harpoonleftbarbup: 0x21BC, + harpoonrightbarbup: 0x21C0, + hasquare: 0x33CA, + hatafpatah: 0x05B2, + hatafpatah16: 0x05B2, + hatafpatah23: 0x05B2, + hatafpatah2f: 0x05B2, + hatafpatahhebrew: 0x05B2, + hatafpatahnarrowhebrew: 0x05B2, + hatafpatahquarterhebrew: 0x05B2, + hatafpatahwidehebrew: 0x05B2, + hatafqamats: 0x05B3, + hatafqamats1b: 0x05B3, + hatafqamats28: 0x05B3, + hatafqamats34: 0x05B3, + hatafqamatshebrew: 0x05B3, + hatafqamatsnarrowhebrew: 0x05B3, + hatafqamatsquarterhebrew: 0x05B3, + hatafqamatswidehebrew: 0x05B3, + hatafsegol: 0x05B1, + hatafsegol17: 0x05B1, + hatafsegol24: 0x05B1, + hatafsegol30: 0x05B1, + hatafsegolhebrew: 0x05B1, + hatafsegolnarrowhebrew: 0x05B1, + hatafsegolquarterhebrew: 0x05B1, + hatafsegolwidehebrew: 0x05B1, + hbar: 0x0127, + hbopomofo: 0x310F, + hbrevebelow: 0x1E2B, + hcedilla: 0x1E29, + hcircle: 0x24D7, + hcircumflex: 0x0125, + hdieresis: 0x1E27, + hdotaccent: 0x1E23, + hdotbelow: 0x1E25, + he: 0x05D4, + heart: 0x2665, + heartsuitblack: 0x2665, + heartsuitwhite: 0x2661, + hedagesh: 0xFB34, + hedageshhebrew: 0xFB34, + hehaltonearabic: 0x06C1, + heharabic: 0x0647, + hehebrew: 0x05D4, + hehfinalaltonearabic: 0xFBA7, + hehfinalalttwoarabic: 0xFEEA, + hehfinalarabic: 0xFEEA, + hehhamzaabovefinalarabic: 0xFBA5, + hehhamzaaboveisolatedarabic: 0xFBA4, + hehinitialaltonearabic: 0xFBA8, + hehinitialarabic: 0xFEEB, + hehiragana: 0x3078, + hehmedialaltonearabic: 0xFBA9, + hehmedialarabic: 0xFEEC, + heiseierasquare: 0x337B, + hekatakana: 0x30D8, + hekatakanahalfwidth: 0xFF8D, + hekutaarusquare: 0x3336, + henghook: 0x0267, + herutusquare: 0x3339, + het: 0x05D7, + hethebrew: 0x05D7, + hhook: 0x0266, + hhooksuperior: 0x02B1, + hieuhacirclekorean: 0x327B, + hieuhaparenkorean: 0x321B, + hieuhcirclekorean: 0x326D, + hieuhkorean: 0x314E, + hieuhparenkorean: 0x320D, + hihiragana: 0x3072, + hikatakana: 0x30D2, + hikatakanahalfwidth: 0xFF8B, + hiriq: 0x05B4, + hiriq14: 0x05B4, + hiriq21: 0x05B4, + hiriq2d: 0x05B4, + hiriqhebrew: 0x05B4, + hiriqnarrowhebrew: 0x05B4, + hiriqquarterhebrew: 0x05B4, + hiriqwidehebrew: 0x05B4, + hlinebelow: 0x1E96, + hmonospace: 0xFF48, + hoarmenian: 0x0570, + hohipthai: 0x0E2B, + hohiragana: 0x307B, + hokatakana: 0x30DB, + hokatakanahalfwidth: 0xFF8E, + holam: 0x05B9, + holam19: 0x05B9, + holam26: 0x05B9, + holam32: 0x05B9, + holamhebrew: 0x05B9, + holamnarrowhebrew: 0x05B9, + holamquarterhebrew: 0x05B9, + holamwidehebrew: 0x05B9, + honokhukthai: 0x0E2E, + hookabovecomb: 0x0309, + hookcmb: 0x0309, + hookpalatalizedbelowcmb: 0x0321, + hookretroflexbelowcmb: 0x0322, + hoonsquare: 0x3342, + horicoptic: 0x03E9, + horizontalbar: 0x2015, + horncmb: 0x031B, + hotsprings: 0x2668, + house: 0x2302, + hparen: 0x24A3, + hsuperior: 0x02B0, + hturned: 0x0265, + huhiragana: 0x3075, + huiitosquare: 0x3333, + hukatakana: 0x30D5, + hukatakanahalfwidth: 0xFF8C, + hungarumlaut: 0x02DD, + hungarumlautcmb: 0x030B, + hv: 0x0195, + hyphen: 0x002D, + hypheninferior: 0xF6E5, + hyphenmonospace: 0xFF0D, + hyphensmall: 0xFE63, + hyphensuperior: 0xF6E6, + hyphentwo: 0x2010, + i: 0x0069, + iacute: 0x00ED, + iacyrillic: 0x044F, + ibengali: 0x0987, + ibopomofo: 0x3127, + ibreve: 0x012D, + icaron: 0x01D0, + icircle: 0x24D8, + icircumflex: 0x00EE, + icyrillic: 0x0456, + idblgrave: 0x0209, + ideographearthcircle: 0x328F, + ideographfirecircle: 0x328B, + ideographicallianceparen: 0x323F, + ideographiccallparen: 0x323A, + ideographiccentrecircle: 0x32A5, + ideographicclose: 0x3006, + ideographiccomma: 0x3001, + ideographiccommaleft: 0xFF64, + ideographiccongratulationparen: 0x3237, + ideographiccorrectcircle: 0x32A3, + ideographicearthparen: 0x322F, + ideographicenterpriseparen: 0x323D, + ideographicexcellentcircle: 0x329D, + ideographicfestivalparen: 0x3240, + ideographicfinancialcircle: 0x3296, + ideographicfinancialparen: 0x3236, + ideographicfireparen: 0x322B, + ideographichaveparen: 0x3232, + ideographichighcircle: 0x32A4, + ideographiciterationmark: 0x3005, + ideographiclaborcircle: 0x3298, + ideographiclaborparen: 0x3238, + ideographicleftcircle: 0x32A7, + ideographiclowcircle: 0x32A6, + ideographicmedicinecircle: 0x32A9, + ideographicmetalparen: 0x322E, + ideographicmoonparen: 0x322A, + ideographicnameparen: 0x3234, + ideographicperiod: 0x3002, + ideographicprintcircle: 0x329E, + ideographicreachparen: 0x3243, + ideographicrepresentparen: 0x3239, + ideographicresourceparen: 0x323E, + ideographicrightcircle: 0x32A8, + ideographicsecretcircle: 0x3299, + ideographicselfparen: 0x3242, + ideographicsocietyparen: 0x3233, + ideographicspace: 0x3000, + ideographicspecialparen: 0x3235, + ideographicstockparen: 0x3231, + ideographicstudyparen: 0x323B, + ideographicsunparen: 0x3230, + ideographicsuperviseparen: 0x323C, + ideographicwaterparen: 0x322C, + ideographicwoodparen: 0x322D, + ideographiczero: 0x3007, + ideographmetalcircle: 0x328E, + ideographmooncircle: 0x328A, + ideographnamecircle: 0x3294, + ideographsuncircle: 0x3290, + ideographwatercircle: 0x328C, + ideographwoodcircle: 0x328D, + ideva: 0x0907, + idieresis: 0x00EF, + idieresisacute: 0x1E2F, + idieresiscyrillic: 0x04E5, + idotbelow: 0x1ECB, + iebrevecyrillic: 0x04D7, + iecyrillic: 0x0435, + ieungacirclekorean: 0x3275, + ieungaparenkorean: 0x3215, + ieungcirclekorean: 0x3267, + ieungkorean: 0x3147, + ieungparenkorean: 0x3207, + igrave: 0x00EC, + igujarati: 0x0A87, + igurmukhi: 0x0A07, + ihiragana: 0x3044, + ihookabove: 0x1EC9, + iibengali: 0x0988, + iicyrillic: 0x0438, + iideva: 0x0908, + iigujarati: 0x0A88, + iigurmukhi: 0x0A08, + iimatragurmukhi: 0x0A40, + iinvertedbreve: 0x020B, + iishortcyrillic: 0x0439, + iivowelsignbengali: 0x09C0, + iivowelsigndeva: 0x0940, + iivowelsigngujarati: 0x0AC0, + ij: 0x0133, + ikatakana: 0x30A4, + ikatakanahalfwidth: 0xFF72, + ikorean: 0x3163, + ilde: 0x02DC, + iluyhebrew: 0x05AC, + imacron: 0x012B, + imacroncyrillic: 0x04E3, + imageorapproximatelyequal: 0x2253, + imatragurmukhi: 0x0A3F, + imonospace: 0xFF49, + increment: 0x2206, + infinity: 0x221E, + iniarmenian: 0x056B, + integral: 0x222B, + integralbottom: 0x2321, + integralbt: 0x2321, + integralex: 0xF8F5, + integraltop: 0x2320, + integraltp: 0x2320, + intersection: 0x2229, + intisquare: 0x3305, + invbullet: 0x25D8, + invcircle: 0x25D9, + invsmileface: 0x263B, + iocyrillic: 0x0451, + iogonek: 0x012F, + iota: 0x03B9, + iotadieresis: 0x03CA, + iotadieresistonos: 0x0390, + iotalatin: 0x0269, + iotatonos: 0x03AF, + iparen: 0x24A4, + irigurmukhi: 0x0A72, + ismallhiragana: 0x3043, + ismallkatakana: 0x30A3, + ismallkatakanahalfwidth: 0xFF68, + issharbengali: 0x09FA, + istroke: 0x0268, + isuperior: 0xF6ED, + iterationhiragana: 0x309D, + iterationkatakana: 0x30FD, + itilde: 0x0129, + itildebelow: 0x1E2D, + iubopomofo: 0x3129, + iucyrillic: 0x044E, + ivowelsignbengali: 0x09BF, + ivowelsigndeva: 0x093F, + ivowelsigngujarati: 0x0ABF, + izhitsacyrillic: 0x0475, + izhitsadblgravecyrillic: 0x0477, + j: 0x006A, + jaarmenian: 0x0571, + jabengali: 0x099C, + jadeva: 0x091C, + jagujarati: 0x0A9C, + jagurmukhi: 0x0A1C, + jbopomofo: 0x3110, + jcaron: 0x01F0, + jcircle: 0x24D9, + jcircumflex: 0x0135, + jcrossedtail: 0x029D, + jdotlessstroke: 0x025F, + jecyrillic: 0x0458, + jeemarabic: 0x062C, + jeemfinalarabic: 0xFE9E, + jeeminitialarabic: 0xFE9F, + jeemmedialarabic: 0xFEA0, + jeharabic: 0x0698, + jehfinalarabic: 0xFB8B, + jhabengali: 0x099D, + jhadeva: 0x091D, + jhagujarati: 0x0A9D, + jhagurmukhi: 0x0A1D, + jheharmenian: 0x057B, + jis: 0x3004, + jmonospace: 0xFF4A, + jparen: 0x24A5, + jsuperior: 0x02B2, + k: 0x006B, + kabashkircyrillic: 0x04A1, + kabengali: 0x0995, + kacute: 0x1E31, + kacyrillic: 0x043A, + kadescendercyrillic: 0x049B, + kadeva: 0x0915, + kaf: 0x05DB, + kafarabic: 0x0643, + kafdagesh: 0xFB3B, + kafdageshhebrew: 0xFB3B, + kaffinalarabic: 0xFEDA, + kafhebrew: 0x05DB, + kafinitialarabic: 0xFEDB, + kafmedialarabic: 0xFEDC, + kafrafehebrew: 0xFB4D, + kagujarati: 0x0A95, + kagurmukhi: 0x0A15, + kahiragana: 0x304B, + kahookcyrillic: 0x04C4, + kakatakana: 0x30AB, + kakatakanahalfwidth: 0xFF76, + kappa: 0x03BA, + kappasymbolgreek: 0x03F0, + kapyeounmieumkorean: 0x3171, + kapyeounphieuphkorean: 0x3184, + kapyeounpieupkorean: 0x3178, + kapyeounssangpieupkorean: 0x3179, + karoriisquare: 0x330D, + kashidaautoarabic: 0x0640, + kashidaautonosidebearingarabic: 0x0640, + kasmallkatakana: 0x30F5, + kasquare: 0x3384, + kasraarabic: 0x0650, + kasratanarabic: 0x064D, + kastrokecyrillic: 0x049F, + katahiraprolongmarkhalfwidth: 0xFF70, + kaverticalstrokecyrillic: 0x049D, + kbopomofo: 0x310E, + kcalsquare: 0x3389, + kcaron: 0x01E9, + kcedilla: 0x0137, + kcircle: 0x24DA, + kcommaaccent: 0x0137, + kdotbelow: 0x1E33, + keharmenian: 0x0584, + kehiragana: 0x3051, + kekatakana: 0x30B1, + kekatakanahalfwidth: 0xFF79, + kenarmenian: 0x056F, + kesmallkatakana: 0x30F6, + kgreenlandic: 0x0138, + khabengali: 0x0996, + khacyrillic: 0x0445, + khadeva: 0x0916, + khagujarati: 0x0A96, + khagurmukhi: 0x0A16, + khaharabic: 0x062E, + khahfinalarabic: 0xFEA6, + khahinitialarabic: 0xFEA7, + khahmedialarabic: 0xFEA8, + kheicoptic: 0x03E7, + khhadeva: 0x0959, + khhagurmukhi: 0x0A59, + khieukhacirclekorean: 0x3278, + khieukhaparenkorean: 0x3218, + khieukhcirclekorean: 0x326A, + khieukhkorean: 0x314B, + khieukhparenkorean: 0x320A, + khokhaithai: 0x0E02, + khokhonthai: 0x0E05, + khokhuatthai: 0x0E03, + khokhwaithai: 0x0E04, + khomutthai: 0x0E5B, + khook: 0x0199, + khorakhangthai: 0x0E06, + khzsquare: 0x3391, + kihiragana: 0x304D, + kikatakana: 0x30AD, + kikatakanahalfwidth: 0xFF77, + kiroguramusquare: 0x3315, + kiromeetorusquare: 0x3316, + kirosquare: 0x3314, + kiyeokacirclekorean: 0x326E, + kiyeokaparenkorean: 0x320E, + kiyeokcirclekorean: 0x3260, + kiyeokkorean: 0x3131, + kiyeokparenkorean: 0x3200, + kiyeoksioskorean: 0x3133, + kjecyrillic: 0x045C, + klinebelow: 0x1E35, + klsquare: 0x3398, + kmcubedsquare: 0x33A6, + kmonospace: 0xFF4B, + kmsquaredsquare: 0x33A2, + kohiragana: 0x3053, + kohmsquare: 0x33C0, + kokaithai: 0x0E01, + kokatakana: 0x30B3, + kokatakanahalfwidth: 0xFF7A, + kooposquare: 0x331E, + koppacyrillic: 0x0481, + koreanstandardsymbol: 0x327F, + koroniscmb: 0x0343, + kparen: 0x24A6, + kpasquare: 0x33AA, + ksicyrillic: 0x046F, + ktsquare: 0x33CF, + kturned: 0x029E, + kuhiragana: 0x304F, + kukatakana: 0x30AF, + kukatakanahalfwidth: 0xFF78, + kvsquare: 0x33B8, + kwsquare: 0x33BE, + l: 0x006C, + labengali: 0x09B2, + lacute: 0x013A, + ladeva: 0x0932, + lagujarati: 0x0AB2, + lagurmukhi: 0x0A32, + lakkhangyaothai: 0x0E45, + lamaleffinalarabic: 0xFEFC, + lamalefhamzaabovefinalarabic: 0xFEF8, + lamalefhamzaaboveisolatedarabic: 0xFEF7, + lamalefhamzabelowfinalarabic: 0xFEFA, + lamalefhamzabelowisolatedarabic: 0xFEF9, + lamalefisolatedarabic: 0xFEFB, + lamalefmaddaabovefinalarabic: 0xFEF6, + lamalefmaddaaboveisolatedarabic: 0xFEF5, + lamarabic: 0x0644, + lambda: 0x03BB, + lambdastroke: 0x019B, + lamed: 0x05DC, + lameddagesh: 0xFB3C, + lameddageshhebrew: 0xFB3C, + lamedhebrew: 0x05DC, + lamfinalarabic: 0xFEDE, + lamhahinitialarabic: 0xFCCA, + laminitialarabic: 0xFEDF, + lamjeeminitialarabic: 0xFCC9, + lamkhahinitialarabic: 0xFCCB, + lamlamhehisolatedarabic: 0xFDF2, + lammedialarabic: 0xFEE0, + lammeemhahinitialarabic: 0xFD88, + lammeeminitialarabic: 0xFCCC, + largecircle: 0x25EF, + lbar: 0x019A, + lbelt: 0x026C, + lbopomofo: 0x310C, + lcaron: 0x013E, + lcedilla: 0x013C, + lcircle: 0x24DB, + lcircumflexbelow: 0x1E3D, + lcommaaccent: 0x013C, + ldot: 0x0140, + ldotaccent: 0x0140, + ldotbelow: 0x1E37, + ldotbelowmacron: 0x1E39, + leftangleabovecmb: 0x031A, + lefttackbelowcmb: 0x0318, + less: 0x003C, + lessequal: 0x2264, + lessequalorgreater: 0x22DA, + lessmonospace: 0xFF1C, + lessorequivalent: 0x2272, + lessorgreater: 0x2276, + lessoverequal: 0x2266, + lesssmall: 0xFE64, + lezh: 0x026E, + lfblock: 0x258C, + lhookretroflex: 0x026D, + lira: 0x20A4, + liwnarmenian: 0x056C, + lj: 0x01C9, + ljecyrillic: 0x0459, + ll: 0xF6C0, + lladeva: 0x0933, + llagujarati: 0x0AB3, + llinebelow: 0x1E3B, + llladeva: 0x0934, + llvocalicbengali: 0x09E1, + llvocalicdeva: 0x0961, + llvocalicvowelsignbengali: 0x09E3, + llvocalicvowelsigndeva: 0x0963, + lmiddletilde: 0x026B, + lmonospace: 0xFF4C, + lmsquare: 0x33D0, + lochulathai: 0x0E2C, + logicaland: 0x2227, + logicalnot: 0x00AC, + logicalnotreversed: 0x2310, + logicalor: 0x2228, + lolingthai: 0x0E25, + longs: 0x017F, + lowlinecenterline: 0xFE4E, + lowlinecmb: 0x0332, + lowlinedashed: 0xFE4D, + lozenge: 0x25CA, + lparen: 0x24A7, + lslash: 0x0142, + lsquare: 0x2113, + lsuperior: 0xF6EE, + ltshade: 0x2591, + luthai: 0x0E26, + lvocalicbengali: 0x098C, + lvocalicdeva: 0x090C, + lvocalicvowelsignbengali: 0x09E2, + lvocalicvowelsigndeva: 0x0962, + lxsquare: 0x33D3, + m: 0x006D, + mabengali: 0x09AE, + macron: 0x00AF, + macronbelowcmb: 0x0331, + macroncmb: 0x0304, + macronlowmod: 0x02CD, + macronmonospace: 0xFFE3, + macute: 0x1E3F, + madeva: 0x092E, + magujarati: 0x0AAE, + magurmukhi: 0x0A2E, + mahapakhhebrew: 0x05A4, + mahapakhlefthebrew: 0x05A4, + mahiragana: 0x307E, + maichattawalowleftthai: 0xF895, + maichattawalowrightthai: 0xF894, + maichattawathai: 0x0E4B, + maichattawaupperleftthai: 0xF893, + maieklowleftthai: 0xF88C, + maieklowrightthai: 0xF88B, + maiekthai: 0x0E48, + maiekupperleftthai: 0xF88A, + maihanakatleftthai: 0xF884, + maihanakatthai: 0x0E31, + maitaikhuleftthai: 0xF889, + maitaikhuthai: 0x0E47, + maitholowleftthai: 0xF88F, + maitholowrightthai: 0xF88E, + maithothai: 0x0E49, + maithoupperleftthai: 0xF88D, + maitrilowleftthai: 0xF892, + maitrilowrightthai: 0xF891, + maitrithai: 0x0E4A, + maitriupperleftthai: 0xF890, + maiyamokthai: 0x0E46, + makatakana: 0x30DE, + makatakanahalfwidth: 0xFF8F, + male: 0x2642, + mansyonsquare: 0x3347, + maqafhebrew: 0x05BE, + mars: 0x2642, + masoracirclehebrew: 0x05AF, + masquare: 0x3383, + mbopomofo: 0x3107, + mbsquare: 0x33D4, + mcircle: 0x24DC, + mcubedsquare: 0x33A5, + mdotaccent: 0x1E41, + mdotbelow: 0x1E43, + meemarabic: 0x0645, + meemfinalarabic: 0xFEE2, + meeminitialarabic: 0xFEE3, + meemmedialarabic: 0xFEE4, + meemmeeminitialarabic: 0xFCD1, + meemmeemisolatedarabic: 0xFC48, + meetorusquare: 0x334D, + mehiragana: 0x3081, + meizierasquare: 0x337E, + mekatakana: 0x30E1, + mekatakanahalfwidth: 0xFF92, + mem: 0x05DE, + memdagesh: 0xFB3E, + memdageshhebrew: 0xFB3E, + memhebrew: 0x05DE, + menarmenian: 0x0574, + merkhahebrew: 0x05A5, + merkhakefulahebrew: 0x05A6, + merkhakefulalefthebrew: 0x05A6, + merkhalefthebrew: 0x05A5, + mhook: 0x0271, + mhzsquare: 0x3392, + middledotkatakanahalfwidth: 0xFF65, + middot: 0x00B7, + mieumacirclekorean: 0x3272, + mieumaparenkorean: 0x3212, + mieumcirclekorean: 0x3264, + mieumkorean: 0x3141, + mieumpansioskorean: 0x3170, + mieumparenkorean: 0x3204, + mieumpieupkorean: 0x316E, + mieumsioskorean: 0x316F, + mihiragana: 0x307F, + mikatakana: 0x30DF, + mikatakanahalfwidth: 0xFF90, + minus: 0x2212, + minusbelowcmb: 0x0320, + minuscircle: 0x2296, + minusmod: 0x02D7, + minusplus: 0x2213, + minute: 0x2032, + miribaarusquare: 0x334A, + mirisquare: 0x3349, + mlonglegturned: 0x0270, + mlsquare: 0x3396, + mmcubedsquare: 0x33A3, + mmonospace: 0xFF4D, + mmsquaredsquare: 0x339F, + mohiragana: 0x3082, + mohmsquare: 0x33C1, + mokatakana: 0x30E2, + mokatakanahalfwidth: 0xFF93, + molsquare: 0x33D6, + momathai: 0x0E21, + moverssquare: 0x33A7, + moverssquaredsquare: 0x33A8, + mparen: 0x24A8, + mpasquare: 0x33AB, + mssquare: 0x33B3, + msuperior: 0xF6EF, + mturned: 0x026F, + mu: 0x00B5, + mu1: 0x00B5, + muasquare: 0x3382, + muchgreater: 0x226B, + muchless: 0x226A, + mufsquare: 0x338C, + mugreek: 0x03BC, + mugsquare: 0x338D, + muhiragana: 0x3080, + mukatakana: 0x30E0, + mukatakanahalfwidth: 0xFF91, + mulsquare: 0x3395, + multiply: 0x00D7, + mumsquare: 0x339B, + munahhebrew: 0x05A3, + munahlefthebrew: 0x05A3, + musicalnote: 0x266A, + musicalnotedbl: 0x266B, + musicflatsign: 0x266D, + musicsharpsign: 0x266F, + mussquare: 0x33B2, + muvsquare: 0x33B6, + muwsquare: 0x33BC, + mvmegasquare: 0x33B9, + mvsquare: 0x33B7, + mwmegasquare: 0x33BF, + mwsquare: 0x33BD, + n: 0x006E, + nabengali: 0x09A8, + nabla: 0x2207, + nacute: 0x0144, + nadeva: 0x0928, + nagujarati: 0x0AA8, + nagurmukhi: 0x0A28, + nahiragana: 0x306A, + nakatakana: 0x30CA, + nakatakanahalfwidth: 0xFF85, + napostrophe: 0x0149, + nasquare: 0x3381, + nbopomofo: 0x310B, + nbspace: 0x00A0, + ncaron: 0x0148, + ncedilla: 0x0146, + ncircle: 0x24DD, + ncircumflexbelow: 0x1E4B, + ncommaaccent: 0x0146, + ndotaccent: 0x1E45, + ndotbelow: 0x1E47, + nehiragana: 0x306D, + nekatakana: 0x30CD, + nekatakanahalfwidth: 0xFF88, + newsheqelsign: 0x20AA, + nfsquare: 0x338B, + ngabengali: 0x0999, + ngadeva: 0x0919, + ngagujarati: 0x0A99, + ngagurmukhi: 0x0A19, + ngonguthai: 0x0E07, + nhiragana: 0x3093, + nhookleft: 0x0272, + nhookretroflex: 0x0273, + nieunacirclekorean: 0x326F, + nieunaparenkorean: 0x320F, + nieuncieuckorean: 0x3135, + nieuncirclekorean: 0x3261, + nieunhieuhkorean: 0x3136, + nieunkorean: 0x3134, + nieunpansioskorean: 0x3168, + nieunparenkorean: 0x3201, + nieunsioskorean: 0x3167, + nieuntikeutkorean: 0x3166, + nihiragana: 0x306B, + nikatakana: 0x30CB, + nikatakanahalfwidth: 0xFF86, + nikhahitleftthai: 0xF899, + nikhahitthai: 0x0E4D, + nine: 0x0039, + ninearabic: 0x0669, + ninebengali: 0x09EF, + ninecircle: 0x2468, + ninecircleinversesansserif: 0x2792, + ninedeva: 0x096F, + ninegujarati: 0x0AEF, + ninegurmukhi: 0x0A6F, + ninehackarabic: 0x0669, + ninehangzhou: 0x3029, + nineideographicparen: 0x3228, + nineinferior: 0x2089, + ninemonospace: 0xFF19, + nineoldstyle: 0xF739, + nineparen: 0x247C, + nineperiod: 0x2490, + ninepersian: 0x06F9, + nineroman: 0x2178, + ninesuperior: 0x2079, + nineteencircle: 0x2472, + nineteenparen: 0x2486, + nineteenperiod: 0x249A, + ninethai: 0x0E59, + nj: 0x01CC, + njecyrillic: 0x045A, + nkatakana: 0x30F3, + nkatakanahalfwidth: 0xFF9D, + nlegrightlong: 0x019E, + nlinebelow: 0x1E49, + nmonospace: 0xFF4E, + nmsquare: 0x339A, + nnabengali: 0x09A3, + nnadeva: 0x0923, + nnagujarati: 0x0AA3, + nnagurmukhi: 0x0A23, + nnnadeva: 0x0929, + nohiragana: 0x306E, + nokatakana: 0x30CE, + nokatakanahalfwidth: 0xFF89, + nonbreakingspace: 0x00A0, + nonenthai: 0x0E13, + nonuthai: 0x0E19, + noonarabic: 0x0646, + noonfinalarabic: 0xFEE6, + noonghunnaarabic: 0x06BA, + noonghunnafinalarabic: 0xFB9F, + nooninitialarabic: 0xFEE7, + noonjeeminitialarabic: 0xFCD2, + noonjeemisolatedarabic: 0xFC4B, + noonmedialarabic: 0xFEE8, + noonmeeminitialarabic: 0xFCD5, + noonmeemisolatedarabic: 0xFC4E, + noonnoonfinalarabic: 0xFC8D, + notcontains: 0x220C, + notelement: 0x2209, + notelementof: 0x2209, + notequal: 0x2260, + notgreater: 0x226F, + notgreaternorequal: 0x2271, + notgreaternorless: 0x2279, + notidentical: 0x2262, + notless: 0x226E, + notlessnorequal: 0x2270, + notparallel: 0x2226, + notprecedes: 0x2280, + notsubset: 0x2284, + notsucceeds: 0x2281, + notsuperset: 0x2285, + nowarmenian: 0x0576, + nparen: 0x24A9, + nssquare: 0x33B1, + nsuperior: 0x207F, + ntilde: 0x00F1, + nu: 0x03BD, + nuhiragana: 0x306C, + nukatakana: 0x30CC, + nukatakanahalfwidth: 0xFF87, + nuktabengali: 0x09BC, + nuktadeva: 0x093C, + nuktagujarati: 0x0ABC, + nuktagurmukhi: 0x0A3C, + numbersign: 0x0023, + numbersignmonospace: 0xFF03, + numbersignsmall: 0xFE5F, + numeralsigngreek: 0x0374, + numeralsignlowergreek: 0x0375, + numero: 0x2116, + nun: 0x05E0, + nundagesh: 0xFB40, + nundageshhebrew: 0xFB40, + nunhebrew: 0x05E0, + nvsquare: 0x33B5, + nwsquare: 0x33BB, + nyabengali: 0x099E, + nyadeva: 0x091E, + nyagujarati: 0x0A9E, + nyagurmukhi: 0x0A1E, + o: 0x006F, + oacute: 0x00F3, + oangthai: 0x0E2D, + obarred: 0x0275, + obarredcyrillic: 0x04E9, + obarreddieresiscyrillic: 0x04EB, + obengali: 0x0993, + obopomofo: 0x311B, + obreve: 0x014F, + ocandradeva: 0x0911, + ocandragujarati: 0x0A91, + ocandravowelsigndeva: 0x0949, + ocandravowelsigngujarati: 0x0AC9, + ocaron: 0x01D2, + ocircle: 0x24DE, + ocircumflex: 0x00F4, + ocircumflexacute: 0x1ED1, + ocircumflexdotbelow: 0x1ED9, + ocircumflexgrave: 0x1ED3, + ocircumflexhookabove: 0x1ED5, + ocircumflextilde: 0x1ED7, + ocyrillic: 0x043E, + odblacute: 0x0151, + odblgrave: 0x020D, + odeva: 0x0913, + odieresis: 0x00F6, + odieresiscyrillic: 0x04E7, + odotbelow: 0x1ECD, + oe: 0x0153, + oekorean: 0x315A, + ogonek: 0x02DB, + ogonekcmb: 0x0328, + ograve: 0x00F2, + ogujarati: 0x0A93, + oharmenian: 0x0585, + ohiragana: 0x304A, + ohookabove: 0x1ECF, + ohorn: 0x01A1, + ohornacute: 0x1EDB, + ohorndotbelow: 0x1EE3, + ohorngrave: 0x1EDD, + ohornhookabove: 0x1EDF, + ohorntilde: 0x1EE1, + ohungarumlaut: 0x0151, + oi: 0x01A3, + oinvertedbreve: 0x020F, + okatakana: 0x30AA, + okatakanahalfwidth: 0xFF75, + okorean: 0x3157, + olehebrew: 0x05AB, + omacron: 0x014D, + omacronacute: 0x1E53, + omacrongrave: 0x1E51, + omdeva: 0x0950, + omega: 0x03C9, + omega1: 0x03D6, + omegacyrillic: 0x0461, + omegalatinclosed: 0x0277, + omegaroundcyrillic: 0x047B, + omegatitlocyrillic: 0x047D, + omegatonos: 0x03CE, + omgujarati: 0x0AD0, + omicron: 0x03BF, + omicrontonos: 0x03CC, + omonospace: 0xFF4F, + one: 0x0031, + onearabic: 0x0661, + onebengali: 0x09E7, + onecircle: 0x2460, + onecircleinversesansserif: 0x278A, + onedeva: 0x0967, + onedotenleader: 0x2024, + oneeighth: 0x215B, + onefitted: 0xF6DC, + onegujarati: 0x0AE7, + onegurmukhi: 0x0A67, + onehackarabic: 0x0661, + onehalf: 0x00BD, + onehangzhou: 0x3021, + oneideographicparen: 0x3220, + oneinferior: 0x2081, + onemonospace: 0xFF11, + onenumeratorbengali: 0x09F4, + oneoldstyle: 0xF731, + oneparen: 0x2474, + oneperiod: 0x2488, + onepersian: 0x06F1, + onequarter: 0x00BC, + oneroman: 0x2170, + onesuperior: 0x00B9, + onethai: 0x0E51, + onethird: 0x2153, + oogonek: 0x01EB, + oogonekmacron: 0x01ED, + oogurmukhi: 0x0A13, + oomatragurmukhi: 0x0A4B, + oopen: 0x0254, + oparen: 0x24AA, + openbullet: 0x25E6, + option: 0x2325, + ordfeminine: 0x00AA, + ordmasculine: 0x00BA, + orthogonal: 0x221F, + oshortdeva: 0x0912, + oshortvowelsigndeva: 0x094A, + oslash: 0x00F8, + oslashacute: 0x01FF, + osmallhiragana: 0x3049, + osmallkatakana: 0x30A9, + osmallkatakanahalfwidth: 0xFF6B, + ostrokeacute: 0x01FF, + osuperior: 0xF6F0, + otcyrillic: 0x047F, + otilde: 0x00F5, + otildeacute: 0x1E4D, + otildedieresis: 0x1E4F, + oubopomofo: 0x3121, + overline: 0x203E, + overlinecenterline: 0xFE4A, + overlinecmb: 0x0305, + overlinedashed: 0xFE49, + overlinedblwavy: 0xFE4C, + overlinewavy: 0xFE4B, + overscore: 0x00AF, + ovowelsignbengali: 0x09CB, + ovowelsigndeva: 0x094B, + ovowelsigngujarati: 0x0ACB, + p: 0x0070, + paampssquare: 0x3380, + paasentosquare: 0x332B, + pabengali: 0x09AA, + pacute: 0x1E55, + padeva: 0x092A, + pagedown: 0x21DF, + pageup: 0x21DE, + pagujarati: 0x0AAA, + pagurmukhi: 0x0A2A, + pahiragana: 0x3071, + paiyannoithai: 0x0E2F, + pakatakana: 0x30D1, + palatalizationcyrilliccmb: 0x0484, + palochkacyrillic: 0x04C0, + pansioskorean: 0x317F, + paragraph: 0x00B6, + parallel: 0x2225, + parenleft: 0x0028, + parenleftaltonearabic: 0xFD3E, + parenleftbt: 0xF8ED, + parenleftex: 0xF8EC, + parenleftinferior: 0x208D, + parenleftmonospace: 0xFF08, + parenleftsmall: 0xFE59, + parenleftsuperior: 0x207D, + parenlefttp: 0xF8EB, + parenleftvertical: 0xFE35, + parenright: 0x0029, + parenrightaltonearabic: 0xFD3F, + parenrightbt: 0xF8F8, + parenrightex: 0xF8F7, + parenrightinferior: 0x208E, + parenrightmonospace: 0xFF09, + parenrightsmall: 0xFE5A, + parenrightsuperior: 0x207E, + parenrighttp: 0xF8F6, + parenrightvertical: 0xFE36, + partialdiff: 0x2202, + paseqhebrew: 0x05C0, + pashtahebrew: 0x0599, + pasquare: 0x33A9, + patah: 0x05B7, + patah11: 0x05B7, + patah1d: 0x05B7, + patah2a: 0x05B7, + patahhebrew: 0x05B7, + patahnarrowhebrew: 0x05B7, + patahquarterhebrew: 0x05B7, + patahwidehebrew: 0x05B7, + pazerhebrew: 0x05A1, + pbopomofo: 0x3106, + pcircle: 0x24DF, + pdotaccent: 0x1E57, + pe: 0x05E4, + pecyrillic: 0x043F, + pedagesh: 0xFB44, + pedageshhebrew: 0xFB44, + peezisquare: 0x333B, + pefinaldageshhebrew: 0xFB43, + peharabic: 0x067E, + peharmenian: 0x057A, + pehebrew: 0x05E4, + pehfinalarabic: 0xFB57, + pehinitialarabic: 0xFB58, + pehiragana: 0x307A, + pehmedialarabic: 0xFB59, + pekatakana: 0x30DA, + pemiddlehookcyrillic: 0x04A7, + perafehebrew: 0xFB4E, + percent: 0x0025, + percentarabic: 0x066A, + percentmonospace: 0xFF05, + percentsmall: 0xFE6A, + period: 0x002E, + periodarmenian: 0x0589, + periodcentered: 0x00B7, + periodhalfwidth: 0xFF61, + periodinferior: 0xF6E7, + periodmonospace: 0xFF0E, + periodsmall: 0xFE52, + periodsuperior: 0xF6E8, + perispomenigreekcmb: 0x0342, + perpendicular: 0x22A5, + perthousand: 0x2030, + peseta: 0x20A7, + pfsquare: 0x338A, + phabengali: 0x09AB, + phadeva: 0x092B, + phagujarati: 0x0AAB, + phagurmukhi: 0x0A2B, + phi: 0x03C6, + phi1: 0x03D5, + phieuphacirclekorean: 0x327A, + phieuphaparenkorean: 0x321A, + phieuphcirclekorean: 0x326C, + phieuphkorean: 0x314D, + phieuphparenkorean: 0x320C, + philatin: 0x0278, + phinthuthai: 0x0E3A, + phisymbolgreek: 0x03D5, + phook: 0x01A5, + phophanthai: 0x0E1E, + phophungthai: 0x0E1C, + phosamphaothai: 0x0E20, + pi: 0x03C0, + pieupacirclekorean: 0x3273, + pieupaparenkorean: 0x3213, + pieupcieuckorean: 0x3176, + pieupcirclekorean: 0x3265, + pieupkiyeokkorean: 0x3172, + pieupkorean: 0x3142, + pieupparenkorean: 0x3205, + pieupsioskiyeokkorean: 0x3174, + pieupsioskorean: 0x3144, + pieupsiostikeutkorean: 0x3175, + pieupthieuthkorean: 0x3177, + pieuptikeutkorean: 0x3173, + pihiragana: 0x3074, + pikatakana: 0x30D4, + pisymbolgreek: 0x03D6, + piwrarmenian: 0x0583, + plus: 0x002B, + plusbelowcmb: 0x031F, + pluscircle: 0x2295, + plusminus: 0x00B1, + plusmod: 0x02D6, + plusmonospace: 0xFF0B, + plussmall: 0xFE62, + plussuperior: 0x207A, + pmonospace: 0xFF50, + pmsquare: 0x33D8, + pohiragana: 0x307D, + pointingindexdownwhite: 0x261F, + pointingindexleftwhite: 0x261C, + pointingindexrightwhite: 0x261E, + pointingindexupwhite: 0x261D, + pokatakana: 0x30DD, + poplathai: 0x0E1B, + postalmark: 0x3012, + postalmarkface: 0x3020, + pparen: 0x24AB, + precedes: 0x227A, + prescription: 0x211E, + primemod: 0x02B9, + primereversed: 0x2035, + product: 0x220F, + projective: 0x2305, + prolongedkana: 0x30FC, + propellor: 0x2318, + propersubset: 0x2282, + propersuperset: 0x2283, + proportion: 0x2237, + proportional: 0x221D, + psi: 0x03C8, + psicyrillic: 0x0471, + psilipneumatacyrilliccmb: 0x0486, + pssquare: 0x33B0, + puhiragana: 0x3077, + pukatakana: 0x30D7, + pvsquare: 0x33B4, + pwsquare: 0x33BA, + q: 0x0071, + qadeva: 0x0958, + qadmahebrew: 0x05A8, + qafarabic: 0x0642, + qaffinalarabic: 0xFED6, + qafinitialarabic: 0xFED7, + qafmedialarabic: 0xFED8, + qamats: 0x05B8, + qamats10: 0x05B8, + qamats1a: 0x05B8, + qamats1c: 0x05B8, + qamats27: 0x05B8, + qamats29: 0x05B8, + qamats33: 0x05B8, + qamatsde: 0x05B8, + qamatshebrew: 0x05B8, + qamatsnarrowhebrew: 0x05B8, + qamatsqatanhebrew: 0x05B8, + qamatsqatannarrowhebrew: 0x05B8, + qamatsqatanquarterhebrew: 0x05B8, + qamatsqatanwidehebrew: 0x05B8, + qamatsquarterhebrew: 0x05B8, + qamatswidehebrew: 0x05B8, + qarneyparahebrew: 0x059F, + qbopomofo: 0x3111, + qcircle: 0x24E0, + qhook: 0x02A0, + qmonospace: 0xFF51, + qof: 0x05E7, + qofdagesh: 0xFB47, + qofdageshhebrew: 0xFB47, + qofhebrew: 0x05E7, + qparen: 0x24AC, + quarternote: 0x2669, + qubuts: 0x05BB, + qubuts18: 0x05BB, + qubuts25: 0x05BB, + qubuts31: 0x05BB, + qubutshebrew: 0x05BB, + qubutsnarrowhebrew: 0x05BB, + qubutsquarterhebrew: 0x05BB, + qubutswidehebrew: 0x05BB, + question: 0x003F, + questionarabic: 0x061F, + questionarmenian: 0x055E, + questiondown: 0x00BF, + questiondownsmall: 0xF7BF, + questiongreek: 0x037E, + questionmonospace: 0xFF1F, + questionsmall: 0xF73F, + quotedbl: 0x0022, + quotedblbase: 0x201E, + quotedblleft: 0x201C, + quotedblmonospace: 0xFF02, + quotedblprime: 0x301E, + quotedblprimereversed: 0x301D, + quotedblright: 0x201D, + quoteleft: 0x2018, + quoteleftreversed: 0x201B, + quotereversed: 0x201B, + quoteright: 0x2019, + quoterightn: 0x0149, + quotesinglbase: 0x201A, + quotesingle: 0x0027, + quotesinglemonospace: 0xFF07, + r: 0x0072, + raarmenian: 0x057C, + rabengali: 0x09B0, + racute: 0x0155, + radeva: 0x0930, + radical: 0x221A, + radicalex: 0xF8E5, + radoverssquare: 0x33AE, + radoverssquaredsquare: 0x33AF, + radsquare: 0x33AD, + rafe: 0x05BF, + rafehebrew: 0x05BF, + ragujarati: 0x0AB0, + ragurmukhi: 0x0A30, + rahiragana: 0x3089, + rakatakana: 0x30E9, + rakatakanahalfwidth: 0xFF97, + ralowerdiagonalbengali: 0x09F1, + ramiddlediagonalbengali: 0x09F0, + ramshorn: 0x0264, + ratio: 0x2236, + rbopomofo: 0x3116, + rcaron: 0x0159, + rcedilla: 0x0157, + rcircle: 0x24E1, + rcommaaccent: 0x0157, + rdblgrave: 0x0211, + rdotaccent: 0x1E59, + rdotbelow: 0x1E5B, + rdotbelowmacron: 0x1E5D, + referencemark: 0x203B, + reflexsubset: 0x2286, + reflexsuperset: 0x2287, + registered: 0x00AE, + registersans: 0xF8E8, + registerserif: 0xF6DA, + reharabic: 0x0631, + reharmenian: 0x0580, + rehfinalarabic: 0xFEAE, + rehiragana: 0x308C, + rekatakana: 0x30EC, + rekatakanahalfwidth: 0xFF9A, + resh: 0x05E8, + reshdageshhebrew: 0xFB48, + reshhebrew: 0x05E8, + reversedtilde: 0x223D, + reviahebrew: 0x0597, + reviamugrashhebrew: 0x0597, + revlogicalnot: 0x2310, + rfishhook: 0x027E, + rfishhookreversed: 0x027F, + rhabengali: 0x09DD, + rhadeva: 0x095D, + rho: 0x03C1, + rhook: 0x027D, + rhookturned: 0x027B, + rhookturnedsuperior: 0x02B5, + rhosymbolgreek: 0x03F1, + rhotichookmod: 0x02DE, + rieulacirclekorean: 0x3271, + rieulaparenkorean: 0x3211, + rieulcirclekorean: 0x3263, + rieulhieuhkorean: 0x3140, + rieulkiyeokkorean: 0x313A, + rieulkiyeoksioskorean: 0x3169, + rieulkorean: 0x3139, + rieulmieumkorean: 0x313B, + rieulpansioskorean: 0x316C, + rieulparenkorean: 0x3203, + rieulphieuphkorean: 0x313F, + rieulpieupkorean: 0x313C, + rieulpieupsioskorean: 0x316B, + rieulsioskorean: 0x313D, + rieulthieuthkorean: 0x313E, + rieultikeutkorean: 0x316A, + rieulyeorinhieuhkorean: 0x316D, + rightangle: 0x221F, + righttackbelowcmb: 0x0319, + righttriangle: 0x22BF, + rihiragana: 0x308A, + rikatakana: 0x30EA, + rikatakanahalfwidth: 0xFF98, + ring: 0x02DA, + ringbelowcmb: 0x0325, + ringcmb: 0x030A, + ringhalfleft: 0x02BF, + ringhalfleftarmenian: 0x0559, + ringhalfleftbelowcmb: 0x031C, + ringhalfleftcentered: 0x02D3, + ringhalfright: 0x02BE, + ringhalfrightbelowcmb: 0x0339, + ringhalfrightcentered: 0x02D2, + rinvertedbreve: 0x0213, + rittorusquare: 0x3351, + rlinebelow: 0x1E5F, + rlongleg: 0x027C, + rlonglegturned: 0x027A, + rmonospace: 0xFF52, + rohiragana: 0x308D, + rokatakana: 0x30ED, + rokatakanahalfwidth: 0xFF9B, + roruathai: 0x0E23, + rparen: 0x24AD, + rrabengali: 0x09DC, + rradeva: 0x0931, + rragurmukhi: 0x0A5C, + rreharabic: 0x0691, + rrehfinalarabic: 0xFB8D, + rrvocalicbengali: 0x09E0, + rrvocalicdeva: 0x0960, + rrvocalicgujarati: 0x0AE0, + rrvocalicvowelsignbengali: 0x09C4, + rrvocalicvowelsigndeva: 0x0944, + rrvocalicvowelsigngujarati: 0x0AC4, + rsuperior: 0xF6F1, + rtblock: 0x2590, + rturned: 0x0279, + rturnedsuperior: 0x02B4, + ruhiragana: 0x308B, + rukatakana: 0x30EB, + rukatakanahalfwidth: 0xFF99, + rupeemarkbengali: 0x09F2, + rupeesignbengali: 0x09F3, + rupiah: 0xF6DD, + ruthai: 0x0E24, + rvocalicbengali: 0x098B, + rvocalicdeva: 0x090B, + rvocalicgujarati: 0x0A8B, + rvocalicvowelsignbengali: 0x09C3, + rvocalicvowelsigndeva: 0x0943, + rvocalicvowelsigngujarati: 0x0AC3, + s: 0x0073, + sabengali: 0x09B8, + sacute: 0x015B, + sacutedotaccent: 0x1E65, + sadarabic: 0x0635, + sadeva: 0x0938, + sadfinalarabic: 0xFEBA, + sadinitialarabic: 0xFEBB, + sadmedialarabic: 0xFEBC, + sagujarati: 0x0AB8, + sagurmukhi: 0x0A38, + sahiragana: 0x3055, + sakatakana: 0x30B5, + sakatakanahalfwidth: 0xFF7B, + sallallahoualayhewasallamarabic: 0xFDFA, + samekh: 0x05E1, + samekhdagesh: 0xFB41, + samekhdageshhebrew: 0xFB41, + samekhhebrew: 0x05E1, + saraaathai: 0x0E32, + saraaethai: 0x0E41, + saraaimaimalaithai: 0x0E44, + saraaimaimuanthai: 0x0E43, + saraamthai: 0x0E33, + saraathai: 0x0E30, + saraethai: 0x0E40, + saraiileftthai: 0xF886, + saraiithai: 0x0E35, + saraileftthai: 0xF885, + saraithai: 0x0E34, + saraothai: 0x0E42, + saraueeleftthai: 0xF888, + saraueethai: 0x0E37, + saraueleftthai: 0xF887, + sarauethai: 0x0E36, + sarauthai: 0x0E38, + sarauuthai: 0x0E39, + sbopomofo: 0x3119, + scaron: 0x0161, + scarondotaccent: 0x1E67, + scedilla: 0x015F, + schwa: 0x0259, + schwacyrillic: 0x04D9, + schwadieresiscyrillic: 0x04DB, + schwahook: 0x025A, + scircle: 0x24E2, + scircumflex: 0x015D, + scommaaccent: 0x0219, + sdotaccent: 0x1E61, + sdotbelow: 0x1E63, + sdotbelowdotaccent: 0x1E69, + seagullbelowcmb: 0x033C, + second: 0x2033, + secondtonechinese: 0x02CA, + section: 0x00A7, + seenarabic: 0x0633, + seenfinalarabic: 0xFEB2, + seeninitialarabic: 0xFEB3, + seenmedialarabic: 0xFEB4, + segol: 0x05B6, + segol13: 0x05B6, + segol1f: 0x05B6, + segol2c: 0x05B6, + segolhebrew: 0x05B6, + segolnarrowhebrew: 0x05B6, + segolquarterhebrew: 0x05B6, + segoltahebrew: 0x0592, + segolwidehebrew: 0x05B6, + seharmenian: 0x057D, + sehiragana: 0x305B, + sekatakana: 0x30BB, + sekatakanahalfwidth: 0xFF7E, + semicolon: 0x003B, + semicolonarabic: 0x061B, + semicolonmonospace: 0xFF1B, + semicolonsmall: 0xFE54, + semivoicedmarkkana: 0x309C, + semivoicedmarkkanahalfwidth: 0xFF9F, + sentisquare: 0x3322, + sentosquare: 0x3323, + seven: 0x0037, + sevenarabic: 0x0667, + sevenbengali: 0x09ED, + sevencircle: 0x2466, + sevencircleinversesansserif: 0x2790, + sevendeva: 0x096D, + seveneighths: 0x215E, + sevengujarati: 0x0AED, + sevengurmukhi: 0x0A6D, + sevenhackarabic: 0x0667, + sevenhangzhou: 0x3027, + sevenideographicparen: 0x3226, + seveninferior: 0x2087, + sevenmonospace: 0xFF17, + sevenoldstyle: 0xF737, + sevenparen: 0x247A, + sevenperiod: 0x248E, + sevenpersian: 0x06F7, + sevenroman: 0x2176, + sevensuperior: 0x2077, + seventeencircle: 0x2470, + seventeenparen: 0x2484, + seventeenperiod: 0x2498, + seventhai: 0x0E57, + sfthyphen: 0x00AD, + shaarmenian: 0x0577, + shabengali: 0x09B6, + shacyrillic: 0x0448, + shaddaarabic: 0x0651, + shaddadammaarabic: 0xFC61, + shaddadammatanarabic: 0xFC5E, + shaddafathaarabic: 0xFC60, + shaddakasraarabic: 0xFC62, + shaddakasratanarabic: 0xFC5F, + shade: 0x2592, + shadedark: 0x2593, + shadelight: 0x2591, + shademedium: 0x2592, + shadeva: 0x0936, + shagujarati: 0x0AB6, + shagurmukhi: 0x0A36, + shalshelethebrew: 0x0593, + shbopomofo: 0x3115, + shchacyrillic: 0x0449, + sheenarabic: 0x0634, + sheenfinalarabic: 0xFEB6, + sheeninitialarabic: 0xFEB7, + sheenmedialarabic: 0xFEB8, + sheicoptic: 0x03E3, + sheqel: 0x20AA, + sheqelhebrew: 0x20AA, + sheva: 0x05B0, + sheva115: 0x05B0, + sheva15: 0x05B0, + sheva22: 0x05B0, + sheva2e: 0x05B0, + shevahebrew: 0x05B0, + shevanarrowhebrew: 0x05B0, + shevaquarterhebrew: 0x05B0, + shevawidehebrew: 0x05B0, + shhacyrillic: 0x04BB, + shimacoptic: 0x03ED, + shin: 0x05E9, + shindagesh: 0xFB49, + shindageshhebrew: 0xFB49, + shindageshshindot: 0xFB2C, + shindageshshindothebrew: 0xFB2C, + shindageshsindot: 0xFB2D, + shindageshsindothebrew: 0xFB2D, + shindothebrew: 0x05C1, + shinhebrew: 0x05E9, + shinshindot: 0xFB2A, + shinshindothebrew: 0xFB2A, + shinsindot: 0xFB2B, + shinsindothebrew: 0xFB2B, + shook: 0x0282, + sigma: 0x03C3, + sigma1: 0x03C2, + sigmafinal: 0x03C2, + sigmalunatesymbolgreek: 0x03F2, + sihiragana: 0x3057, + sikatakana: 0x30B7, + sikatakanahalfwidth: 0xFF7C, + siluqhebrew: 0x05BD, + siluqlefthebrew: 0x05BD, + similar: 0x223C, + sindothebrew: 0x05C2, + siosacirclekorean: 0x3274, + siosaparenkorean: 0x3214, + sioscieuckorean: 0x317E, + sioscirclekorean: 0x3266, + sioskiyeokkorean: 0x317A, + sioskorean: 0x3145, + siosnieunkorean: 0x317B, + siosparenkorean: 0x3206, + siospieupkorean: 0x317D, + siostikeutkorean: 0x317C, + six: 0x0036, + sixarabic: 0x0666, + sixbengali: 0x09EC, + sixcircle: 0x2465, + sixcircleinversesansserif: 0x278F, + sixdeva: 0x096C, + sixgujarati: 0x0AEC, + sixgurmukhi: 0x0A6C, + sixhackarabic: 0x0666, + sixhangzhou: 0x3026, + sixideographicparen: 0x3225, + sixinferior: 0x2086, + sixmonospace: 0xFF16, + sixoldstyle: 0xF736, + sixparen: 0x2479, + sixperiod: 0x248D, + sixpersian: 0x06F6, + sixroman: 0x2175, + sixsuperior: 0x2076, + sixteencircle: 0x246F, + sixteencurrencydenominatorbengali: 0x09F9, + sixteenparen: 0x2483, + sixteenperiod: 0x2497, + sixthai: 0x0E56, + slash: 0x002F, + slashmonospace: 0xFF0F, + slong: 0x017F, + slongdotaccent: 0x1E9B, + smileface: 0x263A, + smonospace: 0xFF53, + sofpasuqhebrew: 0x05C3, + softhyphen: 0x00AD, + softsigncyrillic: 0x044C, + sohiragana: 0x305D, + sokatakana: 0x30BD, + sokatakanahalfwidth: 0xFF7F, + soliduslongoverlaycmb: 0x0338, + solidusshortoverlaycmb: 0x0337, + sorusithai: 0x0E29, + sosalathai: 0x0E28, + sosothai: 0x0E0B, + sosuathai: 0x0E2A, + space: 0x0020, + spacehackarabic: 0x0020, + spade: 0x2660, + spadesuitblack: 0x2660, + spadesuitwhite: 0x2664, + sparen: 0x24AE, + squarebelowcmb: 0x033B, + squarecc: 0x33C4, + squarecm: 0x339D, + squarediagonalcrosshatchfill: 0x25A9, + squarehorizontalfill: 0x25A4, + squarekg: 0x338F, + squarekm: 0x339E, + squarekmcapital: 0x33CE, + squareln: 0x33D1, + squarelog: 0x33D2, + squaremg: 0x338E, + squaremil: 0x33D5, + squaremm: 0x339C, + squaremsquared: 0x33A1, + squareorthogonalcrosshatchfill: 0x25A6, + squareupperlefttolowerrightfill: 0x25A7, + squareupperrighttolowerleftfill: 0x25A8, + squareverticalfill: 0x25A5, + squarewhitewithsmallblack: 0x25A3, + srsquare: 0x33DB, + ssabengali: 0x09B7, + ssadeva: 0x0937, + ssagujarati: 0x0AB7, + ssangcieuckorean: 0x3149, + ssanghieuhkorean: 0x3185, + ssangieungkorean: 0x3180, + ssangkiyeokkorean: 0x3132, + ssangnieunkorean: 0x3165, + ssangpieupkorean: 0x3143, + ssangsioskorean: 0x3146, + ssangtikeutkorean: 0x3138, + ssuperior: 0xF6F2, + sterling: 0x00A3, + sterlingmonospace: 0xFFE1, + strokelongoverlaycmb: 0x0336, + strokeshortoverlaycmb: 0x0335, + subset: 0x2282, + subsetnotequal: 0x228A, + subsetorequal: 0x2286, + succeeds: 0x227B, + suchthat: 0x220B, + suhiragana: 0x3059, + sukatakana: 0x30B9, + sukatakanahalfwidth: 0xFF7D, + sukunarabic: 0x0652, + summation: 0x2211, + sun: 0x263C, + superset: 0x2283, + supersetnotequal: 0x228B, + supersetorequal: 0x2287, + svsquare: 0x33DC, + syouwaerasquare: 0x337C, + t: 0x0074, + tabengali: 0x09A4, + tackdown: 0x22A4, + tackleft: 0x22A3, + tadeva: 0x0924, + tagujarati: 0x0AA4, + tagurmukhi: 0x0A24, + taharabic: 0x0637, + tahfinalarabic: 0xFEC2, + tahinitialarabic: 0xFEC3, + tahiragana: 0x305F, + tahmedialarabic: 0xFEC4, + taisyouerasquare: 0x337D, + takatakana: 0x30BF, + takatakanahalfwidth: 0xFF80, + tatweelarabic: 0x0640, + tau: 0x03C4, + tav: 0x05EA, + tavdages: 0xFB4A, + tavdagesh: 0xFB4A, + tavdageshhebrew: 0xFB4A, + tavhebrew: 0x05EA, + tbar: 0x0167, + tbopomofo: 0x310A, + tcaron: 0x0165, + tccurl: 0x02A8, + tcedilla: 0x0163, + tcheharabic: 0x0686, + tchehfinalarabic: 0xFB7B, + tchehinitialarabic: 0xFB7C, + tchehmedialarabic: 0xFB7D, + tcircle: 0x24E3, + tcircumflexbelow: 0x1E71, + tcommaaccent: 0x0163, + tdieresis: 0x1E97, + tdotaccent: 0x1E6B, + tdotbelow: 0x1E6D, + tecyrillic: 0x0442, + tedescendercyrillic: 0x04AD, + teharabic: 0x062A, + tehfinalarabic: 0xFE96, + tehhahinitialarabic: 0xFCA2, + tehhahisolatedarabic: 0xFC0C, + tehinitialarabic: 0xFE97, + tehiragana: 0x3066, + tehjeeminitialarabic: 0xFCA1, + tehjeemisolatedarabic: 0xFC0B, + tehmarbutaarabic: 0x0629, + tehmarbutafinalarabic: 0xFE94, + tehmedialarabic: 0xFE98, + tehmeeminitialarabic: 0xFCA4, + tehmeemisolatedarabic: 0xFC0E, + tehnoonfinalarabic: 0xFC73, + tekatakana: 0x30C6, + tekatakanahalfwidth: 0xFF83, + telephone: 0x2121, + telephoneblack: 0x260E, + telishagedolahebrew: 0x05A0, + telishaqetanahebrew: 0x05A9, + tencircle: 0x2469, + tenideographicparen: 0x3229, + tenparen: 0x247D, + tenperiod: 0x2491, + tenroman: 0x2179, + tesh: 0x02A7, + tet: 0x05D8, + tetdagesh: 0xFB38, + tetdageshhebrew: 0xFB38, + tethebrew: 0x05D8, + tetsecyrillic: 0x04B5, + tevirhebrew: 0x059B, + tevirlefthebrew: 0x059B, + thabengali: 0x09A5, + thadeva: 0x0925, + thagujarati: 0x0AA5, + thagurmukhi: 0x0A25, + thalarabic: 0x0630, + thalfinalarabic: 0xFEAC, + thanthakhatlowleftthai: 0xF898, + thanthakhatlowrightthai: 0xF897, + thanthakhatthai: 0x0E4C, + thanthakhatupperleftthai: 0xF896, + theharabic: 0x062B, + thehfinalarabic: 0xFE9A, + thehinitialarabic: 0xFE9B, + thehmedialarabic: 0xFE9C, + thereexists: 0x2203, + therefore: 0x2234, + theta: 0x03B8, + theta1: 0x03D1, + thetasymbolgreek: 0x03D1, + thieuthacirclekorean: 0x3279, + thieuthaparenkorean: 0x3219, + thieuthcirclekorean: 0x326B, + thieuthkorean: 0x314C, + thieuthparenkorean: 0x320B, + thirteencircle: 0x246C, + thirteenparen: 0x2480, + thirteenperiod: 0x2494, + thonangmonthothai: 0x0E11, + thook: 0x01AD, + thophuthaothai: 0x0E12, + thorn: 0x00FE, + thothahanthai: 0x0E17, + thothanthai: 0x0E10, + thothongthai: 0x0E18, + thothungthai: 0x0E16, + thousandcyrillic: 0x0482, + thousandsseparatorarabic: 0x066C, + thousandsseparatorpersian: 0x066C, + three: 0x0033, + threearabic: 0x0663, + threebengali: 0x09E9, + threecircle: 0x2462, + threecircleinversesansserif: 0x278C, + threedeva: 0x0969, + threeeighths: 0x215C, + threegujarati: 0x0AE9, + threegurmukhi: 0x0A69, + threehackarabic: 0x0663, + threehangzhou: 0x3023, + threeideographicparen: 0x3222, + threeinferior: 0x2083, + threemonospace: 0xFF13, + threenumeratorbengali: 0x09F6, + threeoldstyle: 0xF733, + threeparen: 0x2476, + threeperiod: 0x248A, + threepersian: 0x06F3, + threequarters: 0x00BE, + threequartersemdash: 0xF6DE, + threeroman: 0x2172, + threesuperior: 0x00B3, + threethai: 0x0E53, + thzsquare: 0x3394, + tihiragana: 0x3061, + tikatakana: 0x30C1, + tikatakanahalfwidth: 0xFF81, + tikeutacirclekorean: 0x3270, + tikeutaparenkorean: 0x3210, + tikeutcirclekorean: 0x3262, + tikeutkorean: 0x3137, + tikeutparenkorean: 0x3202, + tilde: 0x02DC, + tildebelowcmb: 0x0330, + tildecmb: 0x0303, + tildecomb: 0x0303, + tildedoublecmb: 0x0360, + tildeoperator: 0x223C, + tildeoverlaycmb: 0x0334, + tildeverticalcmb: 0x033E, + timescircle: 0x2297, + tipehahebrew: 0x0596, + tipehalefthebrew: 0x0596, + tippigurmukhi: 0x0A70, + titlocyrilliccmb: 0x0483, + tiwnarmenian: 0x057F, + tlinebelow: 0x1E6F, + tmonospace: 0xFF54, + toarmenian: 0x0569, + tohiragana: 0x3068, + tokatakana: 0x30C8, + tokatakanahalfwidth: 0xFF84, + tonebarextrahighmod: 0x02E5, + tonebarextralowmod: 0x02E9, + tonebarhighmod: 0x02E6, + tonebarlowmod: 0x02E8, + tonebarmidmod: 0x02E7, + tonefive: 0x01BD, + tonesix: 0x0185, + tonetwo: 0x01A8, + tonos: 0x0384, + tonsquare: 0x3327, + topatakthai: 0x0E0F, + tortoiseshellbracketleft: 0x3014, + tortoiseshellbracketleftsmall: 0xFE5D, + tortoiseshellbracketleftvertical: 0xFE39, + tortoiseshellbracketright: 0x3015, + tortoiseshellbracketrightsmall: 0xFE5E, + tortoiseshellbracketrightvertical: 0xFE3A, + totaothai: 0x0E15, + tpalatalhook: 0x01AB, + tparen: 0x24AF, + trademark: 0x2122, + trademarksans: 0xF8EA, + trademarkserif: 0xF6DB, + tretroflexhook: 0x0288, + triagdn: 0x25BC, + triaglf: 0x25C4, + triagrt: 0x25BA, + triagup: 0x25B2, + ts: 0x02A6, + tsadi: 0x05E6, + tsadidagesh: 0xFB46, + tsadidageshhebrew: 0xFB46, + tsadihebrew: 0x05E6, + tsecyrillic: 0x0446, + tsere: 0x05B5, + tsere12: 0x05B5, + tsere1e: 0x05B5, + tsere2b: 0x05B5, + tserehebrew: 0x05B5, + tserenarrowhebrew: 0x05B5, + tserequarterhebrew: 0x05B5, + tserewidehebrew: 0x05B5, + tshecyrillic: 0x045B, + tsuperior: 0xF6F3, + ttabengali: 0x099F, + ttadeva: 0x091F, + ttagujarati: 0x0A9F, + ttagurmukhi: 0x0A1F, + tteharabic: 0x0679, + ttehfinalarabic: 0xFB67, + ttehinitialarabic: 0xFB68, + ttehmedialarabic: 0xFB69, + tthabengali: 0x09A0, + tthadeva: 0x0920, + tthagujarati: 0x0AA0, + tthagurmukhi: 0x0A20, + tturned: 0x0287, + tuhiragana: 0x3064, + tukatakana: 0x30C4, + tukatakanahalfwidth: 0xFF82, + tusmallhiragana: 0x3063, + tusmallkatakana: 0x30C3, + tusmallkatakanahalfwidth: 0xFF6F, + twelvecircle: 0x246B, + twelveparen: 0x247F, + twelveperiod: 0x2493, + twelveroman: 0x217B, + twentycircle: 0x2473, + twentyhangzhou: 0x5344, + twentyparen: 0x2487, + twentyperiod: 0x249B, + two: 0x0032, + twoarabic: 0x0662, + twobengali: 0x09E8, + twocircle: 0x2461, + twocircleinversesansserif: 0x278B, + twodeva: 0x0968, + twodotenleader: 0x2025, + twodotleader: 0x2025, + twodotleadervertical: 0xFE30, + twogujarati: 0x0AE8, + twogurmukhi: 0x0A68, + twohackarabic: 0x0662, + twohangzhou: 0x3022, + twoideographicparen: 0x3221, + twoinferior: 0x2082, + twomonospace: 0xFF12, + twonumeratorbengali: 0x09F5, + twooldstyle: 0xF732, + twoparen: 0x2475, + twoperiod: 0x2489, + twopersian: 0x06F2, + tworoman: 0x2171, + twostroke: 0x01BB, + twosuperior: 0x00B2, + twothai: 0x0E52, + twothirds: 0x2154, + u: 0x0075, + uacute: 0x00FA, + ubar: 0x0289, + ubengali: 0x0989, + ubopomofo: 0x3128, + ubreve: 0x016D, + ucaron: 0x01D4, + ucircle: 0x24E4, + ucircumflex: 0x00FB, + ucircumflexbelow: 0x1E77, + ucyrillic: 0x0443, + udattadeva: 0x0951, + udblacute: 0x0171, + udblgrave: 0x0215, + udeva: 0x0909, + udieresis: 0x00FC, + udieresisacute: 0x01D8, + udieresisbelow: 0x1E73, + udieresiscaron: 0x01DA, + udieresiscyrillic: 0x04F1, + udieresisgrave: 0x01DC, + udieresismacron: 0x01D6, + udotbelow: 0x1EE5, + ugrave: 0x00F9, + ugujarati: 0x0A89, + ugurmukhi: 0x0A09, + uhiragana: 0x3046, + uhookabove: 0x1EE7, + uhorn: 0x01B0, + uhornacute: 0x1EE9, + uhorndotbelow: 0x1EF1, + uhorngrave: 0x1EEB, + uhornhookabove: 0x1EED, + uhorntilde: 0x1EEF, + uhungarumlaut: 0x0171, + uhungarumlautcyrillic: 0x04F3, + uinvertedbreve: 0x0217, + ukatakana: 0x30A6, + ukatakanahalfwidth: 0xFF73, + ukcyrillic: 0x0479, + ukorean: 0x315C, + umacron: 0x016B, + umacroncyrillic: 0x04EF, + umacrondieresis: 0x1E7B, + umatragurmukhi: 0x0A41, + umonospace: 0xFF55, + underscore: 0x005F, + underscoredbl: 0x2017, + underscoremonospace: 0xFF3F, + underscorevertical: 0xFE33, + underscorewavy: 0xFE4F, + union: 0x222A, + universal: 0x2200, + uogonek: 0x0173, + uparen: 0x24B0, + upblock: 0x2580, + upperdothebrew: 0x05C4, + upsilon: 0x03C5, + upsilondieresis: 0x03CB, + upsilondieresistonos: 0x03B0, + upsilonlatin: 0x028A, + upsilontonos: 0x03CD, + uptackbelowcmb: 0x031D, + uptackmod: 0x02D4, + uragurmukhi: 0x0A73, + uring: 0x016F, + ushortcyrillic: 0x045E, + usmallhiragana: 0x3045, + usmallkatakana: 0x30A5, + usmallkatakanahalfwidth: 0xFF69, + ustraightcyrillic: 0x04AF, + ustraightstrokecyrillic: 0x04B1, + utilde: 0x0169, + utildeacute: 0x1E79, + utildebelow: 0x1E75, + uubengali: 0x098A, + uudeva: 0x090A, + uugujarati: 0x0A8A, + uugurmukhi: 0x0A0A, + uumatragurmukhi: 0x0A42, + uuvowelsignbengali: 0x09C2, + uuvowelsigndeva: 0x0942, + uuvowelsigngujarati: 0x0AC2, + uvowelsignbengali: 0x09C1, + uvowelsigndeva: 0x0941, + uvowelsigngujarati: 0x0AC1, + v: 0x0076, + vadeva: 0x0935, + vagujarati: 0x0AB5, + vagurmukhi: 0x0A35, + vakatakana: 0x30F7, + vav: 0x05D5, + vavdagesh: 0xFB35, + vavdagesh65: 0xFB35, + vavdageshhebrew: 0xFB35, + vavhebrew: 0x05D5, + vavholam: 0xFB4B, + vavholamhebrew: 0xFB4B, + vavvavhebrew: 0x05F0, + vavyodhebrew: 0x05F1, + vcircle: 0x24E5, + vdotbelow: 0x1E7F, + vecyrillic: 0x0432, + veharabic: 0x06A4, + vehfinalarabic: 0xFB6B, + vehinitialarabic: 0xFB6C, + vehmedialarabic: 0xFB6D, + vekatakana: 0x30F9, + venus: 0x2640, + verticalbar: 0x007C, + verticallineabovecmb: 0x030D, + verticallinebelowcmb: 0x0329, + verticallinelowmod: 0x02CC, + verticallinemod: 0x02C8, + vewarmenian: 0x057E, + vhook: 0x028B, + vikatakana: 0x30F8, + viramabengali: 0x09CD, + viramadeva: 0x094D, + viramagujarati: 0x0ACD, + visargabengali: 0x0983, + visargadeva: 0x0903, + visargagujarati: 0x0A83, + vmonospace: 0xFF56, + voarmenian: 0x0578, + voicediterationhiragana: 0x309E, + voicediterationkatakana: 0x30FE, + voicedmarkkana: 0x309B, + voicedmarkkanahalfwidth: 0xFF9E, + vokatakana: 0x30FA, + vparen: 0x24B1, + vtilde: 0x1E7D, + vturned: 0x028C, + vuhiragana: 0x3094, + vukatakana: 0x30F4, + w: 0x0077, + wacute: 0x1E83, + waekorean: 0x3159, + wahiragana: 0x308F, + wakatakana: 0x30EF, + wakatakanahalfwidth: 0xFF9C, + wakorean: 0x3158, + wasmallhiragana: 0x308E, + wasmallkatakana: 0x30EE, + wattosquare: 0x3357, + wavedash: 0x301C, + wavyunderscorevertical: 0xFE34, + wawarabic: 0x0648, + wawfinalarabic: 0xFEEE, + wawhamzaabovearabic: 0x0624, + wawhamzaabovefinalarabic: 0xFE86, + wbsquare: 0x33DD, + wcircle: 0x24E6, + wcircumflex: 0x0175, + wdieresis: 0x1E85, + wdotaccent: 0x1E87, + wdotbelow: 0x1E89, + wehiragana: 0x3091, + weierstrass: 0x2118, + wekatakana: 0x30F1, + wekorean: 0x315E, + weokorean: 0x315D, + wgrave: 0x1E81, + whitebullet: 0x25E6, + whitecircle: 0x25CB, + whitecircleinverse: 0x25D9, + whitecornerbracketleft: 0x300E, + whitecornerbracketleftvertical: 0xFE43, + whitecornerbracketright: 0x300F, + whitecornerbracketrightvertical: 0xFE44, + whitediamond: 0x25C7, + whitediamondcontainingblacksmalldiamond: 0x25C8, + whitedownpointingsmalltriangle: 0x25BF, + whitedownpointingtriangle: 0x25BD, + whiteleftpointingsmalltriangle: 0x25C3, + whiteleftpointingtriangle: 0x25C1, + whitelenticularbracketleft: 0x3016, + whitelenticularbracketright: 0x3017, + whiterightpointingsmalltriangle: 0x25B9, + whiterightpointingtriangle: 0x25B7, + whitesmallsquare: 0x25AB, + whitesmilingface: 0x263A, + whitesquare: 0x25A1, + whitestar: 0x2606, + whitetelephone: 0x260F, + whitetortoiseshellbracketleft: 0x3018, + whitetortoiseshellbracketright: 0x3019, + whiteuppointingsmalltriangle: 0x25B5, + whiteuppointingtriangle: 0x25B3, + wihiragana: 0x3090, + wikatakana: 0x30F0, + wikorean: 0x315F, + wmonospace: 0xFF57, + wohiragana: 0x3092, + wokatakana: 0x30F2, + wokatakanahalfwidth: 0xFF66, + won: 0x20A9, + wonmonospace: 0xFFE6, + wowaenthai: 0x0E27, + wparen: 0x24B2, + wring: 0x1E98, + wsuperior: 0x02B7, + wturned: 0x028D, + wynn: 0x01BF, + x: 0x0078, + xabovecmb: 0x033D, + xbopomofo: 0x3112, + xcircle: 0x24E7, + xdieresis: 0x1E8D, + xdotaccent: 0x1E8B, + xeharmenian: 0x056D, + xi: 0x03BE, + xmonospace: 0xFF58, + xparen: 0x24B3, + xsuperior: 0x02E3, + y: 0x0079, + yaadosquare: 0x334E, + yabengali: 0x09AF, + yacute: 0x00FD, + yadeva: 0x092F, + yaekorean: 0x3152, + yagujarati: 0x0AAF, + yagurmukhi: 0x0A2F, + yahiragana: 0x3084, + yakatakana: 0x30E4, + yakatakanahalfwidth: 0xFF94, + yakorean: 0x3151, + yamakkanthai: 0x0E4E, + yasmallhiragana: 0x3083, + yasmallkatakana: 0x30E3, + yasmallkatakanahalfwidth: 0xFF6C, + yatcyrillic: 0x0463, + ycircle: 0x24E8, + ycircumflex: 0x0177, + ydieresis: 0x00FF, + ydotaccent: 0x1E8F, + ydotbelow: 0x1EF5, + yeharabic: 0x064A, + yehbarreearabic: 0x06D2, + yehbarreefinalarabic: 0xFBAF, + yehfinalarabic: 0xFEF2, + yehhamzaabovearabic: 0x0626, + yehhamzaabovefinalarabic: 0xFE8A, + yehhamzaaboveinitialarabic: 0xFE8B, + yehhamzaabovemedialarabic: 0xFE8C, + yehinitialarabic: 0xFEF3, + yehmedialarabic: 0xFEF4, + yehmeeminitialarabic: 0xFCDD, + yehmeemisolatedarabic: 0xFC58, + yehnoonfinalarabic: 0xFC94, + yehthreedotsbelowarabic: 0x06D1, + yekorean: 0x3156, + yen: 0x00A5, + yenmonospace: 0xFFE5, + yeokorean: 0x3155, + yeorinhieuhkorean: 0x3186, + yerahbenyomohebrew: 0x05AA, + yerahbenyomolefthebrew: 0x05AA, + yericyrillic: 0x044B, + yerudieresiscyrillic: 0x04F9, + yesieungkorean: 0x3181, + yesieungpansioskorean: 0x3183, + yesieungsioskorean: 0x3182, + yetivhebrew: 0x059A, + ygrave: 0x1EF3, + yhook: 0x01B4, + yhookabove: 0x1EF7, + yiarmenian: 0x0575, + yicyrillic: 0x0457, + yikorean: 0x3162, + yinyang: 0x262F, + yiwnarmenian: 0x0582, + ymonospace: 0xFF59, + yod: 0x05D9, + yoddagesh: 0xFB39, + yoddageshhebrew: 0xFB39, + yodhebrew: 0x05D9, + yodyodhebrew: 0x05F2, + yodyodpatahhebrew: 0xFB1F, + yohiragana: 0x3088, + yoikorean: 0x3189, + yokatakana: 0x30E8, + yokatakanahalfwidth: 0xFF96, + yokorean: 0x315B, + yosmallhiragana: 0x3087, + yosmallkatakana: 0x30E7, + yosmallkatakanahalfwidth: 0xFF6E, + yotgreek: 0x03F3, + yoyaekorean: 0x3188, + yoyakorean: 0x3187, + yoyakthai: 0x0E22, + yoyingthai: 0x0E0D, + yparen: 0x24B4, + ypogegrammeni: 0x037A, + ypogegrammenigreekcmb: 0x0345, + yr: 0x01A6, + yring: 0x1E99, + ysuperior: 0x02B8, + ytilde: 0x1EF9, + yturned: 0x028E, + yuhiragana: 0x3086, + yuikorean: 0x318C, + yukatakana: 0x30E6, + yukatakanahalfwidth: 0xFF95, + yukorean: 0x3160, + yusbigcyrillic: 0x046B, + yusbigiotifiedcyrillic: 0x046D, + yuslittlecyrillic: 0x0467, + yuslittleiotifiedcyrillic: 0x0469, + yusmallhiragana: 0x3085, + yusmallkatakana: 0x30E5, + yusmallkatakanahalfwidth: 0xFF6D, + yuyekorean: 0x318B, + yuyeokorean: 0x318A, + yyabengali: 0x09DF, + yyadeva: 0x095F, + z: 0x007A, + zaarmenian: 0x0566, + zacute: 0x017A, + zadeva: 0x095B, + zagurmukhi: 0x0A5B, + zaharabic: 0x0638, + zahfinalarabic: 0xFEC6, + zahinitialarabic: 0xFEC7, + zahiragana: 0x3056, + zahmedialarabic: 0xFEC8, + zainarabic: 0x0632, + zainfinalarabic: 0xFEB0, + zakatakana: 0x30B6, + zaqefgadolhebrew: 0x0595, + zaqefqatanhebrew: 0x0594, + zarqahebrew: 0x0598, + zayin: 0x05D6, + zayindagesh: 0xFB36, + zayindageshhebrew: 0xFB36, + zayinhebrew: 0x05D6, + zbopomofo: 0x3117, + zcaron: 0x017E, + zcircle: 0x24E9, + zcircumflex: 0x1E91, + zcurl: 0x0291, + zdot: 0x017C, + zdotaccent: 0x017C, + zdotbelow: 0x1E93, + zecyrillic: 0x0437, + zedescendercyrillic: 0x0499, + zedieresiscyrillic: 0x04DF, + zehiragana: 0x305C, + zekatakana: 0x30BC, + zero: 0x0030, + zeroarabic: 0x0660, + zerobengali: 0x09E6, + zerodeva: 0x0966, + zerogujarati: 0x0AE6, + zerogurmukhi: 0x0A66, + zerohackarabic: 0x0660, + zeroinferior: 0x2080, + zeromonospace: 0xFF10, + zerooldstyle: 0xF730, + zeropersian: 0x06F0, + zerosuperior: 0x2070, + zerothai: 0x0E50, + zerowidthjoiner: 0xFEFF, + zerowidthnonjoiner: 0x200C, + zerowidthspace: 0x200B, + zeta: 0x03B6, + zhbopomofo: 0x3113, + zhearmenian: 0x056A, + zhebrevecyrillic: 0x04C2, + zhecyrillic: 0x0436, + zhedescendercyrillic: 0x0497, + zhedieresiscyrillic: 0x04DD, + zihiragana: 0x3058, + zikatakana: 0x30B8, + zinorhebrew: 0x05AE, + zlinebelow: 0x1E95, + zmonospace: 0xFF5A, + zohiragana: 0x305E, + zokatakana: 0x30BE, + zparen: 0x24B5, + zretroflexhook: 0x0290, + zstroke: 0x01B6, + zuhiragana: 0x305A, + zukatakana: 0x30BA, + '.notdef': 0x0000 +}; + +var DingbatsGlyphsUnicode = { + space: 0x0020, + a1: 0x2701, + a2: 0x2702, + a202: 0x2703, + a3: 0x2704, + a4: 0x260E, + a5: 0x2706, + a119: 0x2707, + a118: 0x2708, + a117: 0x2709, + a11: 0x261B, + a12: 0x261E, + a13: 0x270C, + a14: 0x270D, + a15: 0x270E, + a16: 0x270F, + a105: 0x2710, + a17: 0x2711, + a18: 0x2712, + a19: 0x2713, + a20: 0x2714, + a21: 0x2715, + a22: 0x2716, + a23: 0x2717, + a24: 0x2718, + a25: 0x2719, + a26: 0x271A, + a27: 0x271B, + a28: 0x271C, + a6: 0x271D, + a7: 0x271E, + a8: 0x271F, + a9: 0x2720, + a10: 0x2721, + a29: 0x2722, + a30: 0x2723, + a31: 0x2724, + a32: 0x2725, + a33: 0x2726, + a34: 0x2727, + a35: 0x2605, + a36: 0x2729, + a37: 0x272A, + a38: 0x272B, + a39: 0x272C, + a40: 0x272D, + a41: 0x272E, + a42: 0x272F, + a43: 0x2730, + a44: 0x2731, + a45: 0x2732, + a46: 0x2733, + a47: 0x2734, + a48: 0x2735, + a49: 0x2736, + a50: 0x2737, + a51: 0x2738, + a52: 0x2739, + a53: 0x273A, + a54: 0x273B, + a55: 0x273C, + a56: 0x273D, + a57: 0x273E, + a58: 0x273F, + a59: 0x2740, + a60: 0x2741, + a61: 0x2742, + a62: 0x2743, + a63: 0x2744, + a64: 0x2745, + a65: 0x2746, + a66: 0x2747, + a67: 0x2748, + a68: 0x2749, + a69: 0x274A, + a70: 0x274B, + a71: 0x25CF, + a72: 0x274D, + a73: 0x25A0, + a74: 0x274F, + a203: 0x2750, + a75: 0x2751, + a204: 0x2752, + a76: 0x25B2, + a77: 0x25BC, + a78: 0x25C6, + a79: 0x2756, + a81: 0x25D7, + a82: 0x2758, + a83: 0x2759, + a84: 0x275A, + a97: 0x275B, + a98: 0x275C, + a99: 0x275D, + a100: 0x275E, + a101: 0x2761, + a102: 0x2762, + a103: 0x2763, + a104: 0x2764, + a106: 0x2765, + a107: 0x2766, + a108: 0x2767, + a112: 0x2663, + a111: 0x2666, + a110: 0x2665, + a109: 0x2660, + a120: 0x2460, + a121: 0x2461, + a122: 0x2462, + a123: 0x2463, + a124: 0x2464, + a125: 0x2465, + a126: 0x2466, + a127: 0x2467, + a128: 0x2468, + a129: 0x2469, + a130: 0x2776, + a131: 0x2777, + a132: 0x2778, + a133: 0x2779, + a134: 0x277A, + a135: 0x277B, + a136: 0x277C, + a137: 0x277D, + a138: 0x277E, + a139: 0x277F, + a140: 0x2780, + a141: 0x2781, + a142: 0x2782, + a143: 0x2783, + a144: 0x2784, + a145: 0x2785, + a146: 0x2786, + a147: 0x2787, + a148: 0x2788, + a149: 0x2789, + a150: 0x278A, + a151: 0x278B, + a152: 0x278C, + a153: 0x278D, + a154: 0x278E, + a155: 0x278F, + a156: 0x2790, + a157: 0x2791, + a158: 0x2792, + a159: 0x2793, + a160: 0x2794, + a161: 0x2192, + a163: 0x2194, + a164: 0x2195, + a196: 0x2798, + a165: 0x2799, + a192: 0x279A, + a166: 0x279B, + a167: 0x279C, + a168: 0x279D, + a169: 0x279E, + a170: 0x279F, + a171: 0x27A0, + a172: 0x27A1, + a173: 0x27A2, + a162: 0x27A3, + a174: 0x27A4, + a175: 0x27A5, + a176: 0x27A6, + a177: 0x27A7, + a178: 0x27A8, + a179: 0x27A9, + a193: 0x27AA, + a180: 0x27AB, + a199: 0x27AC, + a181: 0x27AD, + a200: 0x27AE, + a182: 0x27AF, + a201: 0x27B1, + a183: 0x27B2, + a184: 0x27B3, + a197: 0x27B4, + a185: 0x27B5, + a194: 0x27B6, + a198: 0x27B7, + a186: 0x27B8, + a195: 0x27B9, + a187: 0x27BA, + a188: 0x27BB, + a189: 0x27BC, + a190: 0x27BD, + a191: 0x27BE, + a89: 0x2768, // 0xF8D7 + a90: 0x2769, // 0xF8D8 + a93: 0x276A, // 0xF8D9 + a94: 0x276B, // 0xF8DA + a91: 0x276C, // 0xF8DB + a92: 0x276D, // 0xF8DC + a205: 0x276E, // 0xF8DD + a85: 0x276F, // 0xF8DE + a206: 0x2770, // 0xF8DF + a86: 0x2771, // 0xF8E0 + a87: 0x2772, // 0xF8E1 + a88: 0x2773, // 0xF8E2 + a95: 0x2774, // 0xF8E3 + a96: 0x2775, // 0xF8E4 + '.notdef': 0x0000 +}; + + +var PDFImage = (function PDFImageClosure() { + /** + * Decode the image in the main thread if it supported. Resovles the promise + * when the image data is ready. + */ + function handleImageData(handler, xref, res, image) { + if (image instanceof JpegStream && image.isNativelyDecodable(xref, res)) { + // For natively supported jpegs send them to the main thread for decoding. + var dict = image.dict; + var colorSpace = dict.get('ColorSpace', 'CS'); + colorSpace = ColorSpace.parse(colorSpace, xref, res); + var numComps = colorSpace.numComps; + var decodePromise = handler.sendWithPromise('JpegDecode', + [image.getIR(), numComps]); + return decodePromise.then(function (message) { + var data = message.data; + return new Stream(data, 0, data.length, image.dict); + }); + } else { + return Promise.resolve(image); + } + } + + /** + * Decode and clamp a value. The formula is different from the spec because we + * don't decode to float range [0,1], we decode it in the [0,max] range. + */ + function decodeAndClamp(value, addend, coefficient, max) { + value = addend + value * coefficient; + // Clamp the value to the range + return (value < 0 ? 0 : (value > max ? max : value)); + } + + function PDFImage(xref, res, image, inline, smask, mask, isMask) { + this.image = image; + var dict = image.dict; + if (dict.has('Filter')) { + var filter = dict.get('Filter').name; + if (filter === 'JPXDecode') { + var jpxImage = new JpxImage(); + jpxImage.parseImageProperties(image.stream); + image.stream.reset(); + image.bitsPerComponent = jpxImage.bitsPerComponent; + image.numComps = jpxImage.componentsCount; + } else if (filter === 'JBIG2Decode') { + image.bitsPerComponent = 1; + image.numComps = 1; + } + } + // TODO cache rendered images? + + this.width = dict.get('Width', 'W'); + this.height = dict.get('Height', 'H'); + + if (this.width < 1 || this.height < 1) { + error('Invalid image width: ' + this.width + ' or height: ' + + this.height); + } + + this.interpolate = dict.get('Interpolate', 'I') || false; + this.imageMask = dict.get('ImageMask', 'IM') || false; + this.matte = dict.get('Matte') || false; + + var bitsPerComponent = image.bitsPerComponent; + if (!bitsPerComponent) { + bitsPerComponent = dict.get('BitsPerComponent', 'BPC'); + if (!bitsPerComponent) { + if (this.imageMask) { + bitsPerComponent = 1; + } else { + error('Bits per component missing in image: ' + this.imageMask); + } + } + } + this.bpc = bitsPerComponent; + + if (!this.imageMask) { + var colorSpace = dict.get('ColorSpace', 'CS'); + if (!colorSpace) { + info('JPX images (which do not require color spaces)'); + switch (image.numComps) { + case 1: + colorSpace = Name.get('DeviceGray'); + break; + case 3: + colorSpace = Name.get('DeviceRGB'); + break; + case 4: + colorSpace = Name.get('DeviceCMYK'); + break; + default: + error('JPX images with ' + this.numComps + + ' color components not supported.'); + } + } + this.colorSpace = ColorSpace.parse(colorSpace, xref, res); + this.numComps = this.colorSpace.numComps; + } + + this.decode = dict.get('Decode', 'D'); + this.needsDecode = false; + if (this.decode && + ((this.colorSpace && !this.colorSpace.isDefaultDecode(this.decode)) || + (isMask && !ColorSpace.isDefaultDecode(this.decode, 1)))) { + this.needsDecode = true; + // Do some preprocessing to avoid more math. + var max = (1 << bitsPerComponent) - 1; + this.decodeCoefficients = []; + this.decodeAddends = []; + for (var i = 0, j = 0; i < this.decode.length; i += 2, ++j) { + var dmin = this.decode[i]; + var dmax = this.decode[i + 1]; + this.decodeCoefficients[j] = dmax - dmin; + this.decodeAddends[j] = max * dmin; + } + } + + if (smask) { + this.smask = new PDFImage(xref, res, smask, false); + } else if (mask) { + if (isStream(mask)) { + this.mask = new PDFImage(xref, res, mask, false, null, null, true); + } else { + // Color key mask (just an array). + this.mask = mask; + } + } + } + /** + * Handles processing of image data and returns the Promise that is resolved + * with a PDFImage when the image is ready to be used. + */ + PDFImage.buildImage = function PDFImage_buildImage(handler, xref, + res, image, inline) { + var imagePromise = handleImageData(handler, xref, res, image); + var smaskPromise; + var maskPromise; + + var smask = image.dict.get('SMask'); + var mask = image.dict.get('Mask'); + + if (smask) { + smaskPromise = handleImageData(handler, xref, res, smask); + maskPromise = Promise.resolve(null); + } else { + smaskPromise = Promise.resolve(null); + if (mask) { + if (isStream(mask)) { + maskPromise = handleImageData(handler, xref, res, mask); + } else if (isArray(mask)) { + maskPromise = Promise.resolve(mask); + } else { + warn('Unsupported mask format.'); + maskPromise = Promise.resolve(null); + } + } else { + maskPromise = Promise.resolve(null); + } + } + return Promise.all([imagePromise, smaskPromise, maskPromise]).then( + function(results) { + var imageData = results[0]; + var smaskData = results[1]; + var maskData = results[2]; + return new PDFImage(xref, res, imageData, inline, smaskData, maskData); + }); + }; + + /** + * Resize an image using the nearest neighbor algorithm. Currently only + * supports one and three component images. + * @param {TypedArray} pixels The original image with one component. + * @param {Number} bpc Number of bits per component. + * @param {Number} components Number of color components, 1 or 3 is supported. + * @param {Number} w1 Original width. + * @param {Number} h1 Original height. + * @param {Number} w2 New width. + * @param {Number} h2 New height. + * @param {TypedArray} dest (Optional) The destination buffer. + * @param {Number} alpha01 (Optional) Size reserved for the alpha channel. + * @return {TypedArray} Resized image data. + */ + PDFImage.resize = function PDFImage_resize(pixels, bpc, components, + w1, h1, w2, h2, dest, alpha01) { + + if (components !== 1 && components !== 3) { + error('Unsupported component count for resizing.'); + } + + var length = w2 * h2 * components; + var temp = dest ? dest : (bpc <= 8 ? new Uint8Array(length) : + (bpc <= 16 ? new Uint16Array(length) : new Uint32Array(length))); + var xRatio = w1 / w2; + var yRatio = h1 / h2; + var i, j, py, newIndex = 0, oldIndex; + var xScaled = new Uint16Array(w2); + var w1Scanline = w1 * components; + if (alpha01 !== 1) { + alpha01 = 0; + } + + for (j = 0; j < w2; j++) { + xScaled[j] = Math.floor(j * xRatio) * components; + } + + if (components === 1) { + for (i = 0; i < h2; i++) { + py = Math.floor(i * yRatio) * w1Scanline; + for (j = 0; j < w2; j++) { + oldIndex = py + xScaled[j]; + temp[newIndex++] = pixels[oldIndex]; + } + } + } else if (components === 3) { + for (i = 0; i < h2; i++) { + py = Math.floor(i * yRatio) * w1Scanline; + for (j = 0; j < w2; j++) { + oldIndex = py + xScaled[j]; + temp[newIndex++] = pixels[oldIndex++]; + temp[newIndex++] = pixels[oldIndex++]; + temp[newIndex++] = pixels[oldIndex++]; + newIndex += alpha01; + } + } + } + return temp; + }; + + PDFImage.createMask = + function PDFImage_createMask(imgArray, width, height, + imageIsFromDecodeStream, inverseDecode) { + + // |imgArray| might not contain full data for every pixel of the mask, so + // we need to distinguish between |computedLength| and |actualLength|. + // In particular, if inverseDecode is true, then the array we return must + // have a length of |computedLength|. + + var computedLength = ((width + 7) >> 3) * height; + var actualLength = imgArray.byteLength; + var haveFullData = computedLength === actualLength; + var data, i; + + if (imageIsFromDecodeStream && (!inverseDecode || haveFullData)) { + // imgArray came from a DecodeStream and its data is in an appropriate + // form, so we can just transfer it. + data = imgArray; + } else if (!inverseDecode) { + data = new Uint8Array(actualLength); + data.set(imgArray); + } else { + data = new Uint8Array(computedLength); + data.set(imgArray); + for (i = actualLength; i < computedLength; i++) { + data[i] = 0xff; + } + } + + // If necessary, invert the original mask data (but not any extra we might + // have added above). It's safe to modify the array -- whether it's the + // original or a copy, we're about to transfer it anyway, so nothing else + // in this thread can be relying on its contents. + if (inverseDecode) { + for (i = 0; i < actualLength; i++) { + data[i] = ~data[i]; + } + } + + return {data: data, width: width, height: height}; + }; + + PDFImage.prototype = { + get drawWidth() { + return Math.max(this.width, + this.smask && this.smask.width || 0, + this.mask && this.mask.width || 0); + }, + + get drawHeight() { + return Math.max(this.height, + this.smask && this.smask.height || 0, + this.mask && this.mask.height || 0); + }, + + decodeBuffer: function PDFImage_decodeBuffer(buffer) { + var bpc = this.bpc; + var numComps = this.numComps; + + var decodeAddends = this.decodeAddends; + var decodeCoefficients = this.decodeCoefficients; + var max = (1 << bpc) - 1; + var i, ii; + + if (bpc === 1) { + // If the buffer needed decode that means it just needs to be inverted. + for (i = 0, ii = buffer.length; i < ii; i++) { + buffer[i] = +!(buffer[i]); + } + return; + } + var index = 0; + for (i = 0, ii = this.width * this.height; i < ii; i++) { + for (var j = 0; j < numComps; j++) { + buffer[index] = decodeAndClamp(buffer[index], decodeAddends[j], + decodeCoefficients[j], max); + index++; + } + } + }, + + getComponents: function PDFImage_getComponents(buffer) { + var bpc = this.bpc; + + // This image doesn't require any extra work. + if (bpc === 8) { + return buffer; + } + + var width = this.width; + var height = this.height; + var numComps = this.numComps; + + var length = width * height * numComps; + var bufferPos = 0; + var output = (bpc <= 8 ? new Uint8Array(length) : + (bpc <= 16 ? new Uint16Array(length) : new Uint32Array(length))); + var rowComps = width * numComps; + + var max = (1 << bpc) - 1; + var i = 0, ii, buf; + + if (bpc === 1) { + // Optimization for reading 1 bpc images. + var mask, loop1End, loop2End; + for (var j = 0; j < height; j++) { + loop1End = i + (rowComps & ~7); + loop2End = i + rowComps; + + // unroll loop for all full bytes + while (i < loop1End) { + buf = buffer[bufferPos++]; + output[i] = (buf >> 7) & 1; + output[i + 1] = (buf >> 6) & 1; + output[i + 2] = (buf >> 5) & 1; + output[i + 3] = (buf >> 4) & 1; + output[i + 4] = (buf >> 3) & 1; + output[i + 5] = (buf >> 2) & 1; + output[i + 6] = (buf >> 1) & 1; + output[i + 7] = buf & 1; + i += 8; + } + + // handle remaing bits + if (i < loop2End) { + buf = buffer[bufferPos++]; + mask = 128; + while (i < loop2End) { + output[i++] = +!!(buf & mask); + mask >>= 1; + } + } + } + } else { + // The general case that handles all other bpc values. + var bits = 0; + buf = 0; + for (i = 0, ii = length; i < ii; ++i) { + if (i % rowComps === 0) { + buf = 0; + bits = 0; + } + + while (bits < bpc) { + buf = (buf << 8) | buffer[bufferPos++]; + bits += 8; + } + + var remainingBits = bits - bpc; + var value = buf >> remainingBits; + output[i] = (value < 0 ? 0 : (value > max ? max : value)); + buf = buf & ((1 << remainingBits) - 1); + bits = remainingBits; + } + } + return output; + }, + + fillOpacity: function PDFImage_fillOpacity(rgbaBuf, width, height, + actualHeight, image) { + var smask = this.smask; + var mask = this.mask; + var alphaBuf, sw, sh, i, ii, j; + + if (smask) { + sw = smask.width; + sh = smask.height; + alphaBuf = new Uint8Array(sw * sh); + smask.fillGrayBuffer(alphaBuf); + if (sw !== width || sh !== height) { + alphaBuf = PDFImage.resize(alphaBuf, smask.bpc, 1, sw, sh, width, + height); + } + } else if (mask) { + if (mask instanceof PDFImage) { + sw = mask.width; + sh = mask.height; + alphaBuf = new Uint8Array(sw * sh); + mask.numComps = 1; + mask.fillGrayBuffer(alphaBuf); + + // Need to invert values in rgbaBuf + for (i = 0, ii = sw * sh; i < ii; ++i) { + alphaBuf[i] = 255 - alphaBuf[i]; + } + + if (sw !== width || sh !== height) { + alphaBuf = PDFImage.resize(alphaBuf, mask.bpc, 1, sw, sh, width, + height); + } + } else if (isArray(mask)) { + // Color key mask: if any of the compontents are outside the range + // then they should be painted. + alphaBuf = new Uint8Array(width * height); + var numComps = this.numComps; + for (i = 0, ii = width * height; i < ii; ++i) { + var opacity = 0; + var imageOffset = i * numComps; + for (j = 0; j < numComps; ++j) { + var color = image[imageOffset + j]; + var maskOffset = j * 2; + if (color < mask[maskOffset] || color > mask[maskOffset + 1]) { + opacity = 255; + break; + } + } + alphaBuf[i] = opacity; + } + } else { + error('Unknown mask format.'); + } + } + + if (alphaBuf) { + for (i = 0, j = 3, ii = width * actualHeight; i < ii; ++i, j += 4) { + rgbaBuf[j] = alphaBuf[i]; + } + } else { + // No mask. + for (i = 0, j = 3, ii = width * actualHeight; i < ii; ++i, j += 4) { + rgbaBuf[j] = 255; + } + } + }, + + undoPreblend: function PDFImage_undoPreblend(buffer, width, height) { + var matte = this.smask && this.smask.matte; + if (!matte) { + return; + } + var matteRgb = this.colorSpace.getRgb(matte, 0); + var matteR = matteRgb[0]; + var matteG = matteRgb[1]; + var matteB = matteRgb[2]; + var length = width * height * 4; + var r, g, b; + for (var i = 0; i < length; i += 4) { + var alpha = buffer[i + 3]; + if (alpha === 0) { + // according formula we have to get Infinity in all components + // making it white (typical paper color) should be okay + buffer[i] = 255; + buffer[i + 1] = 255; + buffer[i + 2] = 255; + continue; + } + var k = 255 / alpha; + r = (buffer[i] - matteR) * k + matteR; + g = (buffer[i + 1] - matteG) * k + matteG; + b = (buffer[i + 2] - matteB) * k + matteB; + buffer[i] = r <= 0 ? 0 : r >= 255 ? 255 : r | 0; + buffer[i + 1] = g <= 0 ? 0 : g >= 255 ? 255 : g | 0; + buffer[i + 2] = b <= 0 ? 0 : b >= 255 ? 255 : b | 0; + } + }, + + createImageData: function PDFImage_createImageData(forceRGBA) { + var drawWidth = this.drawWidth; + var drawHeight = this.drawHeight; + var imgData = { // other fields are filled in below + width: drawWidth, + height: drawHeight + }; + + var numComps = this.numComps; + var originalWidth = this.width; + var originalHeight = this.height; + var bpc = this.bpc; + + // Rows start at byte boundary. + var rowBytes = (originalWidth * numComps * bpc + 7) >> 3; + var imgArray; + + if (!forceRGBA) { + // If it is a 1-bit-per-pixel grayscale (i.e. black-and-white) image + // without any complications, we pass a same-sized copy to the main + // thread rather than expanding by 32x to RGBA form. This saves *lots* + // of memory for many scanned documents. It's also much faster. + // + // Similarly, if it is a 24-bit-per pixel RGB image without any + // complications, we avoid expanding by 1.333x to RGBA form. + var kind; + if (this.colorSpace.name === 'DeviceGray' && bpc === 1) { + kind = ImageKind.GRAYSCALE_1BPP; + } else if (this.colorSpace.name === 'DeviceRGB' && bpc === 8 && + !this.needsDecode) { + kind = ImageKind.RGB_24BPP; + } + if (kind && !this.smask && !this.mask && + drawWidth === originalWidth && drawHeight === originalHeight) { + imgData.kind = kind; + + imgArray = this.getImageBytes(originalHeight * rowBytes); + // If imgArray came from a DecodeStream, we're safe to transfer it + // (and thus neuter it) because it will constitute the entire + // DecodeStream's data. But if it came from a Stream, we need to + // copy it because it'll only be a portion of the Stream's data, and + // the rest will be read later on. + if (this.image instanceof DecodeStream) { + imgData.data = imgArray; + } else { + var newArray = new Uint8Array(imgArray.length); + newArray.set(imgArray); + imgData.data = newArray; + } + if (this.needsDecode) { + // Invert the buffer (which must be grayscale if we reached here). + assert(kind === ImageKind.GRAYSCALE_1BPP); + var buffer = imgData.data; + for (var i = 0, ii = buffer.length; i < ii; i++) { + buffer[i] ^= 0xff; + } + } + return imgData; + } + if (this.image instanceof JpegStream && !this.smask && !this.mask) { + imgData.kind = ImageKind.RGB_24BPP; + imgData.data = this.getImageBytes(originalHeight * rowBytes, + drawWidth, drawHeight, true); + return imgData; + } + } + + imgArray = this.getImageBytes(originalHeight * rowBytes); + // imgArray can be incomplete (e.g. after CCITT fax encoding). + var actualHeight = 0 | (imgArray.length / rowBytes * + drawHeight / originalHeight); + + var comps = this.getComponents(imgArray); + + // If opacity data is present, use RGBA_32BPP form. Otherwise, use the + // more compact RGB_24BPP form if allowable. + var alpha01, maybeUndoPreblend; + if (!forceRGBA && !this.smask && !this.mask) { + imgData.kind = ImageKind.RGB_24BPP; + imgData.data = new Uint8Array(drawWidth * drawHeight * 3); + alpha01 = 0; + maybeUndoPreblend = false; + } else { + imgData.kind = ImageKind.RGBA_32BPP; + imgData.data = new Uint8Array(drawWidth * drawHeight * 4); + alpha01 = 1; + maybeUndoPreblend = true; + + // Color key masking (opacity) must be performed before decoding. + this.fillOpacity(imgData.data, drawWidth, drawHeight, actualHeight, + comps); + } + + if (this.needsDecode) { + this.decodeBuffer(comps); + } + this.colorSpace.fillRgb(imgData.data, originalWidth, originalHeight, + drawWidth, drawHeight, actualHeight, bpc, comps, + alpha01); + if (maybeUndoPreblend) { + this.undoPreblend(imgData.data, drawWidth, actualHeight); + } + + return imgData; + }, + + fillGrayBuffer: function PDFImage_fillGrayBuffer(buffer) { + var numComps = this.numComps; + if (numComps !== 1) { + error('Reading gray scale from a color image: ' + numComps); + } + + var width = this.width; + var height = this.height; + var bpc = this.bpc; + + // rows start at byte boundary + var rowBytes = (width * numComps * bpc + 7) >> 3; + var imgArray = this.getImageBytes(height * rowBytes); + + var comps = this.getComponents(imgArray); + var i, length; + + if (bpc === 1) { + // inline decoding (= inversion) for 1 bpc images + length = width * height; + if (this.needsDecode) { + // invert and scale to {0, 255} + for (i = 0; i < length; ++i) { + buffer[i] = (comps[i] - 1) & 255; + } + } else { + // scale to {0, 255} + for (i = 0; i < length; ++i) { + buffer[i] = (-comps[i]) & 255; + } + } + return; + } + + if (this.needsDecode) { + this.decodeBuffer(comps); + } + length = width * height; + // we aren't using a colorspace so we need to scale the value + var scale = 255 / ((1 << bpc) - 1); + for (i = 0; i < length; ++i) { + buffer[i] = (scale * comps[i]) | 0; + } + }, + + getImageBytes: function PDFImage_getImageBytes(length, + drawWidth, drawHeight, + forceRGB) { + this.image.reset(); + this.image.drawWidth = drawWidth || this.width; + this.image.drawHeight = drawHeight || this.height; + this.image.forceRGB = !!forceRGB; + return this.image.getBytes(length); + } + }; + return PDFImage; +})(); + + +// The Metrics object contains glyph widths (in glyph space units). +// As per PDF spec, for most fonts (Type 3 being an exception) a glyph +// space unit corresponds to 1/1000th of text space unit. +var Metrics = { + 'Courier': 600, + 'Courier-Bold': 600, + 'Courier-BoldOblique': 600, + 'Courier-Oblique': 600, + 'Helvetica' : { + 'space': 278, + 'exclam': 278, + 'quotedbl': 355, + 'numbersign': 556, + 'dollar': 556, + 'percent': 889, + 'ampersand': 667, + 'quoteright': 222, + 'parenleft': 333, + 'parenright': 333, + 'asterisk': 389, + 'plus': 584, + 'comma': 278, + 'hyphen': 333, + 'period': 278, + 'slash': 278, + 'zero': 556, + 'one': 556, + 'two': 556, + 'three': 556, + 'four': 556, + 'five': 556, + 'six': 556, + 'seven': 556, + 'eight': 556, + 'nine': 556, + 'colon': 278, + 'semicolon': 278, + 'less': 584, + 'equal': 584, + 'greater': 584, + 'question': 556, + 'at': 1015, + 'A': 667, + 'B': 667, + 'C': 722, + 'D': 722, + 'E': 667, + 'F': 611, + 'G': 778, + 'H': 722, + 'I': 278, + 'J': 500, + 'K': 667, + 'L': 556, + 'M': 833, + 'N': 722, + 'O': 778, + 'P': 667, + 'Q': 778, + 'R': 722, + 'S': 667, + 'T': 611, + 'U': 722, + 'V': 667, + 'W': 944, + 'X': 667, + 'Y': 667, + 'Z': 611, + 'bracketleft': 278, + 'backslash': 278, + 'bracketright': 278, + 'asciicircum': 469, + 'underscore': 556, + 'quoteleft': 222, + 'a': 556, + 'b': 556, + 'c': 500, + 'd': 556, + 'e': 556, + 'f': 278, + 'g': 556, + 'h': 556, + 'i': 222, + 'j': 222, + 'k': 500, + 'l': 222, + 'm': 833, + 'n': 556, + 'o': 556, + 'p': 556, + 'q': 556, + 'r': 333, + 's': 500, + 't': 278, + 'u': 556, + 'v': 500, + 'w': 722, + 'x': 500, + 'y': 500, + 'z': 500, + 'braceleft': 334, + 'bar': 260, + 'braceright': 334, + 'asciitilde': 584, + 'exclamdown': 333, + 'cent': 556, + 'sterling': 556, + 'fraction': 167, + 'yen': 556, + 'florin': 556, + 'section': 556, + 'currency': 556, + 'quotesingle': 191, + 'quotedblleft': 333, + 'guillemotleft': 556, + 'guilsinglleft': 333, + 'guilsinglright': 333, + 'fi': 500, + 'fl': 500, + 'endash': 556, + 'dagger': 556, + 'daggerdbl': 556, + 'periodcentered': 278, + 'paragraph': 537, + 'bullet': 350, + 'quotesinglbase': 222, + 'quotedblbase': 333, + 'quotedblright': 333, + 'guillemotright': 556, + 'ellipsis': 1000, + 'perthousand': 1000, + 'questiondown': 611, + 'grave': 333, + 'acute': 333, + 'circumflex': 333, + 'tilde': 333, + 'macron': 333, + 'breve': 333, + 'dotaccent': 333, + 'dieresis': 333, + 'ring': 333, + 'cedilla': 333, + 'hungarumlaut': 333, + 'ogonek': 333, + 'caron': 333, + 'emdash': 1000, + 'AE': 1000, + 'ordfeminine': 370, + 'Lslash': 556, + 'Oslash': 778, + 'OE': 1000, + 'ordmasculine': 365, + 'ae': 889, + 'dotlessi': 278, + 'lslash': 222, + 'oslash': 611, + 'oe': 944, + 'germandbls': 611, + 'Idieresis': 278, + 'eacute': 556, + 'abreve': 556, + 'uhungarumlaut': 556, + 'ecaron': 556, + 'Ydieresis': 667, + 'divide': 584, + 'Yacute': 667, + 'Acircumflex': 667, + 'aacute': 556, + 'Ucircumflex': 722, + 'yacute': 500, + 'scommaaccent': 500, + 'ecircumflex': 556, + 'Uring': 722, + 'Udieresis': 722, + 'aogonek': 556, + 'Uacute': 722, + 'uogonek': 556, + 'Edieresis': 667, + 'Dcroat': 722, + 'commaaccent': 250, + 'copyright': 737, + 'Emacron': 667, + 'ccaron': 500, + 'aring': 556, + 'Ncommaaccent': 722, + 'lacute': 222, + 'agrave': 556, + 'Tcommaaccent': 611, + 'Cacute': 722, + 'atilde': 556, + 'Edotaccent': 667, + 'scaron': 500, + 'scedilla': 500, + 'iacute': 278, + 'lozenge': 471, + 'Rcaron': 722, + 'Gcommaaccent': 778, + 'ucircumflex': 556, + 'acircumflex': 556, + 'Amacron': 667, + 'rcaron': 333, + 'ccedilla': 500, + 'Zdotaccent': 611, + 'Thorn': 667, + 'Omacron': 778, + 'Racute': 722, + 'Sacute': 667, + 'dcaron': 643, + 'Umacron': 722, + 'uring': 556, + 'threesuperior': 333, + 'Ograve': 778, + 'Agrave': 667, + 'Abreve': 667, + 'multiply': 584, + 'uacute': 556, + 'Tcaron': 611, + 'partialdiff': 476, + 'ydieresis': 500, + 'Nacute': 722, + 'icircumflex': 278, + 'Ecircumflex': 667, + 'adieresis': 556, + 'edieresis': 556, + 'cacute': 500, + 'nacute': 556, + 'umacron': 556, + 'Ncaron': 722, + 'Iacute': 278, + 'plusminus': 584, + 'brokenbar': 260, + 'registered': 737, + 'Gbreve': 778, + 'Idotaccent': 278, + 'summation': 600, + 'Egrave': 667, + 'racute': 333, + 'omacron': 556, + 'Zacute': 611, + 'Zcaron': 611, + 'greaterequal': 549, + 'Eth': 722, + 'Ccedilla': 722, + 'lcommaaccent': 222, + 'tcaron': 317, + 'eogonek': 556, + 'Uogonek': 722, + 'Aacute': 667, + 'Adieresis': 667, + 'egrave': 556, + 'zacute': 500, + 'iogonek': 222, + 'Oacute': 778, + 'oacute': 556, + 'amacron': 556, + 'sacute': 500, + 'idieresis': 278, + 'Ocircumflex': 778, + 'Ugrave': 722, + 'Delta': 612, + 'thorn': 556, + 'twosuperior': 333, + 'Odieresis': 778, + 'mu': 556, + 'igrave': 278, + 'ohungarumlaut': 556, + 'Eogonek': 667, + 'dcroat': 556, + 'threequarters': 834, + 'Scedilla': 667, + 'lcaron': 299, + 'Kcommaaccent': 667, + 'Lacute': 556, + 'trademark': 1000, + 'edotaccent': 556, + 'Igrave': 278, + 'Imacron': 278, + 'Lcaron': 556, + 'onehalf': 834, + 'lessequal': 549, + 'ocircumflex': 556, + 'ntilde': 556, + 'Uhungarumlaut': 722, + 'Eacute': 667, + 'emacron': 556, + 'gbreve': 556, + 'onequarter': 834, + 'Scaron': 667, + 'Scommaaccent': 667, + 'Ohungarumlaut': 778, + 'degree': 400, + 'ograve': 556, + 'Ccaron': 722, + 'ugrave': 556, + 'radical': 453, + 'Dcaron': 722, + 'rcommaaccent': 333, + 'Ntilde': 722, + 'otilde': 556, + 'Rcommaaccent': 722, + 'Lcommaaccent': 556, + 'Atilde': 667, + 'Aogonek': 667, + 'Aring': 667, + 'Otilde': 778, + 'zdotaccent': 500, + 'Ecaron': 667, + 'Iogonek': 278, + 'kcommaaccent': 500, + 'minus': 584, + 'Icircumflex': 278, + 'ncaron': 556, + 'tcommaaccent': 278, + 'logicalnot': 584, + 'odieresis': 556, + 'udieresis': 556, + 'notequal': 549, + 'gcommaaccent': 556, + 'eth': 556, + 'zcaron': 500, + 'ncommaaccent': 556, + 'onesuperior': 333, + 'imacron': 278, + 'Euro': 556 + }, + 'Helvetica-Bold': { + 'space': 278, + 'exclam': 333, + 'quotedbl': 474, + 'numbersign': 556, + 'dollar': 556, + 'percent': 889, + 'ampersand': 722, + 'quoteright': 278, + 'parenleft': 333, + 'parenright': 333, + 'asterisk': 389, + 'plus': 584, + 'comma': 278, + 'hyphen': 333, + 'period': 278, + 'slash': 278, + 'zero': 556, + 'one': 556, + 'two': 556, + 'three': 556, + 'four': 556, + 'five': 556, + 'six': 556, + 'seven': 556, + 'eight': 556, + 'nine': 556, + 'colon': 333, + 'semicolon': 333, + 'less': 584, + 'equal': 584, + 'greater': 584, + 'question': 611, + 'at': 975, + 'A': 722, + 'B': 722, + 'C': 722, + 'D': 722, + 'E': 667, + 'F': 611, + 'G': 778, + 'H': 722, + 'I': 278, + 'J': 556, + 'K': 722, + 'L': 611, + 'M': 833, + 'N': 722, + 'O': 778, + 'P': 667, + 'Q': 778, + 'R': 722, + 'S': 667, + 'T': 611, + 'U': 722, + 'V': 667, + 'W': 944, + 'X': 667, + 'Y': 667, + 'Z': 611, + 'bracketleft': 333, + 'backslash': 278, + 'bracketright': 333, + 'asciicircum': 584, + 'underscore': 556, + 'quoteleft': 278, + 'a': 556, + 'b': 611, + 'c': 556, + 'd': 611, + 'e': 556, + 'f': 333, + 'g': 611, + 'h': 611, + 'i': 278, + 'j': 278, + 'k': 556, + 'l': 278, + 'm': 889, + 'n': 611, + 'o': 611, + 'p': 611, + 'q': 611, + 'r': 389, + 's': 556, + 't': 333, + 'u': 611, + 'v': 556, + 'w': 778, + 'x': 556, + 'y': 556, + 'z': 500, + 'braceleft': 389, + 'bar': 280, + 'braceright': 389, + 'asciitilde': 584, + 'exclamdown': 333, + 'cent': 556, + 'sterling': 556, + 'fraction': 167, + 'yen': 556, + 'florin': 556, + 'section': 556, + 'currency': 556, + 'quotesingle': 238, + 'quotedblleft': 500, + 'guillemotleft': 556, + 'guilsinglleft': 333, + 'guilsinglright': 333, + 'fi': 611, + 'fl': 611, + 'endash': 556, + 'dagger': 556, + 'daggerdbl': 556, + 'periodcentered': 278, + 'paragraph': 556, + 'bullet': 350, + 'quotesinglbase': 278, + 'quotedblbase': 500, + 'quotedblright': 500, + 'guillemotright': 556, + 'ellipsis': 1000, + 'perthousand': 1000, + 'questiondown': 611, + 'grave': 333, + 'acute': 333, + 'circumflex': 333, + 'tilde': 333, + 'macron': 333, + 'breve': 333, + 'dotaccent': 333, + 'dieresis': 333, + 'ring': 333, + 'cedilla': 333, + 'hungarumlaut': 333, + 'ogonek': 333, + 'caron': 333, + 'emdash': 1000, + 'AE': 1000, + 'ordfeminine': 370, + 'Lslash': 611, + 'Oslash': 778, + 'OE': 1000, + 'ordmasculine': 365, + 'ae': 889, + 'dotlessi': 278, + 'lslash': 278, + 'oslash': 611, + 'oe': 944, + 'germandbls': 611, + 'Idieresis': 278, + 'eacute': 556, + 'abreve': 556, + 'uhungarumlaut': 611, + 'ecaron': 556, + 'Ydieresis': 667, + 'divide': 584, + 'Yacute': 667, + 'Acircumflex': 722, + 'aacute': 556, + 'Ucircumflex': 722, + 'yacute': 556, + 'scommaaccent': 556, + 'ecircumflex': 556, + 'Uring': 722, + 'Udieresis': 722, + 'aogonek': 556, + 'Uacute': 722, + 'uogonek': 611, + 'Edieresis': 667, + 'Dcroat': 722, + 'commaaccent': 250, + 'copyright': 737, + 'Emacron': 667, + 'ccaron': 556, + 'aring': 556, + 'Ncommaaccent': 722, + 'lacute': 278, + 'agrave': 556, + 'Tcommaaccent': 611, + 'Cacute': 722, + 'atilde': 556, + 'Edotaccent': 667, + 'scaron': 556, + 'scedilla': 556, + 'iacute': 278, + 'lozenge': 494, + 'Rcaron': 722, + 'Gcommaaccent': 778, + 'ucircumflex': 611, + 'acircumflex': 556, + 'Amacron': 722, + 'rcaron': 389, + 'ccedilla': 556, + 'Zdotaccent': 611, + 'Thorn': 667, + 'Omacron': 778, + 'Racute': 722, + 'Sacute': 667, + 'dcaron': 743, + 'Umacron': 722, + 'uring': 611, + 'threesuperior': 333, + 'Ograve': 778, + 'Agrave': 722, + 'Abreve': 722, + 'multiply': 584, + 'uacute': 611, + 'Tcaron': 611, + 'partialdiff': 494, + 'ydieresis': 556, + 'Nacute': 722, + 'icircumflex': 278, + 'Ecircumflex': 667, + 'adieresis': 556, + 'edieresis': 556, + 'cacute': 556, + 'nacute': 611, + 'umacron': 611, + 'Ncaron': 722, + 'Iacute': 278, + 'plusminus': 584, + 'brokenbar': 280, + 'registered': 737, + 'Gbreve': 778, + 'Idotaccent': 278, + 'summation': 600, + 'Egrave': 667, + 'racute': 389, + 'omacron': 611, + 'Zacute': 611, + 'Zcaron': 611, + 'greaterequal': 549, + 'Eth': 722, + 'Ccedilla': 722, + 'lcommaaccent': 278, + 'tcaron': 389, + 'eogonek': 556, + 'Uogonek': 722, + 'Aacute': 722, + 'Adieresis': 722, + 'egrave': 556, + 'zacute': 500, + 'iogonek': 278, + 'Oacute': 778, + 'oacute': 611, + 'amacron': 556, + 'sacute': 556, + 'idieresis': 278, + 'Ocircumflex': 778, + 'Ugrave': 722, + 'Delta': 612, + 'thorn': 611, + 'twosuperior': 333, + 'Odieresis': 778, + 'mu': 611, + 'igrave': 278, + 'ohungarumlaut': 611, + 'Eogonek': 667, + 'dcroat': 611, + 'threequarters': 834, + 'Scedilla': 667, + 'lcaron': 400, + 'Kcommaaccent': 722, + 'Lacute': 611, + 'trademark': 1000, + 'edotaccent': 556, + 'Igrave': 278, + 'Imacron': 278, + 'Lcaron': 611, + 'onehalf': 834, + 'lessequal': 549, + 'ocircumflex': 611, + 'ntilde': 611, + 'Uhungarumlaut': 722, + 'Eacute': 667, + 'emacron': 556, + 'gbreve': 611, + 'onequarter': 834, + 'Scaron': 667, + 'Scommaaccent': 667, + 'Ohungarumlaut': 778, + 'degree': 400, + 'ograve': 611, + 'Ccaron': 722, + 'ugrave': 611, + 'radical': 549, + 'Dcaron': 722, + 'rcommaaccent': 389, + 'Ntilde': 722, + 'otilde': 611, + 'Rcommaaccent': 722, + 'Lcommaaccent': 611, + 'Atilde': 722, + 'Aogonek': 722, + 'Aring': 722, + 'Otilde': 778, + 'zdotaccent': 500, + 'Ecaron': 667, + 'Iogonek': 278, + 'kcommaaccent': 556, + 'minus': 584, + 'Icircumflex': 278, + 'ncaron': 611, + 'tcommaaccent': 333, + 'logicalnot': 584, + 'odieresis': 611, + 'udieresis': 611, + 'notequal': 549, + 'gcommaaccent': 611, + 'eth': 611, + 'zcaron': 500, + 'ncommaaccent': 611, + 'onesuperior': 333, + 'imacron': 278, + 'Euro': 556 + }, + 'Helvetica-BoldOblique': { + 'space': 278, + 'exclam': 333, + 'quotedbl': 474, + 'numbersign': 556, + 'dollar': 556, + 'percent': 889, + 'ampersand': 722, + 'quoteright': 278, + 'parenleft': 333, + 'parenright': 333, + 'asterisk': 389, + 'plus': 584, + 'comma': 278, + 'hyphen': 333, + 'period': 278, + 'slash': 278, + 'zero': 556, + 'one': 556, + 'two': 556, + 'three': 556, + 'four': 556, + 'five': 556, + 'six': 556, + 'seven': 556, + 'eight': 556, + 'nine': 556, + 'colon': 333, + 'semicolon': 333, + 'less': 584, + 'equal': 584, + 'greater': 584, + 'question': 611, + 'at': 975, + 'A': 722, + 'B': 722, + 'C': 722, + 'D': 722, + 'E': 667, + 'F': 611, + 'G': 778, + 'H': 722, + 'I': 278, + 'J': 556, + 'K': 722, + 'L': 611, + 'M': 833, + 'N': 722, + 'O': 778, + 'P': 667, + 'Q': 778, + 'R': 722, + 'S': 667, + 'T': 611, + 'U': 722, + 'V': 667, + 'W': 944, + 'X': 667, + 'Y': 667, + 'Z': 611, + 'bracketleft': 333, + 'backslash': 278, + 'bracketright': 333, + 'asciicircum': 584, + 'underscore': 556, + 'quoteleft': 278, + 'a': 556, + 'b': 611, + 'c': 556, + 'd': 611, + 'e': 556, + 'f': 333, + 'g': 611, + 'h': 611, + 'i': 278, + 'j': 278, + 'k': 556, + 'l': 278, + 'm': 889, + 'n': 611, + 'o': 611, + 'p': 611, + 'q': 611, + 'r': 389, + 's': 556, + 't': 333, + 'u': 611, + 'v': 556, + 'w': 778, + 'x': 556, + 'y': 556, + 'z': 500, + 'braceleft': 389, + 'bar': 280, + 'braceright': 389, + 'asciitilde': 584, + 'exclamdown': 333, + 'cent': 556, + 'sterling': 556, + 'fraction': 167, + 'yen': 556, + 'florin': 556, + 'section': 556, + 'currency': 556, + 'quotesingle': 238, + 'quotedblleft': 500, + 'guillemotleft': 556, + 'guilsinglleft': 333, + 'guilsinglright': 333, + 'fi': 611, + 'fl': 611, + 'endash': 556, + 'dagger': 556, + 'daggerdbl': 556, + 'periodcentered': 278, + 'paragraph': 556, + 'bullet': 350, + 'quotesinglbase': 278, + 'quotedblbase': 500, + 'quotedblright': 500, + 'guillemotright': 556, + 'ellipsis': 1000, + 'perthousand': 1000, + 'questiondown': 611, + 'grave': 333, + 'acute': 333, + 'circumflex': 333, + 'tilde': 333, + 'macron': 333, + 'breve': 333, + 'dotaccent': 333, + 'dieresis': 333, + 'ring': 333, + 'cedilla': 333, + 'hungarumlaut': 333, + 'ogonek': 333, + 'caron': 333, + 'emdash': 1000, + 'AE': 1000, + 'ordfeminine': 370, + 'Lslash': 611, + 'Oslash': 778, + 'OE': 1000, + 'ordmasculine': 365, + 'ae': 889, + 'dotlessi': 278, + 'lslash': 278, + 'oslash': 611, + 'oe': 944, + 'germandbls': 611, + 'Idieresis': 278, + 'eacute': 556, + 'abreve': 556, + 'uhungarumlaut': 611, + 'ecaron': 556, + 'Ydieresis': 667, + 'divide': 584, + 'Yacute': 667, + 'Acircumflex': 722, + 'aacute': 556, + 'Ucircumflex': 722, + 'yacute': 556, + 'scommaaccent': 556, + 'ecircumflex': 556, + 'Uring': 722, + 'Udieresis': 722, + 'aogonek': 556, + 'Uacute': 722, + 'uogonek': 611, + 'Edieresis': 667, + 'Dcroat': 722, + 'commaaccent': 250, + 'copyright': 737, + 'Emacron': 667, + 'ccaron': 556, + 'aring': 556, + 'Ncommaaccent': 722, + 'lacute': 278, + 'agrave': 556, + 'Tcommaaccent': 611, + 'Cacute': 722, + 'atilde': 556, + 'Edotaccent': 667, + 'scaron': 556, + 'scedilla': 556, + 'iacute': 278, + 'lozenge': 494, + 'Rcaron': 722, + 'Gcommaaccent': 778, + 'ucircumflex': 611, + 'acircumflex': 556, + 'Amacron': 722, + 'rcaron': 389, + 'ccedilla': 556, + 'Zdotaccent': 611, + 'Thorn': 667, + 'Omacron': 778, + 'Racute': 722, + 'Sacute': 667, + 'dcaron': 743, + 'Umacron': 722, + 'uring': 611, + 'threesuperior': 333, + 'Ograve': 778, + 'Agrave': 722, + 'Abreve': 722, + 'multiply': 584, + 'uacute': 611, + 'Tcaron': 611, + 'partialdiff': 494, + 'ydieresis': 556, + 'Nacute': 722, + 'icircumflex': 278, + 'Ecircumflex': 667, + 'adieresis': 556, + 'edieresis': 556, + 'cacute': 556, + 'nacute': 611, + 'umacron': 611, + 'Ncaron': 722, + 'Iacute': 278, + 'plusminus': 584, + 'brokenbar': 280, + 'registered': 737, + 'Gbreve': 778, + 'Idotaccent': 278, + 'summation': 600, + 'Egrave': 667, + 'racute': 389, + 'omacron': 611, + 'Zacute': 611, + 'Zcaron': 611, + 'greaterequal': 549, + 'Eth': 722, + 'Ccedilla': 722, + 'lcommaaccent': 278, + 'tcaron': 389, + 'eogonek': 556, + 'Uogonek': 722, + 'Aacute': 722, + 'Adieresis': 722, + 'egrave': 556, + 'zacute': 500, + 'iogonek': 278, + 'Oacute': 778, + 'oacute': 611, + 'amacron': 556, + 'sacute': 556, + 'idieresis': 278, + 'Ocircumflex': 778, + 'Ugrave': 722, + 'Delta': 612, + 'thorn': 611, + 'twosuperior': 333, + 'Odieresis': 778, + 'mu': 611, + 'igrave': 278, + 'ohungarumlaut': 611, + 'Eogonek': 667, + 'dcroat': 611, + 'threequarters': 834, + 'Scedilla': 667, + 'lcaron': 400, + 'Kcommaaccent': 722, + 'Lacute': 611, + 'trademark': 1000, + 'edotaccent': 556, + 'Igrave': 278, + 'Imacron': 278, + 'Lcaron': 611, + 'onehalf': 834, + 'lessequal': 549, + 'ocircumflex': 611, + 'ntilde': 611, + 'Uhungarumlaut': 722, + 'Eacute': 667, + 'emacron': 556, + 'gbreve': 611, + 'onequarter': 834, + 'Scaron': 667, + 'Scommaaccent': 667, + 'Ohungarumlaut': 778, + 'degree': 400, + 'ograve': 611, + 'Ccaron': 722, + 'ugrave': 611, + 'radical': 549, + 'Dcaron': 722, + 'rcommaaccent': 389, + 'Ntilde': 722, + 'otilde': 611, + 'Rcommaaccent': 722, + 'Lcommaaccent': 611, + 'Atilde': 722, + 'Aogonek': 722, + 'Aring': 722, + 'Otilde': 778, + 'zdotaccent': 500, + 'Ecaron': 667, + 'Iogonek': 278, + 'kcommaaccent': 556, + 'minus': 584, + 'Icircumflex': 278, + 'ncaron': 611, + 'tcommaaccent': 333, + 'logicalnot': 584, + 'odieresis': 611, + 'udieresis': 611, + 'notequal': 549, + 'gcommaaccent': 611, + 'eth': 611, + 'zcaron': 500, + 'ncommaaccent': 611, + 'onesuperior': 333, + 'imacron': 278, + 'Euro': 556 + }, + 'Helvetica-Oblique' : { + 'space': 278, + 'exclam': 278, + 'quotedbl': 355, + 'numbersign': 556, + 'dollar': 556, + 'percent': 889, + 'ampersand': 667, + 'quoteright': 222, + 'parenleft': 333, + 'parenright': 333, + 'asterisk': 389, + 'plus': 584, + 'comma': 278, + 'hyphen': 333, + 'period': 278, + 'slash': 278, + 'zero': 556, + 'one': 556, + 'two': 556, + 'three': 556, + 'four': 556, + 'five': 556, + 'six': 556, + 'seven': 556, + 'eight': 556, + 'nine': 556, + 'colon': 278, + 'semicolon': 278, + 'less': 584, + 'equal': 584, + 'greater': 584, + 'question': 556, + 'at': 1015, + 'A': 667, + 'B': 667, + 'C': 722, + 'D': 722, + 'E': 667, + 'F': 611, + 'G': 778, + 'H': 722, + 'I': 278, + 'J': 500, + 'K': 667, + 'L': 556, + 'M': 833, + 'N': 722, + 'O': 778, + 'P': 667, + 'Q': 778, + 'R': 722, + 'S': 667, + 'T': 611, + 'U': 722, + 'V': 667, + 'W': 944, + 'X': 667, + 'Y': 667, + 'Z': 611, + 'bracketleft': 278, + 'backslash': 278, + 'bracketright': 278, + 'asciicircum': 469, + 'underscore': 556, + 'quoteleft': 222, + 'a': 556, + 'b': 556, + 'c': 500, + 'd': 556, + 'e': 556, + 'f': 278, + 'g': 556, + 'h': 556, + 'i': 222, + 'j': 222, + 'k': 500, + 'l': 222, + 'm': 833, + 'n': 556, + 'o': 556, + 'p': 556, + 'q': 556, + 'r': 333, + 's': 500, + 't': 278, + 'u': 556, + 'v': 500, + 'w': 722, + 'x': 500, + 'y': 500, + 'z': 500, + 'braceleft': 334, + 'bar': 260, + 'braceright': 334, + 'asciitilde': 584, + 'exclamdown': 333, + 'cent': 556, + 'sterling': 556, + 'fraction': 167, + 'yen': 556, + 'florin': 556, + 'section': 556, + 'currency': 556, + 'quotesingle': 191, + 'quotedblleft': 333, + 'guillemotleft': 556, + 'guilsinglleft': 333, + 'guilsinglright': 333, + 'fi': 500, + 'fl': 500, + 'endash': 556, + 'dagger': 556, + 'daggerdbl': 556, + 'periodcentered': 278, + 'paragraph': 537, + 'bullet': 350, + 'quotesinglbase': 222, + 'quotedblbase': 333, + 'quotedblright': 333, + 'guillemotright': 556, + 'ellipsis': 1000, + 'perthousand': 1000, + 'questiondown': 611, + 'grave': 333, + 'acute': 333, + 'circumflex': 333, + 'tilde': 333, + 'macron': 333, + 'breve': 333, + 'dotaccent': 333, + 'dieresis': 333, + 'ring': 333, + 'cedilla': 333, + 'hungarumlaut': 333, + 'ogonek': 333, + 'caron': 333, + 'emdash': 1000, + 'AE': 1000, + 'ordfeminine': 370, + 'Lslash': 556, + 'Oslash': 778, + 'OE': 1000, + 'ordmasculine': 365, + 'ae': 889, + 'dotlessi': 278, + 'lslash': 222, + 'oslash': 611, + 'oe': 944, + 'germandbls': 611, + 'Idieresis': 278, + 'eacute': 556, + 'abreve': 556, + 'uhungarumlaut': 556, + 'ecaron': 556, + 'Ydieresis': 667, + 'divide': 584, + 'Yacute': 667, + 'Acircumflex': 667, + 'aacute': 556, + 'Ucircumflex': 722, + 'yacute': 500, + 'scommaaccent': 500, + 'ecircumflex': 556, + 'Uring': 722, + 'Udieresis': 722, + 'aogonek': 556, + 'Uacute': 722, + 'uogonek': 556, + 'Edieresis': 667, + 'Dcroat': 722, + 'commaaccent': 250, + 'copyright': 737, + 'Emacron': 667, + 'ccaron': 500, + 'aring': 556, + 'Ncommaaccent': 722, + 'lacute': 222, + 'agrave': 556, + 'Tcommaaccent': 611, + 'Cacute': 722, + 'atilde': 556, + 'Edotaccent': 667, + 'scaron': 500, + 'scedilla': 500, + 'iacute': 278, + 'lozenge': 471, + 'Rcaron': 722, + 'Gcommaaccent': 778, + 'ucircumflex': 556, + 'acircumflex': 556, + 'Amacron': 667, + 'rcaron': 333, + 'ccedilla': 500, + 'Zdotaccent': 611, + 'Thorn': 667, + 'Omacron': 778, + 'Racute': 722, + 'Sacute': 667, + 'dcaron': 643, + 'Umacron': 722, + 'uring': 556, + 'threesuperior': 333, + 'Ograve': 778, + 'Agrave': 667, + 'Abreve': 667, + 'multiply': 584, + 'uacute': 556, + 'Tcaron': 611, + 'partialdiff': 476, + 'ydieresis': 500, + 'Nacute': 722, + 'icircumflex': 278, + 'Ecircumflex': 667, + 'adieresis': 556, + 'edieresis': 556, + 'cacute': 500, + 'nacute': 556, + 'umacron': 556, + 'Ncaron': 722, + 'Iacute': 278, + 'plusminus': 584, + 'brokenbar': 260, + 'registered': 737, + 'Gbreve': 778, + 'Idotaccent': 278, + 'summation': 600, + 'Egrave': 667, + 'racute': 333, + 'omacron': 556, + 'Zacute': 611, + 'Zcaron': 611, + 'greaterequal': 549, + 'Eth': 722, + 'Ccedilla': 722, + 'lcommaaccent': 222, + 'tcaron': 317, + 'eogonek': 556, + 'Uogonek': 722, + 'Aacute': 667, + 'Adieresis': 667, + 'egrave': 556, + 'zacute': 500, + 'iogonek': 222, + 'Oacute': 778, + 'oacute': 556, + 'amacron': 556, + 'sacute': 500, + 'idieresis': 278, + 'Ocircumflex': 778, + 'Ugrave': 722, + 'Delta': 612, + 'thorn': 556, + 'twosuperior': 333, + 'Odieresis': 778, + 'mu': 556, + 'igrave': 278, + 'ohungarumlaut': 556, + 'Eogonek': 667, + 'dcroat': 556, + 'threequarters': 834, + 'Scedilla': 667, + 'lcaron': 299, + 'Kcommaaccent': 667, + 'Lacute': 556, + 'trademark': 1000, + 'edotaccent': 556, + 'Igrave': 278, + 'Imacron': 278, + 'Lcaron': 556, + 'onehalf': 834, + 'lessequal': 549, + 'ocircumflex': 556, + 'ntilde': 556, + 'Uhungarumlaut': 722, + 'Eacute': 667, + 'emacron': 556, + 'gbreve': 556, + 'onequarter': 834, + 'Scaron': 667, + 'Scommaaccent': 667, + 'Ohungarumlaut': 778, + 'degree': 400, + 'ograve': 556, + 'Ccaron': 722, + 'ugrave': 556, + 'radical': 453, + 'Dcaron': 722, + 'rcommaaccent': 333, + 'Ntilde': 722, + 'otilde': 556, + 'Rcommaaccent': 722, + 'Lcommaaccent': 556, + 'Atilde': 667, + 'Aogonek': 667, + 'Aring': 667, + 'Otilde': 778, + 'zdotaccent': 500, + 'Ecaron': 667, + 'Iogonek': 278, + 'kcommaaccent': 500, + 'minus': 584, + 'Icircumflex': 278, + 'ncaron': 556, + 'tcommaaccent': 278, + 'logicalnot': 584, + 'odieresis': 556, + 'udieresis': 556, + 'notequal': 549, + 'gcommaaccent': 556, + 'eth': 556, + 'zcaron': 500, + 'ncommaaccent': 556, + 'onesuperior': 333, + 'imacron': 278, + 'Euro': 556 + }, + 'Symbol': { + 'space': 250, + 'exclam': 333, + 'universal': 713, + 'numbersign': 500, + 'existential': 549, + 'percent': 833, + 'ampersand': 778, + 'suchthat': 439, + 'parenleft': 333, + 'parenright': 333, + 'asteriskmath': 500, + 'plus': 549, + 'comma': 250, + 'minus': 549, + 'period': 250, + 'slash': 278, + 'zero': 500, + 'one': 500, + 'two': 500, + 'three': 500, + 'four': 500, + 'five': 500, + 'six': 500, + 'seven': 500, + 'eight': 500, + 'nine': 500, + 'colon': 278, + 'semicolon': 278, + 'less': 549, + 'equal': 549, + 'greater': 549, + 'question': 444, + 'congruent': 549, + 'Alpha': 722, + 'Beta': 667, + 'Chi': 722, + 'Delta': 612, + 'Epsilon': 611, + 'Phi': 763, + 'Gamma': 603, + 'Eta': 722, + 'Iota': 333, + 'theta1': 631, + 'Kappa': 722, + 'Lambda': 686, + 'Mu': 889, + 'Nu': 722, + 'Omicron': 722, + 'Pi': 768, + 'Theta': 741, + 'Rho': 556, + 'Sigma': 592, + 'Tau': 611, + 'Upsilon': 690, + 'sigma1': 439, + 'Omega': 768, + 'Xi': 645, + 'Psi': 795, + 'Zeta': 611, + 'bracketleft': 333, + 'therefore': 863, + 'bracketright': 333, + 'perpendicular': 658, + 'underscore': 500, + 'radicalex': 500, + 'alpha': 631, + 'beta': 549, + 'chi': 549, + 'delta': 494, + 'epsilon': 439, + 'phi': 521, + 'gamma': 411, + 'eta': 603, + 'iota': 329, + 'phi1': 603, + 'kappa': 549, + 'lambda': 549, + 'mu': 576, + 'nu': 521, + 'omicron': 549, + 'pi': 549, + 'theta': 521, + 'rho': 549, + 'sigma': 603, + 'tau': 439, + 'upsilon': 576, + 'omega1': 713, + 'omega': 686, + 'xi': 493, + 'psi': 686, + 'zeta': 494, + 'braceleft': 480, + 'bar': 200, + 'braceright': 480, + 'similar': 549, + 'Euro': 750, + 'Upsilon1': 620, + 'minute': 247, + 'lessequal': 549, + 'fraction': 167, + 'infinity': 713, + 'florin': 500, + 'club': 753, + 'diamond': 753, + 'heart': 753, + 'spade': 753, + 'arrowboth': 1042, + 'arrowleft': 987, + 'arrowup': 603, + 'arrowright': 987, + 'arrowdown': 603, + 'degree': 400, + 'plusminus': 549, + 'second': 411, + 'greaterequal': 549, + 'multiply': 549, + 'proportional': 713, + 'partialdiff': 494, + 'bullet': 460, + 'divide': 549, + 'notequal': 549, + 'equivalence': 549, + 'approxequal': 549, + 'ellipsis': 1000, + 'arrowvertex': 603, + 'arrowhorizex': 1000, + 'carriagereturn': 658, + 'aleph': 823, + 'Ifraktur': 686, + 'Rfraktur': 795, + 'weierstrass': 987, + 'circlemultiply': 768, + 'circleplus': 768, + 'emptyset': 823, + 'intersection': 768, + 'union': 768, + 'propersuperset': 713, + 'reflexsuperset': 713, + 'notsubset': 713, + 'propersubset': 713, + 'reflexsubset': 713, + 'element': 713, + 'notelement': 713, + 'angle': 768, + 'gradient': 713, + 'registerserif': 790, + 'copyrightserif': 790, + 'trademarkserif': 890, + 'product': 823, + 'radical': 549, + 'dotmath': 250, + 'logicalnot': 713, + 'logicaland': 603, + 'logicalor': 603, + 'arrowdblboth': 1042, + 'arrowdblleft': 987, + 'arrowdblup': 603, + 'arrowdblright': 987, + 'arrowdbldown': 603, + 'lozenge': 494, + 'angleleft': 329, + 'registersans': 790, + 'copyrightsans': 790, + 'trademarksans': 786, + 'summation': 713, + 'parenlefttp': 384, + 'parenleftex': 384, + 'parenleftbt': 384, + 'bracketlefttp': 384, + 'bracketleftex': 384, + 'bracketleftbt': 384, + 'bracelefttp': 494, + 'braceleftmid': 494, + 'braceleftbt': 494, + 'braceex': 494, + 'angleright': 329, + 'integral': 274, + 'integraltp': 686, + 'integralex': 686, + 'integralbt': 686, + 'parenrighttp': 384, + 'parenrightex': 384, + 'parenrightbt': 384, + 'bracketrighttp': 384, + 'bracketrightex': 384, + 'bracketrightbt': 384, + 'bracerighttp': 494, + 'bracerightmid': 494, + 'bracerightbt': 494, + 'apple': 790 + }, + 'Times-Roman': { + 'space': 250, + 'exclam': 333, + 'quotedbl': 408, + 'numbersign': 500, + 'dollar': 500, + 'percent': 833, + 'ampersand': 778, + 'quoteright': 333, + 'parenleft': 333, + 'parenright': 333, + 'asterisk': 500, + 'plus': 564, + 'comma': 250, + 'hyphen': 333, + 'period': 250, + 'slash': 278, + 'zero': 500, + 'one': 500, + 'two': 500, + 'three': 500, + 'four': 500, + 'five': 500, + 'six': 500, + 'seven': 500, + 'eight': 500, + 'nine': 500, + 'colon': 278, + 'semicolon': 278, + 'less': 564, + 'equal': 564, + 'greater': 564, + 'question': 444, + 'at': 921, + 'A': 722, + 'B': 667, + 'C': 667, + 'D': 722, + 'E': 611, + 'F': 556, + 'G': 722, + 'H': 722, + 'I': 333, + 'J': 389, + 'K': 722, + 'L': 611, + 'M': 889, + 'N': 722, + 'O': 722, + 'P': 556, + 'Q': 722, + 'R': 667, + 'S': 556, + 'T': 611, + 'U': 722, + 'V': 722, + 'W': 944, + 'X': 722, + 'Y': 722, + 'Z': 611, + 'bracketleft': 333, + 'backslash': 278, + 'bracketright': 333, + 'asciicircum': 469, + 'underscore': 500, + 'quoteleft': 333, + 'a': 444, + 'b': 500, + 'c': 444, + 'd': 500, + 'e': 444, + 'f': 333, + 'g': 500, + 'h': 500, + 'i': 278, + 'j': 278, + 'k': 500, + 'l': 278, + 'm': 778, + 'n': 500, + 'o': 500, + 'p': 500, + 'q': 500, + 'r': 333, + 's': 389, + 't': 278, + 'u': 500, + 'v': 500, + 'w': 722, + 'x': 500, + 'y': 500, + 'z': 444, + 'braceleft': 480, + 'bar': 200, + 'braceright': 480, + 'asciitilde': 541, + 'exclamdown': 333, + 'cent': 500, + 'sterling': 500, + 'fraction': 167, + 'yen': 500, + 'florin': 500, + 'section': 500, + 'currency': 500, + 'quotesingle': 180, + 'quotedblleft': 444, + 'guillemotleft': 500, + 'guilsinglleft': 333, + 'guilsinglright': 333, + 'fi': 556, + 'fl': 556, + 'endash': 500, + 'dagger': 500, + 'daggerdbl': 500, + 'periodcentered': 250, + 'paragraph': 453, + 'bullet': 350, + 'quotesinglbase': 333, + 'quotedblbase': 444, + 'quotedblright': 444, + 'guillemotright': 500, + 'ellipsis': 1000, + 'perthousand': 1000, + 'questiondown': 444, + 'grave': 333, + 'acute': 333, + 'circumflex': 333, + 'tilde': 333, + 'macron': 333, + 'breve': 333, + 'dotaccent': 333, + 'dieresis': 333, + 'ring': 333, + 'cedilla': 333, + 'hungarumlaut': 333, + 'ogonek': 333, + 'caron': 333, + 'emdash': 1000, + 'AE': 889, + 'ordfeminine': 276, + 'Lslash': 611, + 'Oslash': 722, + 'OE': 889, + 'ordmasculine': 310, + 'ae': 667, + 'dotlessi': 278, + 'lslash': 278, + 'oslash': 500, + 'oe': 722, + 'germandbls': 500, + 'Idieresis': 333, + 'eacute': 444, + 'abreve': 444, + 'uhungarumlaut': 500, + 'ecaron': 444, + 'Ydieresis': 722, + 'divide': 564, + 'Yacute': 722, + 'Acircumflex': 722, + 'aacute': 444, + 'Ucircumflex': 722, + 'yacute': 500, + 'scommaaccent': 389, + 'ecircumflex': 444, + 'Uring': 722, + 'Udieresis': 722, + 'aogonek': 444, + 'Uacute': 722, + 'uogonek': 500, + 'Edieresis': 611, + 'Dcroat': 722, + 'commaaccent': 250, + 'copyright': 760, + 'Emacron': 611, + 'ccaron': 444, + 'aring': 444, + 'Ncommaaccent': 722, + 'lacute': 278, + 'agrave': 444, + 'Tcommaaccent': 611, + 'Cacute': 667, + 'atilde': 444, + 'Edotaccent': 611, + 'scaron': 389, + 'scedilla': 389, + 'iacute': 278, + 'lozenge': 471, + 'Rcaron': 667, + 'Gcommaaccent': 722, + 'ucircumflex': 500, + 'acircumflex': 444, + 'Amacron': 722, + 'rcaron': 333, + 'ccedilla': 444, + 'Zdotaccent': 611, + 'Thorn': 556, + 'Omacron': 722, + 'Racute': 667, + 'Sacute': 556, + 'dcaron': 588, + 'Umacron': 722, + 'uring': 500, + 'threesuperior': 300, + 'Ograve': 722, + 'Agrave': 722, + 'Abreve': 722, + 'multiply': 564, + 'uacute': 500, + 'Tcaron': 611, + 'partialdiff': 476, + 'ydieresis': 500, + 'Nacute': 722, + 'icircumflex': 278, + 'Ecircumflex': 611, + 'adieresis': 444, + 'edieresis': 444, + 'cacute': 444, + 'nacute': 500, + 'umacron': 500, + 'Ncaron': 722, + 'Iacute': 333, + 'plusminus': 564, + 'brokenbar': 200, + 'registered': 760, + 'Gbreve': 722, + 'Idotaccent': 333, + 'summation': 600, + 'Egrave': 611, + 'racute': 333, + 'omacron': 500, + 'Zacute': 611, + 'Zcaron': 611, + 'greaterequal': 549, + 'Eth': 722, + 'Ccedilla': 667, + 'lcommaaccent': 278, + 'tcaron': 326, + 'eogonek': 444, + 'Uogonek': 722, + 'Aacute': 722, + 'Adieresis': 722, + 'egrave': 444, + 'zacute': 444, + 'iogonek': 278, + 'Oacute': 722, + 'oacute': 500, + 'amacron': 444, + 'sacute': 389, + 'idieresis': 278, + 'Ocircumflex': 722, + 'Ugrave': 722, + 'Delta': 612, + 'thorn': 500, + 'twosuperior': 300, + 'Odieresis': 722, + 'mu': 500, + 'igrave': 278, + 'ohungarumlaut': 500, + 'Eogonek': 611, + 'dcroat': 500, + 'threequarters': 750, + 'Scedilla': 556, + 'lcaron': 344, + 'Kcommaaccent': 722, + 'Lacute': 611, + 'trademark': 980, + 'edotaccent': 444, + 'Igrave': 333, + 'Imacron': 333, + 'Lcaron': 611, + 'onehalf': 750, + 'lessequal': 549, + 'ocircumflex': 500, + 'ntilde': 500, + 'Uhungarumlaut': 722, + 'Eacute': 611, + 'emacron': 444, + 'gbreve': 500, + 'onequarter': 750, + 'Scaron': 556, + 'Scommaaccent': 556, + 'Ohungarumlaut': 722, + 'degree': 400, + 'ograve': 500, + 'Ccaron': 667, + 'ugrave': 500, + 'radical': 453, + 'Dcaron': 722, + 'rcommaaccent': 333, + 'Ntilde': 722, + 'otilde': 500, + 'Rcommaaccent': 667, + 'Lcommaaccent': 611, + 'Atilde': 722, + 'Aogonek': 722, + 'Aring': 722, + 'Otilde': 722, + 'zdotaccent': 444, + 'Ecaron': 611, + 'Iogonek': 333, + 'kcommaaccent': 500, + 'minus': 564, + 'Icircumflex': 333, + 'ncaron': 500, + 'tcommaaccent': 278, + 'logicalnot': 564, + 'odieresis': 500, + 'udieresis': 500, + 'notequal': 549, + 'gcommaaccent': 500, + 'eth': 500, + 'zcaron': 444, + 'ncommaaccent': 500, + 'onesuperior': 300, + 'imacron': 278, + 'Euro': 500 + }, + 'Times-Bold': { + 'space': 250, + 'exclam': 333, + 'quotedbl': 555, + 'numbersign': 500, + 'dollar': 500, + 'percent': 1000, + 'ampersand': 833, + 'quoteright': 333, + 'parenleft': 333, + 'parenright': 333, + 'asterisk': 500, + 'plus': 570, + 'comma': 250, + 'hyphen': 333, + 'period': 250, + 'slash': 278, + 'zero': 500, + 'one': 500, + 'two': 500, + 'three': 500, + 'four': 500, + 'five': 500, + 'six': 500, + 'seven': 500, + 'eight': 500, + 'nine': 500, + 'colon': 333, + 'semicolon': 333, + 'less': 570, + 'equal': 570, + 'greater': 570, + 'question': 500, + 'at': 930, + 'A': 722, + 'B': 667, + 'C': 722, + 'D': 722, + 'E': 667, + 'F': 611, + 'G': 778, + 'H': 778, + 'I': 389, + 'J': 500, + 'K': 778, + 'L': 667, + 'M': 944, + 'N': 722, + 'O': 778, + 'P': 611, + 'Q': 778, + 'R': 722, + 'S': 556, + 'T': 667, + 'U': 722, + 'V': 722, + 'W': 1000, + 'X': 722, + 'Y': 722, + 'Z': 667, + 'bracketleft': 333, + 'backslash': 278, + 'bracketright': 333, + 'asciicircum': 581, + 'underscore': 500, + 'quoteleft': 333, + 'a': 500, + 'b': 556, + 'c': 444, + 'd': 556, + 'e': 444, + 'f': 333, + 'g': 500, + 'h': 556, + 'i': 278, + 'j': 333, + 'k': 556, + 'l': 278, + 'm': 833, + 'n': 556, + 'o': 500, + 'p': 556, + 'q': 556, + 'r': 444, + 's': 389, + 't': 333, + 'u': 556, + 'v': 500, + 'w': 722, + 'x': 500, + 'y': 500, + 'z': 444, + 'braceleft': 394, + 'bar': 220, + 'braceright': 394, + 'asciitilde': 520, + 'exclamdown': 333, + 'cent': 500, + 'sterling': 500, + 'fraction': 167, + 'yen': 500, + 'florin': 500, + 'section': 500, + 'currency': 500, + 'quotesingle': 278, + 'quotedblleft': 500, + 'guillemotleft': 500, + 'guilsinglleft': 333, + 'guilsinglright': 333, + 'fi': 556, + 'fl': 556, + 'endash': 500, + 'dagger': 500, + 'daggerdbl': 500, + 'periodcentered': 250, + 'paragraph': 540, + 'bullet': 350, + 'quotesinglbase': 333, + 'quotedblbase': 500, + 'quotedblright': 500, + 'guillemotright': 500, + 'ellipsis': 1000, + 'perthousand': 1000, + 'questiondown': 500, + 'grave': 333, + 'acute': 333, + 'circumflex': 333, + 'tilde': 333, + 'macron': 333, + 'breve': 333, + 'dotaccent': 333, + 'dieresis': 333, + 'ring': 333, + 'cedilla': 333, + 'hungarumlaut': 333, + 'ogonek': 333, + 'caron': 333, + 'emdash': 1000, + 'AE': 1000, + 'ordfeminine': 300, + 'Lslash': 667, + 'Oslash': 778, + 'OE': 1000, + 'ordmasculine': 330, + 'ae': 722, + 'dotlessi': 278, + 'lslash': 278, + 'oslash': 500, + 'oe': 722, + 'germandbls': 556, + 'Idieresis': 389, + 'eacute': 444, + 'abreve': 500, + 'uhungarumlaut': 556, + 'ecaron': 444, + 'Ydieresis': 722, + 'divide': 570, + 'Yacute': 722, + 'Acircumflex': 722, + 'aacute': 500, + 'Ucircumflex': 722, + 'yacute': 500, + 'scommaaccent': 389, + 'ecircumflex': 444, + 'Uring': 722, + 'Udieresis': 722, + 'aogonek': 500, + 'Uacute': 722, + 'uogonek': 556, + 'Edieresis': 667, + 'Dcroat': 722, + 'commaaccent': 250, + 'copyright': 747, + 'Emacron': 667, + 'ccaron': 444, + 'aring': 500, + 'Ncommaaccent': 722, + 'lacute': 278, + 'agrave': 500, + 'Tcommaaccent': 667, + 'Cacute': 722, + 'atilde': 500, + 'Edotaccent': 667, + 'scaron': 389, + 'scedilla': 389, + 'iacute': 278, + 'lozenge': 494, + 'Rcaron': 722, + 'Gcommaaccent': 778, + 'ucircumflex': 556, + 'acircumflex': 500, + 'Amacron': 722, + 'rcaron': 444, + 'ccedilla': 444, + 'Zdotaccent': 667, + 'Thorn': 611, + 'Omacron': 778, + 'Racute': 722, + 'Sacute': 556, + 'dcaron': 672, + 'Umacron': 722, + 'uring': 556, + 'threesuperior': 300, + 'Ograve': 778, + 'Agrave': 722, + 'Abreve': 722, + 'multiply': 570, + 'uacute': 556, + 'Tcaron': 667, + 'partialdiff': 494, + 'ydieresis': 500, + 'Nacute': 722, + 'icircumflex': 278, + 'Ecircumflex': 667, + 'adieresis': 500, + 'edieresis': 444, + 'cacute': 444, + 'nacute': 556, + 'umacron': 556, + 'Ncaron': 722, + 'Iacute': 389, + 'plusminus': 570, + 'brokenbar': 220, + 'registered': 747, + 'Gbreve': 778, + 'Idotaccent': 389, + 'summation': 600, + 'Egrave': 667, + 'racute': 444, + 'omacron': 500, + 'Zacute': 667, + 'Zcaron': 667, + 'greaterequal': 549, + 'Eth': 722, + 'Ccedilla': 722, + 'lcommaaccent': 278, + 'tcaron': 416, + 'eogonek': 444, + 'Uogonek': 722, + 'Aacute': 722, + 'Adieresis': 722, + 'egrave': 444, + 'zacute': 444, + 'iogonek': 278, + 'Oacute': 778, + 'oacute': 500, + 'amacron': 500, + 'sacute': 389, + 'idieresis': 278, + 'Ocircumflex': 778, + 'Ugrave': 722, + 'Delta': 612, + 'thorn': 556, + 'twosuperior': 300, + 'Odieresis': 778, + 'mu': 556, + 'igrave': 278, + 'ohungarumlaut': 500, + 'Eogonek': 667, + 'dcroat': 556, + 'threequarters': 750, + 'Scedilla': 556, + 'lcaron': 394, + 'Kcommaaccent': 778, + 'Lacute': 667, + 'trademark': 1000, + 'edotaccent': 444, + 'Igrave': 389, + 'Imacron': 389, + 'Lcaron': 667, + 'onehalf': 750, + 'lessequal': 549, + 'ocircumflex': 500, + 'ntilde': 556, + 'Uhungarumlaut': 722, + 'Eacute': 667, + 'emacron': 444, + 'gbreve': 500, + 'onequarter': 750, + 'Scaron': 556, + 'Scommaaccent': 556, + 'Ohungarumlaut': 778, + 'degree': 400, + 'ograve': 500, + 'Ccaron': 722, + 'ugrave': 556, + 'radical': 549, + 'Dcaron': 722, + 'rcommaaccent': 444, + 'Ntilde': 722, + 'otilde': 500, + 'Rcommaaccent': 722, + 'Lcommaaccent': 667, + 'Atilde': 722, + 'Aogonek': 722, + 'Aring': 722, + 'Otilde': 778, + 'zdotaccent': 444, + 'Ecaron': 667, + 'Iogonek': 389, + 'kcommaaccent': 556, + 'minus': 570, + 'Icircumflex': 389, + 'ncaron': 556, + 'tcommaaccent': 333, + 'logicalnot': 570, + 'odieresis': 500, + 'udieresis': 556, + 'notequal': 549, + 'gcommaaccent': 500, + 'eth': 500, + 'zcaron': 444, + 'ncommaaccent': 556, + 'onesuperior': 300, + 'imacron': 278, + 'Euro': 500 + }, + 'Times-BoldItalic': { + 'space': 250, + 'exclam': 389, + 'quotedbl': 555, + 'numbersign': 500, + 'dollar': 500, + 'percent': 833, + 'ampersand': 778, + 'quoteright': 333, + 'parenleft': 333, + 'parenright': 333, + 'asterisk': 500, + 'plus': 570, + 'comma': 250, + 'hyphen': 333, + 'period': 250, + 'slash': 278, + 'zero': 500, + 'one': 500, + 'two': 500, + 'three': 500, + 'four': 500, + 'five': 500, + 'six': 500, + 'seven': 500, + 'eight': 500, + 'nine': 500, + 'colon': 333, + 'semicolon': 333, + 'less': 570, + 'equal': 570, + 'greater': 570, + 'question': 500, + 'at': 832, + 'A': 667, + 'B': 667, + 'C': 667, + 'D': 722, + 'E': 667, + 'F': 667, + 'G': 722, + 'H': 778, + 'I': 389, + 'J': 500, + 'K': 667, + 'L': 611, + 'M': 889, + 'N': 722, + 'O': 722, + 'P': 611, + 'Q': 722, + 'R': 667, + 'S': 556, + 'T': 611, + 'U': 722, + 'V': 667, + 'W': 889, + 'X': 667, + 'Y': 611, + 'Z': 611, + 'bracketleft': 333, + 'backslash': 278, + 'bracketright': 333, + 'asciicircum': 570, + 'underscore': 500, + 'quoteleft': 333, + 'a': 500, + 'b': 500, + 'c': 444, + 'd': 500, + 'e': 444, + 'f': 333, + 'g': 500, + 'h': 556, + 'i': 278, + 'j': 278, + 'k': 500, + 'l': 278, + 'm': 778, + 'n': 556, + 'o': 500, + 'p': 500, + 'q': 500, + 'r': 389, + 's': 389, + 't': 278, + 'u': 556, + 'v': 444, + 'w': 667, + 'x': 500, + 'y': 444, + 'z': 389, + 'braceleft': 348, + 'bar': 220, + 'braceright': 348, + 'asciitilde': 570, + 'exclamdown': 389, + 'cent': 500, + 'sterling': 500, + 'fraction': 167, + 'yen': 500, + 'florin': 500, + 'section': 500, + 'currency': 500, + 'quotesingle': 278, + 'quotedblleft': 500, + 'guillemotleft': 500, + 'guilsinglleft': 333, + 'guilsinglright': 333, + 'fi': 556, + 'fl': 556, + 'endash': 500, + 'dagger': 500, + 'daggerdbl': 500, + 'periodcentered': 250, + 'paragraph': 500, + 'bullet': 350, + 'quotesinglbase': 333, + 'quotedblbase': 500, + 'quotedblright': 500, + 'guillemotright': 500, + 'ellipsis': 1000, + 'perthousand': 1000, + 'questiondown': 500, + 'grave': 333, + 'acute': 333, + 'circumflex': 333, + 'tilde': 333, + 'macron': 333, + 'breve': 333, + 'dotaccent': 333, + 'dieresis': 333, + 'ring': 333, + 'cedilla': 333, + 'hungarumlaut': 333, + 'ogonek': 333, + 'caron': 333, + 'emdash': 1000, + 'AE': 944, + 'ordfeminine': 266, + 'Lslash': 611, + 'Oslash': 722, + 'OE': 944, + 'ordmasculine': 300, + 'ae': 722, + 'dotlessi': 278, + 'lslash': 278, + 'oslash': 500, + 'oe': 722, + 'germandbls': 500, + 'Idieresis': 389, + 'eacute': 444, + 'abreve': 500, + 'uhungarumlaut': 556, + 'ecaron': 444, + 'Ydieresis': 611, + 'divide': 570, + 'Yacute': 611, + 'Acircumflex': 667, + 'aacute': 500, + 'Ucircumflex': 722, + 'yacute': 444, + 'scommaaccent': 389, + 'ecircumflex': 444, + 'Uring': 722, + 'Udieresis': 722, + 'aogonek': 500, + 'Uacute': 722, + 'uogonek': 556, + 'Edieresis': 667, + 'Dcroat': 722, + 'commaaccent': 250, + 'copyright': 747, + 'Emacron': 667, + 'ccaron': 444, + 'aring': 500, + 'Ncommaaccent': 722, + 'lacute': 278, + 'agrave': 500, + 'Tcommaaccent': 611, + 'Cacute': 667, + 'atilde': 500, + 'Edotaccent': 667, + 'scaron': 389, + 'scedilla': 389, + 'iacute': 278, + 'lozenge': 494, + 'Rcaron': 667, + 'Gcommaaccent': 722, + 'ucircumflex': 556, + 'acircumflex': 500, + 'Amacron': 667, + 'rcaron': 389, + 'ccedilla': 444, + 'Zdotaccent': 611, + 'Thorn': 611, + 'Omacron': 722, + 'Racute': 667, + 'Sacute': 556, + 'dcaron': 608, + 'Umacron': 722, + 'uring': 556, + 'threesuperior': 300, + 'Ograve': 722, + 'Agrave': 667, + 'Abreve': 667, + 'multiply': 570, + 'uacute': 556, + 'Tcaron': 611, + 'partialdiff': 494, + 'ydieresis': 444, + 'Nacute': 722, + 'icircumflex': 278, + 'Ecircumflex': 667, + 'adieresis': 500, + 'edieresis': 444, + 'cacute': 444, + 'nacute': 556, + 'umacron': 556, + 'Ncaron': 722, + 'Iacute': 389, + 'plusminus': 570, + 'brokenbar': 220, + 'registered': 747, + 'Gbreve': 722, + 'Idotaccent': 389, + 'summation': 600, + 'Egrave': 667, + 'racute': 389, + 'omacron': 500, + 'Zacute': 611, + 'Zcaron': 611, + 'greaterequal': 549, + 'Eth': 722, + 'Ccedilla': 667, + 'lcommaaccent': 278, + 'tcaron': 366, + 'eogonek': 444, + 'Uogonek': 722, + 'Aacute': 667, + 'Adieresis': 667, + 'egrave': 444, + 'zacute': 389, + 'iogonek': 278, + 'Oacute': 722, + 'oacute': 500, + 'amacron': 500, + 'sacute': 389, + 'idieresis': 278, + 'Ocircumflex': 722, + 'Ugrave': 722, + 'Delta': 612, + 'thorn': 500, + 'twosuperior': 300, + 'Odieresis': 722, + 'mu': 576, + 'igrave': 278, + 'ohungarumlaut': 500, + 'Eogonek': 667, + 'dcroat': 500, + 'threequarters': 750, + 'Scedilla': 556, + 'lcaron': 382, + 'Kcommaaccent': 667, + 'Lacute': 611, + 'trademark': 1000, + 'edotaccent': 444, + 'Igrave': 389, + 'Imacron': 389, + 'Lcaron': 611, + 'onehalf': 750, + 'lessequal': 549, + 'ocircumflex': 500, + 'ntilde': 556, + 'Uhungarumlaut': 722, + 'Eacute': 667, + 'emacron': 444, + 'gbreve': 500, + 'onequarter': 750, + 'Scaron': 556, + 'Scommaaccent': 556, + 'Ohungarumlaut': 722, + 'degree': 400, + 'ograve': 500, + 'Ccaron': 667, + 'ugrave': 556, + 'radical': 549, + 'Dcaron': 722, + 'rcommaaccent': 389, + 'Ntilde': 722, + 'otilde': 500, + 'Rcommaaccent': 667, + 'Lcommaaccent': 611, + 'Atilde': 667, + 'Aogonek': 667, + 'Aring': 667, + 'Otilde': 722, + 'zdotaccent': 389, + 'Ecaron': 667, + 'Iogonek': 389, + 'kcommaaccent': 500, + 'minus': 606, + 'Icircumflex': 389, + 'ncaron': 556, + 'tcommaaccent': 278, + 'logicalnot': 606, + 'odieresis': 500, + 'udieresis': 556, + 'notequal': 549, + 'gcommaaccent': 500, + 'eth': 500, + 'zcaron': 389, + 'ncommaaccent': 556, + 'onesuperior': 300, + 'imacron': 278, + 'Euro': 500 + }, + 'Times-Italic': { + 'space': 250, + 'exclam': 333, + 'quotedbl': 420, + 'numbersign': 500, + 'dollar': 500, + 'percent': 833, + 'ampersand': 778, + 'quoteright': 333, + 'parenleft': 333, + 'parenright': 333, + 'asterisk': 500, + 'plus': 675, + 'comma': 250, + 'hyphen': 333, + 'period': 250, + 'slash': 278, + 'zero': 500, + 'one': 500, + 'two': 500, + 'three': 500, + 'four': 500, + 'five': 500, + 'six': 500, + 'seven': 500, + 'eight': 500, + 'nine': 500, + 'colon': 333, + 'semicolon': 333, + 'less': 675, + 'equal': 675, + 'greater': 675, + 'question': 500, + 'at': 920, + 'A': 611, + 'B': 611, + 'C': 667, + 'D': 722, + 'E': 611, + 'F': 611, + 'G': 722, + 'H': 722, + 'I': 333, + 'J': 444, + 'K': 667, + 'L': 556, + 'M': 833, + 'N': 667, + 'O': 722, + 'P': 611, + 'Q': 722, + 'R': 611, + 'S': 500, + 'T': 556, + 'U': 722, + 'V': 611, + 'W': 833, + 'X': 611, + 'Y': 556, + 'Z': 556, + 'bracketleft': 389, + 'backslash': 278, + 'bracketright': 389, + 'asciicircum': 422, + 'underscore': 500, + 'quoteleft': 333, + 'a': 500, + 'b': 500, + 'c': 444, + 'd': 500, + 'e': 444, + 'f': 278, + 'g': 500, + 'h': 500, + 'i': 278, + 'j': 278, + 'k': 444, + 'l': 278, + 'm': 722, + 'n': 500, + 'o': 500, + 'p': 500, + 'q': 500, + 'r': 389, + 's': 389, + 't': 278, + 'u': 500, + 'v': 444, + 'w': 667, + 'x': 444, + 'y': 444, + 'z': 389, + 'braceleft': 400, + 'bar': 275, + 'braceright': 400, + 'asciitilde': 541, + 'exclamdown': 389, + 'cent': 500, + 'sterling': 500, + 'fraction': 167, + 'yen': 500, + 'florin': 500, + 'section': 500, + 'currency': 500, + 'quotesingle': 214, + 'quotedblleft': 556, + 'guillemotleft': 500, + 'guilsinglleft': 333, + 'guilsinglright': 333, + 'fi': 500, + 'fl': 500, + 'endash': 500, + 'dagger': 500, + 'daggerdbl': 500, + 'periodcentered': 250, + 'paragraph': 523, + 'bullet': 350, + 'quotesinglbase': 333, + 'quotedblbase': 556, + 'quotedblright': 556, + 'guillemotright': 500, + 'ellipsis': 889, + 'perthousand': 1000, + 'questiondown': 500, + 'grave': 333, + 'acute': 333, + 'circumflex': 333, + 'tilde': 333, + 'macron': 333, + 'breve': 333, + 'dotaccent': 333, + 'dieresis': 333, + 'ring': 333, + 'cedilla': 333, + 'hungarumlaut': 333, + 'ogonek': 333, + 'caron': 333, + 'emdash': 889, + 'AE': 889, + 'ordfeminine': 276, + 'Lslash': 556, + 'Oslash': 722, + 'OE': 944, + 'ordmasculine': 310, + 'ae': 667, + 'dotlessi': 278, + 'lslash': 278, + 'oslash': 500, + 'oe': 667, + 'germandbls': 500, + 'Idieresis': 333, + 'eacute': 444, + 'abreve': 500, + 'uhungarumlaut': 500, + 'ecaron': 444, + 'Ydieresis': 556, + 'divide': 675, + 'Yacute': 556, + 'Acircumflex': 611, + 'aacute': 500, + 'Ucircumflex': 722, + 'yacute': 444, + 'scommaaccent': 389, + 'ecircumflex': 444, + 'Uring': 722, + 'Udieresis': 722, + 'aogonek': 500, + 'Uacute': 722, + 'uogonek': 500, + 'Edieresis': 611, + 'Dcroat': 722, + 'commaaccent': 250, + 'copyright': 760, + 'Emacron': 611, + 'ccaron': 444, + 'aring': 500, + 'Ncommaaccent': 667, + 'lacute': 278, + 'agrave': 500, + 'Tcommaaccent': 556, + 'Cacute': 667, + 'atilde': 500, + 'Edotaccent': 611, + 'scaron': 389, + 'scedilla': 389, + 'iacute': 278, + 'lozenge': 471, + 'Rcaron': 611, + 'Gcommaaccent': 722, + 'ucircumflex': 500, + 'acircumflex': 500, + 'Amacron': 611, + 'rcaron': 389, + 'ccedilla': 444, + 'Zdotaccent': 556, + 'Thorn': 611, + 'Omacron': 722, + 'Racute': 611, + 'Sacute': 500, + 'dcaron': 544, + 'Umacron': 722, + 'uring': 500, + 'threesuperior': 300, + 'Ograve': 722, + 'Agrave': 611, + 'Abreve': 611, + 'multiply': 675, + 'uacute': 500, + 'Tcaron': 556, + 'partialdiff': 476, + 'ydieresis': 444, + 'Nacute': 667, + 'icircumflex': 278, + 'Ecircumflex': 611, + 'adieresis': 500, + 'edieresis': 444, + 'cacute': 444, + 'nacute': 500, + 'umacron': 500, + 'Ncaron': 667, + 'Iacute': 333, + 'plusminus': 675, + 'brokenbar': 275, + 'registered': 760, + 'Gbreve': 722, + 'Idotaccent': 333, + 'summation': 600, + 'Egrave': 611, + 'racute': 389, + 'omacron': 500, + 'Zacute': 556, + 'Zcaron': 556, + 'greaterequal': 549, + 'Eth': 722, + 'Ccedilla': 667, + 'lcommaaccent': 278, + 'tcaron': 300, + 'eogonek': 444, + 'Uogonek': 722, + 'Aacute': 611, + 'Adieresis': 611, + 'egrave': 444, + 'zacute': 389, + 'iogonek': 278, + 'Oacute': 722, + 'oacute': 500, + 'amacron': 500, + 'sacute': 389, + 'idieresis': 278, + 'Ocircumflex': 722, + 'Ugrave': 722, + 'Delta': 612, + 'thorn': 500, + 'twosuperior': 300, + 'Odieresis': 722, + 'mu': 500, + 'igrave': 278, + 'ohungarumlaut': 500, + 'Eogonek': 611, + 'dcroat': 500, + 'threequarters': 750, + 'Scedilla': 500, + 'lcaron': 300, + 'Kcommaaccent': 667, + 'Lacute': 556, + 'trademark': 980, + 'edotaccent': 444, + 'Igrave': 333, + 'Imacron': 333, + 'Lcaron': 611, + 'onehalf': 750, + 'lessequal': 549, + 'ocircumflex': 500, + 'ntilde': 500, + 'Uhungarumlaut': 722, + 'Eacute': 611, + 'emacron': 444, + 'gbreve': 500, + 'onequarter': 750, + 'Scaron': 500, + 'Scommaaccent': 500, + 'Ohungarumlaut': 722, + 'degree': 400, + 'ograve': 500, + 'Ccaron': 667, + 'ugrave': 500, + 'radical': 453, + 'Dcaron': 722, + 'rcommaaccent': 389, + 'Ntilde': 667, + 'otilde': 500, + 'Rcommaaccent': 611, + 'Lcommaaccent': 556, + 'Atilde': 611, + 'Aogonek': 611, + 'Aring': 611, + 'Otilde': 722, + 'zdotaccent': 389, + 'Ecaron': 611, + 'Iogonek': 333, + 'kcommaaccent': 444, + 'minus': 675, + 'Icircumflex': 333, + 'ncaron': 500, + 'tcommaaccent': 278, + 'logicalnot': 675, + 'odieresis': 500, + 'udieresis': 500, + 'notequal': 549, + 'gcommaaccent': 500, + 'eth': 500, + 'zcaron': 389, + 'ncommaaccent': 500, + 'onesuperior': 300, + 'imacron': 278, + 'Euro': 500 + }, + 'ZapfDingbats': { + 'space': 278, + 'a1': 974, + 'a2': 961, + 'a202': 974, + 'a3': 980, + 'a4': 719, + 'a5': 789, + 'a119': 790, + 'a118': 791, + 'a117': 690, + 'a11': 960, + 'a12': 939, + 'a13': 549, + 'a14': 855, + 'a15': 911, + 'a16': 933, + 'a105': 911, + 'a17': 945, + 'a18': 974, + 'a19': 755, + 'a20': 846, + 'a21': 762, + 'a22': 761, + 'a23': 571, + 'a24': 677, + 'a25': 763, + 'a26': 760, + 'a27': 759, + 'a28': 754, + 'a6': 494, + 'a7': 552, + 'a8': 537, + 'a9': 577, + 'a10': 692, + 'a29': 786, + 'a30': 788, + 'a31': 788, + 'a32': 790, + 'a33': 793, + 'a34': 794, + 'a35': 816, + 'a36': 823, + 'a37': 789, + 'a38': 841, + 'a39': 823, + 'a40': 833, + 'a41': 816, + 'a42': 831, + 'a43': 923, + 'a44': 744, + 'a45': 723, + 'a46': 749, + 'a47': 790, + 'a48': 792, + 'a49': 695, + 'a50': 776, + 'a51': 768, + 'a52': 792, + 'a53': 759, + 'a54': 707, + 'a55': 708, + 'a56': 682, + 'a57': 701, + 'a58': 826, + 'a59': 815, + 'a60': 789, + 'a61': 789, + 'a62': 707, + 'a63': 687, + 'a64': 696, + 'a65': 689, + 'a66': 786, + 'a67': 787, + 'a68': 713, + 'a69': 791, + 'a70': 785, + 'a71': 791, + 'a72': 873, + 'a73': 761, + 'a74': 762, + 'a203': 762, + 'a75': 759, + 'a204': 759, + 'a76': 892, + 'a77': 892, + 'a78': 788, + 'a79': 784, + 'a81': 438, + 'a82': 138, + 'a83': 277, + 'a84': 415, + 'a97': 392, + 'a98': 392, + 'a99': 668, + 'a100': 668, + 'a89': 390, + 'a90': 390, + 'a93': 317, + 'a94': 317, + 'a91': 276, + 'a92': 276, + 'a205': 509, + 'a85': 509, + 'a206': 410, + 'a86': 410, + 'a87': 234, + 'a88': 234, + 'a95': 334, + 'a96': 334, + 'a101': 732, + 'a102': 544, + 'a103': 544, + 'a104': 910, + 'a106': 667, + 'a107': 760, + 'a108': 760, + 'a112': 776, + 'a111': 595, + 'a110': 694, + 'a109': 626, + 'a120': 788, + 'a121': 788, + 'a122': 788, + 'a123': 788, + 'a124': 788, + 'a125': 788, + 'a126': 788, + 'a127': 788, + 'a128': 788, + 'a129': 788, + 'a130': 788, + 'a131': 788, + 'a132': 788, + 'a133': 788, + 'a134': 788, + 'a135': 788, + 'a136': 788, + 'a137': 788, + 'a138': 788, + 'a139': 788, + 'a140': 788, + 'a141': 788, + 'a142': 788, + 'a143': 788, + 'a144': 788, + 'a145': 788, + 'a146': 788, + 'a147': 788, + 'a148': 788, + 'a149': 788, + 'a150': 788, + 'a151': 788, + 'a152': 788, + 'a153': 788, + 'a154': 788, + 'a155': 788, + 'a156': 788, + 'a157': 788, + 'a158': 788, + 'a159': 788, + 'a160': 894, + 'a161': 838, + 'a163': 1016, + 'a164': 458, + 'a196': 748, + 'a165': 924, + 'a192': 748, + 'a166': 918, + 'a167': 927, + 'a168': 928, + 'a169': 928, + 'a170': 834, + 'a171': 873, + 'a172': 828, + 'a173': 924, + 'a162': 924, + 'a174': 917, + 'a175': 930, + 'a176': 931, + 'a177': 463, + 'a178': 883, + 'a179': 836, + 'a193': 836, + 'a180': 867, + 'a199': 867, + 'a181': 696, + 'a200': 696, + 'a182': 874, + 'a201': 874, + 'a183': 760, + 'a184': 946, + 'a197': 771, + 'a185': 865, + 'a194': 771, + 'a198': 888, + 'a186': 967, + 'a195': 888, + 'a187': 831, + 'a188': 873, + 'a189': 927, + 'a190': 970, + 'a191': 918 + } +}; + + +var EOF = {}; + +function isEOF(v) { + return (v === EOF); +} + +var MAX_LENGTH_TO_CACHE = 1000; + +var Parser = (function ParserClosure() { + function Parser(lexer, allowStreams, xref) { + this.lexer = lexer; + this.allowStreams = allowStreams; + this.xref = xref; + this.imageCache = {}; + this.refill(); + } + + Parser.prototype = { + refill: function Parser_refill() { + this.buf1 = this.lexer.getObj(); + this.buf2 = this.lexer.getObj(); + }, + shift: function Parser_shift() { + if (isCmd(this.buf2, 'ID')) { + this.buf1 = this.buf2; + this.buf2 = null; + } else { + this.buf1 = this.buf2; + this.buf2 = this.lexer.getObj(); + } + }, + getObj: function Parser_getObj(cipherTransform) { + var buf1 = this.buf1; + this.shift(); + + if (buf1 instanceof Cmd) { + switch (buf1.cmd) { + case 'BI': // inline image + return this.makeInlineImage(cipherTransform); + case '[': // array + var array = []; + while (!isCmd(this.buf1, ']') && !isEOF(this.buf1)) { + array.push(this.getObj(cipherTransform)); + } + if (isEOF(this.buf1)) { + error('End of file inside array'); + } + this.shift(); + return array; + case '<<': // dictionary or stream + var dict = new Dict(this.xref); + while (!isCmd(this.buf1, '>>') && !isEOF(this.buf1)) { + if (!isName(this.buf1)) { + info('Malformed dictionary: key must be a name object'); + this.shift(); + continue; + } + + var key = this.buf1.name; + this.shift(); + if (isEOF(this.buf1)) { + break; + } + dict.set(key, this.getObj(cipherTransform)); + } + if (isEOF(this.buf1)) { + error('End of file inside dictionary'); + } + + // Stream objects are not allowed inside content streams or + // object streams. + if (isCmd(this.buf2, 'stream')) { + return (this.allowStreams ? + this.makeStream(dict, cipherTransform) : dict); + } + this.shift(); + return dict; + default: // simple object + return buf1; + } + } + + if (isInt(buf1)) { // indirect reference or integer + var num = buf1; + if (isInt(this.buf1) && isCmd(this.buf2, 'R')) { + var ref = new Ref(num, this.buf1); + this.shift(); + this.shift(); + return ref; + } + return num; + } + + if (isString(buf1)) { // string + var str = buf1; + if (cipherTransform) { + str = cipherTransform.decryptString(str); + } + return str; + } + + // simple object + return buf1; + }, + /** + * Find the end of the stream by searching for the /EI\s/. + * @returns {number} The inline stream length. + */ + findDefaultInlineStreamEnd: + function Parser_findDefaultInlineStreamEnd(stream) { + var E = 0x45, I = 0x49, SPACE = 0x20, LF = 0xA, CR = 0xD; + var startPos = stream.pos, state = 0, ch, i, n, followingBytes; + while ((ch = stream.getByte()) !== -1) { + if (state === 0) { + state = (ch === E) ? 1 : 0; + } else if (state === 1) { + state = (ch === I) ? 2 : 0; + } else { + assert(state === 2); + if (ch === SPACE || ch === LF || ch === CR) { + // Let's check the next five bytes are ASCII... just be sure. + n = 5; + followingBytes = stream.peekBytes(n); + for (i = 0; i < n; i++) { + ch = followingBytes[i]; + if (ch !== LF && ch !== CR && (ch < SPACE || ch > 0x7F)) { + // Not a LF, CR, SPACE or any visible ASCII character, i.e. + // it's binary stuff. Resetting the state. + state = 0; + break; + } + } + if (state === 2) { + break; // Finished! + } + } else { + state = 0; + } + } + } + return ((stream.pos - 4) - startPos); + }, + /** + * Find the EOI (end-of-image) marker 0xFFD9 of the stream. + * @returns {number} The inline stream length. + */ + findDCTDecodeInlineStreamEnd: + function Parser_findDCTDecodeInlineStreamEnd(stream) { + var startPos = stream.pos, foundEOI = false, b, markerLength, length; + while ((b = stream.getByte()) !== -1) { + if (b !== 0xFF) { // Not a valid marker. + continue; + } + switch (stream.getByte()) { + case 0x00: // Byte stuffing. + // 0xFF00 appears to be a very common byte sequence in JPEG images. + break; + + case 0xFF: // Fill byte. + // Avoid skipping a valid marker, resetting the stream position. + stream.skip(-1); + break; + + case 0xD9: // EOI + foundEOI = true; + break; + + case 0xC0: // SOF0 + case 0xC1: // SOF1 + case 0xC2: // SOF2 + case 0xC3: // SOF3 + + case 0xC5: // SOF5 + case 0xC6: // SOF6 + case 0xC7: // SOF7 + + case 0xC9: // SOF9 + case 0xCA: // SOF10 + case 0xCB: // SOF11 + + case 0xCD: // SOF13 + case 0xCE: // SOF14 + case 0xCF: // SOF15 + + case 0xC4: // DHT + case 0xCC: // DAC + + case 0xDA: // SOS + case 0xDB: // DQT + case 0xDC: // DNL + case 0xDD: // DRI + case 0xDE: // DHP + case 0xDF: // EXP + + case 0xE0: // APP0 + case 0xE1: // APP1 + case 0xE2: // APP2 + case 0xE3: // APP3 + case 0xE4: // APP4 + case 0xE5: // APP5 + case 0xE6: // APP6 + case 0xE7: // APP7 + case 0xE8: // APP8 + case 0xE9: // APP9 + case 0xEA: // APP10 + case 0xEB: // APP11 + case 0xEC: // APP12 + case 0xED: // APP13 + case 0xEE: // APP14 + case 0xEF: // APP15 + + case 0xFE: // COM + // The marker should be followed by the length of the segment. + markerLength = stream.getUint16(); + if (markerLength > 2) { + // |markerLength| contains the byte length of the marker segment, + // including its own length (2 bytes) and excluding the marker. + stream.skip(markerLength - 2); // Jump to the next marker. + } else { + // The marker length is invalid, resetting the stream position. + stream.skip(-2); + } + break; + } + if (foundEOI) { + break; + } + } + length = stream.pos - startPos; + if (b === -1) { + warn('Inline DCTDecode image stream: ' + + 'EOI marker not found, searching for /EI/ instead.'); + stream.skip(-length); // Reset the stream position. + return this.findDefaultInlineStreamEnd(stream); + } + this.inlineStreamSkipEI(stream); + return length; + }, + /** + * Find the EOD (end-of-data) marker '~>' (i.e. TILDE + GT) of the stream. + * @returns {number} The inline stream length. + */ + findASCII85DecodeInlineStreamEnd: + function Parser_findASCII85DecodeInlineStreamEnd(stream) { + var TILDE = 0x7E, GT = 0x3E; + var startPos = stream.pos, ch, length; + while ((ch = stream.getByte()) !== -1) { + if (ch === TILDE && stream.peekByte() === GT) { + stream.skip(); + break; + } + } + length = stream.pos - startPos; + if (ch === -1) { + warn('Inline ASCII85Decode image stream: ' + + 'EOD marker not found, searching for /EI/ instead.'); + stream.skip(-length); // Reset the stream position. + return this.findDefaultInlineStreamEnd(stream); + } + this.inlineStreamSkipEI(stream); + return length; + }, + /** + * Find the EOD (end-of-data) marker '>' (i.e. GT) of the stream. + * @returns {number} The inline stream length. + */ + findASCIIHexDecodeInlineStreamEnd: + function Parser_findASCIIHexDecodeInlineStreamEnd(stream) { + var GT = 0x3E; + var startPos = stream.pos, ch, length; + while ((ch = stream.getByte()) !== -1) { + if (ch === GT) { + break; + } + } + length = stream.pos - startPos; + if (ch === -1) { + warn('Inline ASCIIHexDecode image stream: ' + + 'EOD marker not found, searching for /EI/ instead.'); + stream.skip(-length); // Reset the stream position. + return this.findDefaultInlineStreamEnd(stream); + } + this.inlineStreamSkipEI(stream); + return length; + }, + /** + * Skip over the /EI/ for streams where we search for an EOD marker. + */ + inlineStreamSkipEI: function Parser_inlineStreamSkipEI(stream) { + var E = 0x45, I = 0x49; + var state = 0, ch; + while ((ch = stream.getByte()) !== -1) { + if (state === 0) { + state = (ch === E) ? 1 : 0; + } else if (state === 1) { + state = (ch === I) ? 2 : 0; + } else if (state === 2) { + break; + } + } + }, + makeInlineImage: function Parser_makeInlineImage(cipherTransform) { + var lexer = this.lexer; + var stream = lexer.stream; + + // Parse dictionary. + var dict = new Dict(null); + while (!isCmd(this.buf1, 'ID') && !isEOF(this.buf1)) { + if (!isName(this.buf1)) { + error('Dictionary key must be a name object'); + } + var key = this.buf1.name; + this.shift(); + if (isEOF(this.buf1)) { + break; + } + dict.set(key, this.getObj(cipherTransform)); + } + + // Extract the name of the first (i.e. the current) image filter. + var filter = this.fetchIfRef(dict.get('Filter', 'F')), filterName; + if (isName(filter)) { + filterName = filter.name; + } else if (isArray(filter) && isName(filter[0])) { + filterName = filter[0].name; + } + + // Parse image stream. + var startPos = stream.pos, length, i, ii; + if (filterName === 'DCTDecode' || filterName === 'DCT') { + length = this.findDCTDecodeInlineStreamEnd(stream); + } else if (filterName === 'ASCII85Decide' || filterName === 'A85') { + length = this.findASCII85DecodeInlineStreamEnd(stream); + } else if (filterName === 'ASCIIHexDecode' || filterName === 'AHx') { + length = this.findASCIIHexDecodeInlineStreamEnd(stream); + } else { + length = this.findDefaultInlineStreamEnd(stream); + } + var imageStream = stream.makeSubStream(startPos, length, dict); + + // Cache all images below the MAX_LENGTH_TO_CACHE threshold by their + // adler32 checksum. + var adler32; + if (length < MAX_LENGTH_TO_CACHE) { + var imageBytes = imageStream.getBytes(); + imageStream.reset(); + + var a = 1; + var b = 0; + for (i = 0, ii = imageBytes.length; i < ii; ++i) { + // No modulo required in the loop if imageBytes.length < 5552. + a += imageBytes[i] & 0xff; + b += a; + } + adler32 = ((b % 65521) << 16) | (a % 65521); + + if (this.imageCache.adler32 === adler32) { + this.buf2 = Cmd.get('EI'); + this.shift(); + + this.imageCache[adler32].reset(); + return this.imageCache[adler32]; + } + } + + if (cipherTransform) { + imageStream = cipherTransform.createStream(imageStream, length); + } + + imageStream = this.filter(imageStream, dict, length); + imageStream.dict = dict; + if (adler32 !== undefined) { + imageStream.cacheKey = 'inline_' + length + '_' + adler32; + this.imageCache[adler32] = imageStream; + } + + this.buf2 = Cmd.get('EI'); + this.shift(); + + return imageStream; + }, + fetchIfRef: function Parser_fetchIfRef(obj) { + // not relying on the xref.fetchIfRef -- xref might not be set + return (isRef(obj) ? this.xref.fetch(obj) : obj); + }, + makeStream: function Parser_makeStream(dict, cipherTransform) { + var lexer = this.lexer; + var stream = lexer.stream; + + // get stream start position + lexer.skipToNextLine(); + var pos = stream.pos - 1; + + // get length + var length = this.fetchIfRef(dict.get('Length')); + if (!isInt(length)) { + info('Bad ' + length + ' attribute in stream'); + length = 0; + } + + // skip over the stream data + stream.pos = pos + length; + lexer.nextChar(); + + this.shift(); // '>>' + this.shift(); // 'stream' + if (!isCmd(this.buf1, 'endstream')) { + // bad stream length, scanning for endstream + stream.pos = pos; + var SCAN_BLOCK_SIZE = 2048; + var ENDSTREAM_SIGNATURE_LENGTH = 9; + var ENDSTREAM_SIGNATURE = [0x65, 0x6E, 0x64, 0x73, 0x74, 0x72, 0x65, + 0x61, 0x6D]; + var skipped = 0, found = false, i, j; + while (stream.pos < stream.end) { + var scanBytes = stream.peekBytes(SCAN_BLOCK_SIZE); + var scanLength = scanBytes.length - ENDSTREAM_SIGNATURE_LENGTH; + if (scanLength <= 0) { + break; + } + found = false; + for (i = 0, j = 0; i < scanLength; i++) { + var b = scanBytes[i]; + if (b !== ENDSTREAM_SIGNATURE[j]) { + i -= j; + j = 0; + } else { + j++; + if (j >= ENDSTREAM_SIGNATURE_LENGTH) { + i++; + found = true; + break; + } + } + } + if (found) { + skipped += i - ENDSTREAM_SIGNATURE_LENGTH; + stream.pos += i - ENDSTREAM_SIGNATURE_LENGTH; + break; + } + skipped += scanLength; + stream.pos += scanLength; + } + if (!found) { + error('Missing endstream'); + } + length = skipped; + + lexer.nextChar(); + this.shift(); + this.shift(); + } + this.shift(); // 'endstream' + + stream = stream.makeSubStream(pos, length, dict); + if (cipherTransform) { + stream = cipherTransform.createStream(stream, length); + } + stream = this.filter(stream, dict, length); + stream.dict = dict; + return stream; + }, + filter: function Parser_filter(stream, dict, length) { + var filter = this.fetchIfRef(dict.get('Filter', 'F')); + var params = this.fetchIfRef(dict.get('DecodeParms', 'DP')); + if (isName(filter)) { + return this.makeFilter(stream, filter.name, length, params); + } + + var maybeLength = length; + if (isArray(filter)) { + var filterArray = filter; + var paramsArray = params; + for (var i = 0, ii = filterArray.length; i < ii; ++i) { + filter = filterArray[i]; + if (!isName(filter)) { + error('Bad filter name: ' + filter); + } + + params = null; + if (isArray(paramsArray) && (i in paramsArray)) { + params = paramsArray[i]; + } + stream = this.makeFilter(stream, filter.name, maybeLength, params); + // after the first stream the length variable is invalid + maybeLength = null; + } + } + return stream; + }, + makeFilter: function Parser_makeFilter(stream, name, maybeLength, params) { + if (stream.dict.get('Length') === 0) { + return new NullStream(stream); + } + try { + if (params) { + params = this.fetchIfRef(params); + } + var xrefStreamStats = this.xref.stats.streamTypes; + if (name === 'FlateDecode' || name === 'Fl') { + xrefStreamStats[StreamType.FLATE] = true; + if (params) { + return new PredictorStream(new FlateStream(stream, maybeLength), + maybeLength, params); + } + return new FlateStream(stream, maybeLength); + } + if (name === 'LZWDecode' || name === 'LZW') { + xrefStreamStats[StreamType.LZW] = true; + var earlyChange = 1; + if (params) { + if (params.has('EarlyChange')) { + earlyChange = params.get('EarlyChange'); + } + return new PredictorStream( + new LZWStream(stream, maybeLength, earlyChange), + maybeLength, params); + } + return new LZWStream(stream, maybeLength, earlyChange); + } + if (name === 'DCTDecode' || name === 'DCT') { + xrefStreamStats[StreamType.DCT] = true; + return new JpegStream(stream, maybeLength, stream.dict, this.xref); + } + if (name === 'JPXDecode' || name === 'JPX') { + xrefStreamStats[StreamType.JPX] = true; + return new JpxStream(stream, maybeLength, stream.dict); + } + if (name === 'ASCII85Decode' || name === 'A85') { + xrefStreamStats[StreamType.A85] = true; + return new Ascii85Stream(stream, maybeLength); + } + if (name === 'ASCIIHexDecode' || name === 'AHx') { + xrefStreamStats[StreamType.AHX] = true; + return new AsciiHexStream(stream, maybeLength); + } + if (name === 'CCITTFaxDecode' || name === 'CCF') { + xrefStreamStats[StreamType.CCF] = true; + return new CCITTFaxStream(stream, maybeLength, params); + } + if (name === 'RunLengthDecode' || name === 'RL') { + xrefStreamStats[StreamType.RL] = true; + return new RunLengthStream(stream, maybeLength); + } + if (name === 'JBIG2Decode') { + xrefStreamStats[StreamType.JBIG] = true; + return new Jbig2Stream(stream, maybeLength, stream.dict); + } + warn('filter "' + name + '" not supported yet'); + return stream; + } catch (ex) { + if (ex instanceof MissingDataException) { + throw ex; + } + warn('Invalid stream: \"' + ex + '\"'); + return new NullStream(stream); + } + } + }; + + return Parser; +})(); + +var Lexer = (function LexerClosure() { + function Lexer(stream, knownCommands) { + this.stream = stream; + this.nextChar(); + + // While lexing, we build up many strings one char at a time. Using += for + // this can result in lots of garbage strings. It's better to build an + // array of single-char strings and then join() them together at the end. + // And reusing a single array (i.e. |this.strBuf|) over and over for this + // purpose uses less memory than using a new array for each string. + this.strBuf = []; + + // The PDFs might have "glued" commands with other commands, operands or + // literals, e.g. "q1". The knownCommands is a dictionary of the valid + // commands and their prefixes. The prefixes are built the following way: + // if there a command that is a prefix of the other valid command or + // literal (e.g. 'f' and 'false') the following prefixes must be included, + // 'fa', 'fal', 'fals'. The prefixes are not needed, if the command has no + // other commands or literals as a prefix. The knowCommands is optional. + this.knownCommands = knownCommands; + } + + Lexer.isSpace = function Lexer_isSpace(ch) { + // Space is one of the following characters: SPACE, TAB, CR or LF. + return (ch === 0x20 || ch === 0x09 || ch === 0x0D || ch === 0x0A); + }; + + // A '1' in this array means the character is white space. A '1' or + // '2' means the character ends a name or command. + var specialChars = [ + 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, // 0x + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 1x + 1, 0, 0, 0, 0, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 2, // 2x + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, // 3x + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 4x + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, // 5x + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 6x + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, // 7x + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 8x + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 9x + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // ax + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // bx + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // cx + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // dx + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // ex + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 // fx + ]; + + function toHexDigit(ch) { + if (ch >= 0x30 && ch <= 0x39) { // '0'-'9' + return ch & 0x0F; + } + if ((ch >= 0x41 && ch <= 0x46) || (ch >= 0x61 && ch <= 0x66)) { + // 'A'-'F', 'a'-'f' + return (ch & 0x0F) + 9; + } + return -1; + } + + Lexer.prototype = { + nextChar: function Lexer_nextChar() { + return (this.currentChar = this.stream.getByte()); + }, + peekChar: function Lexer_peekChar() { + return this.stream.peekByte(); + }, + getNumber: function Lexer_getNumber() { + var ch = this.currentChar; + var eNotation = false; + var divideBy = 0; // different from 0 if it's a floating point value + var sign = 1; + + if (ch === 0x2D) { // '-' + sign = -1; + ch = this.nextChar(); + } else if (ch === 0x2B) { // '+' + ch = this.nextChar(); + } + if (ch === 0x2E) { // '.' + divideBy = 10; + ch = this.nextChar(); + } + if (ch < 0x30 || ch > 0x39) { // '0' - '9' + error('Invalid number: ' + String.fromCharCode(ch)); + return 0; + } + + var baseValue = ch - 0x30; // '0' + var powerValue = 0; + var powerValueSign = 1; + + while ((ch = this.nextChar()) >= 0) { + if (0x30 <= ch && ch <= 0x39) { // '0' - '9' + var currentDigit = ch - 0x30; // '0' + if (eNotation) { // We are after an 'e' or 'E' + powerValue = powerValue * 10 + currentDigit; + } else { + if (divideBy !== 0) { // We are after a point + divideBy *= 10; + } + baseValue = baseValue * 10 + currentDigit; + } + } else if (ch === 0x2E) { // '.' + if (divideBy === 0) { + divideBy = 1; + } else { + // A number can have only one '.' + break; + } + } else if (ch === 0x2D) { // '-' + // ignore minus signs in the middle of numbers to match + // Adobe's behavior + warn('Badly formated number'); + } else if (ch === 0x45 || ch === 0x65) { // 'E', 'e' + // 'E' can be either a scientific notation or the beginning of a new + // operator + ch = this.peekChar(); + if (ch === 0x2B || ch === 0x2D) { // '+', '-' + powerValueSign = (ch === 0x2D) ? -1 : 1; + this.nextChar(); // Consume the sign character + } else if (ch < 0x30 || ch > 0x39) { // '0' - '9' + // The 'E' must be the beginning of a new operator + break; + } + eNotation = true; + } else { + // the last character doesn't belong to us + break; + } + } + + if (divideBy !== 0) { + baseValue /= divideBy; + } + if (eNotation) { + baseValue *= Math.pow(10, powerValueSign * powerValue); + } + return sign * baseValue; + }, + getString: function Lexer_getString() { + var numParen = 1; + var done = false; + var strBuf = this.strBuf; + strBuf.length = 0; + + var ch = this.nextChar(); + while (true) { + var charBuffered = false; + switch (ch | 0) { + case -1: + warn('Unterminated string'); + done = true; + break; + case 0x28: // '(' + ++numParen; + strBuf.push('('); + break; + case 0x29: // ')' + if (--numParen === 0) { + this.nextChar(); // consume strings ')' + done = true; + } else { + strBuf.push(')'); + } + break; + case 0x5C: // '\\' + ch = this.nextChar(); + switch (ch) { + case -1: + warn('Unterminated string'); + done = true; + break; + case 0x6E: // 'n' + strBuf.push('\n'); + break; + case 0x72: // 'r' + strBuf.push('\r'); + break; + case 0x74: // 't' + strBuf.push('\t'); + break; + case 0x62: // 'b' + strBuf.push('\b'); + break; + case 0x66: // 'f' + strBuf.push('\f'); + break; + case 0x5C: // '\' + case 0x28: // '(' + case 0x29: // ')' + strBuf.push(String.fromCharCode(ch)); + break; + case 0x30: case 0x31: case 0x32: case 0x33: // '0'-'3' + case 0x34: case 0x35: case 0x36: case 0x37: // '4'-'7' + var x = ch & 0x0F; + ch = this.nextChar(); + charBuffered = true; + if (ch >= 0x30 && ch <= 0x37) { // '0'-'7' + x = (x << 3) + (ch & 0x0F); + ch = this.nextChar(); + if (ch >= 0x30 && ch <= 0x37) { // '0'-'7' + charBuffered = false; + x = (x << 3) + (ch & 0x0F); + } + } + strBuf.push(String.fromCharCode(x)); + break; + case 0x0D: // CR + if (this.peekChar() === 0x0A) { // LF + this.nextChar(); + } + break; + case 0x0A: // LF + break; + default: + strBuf.push(String.fromCharCode(ch)); + break; + } + break; + default: + strBuf.push(String.fromCharCode(ch)); + break; + } + if (done) { + break; + } + if (!charBuffered) { + ch = this.nextChar(); + } + } + return strBuf.join(''); + }, + getName: function Lexer_getName() { + var ch; + var strBuf = this.strBuf; + strBuf.length = 0; + while ((ch = this.nextChar()) >= 0 && !specialChars[ch]) { + if (ch === 0x23) { // '#' + ch = this.nextChar(); + var x = toHexDigit(ch); + if (x !== -1) { + var x2 = toHexDigit(this.nextChar()); + if (x2 === -1) { + error('Illegal digit in hex char in name: ' + x2); + } + strBuf.push(String.fromCharCode((x << 4) | x2)); + } else { + strBuf.push('#', String.fromCharCode(ch)); + } + } else { + strBuf.push(String.fromCharCode(ch)); + } + } + if (strBuf.length > 128) { + error('Warning: name token is longer than allowed by the spec: ' + + strBuf.length); + } + return Name.get(strBuf.join('')); + }, + getHexString: function Lexer_getHexString() { + var strBuf = this.strBuf; + strBuf.length = 0; + var ch = this.currentChar; + var isFirstHex = true; + var firstDigit; + var secondDigit; + while (true) { + if (ch < 0) { + warn('Unterminated hex string'); + break; + } else if (ch === 0x3E) { // '>' + this.nextChar(); + break; + } else if (specialChars[ch] === 1) { + ch = this.nextChar(); + continue; + } else { + if (isFirstHex) { + firstDigit = toHexDigit(ch); + if (firstDigit === -1) { + warn('Ignoring invalid character "' + ch + '" in hex string'); + ch = this.nextChar(); + continue; + } + } else { + secondDigit = toHexDigit(ch); + if (secondDigit === -1) { + warn('Ignoring invalid character "' + ch + '" in hex string'); + ch = this.nextChar(); + continue; + } + strBuf.push(String.fromCharCode((firstDigit << 4) | secondDigit)); + } + isFirstHex = !isFirstHex; + ch = this.nextChar(); + } + } + return strBuf.join(''); + }, + getObj: function Lexer_getObj() { + // skip whitespace and comments + var comment = false; + var ch = this.currentChar; + while (true) { + if (ch < 0) { + return EOF; + } + if (comment) { + if (ch === 0x0A || ch === 0x0D) { // LF, CR + comment = false; + } + } else if (ch === 0x25) { // '%' + comment = true; + } else if (specialChars[ch] !== 1) { + break; + } + ch = this.nextChar(); + } + + // start reading token + switch (ch | 0) { + case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: // '0'-'4' + case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: // '5'-'9' + case 0x2B: case 0x2D: case 0x2E: // '+', '-', '.' + return this.getNumber(); + case 0x28: // '(' + return this.getString(); + case 0x2F: // '/' + return this.getName(); + // array punctuation + case 0x5B: // '[' + this.nextChar(); + return Cmd.get('['); + case 0x5D: // ']' + this.nextChar(); + return Cmd.get(']'); + // hex string or dict punctuation + case 0x3C: // '<' + ch = this.nextChar(); + if (ch === 0x3C) { + // dict punctuation + this.nextChar(); + return Cmd.get('<<'); + } + return this.getHexString(); + // dict punctuation + case 0x3E: // '>' + ch = this.nextChar(); + if (ch === 0x3E) { + this.nextChar(); + return Cmd.get('>>'); + } + return Cmd.get('>'); + case 0x7B: // '{' + this.nextChar(); + return Cmd.get('{'); + case 0x7D: // '}' + this.nextChar(); + return Cmd.get('}'); + case 0x29: // ')' + error('Illegal character: ' + ch); + break; + } + + // command + var str = String.fromCharCode(ch); + var knownCommands = this.knownCommands; + var knownCommandFound = knownCommands && knownCommands[str] !== undefined; + while ((ch = this.nextChar()) >= 0 && !specialChars[ch]) { + // stop if known command is found and next character does not make + // the str a command + var possibleCommand = str + String.fromCharCode(ch); + if (knownCommandFound && knownCommands[possibleCommand] === undefined) { + break; + } + if (str.length === 128) { + error('Command token too long: ' + str.length); + } + str = possibleCommand; + knownCommandFound = knownCommands && knownCommands[str] !== undefined; + } + if (str === 'true') { + return true; + } + if (str === 'false') { + return false; + } + if (str === 'null') { + return null; + } + return Cmd.get(str); + }, + skipToNextLine: function Lexer_skipToNextLine() { + var ch = this.currentChar; + while (ch >= 0) { + if (ch === 0x0D) { // CR + ch = this.nextChar(); + if (ch === 0x0A) { // LF + this.nextChar(); + } + break; + } else if (ch === 0x0A) { // LF + this.nextChar(); + break; + } + ch = this.nextChar(); + } + } + }; + + return Lexer; +})(); + +var Linearization = { + create: function LinearizationCreate(stream) { + function getInt(name, allowZeroValue) { + var obj = linDict.get(name); + if (isInt(obj) && (allowZeroValue ? obj >= 0 : obj > 0)) { + return obj; + } + throw new Error('The "' + name + '" parameter in the linearization ' + + 'dictionary is invalid.'); + } + function getHints() { + var hints = linDict.get('H'), hintsLength, item; + if (isArray(hints) && + ((hintsLength = hints.length) === 2 || hintsLength === 4)) { + for (var index = 0; index < hintsLength; index++) { + if (!(isInt(item = hints[index]) && item > 0)) { + throw new Error('Hint (' + index + + ') in the linearization dictionary is invalid.'); + } + } + return hints; + } + throw new Error('Hint array in the linearization dictionary is invalid.'); + } + var parser = new Parser(new Lexer(stream), false, null); + var obj1 = parser.getObj(); + var obj2 = parser.getObj(); + var obj3 = parser.getObj(); + var linDict = parser.getObj(); + var obj, length; + if (!(isInt(obj1) && isInt(obj2) && isCmd(obj3, 'obj') && isDict(linDict) && + isNum(obj = linDict.get('Linearized')) && obj > 0)) { + return null; // No valid linearization dictionary found. + } else if ((length = getInt('L')) !== stream.length) { + throw new Error('The "L" parameter in the linearization dictionary ' + + 'does not equal the stream length.'); + } + return { + length: length, + hints: getHints(), + objectNumberFirst: getInt('O'), + endFirst: getInt('E'), + numPages: getInt('N'), + mainXRefEntriesOffset: getInt('T'), + pageFirst: (linDict.has('P') ? getInt('P', true) : 0) + }; + } +}; + + +var PostScriptParser = (function PostScriptParserClosure() { + function PostScriptParser(lexer) { + this.lexer = lexer; + this.operators = []; + this.token = null; + this.prev = null; + } + PostScriptParser.prototype = { + nextToken: function PostScriptParser_nextToken() { + this.prev = this.token; + this.token = this.lexer.getToken(); + }, + accept: function PostScriptParser_accept(type) { + if (this.token.type === type) { + this.nextToken(); + return true; + } + return false; + }, + expect: function PostScriptParser_expect(type) { + if (this.accept(type)) { + return true; + } + error('Unexpected symbol: found ' + this.token.type + ' expected ' + + type + '.'); + }, + parse: function PostScriptParser_parse() { + this.nextToken(); + this.expect(PostScriptTokenTypes.LBRACE); + this.parseBlock(); + this.expect(PostScriptTokenTypes.RBRACE); + return this.operators; + }, + parseBlock: function PostScriptParser_parseBlock() { + while (true) { + if (this.accept(PostScriptTokenTypes.NUMBER)) { + this.operators.push(this.prev.value); + } else if (this.accept(PostScriptTokenTypes.OPERATOR)) { + this.operators.push(this.prev.value); + } else if (this.accept(PostScriptTokenTypes.LBRACE)) { + this.parseCondition(); + } else { + return; + } + } + }, + parseCondition: function PostScriptParser_parseCondition() { + // Add two place holders that will be updated later + var conditionLocation = this.operators.length; + this.operators.push(null, null); + + this.parseBlock(); + this.expect(PostScriptTokenTypes.RBRACE); + if (this.accept(PostScriptTokenTypes.IF)) { + // The true block is right after the 'if' so it just falls through on + // true else it jumps and skips the true block. + this.operators[conditionLocation] = this.operators.length; + this.operators[conditionLocation + 1] = 'jz'; + } else if (this.accept(PostScriptTokenTypes.LBRACE)) { + var jumpLocation = this.operators.length; + this.operators.push(null, null); + var endOfTrue = this.operators.length; + this.parseBlock(); + this.expect(PostScriptTokenTypes.RBRACE); + this.expect(PostScriptTokenTypes.IFELSE); + // The jump is added at the end of the true block to skip the false + // block. + this.operators[jumpLocation] = this.operators.length; + this.operators[jumpLocation + 1] = 'j'; + + this.operators[conditionLocation] = endOfTrue; + this.operators[conditionLocation + 1] = 'jz'; + } else { + error('PS Function: error parsing conditional.'); + } + } + }; + return PostScriptParser; +})(); + +var PostScriptTokenTypes = { + LBRACE: 0, + RBRACE: 1, + NUMBER: 2, + OPERATOR: 3, + IF: 4, + IFELSE: 5 +}; + +var PostScriptToken = (function PostScriptTokenClosure() { + function PostScriptToken(type, value) { + this.type = type; + this.value = value; + } + + var opCache = {}; + + PostScriptToken.getOperator = function PostScriptToken_getOperator(op) { + var opValue = opCache[op]; + if (opValue) { + return opValue; + } + return opCache[op] = new PostScriptToken(PostScriptTokenTypes.OPERATOR, op); + }; + + PostScriptToken.LBRACE = new PostScriptToken(PostScriptTokenTypes.LBRACE, + '{'); + PostScriptToken.RBRACE = new PostScriptToken(PostScriptTokenTypes.RBRACE, + '}'); + PostScriptToken.IF = new PostScriptToken(PostScriptTokenTypes.IF, 'IF'); + PostScriptToken.IFELSE = new PostScriptToken(PostScriptTokenTypes.IFELSE, + 'IFELSE'); + return PostScriptToken; +})(); + +var PostScriptLexer = (function PostScriptLexerClosure() { + function PostScriptLexer(stream) { + this.stream = stream; + this.nextChar(); + + this.strBuf = []; + } + PostScriptLexer.prototype = { + nextChar: function PostScriptLexer_nextChar() { + return (this.currentChar = this.stream.getByte()); + }, + getToken: function PostScriptLexer_getToken() { + var comment = false; + var ch = this.currentChar; + + // skip comments + while (true) { + if (ch < 0) { + return EOF; + } + + if (comment) { + if (ch === 0x0A || ch === 0x0D) { + comment = false; + } + } else if (ch === 0x25) { // '%' + comment = true; + } else if (!Lexer.isSpace(ch)) { + break; + } + ch = this.nextChar(); + } + switch (ch | 0) { + case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: // '0'-'4' + case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: // '5'-'9' + case 0x2B: case 0x2D: case 0x2E: // '+', '-', '.' + return new PostScriptToken(PostScriptTokenTypes.NUMBER, + this.getNumber()); + case 0x7B: // '{' + this.nextChar(); + return PostScriptToken.LBRACE; + case 0x7D: // '}' + this.nextChar(); + return PostScriptToken.RBRACE; + } + // operator + var strBuf = this.strBuf; + strBuf.length = 0; + strBuf[0] = String.fromCharCode(ch); + + while ((ch = this.nextChar()) >= 0 && // and 'A'-'Z', 'a'-'z' + ((ch >= 0x41 && ch <= 0x5A) || (ch >= 0x61 && ch <= 0x7A))) { + strBuf.push(String.fromCharCode(ch)); + } + var str = strBuf.join(''); + switch (str.toLowerCase()) { + case 'if': + return PostScriptToken.IF; + case 'ifelse': + return PostScriptToken.IFELSE; + default: + return PostScriptToken.getOperator(str); + } + }, + getNumber: function PostScriptLexer_getNumber() { + var ch = this.currentChar; + var strBuf = this.strBuf; + strBuf.length = 0; + strBuf[0] = String.fromCharCode(ch); + + while ((ch = this.nextChar()) >= 0) { + if ((ch >= 0x30 && ch <= 0x39) || // '0'-'9' + ch === 0x2D || ch === 0x2E) { // '-', '.' + strBuf.push(String.fromCharCode(ch)); + } else { + break; + } + } + var value = parseFloat(strBuf.join('')); + if (isNaN(value)) { + error('Invalid floating point number: ' + value); + } + return value; + } + }; + return PostScriptLexer; +})(); + + +var Stream = (function StreamClosure() { + function Stream(arrayBuffer, start, length, dict) { + this.bytes = (arrayBuffer instanceof Uint8Array ? + arrayBuffer : new Uint8Array(arrayBuffer)); + this.start = start || 0; + this.pos = this.start; + this.end = (start + length) || this.bytes.length; + this.dict = dict; + } + + // required methods for a stream. if a particular stream does not + // implement these, an error should be thrown + Stream.prototype = { + get length() { + return this.end - this.start; + }, + get isEmpty() { + return this.length === 0; + }, + getByte: function Stream_getByte() { + if (this.pos >= this.end) { + return -1; + } + return this.bytes[this.pos++]; + }, + getUint16: function Stream_getUint16() { + var b0 = this.getByte(); + var b1 = this.getByte(); + if (b0 === -1 || b1 === -1) { + return -1; + } + return (b0 << 8) + b1; + }, + getInt32: function Stream_getInt32() { + var b0 = this.getByte(); + var b1 = this.getByte(); + var b2 = this.getByte(); + var b3 = this.getByte(); + return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3; + }, + // returns subarray of original buffer + // should only be read + getBytes: function Stream_getBytes(length) { + var bytes = this.bytes; + var pos = this.pos; + var strEnd = this.end; + + if (!length) { + return bytes.subarray(pos, strEnd); + } + var end = pos + length; + if (end > strEnd) { + end = strEnd; + } + this.pos = end; + return bytes.subarray(pos, end); + }, + peekByte: function Stream_peekByte() { + var peekedByte = this.getByte(); + this.pos--; + return peekedByte; + }, + peekBytes: function Stream_peekBytes(length) { + var bytes = this.getBytes(length); + this.pos -= bytes.length; + return bytes; + }, + skip: function Stream_skip(n) { + if (!n) { + n = 1; + } + this.pos += n; + }, + reset: function Stream_reset() { + this.pos = this.start; + }, + moveStart: function Stream_moveStart() { + this.start = this.pos; + }, + makeSubStream: function Stream_makeSubStream(start, length, dict) { + return new Stream(this.bytes.buffer, start, length, dict); + }, + isStream: true + }; + + return Stream; +})(); + +var StringStream = (function StringStreamClosure() { + function StringStream(str) { + var length = str.length; + var bytes = new Uint8Array(length); + for (var n = 0; n < length; ++n) { + bytes[n] = str.charCodeAt(n); + } + Stream.call(this, bytes); + } + + StringStream.prototype = Stream.prototype; + + return StringStream; +})(); + +// super class for the decoding streams +var DecodeStream = (function DecodeStreamClosure() { + // Lots of DecodeStreams are created whose buffers are never used. For these + // we share a single empty buffer. This is (a) space-efficient and (b) avoids + // having special cases that would be required if we used |null| for an empty + // buffer. + var emptyBuffer = new Uint8Array(0); + + function DecodeStream(maybeMinBufferLength) { + this.pos = 0; + this.bufferLength = 0; + this.eof = false; + this.buffer = emptyBuffer; + this.minBufferLength = 512; + if (maybeMinBufferLength) { + // Compute the first power of two that is as big as maybeMinBufferLength. + while (this.minBufferLength < maybeMinBufferLength) { + this.minBufferLength *= 2; + } + } + } + + DecodeStream.prototype = { + get isEmpty() { + while (!this.eof && this.bufferLength === 0) { + this.readBlock(); + } + return this.bufferLength === 0; + }, + ensureBuffer: function DecodeStream_ensureBuffer(requested) { + var buffer = this.buffer; + if (requested <= buffer.byteLength) { + return buffer; + } + var size = this.minBufferLength; + while (size < requested) { + size *= 2; + } + var buffer2 = new Uint8Array(size); + buffer2.set(buffer); + return (this.buffer = buffer2); + }, + getByte: function DecodeStream_getByte() { + var pos = this.pos; + while (this.bufferLength <= pos) { + if (this.eof) { + return -1; + } + this.readBlock(); + } + return this.buffer[this.pos++]; + }, + getUint16: function DecodeStream_getUint16() { + var b0 = this.getByte(); + var b1 = this.getByte(); + if (b0 === -1 || b1 === -1) { + return -1; + } + return (b0 << 8) + b1; + }, + getInt32: function DecodeStream_getInt32() { + var b0 = this.getByte(); + var b1 = this.getByte(); + var b2 = this.getByte(); + var b3 = this.getByte(); + return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3; + }, + getBytes: function DecodeStream_getBytes(length) { + var end, pos = this.pos; + + if (length) { + this.ensureBuffer(pos + length); + end = pos + length; + + while (!this.eof && this.bufferLength < end) { + this.readBlock(); + } + var bufEnd = this.bufferLength; + if (end > bufEnd) { + end = bufEnd; + } + } else { + while (!this.eof) { + this.readBlock(); + } + end = this.bufferLength; + } + + this.pos = end; + return this.buffer.subarray(pos, end); + }, + peekByte: function DecodeStream_peekByte() { + var peekedByte = this.getByte(); + this.pos--; + return peekedByte; + }, + peekBytes: function DecodeStream_peekBytes(length) { + var bytes = this.getBytes(length); + this.pos -= bytes.length; + return bytes; + }, + makeSubStream: function DecodeStream_makeSubStream(start, length, dict) { + var end = start + length; + while (this.bufferLength <= end && !this.eof) { + this.readBlock(); + } + return new Stream(this.buffer, start, length, dict); + }, + skip: function DecodeStream_skip(n) { + if (!n) { + n = 1; + } + this.pos += n; + }, + reset: function DecodeStream_reset() { + this.pos = 0; + }, + getBaseStreams: function DecodeStream_getBaseStreams() { + if (this.str && this.str.getBaseStreams) { + return this.str.getBaseStreams(); + } + return []; + } + }; + + return DecodeStream; +})(); + +var StreamsSequenceStream = (function StreamsSequenceStreamClosure() { + function StreamsSequenceStream(streams) { + this.streams = streams; + DecodeStream.call(this, /* maybeLength = */ null); + } + + StreamsSequenceStream.prototype = Object.create(DecodeStream.prototype); + + StreamsSequenceStream.prototype.readBlock = + function streamSequenceStreamReadBlock() { + + var streams = this.streams; + if (streams.length === 0) { + this.eof = true; + return; + } + var stream = streams.shift(); + var chunk = stream.getBytes(); + var bufferLength = this.bufferLength; + var newLength = bufferLength + chunk.length; + var buffer = this.ensureBuffer(newLength); + buffer.set(chunk, bufferLength); + this.bufferLength = newLength; + }; + + StreamsSequenceStream.prototype.getBaseStreams = + function StreamsSequenceStream_getBaseStreams() { + + var baseStreams = []; + for (var i = 0, ii = this.streams.length; i < ii; i++) { + var stream = this.streams[i]; + if (stream.getBaseStreams) { + Util.appendToArray(baseStreams, stream.getBaseStreams()); + } + } + return baseStreams; + }; + + return StreamsSequenceStream; +})(); + +var FlateStream = (function FlateStreamClosure() { + var codeLenCodeMap = new Int32Array([ + 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 + ]); + + var lengthDecode = new Int32Array([ + 0x00003, 0x00004, 0x00005, 0x00006, 0x00007, 0x00008, 0x00009, 0x0000a, + 0x1000b, 0x1000d, 0x1000f, 0x10011, 0x20013, 0x20017, 0x2001b, 0x2001f, + 0x30023, 0x3002b, 0x30033, 0x3003b, 0x40043, 0x40053, 0x40063, 0x40073, + 0x50083, 0x500a3, 0x500c3, 0x500e3, 0x00102, 0x00102, 0x00102 + ]); + + var distDecode = new Int32Array([ + 0x00001, 0x00002, 0x00003, 0x00004, 0x10005, 0x10007, 0x20009, 0x2000d, + 0x30011, 0x30019, 0x40021, 0x40031, 0x50041, 0x50061, 0x60081, 0x600c1, + 0x70101, 0x70181, 0x80201, 0x80301, 0x90401, 0x90601, 0xa0801, 0xa0c01, + 0xb1001, 0xb1801, 0xc2001, 0xc3001, 0xd4001, 0xd6001 + ]); + + var fixedLitCodeTab = [new Int32Array([ + 0x70100, 0x80050, 0x80010, 0x80118, 0x70110, 0x80070, 0x80030, 0x900c0, + 0x70108, 0x80060, 0x80020, 0x900a0, 0x80000, 0x80080, 0x80040, 0x900e0, + 0x70104, 0x80058, 0x80018, 0x90090, 0x70114, 0x80078, 0x80038, 0x900d0, + 0x7010c, 0x80068, 0x80028, 0x900b0, 0x80008, 0x80088, 0x80048, 0x900f0, + 0x70102, 0x80054, 0x80014, 0x8011c, 0x70112, 0x80074, 0x80034, 0x900c8, + 0x7010a, 0x80064, 0x80024, 0x900a8, 0x80004, 0x80084, 0x80044, 0x900e8, + 0x70106, 0x8005c, 0x8001c, 0x90098, 0x70116, 0x8007c, 0x8003c, 0x900d8, + 0x7010e, 0x8006c, 0x8002c, 0x900b8, 0x8000c, 0x8008c, 0x8004c, 0x900f8, + 0x70101, 0x80052, 0x80012, 0x8011a, 0x70111, 0x80072, 0x80032, 0x900c4, + 0x70109, 0x80062, 0x80022, 0x900a4, 0x80002, 0x80082, 0x80042, 0x900e4, + 0x70105, 0x8005a, 0x8001a, 0x90094, 0x70115, 0x8007a, 0x8003a, 0x900d4, + 0x7010d, 0x8006a, 0x8002a, 0x900b4, 0x8000a, 0x8008a, 0x8004a, 0x900f4, + 0x70103, 0x80056, 0x80016, 0x8011e, 0x70113, 0x80076, 0x80036, 0x900cc, + 0x7010b, 0x80066, 0x80026, 0x900ac, 0x80006, 0x80086, 0x80046, 0x900ec, + 0x70107, 0x8005e, 0x8001e, 0x9009c, 0x70117, 0x8007e, 0x8003e, 0x900dc, + 0x7010f, 0x8006e, 0x8002e, 0x900bc, 0x8000e, 0x8008e, 0x8004e, 0x900fc, + 0x70100, 0x80051, 0x80011, 0x80119, 0x70110, 0x80071, 0x80031, 0x900c2, + 0x70108, 0x80061, 0x80021, 0x900a2, 0x80001, 0x80081, 0x80041, 0x900e2, + 0x70104, 0x80059, 0x80019, 0x90092, 0x70114, 0x80079, 0x80039, 0x900d2, + 0x7010c, 0x80069, 0x80029, 0x900b2, 0x80009, 0x80089, 0x80049, 0x900f2, + 0x70102, 0x80055, 0x80015, 0x8011d, 0x70112, 0x80075, 0x80035, 0x900ca, + 0x7010a, 0x80065, 0x80025, 0x900aa, 0x80005, 0x80085, 0x80045, 0x900ea, + 0x70106, 0x8005d, 0x8001d, 0x9009a, 0x70116, 0x8007d, 0x8003d, 0x900da, + 0x7010e, 0x8006d, 0x8002d, 0x900ba, 0x8000d, 0x8008d, 0x8004d, 0x900fa, + 0x70101, 0x80053, 0x80013, 0x8011b, 0x70111, 0x80073, 0x80033, 0x900c6, + 0x70109, 0x80063, 0x80023, 0x900a6, 0x80003, 0x80083, 0x80043, 0x900e6, + 0x70105, 0x8005b, 0x8001b, 0x90096, 0x70115, 0x8007b, 0x8003b, 0x900d6, + 0x7010d, 0x8006b, 0x8002b, 0x900b6, 0x8000b, 0x8008b, 0x8004b, 0x900f6, + 0x70103, 0x80057, 0x80017, 0x8011f, 0x70113, 0x80077, 0x80037, 0x900ce, + 0x7010b, 0x80067, 0x80027, 0x900ae, 0x80007, 0x80087, 0x80047, 0x900ee, + 0x70107, 0x8005f, 0x8001f, 0x9009e, 0x70117, 0x8007f, 0x8003f, 0x900de, + 0x7010f, 0x8006f, 0x8002f, 0x900be, 0x8000f, 0x8008f, 0x8004f, 0x900fe, + 0x70100, 0x80050, 0x80010, 0x80118, 0x70110, 0x80070, 0x80030, 0x900c1, + 0x70108, 0x80060, 0x80020, 0x900a1, 0x80000, 0x80080, 0x80040, 0x900e1, + 0x70104, 0x80058, 0x80018, 0x90091, 0x70114, 0x80078, 0x80038, 0x900d1, + 0x7010c, 0x80068, 0x80028, 0x900b1, 0x80008, 0x80088, 0x80048, 0x900f1, + 0x70102, 0x80054, 0x80014, 0x8011c, 0x70112, 0x80074, 0x80034, 0x900c9, + 0x7010a, 0x80064, 0x80024, 0x900a9, 0x80004, 0x80084, 0x80044, 0x900e9, + 0x70106, 0x8005c, 0x8001c, 0x90099, 0x70116, 0x8007c, 0x8003c, 0x900d9, + 0x7010e, 0x8006c, 0x8002c, 0x900b9, 0x8000c, 0x8008c, 0x8004c, 0x900f9, + 0x70101, 0x80052, 0x80012, 0x8011a, 0x70111, 0x80072, 0x80032, 0x900c5, + 0x70109, 0x80062, 0x80022, 0x900a5, 0x80002, 0x80082, 0x80042, 0x900e5, + 0x70105, 0x8005a, 0x8001a, 0x90095, 0x70115, 0x8007a, 0x8003a, 0x900d5, + 0x7010d, 0x8006a, 0x8002a, 0x900b5, 0x8000a, 0x8008a, 0x8004a, 0x900f5, + 0x70103, 0x80056, 0x80016, 0x8011e, 0x70113, 0x80076, 0x80036, 0x900cd, + 0x7010b, 0x80066, 0x80026, 0x900ad, 0x80006, 0x80086, 0x80046, 0x900ed, + 0x70107, 0x8005e, 0x8001e, 0x9009d, 0x70117, 0x8007e, 0x8003e, 0x900dd, + 0x7010f, 0x8006e, 0x8002e, 0x900bd, 0x8000e, 0x8008e, 0x8004e, 0x900fd, + 0x70100, 0x80051, 0x80011, 0x80119, 0x70110, 0x80071, 0x80031, 0x900c3, + 0x70108, 0x80061, 0x80021, 0x900a3, 0x80001, 0x80081, 0x80041, 0x900e3, + 0x70104, 0x80059, 0x80019, 0x90093, 0x70114, 0x80079, 0x80039, 0x900d3, + 0x7010c, 0x80069, 0x80029, 0x900b3, 0x80009, 0x80089, 0x80049, 0x900f3, + 0x70102, 0x80055, 0x80015, 0x8011d, 0x70112, 0x80075, 0x80035, 0x900cb, + 0x7010a, 0x80065, 0x80025, 0x900ab, 0x80005, 0x80085, 0x80045, 0x900eb, + 0x70106, 0x8005d, 0x8001d, 0x9009b, 0x70116, 0x8007d, 0x8003d, 0x900db, + 0x7010e, 0x8006d, 0x8002d, 0x900bb, 0x8000d, 0x8008d, 0x8004d, 0x900fb, + 0x70101, 0x80053, 0x80013, 0x8011b, 0x70111, 0x80073, 0x80033, 0x900c7, + 0x70109, 0x80063, 0x80023, 0x900a7, 0x80003, 0x80083, 0x80043, 0x900e7, + 0x70105, 0x8005b, 0x8001b, 0x90097, 0x70115, 0x8007b, 0x8003b, 0x900d7, + 0x7010d, 0x8006b, 0x8002b, 0x900b7, 0x8000b, 0x8008b, 0x8004b, 0x900f7, + 0x70103, 0x80057, 0x80017, 0x8011f, 0x70113, 0x80077, 0x80037, 0x900cf, + 0x7010b, 0x80067, 0x80027, 0x900af, 0x80007, 0x80087, 0x80047, 0x900ef, + 0x70107, 0x8005f, 0x8001f, 0x9009f, 0x70117, 0x8007f, 0x8003f, 0x900df, + 0x7010f, 0x8006f, 0x8002f, 0x900bf, 0x8000f, 0x8008f, 0x8004f, 0x900ff + ]), 9]; + + var fixedDistCodeTab = [new Int32Array([ + 0x50000, 0x50010, 0x50008, 0x50018, 0x50004, 0x50014, 0x5000c, 0x5001c, + 0x50002, 0x50012, 0x5000a, 0x5001a, 0x50006, 0x50016, 0x5000e, 0x00000, + 0x50001, 0x50011, 0x50009, 0x50019, 0x50005, 0x50015, 0x5000d, 0x5001d, + 0x50003, 0x50013, 0x5000b, 0x5001b, 0x50007, 0x50017, 0x5000f, 0x00000 + ]), 5]; + + function FlateStream(str, maybeLength) { + this.str = str; + this.dict = str.dict; + + var cmf = str.getByte(); + var flg = str.getByte(); + if (cmf === -1 || flg === -1) { + error('Invalid header in flate stream: ' + cmf + ', ' + flg); + } + if ((cmf & 0x0f) !== 0x08) { + error('Unknown compression method in flate stream: ' + cmf + ', ' + flg); + } + if ((((cmf << 8) + flg) % 31) !== 0) { + error('Bad FCHECK in flate stream: ' + cmf + ', ' + flg); + } + if (flg & 0x20) { + error('FDICT bit set in flate stream: ' + cmf + ', ' + flg); + } + + this.codeSize = 0; + this.codeBuf = 0; + + DecodeStream.call(this, maybeLength); + } + + FlateStream.prototype = Object.create(DecodeStream.prototype); + + FlateStream.prototype.getBits = function FlateStream_getBits(bits) { + var str = this.str; + var codeSize = this.codeSize; + var codeBuf = this.codeBuf; + + var b; + while (codeSize < bits) { + if ((b = str.getByte()) === -1) { + error('Bad encoding in flate stream'); + } + codeBuf |= b << codeSize; + codeSize += 8; + } + b = codeBuf & ((1 << bits) - 1); + this.codeBuf = codeBuf >> bits; + this.codeSize = codeSize -= bits; + + return b; + }; + + FlateStream.prototype.getCode = function FlateStream_getCode(table) { + var str = this.str; + var codes = table[0]; + var maxLen = table[1]; + var codeSize = this.codeSize; + var codeBuf = this.codeBuf; + + var b; + while (codeSize < maxLen) { + if ((b = str.getByte()) === -1) { + // premature end of stream. code might however still be valid. + // codeSize < codeLen check below guards against incomplete codeVal. + break; + } + codeBuf |= (b << codeSize); + codeSize += 8; + } + var code = codes[codeBuf & ((1 << maxLen) - 1)]; + var codeLen = code >> 16; + var codeVal = code & 0xffff; + if (codeLen < 1 || codeSize < codeLen) { + error('Bad encoding in flate stream'); + } + this.codeBuf = (codeBuf >> codeLen); + this.codeSize = (codeSize - codeLen); + return codeVal; + }; + + FlateStream.prototype.generateHuffmanTable = + function flateStreamGenerateHuffmanTable(lengths) { + var n = lengths.length; + + // find max code length + var maxLen = 0; + var i; + for (i = 0; i < n; ++i) { + if (lengths[i] > maxLen) { + maxLen = lengths[i]; + } + } + + // build the table + var size = 1 << maxLen; + var codes = new Int32Array(size); + for (var len = 1, code = 0, skip = 2; + len <= maxLen; + ++len, code <<= 1, skip <<= 1) { + for (var val = 0; val < n; ++val) { + if (lengths[val] === len) { + // bit-reverse the code + var code2 = 0; + var t = code; + for (i = 0; i < len; ++i) { + code2 = (code2 << 1) | (t & 1); + t >>= 1; + } + + // fill the table entries + for (i = code2; i < size; i += skip) { + codes[i] = (len << 16) | val; + } + ++code; + } + } + } + + return [codes, maxLen]; + }; + + FlateStream.prototype.readBlock = function FlateStream_readBlock() { + var buffer, len; + var str = this.str; + // read block header + var hdr = this.getBits(3); + if (hdr & 1) { + this.eof = true; + } + hdr >>= 1; + + if (hdr === 0) { // uncompressed block + var b; + + if ((b = str.getByte()) === -1) { + error('Bad block header in flate stream'); + } + var blockLen = b; + if ((b = str.getByte()) === -1) { + error('Bad block header in flate stream'); + } + blockLen |= (b << 8); + if ((b = str.getByte()) === -1) { + error('Bad block header in flate stream'); + } + var check = b; + if ((b = str.getByte()) === -1) { + error('Bad block header in flate stream'); + } + check |= (b << 8); + if (check !== (~blockLen & 0xffff) && + (blockLen !== 0 || check !== 0)) { + // Ignoring error for bad "empty" block (see issue 1277) + error('Bad uncompressed block length in flate stream'); + } + + this.codeBuf = 0; + this.codeSize = 0; + + var bufferLength = this.bufferLength; + buffer = this.ensureBuffer(bufferLength + blockLen); + var end = bufferLength + blockLen; + this.bufferLength = end; + if (blockLen === 0) { + if (str.peekByte() === -1) { + this.eof = true; + } + } else { + for (var n = bufferLength; n < end; ++n) { + if ((b = str.getByte()) === -1) { + this.eof = true; + break; + } + buffer[n] = b; + } + } + return; + } + + var litCodeTable; + var distCodeTable; + if (hdr === 1) { // compressed block, fixed codes + litCodeTable = fixedLitCodeTab; + distCodeTable = fixedDistCodeTab; + } else if (hdr === 2) { // compressed block, dynamic codes + var numLitCodes = this.getBits(5) + 257; + var numDistCodes = this.getBits(5) + 1; + var numCodeLenCodes = this.getBits(4) + 4; + + // build the code lengths code table + var codeLenCodeLengths = new Uint8Array(codeLenCodeMap.length); + + var i; + for (i = 0; i < numCodeLenCodes; ++i) { + codeLenCodeLengths[codeLenCodeMap[i]] = this.getBits(3); + } + var codeLenCodeTab = this.generateHuffmanTable(codeLenCodeLengths); + + // build the literal and distance code tables + len = 0; + i = 0; + var codes = numLitCodes + numDistCodes; + var codeLengths = new Uint8Array(codes); + var bitsLength, bitsOffset, what; + while (i < codes) { + var code = this.getCode(codeLenCodeTab); + if (code === 16) { + bitsLength = 2; bitsOffset = 3; what = len; + } else if (code === 17) { + bitsLength = 3; bitsOffset = 3; what = (len = 0); + } else if (code === 18) { + bitsLength = 7; bitsOffset = 11; what = (len = 0); + } else { + codeLengths[i++] = len = code; + continue; + } + + var repeatLength = this.getBits(bitsLength) + bitsOffset; + while (repeatLength-- > 0) { + codeLengths[i++] = what; + } + } + + litCodeTable = + this.generateHuffmanTable(codeLengths.subarray(0, numLitCodes)); + distCodeTable = + this.generateHuffmanTable(codeLengths.subarray(numLitCodes, codes)); + } else { + error('Unknown block type in flate stream'); + } + + buffer = this.buffer; + var limit = buffer ? buffer.length : 0; + var pos = this.bufferLength; + while (true) { + var code1 = this.getCode(litCodeTable); + if (code1 < 256) { + if (pos + 1 >= limit) { + buffer = this.ensureBuffer(pos + 1); + limit = buffer.length; + } + buffer[pos++] = code1; + continue; + } + if (code1 === 256) { + this.bufferLength = pos; + return; + } + code1 -= 257; + code1 = lengthDecode[code1]; + var code2 = code1 >> 16; + if (code2 > 0) { + code2 = this.getBits(code2); + } + len = (code1 & 0xffff) + code2; + code1 = this.getCode(distCodeTable); + code1 = distDecode[code1]; + code2 = code1 >> 16; + if (code2 > 0) { + code2 = this.getBits(code2); + } + var dist = (code1 & 0xffff) + code2; + if (pos + len >= limit) { + buffer = this.ensureBuffer(pos + len); + limit = buffer.length; + } + for (var k = 0; k < len; ++k, ++pos) { + buffer[pos] = buffer[pos - dist]; + } + } + }; + + return FlateStream; +})(); + +var PredictorStream = (function PredictorStreamClosure() { + function PredictorStream(str, maybeLength, params) { + var predictor = this.predictor = params.get('Predictor') || 1; + + if (predictor <= 1) { + return str; // no prediction + } + if (predictor !== 2 && (predictor < 10 || predictor > 15)) { + error('Unsupported predictor: ' + predictor); + } + + if (predictor === 2) { + this.readBlock = this.readBlockTiff; + } else { + this.readBlock = this.readBlockPng; + } + + this.str = str; + this.dict = str.dict; + + var colors = this.colors = params.get('Colors') || 1; + var bits = this.bits = params.get('BitsPerComponent') || 8; + var columns = this.columns = params.get('Columns') || 1; + + this.pixBytes = (colors * bits + 7) >> 3; + this.rowBytes = (columns * colors * bits + 7) >> 3; + + DecodeStream.call(this, maybeLength); + return this; + } + + PredictorStream.prototype = Object.create(DecodeStream.prototype); + + PredictorStream.prototype.readBlockTiff = + function predictorStreamReadBlockTiff() { + var rowBytes = this.rowBytes; + + var bufferLength = this.bufferLength; + var buffer = this.ensureBuffer(bufferLength + rowBytes); + + var bits = this.bits; + var colors = this.colors; + + var rawBytes = this.str.getBytes(rowBytes); + this.eof = !rawBytes.length; + if (this.eof) { + return; + } + + var inbuf = 0, outbuf = 0; + var inbits = 0, outbits = 0; + var pos = bufferLength; + var i; + + if (bits === 1) { + for (i = 0; i < rowBytes; ++i) { + var c = rawBytes[i]; + inbuf = (inbuf << 8) | c; + // bitwise addition is exclusive or + // first shift inbuf and then add + buffer[pos++] = (c ^ (inbuf >> colors)) & 0xFF; + // truncate inbuf (assumes colors < 16) + inbuf &= 0xFFFF; + } + } else if (bits === 8) { + for (i = 0; i < colors; ++i) { + buffer[pos++] = rawBytes[i]; + } + for (; i < rowBytes; ++i) { + buffer[pos] = buffer[pos - colors] + rawBytes[i]; + pos++; + } + } else { + var compArray = new Uint8Array(colors + 1); + var bitMask = (1 << bits) - 1; + var j = 0, k = bufferLength; + var columns = this.columns; + for (i = 0; i < columns; ++i) { + for (var kk = 0; kk < colors; ++kk) { + if (inbits < bits) { + inbuf = (inbuf << 8) | (rawBytes[j++] & 0xFF); + inbits += 8; + } + compArray[kk] = (compArray[kk] + + (inbuf >> (inbits - bits))) & bitMask; + inbits -= bits; + outbuf = (outbuf << bits) | compArray[kk]; + outbits += bits; + if (outbits >= 8) { + buffer[k++] = (outbuf >> (outbits - 8)) & 0xFF; + outbits -= 8; + } + } + } + if (outbits > 0) { + buffer[k++] = (outbuf << (8 - outbits)) + + (inbuf & ((1 << (8 - outbits)) - 1)); + } + } + this.bufferLength += rowBytes; + }; + + PredictorStream.prototype.readBlockPng = + function predictorStreamReadBlockPng() { + + var rowBytes = this.rowBytes; + var pixBytes = this.pixBytes; + + var predictor = this.str.getByte(); + var rawBytes = this.str.getBytes(rowBytes); + this.eof = !rawBytes.length; + if (this.eof) { + return; + } + + var bufferLength = this.bufferLength; + var buffer = this.ensureBuffer(bufferLength + rowBytes); + + var prevRow = buffer.subarray(bufferLength - rowBytes, bufferLength); + if (prevRow.length === 0) { + prevRow = new Uint8Array(rowBytes); + } + + var i, j = bufferLength, up, c; + switch (predictor) { + case 0: + for (i = 0; i < rowBytes; ++i) { + buffer[j++] = rawBytes[i]; + } + break; + case 1: + for (i = 0; i < pixBytes; ++i) { + buffer[j++] = rawBytes[i]; + } + for (; i < rowBytes; ++i) { + buffer[j] = (buffer[j - pixBytes] + rawBytes[i]) & 0xFF; + j++; + } + break; + case 2: + for (i = 0; i < rowBytes; ++i) { + buffer[j++] = (prevRow[i] + rawBytes[i]) & 0xFF; + } + break; + case 3: + for (i = 0; i < pixBytes; ++i) { + buffer[j++] = (prevRow[i] >> 1) + rawBytes[i]; + } + for (; i < rowBytes; ++i) { + buffer[j] = (((prevRow[i] + buffer[j - pixBytes]) >> 1) + + rawBytes[i]) & 0xFF; + j++; + } + break; + case 4: + // we need to save the up left pixels values. the simplest way + // is to create a new buffer + for (i = 0; i < pixBytes; ++i) { + up = prevRow[i]; + c = rawBytes[i]; + buffer[j++] = up + c; + } + for (; i < rowBytes; ++i) { + up = prevRow[i]; + var upLeft = prevRow[i - pixBytes]; + var left = buffer[j - pixBytes]; + var p = left + up - upLeft; + + var pa = p - left; + if (pa < 0) { + pa = -pa; + } + var pb = p - up; + if (pb < 0) { + pb = -pb; + } + var pc = p - upLeft; + if (pc < 0) { + pc = -pc; + } + + c = rawBytes[i]; + if (pa <= pb && pa <= pc) { + buffer[j++] = left + c; + } else if (pb <= pc) { + buffer[j++] = up + c; + } else { + buffer[j++] = upLeft + c; + } + } + break; + default: + error('Unsupported predictor: ' + predictor); + } + this.bufferLength += rowBytes; + }; + + return PredictorStream; +})(); + +/** + * Depending on the type of JPEG a JpegStream is handled in different ways. For + * JPEG's that are supported natively such as DeviceGray and DeviceRGB the image + * data is stored and then loaded by the browser. For unsupported JPEG's we use + * a library to decode these images and the stream behaves like all the other + * DecodeStreams. + */ +var JpegStream = (function JpegStreamClosure() { + function JpegStream(stream, maybeLength, dict, xref) { + // Some images may contain 'junk' before the SOI (start-of-image) marker. + // Note: this seems to mainly affect inline images. + var ch; + while ((ch = stream.getByte()) !== -1) { + if (ch === 0xFF) { // Find the first byte of the SOI marker (0xFFD8). + stream.skip(-1); // Reset the stream position to the SOI. + break; + } + } + this.stream = stream; + this.maybeLength = maybeLength; + this.dict = dict; + + DecodeStream.call(this, maybeLength); + } + + JpegStream.prototype = Object.create(DecodeStream.prototype); + + Object.defineProperty(JpegStream.prototype, 'bytes', { + get: function JpegStream_bytes() { + // If this.maybeLength is null, we'll get the entire stream. + return shadow(this, 'bytes', this.stream.getBytes(this.maybeLength)); + }, + configurable: true + }); + + JpegStream.prototype.ensureBuffer = function JpegStream_ensureBuffer(req) { + if (this.bufferLength) { + return; + } + try { + var jpegImage = new JpegImage(); + + // checking if values needs to be transformed before conversion + if (this.forceRGB && this.dict && isArray(this.dict.get('Decode'))) { + var decodeArr = this.dict.get('Decode'); + var bitsPerComponent = this.dict.get('BitsPerComponent') || 8; + var decodeArrLength = decodeArr.length; + var transform = new Int32Array(decodeArrLength); + var transformNeeded = false; + var maxValue = (1 << bitsPerComponent) - 1; + for (var i = 0; i < decodeArrLength; i += 2) { + transform[i] = ((decodeArr[i + 1] - decodeArr[i]) * 256) | 0; + transform[i + 1] = (decodeArr[i] * maxValue) | 0; + if (transform[i] !== 256 || transform[i + 1] !== 0) { + transformNeeded = true; + } + } + if (transformNeeded) { + jpegImage.decodeTransform = transform; + } + } + + jpegImage.parse(this.bytes); + var data = jpegImage.getData(this.drawWidth, this.drawHeight, + this.forceRGB); + this.buffer = data; + this.bufferLength = data.length; + this.eof = true; + } catch (e) { + error('JPEG error: ' + e); + } + }; + + JpegStream.prototype.getBytes = function JpegStream_getBytes(length) { + this.ensureBuffer(); + return this.buffer; + }; + + JpegStream.prototype.getIR = function JpegStream_getIR() { + return PDFJS.createObjectURL(this.bytes, 'image/jpeg'); + }; + /** + * Checks if the image can be decoded and displayed by the browser without any + * further processing such as color space conversions. + */ + JpegStream.prototype.isNativelySupported = + function JpegStream_isNativelySupported(xref, res) { + var cs = ColorSpace.parse(this.dict.get('ColorSpace', 'CS'), xref, res); + return cs.name === 'DeviceGray' || cs.name === 'DeviceRGB'; + }; + /** + * Checks if the image can be decoded by the browser. + */ + JpegStream.prototype.isNativelyDecodable = + function JpegStream_isNativelyDecodable(xref, res) { + var cs = ColorSpace.parse(this.dict.get('ColorSpace', 'CS'), xref, res); + var numComps = cs.numComps; + return numComps === 1 || numComps === 3; + }; + + return JpegStream; +})(); + +/** + * For JPEG 2000's we use a library to decode these images and + * the stream behaves like all the other DecodeStreams. + */ +var JpxStream = (function JpxStreamClosure() { + function JpxStream(stream, maybeLength, dict) { + this.stream = stream; + this.maybeLength = maybeLength; + this.dict = dict; + + DecodeStream.call(this, maybeLength); + } + + JpxStream.prototype = Object.create(DecodeStream.prototype); + + Object.defineProperty(JpxStream.prototype, 'bytes', { + get: function JpxStream_bytes() { + // If this.maybeLength is null, we'll get the entire stream. + return shadow(this, 'bytes', this.stream.getBytes(this.maybeLength)); + }, + configurable: true + }); + + JpxStream.prototype.ensureBuffer = function JpxStream_ensureBuffer(req) { + if (this.bufferLength) { + return; + } + + var jpxImage = new JpxImage(); + jpxImage.parse(this.bytes); + + var width = jpxImage.width; + var height = jpxImage.height; + var componentsCount = jpxImage.componentsCount; + var tileCount = jpxImage.tiles.length; + if (tileCount === 1) { + this.buffer = jpxImage.tiles[0].items; + } else { + var data = new Uint8Array(width * height * componentsCount); + + for (var k = 0; k < tileCount; k++) { + var tileComponents = jpxImage.tiles[k]; + var tileWidth = tileComponents.width; + var tileHeight = tileComponents.height; + var tileLeft = tileComponents.left; + var tileTop = tileComponents.top; + + var src = tileComponents.items; + var srcPosition = 0; + var dataPosition = (width * tileTop + tileLeft) * componentsCount; + var imgRowSize = width * componentsCount; + var tileRowSize = tileWidth * componentsCount; + + for (var j = 0; j < tileHeight; j++) { + var rowBytes = src.subarray(srcPosition, srcPosition + tileRowSize); + data.set(rowBytes, dataPosition); + srcPosition += tileRowSize; + dataPosition += imgRowSize; + } + } + this.buffer = data; + } + this.bufferLength = this.buffer.length; + this.eof = true; + }; + + return JpxStream; +})(); + +/** + * For JBIG2's we use a library to decode these images and + * the stream behaves like all the other DecodeStreams. + */ +var Jbig2Stream = (function Jbig2StreamClosure() { + function Jbig2Stream(stream, maybeLength, dict) { + this.stream = stream; + this.maybeLength = maybeLength; + this.dict = dict; + + DecodeStream.call(this, maybeLength); + } + + Jbig2Stream.prototype = Object.create(DecodeStream.prototype); + + Object.defineProperty(Jbig2Stream.prototype, 'bytes', { + get: function Jbig2Stream_bytes() { + // If this.maybeLength is null, we'll get the entire stream. + return shadow(this, 'bytes', this.stream.getBytes(this.maybeLength)); + }, + configurable: true + }); + + Jbig2Stream.prototype.ensureBuffer = function Jbig2Stream_ensureBuffer(req) { + if (this.bufferLength) { + return; + } + + var jbig2Image = new Jbig2Image(); + + var chunks = [], xref = this.dict.xref; + var decodeParams = xref.fetchIfRef(this.dict.get('DecodeParms')); + + // According to the PDF specification, DecodeParms can be either + // a dictionary, or an array whose elements are dictionaries. + if (isArray(decodeParams)) { + if (decodeParams.length > 1) { + warn('JBIG2 - \'DecodeParms\' array with multiple elements ' + + 'not supported.'); + } + decodeParams = xref.fetchIfRef(decodeParams[0]); + } + if (decodeParams && decodeParams.has('JBIG2Globals')) { + var globalsStream = decodeParams.get('JBIG2Globals'); + var globals = globalsStream.getBytes(); + chunks.push({data: globals, start: 0, end: globals.length}); + } + chunks.push({data: this.bytes, start: 0, end: this.bytes.length}); + var data = jbig2Image.parseChunks(chunks); + var dataLength = data.length; + + // JBIG2 had black as 1 and white as 0, inverting the colors + for (var i = 0; i < dataLength; i++) { + data[i] ^= 0xFF; + } + + this.buffer = data; + this.bufferLength = dataLength; + this.eof = true; + }; + + return Jbig2Stream; +})(); + +var DecryptStream = (function DecryptStreamClosure() { + function DecryptStream(str, maybeLength, decrypt) { + this.str = str; + this.dict = str.dict; + this.decrypt = decrypt; + this.nextChunk = null; + this.initialized = false; + + DecodeStream.call(this, maybeLength); + } + + var chunkSize = 512; + + DecryptStream.prototype = Object.create(DecodeStream.prototype); + + DecryptStream.prototype.readBlock = function DecryptStream_readBlock() { + var chunk; + if (this.initialized) { + chunk = this.nextChunk; + } else { + chunk = this.str.getBytes(chunkSize); + this.initialized = true; + } + if (!chunk || chunk.length === 0) { + this.eof = true; + return; + } + this.nextChunk = this.str.getBytes(chunkSize); + var hasMoreData = this.nextChunk && this.nextChunk.length > 0; + + var decrypt = this.decrypt; + chunk = decrypt(chunk, !hasMoreData); + + var bufferLength = this.bufferLength; + var i, n = chunk.length; + var buffer = this.ensureBuffer(bufferLength + n); + for (i = 0; i < n; i++) { + buffer[bufferLength++] = chunk[i]; + } + this.bufferLength = bufferLength; + }; + + return DecryptStream; +})(); + +var Ascii85Stream = (function Ascii85StreamClosure() { + function Ascii85Stream(str, maybeLength) { + this.str = str; + this.dict = str.dict; + this.input = new Uint8Array(5); + + // Most streams increase in size when decoded, but Ascii85 streams + // typically shrink by ~20%. + if (maybeLength) { + maybeLength = 0.8 * maybeLength; + } + DecodeStream.call(this, maybeLength); + } + + Ascii85Stream.prototype = Object.create(DecodeStream.prototype); + + Ascii85Stream.prototype.readBlock = function Ascii85Stream_readBlock() { + var TILDA_CHAR = 0x7E; // '~' + var Z_LOWER_CHAR = 0x7A; // 'z' + var EOF = -1; + + var str = this.str; + + var c = str.getByte(); + while (Lexer.isSpace(c)) { + c = str.getByte(); + } + + if (c === EOF || c === TILDA_CHAR) { + this.eof = true; + return; + } + + var bufferLength = this.bufferLength, buffer; + var i; + + // special code for z + if (c === Z_LOWER_CHAR) { + buffer = this.ensureBuffer(bufferLength + 4); + for (i = 0; i < 4; ++i) { + buffer[bufferLength + i] = 0; + } + this.bufferLength += 4; + } else { + var input = this.input; + input[0] = c; + for (i = 1; i < 5; ++i) { + c = str.getByte(); + while (Lexer.isSpace(c)) { + c = str.getByte(); + } + + input[i] = c; + + if (c === EOF || c === TILDA_CHAR) { + break; + } + } + buffer = this.ensureBuffer(bufferLength + i - 1); + this.bufferLength += i - 1; + + // partial ending; + if (i < 5) { + for (; i < 5; ++i) { + input[i] = 0x21 + 84; + } + this.eof = true; + } + var t = 0; + for (i = 0; i < 5; ++i) { + t = t * 85 + (input[i] - 0x21); + } + + for (i = 3; i >= 0; --i) { + buffer[bufferLength + i] = t & 0xFF; + t >>= 8; + } + } + }; + + return Ascii85Stream; +})(); + +var AsciiHexStream = (function AsciiHexStreamClosure() { + function AsciiHexStream(str, maybeLength) { + this.str = str; + this.dict = str.dict; + + this.firstDigit = -1; + + // Most streams increase in size when decoded, but AsciiHex streams shrink + // by 50%. + if (maybeLength) { + maybeLength = 0.5 * maybeLength; + } + DecodeStream.call(this, maybeLength); + } + + AsciiHexStream.prototype = Object.create(DecodeStream.prototype); + + AsciiHexStream.prototype.readBlock = function AsciiHexStream_readBlock() { + var UPSTREAM_BLOCK_SIZE = 8000; + var bytes = this.str.getBytes(UPSTREAM_BLOCK_SIZE); + if (!bytes.length) { + this.eof = true; + return; + } + + var maxDecodeLength = (bytes.length + 1) >> 1; + var buffer = this.ensureBuffer(this.bufferLength + maxDecodeLength); + var bufferLength = this.bufferLength; + + var firstDigit = this.firstDigit; + for (var i = 0, ii = bytes.length; i < ii; i++) { + var ch = bytes[i], digit; + if (ch >= 0x30 && ch <= 0x39) { // '0'-'9' + digit = ch & 0x0F; + } else if ((ch >= 0x41 && ch <= 0x46) || (ch >= 0x61 && ch <= 0x66)) { + // 'A'-'Z', 'a'-'z' + digit = (ch & 0x0F) + 9; + } else if (ch === 0x3E) { // '>' + this.eof = true; + break; + } else { // probably whitespace + continue; // ignoring + } + if (firstDigit < 0) { + firstDigit = digit; + } else { + buffer[bufferLength++] = (firstDigit << 4) | digit; + firstDigit = -1; + } + } + if (firstDigit >= 0 && this.eof) { + // incomplete byte + buffer[bufferLength++] = (firstDigit << 4); + firstDigit = -1; + } + this.firstDigit = firstDigit; + this.bufferLength = bufferLength; + }; + + return AsciiHexStream; +})(); + +var RunLengthStream = (function RunLengthStreamClosure() { + function RunLengthStream(str, maybeLength) { + this.str = str; + this.dict = str.dict; + + DecodeStream.call(this, maybeLength); + } + + RunLengthStream.prototype = Object.create(DecodeStream.prototype); + + RunLengthStream.prototype.readBlock = function RunLengthStream_readBlock() { + // The repeatHeader has following format. The first byte defines type of run + // and amount of bytes to repeat/copy: n = 0 through 127 - copy next n bytes + // (in addition to the second byte from the header), n = 129 through 255 - + // duplicate the second byte from the header (257 - n) times, n = 128 - end. + var repeatHeader = this.str.getBytes(2); + if (!repeatHeader || repeatHeader.length < 2 || repeatHeader[0] === 128) { + this.eof = true; + return; + } + + var buffer; + var bufferLength = this.bufferLength; + var n = repeatHeader[0]; + if (n < 128) { + // copy n bytes + buffer = this.ensureBuffer(bufferLength + n + 1); + buffer[bufferLength++] = repeatHeader[1]; + if (n > 0) { + var source = this.str.getBytes(n); + buffer.set(source, bufferLength); + bufferLength += n; + } + } else { + n = 257 - n; + var b = repeatHeader[1]; + buffer = this.ensureBuffer(bufferLength + n + 1); + for (var i = 0; i < n; i++) { + buffer[bufferLength++] = b; + } + } + this.bufferLength = bufferLength; + }; + + return RunLengthStream; +})(); + +var CCITTFaxStream = (function CCITTFaxStreamClosure() { + + var ccittEOL = -2; + var twoDimPass = 0; + var twoDimHoriz = 1; + var twoDimVert0 = 2; + var twoDimVertR1 = 3; + var twoDimVertL1 = 4; + var twoDimVertR2 = 5; + var twoDimVertL2 = 6; + var twoDimVertR3 = 7; + var twoDimVertL3 = 8; + + var twoDimTable = [ + [-1, -1], [-1, -1], // 000000x + [7, twoDimVertL3], // 0000010 + [7, twoDimVertR3], // 0000011 + [6, twoDimVertL2], [6, twoDimVertL2], // 000010x + [6, twoDimVertR2], [6, twoDimVertR2], // 000011x + [4, twoDimPass], [4, twoDimPass], // 0001xxx + [4, twoDimPass], [4, twoDimPass], + [4, twoDimPass], [4, twoDimPass], + [4, twoDimPass], [4, twoDimPass], + [3, twoDimHoriz], [3, twoDimHoriz], // 001xxxx + [3, twoDimHoriz], [3, twoDimHoriz], + [3, twoDimHoriz], [3, twoDimHoriz], + [3, twoDimHoriz], [3, twoDimHoriz], + [3, twoDimHoriz], [3, twoDimHoriz], + [3, twoDimHoriz], [3, twoDimHoriz], + [3, twoDimHoriz], [3, twoDimHoriz], + [3, twoDimHoriz], [3, twoDimHoriz], + [3, twoDimVertL1], [3, twoDimVertL1], // 010xxxx + [3, twoDimVertL1], [3, twoDimVertL1], + [3, twoDimVertL1], [3, twoDimVertL1], + [3, twoDimVertL1], [3, twoDimVertL1], + [3, twoDimVertL1], [3, twoDimVertL1], + [3, twoDimVertL1], [3, twoDimVertL1], + [3, twoDimVertL1], [3, twoDimVertL1], + [3, twoDimVertL1], [3, twoDimVertL1], + [3, twoDimVertR1], [3, twoDimVertR1], // 011xxxx + [3, twoDimVertR1], [3, twoDimVertR1], + [3, twoDimVertR1], [3, twoDimVertR1], + [3, twoDimVertR1], [3, twoDimVertR1], + [3, twoDimVertR1], [3, twoDimVertR1], + [3, twoDimVertR1], [3, twoDimVertR1], + [3, twoDimVertR1], [3, twoDimVertR1], + [3, twoDimVertR1], [3, twoDimVertR1], + [1, twoDimVert0], [1, twoDimVert0], // 1xxxxxx + [1, twoDimVert0], [1, twoDimVert0], + [1, twoDimVert0], [1, twoDimVert0], + [1, twoDimVert0], [1, twoDimVert0], + [1, twoDimVert0], [1, twoDimVert0], + [1, twoDimVert0], [1, twoDimVert0], + [1, twoDimVert0], [1, twoDimVert0], + [1, twoDimVert0], [1, twoDimVert0], + [1, twoDimVert0], [1, twoDimVert0], + [1, twoDimVert0], [1, twoDimVert0], + [1, twoDimVert0], [1, twoDimVert0], + [1, twoDimVert0], [1, twoDimVert0], + [1, twoDimVert0], [1, twoDimVert0], + [1, twoDimVert0], [1, twoDimVert0], + [1, twoDimVert0], [1, twoDimVert0], + [1, twoDimVert0], [1, twoDimVert0], + [1, twoDimVert0], [1, twoDimVert0], + [1, twoDimVert0], [1, twoDimVert0], + [1, twoDimVert0], [1, twoDimVert0], + [1, twoDimVert0], [1, twoDimVert0], + [1, twoDimVert0], [1, twoDimVert0], + [1, twoDimVert0], [1, twoDimVert0], + [1, twoDimVert0], [1, twoDimVert0], + [1, twoDimVert0], [1, twoDimVert0], + [1, twoDimVert0], [1, twoDimVert0], + [1, twoDimVert0], [1, twoDimVert0], + [1, twoDimVert0], [1, twoDimVert0], + [1, twoDimVert0], [1, twoDimVert0], + [1, twoDimVert0], [1, twoDimVert0], + [1, twoDimVert0], [1, twoDimVert0], + [1, twoDimVert0], [1, twoDimVert0], + [1, twoDimVert0], [1, twoDimVert0] + ]; + + var whiteTable1 = [ + [-1, -1], // 00000 + [12, ccittEOL], // 00001 + [-1, -1], [-1, -1], // 0001x + [-1, -1], [-1, -1], [-1, -1], [-1, -1], // 001xx + [-1, -1], [-1, -1], [-1, -1], [-1, -1], // 010xx + [-1, -1], [-1, -1], [-1, -1], [-1, -1], // 011xx + [11, 1792], [11, 1792], // 1000x + [12, 1984], // 10010 + [12, 2048], // 10011 + [12, 2112], // 10100 + [12, 2176], // 10101 + [12, 2240], // 10110 + [12, 2304], // 10111 + [11, 1856], [11, 1856], // 1100x + [11, 1920], [11, 1920], // 1101x + [12, 2368], // 11100 + [12, 2432], // 11101 + [12, 2496], // 11110 + [12, 2560] // 11111 + ]; + + var whiteTable2 = [ + [-1, -1], [-1, -1], [-1, -1], [-1, -1], // 0000000xx + [8, 29], [8, 29], // 00000010x + [8, 30], [8, 30], // 00000011x + [8, 45], [8, 45], // 00000100x + [8, 46], [8, 46], // 00000101x + [7, 22], [7, 22], [7, 22], [7, 22], // 0000011xx + [7, 23], [7, 23], [7, 23], [7, 23], // 0000100xx + [8, 47], [8, 47], // 00001010x + [8, 48], [8, 48], // 00001011x + [6, 13], [6, 13], [6, 13], [6, 13], // 000011xxx + [6, 13], [6, 13], [6, 13], [6, 13], + [7, 20], [7, 20], [7, 20], [7, 20], // 0001000xx + [8, 33], [8, 33], // 00010010x + [8, 34], [8, 34], // 00010011x + [8, 35], [8, 35], // 00010100x + [8, 36], [8, 36], // 00010101x + [8, 37], [8, 37], // 00010110x + [8, 38], [8, 38], // 00010111x + [7, 19], [7, 19], [7, 19], [7, 19], // 0001100xx + [8, 31], [8, 31], // 00011010x + [8, 32], [8, 32], // 00011011x + [6, 1], [6, 1], [6, 1], [6, 1], // 000111xxx + [6, 1], [6, 1], [6, 1], [6, 1], + [6, 12], [6, 12], [6, 12], [6, 12], // 001000xxx + [6, 12], [6, 12], [6, 12], [6, 12], + [8, 53], [8, 53], // 00100100x + [8, 54], [8, 54], // 00100101x + [7, 26], [7, 26], [7, 26], [7, 26], // 0010011xx + [8, 39], [8, 39], // 00101000x + [8, 40], [8, 40], // 00101001x + [8, 41], [8, 41], // 00101010x + [8, 42], [8, 42], // 00101011x + [8, 43], [8, 43], // 00101100x + [8, 44], [8, 44], // 00101101x + [7, 21], [7, 21], [7, 21], [7, 21], // 0010111xx + [7, 28], [7, 28], [7, 28], [7, 28], // 0011000xx + [8, 61], [8, 61], // 00110010x + [8, 62], [8, 62], // 00110011x + [8, 63], [8, 63], // 00110100x + [8, 0], [8, 0], // 00110101x + [8, 320], [8, 320], // 00110110x + [8, 384], [8, 384], // 00110111x + [5, 10], [5, 10], [5, 10], [5, 10], // 00111xxxx + [5, 10], [5, 10], [5, 10], [5, 10], + [5, 10], [5, 10], [5, 10], [5, 10], + [5, 10], [5, 10], [5, 10], [5, 10], + [5, 11], [5, 11], [5, 11], [5, 11], // 01000xxxx + [5, 11], [5, 11], [5, 11], [5, 11], + [5, 11], [5, 11], [5, 11], [5, 11], + [5, 11], [5, 11], [5, 11], [5, 11], + [7, 27], [7, 27], [7, 27], [7, 27], // 0100100xx + [8, 59], [8, 59], // 01001010x + [8, 60], [8, 60], // 01001011x + [9, 1472], // 010011000 + [9, 1536], // 010011001 + [9, 1600], // 010011010 + [9, 1728], // 010011011 + [7, 18], [7, 18], [7, 18], [7, 18], // 0100111xx + [7, 24], [7, 24], [7, 24], [7, 24], // 0101000xx + [8, 49], [8, 49], // 01010010x + [8, 50], [8, 50], // 01010011x + [8, 51], [8, 51], // 01010100x + [8, 52], [8, 52], // 01010101x + [7, 25], [7, 25], [7, 25], [7, 25], // 0101011xx + [8, 55], [8, 55], // 01011000x + [8, 56], [8, 56], // 01011001x + [8, 57], [8, 57], // 01011010x + [8, 58], [8, 58], // 01011011x + [6, 192], [6, 192], [6, 192], [6, 192], // 010111xxx + [6, 192], [6, 192], [6, 192], [6, 192], + [6, 1664], [6, 1664], [6, 1664], [6, 1664], // 011000xxx + [6, 1664], [6, 1664], [6, 1664], [6, 1664], + [8, 448], [8, 448], // 01100100x + [8, 512], [8, 512], // 01100101x + [9, 704], // 011001100 + [9, 768], // 011001101 + [8, 640], [8, 640], // 01100111x + [8, 576], [8, 576], // 01101000x + [9, 832], // 011010010 + [9, 896], // 011010011 + [9, 960], // 011010100 + [9, 1024], // 011010101 + [9, 1088], // 011010110 + [9, 1152], // 011010111 + [9, 1216], // 011011000 + [9, 1280], // 011011001 + [9, 1344], // 011011010 + [9, 1408], // 011011011 + [7, 256], [7, 256], [7, 256], [7, 256], // 0110111xx + [4, 2], [4, 2], [4, 2], [4, 2], // 0111xxxxx + [4, 2], [4, 2], [4, 2], [4, 2], + [4, 2], [4, 2], [4, 2], [4, 2], + [4, 2], [4, 2], [4, 2], [4, 2], + [4, 2], [4, 2], [4, 2], [4, 2], + [4, 2], [4, 2], [4, 2], [4, 2], + [4, 2], [4, 2], [4, 2], [4, 2], + [4, 2], [4, 2], [4, 2], [4, 2], + [4, 3], [4, 3], [4, 3], [4, 3], // 1000xxxxx + [4, 3], [4, 3], [4, 3], [4, 3], + [4, 3], [4, 3], [4, 3], [4, 3], + [4, 3], [4, 3], [4, 3], [4, 3], + [4, 3], [4, 3], [4, 3], [4, 3], + [4, 3], [4, 3], [4, 3], [4, 3], + [4, 3], [4, 3], [4, 3], [4, 3], + [4, 3], [4, 3], [4, 3], [4, 3], + [5, 128], [5, 128], [5, 128], [5, 128], // 10010xxxx + [5, 128], [5, 128], [5, 128], [5, 128], + [5, 128], [5, 128], [5, 128], [5, 128], + [5, 128], [5, 128], [5, 128], [5, 128], + [5, 8], [5, 8], [5, 8], [5, 8], // 10011xxxx + [5, 8], [5, 8], [5, 8], [5, 8], + [5, 8], [5, 8], [5, 8], [5, 8], + [5, 8], [5, 8], [5, 8], [5, 8], + [5, 9], [5, 9], [5, 9], [5, 9], // 10100xxxx + [5, 9], [5, 9], [5, 9], [5, 9], + [5, 9], [5, 9], [5, 9], [5, 9], + [5, 9], [5, 9], [5, 9], [5, 9], + [6, 16], [6, 16], [6, 16], [6, 16], // 101010xxx + [6, 16], [6, 16], [6, 16], [6, 16], + [6, 17], [6, 17], [6, 17], [6, 17], // 101011xxx + [6, 17], [6, 17], [6, 17], [6, 17], + [4, 4], [4, 4], [4, 4], [4, 4], // 1011xxxxx + [4, 4], [4, 4], [4, 4], [4, 4], + [4, 4], [4, 4], [4, 4], [4, 4], + [4, 4], [4, 4], [4, 4], [4, 4], + [4, 4], [4, 4], [4, 4], [4, 4], + [4, 4], [4, 4], [4, 4], [4, 4], + [4, 4], [4, 4], [4, 4], [4, 4], + [4, 4], [4, 4], [4, 4], [4, 4], + [4, 5], [4, 5], [4, 5], [4, 5], // 1100xxxxx + [4, 5], [4, 5], [4, 5], [4, 5], + [4, 5], [4, 5], [4, 5], [4, 5], + [4, 5], [4, 5], [4, 5], [4, 5], + [4, 5], [4, 5], [4, 5], [4, 5], + [4, 5], [4, 5], [4, 5], [4, 5], + [4, 5], [4, 5], [4, 5], [4, 5], + [4, 5], [4, 5], [4, 5], [4, 5], + [6, 14], [6, 14], [6, 14], [6, 14], // 110100xxx + [6, 14], [6, 14], [6, 14], [6, 14], + [6, 15], [6, 15], [6, 15], [6, 15], // 110101xxx + [6, 15], [6, 15], [6, 15], [6, 15], + [5, 64], [5, 64], [5, 64], [5, 64], // 11011xxxx + [5, 64], [5, 64], [5, 64], [5, 64], + [5, 64], [5, 64], [5, 64], [5, 64], + [5, 64], [5, 64], [5, 64], [5, 64], + [4, 6], [4, 6], [4, 6], [4, 6], // 1110xxxxx + [4, 6], [4, 6], [4, 6], [4, 6], + [4, 6], [4, 6], [4, 6], [4, 6], + [4, 6], [4, 6], [4, 6], [4, 6], + [4, 6], [4, 6], [4, 6], [4, 6], + [4, 6], [4, 6], [4, 6], [4, 6], + [4, 6], [4, 6], [4, 6], [4, 6], + [4, 6], [4, 6], [4, 6], [4, 6], + [4, 7], [4, 7], [4, 7], [4, 7], // 1111xxxxx + [4, 7], [4, 7], [4, 7], [4, 7], + [4, 7], [4, 7], [4, 7], [4, 7], + [4, 7], [4, 7], [4, 7], [4, 7], + [4, 7], [4, 7], [4, 7], [4, 7], + [4, 7], [4, 7], [4, 7], [4, 7], + [4, 7], [4, 7], [4, 7], [4, 7], + [4, 7], [4, 7], [4, 7], [4, 7] + ]; + + var blackTable1 = [ + [-1, -1], [-1, -1], // 000000000000x + [12, ccittEOL], [12, ccittEOL], // 000000000001x + [-1, -1], [-1, -1], [-1, -1], [-1, -1], // 00000000001xx + [-1, -1], [-1, -1], [-1, -1], [-1, -1], // 00000000010xx + [-1, -1], [-1, -1], [-1, -1], [-1, -1], // 00000000011xx + [-1, -1], [-1, -1], [-1, -1], [-1, -1], // 00000000100xx + [-1, -1], [-1, -1], [-1, -1], [-1, -1], // 00000000101xx + [-1, -1], [-1, -1], [-1, -1], [-1, -1], // 00000000110xx + [-1, -1], [-1, -1], [-1, -1], [-1, -1], // 00000000111xx + [11, 1792], [11, 1792], [11, 1792], [11, 1792], // 00000001000xx + [12, 1984], [12, 1984], // 000000010010x + [12, 2048], [12, 2048], // 000000010011x + [12, 2112], [12, 2112], // 000000010100x + [12, 2176], [12, 2176], // 000000010101x + [12, 2240], [12, 2240], // 000000010110x + [12, 2304], [12, 2304], // 000000010111x + [11, 1856], [11, 1856], [11, 1856], [11, 1856], // 00000001100xx + [11, 1920], [11, 1920], [11, 1920], [11, 1920], // 00000001101xx + [12, 2368], [12, 2368], // 000000011100x + [12, 2432], [12, 2432], // 000000011101x + [12, 2496], [12, 2496], // 000000011110x + [12, 2560], [12, 2560], // 000000011111x + [10, 18], [10, 18], [10, 18], [10, 18], // 0000001000xxx + [10, 18], [10, 18], [10, 18], [10, 18], + [12, 52], [12, 52], // 000000100100x + [13, 640], // 0000001001010 + [13, 704], // 0000001001011 + [13, 768], // 0000001001100 + [13, 832], // 0000001001101 + [12, 55], [12, 55], // 000000100111x + [12, 56], [12, 56], // 000000101000x + [13, 1280], // 0000001010010 + [13, 1344], // 0000001010011 + [13, 1408], // 0000001010100 + [13, 1472], // 0000001010101 + [12, 59], [12, 59], // 000000101011x + [12, 60], [12, 60], // 000000101100x + [13, 1536], // 0000001011010 + [13, 1600], // 0000001011011 + [11, 24], [11, 24], [11, 24], [11, 24], // 00000010111xx + [11, 25], [11, 25], [11, 25], [11, 25], // 00000011000xx + [13, 1664], // 0000001100100 + [13, 1728], // 0000001100101 + [12, 320], [12, 320], // 000000110011x + [12, 384], [12, 384], // 000000110100x + [12, 448], [12, 448], // 000000110101x + [13, 512], // 0000001101100 + [13, 576], // 0000001101101 + [12, 53], [12, 53], // 000000110111x + [12, 54], [12, 54], // 000000111000x + [13, 896], // 0000001110010 + [13, 960], // 0000001110011 + [13, 1024], // 0000001110100 + [13, 1088], // 0000001110101 + [13, 1152], // 0000001110110 + [13, 1216], // 0000001110111 + [10, 64], [10, 64], [10, 64], [10, 64], // 0000001111xxx + [10, 64], [10, 64], [10, 64], [10, 64] + ]; + + var blackTable2 = [ + [8, 13], [8, 13], [8, 13], [8, 13], // 00000100xxxx + [8, 13], [8, 13], [8, 13], [8, 13], + [8, 13], [8, 13], [8, 13], [8, 13], + [8, 13], [8, 13], [8, 13], [8, 13], + [11, 23], [11, 23], // 00000101000x + [12, 50], // 000001010010 + [12, 51], // 000001010011 + [12, 44], // 000001010100 + [12, 45], // 000001010101 + [12, 46], // 000001010110 + [12, 47], // 000001010111 + [12, 57], // 000001011000 + [12, 58], // 000001011001 + [12, 61], // 000001011010 + [12, 256], // 000001011011 + [10, 16], [10, 16], [10, 16], [10, 16], // 0000010111xx + [10, 17], [10, 17], [10, 17], [10, 17], // 0000011000xx + [12, 48], // 000001100100 + [12, 49], // 000001100101 + [12, 62], // 000001100110 + [12, 63], // 000001100111 + [12, 30], // 000001101000 + [12, 31], // 000001101001 + [12, 32], // 000001101010 + [12, 33], // 000001101011 + [12, 40], // 000001101100 + [12, 41], // 000001101101 + [11, 22], [11, 22], // 00000110111x + [8, 14], [8, 14], [8, 14], [8, 14], // 00000111xxxx + [8, 14], [8, 14], [8, 14], [8, 14], + [8, 14], [8, 14], [8, 14], [8, 14], + [8, 14], [8, 14], [8, 14], [8, 14], + [7, 10], [7, 10], [7, 10], [7, 10], // 0000100xxxxx + [7, 10], [7, 10], [7, 10], [7, 10], + [7, 10], [7, 10], [7, 10], [7, 10], + [7, 10], [7, 10], [7, 10], [7, 10], + [7, 10], [7, 10], [7, 10], [7, 10], + [7, 10], [7, 10], [7, 10], [7, 10], + [7, 10], [7, 10], [7, 10], [7, 10], + [7, 10], [7, 10], [7, 10], [7, 10], + [7, 11], [7, 11], [7, 11], [7, 11], // 0000101xxxxx + [7, 11], [7, 11], [7, 11], [7, 11], + [7, 11], [7, 11], [7, 11], [7, 11], + [7, 11], [7, 11], [7, 11], [7, 11], + [7, 11], [7, 11], [7, 11], [7, 11], + [7, 11], [7, 11], [7, 11], [7, 11], + [7, 11], [7, 11], [7, 11], [7, 11], + [7, 11], [7, 11], [7, 11], [7, 11], + [9, 15], [9, 15], [9, 15], [9, 15], // 000011000xxx + [9, 15], [9, 15], [9, 15], [9, 15], + [12, 128], // 000011001000 + [12, 192], // 000011001001 + [12, 26], // 000011001010 + [12, 27], // 000011001011 + [12, 28], // 000011001100 + [12, 29], // 000011001101 + [11, 19], [11, 19], // 00001100111x + [11, 20], [11, 20], // 00001101000x + [12, 34], // 000011010010 + [12, 35], // 000011010011 + [12, 36], // 000011010100 + [12, 37], // 000011010101 + [12, 38], // 000011010110 + [12, 39], // 000011010111 + [11, 21], [11, 21], // 00001101100x + [12, 42], // 000011011010 + [12, 43], // 000011011011 + [10, 0], [10, 0], [10, 0], [10, 0], // 0000110111xx + [7, 12], [7, 12], [7, 12], [7, 12], // 0000111xxxxx + [7, 12], [7, 12], [7, 12], [7, 12], + [7, 12], [7, 12], [7, 12], [7, 12], + [7, 12], [7, 12], [7, 12], [7, 12], + [7, 12], [7, 12], [7, 12], [7, 12], + [7, 12], [7, 12], [7, 12], [7, 12], + [7, 12], [7, 12], [7, 12], [7, 12], + [7, 12], [7, 12], [7, 12], [7, 12] + ]; + + var blackTable3 = [ + [-1, -1], [-1, -1], [-1, -1], [-1, -1], // 0000xx + [6, 9], // 000100 + [6, 8], // 000101 + [5, 7], [5, 7], // 00011x + [4, 6], [4, 6], [4, 6], [4, 6], // 0010xx + [4, 5], [4, 5], [4, 5], [4, 5], // 0011xx + [3, 1], [3, 1], [3, 1], [3, 1], // 010xxx + [3, 1], [3, 1], [3, 1], [3, 1], + [3, 4], [3, 4], [3, 4], [3, 4], // 011xxx + [3, 4], [3, 4], [3, 4], [3, 4], + [2, 3], [2, 3], [2, 3], [2, 3], // 10xxxx + [2, 3], [2, 3], [2, 3], [2, 3], + [2, 3], [2, 3], [2, 3], [2, 3], + [2, 3], [2, 3], [2, 3], [2, 3], + [2, 2], [2, 2], [2, 2], [2, 2], // 11xxxx + [2, 2], [2, 2], [2, 2], [2, 2], + [2, 2], [2, 2], [2, 2], [2, 2], + [2, 2], [2, 2], [2, 2], [2, 2] + ]; + + function CCITTFaxStream(str, maybeLength, params) { + this.str = str; + this.dict = str.dict; + + params = params || Dict.empty; + + this.encoding = params.get('K') || 0; + this.eoline = params.get('EndOfLine') || false; + this.byteAlign = params.get('EncodedByteAlign') || false; + this.columns = params.get('Columns') || 1728; + this.rows = params.get('Rows') || 0; + var eoblock = params.get('EndOfBlock'); + if (eoblock === null || eoblock === undefined) { + eoblock = true; + } + this.eoblock = eoblock; + this.black = params.get('BlackIs1') || false; + + this.codingLine = new Uint32Array(this.columns + 1); + this.refLine = new Uint32Array(this.columns + 2); + + this.codingLine[0] = this.columns; + this.codingPos = 0; + + this.row = 0; + this.nextLine2D = this.encoding < 0; + this.inputBits = 0; + this.inputBuf = 0; + this.outputBits = 0; + + var code1; + while ((code1 = this.lookBits(12)) === 0) { + this.eatBits(1); + } + if (code1 === 1) { + this.eatBits(12); + } + if (this.encoding > 0) { + this.nextLine2D = !this.lookBits(1); + this.eatBits(1); + } + + DecodeStream.call(this, maybeLength); + } + + CCITTFaxStream.prototype = Object.create(DecodeStream.prototype); + + CCITTFaxStream.prototype.readBlock = function CCITTFaxStream_readBlock() { + while (!this.eof) { + var c = this.lookChar(); + this.ensureBuffer(this.bufferLength + 1); + this.buffer[this.bufferLength++] = c; + } + }; + + CCITTFaxStream.prototype.addPixels = + function ccittFaxStreamAddPixels(a1, blackPixels) { + var codingLine = this.codingLine; + var codingPos = this.codingPos; + + if (a1 > codingLine[codingPos]) { + if (a1 > this.columns) { + info('row is wrong length'); + this.err = true; + a1 = this.columns; + } + if ((codingPos & 1) ^ blackPixels) { + ++codingPos; + } + + codingLine[codingPos] = a1; + } + this.codingPos = codingPos; + }; + + CCITTFaxStream.prototype.addPixelsNeg = + function ccittFaxStreamAddPixelsNeg(a1, blackPixels) { + var codingLine = this.codingLine; + var codingPos = this.codingPos; + + if (a1 > codingLine[codingPos]) { + if (a1 > this.columns) { + info('row is wrong length'); + this.err = true; + a1 = this.columns; + } + if ((codingPos & 1) ^ blackPixels) { + ++codingPos; + } + + codingLine[codingPos] = a1; + } else if (a1 < codingLine[codingPos]) { + if (a1 < 0) { + info('invalid code'); + this.err = true; + a1 = 0; + } + while (codingPos > 0 && a1 < codingLine[codingPos - 1]) { + --codingPos; + } + codingLine[codingPos] = a1; + } + + this.codingPos = codingPos; + }; + + CCITTFaxStream.prototype.lookChar = function CCITTFaxStream_lookChar() { + var refLine = this.refLine; + var codingLine = this.codingLine; + var columns = this.columns; + + var refPos, blackPixels, bits, i; + + if (this.outputBits === 0) { + if (this.eof) { + return null; + } + this.err = false; + + var code1, code2, code3; + if (this.nextLine2D) { + for (i = 0; codingLine[i] < columns; ++i) { + refLine[i] = codingLine[i]; + } + refLine[i++] = columns; + refLine[i] = columns; + codingLine[0] = 0; + this.codingPos = 0; + refPos = 0; + blackPixels = 0; + + while (codingLine[this.codingPos] < columns) { + code1 = this.getTwoDimCode(); + switch (code1) { + case twoDimPass: + this.addPixels(refLine[refPos + 1], blackPixels); + if (refLine[refPos + 1] < columns) { + refPos += 2; + } + break; + case twoDimHoriz: + code1 = code2 = 0; + if (blackPixels) { + do { + code1 += (code3 = this.getBlackCode()); + } while (code3 >= 64); + do { + code2 += (code3 = this.getWhiteCode()); + } while (code3 >= 64); + } else { + do { + code1 += (code3 = this.getWhiteCode()); + } while (code3 >= 64); + do { + code2 += (code3 = this.getBlackCode()); + } while (code3 >= 64); + } + this.addPixels(codingLine[this.codingPos] + + code1, blackPixels); + if (codingLine[this.codingPos] < columns) { + this.addPixels(codingLine[this.codingPos] + code2, + blackPixels ^ 1); + } + while (refLine[refPos] <= codingLine[this.codingPos] && + refLine[refPos] < columns) { + refPos += 2; + } + break; + case twoDimVertR3: + this.addPixels(refLine[refPos] + 3, blackPixels); + blackPixels ^= 1; + if (codingLine[this.codingPos] < columns) { + ++refPos; + while (refLine[refPos] <= codingLine[this.codingPos] && + refLine[refPos] < columns) { + refPos += 2; + } + } + break; + case twoDimVertR2: + this.addPixels(refLine[refPos] + 2, blackPixels); + blackPixels ^= 1; + if (codingLine[this.codingPos] < columns) { + ++refPos; + while (refLine[refPos] <= codingLine[this.codingPos] && + refLine[refPos] < columns) { + refPos += 2; + } + } + break; + case twoDimVertR1: + this.addPixels(refLine[refPos] + 1, blackPixels); + blackPixels ^= 1; + if (codingLine[this.codingPos] < columns) { + ++refPos; + while (refLine[refPos] <= codingLine[this.codingPos] && + refLine[refPos] < columns) { + refPos += 2; + } + } + break; + case twoDimVert0: + this.addPixels(refLine[refPos], blackPixels); + blackPixels ^= 1; + if (codingLine[this.codingPos] < columns) { + ++refPos; + while (refLine[refPos] <= codingLine[this.codingPos] && + refLine[refPos] < columns) { + refPos += 2; + } + } + break; + case twoDimVertL3: + this.addPixelsNeg(refLine[refPos] - 3, blackPixels); + blackPixels ^= 1; + if (codingLine[this.codingPos] < columns) { + if (refPos > 0) { + --refPos; + } else { + ++refPos; + } + while (refLine[refPos] <= codingLine[this.codingPos] && + refLine[refPos] < columns) { + refPos += 2; + } + } + break; + case twoDimVertL2: + this.addPixelsNeg(refLine[refPos] - 2, blackPixels); + blackPixels ^= 1; + if (codingLine[this.codingPos] < columns) { + if (refPos > 0) { + --refPos; + } else { + ++refPos; + } + while (refLine[refPos] <= codingLine[this.codingPos] && + refLine[refPos] < columns) { + refPos += 2; + } + } + break; + case twoDimVertL1: + this.addPixelsNeg(refLine[refPos] - 1, blackPixels); + blackPixels ^= 1; + if (codingLine[this.codingPos] < columns) { + if (refPos > 0) { + --refPos; + } else { + ++refPos; + } + while (refLine[refPos] <= codingLine[this.codingPos] && + refLine[refPos] < columns) { + refPos += 2; + } + } + break; + case EOF: + this.addPixels(columns, 0); + this.eof = true; + break; + default: + info('bad 2d code'); + this.addPixels(columns, 0); + this.err = true; + } + } + } else { + codingLine[0] = 0; + this.codingPos = 0; + blackPixels = 0; + while (codingLine[this.codingPos] < columns) { + code1 = 0; + if (blackPixels) { + do { + code1 += (code3 = this.getBlackCode()); + } while (code3 >= 64); + } else { + do { + code1 += (code3 = this.getWhiteCode()); + } while (code3 >= 64); + } + this.addPixels(codingLine[this.codingPos] + code1, blackPixels); + blackPixels ^= 1; + } + } + + var gotEOL = false; + + if (this.byteAlign) { + this.inputBits &= ~7; + } + + if (!this.eoblock && this.row === this.rows - 1) { + this.eof = true; + } else { + code1 = this.lookBits(12); + if (this.eoline) { + while (code1 !== EOF && code1 !== 1) { + this.eatBits(1); + code1 = this.lookBits(12); + } + } else { + while (code1 === 0) { + this.eatBits(1); + code1 = this.lookBits(12); + } + } + if (code1 === 1) { + this.eatBits(12); + gotEOL = true; + } else if (code1 === EOF) { + this.eof = true; + } + } + + if (!this.eof && this.encoding > 0) { + this.nextLine2D = !this.lookBits(1); + this.eatBits(1); + } + + if (this.eoblock && gotEOL && this.byteAlign) { + code1 = this.lookBits(12); + if (code1 === 1) { + this.eatBits(12); + if (this.encoding > 0) { + this.lookBits(1); + this.eatBits(1); + } + if (this.encoding >= 0) { + for (i = 0; i < 4; ++i) { + code1 = this.lookBits(12); + if (code1 !== 1) { + info('bad rtc code: ' + code1); + } + this.eatBits(12); + if (this.encoding > 0) { + this.lookBits(1); + this.eatBits(1); + } + } + } + this.eof = true; + } + } else if (this.err && this.eoline) { + while (true) { + code1 = this.lookBits(13); + if (code1 === EOF) { + this.eof = true; + return null; + } + if ((code1 >> 1) === 1) { + break; + } + this.eatBits(1); + } + this.eatBits(12); + if (this.encoding > 0) { + this.eatBits(1); + this.nextLine2D = !(code1 & 1); + } + } + + if (codingLine[0] > 0) { + this.outputBits = codingLine[this.codingPos = 0]; + } else { + this.outputBits = codingLine[this.codingPos = 1]; + } + this.row++; + } + + var c; + if (this.outputBits >= 8) { + c = (this.codingPos & 1) ? 0 : 0xFF; + this.outputBits -= 8; + if (this.outputBits === 0 && codingLine[this.codingPos] < columns) { + this.codingPos++; + this.outputBits = (codingLine[this.codingPos] - + codingLine[this.codingPos - 1]); + } + } else { + bits = 8; + c = 0; + do { + if (this.outputBits > bits) { + c <<= bits; + if (!(this.codingPos & 1)) { + c |= 0xFF >> (8 - bits); + } + this.outputBits -= bits; + bits = 0; + } else { + c <<= this.outputBits; + if (!(this.codingPos & 1)) { + c |= 0xFF >> (8 - this.outputBits); + } + bits -= this.outputBits; + this.outputBits = 0; + if (codingLine[this.codingPos] < columns) { + this.codingPos++; + this.outputBits = (codingLine[this.codingPos] - + codingLine[this.codingPos - 1]); + } else if (bits > 0) { + c <<= bits; + bits = 0; + } + } + } while (bits); + } + if (this.black) { + c ^= 0xFF; + } + return c; + }; + + // This functions returns the code found from the table. + // The start and end parameters set the boundaries for searching the table. + // The limit parameter is optional. Function returns an array with three + // values. The first array element indicates whether a valid code is being + // returned. The second array element is the actual code. The third array + // element indicates whether EOF was reached. + CCITTFaxStream.prototype.findTableCode = + function ccittFaxStreamFindTableCode(start, end, table, limit) { + + var limitValue = limit || 0; + for (var i = start; i <= end; ++i) { + var code = this.lookBits(i); + if (code === EOF) { + return [true, 1, false]; + } + if (i < end) { + code <<= end - i; + } + if (!limitValue || code >= limitValue) { + var p = table[code - limitValue]; + if (p[0] === i) { + this.eatBits(i); + return [true, p[1], true]; + } + } + } + return [false, 0, false]; + }; + + CCITTFaxStream.prototype.getTwoDimCode = + function ccittFaxStreamGetTwoDimCode() { + + var code = 0; + var p; + if (this.eoblock) { + code = this.lookBits(7); + p = twoDimTable[code]; + if (p && p[0] > 0) { + this.eatBits(p[0]); + return p[1]; + } + } else { + var result = this.findTableCode(1, 7, twoDimTable); + if (result[0] && result[2]) { + return result[1]; + } + } + info('Bad two dim code'); + return EOF; + }; + + CCITTFaxStream.prototype.getWhiteCode = + function ccittFaxStreamGetWhiteCode() { + + var code = 0; + var p; + if (this.eoblock) { + code = this.lookBits(12); + if (code === EOF) { + return 1; + } + + if ((code >> 5) === 0) { + p = whiteTable1[code]; + } else { + p = whiteTable2[code >> 3]; + } + + if (p[0] > 0) { + this.eatBits(p[0]); + return p[1]; + } + } else { + var result = this.findTableCode(1, 9, whiteTable2); + if (result[0]) { + return result[1]; + } + + result = this.findTableCode(11, 12, whiteTable1); + if (result[0]) { + return result[1]; + } + } + info('bad white code'); + this.eatBits(1); + return 1; + }; + + CCITTFaxStream.prototype.getBlackCode = + function ccittFaxStreamGetBlackCode() { + + var code, p; + if (this.eoblock) { + code = this.lookBits(13); + if (code === EOF) { + return 1; + } + if ((code >> 7) === 0) { + p = blackTable1[code]; + } else if ((code >> 9) === 0 && (code >> 7) !== 0) { + p = blackTable2[(code >> 1) - 64]; + } else { + p = blackTable3[code >> 7]; + } + + if (p[0] > 0) { + this.eatBits(p[0]); + return p[1]; + } + } else { + var result = this.findTableCode(2, 6, blackTable3); + if (result[0]) { + return result[1]; + } + + result = this.findTableCode(7, 12, blackTable2, 64); + if (result[0]) { + return result[1]; + } + + result = this.findTableCode(10, 13, blackTable1); + if (result[0]) { + return result[1]; + } + } + info('bad black code'); + this.eatBits(1); + return 1; + }; + + CCITTFaxStream.prototype.lookBits = function CCITTFaxStream_lookBits(n) { + var c; + while (this.inputBits < n) { + if ((c = this.str.getByte()) === -1) { + if (this.inputBits === 0) { + return EOF; + } + return ((this.inputBuf << (n - this.inputBits)) & + (0xFFFF >> (16 - n))); + } + this.inputBuf = (this.inputBuf << 8) + c; + this.inputBits += 8; + } + return (this.inputBuf >> (this.inputBits - n)) & (0xFFFF >> (16 - n)); + }; + + CCITTFaxStream.prototype.eatBits = function CCITTFaxStream_eatBits(n) { + if ((this.inputBits -= n) < 0) { + this.inputBits = 0; + } + }; + + return CCITTFaxStream; +})(); + +var LZWStream = (function LZWStreamClosure() { + function LZWStream(str, maybeLength, earlyChange) { + this.str = str; + this.dict = str.dict; + this.cachedData = 0; + this.bitsCached = 0; + + var maxLzwDictionarySize = 4096; + var lzwState = { + earlyChange: earlyChange, + codeLength: 9, + nextCode: 258, + dictionaryValues: new Uint8Array(maxLzwDictionarySize), + dictionaryLengths: new Uint16Array(maxLzwDictionarySize), + dictionaryPrevCodes: new Uint16Array(maxLzwDictionarySize), + currentSequence: new Uint8Array(maxLzwDictionarySize), + currentSequenceLength: 0 + }; + for (var i = 0; i < 256; ++i) { + lzwState.dictionaryValues[i] = i; + lzwState.dictionaryLengths[i] = 1; + } + this.lzwState = lzwState; + + DecodeStream.call(this, maybeLength); + } + + LZWStream.prototype = Object.create(DecodeStream.prototype); + + LZWStream.prototype.readBits = function LZWStream_readBits(n) { + var bitsCached = this.bitsCached; + var cachedData = this.cachedData; + while (bitsCached < n) { + var c = this.str.getByte(); + if (c === -1) { + this.eof = true; + return null; + } + cachedData = (cachedData << 8) | c; + bitsCached += 8; + } + this.bitsCached = (bitsCached -= n); + this.cachedData = cachedData; + this.lastCode = null; + return (cachedData >>> bitsCached) & ((1 << n) - 1); + }; + + LZWStream.prototype.readBlock = function LZWStream_readBlock() { + var blockSize = 512; + var estimatedDecodedSize = blockSize * 2, decodedSizeDelta = blockSize; + var i, j, q; + + var lzwState = this.lzwState; + if (!lzwState) { + return; // eof was found + } + + var earlyChange = lzwState.earlyChange; + var nextCode = lzwState.nextCode; + var dictionaryValues = lzwState.dictionaryValues; + var dictionaryLengths = lzwState.dictionaryLengths; + var dictionaryPrevCodes = lzwState.dictionaryPrevCodes; + var codeLength = lzwState.codeLength; + var prevCode = lzwState.prevCode; + var currentSequence = lzwState.currentSequence; + var currentSequenceLength = lzwState.currentSequenceLength; + + var decodedLength = 0; + var currentBufferLength = this.bufferLength; + var buffer = this.ensureBuffer(this.bufferLength + estimatedDecodedSize); + + for (i = 0; i < blockSize; i++) { + var code = this.readBits(codeLength); + var hasPrev = currentSequenceLength > 0; + if (code < 256) { + currentSequence[0] = code; + currentSequenceLength = 1; + } else if (code >= 258) { + if (code < nextCode) { + currentSequenceLength = dictionaryLengths[code]; + for (j = currentSequenceLength - 1, q = code; j >= 0; j--) { + currentSequence[j] = dictionaryValues[q]; + q = dictionaryPrevCodes[q]; + } + } else { + currentSequence[currentSequenceLength++] = currentSequence[0]; + } + } else if (code === 256) { + codeLength = 9; + nextCode = 258; + currentSequenceLength = 0; + continue; + } else { + this.eof = true; + delete this.lzwState; + break; + } + + if (hasPrev) { + dictionaryPrevCodes[nextCode] = prevCode; + dictionaryLengths[nextCode] = dictionaryLengths[prevCode] + 1; + dictionaryValues[nextCode] = currentSequence[0]; + nextCode++; + codeLength = (nextCode + earlyChange) & (nextCode + earlyChange - 1) ? + codeLength : Math.min(Math.log(nextCode + earlyChange) / + 0.6931471805599453 + 1, 12) | 0; + } + prevCode = code; + + decodedLength += currentSequenceLength; + if (estimatedDecodedSize < decodedLength) { + do { + estimatedDecodedSize += decodedSizeDelta; + } while (estimatedDecodedSize < decodedLength); + buffer = this.ensureBuffer(this.bufferLength + estimatedDecodedSize); + } + for (j = 0; j < currentSequenceLength; j++) { + buffer[currentBufferLength++] = currentSequence[j]; + } + } + lzwState.nextCode = nextCode; + lzwState.codeLength = codeLength; + lzwState.prevCode = prevCode; + lzwState.currentSequenceLength = currentSequenceLength; + + this.bufferLength = currentBufferLength; + }; + + return LZWStream; +})(); + +var NullStream = (function NullStreamClosure() { + function NullStream() { + Stream.call(this, new Uint8Array(0)); + } + + NullStream.prototype = Stream.prototype; + + return NullStream; +})(); + + +var WorkerMessageHandler = PDFJS.WorkerMessageHandler = { + setup: function wphSetup(handler) { + var pdfManager; + + function loadDocument(recoveryMode) { + var loadDocumentCapability = createPromiseCapability(); + + var parseSuccess = function parseSuccess() { + var numPagesPromise = pdfManager.ensureDoc('numPages'); + var fingerprintPromise = pdfManager.ensureDoc('fingerprint'); + var encryptedPromise = pdfManager.ensureXRef('encrypt'); + Promise.all([numPagesPromise, fingerprintPromise, + encryptedPromise]).then(function onDocReady(results) { + var doc = { + numPages: results[0], + fingerprint: results[1], + encrypted: !!results[2], + }; + loadDocumentCapability.resolve(doc); + }, + parseFailure); + }; + + var parseFailure = function parseFailure(e) { + loadDocumentCapability.reject(e); + }; + + pdfManager.ensureDoc('checkHeader', []).then(function() { + pdfManager.ensureDoc('parseStartXRef', []).then(function() { + pdfManager.ensureDoc('parse', [recoveryMode]).then( + parseSuccess, parseFailure); + }, parseFailure); + }, parseFailure); + + return loadDocumentCapability.promise; + } + + function getPdfManager(data) { + var pdfManagerCapability = createPromiseCapability(); + + var source = data.source; + var disableRange = data.disableRange; + if (source.data) { + try { + pdfManager = new LocalPdfManager(source.data, source.password); + pdfManagerCapability.resolve(); + } catch (ex) { + pdfManagerCapability.reject(ex); + } + return pdfManagerCapability.promise; + } else if (source.chunkedViewerLoading) { + try { + pdfManager = new NetworkPdfManager(source, handler); + pdfManagerCapability.resolve(); + } catch (ex) { + pdfManagerCapability.reject(ex); + } + return pdfManagerCapability.promise; + } + + var networkManager = new NetworkManager(source.url, { + httpHeaders: source.httpHeaders, + withCredentials: source.withCredentials + }); + var cachedChunks = []; + var fullRequestXhrId = networkManager.requestFull({ + onHeadersReceived: function onHeadersReceived() { + if (disableRange) { + return; + } + + var fullRequestXhr = networkManager.getRequestXhr(fullRequestXhrId); + if (fullRequestXhr.getResponseHeader('Accept-Ranges') !== 'bytes') { + return; + } + + var contentEncoding = + fullRequestXhr.getResponseHeader('Content-Encoding') || 'identity'; + if (contentEncoding !== 'identity') { + return; + } + + var length = fullRequestXhr.getResponseHeader('Content-Length'); + length = parseInt(length, 10); + if (!isInt(length)) { + return; + } + source.length = length; + if (length <= 2 * RANGE_CHUNK_SIZE) { + // The file size is smaller than the size of two chunks, so it does + // not make any sense to abort the request and retry with a range + // request. + return; + } + + if (networkManager.isStreamingRequest(fullRequestXhrId)) { + // We can continue fetching when progressive loading is enabled, + // and we don't need the autoFetch feature. + source.disableAutoFetch = true; + } else { + // NOTE: by cancelling the full request, and then issuing range + // requests, there will be an issue for sites where you can only + // request the pdf once. However, if this is the case, then the + // server should not be returning that it can support range + // requests. + networkManager.abortRequest(fullRequestXhrId); + } + + try { + pdfManager = new NetworkPdfManager(source, handler); + pdfManagerCapability.resolve(pdfManager); + } catch (ex) { + pdfManagerCapability.reject(ex); + } + }, + + onProgressiveData: source.disableStream ? null : + function onProgressiveData(chunk) { + if (!pdfManager) { + cachedChunks.push(chunk); + return; + } + pdfManager.sendProgressiveData(chunk); + }, + + onDone: function onDone(args) { + if (pdfManager) { + return; // already processed + } + + var pdfFile; + if (args === null) { + // TODO add some streaming manager, e.g. for unknown length files. + // The data was returned in the onProgressiveData, combining... + var pdfFileLength = 0, pos = 0; + cachedChunks.forEach(function (chunk) { + pdfFileLength += chunk.byteLength; + }); + if (source.length && pdfFileLength !== source.length) { + warn('reported HTTP length is different from actual'); + } + var pdfFileArray = new Uint8Array(pdfFileLength); + cachedChunks.forEach(function (chunk) { + pdfFileArray.set(new Uint8Array(chunk), pos); + pos += chunk.byteLength; + }); + pdfFile = pdfFileArray.buffer; + } else { + pdfFile = args.chunk; + } + + // the data is array, instantiating directly from it + try { + pdfManager = new LocalPdfManager(pdfFile, source.password); + pdfManagerCapability.resolve(); + } catch (ex) { + pdfManagerCapability.reject(ex); + } + }, + + onError: function onError(status) { + var exception; + if (status === 404) { + exception = new MissingPDFException('Missing PDF "' + + source.url + '".'); + handler.send('MissingPDF', exception); + } else { + exception = new UnexpectedResponseException( + 'Unexpected server response (' + status + + ') while retrieving PDF "' + source.url + '".', status); + handler.send('UnexpectedResponse', exception); + } + }, + + onProgress: function onProgress(evt) { + handler.send('DocProgress', { + loaded: evt.loaded, + total: evt.lengthComputable ? evt.total : source.length + }); + } + }); + + return pdfManagerCapability.promise; + } + + handler.on('test', function wphSetupTest(data) { + // check if Uint8Array can be sent to worker + if (!(data instanceof Uint8Array)) { + handler.send('test', false); + return; + } + // making sure postMessage transfers are working + var supportTransfers = data[0] === 255; + handler.postMessageTransfers = supportTransfers; + // check if the response property is supported by xhr + var xhr = new XMLHttpRequest(); + var responseExists = 'response' in xhr; + // check if the property is actually implemented + try { + var dummy = xhr.responseType; + } catch (e) { + responseExists = false; + } + if (!responseExists) { + handler.send('test', false); + return; + } + handler.send('test', { + supportTypedArray: true, + supportTransfers: supportTransfers + }); + }); + + handler.on('GetDocRequest', function wphSetupDoc(data) { + + var onSuccess = function(doc) { + handler.send('GetDoc', { pdfInfo: doc }); + }; + + var onFailure = function(e) { + if (e instanceof PasswordException) { + if (e.code === PasswordResponses.NEED_PASSWORD) { + handler.send('NeedPassword', e); + } else if (e.code === PasswordResponses.INCORRECT_PASSWORD) { + handler.send('IncorrectPassword', e); + } + } else if (e instanceof InvalidPDFException) { + handler.send('InvalidPDF', e); + } else if (e instanceof MissingPDFException) { + handler.send('MissingPDF', e); + } else if (e instanceof UnexpectedResponseException) { + handler.send('UnexpectedResponse', e); + } else { + handler.send('UnknownError', + new UnknownErrorException(e.message, e.toString())); + } + }; + + PDFJS.maxImageSize = data.maxImageSize === undefined ? + -1 : data.maxImageSize; + PDFJS.disableFontFace = data.disableFontFace; + PDFJS.disableCreateObjectURL = data.disableCreateObjectURL; + PDFJS.verbosity = data.verbosity; + PDFJS.cMapUrl = data.cMapUrl === undefined ? + null : data.cMapUrl; + PDFJS.cMapPacked = data.cMapPacked === true; + + getPdfManager(data).then(function () { + handler.send('PDFManagerReady', null); + pdfManager.onLoadedStream().then(function(stream) { + handler.send('DataLoaded', { length: stream.bytes.byteLength }); + }); + }).then(function pdfManagerReady() { + loadDocument(false).then(onSuccess, function loadFailure(ex) { + // Try again with recoveryMode == true + if (!(ex instanceof XRefParseException)) { + if (ex instanceof PasswordException) { + // after password exception prepare to receive a new password + // to repeat loading + pdfManager.passwordChanged().then(pdfManagerReady); + } + + onFailure(ex); + return; + } + + pdfManager.requestLoadedStream(); + pdfManager.onLoadedStream().then(function() { + loadDocument(true).then(onSuccess, onFailure); + }); + }, onFailure); + }, onFailure); + }); + + handler.on('GetPage', function wphSetupGetPage(data) { + return pdfManager.getPage(data.pageIndex).then(function(page) { + var rotatePromise = pdfManager.ensure(page, 'rotate'); + var refPromise = pdfManager.ensure(page, 'ref'); + var viewPromise = pdfManager.ensure(page, 'view'); + + return Promise.all([rotatePromise, refPromise, viewPromise]).then( + function(results) { + return { + rotate: results[0], + ref: results[1], + view: results[2] + }; + }); + }); + }); + + handler.on('GetPageIndex', function wphSetupGetPageIndex(data) { + var ref = new Ref(data.ref.num, data.ref.gen); + var catalog = pdfManager.pdfDocument.catalog; + return catalog.getPageIndex(ref); + }); + + handler.on('GetDestinations', + function wphSetupGetDestinations(data) { + return pdfManager.ensureCatalog('destinations'); + } + ); + + handler.on('GetDestination', + function wphSetupGetDestination(data) { + return pdfManager.ensureCatalog('getDestination', [ data.id ]); + } + ); + + handler.on('GetAttachments', + function wphSetupGetAttachments(data) { + return pdfManager.ensureCatalog('attachments'); + } + ); + + handler.on('GetJavaScript', + function wphSetupGetJavaScript(data) { + return pdfManager.ensureCatalog('javaScript'); + } + ); + + handler.on('GetOutline', + function wphSetupGetOutline(data) { + return pdfManager.ensureCatalog('documentOutline'); + } + ); + + handler.on('GetMetadata', + function wphSetupGetMetadata(data) { + return Promise.all([pdfManager.ensureDoc('documentInfo'), + pdfManager.ensureCatalog('metadata')]); + } + ); + + handler.on('GetData', function wphSetupGetData(data) { + pdfManager.requestLoadedStream(); + return pdfManager.onLoadedStream().then(function(stream) { + return stream.bytes; + }); + }); + + handler.on('GetStats', + function wphSetupGetStats(data) { + return pdfManager.pdfDocument.xref.stats; + } + ); + + handler.on('UpdatePassword', function wphSetupUpdatePassword(data) { + pdfManager.updatePassword(data); + }); + + handler.on('GetAnnotations', function wphSetupGetAnnotations(data) { + return pdfManager.getPage(data.pageIndex).then(function(page) { + return pdfManager.ensure(page, 'getAnnotationsData', []); + }); + }); + + handler.on('RenderPageRequest', function wphSetupRenderPage(data) { + pdfManager.getPage(data.pageIndex).then(function(page) { + + var pageNum = data.pageIndex + 1; + var start = Date.now(); + // Pre compile the pdf page and fetch the fonts/images. + page.getOperatorList(handler, data.intent).then(function(operatorList) { + + info('page=' + pageNum + ' - getOperatorList: time=' + + (Date.now() - start) + 'ms, len=' + operatorList.fnArray.length); + + }, function(e) { + + var minimumStackMessage = + 'worker.js: while trying to getPage() and getOperatorList()'; + + var wrappedException; + + // Turn the error into an obj that can be serialized + if (typeof e === 'string') { + wrappedException = { + message: e, + stack: minimumStackMessage + }; + } else if (typeof e === 'object') { + wrappedException = { + message: e.message || e.toString(), + stack: e.stack || minimumStackMessage + }; + } else { + wrappedException = { + message: 'Unknown exception type: ' + (typeof e), + stack: minimumStackMessage + }; + } + + handler.send('PageError', { + pageNum: pageNum, + error: wrappedException, + intent: data.intent + }); + }); + }); + }, this); + + handler.on('GetTextContent', function wphExtractText(data) { + return pdfManager.getPage(data.pageIndex).then(function(page) { + var pageNum = data.pageIndex + 1; + var start = Date.now(); + return page.extractTextContent().then(function(textContent) { + info('text indexing: page=' + pageNum + ' - time=' + + (Date.now() - start) + 'ms'); + return textContent; + }); + }); + }); + + handler.on('Cleanup', function wphCleanup(data) { + return pdfManager.cleanup(); + }); + + handler.on('Terminate', function wphTerminate(data) { + pdfManager.terminate(); + }); + } +}; + +var consoleTimer = {}; + +var workerConsole = { + log: function log() { + var args = Array.prototype.slice.call(arguments); + globalScope.postMessage({ + action: 'console_log', + data: args + }); + }, + + error: function error() { + var args = Array.prototype.slice.call(arguments); + globalScope.postMessage({ + action: 'console_error', + data: args + }); + throw 'pdf.js execution error'; + }, + + time: function time(name) { + consoleTimer[name] = Date.now(); + }, + + timeEnd: function timeEnd(name) { + var time = consoleTimer[name]; + if (!time) { + error('Unknown timer name ' + name); + } + this.log('Timer:', name, Date.now() - time); + } +}; + + +// Worker thread? +if (typeof window === 'undefined') { + if (!('console' in globalScope)) { + globalScope.console = workerConsole; + } + + // Listen for unsupported features so we can pass them on to the main thread. + PDFJS.UnsupportedManager.listen(function (msg) { + globalScope.postMessage({ + action: '_unsupported_feature', + data: msg + }); + }); + + var handler = new MessageHandler('worker_processor', this); + WorkerMessageHandler.setup(handler); +} + + +/* This class implements the QM Coder decoding as defined in + * JPEG 2000 Part I Final Committee Draft Version 1.0 + * Annex C.3 Arithmetic decoding procedure + * available at http://www.jpeg.org/public/fcd15444-1.pdf + * + * The arithmetic decoder is used in conjunction with context models to decode + * JPEG2000 and JBIG2 streams. + */ +var ArithmeticDecoder = (function ArithmeticDecoderClosure() { + // Table C-2 + var QeTable = [ + {qe: 0x5601, nmps: 1, nlps: 1, switchFlag: 1}, + {qe: 0x3401, nmps: 2, nlps: 6, switchFlag: 0}, + {qe: 0x1801, nmps: 3, nlps: 9, switchFlag: 0}, + {qe: 0x0AC1, nmps: 4, nlps: 12, switchFlag: 0}, + {qe: 0x0521, nmps: 5, nlps: 29, switchFlag: 0}, + {qe: 0x0221, nmps: 38, nlps: 33, switchFlag: 0}, + {qe: 0x5601, nmps: 7, nlps: 6, switchFlag: 1}, + {qe: 0x5401, nmps: 8, nlps: 14, switchFlag: 0}, + {qe: 0x4801, nmps: 9, nlps: 14, switchFlag: 0}, + {qe: 0x3801, nmps: 10, nlps: 14, switchFlag: 0}, + {qe: 0x3001, nmps: 11, nlps: 17, switchFlag: 0}, + {qe: 0x2401, nmps: 12, nlps: 18, switchFlag: 0}, + {qe: 0x1C01, nmps: 13, nlps: 20, switchFlag: 0}, + {qe: 0x1601, nmps: 29, nlps: 21, switchFlag: 0}, + {qe: 0x5601, nmps: 15, nlps: 14, switchFlag: 1}, + {qe: 0x5401, nmps: 16, nlps: 14, switchFlag: 0}, + {qe: 0x5101, nmps: 17, nlps: 15, switchFlag: 0}, + {qe: 0x4801, nmps: 18, nlps: 16, switchFlag: 0}, + {qe: 0x3801, nmps: 19, nlps: 17, switchFlag: 0}, + {qe: 0x3401, nmps: 20, nlps: 18, switchFlag: 0}, + {qe: 0x3001, nmps: 21, nlps: 19, switchFlag: 0}, + {qe: 0x2801, nmps: 22, nlps: 19, switchFlag: 0}, + {qe: 0x2401, nmps: 23, nlps: 20, switchFlag: 0}, + {qe: 0x2201, nmps: 24, nlps: 21, switchFlag: 0}, + {qe: 0x1C01, nmps: 25, nlps: 22, switchFlag: 0}, + {qe: 0x1801, nmps: 26, nlps: 23, switchFlag: 0}, + {qe: 0x1601, nmps: 27, nlps: 24, switchFlag: 0}, + {qe: 0x1401, nmps: 28, nlps: 25, switchFlag: 0}, + {qe: 0x1201, nmps: 29, nlps: 26, switchFlag: 0}, + {qe: 0x1101, nmps: 30, nlps: 27, switchFlag: 0}, + {qe: 0x0AC1, nmps: 31, nlps: 28, switchFlag: 0}, + {qe: 0x09C1, nmps: 32, nlps: 29, switchFlag: 0}, + {qe: 0x08A1, nmps: 33, nlps: 30, switchFlag: 0}, + {qe: 0x0521, nmps: 34, nlps: 31, switchFlag: 0}, + {qe: 0x0441, nmps: 35, nlps: 32, switchFlag: 0}, + {qe: 0x02A1, nmps: 36, nlps: 33, switchFlag: 0}, + {qe: 0x0221, nmps: 37, nlps: 34, switchFlag: 0}, + {qe: 0x0141, nmps: 38, nlps: 35, switchFlag: 0}, + {qe: 0x0111, nmps: 39, nlps: 36, switchFlag: 0}, + {qe: 0x0085, nmps: 40, nlps: 37, switchFlag: 0}, + {qe: 0x0049, nmps: 41, nlps: 38, switchFlag: 0}, + {qe: 0x0025, nmps: 42, nlps: 39, switchFlag: 0}, + {qe: 0x0015, nmps: 43, nlps: 40, switchFlag: 0}, + {qe: 0x0009, nmps: 44, nlps: 41, switchFlag: 0}, + {qe: 0x0005, nmps: 45, nlps: 42, switchFlag: 0}, + {qe: 0x0001, nmps: 45, nlps: 43, switchFlag: 0}, + {qe: 0x5601, nmps: 46, nlps: 46, switchFlag: 0} + ]; + + // C.3.5 Initialisation of the decoder (INITDEC) + function ArithmeticDecoder(data, start, end) { + this.data = data; + this.bp = start; + this.dataEnd = end; + + this.chigh = data[start]; + this.clow = 0; + + this.byteIn(); + + this.chigh = ((this.chigh << 7) & 0xFFFF) | ((this.clow >> 9) & 0x7F); + this.clow = (this.clow << 7) & 0xFFFF; + this.ct -= 7; + this.a = 0x8000; + } + + ArithmeticDecoder.prototype = { + // C.3.4 Compressed data input (BYTEIN) + byteIn: function ArithmeticDecoder_byteIn() { + var data = this.data; + var bp = this.bp; + if (data[bp] === 0xFF) { + var b1 = data[bp + 1]; + if (b1 > 0x8F) { + this.clow += 0xFF00; + this.ct = 8; + } else { + bp++; + this.clow += (data[bp] << 9); + this.ct = 7; + this.bp = bp; + } + } else { + bp++; + this.clow += bp < this.dataEnd ? (data[bp] << 8) : 0xFF00; + this.ct = 8; + this.bp = bp; + } + if (this.clow > 0xFFFF) { + this.chigh += (this.clow >> 16); + this.clow &= 0xFFFF; + } + }, + // C.3.2 Decoding a decision (DECODE) + readBit: function ArithmeticDecoder_readBit(contexts, pos) { + // contexts are packed into 1 byte: + // highest 7 bits carry cx.index, lowest bit carries cx.mps + var cx_index = contexts[pos] >> 1, cx_mps = contexts[pos] & 1; + var qeTableIcx = QeTable[cx_index]; + var qeIcx = qeTableIcx.qe; + var d; + var a = this.a - qeIcx; + + if (this.chigh < qeIcx) { + // exchangeLps + if (a < qeIcx) { + a = qeIcx; + d = cx_mps; + cx_index = qeTableIcx.nmps; + } else { + a = qeIcx; + d = 1 ^ cx_mps; + if (qeTableIcx.switchFlag === 1) { + cx_mps = d; + } + cx_index = qeTableIcx.nlps; + } + } else { + this.chigh -= qeIcx; + if ((a & 0x8000) !== 0) { + this.a = a; + return cx_mps; + } + // exchangeMps + if (a < qeIcx) { + d = 1 ^ cx_mps; + if (qeTableIcx.switchFlag === 1) { + cx_mps = d; + } + cx_index = qeTableIcx.nlps; + } else { + d = cx_mps; + cx_index = qeTableIcx.nmps; + } + } + // C.3.3 renormD; + do { + if (this.ct === 0) { + this.byteIn(); + } + + a <<= 1; + this.chigh = ((this.chigh << 1) & 0xFFFF) | ((this.clow >> 15) & 1); + this.clow = (this.clow << 1) & 0xFFFF; + this.ct--; + } while ((a & 0x8000) === 0); + this.a = a; + + contexts[pos] = cx_index << 1 | cx_mps; + return d; + } + }; + + return ArithmeticDecoder; +})(); + + +var JpegImage = (function jpegImage() { + var dctZigZag = new Uint8Array([ + 0, + 1, 8, + 16, 9, 2, + 3, 10, 17, 24, + 32, 25, 18, 11, 4, + 5, 12, 19, 26, 33, 40, + 48, 41, 34, 27, 20, 13, 6, + 7, 14, 21, 28, 35, 42, 49, 56, + 57, 50, 43, 36, 29, 22, 15, + 23, 30, 37, 44, 51, 58, + 59, 52, 45, 38, 31, + 39, 46, 53, 60, + 61, 54, 47, + 55, 62, + 63 + ]); + + var dctCos1 = 4017; // cos(pi/16) + var dctSin1 = 799; // sin(pi/16) + var dctCos3 = 3406; // cos(3*pi/16) + var dctSin3 = 2276; // sin(3*pi/16) + var dctCos6 = 1567; // cos(6*pi/16) + var dctSin6 = 3784; // sin(6*pi/16) + var dctSqrt2 = 5793; // sqrt(2) + var dctSqrt1d2 = 2896; // sqrt(2) / 2 + + function constructor() { + } + + function buildHuffmanTable(codeLengths, values) { + var k = 0, code = [], i, j, length = 16; + while (length > 0 && !codeLengths[length - 1]) { + length--; + } + code.push({children: [], index: 0}); + var p = code[0], q; + for (i = 0; i < length; i++) { + for (j = 0; j < codeLengths[i]; j++) { + p = code.pop(); + p.children[p.index] = values[k]; + while (p.index > 0) { + p = code.pop(); + } + p.index++; + code.push(p); + while (code.length <= i) { + code.push(q = {children: [], index: 0}); + p.children[p.index] = q.children; + p = q; + } + k++; + } + if (i + 1 < length) { + // p here points to last code + code.push(q = {children: [], index: 0}); + p.children[p.index] = q.children; + p = q; + } + } + return code[0].children; + } + + function getBlockBufferOffset(component, row, col) { + return 64 * ((component.blocksPerLine + 1) * row + col); + } + + function decodeScan(data, offset, frame, components, resetInterval, + spectralStart, spectralEnd, successivePrev, successive) { + var precision = frame.precision; + var samplesPerLine = frame.samplesPerLine; + var scanLines = frame.scanLines; + var mcusPerLine = frame.mcusPerLine; + var progressive = frame.progressive; + var maxH = frame.maxH, maxV = frame.maxV; + + var startOffset = offset, bitsData = 0, bitsCount = 0; + + function readBit() { + if (bitsCount > 0) { + bitsCount--; + return (bitsData >> bitsCount) & 1; + } + bitsData = data[offset++]; + if (bitsData === 0xFF) { + var nextByte = data[offset++]; + if (nextByte) { + throw 'unexpected marker: ' + + ((bitsData << 8) | nextByte).toString(16); + } + // unstuff 0 + } + bitsCount = 7; + return bitsData >>> 7; + } + + function decodeHuffman(tree) { + var node = tree; + while (true) { + node = node[readBit()]; + if (typeof node === 'number') { + return node; + } + if (typeof node !== 'object') { + throw 'invalid huffman sequence'; + } + } + } + + function receive(length) { + var n = 0; + while (length > 0) { + n = (n << 1) | readBit(); + length--; + } + return n; + } + + function receiveAndExtend(length) { + if (length === 1) { + return readBit() === 1 ? 1 : -1; + } + var n = receive(length); + if (n >= 1 << (length - 1)) { + return n; + } + return n + (-1 << length) + 1; + } + + function decodeBaseline(component, offset) { + var t = decodeHuffman(component.huffmanTableDC); + var diff = t === 0 ? 0 : receiveAndExtend(t); + component.blockData[offset] = (component.pred += diff); + var k = 1; + while (k < 64) { + var rs = decodeHuffman(component.huffmanTableAC); + var s = rs & 15, r = rs >> 4; + if (s === 0) { + if (r < 15) { + break; + } + k += 16; + continue; + } + k += r; + var z = dctZigZag[k]; + component.blockData[offset + z] = receiveAndExtend(s); + k++; + } + } + + function decodeDCFirst(component, offset) { + var t = decodeHuffman(component.huffmanTableDC); + var diff = t === 0 ? 0 : (receiveAndExtend(t) << successive); + component.blockData[offset] = (component.pred += diff); + } + + function decodeDCSuccessive(component, offset) { + component.blockData[offset] |= readBit() << successive; + } + + var eobrun = 0; + function decodeACFirst(component, offset) { + if (eobrun > 0) { + eobrun--; + return; + } + var k = spectralStart, e = spectralEnd; + while (k <= e) { + var rs = decodeHuffman(component.huffmanTableAC); + var s = rs & 15, r = rs >> 4; + if (s === 0) { + if (r < 15) { + eobrun = receive(r) + (1 << r) - 1; + break; + } + k += 16; + continue; + } + k += r; + var z = dctZigZag[k]; + component.blockData[offset + z] = + receiveAndExtend(s) * (1 << successive); + k++; + } + } + + var successiveACState = 0, successiveACNextValue; + function decodeACSuccessive(component, offset) { + var k = spectralStart; + var e = spectralEnd; + var r = 0; + var s; + var rs; + while (k <= e) { + var z = dctZigZag[k]; + switch (successiveACState) { + case 0: // initial state + rs = decodeHuffman(component.huffmanTableAC); + s = rs & 15; + r = rs >> 4; + if (s === 0) { + if (r < 15) { + eobrun = receive(r) + (1 << r); + successiveACState = 4; + } else { + r = 16; + successiveACState = 1; + } + } else { + if (s !== 1) { + throw 'invalid ACn encoding'; + } + successiveACNextValue = receiveAndExtend(s); + successiveACState = r ? 2 : 3; + } + continue; + case 1: // skipping r zero items + case 2: + if (component.blockData[offset + z]) { + component.blockData[offset + z] += (readBit() << successive); + } else { + r--; + if (r === 0) { + successiveACState = successiveACState === 2 ? 3 : 0; + } + } + break; + case 3: // set value for a zero item + if (component.blockData[offset + z]) { + component.blockData[offset + z] += (readBit() << successive); + } else { + component.blockData[offset + z] = + successiveACNextValue << successive; + successiveACState = 0; + } + break; + case 4: // eob + if (component.blockData[offset + z]) { + component.blockData[offset + z] += (readBit() << successive); + } + break; + } + k++; + } + if (successiveACState === 4) { + eobrun--; + if (eobrun === 0) { + successiveACState = 0; + } + } + } + + function decodeMcu(component, decode, mcu, row, col) { + var mcuRow = (mcu / mcusPerLine) | 0; + var mcuCol = mcu % mcusPerLine; + var blockRow = mcuRow * component.v + row; + var blockCol = mcuCol * component.h + col; + var offset = getBlockBufferOffset(component, blockRow, blockCol); + decode(component, offset); + } + + function decodeBlock(component, decode, mcu) { + var blockRow = (mcu / component.blocksPerLine) | 0; + var blockCol = mcu % component.blocksPerLine; + var offset = getBlockBufferOffset(component, blockRow, blockCol); + decode(component, offset); + } + + var componentsLength = components.length; + var component, i, j, k, n; + var decodeFn; + if (progressive) { + if (spectralStart === 0) { + decodeFn = successivePrev === 0 ? decodeDCFirst : decodeDCSuccessive; + } else { + decodeFn = successivePrev === 0 ? decodeACFirst : decodeACSuccessive; + } + } else { + decodeFn = decodeBaseline; + } + + var mcu = 0, marker; + var mcuExpected; + if (componentsLength === 1) { + mcuExpected = components[0].blocksPerLine * components[0].blocksPerColumn; + } else { + mcuExpected = mcusPerLine * frame.mcusPerColumn; + } + if (!resetInterval) { + resetInterval = mcuExpected; + } + + var h, v; + while (mcu < mcuExpected) { + // reset interval stuff + for (i = 0; i < componentsLength; i++) { + components[i].pred = 0; + } + eobrun = 0; + + if (componentsLength === 1) { + component = components[0]; + for (n = 0; n < resetInterval; n++) { + decodeBlock(component, decodeFn, mcu); + mcu++; + } + } else { + for (n = 0; n < resetInterval; n++) { + for (i = 0; i < componentsLength; i++) { + component = components[i]; + h = component.h; + v = component.v; + for (j = 0; j < v; j++) { + for (k = 0; k < h; k++) { + decodeMcu(component, decodeFn, mcu, j, k); + } + } + } + mcu++; + } + } + + // find marker + bitsCount = 0; + marker = (data[offset] << 8) | data[offset + 1]; + if (marker <= 0xFF00) { + throw 'marker was not found'; + } + + if (marker >= 0xFFD0 && marker <= 0xFFD7) { // RSTx + offset += 2; + } else { + break; + } + } + + return offset - startOffset; + } + + // A port of poppler's IDCT method which in turn is taken from: + // Christoph Loeffler, Adriaan Ligtenberg, George S. Moschytz, + // 'Practical Fast 1-D DCT Algorithms with 11 Multiplications', + // IEEE Intl. Conf. on Acoustics, Speech & Signal Processing, 1989, + // 988-991. + function quantizeAndInverse(component, blockBufferOffset, p) { + var qt = component.quantizationTable, blockData = component.blockData; + var v0, v1, v2, v3, v4, v5, v6, v7; + var p0, p1, p2, p3, p4, p5, p6, p7; + var t; + + // inverse DCT on rows + for (var row = 0; row < 64; row += 8) { + // gather block data + p0 = blockData[blockBufferOffset + row]; + p1 = blockData[blockBufferOffset + row + 1]; + p2 = blockData[blockBufferOffset + row + 2]; + p3 = blockData[blockBufferOffset + row + 3]; + p4 = blockData[blockBufferOffset + row + 4]; + p5 = blockData[blockBufferOffset + row + 5]; + p6 = blockData[blockBufferOffset + row + 6]; + p7 = blockData[blockBufferOffset + row + 7]; + + // dequant p0 + p0 *= qt[row]; + + // check for all-zero AC coefficients + if ((p1 | p2 | p3 | p4 | p5 | p6 | p7) === 0) { + t = (dctSqrt2 * p0 + 512) >> 10; + p[row] = t; + p[row + 1] = t; + p[row + 2] = t; + p[row + 3] = t; + p[row + 4] = t; + p[row + 5] = t; + p[row + 6] = t; + p[row + 7] = t; + continue; + } + // dequant p1 ... p7 + p1 *= qt[row + 1]; + p2 *= qt[row + 2]; + p3 *= qt[row + 3]; + p4 *= qt[row + 4]; + p5 *= qt[row + 5]; + p6 *= qt[row + 6]; + p7 *= qt[row + 7]; + + // stage 4 + v0 = (dctSqrt2 * p0 + 128) >> 8; + v1 = (dctSqrt2 * p4 + 128) >> 8; + v2 = p2; + v3 = p6; + v4 = (dctSqrt1d2 * (p1 - p7) + 128) >> 8; + v7 = (dctSqrt1d2 * (p1 + p7) + 128) >> 8; + v5 = p3 << 4; + v6 = p5 << 4; + + // stage 3 + v0 = (v0 + v1 + 1) >> 1; + v1 = v0 - v1; + t = (v2 * dctSin6 + v3 * dctCos6 + 128) >> 8; + v2 = (v2 * dctCos6 - v3 * dctSin6 + 128) >> 8; + v3 = t; + v4 = (v4 + v6 + 1) >> 1; + v6 = v4 - v6; + v7 = (v7 + v5 + 1) >> 1; + v5 = v7 - v5; + + // stage 2 + v0 = (v0 + v3 + 1) >> 1; + v3 = v0 - v3; + v1 = (v1 + v2 + 1) >> 1; + v2 = v1 - v2; + t = (v4 * dctSin3 + v7 * dctCos3 + 2048) >> 12; + v4 = (v4 * dctCos3 - v7 * dctSin3 + 2048) >> 12; + v7 = t; + t = (v5 * dctSin1 + v6 * dctCos1 + 2048) >> 12; + v5 = (v5 * dctCos1 - v6 * dctSin1 + 2048) >> 12; + v6 = t; + + // stage 1 + p[row] = v0 + v7; + p[row + 7] = v0 - v7; + p[row + 1] = v1 + v6; + p[row + 6] = v1 - v6; + p[row + 2] = v2 + v5; + p[row + 5] = v2 - v5; + p[row + 3] = v3 + v4; + p[row + 4] = v3 - v4; + } + + // inverse DCT on columns + for (var col = 0; col < 8; ++col) { + p0 = p[col]; + p1 = p[col + 8]; + p2 = p[col + 16]; + p3 = p[col + 24]; + p4 = p[col + 32]; + p5 = p[col + 40]; + p6 = p[col + 48]; + p7 = p[col + 56]; + + // check for all-zero AC coefficients + if ((p1 | p2 | p3 | p4 | p5 | p6 | p7) === 0) { + t = (dctSqrt2 * p0 + 8192) >> 14; + // convert to 8 bit + t = (t < -2040) ? 0 : (t >= 2024) ? 255 : (t + 2056) >> 4; + blockData[blockBufferOffset + col] = t; + blockData[blockBufferOffset + col + 8] = t; + blockData[blockBufferOffset + col + 16] = t; + blockData[blockBufferOffset + col + 24] = t; + blockData[blockBufferOffset + col + 32] = t; + blockData[blockBufferOffset + col + 40] = t; + blockData[blockBufferOffset + col + 48] = t; + blockData[blockBufferOffset + col + 56] = t; + continue; + } + + // stage 4 + v0 = (dctSqrt2 * p0 + 2048) >> 12; + v1 = (dctSqrt2 * p4 + 2048) >> 12; + v2 = p2; + v3 = p6; + v4 = (dctSqrt1d2 * (p1 - p7) + 2048) >> 12; + v7 = (dctSqrt1d2 * (p1 + p7) + 2048) >> 12; + v5 = p3; + v6 = p5; + + // stage 3 + // Shift v0 by 128.5 << 5 here, so we don't need to shift p0...p7 when + // converting to UInt8 range later. + v0 = ((v0 + v1 + 1) >> 1) + 4112; + v1 = v0 - v1; + t = (v2 * dctSin6 + v3 * dctCos6 + 2048) >> 12; + v2 = (v2 * dctCos6 - v3 * dctSin6 + 2048) >> 12; + v3 = t; + v4 = (v4 + v6 + 1) >> 1; + v6 = v4 - v6; + v7 = (v7 + v5 + 1) >> 1; + v5 = v7 - v5; + + // stage 2 + v0 = (v0 + v3 + 1) >> 1; + v3 = v0 - v3; + v1 = (v1 + v2 + 1) >> 1; + v2 = v1 - v2; + t = (v4 * dctSin3 + v7 * dctCos3 + 2048) >> 12; + v4 = (v4 * dctCos3 - v7 * dctSin3 + 2048) >> 12; + v7 = t; + t = (v5 * dctSin1 + v6 * dctCos1 + 2048) >> 12; + v5 = (v5 * dctCos1 - v6 * dctSin1 + 2048) >> 12; + v6 = t; + + // stage 1 + p0 = v0 + v7; + p7 = v0 - v7; + p1 = v1 + v6; + p6 = v1 - v6; + p2 = v2 + v5; + p5 = v2 - v5; + p3 = v3 + v4; + p4 = v3 - v4; + + // convert to 8-bit integers + p0 = (p0 < 16) ? 0 : (p0 >= 4080) ? 255 : p0 >> 4; + p1 = (p1 < 16) ? 0 : (p1 >= 4080) ? 255 : p1 >> 4; + p2 = (p2 < 16) ? 0 : (p2 >= 4080) ? 255 : p2 >> 4; + p3 = (p3 < 16) ? 0 : (p3 >= 4080) ? 255 : p3 >> 4; + p4 = (p4 < 16) ? 0 : (p4 >= 4080) ? 255 : p4 >> 4; + p5 = (p5 < 16) ? 0 : (p5 >= 4080) ? 255 : p5 >> 4; + p6 = (p6 < 16) ? 0 : (p6 >= 4080) ? 255 : p6 >> 4; + p7 = (p7 < 16) ? 0 : (p7 >= 4080) ? 255 : p7 >> 4; + + // store block data + blockData[blockBufferOffset + col] = p0; + blockData[blockBufferOffset + col + 8] = p1; + blockData[blockBufferOffset + col + 16] = p2; + blockData[blockBufferOffset + col + 24] = p3; + blockData[blockBufferOffset + col + 32] = p4; + blockData[blockBufferOffset + col + 40] = p5; + blockData[blockBufferOffset + col + 48] = p6; + blockData[blockBufferOffset + col + 56] = p7; + } + } + + function buildComponentData(frame, component) { + var blocksPerLine = component.blocksPerLine; + var blocksPerColumn = component.blocksPerColumn; + var computationBuffer = new Int16Array(64); + + for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) { + for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) { + var offset = getBlockBufferOffset(component, blockRow, blockCol); + quantizeAndInverse(component, offset, computationBuffer); + } + } + return component.blockData; + } + + function clamp0to255(a) { + return a <= 0 ? 0 : a >= 255 ? 255 : a; + } + + constructor.prototype = { + parse: function parse(data) { + + function readUint16() { + var value = (data[offset] << 8) | data[offset + 1]; + offset += 2; + return value; + } + + function readDataBlock() { + var length = readUint16(); + var array = data.subarray(offset, offset + length - 2); + offset += array.length; + return array; + } + + function prepareComponents(frame) { + var mcusPerLine = Math.ceil(frame.samplesPerLine / 8 / frame.maxH); + var mcusPerColumn = Math.ceil(frame.scanLines / 8 / frame.maxV); + for (var i = 0; i < frame.components.length; i++) { + component = frame.components[i]; + var blocksPerLine = Math.ceil(Math.ceil(frame.samplesPerLine / 8) * + component.h / frame.maxH); + var blocksPerColumn = Math.ceil(Math.ceil(frame.scanLines / 8) * + component.v / frame.maxV); + var blocksPerLineForMcu = mcusPerLine * component.h; + var blocksPerColumnForMcu = mcusPerColumn * component.v; + + var blocksBufferSize = 64 * blocksPerColumnForMcu * + (blocksPerLineForMcu + 1); + component.blockData = new Int16Array(blocksBufferSize); + component.blocksPerLine = blocksPerLine; + component.blocksPerColumn = blocksPerColumn; + } + frame.mcusPerLine = mcusPerLine; + frame.mcusPerColumn = mcusPerColumn; + } + + var offset = 0, length = data.length; + var jfif = null; + var adobe = null; + var pixels = null; + var frame, resetInterval; + var quantizationTables = []; + var huffmanTablesAC = [], huffmanTablesDC = []; + var fileMarker = readUint16(); + if (fileMarker !== 0xFFD8) { // SOI (Start of Image) + throw 'SOI not found'; + } + + fileMarker = readUint16(); + while (fileMarker !== 0xFFD9) { // EOI (End of image) + var i, j, l; + switch(fileMarker) { + case 0xFFE0: // APP0 (Application Specific) + case 0xFFE1: // APP1 + case 0xFFE2: // APP2 + case 0xFFE3: // APP3 + case 0xFFE4: // APP4 + case 0xFFE5: // APP5 + case 0xFFE6: // APP6 + case 0xFFE7: // APP7 + case 0xFFE8: // APP8 + case 0xFFE9: // APP9 + case 0xFFEA: // APP10 + case 0xFFEB: // APP11 + case 0xFFEC: // APP12 + case 0xFFED: // APP13 + case 0xFFEE: // APP14 + case 0xFFEF: // APP15 + case 0xFFFE: // COM (Comment) + var appData = readDataBlock(); + + if (fileMarker === 0xFFE0) { + if (appData[0] === 0x4A && appData[1] === 0x46 && + appData[2] === 0x49 && appData[3] === 0x46 && + appData[4] === 0) { // 'JFIF\x00' + jfif = { + version: { major: appData[5], minor: appData[6] }, + densityUnits: appData[7], + xDensity: (appData[8] << 8) | appData[9], + yDensity: (appData[10] << 8) | appData[11], + thumbWidth: appData[12], + thumbHeight: appData[13], + thumbData: appData.subarray(14, 14 + + 3 * appData[12] * appData[13]) + }; + } + } + // TODO APP1 - Exif + if (fileMarker === 0xFFEE) { + if (appData[0] === 0x41 && appData[1] === 0x64 && + appData[2] === 0x6F && appData[3] === 0x62 && + appData[4] === 0x65) { // 'Adobe' + adobe = { + version: (appData[5] << 8) | appData[6], + flags0: (appData[7] << 8) | appData[8], + flags1: (appData[9] << 8) | appData[10], + transformCode: appData[11] + }; + } + } + break; + + case 0xFFDB: // DQT (Define Quantization Tables) + var quantizationTablesLength = readUint16(); + var quantizationTablesEnd = quantizationTablesLength + offset - 2; + var z; + while (offset < quantizationTablesEnd) { + var quantizationTableSpec = data[offset++]; + var tableData = new Uint16Array(64); + if ((quantizationTableSpec >> 4) === 0) { // 8 bit values + for (j = 0; j < 64; j++) { + z = dctZigZag[j]; + tableData[z] = data[offset++]; + } + } else if ((quantizationTableSpec >> 4) === 1) { //16 bit + for (j = 0; j < 64; j++) { + z = dctZigZag[j]; + tableData[z] = readUint16(); + } + } else { + throw 'DQT: invalid table spec'; + } + quantizationTables[quantizationTableSpec & 15] = tableData; + } + break; + + case 0xFFC0: // SOF0 (Start of Frame, Baseline DCT) + case 0xFFC1: // SOF1 (Start of Frame, Extended DCT) + case 0xFFC2: // SOF2 (Start of Frame, Progressive DCT) + if (frame) { + throw 'Only single frame JPEGs supported'; + } + readUint16(); // skip data length + frame = {}; + frame.extended = (fileMarker === 0xFFC1); + frame.progressive = (fileMarker === 0xFFC2); + frame.precision = data[offset++]; + frame.scanLines = readUint16(); + frame.samplesPerLine = readUint16(); + frame.components = []; + frame.componentIds = {}; + var componentsCount = data[offset++], componentId; + var maxH = 0, maxV = 0; + for (i = 0; i < componentsCount; i++) { + componentId = data[offset]; + var h = data[offset + 1] >> 4; + var v = data[offset + 1] & 15; + if (maxH < h) { + maxH = h; + } + if (maxV < v) { + maxV = v; + } + var qId = data[offset + 2]; + l = frame.components.push({ + h: h, + v: v, + quantizationTable: quantizationTables[qId] + }); + frame.componentIds[componentId] = l - 1; + offset += 3; + } + frame.maxH = maxH; + frame.maxV = maxV; + prepareComponents(frame); + break; + + case 0xFFC4: // DHT (Define Huffman Tables) + var huffmanLength = readUint16(); + for (i = 2; i < huffmanLength;) { + var huffmanTableSpec = data[offset++]; + var codeLengths = new Uint8Array(16); + var codeLengthSum = 0; + for (j = 0; j < 16; j++, offset++) { + codeLengthSum += (codeLengths[j] = data[offset]); + } + var huffmanValues = new Uint8Array(codeLengthSum); + for (j = 0; j < codeLengthSum; j++, offset++) { + huffmanValues[j] = data[offset]; + } + i += 17 + codeLengthSum; + + ((huffmanTableSpec >> 4) === 0 ? + huffmanTablesDC : huffmanTablesAC)[huffmanTableSpec & 15] = + buildHuffmanTable(codeLengths, huffmanValues); + } + break; + + case 0xFFDD: // DRI (Define Restart Interval) + readUint16(); // skip data length + resetInterval = readUint16(); + break; + + case 0xFFDA: // SOS (Start of Scan) + var scanLength = readUint16(); + var selectorsCount = data[offset++]; + var components = [], component; + for (i = 0; i < selectorsCount; i++) { + var componentIndex = frame.componentIds[data[offset++]]; + component = frame.components[componentIndex]; + var tableSpec = data[offset++]; + component.huffmanTableDC = huffmanTablesDC[tableSpec >> 4]; + component.huffmanTableAC = huffmanTablesAC[tableSpec & 15]; + components.push(component); + } + var spectralStart = data[offset++]; + var spectralEnd = data[offset++]; + var successiveApproximation = data[offset++]; + var processed = decodeScan(data, offset, + frame, components, resetInterval, + spectralStart, spectralEnd, + successiveApproximation >> 4, successiveApproximation & 15); + offset += processed; + break; + + case 0xFFFF: // Fill bytes + if (data[offset] !== 0xFF) { // Avoid skipping a valid marker. + offset--; + } + break; + + default: + if (data[offset - 3] === 0xFF && + data[offset - 2] >= 0xC0 && data[offset - 2] <= 0xFE) { + // could be incorrect encoding -- last 0xFF byte of the previous + // block was eaten by the encoder + offset -= 3; + break; + } + throw 'unknown JPEG marker ' + fileMarker.toString(16); + } + fileMarker = readUint16(); + } + + this.width = frame.samplesPerLine; + this.height = frame.scanLines; + this.jfif = jfif; + this.adobe = adobe; + this.components = []; + for (i = 0; i < frame.components.length; i++) { + component = frame.components[i]; + this.components.push({ + output: buildComponentData(frame, component), + scaleX: component.h / frame.maxH, + scaleY: component.v / frame.maxV, + blocksPerLine: component.blocksPerLine, + blocksPerColumn: component.blocksPerColumn + }); + } + this.numComponents = this.components.length; + }, + + _getLinearizedBlockData: function getLinearizedBlockData(width, height) { + var scaleX = this.width / width, scaleY = this.height / height; + + var component, componentScaleX, componentScaleY, blocksPerScanline; + var x, y, i, j, k; + var index; + var offset = 0; + var output; + var numComponents = this.components.length; + var dataLength = width * height * numComponents; + var data = new Uint8Array(dataLength); + var xScaleBlockOffset = new Uint32Array(width); + var mask3LSB = 0xfffffff8; // used to clear the 3 LSBs + + for (i = 0; i < numComponents; i++) { + component = this.components[i]; + componentScaleX = component.scaleX * scaleX; + componentScaleY = component.scaleY * scaleY; + offset = i; + output = component.output; + blocksPerScanline = (component.blocksPerLine + 1) << 3; + // precalculate the xScaleBlockOffset + for (x = 0; x < width; x++) { + j = 0 | (x * componentScaleX); + xScaleBlockOffset[x] = ((j & mask3LSB) << 3) | (j & 7); + } + // linearize the blocks of the component + for (y = 0; y < height; y++) { + j = 0 | (y * componentScaleY); + index = blocksPerScanline * (j & mask3LSB) | ((j & 7) << 3); + for (x = 0; x < width; x++) { + data[offset] = output[index + xScaleBlockOffset[x]]; + offset += numComponents; + } + } + } + + // decodeTransform contains pairs of multiplier (-256..256) and additive + var transform = this.decodeTransform; + if (transform) { + for (i = 0; i < dataLength;) { + for (j = 0, k = 0; j < numComponents; j++, i++, k += 2) { + data[i] = ((data[i] * transform[k]) >> 8) + transform[k + 1]; + } + } + } + return data; + }, + + _isColorConversionNeeded: function isColorConversionNeeded() { + if (this.adobe && this.adobe.transformCode) { + // The adobe transform marker overrides any previous setting + return true; + } else if (this.numComponents === 3) { + return true; + } else { + return false; + } + }, + + _convertYccToRgb: function convertYccToRgb(data) { + var Y, Cb, Cr; + for (var i = 0, length = data.length; i < length; i += 3) { + Y = data[i ]; + Cb = data[i + 1]; + Cr = data[i + 2]; + data[i ] = clamp0to255(Y - 179.456 + 1.402 * Cr); + data[i + 1] = clamp0to255(Y + 135.459 - 0.344 * Cb - 0.714 * Cr); + data[i + 2] = clamp0to255(Y - 226.816 + 1.772 * Cb); + } + return data; + }, + + _convertYcckToRgb: function convertYcckToRgb(data) { + var Y, Cb, Cr, k; + var offset = 0; + for (var i = 0, length = data.length; i < length; i += 4) { + Y = data[i]; + Cb = data[i + 1]; + Cr = data[i + 2]; + k = data[i + 3]; + + var r = -122.67195406894 + + Cb * (-6.60635669420364e-5 * Cb + 0.000437130475926232 * Cr - + 5.4080610064599e-5 * Y + 0.00048449797120281 * k - + 0.154362151871126) + + Cr * (-0.000957964378445773 * Cr + 0.000817076911346625 * Y - + 0.00477271405408747 * k + 1.53380253221734) + + Y * (0.000961250184130688 * Y - 0.00266257332283933 * k + + 0.48357088451265) + + k * (-0.000336197177618394 * k + 0.484791561490776); + + var g = 107.268039397724 + + Cb * (2.19927104525741e-5 * Cb - 0.000640992018297945 * Cr + + 0.000659397001245577 * Y + 0.000426105652938837 * k - + 0.176491792462875) + + Cr * (-0.000778269941513683 * Cr + 0.00130872261408275 * Y + + 0.000770482631801132 * k - 0.151051492775562) + + Y * (0.00126935368114843 * Y - 0.00265090189010898 * k + + 0.25802910206845) + + k * (-0.000318913117588328 * k - 0.213742400323665); + + var b = -20.810012546947 + + Cb * (-0.000570115196973677 * Cb - 2.63409051004589e-5 * Cr + + 0.0020741088115012 * Y - 0.00288260236853442 * k + + 0.814272968359295) + + Cr * (-1.53496057440975e-5 * Cr - 0.000132689043961446 * Y + + 0.000560833691242812 * k - 0.195152027534049) + + Y * (0.00174418132927582 * Y - 0.00255243321439347 * k + + 0.116935020465145) + + k * (-0.000343531996510555 * k + 0.24165260232407); + + data[offset++] = clamp0to255(r); + data[offset++] = clamp0to255(g); + data[offset++] = clamp0to255(b); + } + return data; + }, + + _convertYcckToCmyk: function convertYcckToCmyk(data) { + var Y, Cb, Cr; + for (var i = 0, length = data.length; i < length; i += 4) { + Y = data[i]; + Cb = data[i + 1]; + Cr = data[i + 2]; + data[i ] = clamp0to255(434.456 - Y - 1.402 * Cr); + data[i + 1] = clamp0to255(119.541 - Y + 0.344 * Cb + 0.714 * Cr); + data[i + 2] = clamp0to255(481.816 - Y - 1.772 * Cb); + // K in data[i + 3] is unchanged + } + return data; + }, + + _convertCmykToRgb: function convertCmykToRgb(data) { + var c, m, y, k; + var offset = 0; + var min = -255 * 255 * 255; + var scale = 1 / 255 / 255; + for (var i = 0, length = data.length; i < length; i += 4) { + c = data[i]; + m = data[i + 1]; + y = data[i + 2]; + k = data[i + 3]; + + var r = + c * (-4.387332384609988 * c + 54.48615194189176 * m + + 18.82290502165302 * y + 212.25662451639585 * k - + 72734.4411664936) + + m * (1.7149763477362134 * m - 5.6096736904047315 * y - + 17.873870861415444 * k - 1401.7366389350734) + + y * (-2.5217340131683033 * y - 21.248923337353073 * k + + 4465.541406466231) - + k * (21.86122147463605 * k + 48317.86113160301); + var g = + c * (8.841041422036149 * c + 60.118027045597366 * m + + 6.871425592049007 * y + 31.159100130055922 * k - + 20220.756542821975) + + m * (-15.310361306967817 * m + 17.575251261109482 * y + + 131.35250912493976 * k - 48691.05921601825) + + y * (4.444339102852739 * y + 9.8632861493405 * k - + 6341.191035517494) - + k * (20.737325471181034 * k + 47890.15695978492); + var b = + c * (0.8842522430003296 * c + 8.078677503112928 * m + + 30.89978309703729 * y - 0.23883238689178934 * k - + 3616.812083916688) + + m * (10.49593273432072 * m + 63.02378494754052 * y + + 50.606957656360734 * k - 28620.90484698408) + + y * (0.03296041114873217 * y + 115.60384449646641 * k - + 49363.43385999684) - + k * (22.33816807309886 * k + 45932.16563550634); + + data[offset++] = r >= 0 ? 255 : r <= min ? 0 : 255 + r * scale | 0; + data[offset++] = g >= 0 ? 255 : g <= min ? 0 : 255 + g * scale | 0; + data[offset++] = b >= 0 ? 255 : b <= min ? 0 : 255 + b * scale | 0; + } + return data; + }, + + getData: function getData(width, height, forceRGBoutput) { + if (this.numComponents > 4) { + throw 'Unsupported color mode'; + } + // type of data: Uint8Array(width * height * numComponents) + var data = this._getLinearizedBlockData(width, height); + + if (this.numComponents === 3) { + return this._convertYccToRgb(data); + } else if (this.numComponents === 4) { + if (this._isColorConversionNeeded()) { + if (forceRGBoutput) { + return this._convertYcckToRgb(data); + } else { + return this._convertYcckToCmyk(data); + } + } else if (forceRGBoutput) { + return this._convertCmykToRgb(data); + } + } + return data; + } + }; + + return constructor; +})(); + + +var JpxImage = (function JpxImageClosure() { + // Table E.1 + var SubbandsGainLog2 = { + 'LL': 0, + 'LH': 1, + 'HL': 1, + 'HH': 2 + }; + function JpxImage() { + this.failOnCorruptedImage = false; + } + JpxImage.prototype = { + parse: function JpxImage_parse(data) { + + var head = readUint16(data, 0); + // No box header, immediate start of codestream (SOC) + if (head === 0xFF4F) { + this.parseCodestream(data, 0, data.length); + return; + } + + var position = 0, length = data.length; + while (position < length) { + var headerSize = 8; + var lbox = readUint32(data, position); + var tbox = readUint32(data, position + 4); + position += headerSize; + if (lbox === 1) { + // XLBox: read UInt64 according to spec. + // JavaScript's int precision of 53 bit should be sufficient here. + lbox = readUint32(data, position) * 4294967296 + + readUint32(data, position + 4); + position += 8; + headerSize += 8; + } + if (lbox === 0) { + lbox = length - position + headerSize; + } + if (lbox < headerSize) { + throw new Error('JPX Error: Invalid box field size'); + } + var dataLength = lbox - headerSize; + var jumpDataLength = true; + switch (tbox) { + case 0x6A703268: // 'jp2h' + jumpDataLength = false; // parsing child boxes + break; + case 0x636F6C72: // 'colr' + // Colorspaces are not used, the CS from the PDF is used. + var method = data[position]; + var precedence = data[position + 1]; + var approximation = data[position + 2]; + if (method === 1) { + // enumerated colorspace + var colorspace = readUint32(data, position + 3); + switch (colorspace) { + case 16: // this indicates a sRGB colorspace + case 17: // this indicates a grayscale colorspace + case 18: // this indicates a YUV colorspace + break; + default: + warn('Unknown colorspace ' + colorspace); + break; + } + } else if (method === 2) { + info('ICC profile not supported'); + } + break; + case 0x6A703263: // 'jp2c' + this.parseCodestream(data, position, position + dataLength); + break; + case 0x6A502020: // 'jP\024\024' + if (0x0d0a870a !== readUint32(data, position)) { + warn('Invalid JP2 signature'); + } + break; + // The following header types are valid but currently not used: + case 0x6A501A1A: // 'jP\032\032' + case 0x66747970: // 'ftyp' + case 0x72726571: // 'rreq' + case 0x72657320: // 'res ' + case 0x69686472: // 'ihdr' + break; + default: + var headerType = String.fromCharCode((tbox >> 24) & 0xFF, + (tbox >> 16) & 0xFF, + (tbox >> 8) & 0xFF, + tbox & 0xFF); + warn('Unsupported header type ' + tbox + ' (' + headerType + ')'); + break; + } + if (jumpDataLength) { + position += dataLength; + } + } + }, + parseImageProperties: function JpxImage_parseImageProperties(stream) { + var newByte = stream.getByte(); + while (newByte >= 0) { + var oldByte = newByte; + newByte = stream.getByte(); + var code = (oldByte << 8) | newByte; + // Image and tile size (SIZ) + if (code === 0xFF51) { + stream.skip(4); + var Xsiz = stream.getInt32() >>> 0; // Byte 4 + var Ysiz = stream.getInt32() >>> 0; // Byte 8 + var XOsiz = stream.getInt32() >>> 0; // Byte 12 + var YOsiz = stream.getInt32() >>> 0; // Byte 16 + stream.skip(16); + var Csiz = stream.getUint16(); // Byte 36 + this.width = Xsiz - XOsiz; + this.height = Ysiz - YOsiz; + this.componentsCount = Csiz; + // Results are always returned as Uint8Arrays + this.bitsPerComponent = 8; + return; + } + } + throw new Error('JPX Error: No size marker found in JPX stream'); + }, + parseCodestream: function JpxImage_parseCodestream(data, start, end) { + var context = {}; + try { + var doNotRecover = false; + var position = start; + while (position + 1 < end) { + var code = readUint16(data, position); + position += 2; + + var length = 0, j, sqcd, spqcds, spqcdSize, scalarExpounded, tile; + switch (code) { + case 0xFF4F: // Start of codestream (SOC) + context.mainHeader = true; + break; + case 0xFFD9: // End of codestream (EOC) + break; + case 0xFF51: // Image and tile size (SIZ) + length = readUint16(data, position); + var siz = {}; + siz.Xsiz = readUint32(data, position + 4); + siz.Ysiz = readUint32(data, position + 8); + siz.XOsiz = readUint32(data, position + 12); + siz.YOsiz = readUint32(data, position + 16); + siz.XTsiz = readUint32(data, position + 20); + siz.YTsiz = readUint32(data, position + 24); + siz.XTOsiz = readUint32(data, position + 28); + siz.YTOsiz = readUint32(data, position + 32); + var componentsCount = readUint16(data, position + 36); + siz.Csiz = componentsCount; + var components = []; + j = position + 38; + for (var i = 0; i < componentsCount; i++) { + var component = { + precision: (data[j] & 0x7F) + 1, + isSigned: !!(data[j] & 0x80), + XRsiz: data[j + 1], + YRsiz: data[j + 1] + }; + calculateComponentDimensions(component, siz); + components.push(component); + } + context.SIZ = siz; + context.components = components; + calculateTileGrids(context, components); + context.QCC = []; + context.COC = []; + break; + case 0xFF5C: // Quantization default (QCD) + length = readUint16(data, position); + var qcd = {}; + j = position + 2; + sqcd = data[j++]; + switch (sqcd & 0x1F) { + case 0: + spqcdSize = 8; + scalarExpounded = true; + break; + case 1: + spqcdSize = 16; + scalarExpounded = false; + break; + case 2: + spqcdSize = 16; + scalarExpounded = true; + break; + default: + throw new Error('JPX Error: Invalid SQcd value ' + sqcd); + } + qcd.noQuantization = (spqcdSize === 8); + qcd.scalarExpounded = scalarExpounded; + qcd.guardBits = sqcd >> 5; + spqcds = []; + while (j < length + position) { + var spqcd = {}; + if (spqcdSize === 8) { + spqcd.epsilon = data[j++] >> 3; + spqcd.mu = 0; + } else { + spqcd.epsilon = data[j] >> 3; + spqcd.mu = ((data[j] & 0x7) << 8) | data[j + 1]; + j += 2; + } + spqcds.push(spqcd); + } + qcd.SPqcds = spqcds; + if (context.mainHeader) { + context.QCD = qcd; + } else { + context.currentTile.QCD = qcd; + context.currentTile.QCC = []; + } + break; + case 0xFF5D: // Quantization component (QCC) + length = readUint16(data, position); + var qcc = {}; + j = position + 2; + var cqcc; + if (context.SIZ.Csiz < 257) { + cqcc = data[j++]; + } else { + cqcc = readUint16(data, j); + j += 2; + } + sqcd = data[j++]; + switch (sqcd & 0x1F) { + case 0: + spqcdSize = 8; + scalarExpounded = true; + break; + case 1: + spqcdSize = 16; + scalarExpounded = false; + break; + case 2: + spqcdSize = 16; + scalarExpounded = true; + break; + default: + throw new Error('JPX Error: Invalid SQcd value ' + sqcd); + } + qcc.noQuantization = (spqcdSize === 8); + qcc.scalarExpounded = scalarExpounded; + qcc.guardBits = sqcd >> 5; + spqcds = []; + while (j < (length + position)) { + spqcd = {}; + if (spqcdSize === 8) { + spqcd.epsilon = data[j++] >> 3; + spqcd.mu = 0; + } else { + spqcd.epsilon = data[j] >> 3; + spqcd.mu = ((data[j] & 0x7) << 8) | data[j + 1]; + j += 2; + } + spqcds.push(spqcd); + } + qcc.SPqcds = spqcds; + if (context.mainHeader) { + context.QCC[cqcc] = qcc; + } else { + context.currentTile.QCC[cqcc] = qcc; + } + break; + case 0xFF52: // Coding style default (COD) + length = readUint16(data, position); + var cod = {}; + j = position + 2; + var scod = data[j++]; + cod.entropyCoderWithCustomPrecincts = !!(scod & 1); + cod.sopMarkerUsed = !!(scod & 2); + cod.ephMarkerUsed = !!(scod & 4); + cod.progressionOrder = data[j++]; + cod.layersCount = readUint16(data, j); + j += 2; + cod.multipleComponentTransform = data[j++]; + + cod.decompositionLevelsCount = data[j++]; + cod.xcb = (data[j++] & 0xF) + 2; + cod.ycb = (data[j++] & 0xF) + 2; + var blockStyle = data[j++]; + cod.selectiveArithmeticCodingBypass = !!(blockStyle & 1); + cod.resetContextProbabilities = !!(blockStyle & 2); + cod.terminationOnEachCodingPass = !!(blockStyle & 4); + cod.verticalyStripe = !!(blockStyle & 8); + cod.predictableTermination = !!(blockStyle & 16); + cod.segmentationSymbolUsed = !!(blockStyle & 32); + cod.reversibleTransformation = data[j++]; + if (cod.entropyCoderWithCustomPrecincts) { + var precinctsSizes = []; + while (j < length + position) { + var precinctsSize = data[j++]; + precinctsSizes.push({ + PPx: precinctsSize & 0xF, + PPy: precinctsSize >> 4 + }); + } + cod.precinctsSizes = precinctsSizes; + } + var unsupported = []; + if (cod.selectiveArithmeticCodingBypass) { + unsupported.push('selectiveArithmeticCodingBypass'); + } + if (cod.resetContextProbabilities) { + unsupported.push('resetContextProbabilities'); + } + if (cod.terminationOnEachCodingPass) { + unsupported.push('terminationOnEachCodingPass'); + } + if (cod.verticalyStripe) { + unsupported.push('verticalyStripe'); + } + if (cod.predictableTermination) { + unsupported.push('predictableTermination'); + } + if (unsupported.length > 0) { + doNotRecover = true; + throw new Error('JPX Error: Unsupported COD options (' + + unsupported.join(', ') + ')'); + } + if (context.mainHeader) { + context.COD = cod; + } else { + context.currentTile.COD = cod; + context.currentTile.COC = []; + } + break; + case 0xFF90: // Start of tile-part (SOT) + length = readUint16(data, position); + tile = {}; + tile.index = readUint16(data, position + 2); + tile.length = readUint32(data, position + 4); + tile.dataEnd = tile.length + position - 2; + tile.partIndex = data[position + 8]; + tile.partsCount = data[position + 9]; + + context.mainHeader = false; + if (tile.partIndex === 0) { + // reset component specific settings + tile.COD = context.COD; + tile.COC = context.COC.slice(0); // clone of the global COC + tile.QCD = context.QCD; + tile.QCC = context.QCC.slice(0); // clone of the global COC + } + context.currentTile = tile; + break; + case 0xFF93: // Start of data (SOD) + tile = context.currentTile; + if (tile.partIndex === 0) { + initializeTile(context, tile.index); + buildPackets(context); + } + + // moving to the end of the data + length = tile.dataEnd - position; + parseTilePackets(context, data, position, length); + break; + case 0xFF55: // Tile-part lengths, main header (TLM) + case 0xFF57: // Packet length, main header (PLM) + case 0xFF58: // Packet length, tile-part header (PLT) + case 0xFF64: // Comment (COM) + length = readUint16(data, position); + // skipping content + break; + case 0xFF53: // Coding style component (COC) + throw new Error('JPX Error: Codestream code 0xFF53 (COC) is ' + + 'not implemented'); + default: + throw new Error('JPX Error: Unknown codestream code: ' + + code.toString(16)); + } + position += length; + } + } catch (e) { + if (doNotRecover || this.failOnCorruptedImage) { + throw e; + } else { + warn('Trying to recover from ' + e.message); + } + } + this.tiles = transformComponents(context); + this.width = context.SIZ.Xsiz - context.SIZ.XOsiz; + this.height = context.SIZ.Ysiz - context.SIZ.YOsiz; + this.componentsCount = context.SIZ.Csiz; + } + }; + function calculateComponentDimensions(component, siz) { + // Section B.2 Component mapping + component.x0 = Math.ceil(siz.XOsiz / component.XRsiz); + component.x1 = Math.ceil(siz.Xsiz / component.XRsiz); + component.y0 = Math.ceil(siz.YOsiz / component.YRsiz); + component.y1 = Math.ceil(siz.Ysiz / component.YRsiz); + component.width = component.x1 - component.x0; + component.height = component.y1 - component.y0; + } + function calculateTileGrids(context, components) { + var siz = context.SIZ; + // Section B.3 Division into tile and tile-components + var tile, tiles = []; + var numXtiles = Math.ceil((siz.Xsiz - siz.XTOsiz) / siz.XTsiz); + var numYtiles = Math.ceil((siz.Ysiz - siz.YTOsiz) / siz.YTsiz); + for (var q = 0; q < numYtiles; q++) { + for (var p = 0; p < numXtiles; p++) { + tile = {}; + tile.tx0 = Math.max(siz.XTOsiz + p * siz.XTsiz, siz.XOsiz); + tile.ty0 = Math.max(siz.YTOsiz + q * siz.YTsiz, siz.YOsiz); + tile.tx1 = Math.min(siz.XTOsiz + (p + 1) * siz.XTsiz, siz.Xsiz); + tile.ty1 = Math.min(siz.YTOsiz + (q + 1) * siz.YTsiz, siz.Ysiz); + tile.width = tile.tx1 - tile.tx0; + tile.height = tile.ty1 - tile.ty0; + tile.components = []; + tiles.push(tile); + } + } + context.tiles = tiles; + + var componentsCount = siz.Csiz; + for (var i = 0, ii = componentsCount; i < ii; i++) { + var component = components[i]; + for (var j = 0, jj = tiles.length; j < jj; j++) { + var tileComponent = {}; + tile = tiles[j]; + tileComponent.tcx0 = Math.ceil(tile.tx0 / component.XRsiz); + tileComponent.tcy0 = Math.ceil(tile.ty0 / component.YRsiz); + tileComponent.tcx1 = Math.ceil(tile.tx1 / component.XRsiz); + tileComponent.tcy1 = Math.ceil(tile.ty1 / component.YRsiz); + tileComponent.width = tileComponent.tcx1 - tileComponent.tcx0; + tileComponent.height = tileComponent.tcy1 - tileComponent.tcy0; + tile.components[i] = tileComponent; + } + } + } + function getBlocksDimensions(context, component, r) { + var codOrCoc = component.codingStyleParameters; + var result = {}; + if (!codOrCoc.entropyCoderWithCustomPrecincts) { + result.PPx = 15; + result.PPy = 15; + } else { + result.PPx = codOrCoc.precinctsSizes[r].PPx; + result.PPy = codOrCoc.precinctsSizes[r].PPy; + } + // calculate codeblock size as described in section B.7 + result.xcb_ = (r > 0 ? Math.min(codOrCoc.xcb, result.PPx - 1) : + Math.min(codOrCoc.xcb, result.PPx)); + result.ycb_ = (r > 0 ? Math.min(codOrCoc.ycb, result.PPy - 1) : + Math.min(codOrCoc.ycb, result.PPy)); + return result; + } + function buildPrecincts(context, resolution, dimensions) { + // Section B.6 Division resolution to precincts + var precinctWidth = 1 << dimensions.PPx; + var precinctHeight = 1 << dimensions.PPy; + // Jasper introduces codeblock groups for mapping each subband codeblocks + // to precincts. Precinct partition divides a resolution according to width + // and height parameters. The subband that belongs to the resolution level + // has a different size than the level, unless it is the zero resolution. + + // From Jasper documentation: jpeg2000.pdf, section K: Tier-2 coding: + // The precinct partitioning for a particular subband is derived from a + // partitioning of its parent LL band (i.e., the LL band at the next higher + // resolution level)... The LL band associated with each resolution level is + // divided into precincts... Each of the resulting precinct regions is then + // mapped into its child subbands (if any) at the next lower resolution + // level. This is accomplished by using the coordinate transformation + // (u, v) = (ceil(x/2), ceil(y/2)) where (x, y) and (u, v) are the + // coordinates of a point in the LL band and child subband, respectively. + var isZeroRes = resolution.resLevel === 0; + var precinctWidthInSubband = 1 << (dimensions.PPx + (isZeroRes ? 0 : -1)); + var precinctHeightInSubband = 1 << (dimensions.PPy + (isZeroRes ? 0 : -1)); + var numprecinctswide = (resolution.trx1 > resolution.trx0 ? + Math.ceil(resolution.trx1 / precinctWidth) - + Math.floor(resolution.trx0 / precinctWidth) : 0); + var numprecinctshigh = (resolution.try1 > resolution.try0 ? + Math.ceil(resolution.try1 / precinctHeight) - + Math.floor(resolution.try0 / precinctHeight) : 0); + var numprecincts = numprecinctswide * numprecinctshigh; + + resolution.precinctParameters = { + precinctWidth: precinctWidth, + precinctHeight: precinctHeight, + numprecinctswide: numprecinctswide, + numprecinctshigh: numprecinctshigh, + numprecincts: numprecincts, + precinctWidthInSubband: precinctWidthInSubband, + precinctHeightInSubband: precinctHeightInSubband + }; + } + function buildCodeblocks(context, subband, dimensions) { + // Section B.7 Division sub-band into code-blocks + var xcb_ = dimensions.xcb_; + var ycb_ = dimensions.ycb_; + var codeblockWidth = 1 << xcb_; + var codeblockHeight = 1 << ycb_; + var cbx0 = subband.tbx0 >> xcb_; + var cby0 = subband.tby0 >> ycb_; + var cbx1 = (subband.tbx1 + codeblockWidth - 1) >> xcb_; + var cby1 = (subband.tby1 + codeblockHeight - 1) >> ycb_; + var precinctParameters = subband.resolution.precinctParameters; + var codeblocks = []; + var precincts = []; + var i, j, codeblock, precinctNumber; + for (j = cby0; j < cby1; j++) { + for (i = cbx0; i < cbx1; i++) { + codeblock = { + cbx: i, + cby: j, + tbx0: codeblockWidth * i, + tby0: codeblockHeight * j, + tbx1: codeblockWidth * (i + 1), + tby1: codeblockHeight * (j + 1) + }; + + codeblock.tbx0_ = Math.max(subband.tbx0, codeblock.tbx0); + codeblock.tby0_ = Math.max(subband.tby0, codeblock.tby0); + codeblock.tbx1_ = Math.min(subband.tbx1, codeblock.tbx1); + codeblock.tby1_ = Math.min(subband.tby1, codeblock.tby1); + + // Calculate precinct number for this codeblock, codeblock position + // should be relative to its subband, use actual dimension and position + // See comment about codeblock group width and height + var pi = Math.floor((codeblock.tbx0_ - subband.tbx0) / + precinctParameters.precinctWidthInSubband); + var pj = Math.floor((codeblock.tby0_ - subband.tby0) / + precinctParameters.precinctHeightInSubband); + precinctNumber = pi + (pj * precinctParameters.numprecinctswide); + + codeblock.precinctNumber = precinctNumber; + codeblock.subbandType = subband.type; + codeblock.Lblock = 3; + + if (codeblock.tbx1_ <= codeblock.tbx0_ || + codeblock.tby1_ <= codeblock.tby0_) { + continue; + } + codeblocks.push(codeblock); + // building precinct for the sub-band + var precinct = precincts[precinctNumber]; + if (precinct !== undefined) { + if (i < precinct.cbxMin) { + precinct.cbxMin = i; + } else if (i > precinct.cbxMax) { + precinct.cbxMax = i; + } + if (j < precinct.cbyMin) { + precinct.cbxMin = j; + } else if (j > precinct.cbyMax) { + precinct.cbyMax = j; + } + } else { + precincts[precinctNumber] = precinct = { + cbxMin: i, + cbyMin: j, + cbxMax: i, + cbyMax: j + }; + } + codeblock.precinct = precinct; + } + } + subband.codeblockParameters = { + codeblockWidth: xcb_, + codeblockHeight: ycb_, + numcodeblockwide: cbx1 - cbx0 + 1, + numcodeblockhigh: cby1 - cby0 + 1 + }; + subband.codeblocks = codeblocks; + subband.precincts = precincts; + } + function createPacket(resolution, precinctNumber, layerNumber) { + var precinctCodeblocks = []; + // Section B.10.8 Order of info in packet + var subbands = resolution.subbands; + // sub-bands already ordered in 'LL', 'HL', 'LH', and 'HH' sequence + for (var i = 0, ii = subbands.length; i < ii; i++) { + var subband = subbands[i]; + var codeblocks = subband.codeblocks; + for (var j = 0, jj = codeblocks.length; j < jj; j++) { + var codeblock = codeblocks[j]; + if (codeblock.precinctNumber !== precinctNumber) { + continue; + } + precinctCodeblocks.push(codeblock); + } + } + return { + layerNumber: layerNumber, + codeblocks: precinctCodeblocks + }; + } + function LayerResolutionComponentPositionIterator(context) { + var siz = context.SIZ; + var tileIndex = context.currentTile.index; + var tile = context.tiles[tileIndex]; + var layersCount = tile.codingStyleDefaultParameters.layersCount; + var componentsCount = siz.Csiz; + var maxDecompositionLevelsCount = 0; + for (var q = 0; q < componentsCount; q++) { + maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, + tile.components[q].codingStyleParameters.decompositionLevelsCount); + } + + var l = 0, r = 0, i = 0, k = 0; + + this.nextPacket = function JpxImage_nextPacket() { + // Section B.12.1.1 Layer-resolution-component-position + for (; l < layersCount; l++) { + for (; r <= maxDecompositionLevelsCount; r++) { + for (; i < componentsCount; i++) { + var component = tile.components[i]; + if (r > component.codingStyleParameters.decompositionLevelsCount) { + continue; + } + + var resolution = component.resolutions[r]; + var numprecincts = resolution.precinctParameters.numprecincts; + for (; k < numprecincts;) { + var packet = createPacket(resolution, k, l); + k++; + return packet; + } + k = 0; + } + i = 0; + } + r = 0; + } + throw new Error('JPX Error: Out of packets'); + }; + } + function ResolutionLayerComponentPositionIterator(context) { + var siz = context.SIZ; + var tileIndex = context.currentTile.index; + var tile = context.tiles[tileIndex]; + var layersCount = tile.codingStyleDefaultParameters.layersCount; + var componentsCount = siz.Csiz; + var maxDecompositionLevelsCount = 0; + for (var q = 0; q < componentsCount; q++) { + maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, + tile.components[q].codingStyleParameters.decompositionLevelsCount); + } + + var r = 0, l = 0, i = 0, k = 0; + + this.nextPacket = function JpxImage_nextPacket() { + // Section B.12.1.2 Resolution-layer-component-position + for (; r <= maxDecompositionLevelsCount; r++) { + for (; l < layersCount; l++) { + for (; i < componentsCount; i++) { + var component = tile.components[i]; + if (r > component.codingStyleParameters.decompositionLevelsCount) { + continue; + } + + var resolution = component.resolutions[r]; + var numprecincts = resolution.precinctParameters.numprecincts; + for (; k < numprecincts;) { + var packet = createPacket(resolution, k, l); + k++; + return packet; + } + k = 0; + } + i = 0; + } + l = 0; + } + throw new Error('JPX Error: Out of packets'); + }; + } + function ResolutionPositionComponentLayerIterator(context) { + var siz = context.SIZ; + var tileIndex = context.currentTile.index; + var tile = context.tiles[tileIndex]; + var layersCount = tile.codingStyleDefaultParameters.layersCount; + var componentsCount = siz.Csiz; + var l, r, c, p; + var maxDecompositionLevelsCount = 0; + for (c = 0; c < componentsCount; c++) { + var component = tile.components[c]; + maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, + component.codingStyleParameters.decompositionLevelsCount); + } + var maxNumPrecinctsInLevel = new Int32Array( + maxDecompositionLevelsCount + 1); + for (r = 0; r <= maxDecompositionLevelsCount; ++r) { + var maxNumPrecincts = 0; + for (c = 0; c < componentsCount; ++c) { + var resolutions = tile.components[c].resolutions; + if (r < resolutions.length) { + maxNumPrecincts = Math.max(maxNumPrecincts, + resolutions[r].precinctParameters.numprecincts); + } + } + maxNumPrecinctsInLevel[r] = maxNumPrecincts; + } + l = 0; + r = 0; + c = 0; + p = 0; + + this.nextPacket = function JpxImage_nextPacket() { + // Section B.12.1.3 Resolution-position-component-layer + for (; r <= maxDecompositionLevelsCount; r++) { + for (; p < maxNumPrecinctsInLevel[r]; p++) { + for (; c < componentsCount; c++) { + var component = tile.components[c]; + if (r > component.codingStyleParameters.decompositionLevelsCount) { + continue; + } + var resolution = component.resolutions[r]; + var numprecincts = resolution.precinctParameters.numprecincts; + if (p >= numprecincts) { + continue; + } + for (; l < layersCount;) { + var packet = createPacket(resolution, p, l); + l++; + return packet; + } + l = 0; + } + c = 0; + } + p = 0; + } + throw new Error('JPX Error: Out of packets'); + }; + } + function PositionComponentResolutionLayerIterator(context) { + var siz = context.SIZ; + var tileIndex = context.currentTile.index; + var tile = context.tiles[tileIndex]; + var layersCount = tile.codingStyleDefaultParameters.layersCount; + var componentsCount = siz.Csiz; + var precinctsSizes = getPrecinctSizesInImageScale(tile); + var precinctsIterationSizes = precinctsSizes; + var l = 0, r = 0, c = 0, px = 0, py = 0; + + this.nextPacket = function JpxImage_nextPacket() { + // Section B.12.1.4 Position-component-resolution-layer + for (; py < precinctsIterationSizes.maxNumHigh; py++) { + for (; px < precinctsIterationSizes.maxNumWide; px++) { + for (; c < componentsCount; c++) { + var component = tile.components[c]; + var decompositionLevelsCount = + component.codingStyleParameters.decompositionLevelsCount; + for (; r <= decompositionLevelsCount; r++) { + var resolution = component.resolutions[r]; + var sizeInImageScale = + precinctsSizes.components[c].resolutions[r]; + var k = getPrecinctIndexIfExist( + px, + py, + sizeInImageScale, + precinctsIterationSizes, + resolution); + if (k === null) { + continue; + } + for (; l < layersCount;) { + var packet = createPacket(resolution, k, l); + l++; + return packet; + } + l = 0; + } + r = 0; + } + c = 0; + } + px = 0; + } + throw new Error('JPX Error: Out of packets'); + }; + } + function ComponentPositionResolutionLayerIterator(context) { + var siz = context.SIZ; + var tileIndex = context.currentTile.index; + var tile = context.tiles[tileIndex]; + var layersCount = tile.codingStyleDefaultParameters.layersCount; + var componentsCount = siz.Csiz; + var precinctsSizes = getPrecinctSizesInImageScale(tile); + var l = 0, r = 0, c = 0, px = 0, py = 0; + + this.nextPacket = function JpxImage_nextPacket() { + // Section B.12.1.5 Component-position-resolution-layer + for (; c < componentsCount; ++c) { + var component = tile.components[c]; + var precinctsIterationSizes = precinctsSizes.components[c]; + var decompositionLevelsCount = + component.codingStyleParameters.decompositionLevelsCount; + for (; py < precinctsIterationSizes.maxNumHigh; py++) { + for (; px < precinctsIterationSizes.maxNumWide; px++) { + for (; r <= decompositionLevelsCount; r++) { + var resolution = component.resolutions[r]; + var sizeInImageScale = precinctsIterationSizes.resolutions[r]; + var k = getPrecinctIndexIfExist( + px, + py, + sizeInImageScale, + precinctsIterationSizes, + resolution); + if (k === null) { + continue; + } + for (; l < layersCount;) { + var packet = createPacket(resolution, k, l); + l++; + return packet; + } + l = 0; + } + r = 0; + } + px = 0; + } + py = 0; + } + throw new Error('JPX Error: Out of packets'); + }; + } + function getPrecinctIndexIfExist( + pxIndex, pyIndex, sizeInImageScale, precinctIterationSizes, resolution) { + var posX = pxIndex * precinctIterationSizes.minWidth; + var posY = pyIndex * precinctIterationSizes.minHeight; + if (posX % sizeInImageScale.width !== 0 || + posY % sizeInImageScale.height !== 0) { + return null; + } + var startPrecinctRowIndex = + (posY / sizeInImageScale.width) * + resolution.precinctParameters.numprecinctswide; + return (posX / sizeInImageScale.height) + startPrecinctRowIndex; + } + function getPrecinctSizesInImageScale(tile) { + var componentsCount = tile.components.length; + var minWidth = Number.MAX_VALUE; + var minHeight = Number.MAX_VALUE; + var maxNumWide = 0; + var maxNumHigh = 0; + var sizePerComponent = new Array(componentsCount); + for (var c = 0; c < componentsCount; c++) { + var component = tile.components[c]; + var decompositionLevelsCount = + component.codingStyleParameters.decompositionLevelsCount; + var sizePerResolution = new Array(decompositionLevelsCount + 1); + var minWidthCurrentComponent = Number.MAX_VALUE; + var minHeightCurrentComponent = Number.MAX_VALUE; + var maxNumWideCurrentComponent = 0; + var maxNumHighCurrentComponent = 0; + var scale = 1; + for (var r = decompositionLevelsCount; r >= 0; --r) { + var resolution = component.resolutions[r]; + var widthCurrentResolution = + scale * resolution.precinctParameters.precinctWidth; + var heightCurrentResolution = + scale * resolution.precinctParameters.precinctHeight; + minWidthCurrentComponent = Math.min( + minWidthCurrentComponent, + widthCurrentResolution); + minHeightCurrentComponent = Math.min( + minHeightCurrentComponent, + heightCurrentResolution); + maxNumWideCurrentComponent = Math.max(maxNumWideCurrentComponent, + resolution.precinctParameters.numprecinctswide); + maxNumHighCurrentComponent = Math.max(maxNumHighCurrentComponent, + resolution.precinctParameters.numprecinctshigh); + sizePerResolution[r] = { + width: widthCurrentResolution, + height: heightCurrentResolution + }; + scale <<= 1; + } + minWidth = Math.min(minWidth, minWidthCurrentComponent); + minHeight = Math.min(minHeight, minHeightCurrentComponent); + maxNumWide = Math.max(maxNumWide, maxNumWideCurrentComponent); + maxNumHigh = Math.max(maxNumHigh, maxNumHighCurrentComponent); + sizePerComponent[c] = { + resolutions: sizePerResolution, + minWidth: minWidthCurrentComponent, + minHeight: minHeightCurrentComponent, + maxNumWide: maxNumWideCurrentComponent, + maxNumHigh: maxNumHighCurrentComponent + }; + } + return { + components: sizePerComponent, + minWidth: minWidth, + minHeight: minHeight, + maxNumWide: maxNumWide, + maxNumHigh: maxNumHigh + }; + } + function buildPackets(context) { + var siz = context.SIZ; + var tileIndex = context.currentTile.index; + var tile = context.tiles[tileIndex]; + var componentsCount = siz.Csiz; + // Creating resolutions and sub-bands for each component + for (var c = 0; c < componentsCount; c++) { + var component = tile.components[c]; + var decompositionLevelsCount = + component.codingStyleParameters.decompositionLevelsCount; + // Section B.5 Resolution levels and sub-bands + var resolutions = []; + var subbands = []; + for (var r = 0; r <= decompositionLevelsCount; r++) { + var blocksDimensions = getBlocksDimensions(context, component, r); + var resolution = {}; + var scale = 1 << (decompositionLevelsCount - r); + resolution.trx0 = Math.ceil(component.tcx0 / scale); + resolution.try0 = Math.ceil(component.tcy0 / scale); + resolution.trx1 = Math.ceil(component.tcx1 / scale); + resolution.try1 = Math.ceil(component.tcy1 / scale); + resolution.resLevel = r; + buildPrecincts(context, resolution, blocksDimensions); + resolutions.push(resolution); + + var subband; + if (r === 0) { + // one sub-band (LL) with last decomposition + subband = {}; + subband.type = 'LL'; + subband.tbx0 = Math.ceil(component.tcx0 / scale); + subband.tby0 = Math.ceil(component.tcy0 / scale); + subband.tbx1 = Math.ceil(component.tcx1 / scale); + subband.tby1 = Math.ceil(component.tcy1 / scale); + subband.resolution = resolution; + buildCodeblocks(context, subband, blocksDimensions); + subbands.push(subband); + resolution.subbands = [subband]; + } else { + var bscale = 1 << (decompositionLevelsCount - r + 1); + var resolutionSubbands = []; + // three sub-bands (HL, LH and HH) with rest of decompositions + subband = {}; + subband.type = 'HL'; + subband.tbx0 = Math.ceil(component.tcx0 / bscale - 0.5); + subband.tby0 = Math.ceil(component.tcy0 / bscale); + subband.tbx1 = Math.ceil(component.tcx1 / bscale - 0.5); + subband.tby1 = Math.ceil(component.tcy1 / bscale); + subband.resolution = resolution; + buildCodeblocks(context, subband, blocksDimensions); + subbands.push(subband); + resolutionSubbands.push(subband); + + subband = {}; + subband.type = 'LH'; + subband.tbx0 = Math.ceil(component.tcx0 / bscale); + subband.tby0 = Math.ceil(component.tcy0 / bscale - 0.5); + subband.tbx1 = Math.ceil(component.tcx1 / bscale); + subband.tby1 = Math.ceil(component.tcy1 / bscale - 0.5); + subband.resolution = resolution; + buildCodeblocks(context, subband, blocksDimensions); + subbands.push(subband); + resolutionSubbands.push(subband); + + subband = {}; + subband.type = 'HH'; + subband.tbx0 = Math.ceil(component.tcx0 / bscale - 0.5); + subband.tby0 = Math.ceil(component.tcy0 / bscale - 0.5); + subband.tbx1 = Math.ceil(component.tcx1 / bscale - 0.5); + subband.tby1 = Math.ceil(component.tcy1 / bscale - 0.5); + subband.resolution = resolution; + buildCodeblocks(context, subband, blocksDimensions); + subbands.push(subband); + resolutionSubbands.push(subband); + + resolution.subbands = resolutionSubbands; + } + } + component.resolutions = resolutions; + component.subbands = subbands; + } + // Generate the packets sequence + var progressionOrder = tile.codingStyleDefaultParameters.progressionOrder; + switch (progressionOrder) { + case 0: + tile.packetsIterator = + new LayerResolutionComponentPositionIterator(context); + break; + case 1: + tile.packetsIterator = + new ResolutionLayerComponentPositionIterator(context); + break; + case 2: + tile.packetsIterator = + new ResolutionPositionComponentLayerIterator(context); + break; + case 3: + tile.packetsIterator = + new PositionComponentResolutionLayerIterator(context); + break; + case 4: + tile.packetsIterator = + new ComponentPositionResolutionLayerIterator(context); + break; + default: + throw new Error('JPX Error: Unsupported progression order ' + + progressionOrder); + } + } + function parseTilePackets(context, data, offset, dataLength) { + var position = 0; + var buffer, bufferSize = 0, skipNextBit = false; + function readBits(count) { + while (bufferSize < count) { + var b = data[offset + position]; + position++; + if (skipNextBit) { + buffer = (buffer << 7) | b; + bufferSize += 7; + skipNextBit = false; + } else { + buffer = (buffer << 8) | b; + bufferSize += 8; + } + if (b === 0xFF) { + skipNextBit = true; + } + } + bufferSize -= count; + return (buffer >>> bufferSize) & ((1 << count) - 1); + } + function skipMarkerIfEqual(value) { + if (data[offset + position - 1] === 0xFF && + data[offset + position] === value) { + skipBytes(1); + return true; + } else if (data[offset + position] === 0xFF && + data[offset + position + 1] === value) { + skipBytes(2); + return true; + } + return false; + } + function skipBytes(count) { + position += count; + } + function alignToByte() { + bufferSize = 0; + if (skipNextBit) { + position++; + skipNextBit = false; + } + } + function readCodingpasses() { + if (readBits(1) === 0) { + return 1; + } + if (readBits(1) === 0) { + return 2; + } + var value = readBits(2); + if (value < 3) { + return value + 3; + } + value = readBits(5); + if (value < 31) { + return value + 6; + } + value = readBits(7); + return value + 37; + } + var tileIndex = context.currentTile.index; + var tile = context.tiles[tileIndex]; + var sopMarkerUsed = context.COD.sopMarkerUsed; + var ephMarkerUsed = context.COD.ephMarkerUsed; + var packetsIterator = tile.packetsIterator; + while (position < dataLength) { + alignToByte(); + if (sopMarkerUsed && skipMarkerIfEqual(0x91)) { + // Skip also marker segment length and packet sequence ID + skipBytes(4); + } + var packet = packetsIterator.nextPacket(); + if (!readBits(1)) { + continue; + } + var layerNumber = packet.layerNumber; + var queue = [], codeblock; + for (var i = 0, ii = packet.codeblocks.length; i < ii; i++) { + codeblock = packet.codeblocks[i]; + var precinct = codeblock.precinct; + var codeblockColumn = codeblock.cbx - precinct.cbxMin; + var codeblockRow = codeblock.cby - precinct.cbyMin; + var codeblockIncluded = false; + var firstTimeInclusion = false; + var valueReady; + if (codeblock['included'] !== undefined) { + codeblockIncluded = !!readBits(1); + } else { + // reading inclusion tree + precinct = codeblock.precinct; + var inclusionTree, zeroBitPlanesTree; + if (precinct['inclusionTree'] !== undefined) { + inclusionTree = precinct.inclusionTree; + } else { + // building inclusion and zero bit-planes trees + var width = precinct.cbxMax - precinct.cbxMin + 1; + var height = precinct.cbyMax - precinct.cbyMin + 1; + inclusionTree = new InclusionTree(width, height, layerNumber); + zeroBitPlanesTree = new TagTree(width, height); + precinct.inclusionTree = inclusionTree; + precinct.zeroBitPlanesTree = zeroBitPlanesTree; + } + + if (inclusionTree.reset(codeblockColumn, codeblockRow, layerNumber)) { + while (true) { + if (readBits(1)) { + valueReady = !inclusionTree.nextLevel(); + if (valueReady) { + codeblock.included = true; + codeblockIncluded = firstTimeInclusion = true; + break; + } + } else { + inclusionTree.incrementValue(layerNumber); + break; + } + } + } + } + if (!codeblockIncluded) { + continue; + } + if (firstTimeInclusion) { + zeroBitPlanesTree = precinct.zeroBitPlanesTree; + zeroBitPlanesTree.reset(codeblockColumn, codeblockRow); + while (true) { + if (readBits(1)) { + valueReady = !zeroBitPlanesTree.nextLevel(); + if (valueReady) { + break; + } + } else { + zeroBitPlanesTree.incrementValue(); + } + } + codeblock.zeroBitPlanes = zeroBitPlanesTree.value; + } + var codingpasses = readCodingpasses(); + while (readBits(1)) { + codeblock.Lblock++; + } + var codingpassesLog2 = log2(codingpasses); + // rounding down log2 + var bits = ((codingpasses < (1 << codingpassesLog2)) ? + codingpassesLog2 - 1 : codingpassesLog2) + codeblock.Lblock; + var codedDataLength = readBits(bits); + queue.push({ + codeblock: codeblock, + codingpasses: codingpasses, + dataLength: codedDataLength + }); + } + alignToByte(); + if (ephMarkerUsed) { + skipMarkerIfEqual(0x92); + } + while (queue.length > 0) { + var packetItem = queue.shift(); + codeblock = packetItem.codeblock; + if (codeblock['data'] === undefined) { + codeblock.data = []; + } + codeblock.data.push({ + data: data, + start: offset + position, + end: offset + position + packetItem.dataLength, + codingpasses: packetItem.codingpasses + }); + position += packetItem.dataLength; + } + } + return position; + } + function copyCoefficients(coefficients, levelWidth, levelHeight, subband, + delta, mb, reversible, segmentationSymbolUsed) { + var x0 = subband.tbx0; + var y0 = subband.tby0; + var width = subband.tbx1 - subband.tbx0; + var codeblocks = subband.codeblocks; + var right = subband.type.charAt(0) === 'H' ? 1 : 0; + var bottom = subband.type.charAt(1) === 'H' ? levelWidth : 0; + + for (var i = 0, ii = codeblocks.length; i < ii; ++i) { + var codeblock = codeblocks[i]; + var blockWidth = codeblock.tbx1_ - codeblock.tbx0_; + var blockHeight = codeblock.tby1_ - codeblock.tby0_; + if (blockWidth === 0 || blockHeight === 0) { + continue; + } + if (codeblock['data'] === undefined) { + continue; + } + + var bitModel, currentCodingpassType; + bitModel = new BitModel(blockWidth, blockHeight, codeblock.subbandType, + codeblock.zeroBitPlanes, mb); + currentCodingpassType = 2; // first bit plane starts from cleanup + + // collect data + var data = codeblock.data, totalLength = 0, codingpasses = 0; + var j, jj, dataItem; + for (j = 0, jj = data.length; j < jj; j++) { + dataItem = data[j]; + totalLength += dataItem.end - dataItem.start; + codingpasses += dataItem.codingpasses; + } + var encodedData = new Uint8Array(totalLength); + var position = 0; + for (j = 0, jj = data.length; j < jj; j++) { + dataItem = data[j]; + var chunk = dataItem.data.subarray(dataItem.start, dataItem.end); + encodedData.set(chunk, position); + position += chunk.length; + } + // decoding the item + var decoder = new ArithmeticDecoder(encodedData, 0, totalLength); + bitModel.setDecoder(decoder); + + for (j = 0; j < codingpasses; j++) { + switch (currentCodingpassType) { + case 0: + bitModel.runSignificancePropogationPass(); + break; + case 1: + bitModel.runMagnitudeRefinementPass(); + break; + case 2: + bitModel.runCleanupPass(); + if (segmentationSymbolUsed) { + bitModel.checkSegmentationSymbol(); + } + break; + } + currentCodingpassType = (currentCodingpassType + 1) % 3; + } + + var offset = (codeblock.tbx0_ - x0) + (codeblock.tby0_ - y0) * width; + var sign = bitModel.coefficentsSign; + var magnitude = bitModel.coefficentsMagnitude; + var bitsDecoded = bitModel.bitsDecoded; + var magnitudeCorrection = reversible ? 0 : 0.5; + var k, n, nb; + position = 0; + // Do the interleaving of Section F.3.3 here, so we do not need + // to copy later. LL level is not interleaved, just copied. + var interleave = (subband.type !== 'LL'); + for (j = 0; j < blockHeight; j++) { + var row = (offset / width) | 0; // row in the non-interleaved subband + var levelOffset = 2 * row * (levelWidth - width) + right + bottom; + for (k = 0; k < blockWidth; k++) { + n = magnitude[position]; + if (n !== 0) { + n = (n + magnitudeCorrection) * delta; + if (sign[position] !== 0) { + n = -n; + } + nb = bitsDecoded[position]; + var pos = interleave ? (levelOffset + (offset << 1)) : offset; + if (reversible && (nb >= mb)) { + coefficients[pos] = n; + } else { + coefficients[pos] = n * (1 << (mb - nb)); + } + } + offset++; + position++; + } + offset += width - blockWidth; + } + } + } + function transformTile(context, tile, c) { + var component = tile.components[c]; + var codingStyleParameters = component.codingStyleParameters; + var quantizationParameters = component.quantizationParameters; + var decompositionLevelsCount = + codingStyleParameters.decompositionLevelsCount; + var spqcds = quantizationParameters.SPqcds; + var scalarExpounded = quantizationParameters.scalarExpounded; + var guardBits = quantizationParameters.guardBits; + var segmentationSymbolUsed = codingStyleParameters.segmentationSymbolUsed; + var precision = context.components[c].precision; + + var reversible = codingStyleParameters.reversibleTransformation; + var transform = (reversible ? new ReversibleTransform() : + new IrreversibleTransform()); + + var subbandCoefficients = []; + var b = 0; + for (var i = 0; i <= decompositionLevelsCount; i++) { + var resolution = component.resolutions[i]; + + var width = resolution.trx1 - resolution.trx0; + var height = resolution.try1 - resolution.try0; + // Allocate space for the whole sublevel. + var coefficients = new Float32Array(width * height); + + for (var j = 0, jj = resolution.subbands.length; j < jj; j++) { + var mu, epsilon; + if (!scalarExpounded) { + // formula E-5 + mu = spqcds[0].mu; + epsilon = spqcds[0].epsilon + (i > 0 ? 1 - i : 0); + } else { + mu = spqcds[b].mu; + epsilon = spqcds[b].epsilon; + b++; + } + + var subband = resolution.subbands[j]; + var gainLog2 = SubbandsGainLog2[subband.type]; + + // calulate quantization coefficient (Section E.1.1.1) + var delta = (reversible ? 1 : + Math.pow(2, precision + gainLog2 - epsilon) * (1 + mu / 2048)); + var mb = (guardBits + epsilon - 1); + + // In the first resolution level, copyCoefficients will fill the + // whole array with coefficients. In the succeding passes, + // copyCoefficients will consecutively fill in the values that belong + // to the interleaved positions of the HL, LH, and HH coefficients. + // The LL coefficients will then be interleaved in Transform.iterate(). + copyCoefficients(coefficients, width, height, subband, delta, mb, + reversible, segmentationSymbolUsed); + } + subbandCoefficients.push({ + width: width, + height: height, + items: coefficients + }); + } + + var result = transform.calculate(subbandCoefficients, + component.tcx0, component.tcy0); + return { + left: component.tcx0, + top: component.tcy0, + width: result.width, + height: result.height, + items: result.items + }; + } + function transformComponents(context) { + var siz = context.SIZ; + var components = context.components; + var componentsCount = siz.Csiz; + var resultImages = []; + for (var i = 0, ii = context.tiles.length; i < ii; i++) { + var tile = context.tiles[i]; + var transformedTiles = []; + var c; + for (c = 0; c < componentsCount; c++) { + transformedTiles[c] = transformTile(context, tile, c); + } + var tile0 = transformedTiles[0]; + var out = new Uint8Array(tile0.items.length * componentsCount); + var result = { + left: tile0.left, + top: tile0.top, + width: tile0.width, + height: tile0.height, + items: out + }; + + // Section G.2.2 Inverse multi component transform + var shift, offset, max, min, maxK; + var pos = 0, j, jj, y0, y1, y2, r, g, b, k, val; + if (tile.codingStyleDefaultParameters.multipleComponentTransform) { + var fourComponents = componentsCount === 4; + var y0items = transformedTiles[0].items; + var y1items = transformedTiles[1].items; + var y2items = transformedTiles[2].items; + var y3items = fourComponents ? transformedTiles[3].items : null; + + // HACK: The multiple component transform formulas below assume that + // all components have the same precision. With this in mind, we + // compute shift and offset only once. + shift = components[0].precision - 8; + offset = (128 << shift) + 0.5; + max = 255 * (1 << shift); + maxK = max * 0.5; + min = -maxK; + + var component0 = tile.components[0]; + var alpha01 = componentsCount - 3; + jj = y0items.length; + if (!component0.codingStyleParameters.reversibleTransformation) { + // inverse irreversible multiple component transform + for (j = 0; j < jj; j++, pos += alpha01) { + y0 = y0items[j] + offset; + y1 = y1items[j]; + y2 = y2items[j]; + r = y0 + 1.402 * y2; + g = y0 - 0.34413 * y1 - 0.71414 * y2; + b = y0 + 1.772 * y1; + out[pos++] = r <= 0 ? 0 : r >= max ? 255 : r >> shift; + out[pos++] = g <= 0 ? 0 : g >= max ? 255 : g >> shift; + out[pos++] = b <= 0 ? 0 : b >= max ? 255 : b >> shift; + } + } else { + // inverse reversible multiple component transform + for (j = 0; j < jj; j++, pos += alpha01) { + y0 = y0items[j] + offset; + y1 = y1items[j]; + y2 = y2items[j]; + g = y0 - ((y2 + y1) >> 2); + r = g + y2; + b = g + y1; + out[pos++] = r <= 0 ? 0 : r >= max ? 255 : r >> shift; + out[pos++] = g <= 0 ? 0 : g >= max ? 255 : g >> shift; + out[pos++] = b <= 0 ? 0 : b >= max ? 255 : b >> shift; + } + } + if (fourComponents) { + for (j = 0, pos = 3; j < jj; j++, pos += 4) { + k = y3items[j]; + out[pos] = k <= min ? 0 : k >= maxK ? 255 : (k + offset) >> shift; + } + } + } else { // no multi-component transform + for (c = 0; c < componentsCount; c++) { + var items = transformedTiles[c].items; + shift = components[c].precision - 8; + offset = (128 << shift) + 0.5; + max = (127.5 * (1 << shift)); + min = -max; + for (pos = c, j = 0, jj = items.length; j < jj; j++) { + val = items[j]; + out[pos] = val <= min ? 0 : + val >= max ? 255 : (val + offset) >> shift; + pos += componentsCount; + } + } + } + resultImages.push(result); + } + return resultImages; + } + function initializeTile(context, tileIndex) { + var siz = context.SIZ; + var componentsCount = siz.Csiz; + var tile = context.tiles[tileIndex]; + for (var c = 0; c < componentsCount; c++) { + var component = tile.components[c]; + var qcdOrQcc = (context.currentTile.QCC[c] !== undefined ? + context.currentTile.QCC[c] : context.currentTile.QCD); + component.quantizationParameters = qcdOrQcc; + var codOrCoc = (context.currentTile.COC[c] !== undefined ? + context.currentTile.COC[c] : context.currentTile.COD); + component.codingStyleParameters = codOrCoc; + } + tile.codingStyleDefaultParameters = context.currentTile.COD; + } + + // Section B.10.2 Tag trees + var TagTree = (function TagTreeClosure() { + function TagTree(width, height) { + var levelsLength = log2(Math.max(width, height)) + 1; + this.levels = []; + for (var i = 0; i < levelsLength; i++) { + var level = { + width: width, + height: height, + items: [] + }; + this.levels.push(level); + width = Math.ceil(width / 2); + height = Math.ceil(height / 2); + } + } + TagTree.prototype = { + reset: function TagTree_reset(i, j) { + var currentLevel = 0, value = 0, level; + while (currentLevel < this.levels.length) { + level = this.levels[currentLevel]; + var index = i + j * level.width; + if (level.items[index] !== undefined) { + value = level.items[index]; + break; + } + level.index = index; + i >>= 1; + j >>= 1; + currentLevel++; + } + currentLevel--; + level = this.levels[currentLevel]; + level.items[level.index] = value; + this.currentLevel = currentLevel; + delete this.value; + }, + incrementValue: function TagTree_incrementValue() { + var level = this.levels[this.currentLevel]; + level.items[level.index]++; + }, + nextLevel: function TagTree_nextLevel() { + var currentLevel = this.currentLevel; + var level = this.levels[currentLevel]; + var value = level.items[level.index]; + currentLevel--; + if (currentLevel < 0) { + this.value = value; + return false; + } + + this.currentLevel = currentLevel; + level = this.levels[currentLevel]; + level.items[level.index] = value; + return true; + } + }; + return TagTree; + })(); + + var InclusionTree = (function InclusionTreeClosure() { + function InclusionTree(width, height, defaultValue) { + var levelsLength = log2(Math.max(width, height)) + 1; + this.levels = []; + for (var i = 0; i < levelsLength; i++) { + var items = new Uint8Array(width * height); + for (var j = 0, jj = items.length; j < jj; j++) { + items[j] = defaultValue; + } + + var level = { + width: width, + height: height, + items: items + }; + this.levels.push(level); + + width = Math.ceil(width / 2); + height = Math.ceil(height / 2); + } + } + InclusionTree.prototype = { + reset: function InclusionTree_reset(i, j, stopValue) { + var currentLevel = 0; + while (currentLevel < this.levels.length) { + var level = this.levels[currentLevel]; + var index = i + j * level.width; + level.index = index; + var value = level.items[index]; + + if (value === 0xFF) { + break; + } + + if (value > stopValue) { + this.currentLevel = currentLevel; + // already know about this one, propagating the value to top levels + this.propagateValues(); + return false; + } + + i >>= 1; + j >>= 1; + currentLevel++; + } + this.currentLevel = currentLevel - 1; + return true; + }, + incrementValue: function InclusionTree_incrementValue(stopValue) { + var level = this.levels[this.currentLevel]; + level.items[level.index] = stopValue + 1; + this.propagateValues(); + }, + propagateValues: function InclusionTree_propagateValues() { + var levelIndex = this.currentLevel; + var level = this.levels[levelIndex]; + var currentValue = level.items[level.index]; + while (--levelIndex >= 0) { + level = this.levels[levelIndex]; + level.items[level.index] = currentValue; + } + }, + nextLevel: function InclusionTree_nextLevel() { + var currentLevel = this.currentLevel; + var level = this.levels[currentLevel]; + var value = level.items[level.index]; + level.items[level.index] = 0xFF; + currentLevel--; + if (currentLevel < 0) { + return false; + } + + this.currentLevel = currentLevel; + level = this.levels[currentLevel]; + level.items[level.index] = value; + return true; + } + }; + return InclusionTree; + })(); + + // Section D. Coefficient bit modeling + var BitModel = (function BitModelClosure() { + var UNIFORM_CONTEXT = 17; + var RUNLENGTH_CONTEXT = 18; + // Table D-1 + // The index is binary presentation: 0dddvvhh, ddd - sum of Di (0..4), + // vv - sum of Vi (0..2), and hh - sum of Hi (0..2) + var LLAndLHContextsLabel = new Uint8Array([ + 0, 5, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 1, 6, 8, 0, 3, 7, 8, 0, 4, + 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, + 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8 + ]); + var HLContextLabel = new Uint8Array([ + 0, 3, 4, 0, 5, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 1, 3, 4, 0, 6, 7, 7, 0, 8, + 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, + 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8 + ]); + var HHContextLabel = new Uint8Array([ + 0, 1, 2, 0, 1, 2, 2, 0, 2, 2, 2, 0, 0, 0, 0, 0, 3, 4, 5, 0, 4, 5, 5, 0, 5, + 5, 5, 0, 0, 0, 0, 0, 6, 7, 7, 0, 7, 7, 7, 0, 7, 7, 7, 0, 0, 0, 0, 0, 8, 8, + 8, 0, 8, 8, 8, 0, 8, 8, 8, 0, 0, 0, 0, 0, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8 + ]); + + function BitModel(width, height, subband, zeroBitPlanes, mb) { + this.width = width; + this.height = height; + + this.contextLabelTable = (subband === 'HH' ? HHContextLabel : + (subband === 'HL' ? HLContextLabel : LLAndLHContextsLabel)); + + var coefficientCount = width * height; + + // coefficients outside the encoding region treated as insignificant + // add border state cells for significanceState + this.neighborsSignificance = new Uint8Array(coefficientCount); + this.coefficentsSign = new Uint8Array(coefficientCount); + this.coefficentsMagnitude = mb > 14 ? new Uint32Array(coefficientCount) : + mb > 6 ? new Uint16Array(coefficientCount) : + new Uint8Array(coefficientCount); + this.processingFlags = new Uint8Array(coefficientCount); + + var bitsDecoded = new Uint8Array(coefficientCount); + if (zeroBitPlanes !== 0) { + for (var i = 0; i < coefficientCount; i++) { + bitsDecoded[i] = zeroBitPlanes; + } + } + this.bitsDecoded = bitsDecoded; + + this.reset(); + } + + BitModel.prototype = { + setDecoder: function BitModel_setDecoder(decoder) { + this.decoder = decoder; + }, + reset: function BitModel_reset() { + // We have 17 contexts that are accessed via context labels, + // plus the uniform and runlength context. + this.contexts = new Int8Array(19); + + // Contexts are packed into 1 byte: + // highest 7 bits carry the index, lowest bit carries mps + this.contexts[0] = (4 << 1) | 0; + this.contexts[UNIFORM_CONTEXT] = (46 << 1) | 0; + this.contexts[RUNLENGTH_CONTEXT] = (3 << 1) | 0; + }, + setNeighborsSignificance: + function BitModel_setNeighborsSignificance(row, column, index) { + var neighborsSignificance = this.neighborsSignificance; + var width = this.width, height = this.height; + var left = (column > 0); + var right = (column + 1 < width); + var i; + + if (row > 0) { + i = index - width; + if (left) { + neighborsSignificance[i - 1] += 0x10; + } + if (right) { + neighborsSignificance[i + 1] += 0x10; + } + neighborsSignificance[i] += 0x04; + } + + if (row + 1 < height) { + i = index + width; + if (left) { + neighborsSignificance[i - 1] += 0x10; + } + if (right) { + neighborsSignificance[i + 1] += 0x10; + } + neighborsSignificance[i] += 0x04; + } + + if (left) { + neighborsSignificance[index - 1] += 0x01; + } + if (right) { + neighborsSignificance[index + 1] += 0x01; + } + neighborsSignificance[index] |= 0x80; + }, + runSignificancePropogationPass: + function BitModel_runSignificancePropogationPass() { + var decoder = this.decoder; + var width = this.width, height = this.height; + var coefficentsMagnitude = this.coefficentsMagnitude; + var coefficentsSign = this.coefficentsSign; + var neighborsSignificance = this.neighborsSignificance; + var processingFlags = this.processingFlags; + var contexts = this.contexts; + var labels = this.contextLabelTable; + var bitsDecoded = this.bitsDecoded; + var processedInverseMask = ~1; + var processedMask = 1; + var firstMagnitudeBitMask = 2; + + for (var i0 = 0; i0 < height; i0 += 4) { + for (var j = 0; j < width; j++) { + var index = i0 * width + j; + for (var i1 = 0; i1 < 4; i1++, index += width) { + var i = i0 + i1; + if (i >= height) { + break; + } + // clear processed flag first + processingFlags[index] &= processedInverseMask; + + if (coefficentsMagnitude[index] || + !neighborsSignificance[index]) { + continue; + } + + var contextLabel = labels[neighborsSignificance[index]]; + var decision = decoder.readBit(contexts, contextLabel); + if (decision) { + var sign = this.decodeSignBit(i, j, index); + coefficentsSign[index] = sign; + coefficentsMagnitude[index] = 1; + this.setNeighborsSignificance(i, j, index); + processingFlags[index] |= firstMagnitudeBitMask; + } + bitsDecoded[index]++; + processingFlags[index] |= processedMask; + } + } + } + }, + decodeSignBit: function BitModel_decodeSignBit(row, column, index) { + var width = this.width, height = this.height; + var coefficentsMagnitude = this.coefficentsMagnitude; + var coefficentsSign = this.coefficentsSign; + var contribution, sign0, sign1, significance1; + var contextLabel, decoded; + + // calculate horizontal contribution + significance1 = (column > 0 && coefficentsMagnitude[index - 1] !== 0); + if (column + 1 < width && coefficentsMagnitude[index + 1] !== 0) { + sign1 = coefficentsSign[index + 1]; + if (significance1) { + sign0 = coefficentsSign[index - 1]; + contribution = 1 - sign1 - sign0; + } else { + contribution = 1 - sign1 - sign1; + } + } else if (significance1) { + sign0 = coefficentsSign[index - 1]; + contribution = 1 - sign0 - sign0; + } else { + contribution = 0; + } + var horizontalContribution = 3 * contribution; + + // calculate vertical contribution and combine with the horizontal + significance1 = (row > 0 && coefficentsMagnitude[index - width] !== 0); + if (row + 1 < height && coefficentsMagnitude[index + width] !== 0) { + sign1 = coefficentsSign[index + width]; + if (significance1) { + sign0 = coefficentsSign[index - width]; + contribution = 1 - sign1 - sign0 + horizontalContribution; + } else { + contribution = 1 - sign1 - sign1 + horizontalContribution; + } + } else if (significance1) { + sign0 = coefficentsSign[index - width]; + contribution = 1 - sign0 - sign0 + horizontalContribution; + } else { + contribution = horizontalContribution; + } + + if (contribution >= 0) { + contextLabel = 9 + contribution; + decoded = this.decoder.readBit(this.contexts, contextLabel); + } else { + contextLabel = 9 - contribution; + decoded = this.decoder.readBit(this.contexts, contextLabel) ^ 1; + } + return decoded; + }, + runMagnitudeRefinementPass: + function BitModel_runMagnitudeRefinementPass() { + var decoder = this.decoder; + var width = this.width, height = this.height; + var coefficentsMagnitude = this.coefficentsMagnitude; + var neighborsSignificance = this.neighborsSignificance; + var contexts = this.contexts; + var bitsDecoded = this.bitsDecoded; + var processingFlags = this.processingFlags; + var processedMask = 1; + var firstMagnitudeBitMask = 2; + var length = width * height; + var width4 = width * 4; + + for (var index0 = 0, indexNext; index0 < length; index0 = indexNext) { + indexNext = Math.min(length, index0 + width4); + for (var j = 0; j < width; j++) { + for (var index = index0 + j; index < indexNext; index += width) { + + // significant but not those that have just become + if (!coefficentsMagnitude[index] || + (processingFlags[index] & processedMask) !== 0) { + continue; + } + + var contextLabel = 16; + if ((processingFlags[index] & firstMagnitudeBitMask) !== 0) { + processingFlags[index] ^= firstMagnitudeBitMask; + // first refinement + var significance = neighborsSignificance[index] & 127; + contextLabel = significance === 0 ? 15 : 14; + } + + var bit = decoder.readBit(contexts, contextLabel); + coefficentsMagnitude[index] = + (coefficentsMagnitude[index] << 1) | bit; + bitsDecoded[index]++; + processingFlags[index] |= processedMask; + } + } + } + }, + runCleanupPass: function BitModel_runCleanupPass() { + var decoder = this.decoder; + var width = this.width, height = this.height; + var neighborsSignificance = this.neighborsSignificance; + var coefficentsMagnitude = this.coefficentsMagnitude; + var coefficentsSign = this.coefficentsSign; + var contexts = this.contexts; + var labels = this.contextLabelTable; + var bitsDecoded = this.bitsDecoded; + var processingFlags = this.processingFlags; + var processedMask = 1; + var firstMagnitudeBitMask = 2; + var oneRowDown = width; + var twoRowsDown = width * 2; + var threeRowsDown = width * 3; + var iNext; + for (var i0 = 0; i0 < height; i0 = iNext) { + iNext = Math.min(i0 + 4, height); + var indexBase = i0 * width; + var checkAllEmpty = i0 + 3 < height; + for (var j = 0; j < width; j++) { + var index0 = indexBase + j; + // using the property: labels[neighborsSignificance[index]] === 0 + // when neighborsSignificance[index] === 0 + var allEmpty = (checkAllEmpty && + processingFlags[index0] === 0 && + processingFlags[index0 + oneRowDown] === 0 && + processingFlags[index0 + twoRowsDown] === 0 && + processingFlags[index0 + threeRowsDown] === 0 && + neighborsSignificance[index0] === 0 && + neighborsSignificance[index0 + oneRowDown] === 0 && + neighborsSignificance[index0 + twoRowsDown] === 0 && + neighborsSignificance[index0 + threeRowsDown] === 0); + var i1 = 0, index = index0; + var i = i0, sign; + if (allEmpty) { + var hasSignificantCoefficent = + decoder.readBit(contexts, RUNLENGTH_CONTEXT); + if (!hasSignificantCoefficent) { + bitsDecoded[index0]++; + bitsDecoded[index0 + oneRowDown]++; + bitsDecoded[index0 + twoRowsDown]++; + bitsDecoded[index0 + threeRowsDown]++; + continue; // next column + } + i1 = (decoder.readBit(contexts, UNIFORM_CONTEXT) << 1) | + decoder.readBit(contexts, UNIFORM_CONTEXT); + if (i1 !== 0) { + i = i0 + i1; + index += i1 * width; + } + + sign = this.decodeSignBit(i, j, index); + coefficentsSign[index] = sign; + coefficentsMagnitude[index] = 1; + this.setNeighborsSignificance(i, j, index); + processingFlags[index] |= firstMagnitudeBitMask; + + index = index0; + for (var i2 = i0; i2 <= i; i2++, index += width) { + bitsDecoded[index]++; + } + + i1++; + } + for (i = i0 + i1; i < iNext; i++, index += width) { + if (coefficentsMagnitude[index] || + (processingFlags[index] & processedMask) !== 0) { + continue; + } + + var contextLabel = labels[neighborsSignificance[index]]; + var decision = decoder.readBit(contexts, contextLabel); + if (decision === 1) { + sign = this.decodeSignBit(i, j, index); + coefficentsSign[index] = sign; + coefficentsMagnitude[index] = 1; + this.setNeighborsSignificance(i, j, index); + processingFlags[index] |= firstMagnitudeBitMask; + } + bitsDecoded[index]++; + } + } + } + }, + checkSegmentationSymbol: function BitModel_checkSegmentationSymbol() { + var decoder = this.decoder; + var contexts = this.contexts; + var symbol = (decoder.readBit(contexts, UNIFORM_CONTEXT) << 3) | + (decoder.readBit(contexts, UNIFORM_CONTEXT) << 2) | + (decoder.readBit(contexts, UNIFORM_CONTEXT) << 1) | + decoder.readBit(contexts, UNIFORM_CONTEXT); + if (symbol !== 0xA) { + throw new Error('JPX Error: Invalid segmentation symbol'); + } + } + }; + + return BitModel; + })(); + + // Section F, Discrete wavelet transformation + var Transform = (function TransformClosure() { + function Transform() {} + + Transform.prototype.calculate = + function transformCalculate(subbands, u0, v0) { + var ll = subbands[0]; + for (var i = 1, ii = subbands.length; i < ii; i++) { + ll = this.iterate(ll, subbands[i], u0, v0); + } + return ll; + }; + Transform.prototype.extend = function extend(buffer, offset, size) { + // Section F.3.7 extending... using max extension of 4 + var i1 = offset - 1, j1 = offset + 1; + var i2 = offset + size - 2, j2 = offset + size; + buffer[i1--] = buffer[j1++]; + buffer[j2++] = buffer[i2--]; + buffer[i1--] = buffer[j1++]; + buffer[j2++] = buffer[i2--]; + buffer[i1--] = buffer[j1++]; + buffer[j2++] = buffer[i2--]; + buffer[i1] = buffer[j1]; + buffer[j2] = buffer[i2]; + }; + Transform.prototype.iterate = function Transform_iterate(ll, hl_lh_hh, + u0, v0) { + var llWidth = ll.width, llHeight = ll.height, llItems = ll.items; + var width = hl_lh_hh.width; + var height = hl_lh_hh.height; + var items = hl_lh_hh.items; + var i, j, k, l, u, v; + + // Interleave LL according to Section F.3.3 + for (k = 0, i = 0; i < llHeight; i++) { + l = i * 2 * width; + for (j = 0; j < llWidth; j++, k++, l += 2) { + items[l] = llItems[k]; + } + } + // The LL band is not needed anymore. + llItems = ll.items = null; + + var bufferPadding = 4; + var rowBuffer = new Float32Array(width + 2 * bufferPadding); + + // Section F.3.4 HOR_SR + if (width === 1) { + // if width = 1, when u0 even keep items as is, when odd divide by 2 + if ((u0 & 1) !== 0) { + for (v = 0, k = 0; v < height; v++, k += width) { + items[k] *= 0.5; + } + } + } else { + for (v = 0, k = 0; v < height; v++, k += width) { + rowBuffer.set(items.subarray(k, k + width), bufferPadding); + + this.extend(rowBuffer, bufferPadding, width); + this.filter(rowBuffer, bufferPadding, width); + + items.set( + rowBuffer.subarray(bufferPadding, bufferPadding + width), + k); + } + } + + // Accesses to the items array can take long, because it may not fit into + // CPU cache and has to be fetched from main memory. Since subsequent + // accesses to the items array are not local when reading columns, we + // have a cache miss every time. To reduce cache misses, get up to + // 'numBuffers' items at a time and store them into the individual + // buffers. The colBuffers should be small enough to fit into CPU cache. + var numBuffers = 16; + var colBuffers = []; + for (i = 0; i < numBuffers; i++) { + colBuffers.push(new Float32Array(height + 2 * bufferPadding)); + } + var b, currentBuffer = 0; + ll = bufferPadding + height; + + // Section F.3.5 VER_SR + if (height === 1) { + // if height = 1, when v0 even keep items as is, when odd divide by 2 + if ((v0 & 1) !== 0) { + for (u = 0; u < width; u++) { + items[u] *= 0.5; + } + } + } else { + for (u = 0; u < width; u++) { + // if we ran out of buffers, copy several image columns at once + if (currentBuffer === 0) { + numBuffers = Math.min(width - u, numBuffers); + for (k = u, l = bufferPadding; l < ll; k += width, l++) { + for (b = 0; b < numBuffers; b++) { + colBuffers[b][l] = items[k + b]; + } + } + currentBuffer = numBuffers; + } + + currentBuffer--; + var buffer = colBuffers[currentBuffer]; + this.extend(buffer, bufferPadding, height); + this.filter(buffer, bufferPadding, height); + + // If this is last buffer in this group of buffers, flush all buffers. + if (currentBuffer === 0) { + k = u - numBuffers + 1; + for (l = bufferPadding; l < ll; k += width, l++) { + for (b = 0; b < numBuffers; b++) { + items[k + b] = colBuffers[b][l]; + } + } + } + } + } + + return { + width: width, + height: height, + items: items + }; + }; + return Transform; + })(); + + // Section 3.8.2 Irreversible 9-7 filter + var IrreversibleTransform = (function IrreversibleTransformClosure() { + function IrreversibleTransform() { + Transform.call(this); + } + + IrreversibleTransform.prototype = Object.create(Transform.prototype); + IrreversibleTransform.prototype.filter = + function irreversibleTransformFilter(x, offset, length) { + var len = length >> 1; + offset = offset | 0; + var j, n, current, next; + + var alpha = -1.586134342059924; + var beta = -0.052980118572961; + var gamma = 0.882911075530934; + var delta = 0.443506852043971; + var K = 1.230174104914001; + var K_ = 1 / K; + + // step 1 is combined with step 3 + + // step 2 + j = offset - 3; + for (n = len + 4; n--; j += 2) { + x[j] *= K_; + } + + // step 1 & 3 + j = offset - 2; + current = delta * x[j -1]; + for (n = len + 3; n--; j += 2) { + next = delta * x[j + 1]; + x[j] = K * x[j] - current - next; + if (n--) { + j += 2; + current = delta * x[j + 1]; + x[j] = K * x[j] - current - next; + } else { + break; + } + } + + // step 4 + j = offset - 1; + current = gamma * x[j - 1]; + for (n = len + 2; n--; j += 2) { + next = gamma * x[j + 1]; + x[j] -= current + next; + if (n--) { + j += 2; + current = gamma * x[j + 1]; + x[j] -= current + next; + } else { + break; + } + } + + // step 5 + j = offset; + current = beta * x[j - 1]; + for (n = len + 1; n--; j += 2) { + next = beta * x[j + 1]; + x[j] -= current + next; + if (n--) { + j += 2; + current = beta * x[j + 1]; + x[j] -= current + next; + } else { + break; + } + } + + // step 6 + if (len !== 0) { + j = offset + 1; + current = alpha * x[j - 1]; + for (n = len; n--; j += 2) { + next = alpha * x[j + 1]; + x[j] -= current + next; + if (n--) { + j += 2; + current = alpha * x[j + 1]; + x[j] -= current + next; + } else { + break; + } + } + } + }; + + return IrreversibleTransform; + })(); + + // Section 3.8.1 Reversible 5-3 filter + var ReversibleTransform = (function ReversibleTransformClosure() { + function ReversibleTransform() { + Transform.call(this); + } + + ReversibleTransform.prototype = Object.create(Transform.prototype); + ReversibleTransform.prototype.filter = + function reversibleTransformFilter(x, offset, length) { + var len = length >> 1; + offset = offset | 0; + var j, n; + + for (j = offset, n = len + 1; n--; j += 2) { + x[j] -= (x[j - 1] + x[j + 1] + 2) >> 2; + } + + for (j = offset + 1, n = len; n--; j += 2) { + x[j] += (x[j - 1] + x[j + 1]) >> 1; + } + }; + + return ReversibleTransform; + })(); + + return JpxImage; +})(); + + +var Jbig2Image = (function Jbig2ImageClosure() { + // Utility data structures + function ContextCache() {} + + ContextCache.prototype = { + getContexts: function(id) { + if (id in this) { + return this[id]; + } + return (this[id] = new Int8Array(1 << 16)); + } + }; + + function DecodingContext(data, start, end) { + this.data = data; + this.start = start; + this.end = end; + } + + DecodingContext.prototype = { + get decoder() { + var decoder = new ArithmeticDecoder(this.data, this.start, this.end); + return shadow(this, 'decoder', decoder); + }, + get contextCache() { + var cache = new ContextCache(); + return shadow(this, 'contextCache', cache); + } + }; + + // Annex A. Arithmetic Integer Decoding Procedure + // A.2 Procedure for decoding values + function decodeInteger(contextCache, procedure, decoder) { + var contexts = contextCache.getContexts(procedure); + var prev = 1; + + function readBits(length) { + var v = 0; + for (var i = 0; i < length; i++) { + var bit = decoder.readBit(contexts, prev); + prev = (prev < 256 ? (prev << 1) | bit : + (((prev << 1) | bit) & 511) | 256); + v = (v << 1) | bit; + } + return v >>> 0; + } + + var sign = readBits(1); + var value = readBits(1) ? + (readBits(1) ? + (readBits(1) ? + (readBits(1) ? + (readBits(1) ? + (readBits(32) + 4436) : + readBits(12) + 340) : + readBits(8) + 84) : + readBits(6) + 20) : + readBits(4) + 4) : + readBits(2); + return (sign === 0 ? value : (value > 0 ? -value : null)); + } + + // A.3 The IAID decoding procedure + function decodeIAID(contextCache, decoder, codeLength) { + var contexts = contextCache.getContexts('IAID'); + + var prev = 1; + for (var i = 0; i < codeLength; i++) { + var bit = decoder.readBit(contexts, prev); + prev = (prev << 1) | bit; + } + if (codeLength < 31) { + return prev & ((1 << codeLength) - 1); + } + return prev & 0x7FFFFFFF; + } + + // 7.3 Segment types + var SegmentTypes = [ + 'SymbolDictionary', null, null, null, 'IntermediateTextRegion', null, + 'ImmediateTextRegion', 'ImmediateLosslessTextRegion', null, null, null, + null, null, null, null, null, 'patternDictionary', null, null, null, + 'IntermediateHalftoneRegion', null, 'ImmediateHalftoneRegion', + 'ImmediateLosslessHalftoneRegion', null, null, null, null, null, null, null, + null, null, null, null, null, 'IntermediateGenericRegion', null, + 'ImmediateGenericRegion', 'ImmediateLosslessGenericRegion', + 'IntermediateGenericRefinementRegion', null, + 'ImmediateGenericRefinementRegion', + 'ImmediateLosslessGenericRefinementRegion', null, null, null, null, + 'PageInformation', 'EndOfPage', 'EndOfStripe', 'EndOfFile', 'Profiles', + 'Tables', null, null, null, null, null, null, null, null, + 'Extension' + ]; + + var CodingTemplates = [ + [{x: -1, y: -2}, {x: 0, y: -2}, {x: 1, y: -2}, {x: -2, y: -1}, + {x: -1, y: -1}, {x: 0, y: -1}, {x: 1, y: -1}, {x: 2, y: -1}, + {x: -4, y: 0}, {x: -3, y: 0}, {x: -2, y: 0}, {x: -1, y: 0}], + [{x: -1, y: -2}, {x: 0, y: -2}, {x: 1, y: -2}, {x: 2, y: -2}, + {x: -2, y: -1}, {x: -1, y: -1}, {x: 0, y: -1}, {x: 1, y: -1}, + {x: 2, y: -1}, {x: -3, y: 0}, {x: -2, y: 0}, {x: -1, y: 0}], + [{x: -1, y: -2}, {x: 0, y: -2}, {x: 1, y: -2}, {x: -2, y: -1}, + {x: -1, y: -1}, {x: 0, y: -1}, {x: 1, y: -1}, {x: -2, y: 0}, + {x: -1, y: 0}], + [{x: -3, y: -1}, {x: -2, y: -1}, {x: -1, y: -1}, {x: 0, y: -1}, + {x: 1, y: -1}, {x: -4, y: 0}, {x: -3, y: 0}, {x: -2, y: 0}, {x: -1, y: 0}] + ]; + + var RefinementTemplates = [ + { + coding: [{x: 0, y: -1}, {x: 1, y: -1}, {x: -1, y: 0}], + reference: [{x: 0, y: -1}, {x: 1, y: -1}, {x: -1, y: 0}, {x: 0, y: 0}, + {x: 1, y: 0}, {x: -1, y: 1}, {x: 0, y: 1}, {x: 1, y: 1}] + }, + { + coding: [{x: -1, y: -1}, {x: 0, y: -1}, {x: 1, y: -1}, {x: -1, y: 0}], + reference: [{x: 0, y: -1}, {x: -1, y: 0}, {x: 0, y: 0}, {x: 1, y: 0}, + {x: 0, y: 1}, {x: 1, y: 1}] + } + ]; + + // See 6.2.5.7 Decoding the bitmap. + var ReusedContexts = [ + 0x9B25, // 10011 0110010 0101 + 0x0795, // 0011 110010 101 + 0x00E5, // 001 11001 01 + 0x0195 // 011001 0101 + ]; + + var RefinementReusedContexts = [ + 0x0020, // '000' + '0' (coding) + '00010000' + '0' (reference) + 0x0008 // '0000' + '001000' + ]; + + function decodeBitmapTemplate0(width, height, decodingContext) { + var decoder = decodingContext.decoder; + var contexts = decodingContext.contextCache.getContexts('GB'); + var contextLabel, i, j, pixel, row, row1, row2, bitmap = []; + + // ...ooooo.... + // ..ooooooo... Context template for current pixel (X) + // .ooooX...... (concatenate values of 'o'-pixels to get contextLabel) + var OLD_PIXEL_MASK = 0x7BF7; // 01111 0111111 0111 + + for (i = 0; i < height; i++) { + row = bitmap[i] = new Uint8Array(width); + row1 = (i < 1) ? row : bitmap[i - 1]; + row2 = (i < 2) ? row : bitmap[i - 2]; + + // At the beginning of each row: + // Fill contextLabel with pixels that are above/right of (X) + contextLabel = (row2[0] << 13) | (row2[1] << 12) | (row2[2] << 11) | + (row1[0] << 7) | (row1[1] << 6) | (row1[2] << 5) | + (row1[3] << 4); + + for (j = 0; j < width; j++) { + row[j] = pixel = decoder.readBit(contexts, contextLabel); + + // At each pixel: Clear contextLabel pixels that are shifted + // out of the context, then add new ones. + contextLabel = ((contextLabel & OLD_PIXEL_MASK) << 1) | + (j + 3 < width ? row2[j + 3] << 11 : 0) | + (j + 4 < width ? row1[j + 4] << 4 : 0) | pixel; + } + } + + return bitmap; + } + + // 6.2 Generic Region Decoding Procedure + function decodeBitmap(mmr, width, height, templateIndex, prediction, skip, at, + decodingContext) { + if (mmr) { + error('JBIG2 error: MMR encoding is not supported'); + } + + // Use optimized version for the most common case + if (templateIndex === 0 && !skip && !prediction && at.length === 4 && + at[0].x === 3 && at[0].y === -1 && at[1].x === -3 && at[1].y === -1 && + at[2].x === 2 && at[2].y === -2 && at[3].x === -2 && at[3].y === -2) { + return decodeBitmapTemplate0(width, height, decodingContext); + } + + var useskip = !!skip; + var template = CodingTemplates[templateIndex].concat(at); + + // Sorting is non-standard, and it is not required. But sorting increases + // the number of template bits that can be reused from the previous + // contextLabel in the main loop. + template.sort(function (a, b) { + return (a.y - b.y) || (a.x - b.x); + }); + + var templateLength = template.length; + var templateX = new Int8Array(templateLength); + var templateY = new Int8Array(templateLength); + var changingTemplateEntries = []; + var reuseMask = 0, minX = 0, maxX = 0, minY = 0; + var c, k; + + for (k = 0; k < templateLength; k++) { + templateX[k] = template[k].x; + templateY[k] = template[k].y; + minX = Math.min(minX, template[k].x); + maxX = Math.max(maxX, template[k].x); + minY = Math.min(minY, template[k].y); + // Check if the template pixel appears in two consecutive context labels, + // so it can be reused. Otherwise, we add it to the list of changing + // template entries. + if (k < templateLength - 1 && + template[k].y === template[k + 1].y && + template[k].x === template[k + 1].x - 1) { + reuseMask |= 1 << (templateLength - 1 - k); + } else { + changingTemplateEntries.push(k); + } + } + var changingEntriesLength = changingTemplateEntries.length; + + var changingTemplateX = new Int8Array(changingEntriesLength); + var changingTemplateY = new Int8Array(changingEntriesLength); + var changingTemplateBit = new Uint16Array(changingEntriesLength); + for (c = 0; c < changingEntriesLength; c++) { + k = changingTemplateEntries[c]; + changingTemplateX[c] = template[k].x; + changingTemplateY[c] = template[k].y; + changingTemplateBit[c] = 1 << (templateLength - 1 - k); + } + + // Get the safe bounding box edges from the width, height, minX, maxX, minY + var sbb_left = -minX; + var sbb_top = -minY; + var sbb_right = width - maxX; + + var pseudoPixelContext = ReusedContexts[templateIndex]; + var row = new Uint8Array(width); + var bitmap = []; + + var decoder = decodingContext.decoder; + var contexts = decodingContext.contextCache.getContexts('GB'); + + var ltp = 0, j, i0, j0, contextLabel = 0, bit, shift; + for (var i = 0; i < height; i++) { + if (prediction) { + var sltp = decoder.readBit(contexts, pseudoPixelContext); + ltp ^= sltp; + if (ltp) { + bitmap.push(row); // duplicate previous row + continue; + } + } + row = new Uint8Array(row); + bitmap.push(row); + for (j = 0; j < width; j++) { + if (useskip && skip[i][j]) { + row[j] = 0; + continue; + } + // Are we in the middle of a scanline, so we can reuse contextLabel + // bits? + if (j >= sbb_left && j < sbb_right && i >= sbb_top) { + // If yes, we can just shift the bits that are reusable and only + // fetch the remaining ones. + contextLabel = (contextLabel << 1) & reuseMask; + for (k = 0; k < changingEntriesLength; k++) { + i0 = i + changingTemplateY[k]; + j0 = j + changingTemplateX[k]; + bit = bitmap[i0][j0]; + if (bit) { + bit = changingTemplateBit[k]; + contextLabel |= bit; + } + } + } else { + // compute the contextLabel from scratch + contextLabel = 0; + shift = templateLength - 1; + for (k = 0; k < templateLength; k++, shift--) { + j0 = j + templateX[k]; + if (j0 >= 0 && j0 < width) { + i0 = i + templateY[k]; + if (i0 >= 0) { + bit = bitmap[i0][j0]; + if (bit) { + contextLabel |= bit << shift; + } + } + } + } + } + var pixel = decoder.readBit(contexts, contextLabel); + row[j] = pixel; + } + } + return bitmap; + } + + // 6.3.2 Generic Refinement Region Decoding Procedure + function decodeRefinement(width, height, templateIndex, referenceBitmap, + offsetX, offsetY, prediction, at, + decodingContext) { + var codingTemplate = RefinementTemplates[templateIndex].coding; + if (templateIndex === 0) { + codingTemplate = codingTemplate.concat([at[0]]); + } + var codingTemplateLength = codingTemplate.length; + var codingTemplateX = new Int32Array(codingTemplateLength); + var codingTemplateY = new Int32Array(codingTemplateLength); + var k; + for (k = 0; k < codingTemplateLength; k++) { + codingTemplateX[k] = codingTemplate[k].x; + codingTemplateY[k] = codingTemplate[k].y; + } + + var referenceTemplate = RefinementTemplates[templateIndex].reference; + if (templateIndex === 0) { + referenceTemplate = referenceTemplate.concat([at[1]]); + } + var referenceTemplateLength = referenceTemplate.length; + var referenceTemplateX = new Int32Array(referenceTemplateLength); + var referenceTemplateY = new Int32Array(referenceTemplateLength); + for (k = 0; k < referenceTemplateLength; k++) { + referenceTemplateX[k] = referenceTemplate[k].x; + referenceTemplateY[k] = referenceTemplate[k].y; + } + var referenceWidth = referenceBitmap[0].length; + var referenceHeight = referenceBitmap.length; + + var pseudoPixelContext = RefinementReusedContexts[templateIndex]; + var bitmap = []; + + var decoder = decodingContext.decoder; + var contexts = decodingContext.contextCache.getContexts('GR'); + + var ltp = 0; + for (var i = 0; i < height; i++) { + if (prediction) { + var sltp = decoder.readBit(contexts, pseudoPixelContext); + ltp ^= sltp; + if (ltp) { + error('JBIG2 error: prediction is not supported'); + } + } + var row = new Uint8Array(width); + bitmap.push(row); + for (var j = 0; j < width; j++) { + var i0, j0; + var contextLabel = 0; + for (k = 0; k < codingTemplateLength; k++) { + i0 = i + codingTemplateY[k]; + j0 = j + codingTemplateX[k]; + if (i0 < 0 || j0 < 0 || j0 >= width) { + contextLabel <<= 1; // out of bound pixel + } else { + contextLabel = (contextLabel << 1) | bitmap[i0][j0]; + } + } + for (k = 0; k < referenceTemplateLength; k++) { + i0 = i + referenceTemplateY[k] + offsetY; + j0 = j + referenceTemplateX[k] + offsetX; + if (i0 < 0 || i0 >= referenceHeight || j0 < 0 || + j0 >= referenceWidth) { + contextLabel <<= 1; // out of bound pixel + } else { + contextLabel = (contextLabel << 1) | referenceBitmap[i0][j0]; + } + } + var pixel = decoder.readBit(contexts, contextLabel); + row[j] = pixel; + } + } + + return bitmap; + } + + // 6.5.5 Decoding the symbol dictionary + function decodeSymbolDictionary(huffman, refinement, symbols, + numberOfNewSymbols, numberOfExportedSymbols, + huffmanTables, templateIndex, at, + refinementTemplateIndex, refinementAt, + decodingContext) { + if (huffman) { + error('JBIG2 error: huffman is not supported'); + } + + var newSymbols = []; + var currentHeight = 0; + var symbolCodeLength = log2(symbols.length + numberOfNewSymbols); + + var decoder = decodingContext.decoder; + var contextCache = decodingContext.contextCache; + + while (newSymbols.length < numberOfNewSymbols) { + var deltaHeight = decodeInteger(contextCache, 'IADH', decoder); // 6.5.6 + currentHeight += deltaHeight; + var currentWidth = 0; + var totalWidth = 0; + while (true) { + var deltaWidth = decodeInteger(contextCache, 'IADW', decoder); // 6.5.7 + if (deltaWidth === null) { + break; // OOB + } + currentWidth += deltaWidth; + totalWidth += currentWidth; + var bitmap; + if (refinement) { + // 6.5.8.2 Refinement/aggregate-coded symbol bitmap + var numberOfInstances = decodeInteger(contextCache, 'IAAI', decoder); + if (numberOfInstances > 1) { + bitmap = decodeTextRegion(huffman, refinement, + currentWidth, currentHeight, 0, + numberOfInstances, 1, //strip size + symbols.concat(newSymbols), + symbolCodeLength, + 0, //transposed + 0, //ds offset + 1, //top left 7.4.3.1.1 + 0, //OR operator + huffmanTables, + refinementTemplateIndex, refinementAt, + decodingContext); + } else { + var symbolId = decodeIAID(contextCache, decoder, symbolCodeLength); + var rdx = decodeInteger(contextCache, 'IARDX', decoder); // 6.4.11.3 + var rdy = decodeInteger(contextCache, 'IARDY', decoder); // 6.4.11.4 + var symbol = (symbolId < symbols.length ? symbols[symbolId] : + newSymbols[symbolId - symbols.length]); + bitmap = decodeRefinement(currentWidth, currentHeight, + refinementTemplateIndex, symbol, rdx, rdy, false, refinementAt, + decodingContext); + } + } else { + // 6.5.8.1 Direct-coded symbol bitmap + bitmap = decodeBitmap(false, currentWidth, currentHeight, + templateIndex, false, null, at, decodingContext); + } + newSymbols.push(bitmap); + } + } + // 6.5.10 Exported symbols + var exportedSymbols = []; + var flags = [], currentFlag = false; + var totalSymbolsLength = symbols.length + numberOfNewSymbols; + while (flags.length < totalSymbolsLength) { + var runLength = decodeInteger(contextCache, 'IAEX', decoder); + while (runLength--) { + flags.push(currentFlag); + } + currentFlag = !currentFlag; + } + for (var i = 0, ii = symbols.length; i < ii; i++) { + if (flags[i]) { + exportedSymbols.push(symbols[i]); + } + } + for (var j = 0; j < numberOfNewSymbols; i++, j++) { + if (flags[i]) { + exportedSymbols.push(newSymbols[j]); + } + } + return exportedSymbols; + } + + function decodeTextRegion(huffman, refinement, width, height, + defaultPixelValue, numberOfSymbolInstances, + stripSize, inputSymbols, symbolCodeLength, + transposed, dsOffset, referenceCorner, + combinationOperator, huffmanTables, + refinementTemplateIndex, refinementAt, + decodingContext) { + if (huffman) { + error('JBIG2 error: huffman is not supported'); + } + + // Prepare bitmap + var bitmap = []; + var i, row; + for (i = 0; i < height; i++) { + row = new Uint8Array(width); + if (defaultPixelValue) { + for (var j = 0; j < width; j++) { + row[j] = defaultPixelValue; + } + } + bitmap.push(row); + } + + var decoder = decodingContext.decoder; + var contextCache = decodingContext.contextCache; + var stripT = -decodeInteger(contextCache, 'IADT', decoder); // 6.4.6 + var firstS = 0; + i = 0; + while (i < numberOfSymbolInstances) { + var deltaT = decodeInteger(contextCache, 'IADT', decoder); // 6.4.6 + stripT += deltaT; + + var deltaFirstS = decodeInteger(contextCache, 'IAFS', decoder); // 6.4.7 + firstS += deltaFirstS; + var currentS = firstS; + do { + var currentT = (stripSize === 1 ? 0 : + decodeInteger(contextCache, 'IAIT', decoder)); // 6.4.9 + var t = stripSize * stripT + currentT; + var symbolId = decodeIAID(contextCache, decoder, symbolCodeLength); + var applyRefinement = (refinement && + decodeInteger(contextCache, 'IARI', decoder)); + var symbolBitmap = inputSymbols[symbolId]; + var symbolWidth = symbolBitmap[0].length; + var symbolHeight = symbolBitmap.length; + if (applyRefinement) { + var rdw = decodeInteger(contextCache, 'IARDW', decoder); // 6.4.11.1 + var rdh = decodeInteger(contextCache, 'IARDH', decoder); // 6.4.11.2 + var rdx = decodeInteger(contextCache, 'IARDX', decoder); // 6.4.11.3 + var rdy = decodeInteger(contextCache, 'IARDY', decoder); // 6.4.11.4 + symbolWidth += rdw; + symbolHeight += rdh; + symbolBitmap = decodeRefinement(symbolWidth, symbolHeight, + refinementTemplateIndex, symbolBitmap, (rdw >> 1) + rdx, + (rdh >> 1) + rdy, false, refinementAt, + decodingContext); + } + var offsetT = t - ((referenceCorner & 1) ? 0 : symbolHeight); + var offsetS = currentS - ((referenceCorner & 2) ? symbolWidth : 0); + var s2, t2, symbolRow; + if (transposed) { + // Place Symbol Bitmap from T1,S1 + for (s2 = 0; s2 < symbolHeight; s2++) { + row = bitmap[offsetS + s2]; + if (!row) { + continue; + } + symbolRow = symbolBitmap[s2]; + // To ignore Parts of Symbol bitmap which goes + // outside bitmap region + var maxWidth = Math.min(width - offsetT, symbolWidth); + switch (combinationOperator) { + case 0: // OR + for (t2 = 0; t2 < maxWidth; t2++) { + row[offsetT + t2] |= symbolRow[t2]; + } + break; + case 2: // XOR + for (t2 = 0; t2 < maxWidth; t2++) { + row[offsetT + t2] ^= symbolRow[t2]; + } + break; + default: + error('JBIG2 error: operator ' + combinationOperator + + ' is not supported'); + } + } + currentS += symbolHeight - 1; + } else { + for (t2 = 0; t2 < symbolHeight; t2++) { + row = bitmap[offsetT + t2]; + if (!row) { + continue; + } + symbolRow = symbolBitmap[t2]; + switch (combinationOperator) { + case 0: // OR + for (s2 = 0; s2 < symbolWidth; s2++) { + row[offsetS + s2] |= symbolRow[s2]; + } + break; + case 2: // XOR + for (s2 = 0; s2 < symbolWidth; s2++) { + row[offsetS + s2] ^= symbolRow[s2]; + } + break; + default: + error('JBIG2 error: operator ' + combinationOperator + + ' is not supported'); + } + } + currentS += symbolWidth - 1; + } + i++; + var deltaS = decodeInteger(contextCache, 'IADS', decoder); // 6.4.8 + if (deltaS === null) { + break; // OOB + } + currentS += deltaS + dsOffset; + } while (true); + } + return bitmap; + } + + function readSegmentHeader(data, start) { + var segmentHeader = {}; + segmentHeader.number = readUint32(data, start); + var flags = data[start + 4]; + var segmentType = flags & 0x3F; + if (!SegmentTypes[segmentType]) { + error('JBIG2 error: invalid segment type: ' + segmentType); + } + segmentHeader.type = segmentType; + segmentHeader.typeName = SegmentTypes[segmentType]; + segmentHeader.deferredNonRetain = !!(flags & 0x80); + + var pageAssociationFieldSize = !!(flags & 0x40); + var referredFlags = data[start + 5]; + var referredToCount = (referredFlags >> 5) & 7; + var retainBits = [referredFlags & 31]; + var position = start + 6; + if (referredFlags === 7) { + referredToCount = readUint32(data, position - 1) & 0x1FFFFFFF; + position += 3; + var bytes = (referredToCount + 7) >> 3; + retainBits[0] = data[position++]; + while (--bytes > 0) { + retainBits.push(data[position++]); + } + } else if (referredFlags === 5 || referredFlags === 6) { + error('JBIG2 error: invalid referred-to flags'); + } + + segmentHeader.retainBits = retainBits; + var referredToSegmentNumberSize = (segmentHeader.number <= 256 ? 1 : + (segmentHeader.number <= 65536 ? 2 : 4)); + var referredTo = []; + var i, ii; + for (i = 0; i < referredToCount; i++) { + var number = (referredToSegmentNumberSize === 1 ? data[position] : + (referredToSegmentNumberSize === 2 ? readUint16(data, position) : + readUint32(data, position))); + referredTo.push(number); + position += referredToSegmentNumberSize; + } + segmentHeader.referredTo = referredTo; + if (!pageAssociationFieldSize) { + segmentHeader.pageAssociation = data[position++]; + } else { + segmentHeader.pageAssociation = readUint32(data, position); + position += 4; + } + segmentHeader.length = readUint32(data, position); + position += 4; + + if (segmentHeader.length === 0xFFFFFFFF) { + // 7.2.7 Segment data length, unknown segment length + if (segmentType === 38) { // ImmediateGenericRegion + var genericRegionInfo = readRegionSegmentInformation(data, position); + var genericRegionSegmentFlags = data[position + + RegionSegmentInformationFieldLength]; + var genericRegionMmr = !!(genericRegionSegmentFlags & 1); + // searching for the segment end + var searchPatternLength = 6; + var searchPattern = new Uint8Array(searchPatternLength); + if (!genericRegionMmr) { + searchPattern[0] = 0xFF; + searchPattern[1] = 0xAC; + } + searchPattern[2] = (genericRegionInfo.height >>> 24) & 0xFF; + searchPattern[3] = (genericRegionInfo.height >> 16) & 0xFF; + searchPattern[4] = (genericRegionInfo.height >> 8) & 0xFF; + searchPattern[5] = genericRegionInfo.height & 0xFF; + for (i = position, ii = data.length; i < ii; i++) { + var j = 0; + while (j < searchPatternLength && searchPattern[j] === data[i + j]) { + j++; + } + if (j === searchPatternLength) { + segmentHeader.length = i + searchPatternLength; + break; + } + } + if (segmentHeader.length === 0xFFFFFFFF) { + error('JBIG2 error: segment end was not found'); + } + } else { + error('JBIG2 error: invalid unknown segment length'); + } + } + segmentHeader.headerEnd = position; + return segmentHeader; + } + + function readSegments(header, data, start, end) { + var segments = []; + var position = start; + while (position < end) { + var segmentHeader = readSegmentHeader(data, position); + position = segmentHeader.headerEnd; + var segment = { + header: segmentHeader, + data: data + }; + if (!header.randomAccess) { + segment.start = position; + position += segmentHeader.length; + segment.end = position; + } + segments.push(segment); + if (segmentHeader.type === 51) { + break; // end of file is found + } + } + if (header.randomAccess) { + for (var i = 0, ii = segments.length; i < ii; i++) { + segments[i].start = position; + position += segments[i].header.length; + segments[i].end = position; + } + } + return segments; + } + + // 7.4.1 Region segment information field + function readRegionSegmentInformation(data, start) { + return { + width: readUint32(data, start), + height: readUint32(data, start + 4), + x: readUint32(data, start + 8), + y: readUint32(data, start + 12), + combinationOperator: data[start + 16] & 7 + }; + } + var RegionSegmentInformationFieldLength = 17; + + function processSegment(segment, visitor) { + var header = segment.header; + + var data = segment.data, position = segment.start, end = segment.end; + var args, at, i, atLength; + switch (header.type) { + case 0: // SymbolDictionary + // 7.4.2 Symbol dictionary segment syntax + var dictionary = {}; + var dictionaryFlags = readUint16(data, position); // 7.4.2.1.1 + dictionary.huffman = !!(dictionaryFlags & 1); + dictionary.refinement = !!(dictionaryFlags & 2); + dictionary.huffmanDHSelector = (dictionaryFlags >> 2) & 3; + dictionary.huffmanDWSelector = (dictionaryFlags >> 4) & 3; + dictionary.bitmapSizeSelector = (dictionaryFlags >> 6) & 1; + dictionary.aggregationInstancesSelector = (dictionaryFlags >> 7) & 1; + dictionary.bitmapCodingContextUsed = !!(dictionaryFlags & 256); + dictionary.bitmapCodingContextRetained = !!(dictionaryFlags & 512); + dictionary.template = (dictionaryFlags >> 10) & 3; + dictionary.refinementTemplate = (dictionaryFlags >> 12) & 1; + position += 2; + if (!dictionary.huffman) { + atLength = dictionary.template === 0 ? 4 : 1; + at = []; + for (i = 0; i < atLength; i++) { + at.push({ + x: readInt8(data, position), + y: readInt8(data, position + 1) + }); + position += 2; + } + dictionary.at = at; + } + if (dictionary.refinement && !dictionary.refinementTemplate) { + at = []; + for (i = 0; i < 2; i++) { + at.push({ + x: readInt8(data, position), + y: readInt8(data, position + 1) + }); + position += 2; + } + dictionary.refinementAt = at; + } + dictionary.numberOfExportedSymbols = readUint32(data, position); + position += 4; + dictionary.numberOfNewSymbols = readUint32(data, position); + position += 4; + args = [dictionary, header.number, header.referredTo, + data, position, end]; + break; + case 6: // ImmediateTextRegion + case 7: // ImmediateLosslessTextRegion + var textRegion = {}; + textRegion.info = readRegionSegmentInformation(data, position); + position += RegionSegmentInformationFieldLength; + var textRegionSegmentFlags = readUint16(data, position); + position += 2; + textRegion.huffman = !!(textRegionSegmentFlags & 1); + textRegion.refinement = !!(textRegionSegmentFlags & 2); + textRegion.stripSize = 1 << ((textRegionSegmentFlags >> 2) & 3); + textRegion.referenceCorner = (textRegionSegmentFlags >> 4) & 3; + textRegion.transposed = !!(textRegionSegmentFlags & 64); + textRegion.combinationOperator = (textRegionSegmentFlags >> 7) & 3; + textRegion.defaultPixelValue = (textRegionSegmentFlags >> 9) & 1; + textRegion.dsOffset = (textRegionSegmentFlags << 17) >> 27; + textRegion.refinementTemplate = (textRegionSegmentFlags >> 15) & 1; + if (textRegion.huffman) { + var textRegionHuffmanFlags = readUint16(data, position); + position += 2; + textRegion.huffmanFS = (textRegionHuffmanFlags) & 3; + textRegion.huffmanDS = (textRegionHuffmanFlags >> 2) & 3; + textRegion.huffmanDT = (textRegionHuffmanFlags >> 4) & 3; + textRegion.huffmanRefinementDW = (textRegionHuffmanFlags >> 6) & 3; + textRegion.huffmanRefinementDH = (textRegionHuffmanFlags >> 8) & 3; + textRegion.huffmanRefinementDX = (textRegionHuffmanFlags >> 10) & 3; + textRegion.huffmanRefinementDY = (textRegionHuffmanFlags >> 12) & 3; + textRegion.huffmanRefinementSizeSelector = + !!(textRegionHuffmanFlags & 14); + } + if (textRegion.refinement && !textRegion.refinementTemplate) { + at = []; + for (i = 0; i < 2; i++) { + at.push({ + x: readInt8(data, position), + y: readInt8(data, position + 1) + }); + position += 2; + } + textRegion.refinementAt = at; + } + textRegion.numberOfSymbolInstances = readUint32(data, position); + position += 4; + // TODO 7.4.3.1.7 Symbol ID Huffman table decoding + if (textRegion.huffman) { + error('JBIG2 error: huffman is not supported'); + } + args = [textRegion, header.referredTo, data, position, end]; + break; + case 38: // ImmediateGenericRegion + case 39: // ImmediateLosslessGenericRegion + var genericRegion = {}; + genericRegion.info = readRegionSegmentInformation(data, position); + position += RegionSegmentInformationFieldLength; + var genericRegionSegmentFlags = data[position++]; + genericRegion.mmr = !!(genericRegionSegmentFlags & 1); + genericRegion.template = (genericRegionSegmentFlags >> 1) & 3; + genericRegion.prediction = !!(genericRegionSegmentFlags & 8); + if (!genericRegion.mmr) { + atLength = genericRegion.template === 0 ? 4 : 1; + at = []; + for (i = 0; i < atLength; i++) { + at.push({ + x: readInt8(data, position), + y: readInt8(data, position + 1) + }); + position += 2; + } + genericRegion.at = at; + } + args = [genericRegion, data, position, end]; + break; + case 48: // PageInformation + var pageInfo = { + width: readUint32(data, position), + height: readUint32(data, position + 4), + resolutionX: readUint32(data, position + 8), + resolutionY: readUint32(data, position + 12) + }; + if (pageInfo.height === 0xFFFFFFFF) { + delete pageInfo.height; + } + var pageSegmentFlags = data[position + 16]; + var pageStripingInformatiom = readUint16(data, position + 17); + pageInfo.lossless = !!(pageSegmentFlags & 1); + pageInfo.refinement = !!(pageSegmentFlags & 2); + pageInfo.defaultPixelValue = (pageSegmentFlags >> 2) & 1; + pageInfo.combinationOperator = (pageSegmentFlags >> 3) & 3; + pageInfo.requiresBuffer = !!(pageSegmentFlags & 32); + pageInfo.combinationOperatorOverride = !!(pageSegmentFlags & 64); + args = [pageInfo]; + break; + case 49: // EndOfPage + break; + case 50: // EndOfStripe + break; + case 51: // EndOfFile + break; + case 62: // 7.4.15 defines 2 extension types which + // are comments and can be ignored. + break; + default: + error('JBIG2 error: segment type ' + header.typeName + '(' + + header.type + ') is not implemented'); + } + var callbackName = 'on' + header.typeName; + if (callbackName in visitor) { + visitor[callbackName].apply(visitor, args); + } + } + + function processSegments(segments, visitor) { + for (var i = 0, ii = segments.length; i < ii; i++) { + processSegment(segments[i], visitor); + } + } + + function parseJbig2(data, start, end) { + var position = start; + if (data[position] !== 0x97 || data[position + 1] !== 0x4A || + data[position + 2] !== 0x42 || data[position + 3] !== 0x32 || + data[position + 4] !== 0x0D || data[position + 5] !== 0x0A || + data[position + 6] !== 0x1A || data[position + 7] !== 0x0A) { + error('JBIG2 error: invalid header'); + } + var header = {}; + position += 8; + var flags = data[position++]; + header.randomAccess = !(flags & 1); + if (!(flags & 2)) { + header.numberOfPages = readUint32(data, position); + position += 4; + } + var segments = readSegments(header, data, position, end); + error('Not implemented'); + // processSegments(segments, new SimpleSegmentVisitor()); + } + + function parseJbig2Chunks(chunks) { + var visitor = new SimpleSegmentVisitor(); + for (var i = 0, ii = chunks.length; i < ii; i++) { + var chunk = chunks[i]; + var segments = readSegments({}, chunk.data, chunk.start, chunk.end); + processSegments(segments, visitor); + } + return visitor.buffer; + } + + function SimpleSegmentVisitor() {} + + SimpleSegmentVisitor.prototype = { + onPageInformation: function SimpleSegmentVisitor_onPageInformation(info) { + this.currentPageInfo = info; + var rowSize = (info.width + 7) >> 3; + var buffer = new Uint8Array(rowSize * info.height); + // The contents of ArrayBuffers are initialized to 0. + // Fill the buffer with 0xFF only if info.defaultPixelValue is set + if (info.defaultPixelValue) { + for (var i = 0, ii = buffer.length; i < ii; i++) { + buffer[i] = 0xFF; + } + } + this.buffer = buffer; + }, + drawBitmap: function SimpleSegmentVisitor_drawBitmap(regionInfo, bitmap) { + var pageInfo = this.currentPageInfo; + var width = regionInfo.width, height = regionInfo.height; + var rowSize = (pageInfo.width + 7) >> 3; + var combinationOperator = pageInfo.combinationOperatorOverride ? + regionInfo.combinationOperator : pageInfo.combinationOperator; + var buffer = this.buffer; + var mask0 = 128 >> (regionInfo.x & 7); + var offset0 = regionInfo.y * rowSize + (regionInfo.x >> 3); + var i, j, mask, offset; + switch (combinationOperator) { + case 0: // OR + for (i = 0; i < height; i++) { + mask = mask0; + offset = offset0; + for (j = 0; j < width; j++) { + if (bitmap[i][j]) { + buffer[offset] |= mask; + } + mask >>= 1; + if (!mask) { + mask = 128; + offset++; + } + } + offset0 += rowSize; + } + break; + case 2: // XOR + for (i = 0; i < height; i++) { + mask = mask0; + offset = offset0; + for (j = 0; j < width; j++) { + if (bitmap[i][j]) { + buffer[offset] ^= mask; + } + mask >>= 1; + if (!mask) { + mask = 128; + offset++; + } + } + offset0 += rowSize; + } + break; + default: + error('JBIG2 error: operator ' + combinationOperator + + ' is not supported'); + } + }, + onImmediateGenericRegion: + function SimpleSegmentVisitor_onImmediateGenericRegion(region, data, + start, end) { + var regionInfo = region.info; + var decodingContext = new DecodingContext(data, start, end); + var bitmap = decodeBitmap(region.mmr, regionInfo.width, regionInfo.height, + region.template, region.prediction, null, + region.at, decodingContext); + this.drawBitmap(regionInfo, bitmap); + }, + onImmediateLosslessGenericRegion: + function SimpleSegmentVisitor_onImmediateLosslessGenericRegion() { + this.onImmediateGenericRegion.apply(this, arguments); + }, + onSymbolDictionary: + function SimpleSegmentVisitor_onSymbolDictionary(dictionary, + currentSegment, + referredSegments, + data, start, end) { + var huffmanTables; + if (dictionary.huffman) { + error('JBIG2 error: huffman is not supported'); + } + + // Combines exported symbols from all referred segments + var symbols = this.symbols; + if (!symbols) { + this.symbols = symbols = {}; + } + + var inputSymbols = []; + for (var i = 0, ii = referredSegments.length; i < ii; i++) { + inputSymbols = inputSymbols.concat(symbols[referredSegments[i]]); + } + + var decodingContext = new DecodingContext(data, start, end); + symbols[currentSegment] = decodeSymbolDictionary(dictionary.huffman, + dictionary.refinement, inputSymbols, dictionary.numberOfNewSymbols, + dictionary.numberOfExportedSymbols, huffmanTables, + dictionary.template, dictionary.at, + dictionary.refinementTemplate, dictionary.refinementAt, + decodingContext); + }, + onImmediateTextRegion: + function SimpleSegmentVisitor_onImmediateTextRegion(region, + referredSegments, + data, start, end) { + var regionInfo = region.info; + var huffmanTables; + + // Combines exported symbols from all referred segments + var symbols = this.symbols; + var inputSymbols = []; + for (var i = 0, ii = referredSegments.length; i < ii; i++) { + inputSymbols = inputSymbols.concat(symbols[referredSegments[i]]); + } + var symbolCodeLength = log2(inputSymbols.length); + + var decodingContext = new DecodingContext(data, start, end); + var bitmap = decodeTextRegion(region.huffman, region.refinement, + regionInfo.width, regionInfo.height, region.defaultPixelValue, + region.numberOfSymbolInstances, region.stripSize, inputSymbols, + symbolCodeLength, region.transposed, region.dsOffset, + region.referenceCorner, region.combinationOperator, huffmanTables, + region.refinementTemplate, region.refinementAt, decodingContext); + this.drawBitmap(regionInfo, bitmap); + }, + onImmediateLosslessTextRegion: + function SimpleSegmentVisitor_onImmediateLosslessTextRegion() { + this.onImmediateTextRegion.apply(this, arguments); + } + }; + + function Jbig2Image() {} + + Jbig2Image.prototype = { + parseChunks: function Jbig2Image_parseChunks(chunks) { + return parseJbig2Chunks(chunks); + } + }; + + return Jbig2Image; +})(); + + +var bidi = PDFJS.bidi = (function bidiClosure() { + // Character types for symbols from 0000 to 00FF. + var baseTypes = [ + 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'S', 'B', 'S', 'WS', + 'B', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', + 'BN', 'BN', 'B', 'B', 'B', 'S', 'WS', 'ON', 'ON', 'ET', 'ET', 'ET', 'ON', + 'ON', 'ON', 'ON', 'ON', 'ON', 'CS', 'ON', 'CS', 'ON', 'EN', 'EN', 'EN', + 'EN', 'EN', 'EN', 'EN', 'EN', 'EN', 'EN', 'ON', 'ON', 'ON', 'ON', 'ON', + 'ON', 'ON', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', + 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'ON', 'ON', + 'ON', 'ON', 'ON', 'ON', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', + 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', + 'L', 'ON', 'ON', 'ON', 'ON', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'B', 'BN', + 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', + 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', + 'BN', 'CS', 'ON', 'ET', 'ET', 'ET', 'ET', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', + 'ON', 'ON', 'ON', 'ON', 'ET', 'ET', 'EN', 'EN', 'ON', 'L', 'ON', 'ON', 'ON', + 'EN', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'L', 'L', 'L', 'L', 'L', 'L', + 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', + 'L', 'ON', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', + 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', + 'L', 'L', 'L', 'ON', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L' + ]; + + // Character types for symbols from 0600 to 06FF + var arabicTypes = [ + 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', + 'CS', 'AL', 'ON', 'ON', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'AL', + 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', + 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', + 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', + 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', + 'AL', 'AL', 'AL', 'AL', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', + 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'AL', 'AL', 'AL', 'AL', + 'AL', 'AL', 'AL', 'AN', 'AN', 'AN', 'AN', 'AN', 'AN', 'AN', 'AN', 'AN', + 'AN', 'ET', 'AN', 'AN', 'AL', 'AL', 'AL', 'NSM', 'AL', 'AL', 'AL', 'AL', + 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', + 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', + 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', + 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', + 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', + 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', + 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', + 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', + 'AL', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', + 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'ON', 'NSM', + 'NSM', 'NSM', 'NSM', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', + 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL' + ]; + + function isOdd(i) { + return (i & 1) !== 0; + } + + function isEven(i) { + return (i & 1) === 0; + } + + function findUnequal(arr, start, value) { + for (var j = start, jj = arr.length; j < jj; ++j) { + if (arr[j] !== value) { + return j; + } + } + return j; + } + + function setValues(arr, start, end, value) { + for (var j = start; j < end; ++j) { + arr[j] = value; + } + } + + function reverseValues(arr, start, end) { + for (var i = start, j = end - 1; i < j; ++i, --j) { + var temp = arr[i]; + arr[i] = arr[j]; + arr[j] = temp; + } + } + + function createBidiText(str, isLTR, vertical) { + return { + str: str, + dir: (vertical ? 'ttb' : (isLTR ? 'ltr' : 'rtl')) + }; + } + + // These are used in bidi(), which is called frequently. We re-use them on + // each call to avoid unnecessary allocations. + var chars = []; + var types = []; + + function bidi(str, startLevel, vertical) { + var isLTR = true; + var strLength = str.length; + if (strLength === 0 || vertical) { + return createBidiText(str, isLTR, vertical); + } + + // Get types and fill arrays + chars.length = strLength; + types.length = strLength; + var numBidi = 0; + + var i, ii; + for (i = 0; i < strLength; ++i) { + chars[i] = str.charAt(i); + + var charCode = str.charCodeAt(i); + var charType = 'L'; + if (charCode <= 0x00ff) { + charType = baseTypes[charCode]; + } else if (0x0590 <= charCode && charCode <= 0x05f4) { + charType = 'R'; + } else if (0x0600 <= charCode && charCode <= 0x06ff) { + charType = arabicTypes[charCode & 0xff]; + } else if (0x0700 <= charCode && charCode <= 0x08AC) { + charType = 'AL'; + } + if (charType === 'R' || charType === 'AL' || charType === 'AN') { + numBidi++; + } + types[i] = charType; + } + + // Detect the bidi method + // - If there are no rtl characters then no bidi needed + // - If less than 30% chars are rtl then string is primarily ltr + // - If more than 30% chars are rtl then string is primarily rtl + if (numBidi === 0) { + isLTR = true; + return createBidiText(str, isLTR); + } + + if (startLevel === -1) { + if ((strLength / numBidi) < 0.3) { + isLTR = true; + startLevel = 0; + } else { + isLTR = false; + startLevel = 1; + } + } + + var levels = []; + for (i = 0; i < strLength; ++i) { + levels[i] = startLevel; + } + + /* + X1-X10: skip most of this, since we are NOT doing the embeddings. + */ + var e = (isOdd(startLevel) ? 'R' : 'L'); + var sor = e; + var eor = sor; + + /* + W1. Examine each non-spacing mark (NSM) in the level run, and change the + type of the NSM to the type of the previous character. If the NSM is at the + start of the level run, it will get the type of sor. + */ + var lastType = sor; + for (i = 0; i < strLength; ++i) { + if (types[i] === 'NSM') { + types[i] = lastType; + } else { + lastType = types[i]; + } + } + + /* + W2. Search backwards from each instance of a European number until the + first strong type (R, L, AL, or sor) is found. If an AL is found, change + the type of the European number to Arabic number. + */ + lastType = sor; + var t; + for (i = 0; i < strLength; ++i) { + t = types[i]; + if (t === 'EN') { + types[i] = (lastType === 'AL') ? 'AN' : 'EN'; + } else if (t === 'R' || t === 'L' || t === 'AL') { + lastType = t; + } + } + + /* + W3. Change all ALs to R. + */ + for (i = 0; i < strLength; ++i) { + t = types[i]; + if (t === 'AL') { + types[i] = 'R'; + } + } + + /* + W4. A single European separator between two European numbers changes to a + European number. A single common separator between two numbers of the same + type changes to that type: + */ + for (i = 1; i < strLength - 1; ++i) { + if (types[i] === 'ES' && types[i - 1] === 'EN' && types[i + 1] === 'EN') { + types[i] = 'EN'; + } + if (types[i] === 'CS' && + (types[i - 1] === 'EN' || types[i - 1] === 'AN') && + types[i + 1] === types[i - 1]) { + types[i] = types[i - 1]; + } + } + + /* + W5. A sequence of European terminators adjacent to European numbers changes + to all European numbers: + */ + for (i = 0; i < strLength; ++i) { + if (types[i] === 'EN') { + // do before + var j; + for (j = i - 1; j >= 0; --j) { + if (types[j] !== 'ET') { + break; + } + types[j] = 'EN'; + } + // do after + for (j = i + 1; j < strLength; --j) { + if (types[j] !== 'ET') { + break; + } + types[j] = 'EN'; + } + } + } + + /* + W6. Otherwise, separators and terminators change to Other Neutral: + */ + for (i = 0; i < strLength; ++i) { + t = types[i]; + if (t === 'WS' || t === 'ES' || t === 'ET' || t === 'CS') { + types[i] = 'ON'; + } + } + + /* + W7. Search backwards from each instance of a European number until the + first strong type (R, L, or sor) is found. If an L is found, then change + the type of the European number to L. + */ + lastType = sor; + for (i = 0; i < strLength; ++i) { + t = types[i]; + if (t === 'EN') { + types[i] = ((lastType === 'L') ? 'L' : 'EN'); + } else if (t === 'R' || t === 'L') { + lastType = t; + } + } + + /* + N1. A sequence of neutrals takes the direction of the surrounding strong + text if the text on both sides has the same direction. European and Arabic + numbers are treated as though they were R. Start-of-level-run (sor) and + end-of-level-run (eor) are used at level run boundaries. + */ + for (i = 0; i < strLength; ++i) { + if (types[i] === 'ON') { + var end = findUnequal(types, i + 1, 'ON'); + var before = sor; + if (i > 0) { + before = types[i - 1]; + } + + var after = eor; + if (end + 1 < strLength) { + after = types[end + 1]; + } + if (before !== 'L') { + before = 'R'; + } + if (after !== 'L') { + after = 'R'; + } + if (before === after) { + setValues(types, i, end, before); + } + i = end - 1; // reset to end (-1 so next iteration is ok) + } + } + + /* + N2. Any remaining neutrals take the embedding direction. + */ + for (i = 0; i < strLength; ++i) { + if (types[i] === 'ON') { + types[i] = e; + } + } + + /* + I1. For all characters with an even (left-to-right) embedding direction, + those of type R go up one level and those of type AN or EN go up two + levels. + I2. For all characters with an odd (right-to-left) embedding direction, + those of type L, EN or AN go up one level. + */ + for (i = 0; i < strLength; ++i) { + t = types[i]; + if (isEven(levels[i])) { + if (t === 'R') { + levels[i] += 1; + } else if (t === 'AN' || t === 'EN') { + levels[i] += 2; + } + } else { // isOdd + if (t === 'L' || t === 'AN' || t === 'EN') { + levels[i] += 1; + } + } + } + + /* + L1. On each line, reset the embedding level of the following characters to + the paragraph embedding level: + + segment separators, + paragraph separators, + any sequence of whitespace characters preceding a segment separator or + paragraph separator, and any sequence of white space characters at the end + of the line. + */ + + // don't bother as text is only single line + + /* + L2. From the highest level found in the text to the lowest odd level on + each line, reverse any contiguous sequence of characters that are at that + level or higher. + */ + + // find highest level & lowest odd level + var highestLevel = -1; + var lowestOddLevel = 99; + var level; + for (i = 0, ii = levels.length; i < ii; ++i) { + level = levels[i]; + if (highestLevel < level) { + highestLevel = level; + } + if (lowestOddLevel > level && isOdd(level)) { + lowestOddLevel = level; + } + } + + // now reverse between those limits + for (level = highestLevel; level >= lowestOddLevel; --level) { + // find segments to reverse + var start = -1; + for (i = 0, ii = levels.length; i < ii; ++i) { + if (levels[i] < level) { + if (start >= 0) { + reverseValues(chars, start, i); + start = -1; + } + } else if (start < 0) { + start = i; + } + } + if (start >= 0) { + reverseValues(chars, start, levels.length); + } + } + + /* + L3. Combining marks applied to a right-to-left base character will at this + point precede their base character. If the rendering engine expects them to + follow the base characters in the final display process, then the ordering + of the marks and the base character must be reversed. + */ + + // don't bother for now + + /* + L4. A character that possesses the mirrored property as specified by + Section 4.7, Mirrored, must be depicted by a mirrored glyph if the resolved + directionality of that character is R. + */ + + // don't mirror as characters are already mirrored in the pdf + + // Finally, return string + var result = ''; + for (i = 0, ii = chars.length; i < ii; ++i) { + var ch = chars[i]; + if (ch !== '<' && ch !== '>') { + result += ch; + } + } + return createBidiText(result, isLTR); + } + + return bidi; +})(); + +/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */ + +/* Copyright 2014 Opera Software ASA + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * + * Based on https://code.google.com/p/smhasher/wiki/MurmurHash3. + * Hashes roughly 100 KB per millisecond on i7 3.4 GHz. + */ +/* globals Uint32ArrayView */ + +'use strict'; + +var MurmurHash3_64 = (function MurmurHash3_64Closure (seed) { + // Workaround for missing math precison in JS. + var MASK_HIGH = 0xffff0000; + var MASK_LOW = 0xffff; + + function MurmurHash3_64 (seed) { + var SEED = 0xc3d2e1f0; + this.h1 = seed ? seed & 0xffffffff : SEED; + this.h2 = seed ? seed & 0xffffffff : SEED; + } + + var alwaysUseUint32ArrayView = false; +//#if !(FIREFOX || MOZCENTRAL || B2G || CHROME) + // old webkits have issues with non-aligned arrays + try { + new Uint32Array(new Uint8Array(5).buffer, 0, 1); + } catch (e) { + alwaysUseUint32ArrayView = true; + } +//#endif + + MurmurHash3_64.prototype = { + update: function MurmurHash3_64_update(input) { + var useUint32ArrayView = alwaysUseUint32ArrayView; + var i; + if (typeof input === 'string') { + var data = new Uint8Array(input.length * 2); + var length = 0; + for (i = 0; i < input.length; i++) { + var code = input.charCodeAt(i); + if (code <= 0xff) { + data[length++] = code; + } + else { + data[length++] = code >>> 8; + data[length++] = code & 0xff; + } + } + } else if (input instanceof Uint8Array) { + data = input; + length = data.length; + } else if (typeof input === 'object' && ('length' in input)) { + // processing regular arrays as well, e.g. for IE9 + data = input; + length = data.length; + useUint32ArrayView = true; + } else { + throw new Error('Wrong data format in MurmurHash3_64_update. ' + + 'Input must be a string or array.'); + } + + var blockCounts = length >> 2; + var tailLength = length - blockCounts * 4; + // we don't care about endianness here + var dataUint32 = useUint32ArrayView ? + new Uint32ArrayView(data, blockCounts) : + new Uint32Array(data.buffer, 0, blockCounts); + var k1 = 0; + var k2 = 0; + var h1 = this.h1; + var h2 = this.h2; + var C1 = 0xcc9e2d51; + var C2 = 0x1b873593; + var C1_LOW = C1 & MASK_LOW; + var C2_LOW = C2 & MASK_LOW; + + for (i = 0; i < blockCounts; i++) { + if (i & 1) { + k1 = dataUint32[i]; + k1 = (k1 * C1 & MASK_HIGH) | (k1 * C1_LOW & MASK_LOW); + k1 = k1 << 15 | k1 >>> 17; + k1 = (k1 * C2 & MASK_HIGH) | (k1 * C2_LOW & MASK_LOW); + h1 ^= k1; + h1 = h1 << 13 | h1 >>> 19; + h1 = h1 * 5 + 0xe6546b64; + } else { + k2 = dataUint32[i]; + k2 = (k2 * C1 & MASK_HIGH) | (k2 * C1_LOW & MASK_LOW); + k2 = k2 << 15 | k2 >>> 17; + k2 = (k2 * C2 & MASK_HIGH) | (k2 * C2_LOW & MASK_LOW); + h2 ^= k2; + h2 = h2 << 13 | h2 >>> 19; + h2 = h2 * 5 + 0xe6546b64; + } + } + + k1 = 0; + + switch (tailLength) { + case 3: + k1 ^= data[blockCounts * 4 + 2] << 16; + /* falls through */ + case 2: + k1 ^= data[blockCounts * 4 + 1] << 8; + /* falls through */ + case 1: + k1 ^= data[blockCounts * 4]; + /* falls through */ + k1 = (k1 * C1 & MASK_HIGH) | (k1 * C1_LOW & MASK_LOW); + k1 = k1 << 15 | k1 >>> 17; + k1 = (k1 * C2 & MASK_HIGH) | (k1 * C2_LOW & MASK_LOW); + if (blockCounts & 1) { + h1 ^= k1; + } else { + h2 ^= k1; + } + } + + this.h1 = h1; + this.h2 = h2; + return this; + }, + + hexdigest: function MurmurHash3_64_hexdigest () { + var h1 = this.h1; + var h2 = this.h2; + + h1 ^= h2 >>> 1; + h1 = (h1 * 0xed558ccd & MASK_HIGH) | (h1 * 0x8ccd & MASK_LOW); + h2 = (h2 * 0xff51afd7 & MASK_HIGH) | + (((h2 << 16 | h1 >>> 16) * 0xafd7ed55 & MASK_HIGH) >>> 16); + h1 ^= h2 >>> 1; + h1 = (h1 * 0x1a85ec53 & MASK_HIGH) | (h1 * 0xec53 & MASK_LOW); + h2 = (h2 * 0xc4ceb9fe & MASK_HIGH) | + (((h2 << 16 | h1 >>> 16) * 0xb9fe1a85 & MASK_HIGH) >>> 16); + h1 ^= h2 >>> 1; + + for (var i = 0, arr = [h1, h2], str = ''; i < arr.length; i++) { + var hex = (arr[i] >>> 0).toString(16); + while (hex.length < 8) { + hex = '0' + hex; + } + str += hex; + } + + return str; + } + }; + + return MurmurHash3_64; +})(); + + +}).call((typeof window === 'undefined') ? this : window); + +if (!PDFJS.workerSrc && typeof document !== 'undefined') { + // workerSrc is not set -- using last script url to define default location + PDFJS.workerSrc = (function () { + 'use strict'; + var scriptTagContainer = document.body || + document.getElementsByTagName('head')[0]; + var pdfjsSrc = scriptTagContainer.lastChild.src; + return pdfjsSrc && pdfjsSrc.replace(/\.js$/i, '.worker.js'); + })(); +} + diff --git a/source/ViewerJS/pdfjsversion.js b/source/ViewerJS/pdfjsversion.js new file mode 100644 index 0000000..7aefe44 --- /dev/null +++ b/source/ViewerJS/pdfjsversion.js @@ -0,0 +1 @@ +var /**@const{!string}*/pdfjs_version = "v1.1.114"; diff --git a/source/ViewerJS/text_layer_builder.js b/source/ViewerJS/text_layer_builder.js new file mode 100644 index 0000000..7483c02 --- /dev/null +++ b/source/ViewerJS/text_layer_builder.js @@ -0,0 +1,419 @@ +/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* Copyright 2012 Mozilla Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* globals CustomStyle, PDFJS */ + +'use strict'; + +var MAX_TEXT_DIVS_TO_RENDER = 100000; + +var NonWhitespaceRegexp = /\S/; + +function isAllWhitespace(str) { + return !NonWhitespaceRegexp.test(str); +} + +/** + * @typedef {Object} TextLayerBuilderOptions + * @property {HTMLDivElement} textLayerDiv - The text layer container. + * @property {number} pageIndex - The page index. + * @property {PageViewport} viewport - The viewport of the text layer. + * @property {PDFFindController} findController + */ + +/** + * TextLayerBuilder provides text-selection functionality for the PDF. + * It does this by creating overlay divs over the PDF text. These divs + * contain text that matches the PDF text they are overlaying. This object + * also provides a way to highlight text that is being searched for. + * @class + */ +var TextLayerBuilder = (function TextLayerBuilderClosure() { + function TextLayerBuilder(options) { + this.textLayerDiv = options.textLayerDiv; + this.renderingDone = false; + this.divContentDone = false; + this.pageIdx = options.pageIndex; + this.pageNumber = this.pageIdx + 1; + this.matches = []; + this.viewport = options.viewport; + this.textDivs = []; + this.findController = options.findController || null; + } + + TextLayerBuilder.prototype = { + _finishRendering: function TextLayerBuilder_finishRendering() { + this.renderingDone = true; + + var event = document.createEvent('CustomEvent'); + event.initCustomEvent('textlayerrendered', true, true, { + pageNumber: this.pageNumber + }); + this.textLayerDiv.dispatchEvent(event); + }, + + renderLayer: function TextLayerBuilder_renderLayer() { + var textLayerFrag = document.createDocumentFragment(); + var textDivs = this.textDivs; + var textDivsLength = textDivs.length; + var canvas = document.createElement('canvas'); + var ctx = canvas.getContext('2d'); + + // No point in rendering many divs as it would make the browser + // unusable even after the divs are rendered. + if (textDivsLength > MAX_TEXT_DIVS_TO_RENDER) { + this._finishRendering(); + return; + } + + var lastFontSize; + var lastFontFamily; + for (var i = 0; i < textDivsLength; i++) { + var textDiv = textDivs[i]; + if (textDiv.dataset.isWhitespace !== undefined) { + continue; + } + + var fontSize = textDiv.style.fontSize; + var fontFamily = textDiv.style.fontFamily; + + // Only build font string and set to context if different from last. + if (fontSize !== lastFontSize || fontFamily !== lastFontFamily) { + ctx.font = fontSize + ' ' + fontFamily; + lastFontSize = fontSize; + lastFontFamily = fontFamily; + } + + var width = ctx.measureText(textDiv.textContent).width; + if (width > 0) { + textLayerFrag.appendChild(textDiv); + var transform; + if (textDiv.dataset.canvasWidth !== undefined) { + // Dataset values come of type string. + var textScale = textDiv.dataset.canvasWidth / width; + transform = 'scaleX(' + textScale + ')'; + } else { + transform = ''; + } + var rotation = textDiv.dataset.angle; + if (rotation) { + transform = 'rotate(' + rotation + 'deg) ' + transform; + } + if (transform) { + CustomStyle.setProp('transform' , textDiv, transform); + } + } + } + + this.textLayerDiv.appendChild(textLayerFrag); + this._finishRendering(); + this.updateMatches(); + }, + + /** + * Renders the text layer. + * @param {number} timeout (optional) if specified, the rendering waits + * for specified amount of ms. + */ + render: function TextLayerBuilder_render(timeout) { + if (!this.divContentDone || this.renderingDone) { + return; + } + + if (this.renderTimer) { + clearTimeout(this.renderTimer); + this.renderTimer = null; + } + + if (!timeout) { // Render right away + this.renderLayer(); + } else { // Schedule + var self = this; + this.renderTimer = setTimeout(function() { + self.renderLayer(); + self.renderTimer = null; + }, timeout); + } + }, + + appendText: function TextLayerBuilder_appendText(geom, styles) { + var style = styles[geom.fontName]; + var textDiv = document.createElement('div'); + this.textDivs.push(textDiv); + if (isAllWhitespace(geom.str)) { + textDiv.dataset.isWhitespace = true; + return; + } + var tx = PDFJS.Util.transform(this.viewport.transform, geom.transform); + var angle = Math.atan2(tx[1], tx[0]); + if (style.vertical) { + angle += Math.PI / 2; + } + var fontHeight = Math.sqrt((tx[2] * tx[2]) + (tx[3] * tx[3])); + var fontAscent = fontHeight; + if (style.ascent) { + fontAscent = style.ascent * fontAscent; + } else if (style.descent) { + fontAscent = (1 + style.descent) * fontAscent; + } + + var left; + var top; + if (angle === 0) { + left = tx[4]; + top = tx[5] - fontAscent; + } else { + left = tx[4] + (fontAscent * Math.sin(angle)); + top = tx[5] - (fontAscent * Math.cos(angle)); + } + textDiv.style.left = left + 'px'; + textDiv.style.top = top + 'px'; + textDiv.style.fontSize = fontHeight + 'px'; + textDiv.style.fontFamily = style.fontFamily; + + textDiv.textContent = geom.str; + // |fontName| is only used by the Font Inspector. This test will succeed + // when e.g. the Font Inspector is off but the Stepper is on, but it's + // not worth the effort to do a more accurate test. + if (PDFJS.pdfBug) { + textDiv.dataset.fontName = geom.fontName; + } + // Storing into dataset will convert number into string. + if (angle !== 0) { + textDiv.dataset.angle = angle * (180 / Math.PI); + } + // We don't bother scaling single-char text divs, because it has very + // little effect on text highlighting. This makes scrolling on docs with + // lots of such divs a lot faster. + if (textDiv.textContent.length > 1) { + if (style.vertical) { + textDiv.dataset.canvasWidth = geom.height * this.viewport.scale; + } else { + textDiv.dataset.canvasWidth = geom.width * this.viewport.scale; + } + } + }, + + setTextContent: function TextLayerBuilder_setTextContent(textContent) { + this.textContent = textContent; + + var textItems = textContent.items; + for (var i = 0, len = textItems.length; i < len; i++) { + this.appendText(textItems[i], textContent.styles); + } + this.divContentDone = true; + }, + + convertMatches: function TextLayerBuilder_convertMatches(matches) { + var i = 0; + var iIndex = 0; + var bidiTexts = this.textContent.items; + var end = bidiTexts.length - 1; + var queryLen = (this.findController === null ? + 0 : this.findController.state.query.length); + var ret = []; + + for (var m = 0, len = matches.length; m < len; m++) { + // Calculate the start position. + var matchIdx = matches[m]; + + // Loop over the divIdxs. + while (i !== end && matchIdx >= (iIndex + bidiTexts[i].str.length)) { + iIndex += bidiTexts[i].str.length; + i++; + } + + if (i === bidiTexts.length) { + console.error('Could not find a matching mapping'); + } + + var match = { + begin: { + divIdx: i, + offset: matchIdx - iIndex + } + }; + + // Calculate the end position. + matchIdx += queryLen; + + // Somewhat the same array as above, but use > instead of >= to get + // the end position right. + while (i !== end && matchIdx > (iIndex + bidiTexts[i].str.length)) { + iIndex += bidiTexts[i].str.length; + i++; + } + + match.end = { + divIdx: i, + offset: matchIdx - iIndex + }; + ret.push(match); + } + + return ret; + }, + + renderMatches: function TextLayerBuilder_renderMatches(matches) { + // Early exit if there is nothing to render. + if (matches.length === 0) { + return; + } + + var bidiTexts = this.textContent.items; + var textDivs = this.textDivs; + var prevEnd = null; + var pageIdx = this.pageIdx; + var isSelectedPage = (this.findController === null ? + false : (pageIdx === this.findController.selected.pageIdx)); + var selectedMatchIdx = (this.findController === null ? + -1 : this.findController.selected.matchIdx); + var highlightAll = (this.findController === null ? + false : this.findController.state.highlightAll); + var infinity = { + divIdx: -1, + offset: undefined + }; + + function beginText(begin, className) { + var divIdx = begin.divIdx; + textDivs[divIdx].textContent = ''; + appendTextToDiv(divIdx, 0, begin.offset, className); + } + + function appendTextToDiv(divIdx, fromOffset, toOffset, className) { + var div = textDivs[divIdx]; + var content = bidiTexts[divIdx].str.substring(fromOffset, toOffset); + var node = document.createTextNode(content); + if (className) { + var span = document.createElement('span'); + span.className = className; + span.appendChild(node); + div.appendChild(span); + return; + } + div.appendChild(node); + } + + var i0 = selectedMatchIdx, i1 = i0 + 1; + if (highlightAll) { + i0 = 0; + i1 = matches.length; + } else if (!isSelectedPage) { + // Not highlighting all and this isn't the selected page, so do nothing. + return; + } + + for (var i = i0; i < i1; i++) { + var match = matches[i]; + var begin = match.begin; + var end = match.end; + var isSelected = (isSelectedPage && i === selectedMatchIdx); + var highlightSuffix = (isSelected ? ' selected' : ''); + + if (this.findController) { + this.findController.updateMatchPosition(pageIdx, i, textDivs, + begin.divIdx, end.divIdx); + } + + // Match inside new div. + if (!prevEnd || begin.divIdx !== prevEnd.divIdx) { + // If there was a previous div, then add the text at the end. + if (prevEnd !== null) { + appendTextToDiv(prevEnd.divIdx, prevEnd.offset, infinity.offset); + } + // Clear the divs and set the content until the starting point. + beginText(begin); + } else { + appendTextToDiv(prevEnd.divIdx, prevEnd.offset, begin.offset); + } + + if (begin.divIdx === end.divIdx) { + appendTextToDiv(begin.divIdx, begin.offset, end.offset, + 'highlight' + highlightSuffix); + } else { + appendTextToDiv(begin.divIdx, begin.offset, infinity.offset, + 'highlight begin' + highlightSuffix); + for (var n0 = begin.divIdx + 1, n1 = end.divIdx; n0 < n1; n0++) { + textDivs[n0].className = 'highlight middle' + highlightSuffix; + } + beginText(end, 'highlight end' + highlightSuffix); + } + prevEnd = end; + } + + if (prevEnd) { + appendTextToDiv(prevEnd.divIdx, prevEnd.offset, infinity.offset); + } + }, + + updateMatches: function TextLayerBuilder_updateMatches() { + // Only show matches when all rendering is done. + if (!this.renderingDone) { + return; + } + + // Clear all matches. + var matches = this.matches; + var textDivs = this.textDivs; + var bidiTexts = this.textContent.items; + var clearedUntilDivIdx = -1; + + // Clear all current matches. + for (var i = 0, len = matches.length; i < len; i++) { + var match = matches[i]; + var begin = Math.max(clearedUntilDivIdx, match.begin.divIdx); + for (var n = begin, end = match.end.divIdx; n <= end; n++) { + var div = textDivs[n]; + div.textContent = bidiTexts[n].str; + div.className = ''; + } + clearedUntilDivIdx = match.end.divIdx + 1; + } + + if (this.findController === null || !this.findController.active) { + return; + } + + // Convert the matches on the page controller into the match format + // used for the textLayer. + this.matches = this.convertMatches(this.findController === null ? + [] : (this.findController.pageMatches[this.pageIdx] || [])); + this.renderMatches(this.matches); + } + }; + return TextLayerBuilder; +})(); + +/** + * @constructor + * @implements IPDFTextLayerFactory + */ +function DefaultTextLayerFactory() {} +DefaultTextLayerFactory.prototype = { + /** + * @param {HTMLDivElement} textLayerDiv + * @param {number} pageIndex + * @param {PageViewport} viewport + * @returns {TextLayerBuilder} + */ + createTextLayerBuilder: function (textLayerDiv, pageIndex, viewport) { + return new TextLayerBuilder({ + textLayerDiv: textLayerDiv, + pageIndex: pageIndex, + viewport: viewport + }); + } +}; diff --git a/source/ViewerJS/ui_utils.js b/source/ViewerJS/ui_utils.js new file mode 100644 index 0000000..7e798e3 --- /dev/null +++ b/source/ViewerJS/ui_utils.js @@ -0,0 +1,394 @@ +/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* Copyright 2012 Mozilla Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +'use strict'; + +var CSS_UNITS = 96.0 / 72.0; +var DEFAULT_SCALE = 'auto'; +var UNKNOWN_SCALE = 0; +var MAX_AUTO_SCALE = 1.25; +var SCROLLBAR_PADDING = 40; +var VERTICAL_PADDING = 5; + +// optimised CSS custom property getter/setter +var CustomStyle = (function CustomStyleClosure() { + + // As noted on: http://www.zachstronaut.com/posts/2009/02/17/ + // animate-css-transforms-firefox-webkit.html + // in some versions of IE9 it is critical that ms appear in this list + // before Moz + var prefixes = ['ms', 'Moz', 'Webkit', 'O']; + var _cache = {}; + + function CustomStyle() {} + + CustomStyle.getProp = function get(propName, element) { + // check cache only when no element is given + if (arguments.length === 1 && typeof _cache[propName] === 'string') { + return _cache[propName]; + } + + element = element || document.documentElement; + var style = element.style, prefixed, uPropName; + + // test standard property first + if (typeof style[propName] === 'string') { + return (_cache[propName] = propName); + } + + // capitalize + uPropName = propName.charAt(0).toUpperCase() + propName.slice(1); + + // test vendor specific properties + for (var i = 0, l = prefixes.length; i < l; i++) { + prefixed = prefixes[i] + uPropName; + if (typeof style[prefixed] === 'string') { + return (_cache[propName] = prefixed); + } + } + + //if all fails then set to undefined + return (_cache[propName] = 'undefined'); + }; + + CustomStyle.setProp = function set(propName, element, str) { + var prop = this.getProp(propName); + if (prop !== 'undefined') { + element.style[prop] = str; + } + }; + + return CustomStyle; +})(); + +function getFileName(url) { + var anchor = url.indexOf('#'); + var query = url.indexOf('?'); + var end = Math.min( + anchor > 0 ? anchor : url.length, + query > 0 ? query : url.length); + return url.substring(url.lastIndexOf('/', end) + 1, end); +} + +/** + * Returns scale factor for the canvas. It makes sense for the HiDPI displays. + * @return {Object} The object with horizontal (sx) and vertical (sy) + scales. The scaled property is set to false if scaling is + not required, true otherwise. + */ +function getOutputScale(ctx) { + var devicePixelRatio = window.devicePixelRatio || 1; + var backingStoreRatio = ctx.webkitBackingStorePixelRatio || + ctx.mozBackingStorePixelRatio || + ctx.msBackingStorePixelRatio || + ctx.oBackingStorePixelRatio || + ctx.backingStorePixelRatio || 1; + var pixelRatio = devicePixelRatio / backingStoreRatio; + return { + sx: pixelRatio, + sy: pixelRatio, + scaled: pixelRatio !== 1 + }; +} + +/** + * Scrolls specified element into view of its parent. + * element {Object} The element to be visible. + * spot {Object} An object with optional top and left properties, + * specifying the offset from the top left edge. + */ +function scrollIntoView(element, spot) { + // Assuming offsetParent is available (it's not available when viewer is in + // hidden iframe or object). We have to scroll: if the offsetParent is not set + // producing the error. See also animationStartedClosure. + var parent = element.offsetParent; + var offsetY = element.offsetTop + element.clientTop; + var offsetX = element.offsetLeft + element.clientLeft; + if (!parent) { + console.error('offsetParent is not set -- cannot scroll'); + return; + } + while (parent.clientHeight === parent.scrollHeight) { + if (parent.dataset._scaleY) { + offsetY /= parent.dataset._scaleY; + offsetX /= parent.dataset._scaleX; + } + offsetY += parent.offsetTop; + offsetX += parent.offsetLeft; + parent = parent.offsetParent; + if (!parent) { + return; // no need to scroll + } + } + if (spot) { + if (spot.top !== undefined) { + offsetY += spot.top; + } + if (spot.left !== undefined) { + offsetX += spot.left; + parent.scrollLeft = offsetX; + } + } + parent.scrollTop = offsetY; +} + +/** + * Helper function to start monitoring the scroll event and converting them into + * PDF.js friendly one: with scroll debounce and scroll direction. + */ +function watchScroll(viewAreaElement, callback) { + var debounceScroll = function debounceScroll(evt) { + if (rAF) { + return; + } + // schedule an invocation of scroll for next animation frame. + rAF = window.requestAnimationFrame(function viewAreaElementScrolled() { + rAF = null; + + var currentY = viewAreaElement.scrollTop; + var lastY = state.lastY; + if (currentY !== lastY) { + state.down = currentY > lastY; + } + state.lastY = currentY; + callback(state); + }); + }; + + var state = { + down: true, + lastY: viewAreaElement.scrollTop, + _eventHandler: debounceScroll + }; + + var rAF = null; + viewAreaElement.addEventListener('scroll', debounceScroll, true); + return state; +} + +/** + * Use binary search to find the index of the first item in a given array which + * passes a given condition. The items are expected to be sorted in the sense + * that if the condition is true for one item in the array, then it is also true + * for all following items. + * + * @returns {Number} Index of the first array element to pass the test, + * or |items.length| if no such element exists. + */ +function binarySearchFirstItem(items, condition) { + var minIndex = 0; + var maxIndex = items.length - 1; + + if (items.length === 0 || !condition(items[maxIndex])) { + return items.length; + } + if (condition(items[minIndex])) { + return minIndex; + } + + while (minIndex < maxIndex) { + var currentIndex = (minIndex + maxIndex) >> 1; + var currentItem = items[currentIndex]; + if (condition(currentItem)) { + maxIndex = currentIndex; + } else { + minIndex = currentIndex + 1; + } + } + return minIndex; /* === maxIndex */ +} + +/** + * Generic helper to find out what elements are visible within a scroll pane. + */ +function getVisibleElements(scrollEl, views, sortByVisibility) { + var top = scrollEl.scrollTop, bottom = top + scrollEl.clientHeight; + var left = scrollEl.scrollLeft, right = left + scrollEl.clientWidth; + + function isElementBottomBelowViewTop(view) { + var element = view.div; + var elementBottom = + element.offsetTop + element.clientTop + element.clientHeight; + return elementBottom > top; + } + + var visible = [], view, element; + var currentHeight, viewHeight, hiddenHeight, percentHeight; + var currentWidth, viewWidth; + var firstVisibleElementInd = (views.length === 0) ? 0 : + binarySearchFirstItem(views, isElementBottomBelowViewTop); + + for (var i = firstVisibleElementInd, ii = views.length; i < ii; i++) { + view = views[i]; + element = view.div; + currentHeight = element.offsetTop + element.clientTop; + viewHeight = element.clientHeight; + + if (currentHeight > bottom) { + break; + } + + currentWidth = element.offsetLeft + element.clientLeft; + viewWidth = element.clientWidth; + if (currentWidth + viewWidth < left || currentWidth > right) { + continue; + } + hiddenHeight = Math.max(0, top - currentHeight) + + Math.max(0, currentHeight + viewHeight - bottom); + percentHeight = ((viewHeight - hiddenHeight) * 100 / viewHeight) | 0; + + visible.push({ + id: view.id, + x: currentWidth, + y: currentHeight, + view: view, + percent: percentHeight + }); + } + + var first = visible[0]; + var last = visible[visible.length - 1]; + + if (sortByVisibility) { + visible.sort(function(a, b) { + var pc = a.percent - b.percent; + if (Math.abs(pc) > 0.001) { + return -pc; + } + return a.id - b.id; // ensure stability + }); + } + return {first: first, last: last, views: visible}; +} + +/** + * Event handler to suppress context menu. + */ +function noContextMenuHandler(e) { + e.preventDefault(); +} + +/** + * Returns the filename or guessed filename from the url (see issue 3455). + * url {String} The original PDF location. + * @return {String} Guessed PDF file name. + */ +function getPDFFileNameFromURL(url) { + var reURI = /^(?:([^:]+:)?\/\/[^\/]+)?([^?#]*)(\?[^#]*)?(#.*)?$/; + // SCHEME HOST 1.PATH 2.QUERY 3.REF + // Pattern to get last matching NAME.pdf + var reFilename = /[^\/?#=]+\.pdf\b(?!.*\.pdf\b)/i; + var splitURI = reURI.exec(url); + var suggestedFilename = reFilename.exec(splitURI[1]) || + reFilename.exec(splitURI[2]) || + reFilename.exec(splitURI[3]); + if (suggestedFilename) { + suggestedFilename = suggestedFilename[0]; + if (suggestedFilename.indexOf('%') !== -1) { + // URL-encoded %2Fpath%2Fto%2Ffile.pdf should be file.pdf + try { + suggestedFilename = + reFilename.exec(decodeURIComponent(suggestedFilename))[0]; + } catch(e) { // Possible (extremely rare) errors: + // URIError "Malformed URI", e.g. for "%AA.pdf" + // TypeError "null has no properties", e.g. for "%2F.pdf" + } + } + } + return suggestedFilename || 'document.pdf'; +} + +var ProgressBar = (function ProgressBarClosure() { + + function clamp(v, min, max) { + return Math.min(Math.max(v, min), max); + } + + function ProgressBar(id, opts) { + this.visible = true; + + // Fetch the sub-elements for later. + this.div = document.querySelector(id + ' .progress'); + + // Get the loading bar element, so it can be resized to fit the viewer. + this.bar = this.div.parentNode; + + // Get options, with sensible defaults. + this.height = opts.height || 100; + this.width = opts.width || 100; + this.units = opts.units || '%'; + + // Initialize heights. + this.div.style.height = this.height + this.units; + this.percent = 0; + } + + ProgressBar.prototype = { + + updateBar: function ProgressBar_updateBar() { + if (this._indeterminate) { + this.div.classList.add('indeterminate'); + this.div.style.width = this.width + this.units; + return; + } + + this.div.classList.remove('indeterminate'); + var progressSize = this.width * this._percent / 100; + this.div.style.width = progressSize + this.units; + }, + + get percent() { + return this._percent; + }, + + set percent(val) { + this._indeterminate = isNaN(val); + this._percent = clamp(val, 0, 100); + this.updateBar(); + }, + + setWidth: function ProgressBar_setWidth(viewer) { + if (viewer) { + var container = viewer.parentNode; + var scrollbarWidth = container.offsetWidth - viewer.offsetWidth; + if (scrollbarWidth > 0) { + this.bar.setAttribute('style', 'width: calc(100% - ' + + scrollbarWidth + 'px);'); + } + } + }, + + hide: function ProgressBar_hide() { + if (!this.visible) { + return; + } + this.visible = false; + this.bar.classList.add('hidden'); + document.body.classList.remove('loadingInProgress'); + }, + + show: function ProgressBar_show() { + if (this.visible) { + return; + } + this.visible = true; + document.body.classList.add('loadingInProgress'); + this.bar.classList.remove('hidden'); + } + }; + + return ProgressBar; +})(); diff --git a/source/ViewerJS/webodf.js b/source/ViewerJS/webodf.js new file mode 100644 index 0000000..dbb0d33 --- /dev/null +++ b/source/ViewerJS/webodf.js @@ -0,0 +1,936 @@ +/* + + This is a generated file. DO NOT EDIT. + + Copyright (C) 2010-2015 KO GmbH <copyright@kogmbh.com> + + @licstart + The code in this file is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License (GNU AGPL) + as published by the Free Software Foundation, either version 3 of + the License, or (at your option) any later version. + + The code in this file is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with WebODF. If not, see <http://www.gnu.org/licenses/>. + + As additional permission under GNU AGPL version 3 section 7, you + may distribute UNMODIFIED VERSIONS OF THIS file without the copy of the GNU AGPL normally + required by section 4, provided you include this license notice and a URL + through which recipients can access the Corresponding Source. + + As a special exception to the AGPL, any HTML file which merely makes function + calls to this code, and for that purpose includes it in unmodified form by reference or in-line shall be + deemed a separate work for copyright law purposes. In addition, the copyright + holders of this code give you permission to combine this code with free + software libraries that are released under the GNU LGPL. You may copy and + distribute such a system following the terms of the GNU AGPL for this code + and the LGPL for the libraries. If you modify this code, you may extend this + exception to your version of the code, but you are not obligated to do so. + If you do not wish to do so, delete this exception statement from your + version. + + This license applies to this entire compilation. + @licend + + @source: http://www.webodf.org/ + @source: https://github.com/kogmbh/WebODF/ +*/ +var webodf_version="0.5.8";function Runtime(){}Runtime.prototype.getVariable=function(g){};Runtime.prototype.toJson=function(g){};Runtime.prototype.fromJson=function(g){};Runtime.prototype.byteArrayFromString=function(g,k){};Runtime.prototype.byteArrayToString=function(g,k){};Runtime.prototype.read=function(g,k,c,b){};Runtime.prototype.readFile=function(g,k,c){};Runtime.prototype.readFileSync=function(g,k){};Runtime.prototype.loadXML=function(g,k){};Runtime.prototype.writeFile=function(g,k,c){}; +Runtime.prototype.deleteFile=function(g,k){};Runtime.prototype.log=function(g,k){};Runtime.prototype.setTimeout=function(g,k){};Runtime.prototype.clearTimeout=function(g){};Runtime.prototype.libraryPaths=function(){};Runtime.prototype.currentDirectory=function(){};Runtime.prototype.setCurrentDirectory=function(g){};Runtime.prototype.type=function(){};Runtime.prototype.getDOMImplementation=function(){};Runtime.prototype.parseXML=function(g){};Runtime.prototype.exit=function(g){}; +Runtime.prototype.getWindow=function(){};Runtime.prototype.requestAnimationFrame=function(g){};Runtime.prototype.cancelAnimationFrame=function(g){};Runtime.prototype.assert=function(g,k){};var IS_COMPILED_CODE=!0; +Runtime.byteArrayToString=function(g,k){function c(b){var c="",r,q=b.length;for(r=0;r<q;r+=1)c+=String.fromCharCode(b[r]&255);return c}function b(b){var c="",r,q=b.length,e=[],l,a,d,m;for(r=3<=q&&239===b[0]&&187===b[1]&&191===b[2]?3:0;r<q;r+=1)l=b[r],128>l?e.push(l):(r+=1,a=b[r],194<=l&&224>l?e.push((l&31)<<6|a&63):(r+=1,d=b[r],224<=l&&240>l?e.push((l&15)<<12|(a&63)<<6|d&63):(r+=1,m=b[r],240<=l&&245>l&&(l=(l&7)<<18|(a&63)<<12|(d&63)<<6|m&63,l-=65536,e.push((l>>10)+55296,(l&1023)+56320))))),1E3<=e.length&& +(c+=String.fromCharCode.apply(null,e),e.length=0);return c+String.fromCharCode.apply(null,e)}var f;"utf8"===k?f=b(g):("binary"!==k&&this.log("Unsupported encoding: "+k),f=c(g));return f};Runtime.getVariable=function(g){try{return eval(g)}catch(k){}};Runtime.toJson=function(g){return JSON.stringify(g)};Runtime.fromJson=function(g){return JSON.parse(g)};Runtime.getFunctionName=function(g){return void 0===g.name?(g=/function\s+(\w+)/.exec(g))&&g[1]:g.name}; +Runtime.assert=function(g,k){if(!g)throw this.log("alert","ASSERTION FAILED:\n"+k),Error(k);}; +function BrowserRuntime(){function g(b){var e=b.length,l,a,d=0;for(l=0;l<e;l+=1)a=b.charCodeAt(l),d+=1+(128<a)+(2048<a),55040<a&&57344>a&&(d+=1,l+=1);return d}function k(b,e,l){var a=b.length,d,m;e=new Uint8Array(new ArrayBuffer(e));l?(e[0]=239,e[1]=187,e[2]=191,m=3):m=0;for(l=0;l<a;l+=1)d=b.charCodeAt(l),128>d?(e[m]=d,m+=1):2048>d?(e[m]=192|d>>>6,e[m+1]=128|d&63,m+=2):55040>=d||57344<=d?(e[m]=224|d>>>12&15,e[m+1]=128|d>>>6&63,e[m+2]=128|d&63,m+=3):(l+=1,d=(d-55296<<10|b.charCodeAt(l)-56320)+65536, +e[m]=240|d>>>18&7,e[m+1]=128|d>>>12&63,e[m+2]=128|d>>>6&63,e[m+3]=128|d&63,m+=4);return e}function c(b){var e=b.length,l=new Uint8Array(new ArrayBuffer(e)),a;for(a=0;a<e;a+=1)l[a]=b.charCodeAt(a)&255;return l}function b(b,e){var l;void 0!==e?l=b:e=b;console.log(e);r.enableAlerts&&"alert"===l&&alert(e)}function f(b,e,l){if(0!==l.status||l.responseText)if(200===l.status||0===l.status){if(l.response&&"string"!==typeof l.response)"binary"===e?(l=l.response,l=new Uint8Array(l)):l=String(l.response);else if("binary"=== +e)if(null!==l.responseBody&&"undefined"!==String(typeof VBArray)){l=(new VBArray(l.responseBody)).toArray();var a=l.length;e=new Uint8Array(new ArrayBuffer(a));for(b=0;b<a;b+=1)e[b]=l[b];l=e}else{(b=l.getResponseHeader("Content-Length"))&&(b=parseInt(b,10));if(b&&b!==l.responseText.length)a:{a=l.responseText;e=!1;var d=g(a);if("number"===typeof b){if(b!==d&&b!==d+3){a=void 0;break a}e=d+3===b;d=b}a=k(a,d,e)}void 0===a&&(a=c(l.responseText));l=a}else l=l.responseText;l={err:null,data:l}}else l={err:l.responseText|| +l.statusText,data:null};else l={err:"File "+b+" is empty.",data:null};return l}function n(b,e,l){var a=new XMLHttpRequest;a.open("GET",b,l);a.overrideMimeType&&("binary"!==e?a.overrideMimeType("text/plain; charset="+e):a.overrideMimeType("text/plain; charset=x-user-defined"));return a}function p(b,e,l){var a=n(b,e,!0);a.onreadystatechange=function(){var d;4===a.readyState&&(d=f(b,e,a),l(d.err,d.data))};try{a.send(null)}catch(d){l(d.message,null)}}var r=this;this.byteArrayFromString=function(b,e){var l; +"utf8"===e?l=k(b,g(b),!1):("binary"!==e&&r.log("unknown encoding: "+e),l=c(b));return l};this.byteArrayToString=Runtime.byteArrayToString;this.getVariable=Runtime.getVariable;this.fromJson=Runtime.fromJson;this.toJson=Runtime.toJson;this.readFile=p;this.read=function(b,e,l,a){p(b,"binary",function(d,m){var h=null;if(m){if("string"===typeof m)throw"This should not happen.";h=m.subarray(e,e+l)}a(d,h)})};this.readFileSync=function(b,e){var l=n(b,e,!1),a;try{l.send(null);a=f(b,e,l);if(a.err)throw a.err; +if(null===a.data)throw"No data read from "+b+".";}catch(d){throw d;}return a.data};this.writeFile=function(b,e,l){var a=new XMLHttpRequest,d;a.open("PUT",b,!0);a.onreadystatechange=function(){4===a.readyState&&(0!==a.status||a.responseText?200<=a.status&&300>a.status||0===a.status?l(null):l("Status "+String(a.status)+": "+a.responseText||a.statusText):l("File "+b+" is empty."))};d=e.buffer&&!a.sendAsBinary?e.buffer:r.byteArrayToString(e,"binary");try{a.sendAsBinary?a.sendAsBinary(d):a.send(d)}catch(m){r.log("HUH? "+ +m+" "+e),l(m.message)}};this.deleteFile=function(b,e){var l=new XMLHttpRequest;l.open("DELETE",b,!0);l.onreadystatechange=function(){4===l.readyState&&(200>l.status&&300<=l.status?e(l.responseText):e(null))};l.send(null)};this.loadXML=function(b,e){var l=new XMLHttpRequest;l.open("GET",b,!0);l.overrideMimeType&&l.overrideMimeType("text/xml");l.onreadystatechange=function(){4===l.readyState&&(0!==l.status||l.responseText?200===l.status||0===l.status?e(null,l.responseXML):e(l.responseText,null):e("File "+ +b+" is empty.",null))};try{l.send(null)}catch(a){e(a.message,null)}};this.log=b;this.enableAlerts=!0;this.assert=Runtime.assert;this.setTimeout=function(b,e){return setTimeout(function(){b()},e)};this.clearTimeout=function(b){clearTimeout(b)};this.libraryPaths=function(){return["lib"]};this.setCurrentDirectory=function(){};this.currentDirectory=function(){return""};this.type=function(){return"BrowserRuntime"};this.getDOMImplementation=function(){return window.document.implementation};this.parseXML= +function(b){return(new DOMParser).parseFromString(b,"text/xml")};this.exit=function(c){b("Calling exit with code "+String(c)+", but exit() is not implemented.")};this.getWindow=function(){return window};this.requestAnimationFrame=function(b){var e=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.msRequestAnimationFrame,l=0;if(e)e.bind(window),l=e(b);else return setTimeout(b,15);return l};this.cancelAnimationFrame=function(b){var e=window.cancelAnimationFrame|| +window.webkitCancelAnimationFrame||window.mozCancelAnimationFrame||window.msCancelAnimationFrame;e?(e.bind(window),e(b)):clearTimeout(b)}} +function NodeJSRuntime(){function g(b){var e=b.length,l,a=new Uint8Array(new ArrayBuffer(e));for(l=0;l<e;l+=1)a[l]=b[l];return a}function k(c,e,l){function a(a,m){if(a)return l(a,null);if(!m)return l("No data for "+c+".",null);if("string"===typeof m)return l(a,m);l(a,g(m))}c=f.resolve(n,c);"binary"!==e?b.readFile(c,e,a):b.readFile(c,null,a)}var c=this,b=require("fs"),f=require("path"),n="",p,r;this.byteArrayFromString=function(b,e){var l=new Buffer(b,e),a,d=l.length,m=new Uint8Array(new ArrayBuffer(d)); +for(a=0;a<d;a+=1)m[a]=l[a];return m};this.byteArrayToString=Runtime.byteArrayToString;this.getVariable=Runtime.getVariable;this.fromJson=Runtime.fromJson;this.toJson=Runtime.toJson;this.readFile=k;this.loadXML=function(b,e){k(b,"utf-8",function(l,a){if(l)return e(l,null);if(!a)return e("No data for "+b+".",null);e(null,c.parseXML(a))})};this.writeFile=function(c,e,l){e=new Buffer(e);c=f.resolve(n,c);b.writeFile(c,e,"binary",function(a){l(a||null)})};this.deleteFile=function(c,e){c=f.resolve(n,c); +b.unlink(c,e)};this.read=function(c,e,l,a){c=f.resolve(n,c);b.open(c,"r+",666,function(d,m){if(d)a(d,null);else{var h=new Buffer(l);b.read(m,h,0,l,e,function(d){b.close(m);a(d,g(h))})}})};this.readFileSync=function(c,e){var l;l=b.readFileSync(c,"binary"===e?null:e);if(null===l)throw"File "+c+" could not be read.";"binary"===e&&(l=g(l));return l};this.log=function(b,e){var l;void 0!==e?l=b:e=b;"alert"===l&&process.stderr.write("\n!!!!! ALERT !!!!!\n");process.stderr.write(e+"\n");"alert"===l&&process.stderr.write("!!!!! ALERT !!!!!\n")}; +this.assert=Runtime.assert;this.setTimeout=function(b,e){return setTimeout(function(){b()},e)};this.clearTimeout=function(b){clearTimeout(b)};this.libraryPaths=function(){return[__dirname]};this.setCurrentDirectory=function(b){n=b};this.currentDirectory=function(){return n};this.type=function(){return"NodeJSRuntime"};this.getDOMImplementation=function(){return r};this.parseXML=function(b){return p.parseFromString(b,"text/xml")};this.exit=process.exit;this.getWindow=function(){return null};this.requestAnimationFrame= +function(b){return setTimeout(b,15)};this.cancelAnimationFrame=function(b){clearTimeout(b)};p=new (require("xmldom").DOMParser);r=c.parseXML("<a/>").implementation} +function RhinoRuntime(){var g=this,k={},c=k.javax.xml.parsers.DocumentBuilderFactory.newInstance(),b,f,n="";c.setValidating(!1);c.setNamespaceAware(!0);c.setExpandEntityReferences(!1);c.setSchema(null);f=k.org.xml.sax.EntityResolver({resolveEntity:function(b,c){var f=new k.java.io.FileReader(c);return new k.org.xml.sax.InputSource(f)}});b=c.newDocumentBuilder();b.setEntityResolver(f);this.byteArrayFromString=function(b,c){var f,e=b.length,l=new Uint8Array(new ArrayBuffer(e));for(f=0;f<e;f+=1)l[f]= +b.charCodeAt(f)&255;return l};this.byteArrayToString=Runtime.byteArrayToString;this.getVariable=Runtime.getVariable;this.fromJson=Runtime.fromJson;this.toJson=Runtime.toJson;this.loadXML=function(c,f){var n=new k.java.io.File(c),e=null;try{e=b.parse(n)}catch(l){return print(l),f(l,null)}f(null,e)};this.readFile=function(b,c,f){n&&(b=n+"/"+b);var e=new k.java.io.File(b),l="binary"===c?"latin1":c;e.isFile()?((b=readFile(b,l))&&"binary"===c&&(b=g.byteArrayFromString(b,"binary")),f(null,b)):f(b+" is not a file.", +null)};this.writeFile=function(b,c,f){n&&(b=n+"/"+b);b=new k.java.io.FileOutputStream(b);var e,l=c.length;for(e=0;e<l;e+=1)b.write(c[e]);b.close();f(null)};this.deleteFile=function(b,c){n&&(b=n+"/"+b);var f=new k.java.io.File(b),e=b+Math.random(),e=new k.java.io.File(e);f.rename(e)?(e.deleteOnExit(),c(null)):c("Could not delete "+b)};this.read=function(b,c,f,e){n&&(b=n+"/"+b);var l;l=b;var a="binary";(new k.java.io.File(l)).isFile()?("binary"===a&&(a="latin1"),l=readFile(l,a)):l=null;l?e(null,this.byteArrayFromString(l.substring(c, +c+f),"binary")):e("Cannot read "+b,null)};this.readFileSync=function(b,c){if(!c)return"";var f=readFile(b,c);if(null===f)throw"File could not be read.";return f};this.log=function(b,c){var f;void 0!==c?f=b:c=b;"alert"===f&&print("\n!!!!! ALERT !!!!!");print(c);"alert"===f&&print("!!!!! ALERT !!!!!")};this.assert=Runtime.assert;this.setTimeout=function(b){b();return 0};this.clearTimeout=function(){};this.libraryPaths=function(){return["lib"]};this.setCurrentDirectory=function(b){n=b};this.currentDirectory= +function(){return n};this.type=function(){return"RhinoRuntime"};this.getDOMImplementation=function(){return b.getDOMImplementation()};this.parseXML=function(c){c=new k.java.io.StringReader(c);c=new k.org.xml.sax.InputSource(c);return b.parse(c)};this.exit=quit;this.getWindow=function(){return null};this.requestAnimationFrame=function(b){b();return 0};this.cancelAnimationFrame=function(){}} +Runtime.create=function(){return"undefined"!==String(typeof window)?new BrowserRuntime:"undefined"!==String(typeof require)?new NodeJSRuntime:new RhinoRuntime};var runtime=Runtime.create(),core={},gui={},xmldom={},odf={},ops={},webodf={};(function(){webodf.Version="undefined"!==String(typeof webodf_version)?webodf_version:"From Source"})(); +(function(){function g(b,c,e){var l=b+"/manifest.json",a,d;runtime.log("Loading manifest: "+l);try{a=runtime.readFileSync(l,"utf-8")}catch(m){if(e)runtime.log("No loadable manifest found.");else throw console.log(String(m)),m;return}e=JSON.parse(a);for(d in e)e.hasOwnProperty(d)&&(c[d]={dir:b,deps:e[d]})}function k(b,c,e){function l(h){if(!m[h]&&!e(h)){if(d[h])throw"Circular dependency detected for "+h+".";d[h]=!0;if(!c[h])throw"Missing dependency information for class "+h+".";var b=c[h],f=b.deps, +n,r=f.length;for(n=0;n<r;n+=1)l(f[n]);d[h]=!1;m[h]=!0;a.push(b.dir+"/"+h.replace(".","/")+".js")}}var a=[],d={},m={};b.forEach(l);return a}function c(b,c){return c+("\n//# sourceURL="+b)}function b(b){var f,e;for(f=0;f<b.length;f+=1)e=runtime.readFileSync(b[f],"utf-8"),e=c(b[f],e),eval(e)}function f(b){b=b.split(".");var c,e=p,l=b.length;for(c=0;c<l;c+=1){if(!e.hasOwnProperty(b[c]))return!1;e=e[b[c]]}return!0}var n,p={core:core,gui:gui,xmldom:xmldom,odf:odf,ops:ops};runtime.loadClasses=function(c, +p){if(IS_COMPILED_CODE||0===c.length)return p&&p();var e;if(!(e=n)){e=[];var l=runtime.libraryPaths(),a;runtime.currentDirectory()&&-1===l.indexOf(runtime.currentDirectory())&&g(runtime.currentDirectory(),e,!0);for(a=0;a<l.length;a+=1)g(l[a],e)}n=e;c=k(c,n,f);if(0===c.length)return p&&p();if("BrowserRuntime"===runtime.type()&&p){e=c;l=document.currentScript||document.documentElement.lastChild;a=document.createDocumentFragment();var d,m;for(m=0;m<e.length;m+=1)d=document.createElement("script"),d.type= +"text/javascript",d.charset="utf-8",d.async=!1,d.setAttribute("src",e[m]),a.appendChild(d);p&&(d.onload=p);l.parentNode.insertBefore(a,l)}else b(c),p&&p()};runtime.loadClass=function(b,c){runtime.loadClasses([b],c)}})();(function(){var g=function(g){return g};runtime.getTranslator=function(){return g};runtime.setTranslator=function(k){g=k};runtime.tr=function(k){var c=g(k);return c&&"string"===String(typeof c)?c:k}})(); +(function(g){function k(c){if(c.length){var b=c[0];runtime.readFile(b,"utf8",function(f,n){function g(){var b;(b=eval(k))&&runtime.exit(b)}var r="",r=b.lastIndexOf("/"),k=n,r=-1!==r?b.substring(0,r):".";runtime.setCurrentDirectory(r);f?(runtime.log(f),runtime.exit(1)):null===k?(runtime.log("No code found for "+b),runtime.exit(1)):g.apply(null,c)})}}g=g?Array.prototype.slice.call(g):[];"NodeJSRuntime"===runtime.type()?k(process.argv.slice(2)):"RhinoRuntime"===runtime.type()?k(g):k(g.slice(1))})("undefined"!== +String(typeof arguments)&&arguments);(function(){core.Async=function(){return{forEach:function(g,k,c){function b(b){p!==n&&(b?(p=n,c(b)):(p+=1,p===n&&c(null)))}var f,n=g.length,p=0;for(f=0;f<n;f+=1)k(g[f],b)},destroyAll:function(g,k){function c(b,f){if(f)k(f);else if(b<g.length)g[b](function(f){c(b+1,f)});else k()}c(0,void 0)}}}()})(); +function makeBase64(){function g(a){var d,m=a.length,h=new Uint8Array(new ArrayBuffer(m));for(d=0;d<m;d+=1)h[d]=a.charCodeAt(d)&255;return h}function k(a){var d,m="",h,b=a.length-2;for(h=0;h<b;h+=3)d=a[h]<<16|a[h+1]<<8|a[h+2],m+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[d>>>18],m+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[d>>>12&63],m+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[d>>>6&63],m+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[d& +63];h===b+1?(d=a[h]<<4,m+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[d>>>6],m+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[d&63],m+="=="):h===b&&(d=a[h]<<10|a[h+1]<<2,m+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[d>>>12],m+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[d>>>6&63],m+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[d&63],m+="=");return m}function c(a){a=a.replace(/[^A-Za-z0-9+\/]+/g, +"");var d=a.length,m=new Uint8Array(new ArrayBuffer(3*d)),b=a.length%4,c=0,l,e;for(l=0;l<d;l+=4)e=(h[a.charAt(l)]||0)<<18|(h[a.charAt(l+1)]||0)<<12|(h[a.charAt(l+2)]||0)<<6|(h[a.charAt(l+3)]||0),m[c]=e>>16,m[c+1]=e>>8&255,m[c+2]=e&255,c+=3;d=3*d-[0,0,2,1][b];return m.subarray(0,d)}function b(a){var d,m,h=a.length,b=0,c=new Uint8Array(new ArrayBuffer(3*h));for(d=0;d<h;d+=1)m=a[d],128>m?c[b++]=m:(2048>m?c[b++]=192|m>>>6:(c[b++]=224|m>>>12&15,c[b++]=128|m>>>6&63),c[b++]=128|m&63);return c.subarray(0, +b)}function f(a){var d,m,h,b,c=a.length,l=new Uint8Array(new ArrayBuffer(c)),e=0;for(d=0;d<c;d+=1)m=a[d],128>m?l[e++]=m:(d+=1,h=a[d],224>m?l[e++]=(m&31)<<6|h&63:(d+=1,b=a[d],l[e++]=(m&15)<<12|(h&63)<<6|b&63));return l.subarray(0,e)}function n(a){return k(g(a))}function p(a){return String.fromCharCode.apply(String,c(a))}function r(a){return f(g(a))}function q(a){a=f(a);for(var d="",m=0;m<a.length;)d+=String.fromCharCode.apply(String,a.subarray(m,m+45E3)),m+=45E3;return d}function e(a,d,m){var h,b, +c,l="";for(c=d;c<m;c+=1)d=a.charCodeAt(c)&255,128>d?l+=String.fromCharCode(d):(c+=1,h=a.charCodeAt(c)&255,224>d?l+=String.fromCharCode((d&31)<<6|h&63):(c+=1,b=a.charCodeAt(c)&255,l+=String.fromCharCode((d&15)<<12|(h&63)<<6|b&63)));return l}function l(a,d){function m(){var c=b+1E5;c>a.length&&(c=a.length);h+=e(a,b,c);b=c;c=b===a.length;d(h,c)&&!c&&runtime.setTimeout(m,0)}var h="",b=0;1E5>a.length?d(e(a,0,a.length),!0):("string"!==typeof a&&(a=a.slice()),m())}function a(a){return b(g(a))}function d(a){return String.fromCharCode.apply(String, +b(a))}function m(a){return String.fromCharCode.apply(String,b(g(a)))}var h=function(a){var d={},m,h;m=0;for(h=a.length;m<h;m+=1)d[a.charAt(m)]=m;return d}("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"),y,x,z=runtime.getWindow(),w,v;z&&z.btoa?(w=z.btoa,y=function(a){return w(m(a))}):(w=n,y=function(d){return k(a(d))});z&&z.atob?(v=z.atob,x=function(a){a=v(a);return e(a,0,a.length)}):(v=p,x=function(a){return q(c(a))});core.Base64=function(){this.convertByteArrayToBase64=this.convertUTF8ArrayToBase64= +k;this.convertBase64ToByteArray=this.convertBase64ToUTF8Array=c;this.convertUTF16ArrayToByteArray=this.convertUTF16ArrayToUTF8Array=b;this.convertByteArrayToUTF16Array=this.convertUTF8ArrayToUTF16Array=f;this.convertUTF8StringToBase64=n;this.convertBase64ToUTF8String=p;this.convertUTF8StringToUTF16Array=r;this.convertByteArrayToUTF16String=this.convertUTF8ArrayToUTF16String=q;this.convertUTF8StringToUTF16String=l;this.convertUTF16StringToByteArray=this.convertUTF16StringToUTF8Array=a;this.convertUTF16ArrayToUTF8String= +d;this.convertUTF16StringToUTF8String=m;this.convertUTF16StringToBase64=y;this.convertBase64ToUTF16String=x;this.fromBase64=p;this.toBase64=n;this.atob=v;this.btoa=w;this.utob=m;this.btou=l;this.encode=y;this.encodeURI=function(a){return y(a).replace(/[+\/]/g,function(a){return"+"===a?"-":"_"}).replace(/\\=+$/,"")};this.decode=function(a){return x(a.replace(/[\-_]/g,function(a){return"-"===a?"+":"/"}))};return this};return core.Base64}core.Base64=makeBase64(); +core.CSSUnits=function(){var g=this,k={"in":1,cm:2.54,mm:25.4,pt:72,pc:12,px:96};this.convert=function(c,b,f){return c*k[f]/k[b]};this.convertMeasure=function(c,b){var f,n;c&&b&&(f=parseFloat(c),n=c.replace(f.toString(),""),f=g.convert(f,n,b));return f};this.getUnits=function(c){return c.substr(c.length-2,c.length)}}; +(function(){function g(){var b,f,n,g,k,q,e,l,a;void 0===c&&(f=(b=runtime.getWindow())&&b.document,q=f.documentElement,e=f.body,c={rangeBCRIgnoresElementBCR:!1,unscaledRangeClientRects:!1,elementBCRIgnoresBodyScroll:!1},f&&(g=f.createElement("div"),g.style.position="absolute",g.style.left="-99999px",g.style.transform="scale(2)",g.style["-webkit-transform"]="scale(2)",k=f.createElement("div"),g.appendChild(k),e.appendChild(g),b=f.createRange(),b.selectNode(k),c.rangeBCRIgnoresElementBCR=0===b.getClientRects().length, +k.appendChild(f.createTextNode("Rect transform test")),f=k.getBoundingClientRect(),n=b.getBoundingClientRect(),c.unscaledRangeClientRects=2<Math.abs(f.height-n.height),g.style.transform="",g.style["-webkit-transform"]="",f=q.style.overflow,n=e.style.overflow,l=e.style.height,a=e.scrollTop,q.style.overflow="visible",e.style.overflow="visible",e.style.height="200%",e.scrollTop=e.scrollHeight,c.elementBCRIgnoresBodyScroll=b.getBoundingClientRect().top!==k.getBoundingClientRect().top,e.scrollTop=a,e.style.height= +l,e.style.overflow=n,q.style.overflow=f,b.detach(),e.removeChild(g),b=Object.keys(c).map(function(a){return a+":"+String(c[a])}).join(", "),runtime.log("Detected browser quirks - "+b)));return c}function k(b,c,n){for(b=b?b.firstElementChild:null;b;){if(b.localName===n&&b.namespaceURI===c)return b;b=b.nextElementSibling}return null}var c;core.DomUtilsImpl=function(){function b(a,d){for(var b=0,c;a.parentNode!==d;)runtime.assert(null!==a.parentNode,"parent is null"),a=a.parentNode;for(c=d.firstChild;c!== +a;)b+=1,c=c.nextSibling;return b}function c(a,d){return 0>=a.compareBoundaryPoints(Range.START_TO_START,d)&&0<=a.compareBoundaryPoints(Range.END_TO_END,d)}function n(a,d){return 0>=a.compareBoundaryPoints(Range.END_TO_START,d)&&0<=a.compareBoundaryPoints(Range.START_TO_END,d)}function p(a,d){var b=null;a.nodeType===Node.TEXT_NODE&&(0===a.length?(a.parentNode.removeChild(a),d.nodeType===Node.TEXT_NODE&&(b=d)):(d.nodeType===Node.TEXT_NODE&&(a.appendData(d.data),d.parentNode.removeChild(d)),b=a));return b} +function r(a){for(var d=a.parentNode;a.firstChild;)d.insertBefore(a.firstChild,a);d.removeChild(a);return d}function q(a,d){var b=a.parentNode,c=a.firstChild,l=d(a),e;if(l===NodeFilter.FILTER_SKIP)return b;for(;c;)e=c.nextSibling,q(c,d),c=e;b&&l===NodeFilter.FILTER_REJECT&&r(a);return b}function e(a,d){return a===d||Boolean(a.compareDocumentPosition(d)&Node.DOCUMENT_POSITION_CONTAINED_BY)}function l(a,d){return g().unscaledRangeClientRects?a:a/d}function a(d,h,b){Object.keys(h).forEach(function(c){var l= +c.split(":"),e=l[1],f=b(l[0]),l=h[c],n=typeof l;"object"===n?Object.keys(l).length&&(c=f?d.getElementsByTagNameNS(f,e)[0]||d.ownerDocument.createElementNS(f,c):d.getElementsByTagName(e)[0]||d.ownerDocument.createElement(c),d.appendChild(c),a(c,l,b)):f&&(runtime.assert("number"===n||"string"===n,"attempting to map unsupported type '"+n+"' (key: "+c+")"),d.setAttributeNS(f,c,String(l)))})}var d=null;this.splitBoundaries=function(a){var d,c=[],l,e,f;if(a.startContainer.nodeType===Node.TEXT_NODE||a.endContainer.nodeType=== +Node.TEXT_NODE){l=a.endContainer;e=a.endContainer.nodeType!==Node.TEXT_NODE?a.endOffset===a.endContainer.childNodes.length:!1;f=a.endOffset;d=a.endContainer;if(f<d.childNodes.length)for(d=d.childNodes.item(f),f=0;d.firstChild;)d=d.firstChild;else for(;d.lastChild;)d=d.lastChild,f=d.nodeType===Node.TEXT_NODE?d.textContent.length:d.childNodes.length;d===l&&(l=null);a.setEnd(d,f);f=a.endContainer;0!==a.endOffset&&f.nodeType===Node.TEXT_NODE&&(d=f,a.endOffset!==d.length&&(c.push(d.splitText(a.endOffset)), +c.push(d)));f=a.startContainer;0!==a.startOffset&&f.nodeType===Node.TEXT_NODE&&(d=f,a.startOffset!==d.length&&(f=d.splitText(a.startOffset),c.push(d),c.push(f),a.setStart(f,0)));if(null!==l){for(f=a.endContainer;f.parentNode&&f.parentNode!==l;)f=f.parentNode;e=e?l.childNodes.length:b(f,l);a.setEnd(l,e)}}return c};this.containsRange=c;this.rangesIntersect=n;this.rangeIntersection=function(a,d){var b;n(a,d)&&(b=a.cloneRange(),-1===a.compareBoundaryPoints(Range.START_TO_START,d)&&b.setStart(d.startContainer, +d.startOffset),1===a.compareBoundaryPoints(Range.END_TO_END,d)&&b.setEnd(d.endContainer,d.endOffset));return b};this.getNodesInRange=function(a,d,b){var c=[],l=a.commonAncestorContainer,l=l.nodeType===Node.TEXT_NODE?l.parentNode:l;b=a.startContainer.ownerDocument.createTreeWalker(l,b,d,!1);var e,f;a.endContainer.childNodes[a.endOffset-1]?(e=a.endContainer.childNodes[a.endOffset-1],f=Node.DOCUMENT_POSITION_PRECEDING|Node.DOCUMENT_POSITION_CONTAINED_BY):(e=a.endContainer,f=Node.DOCUMENT_POSITION_PRECEDING); +if(a.startContainer.childNodes[a.startOffset])a=a.startContainer.childNodes[a.startOffset],b.currentNode=a;else{var n=a.startContainer;a.startOffset===(n.nodeType===Node.TEXT_NODE?n.length:n.childNodes.length)?(a=a.startContainer,b.currentNode=a,b.lastChild(),a=b.nextNode()):(a=a.startContainer,b.currentNode=a)}if(a){a=b.currentNode;if(a!==l)for(a=a.parentNode;a&&a!==l;)d(a)===NodeFilter.FILTER_REJECT&&(b.currentNode=a),a=a.parentNode;a=b.currentNode;switch(d(a)){case NodeFilter.FILTER_REJECT:for(a= +b.nextSibling();!a&&b.parentNode();)a=b.nextSibling();break;case NodeFilter.FILTER_SKIP:a=b.nextNode()}for(;a;){d=e.compareDocumentPosition(a);if(0!==d&&0===(d&f))break;c.push(a);a=b.nextNode()}}return c};this.normalizeTextNodes=function(a){a&&a.nextSibling&&(a=p(a,a.nextSibling));a&&a.previousSibling&&p(a.previousSibling,a)};this.rangeContainsNode=function(a,d){var b=d.ownerDocument.createRange(),l=d.ownerDocument.createRange(),e;b.setStart(a.startContainer,a.startOffset);b.setEnd(a.endContainer, +a.endOffset);l.selectNodeContents(d);e=c(b,l);b.detach();l.detach();return e};this.mergeIntoParent=r;this.removeUnwantedNodes=q;this.removeAllChildNodes=function(a){for(;a.firstChild;)a.removeChild(a.firstChild)};this.getElementsByTagNameNS=function(a,d,b){var c=[];a=a.getElementsByTagNameNS(d,b);c.length=b=a.length;for(d=0;d<b;d+=1)c[d]=a.item(d);return c};this.getElementsByTagName=function(a,d){var b=[],c,l,e;c=a.getElementsByTagName(d);b.length=e=c.length;for(l=0;l<e;l+=1)b[l]=c.item(l);return b}; +this.containsNode=function(a,d){return a===d||a.contains(d)};this.comparePoints=function(a,d,c,l){if(a===c)return l-d;var e=a.compareDocumentPosition(c);2===e?e=-1:4===e?e=1:10===e?(d=b(a,c),e=d<l?1:-1):(l=b(c,a),e=l<d?-1:1);return e};this.adaptRangeDifferenceToZoomLevel=l;this.translateRect=function(a,d,b){return{top:l(a.top-d.top,b),left:l(a.left-d.left,b),bottom:l(a.bottom-d.top,b),right:l(a.right-d.left,b),width:l(a.width,b),height:l(a.height,b)}};this.getBoundingClientRect=function(a){var b= +a.ownerDocument,c=g(),l=b.body;if((!1===c.unscaledRangeClientRects||c.rangeBCRIgnoresElementBCR)&&a.nodeType===Node.ELEMENT_NODE)return a=a.getBoundingClientRect(),c.elementBCRIgnoresBodyScroll?{left:a.left+l.scrollLeft,right:a.right+l.scrollLeft,top:a.top+l.scrollTop,bottom:a.bottom+l.scrollTop,width:a.width,height:a.height}:a;var e;d?e=d:d=e=b.createRange();c=e;c.selectNode(a);return c.getBoundingClientRect()};this.mapKeyValObjOntoNode=function(a,d,b){Object.keys(d).forEach(function(c){var l=c.split(":"), +e=l[1],l=b(l[0]),f=d[c];l?(e=a.getElementsByTagNameNS(l,e)[0],e||(e=a.ownerDocument.createElementNS(l,c),a.appendChild(e)),e.textContent=f):runtime.log("Key ignored: "+c)})};this.removeKeyElementsFromNode=function(a,d,b){d.forEach(function(d){var c=d.split(":"),h=c[1];(c=b(c[0]))?(h=a.getElementsByTagNameNS(c,h)[0])?h.parentNode.removeChild(h):runtime.log("Element for "+d+" not found."):runtime.log("Property Name ignored: "+d)})};this.getKeyValRepresentationOfNode=function(a,d){for(var b={},c=a.firstElementChild, +l;c;){if(l=d(c.namespaceURI))b[l+":"+c.localName]=c.textContent;c=c.nextElementSibling}return b};this.mapObjOntoNode=a;this.cloneEvent=function(a){var d=Object.create(null);Object.keys(a.constructor.prototype).forEach(function(b){d[b]=a[b]});d.prototype=a.constructor.prototype;return d};this.getDirectChild=k;(function(a){var d,b;b=runtime.getWindow();null!==b&&(d=b.navigator.appVersion.toLowerCase(),b=-1===d.indexOf("chrome")&&(-1!==d.indexOf("applewebkit")||-1!==d.indexOf("safari")),d=-1!==d.indexOf("msie")|| +-1!==d.indexOf("trident"),b||d)&&(a.containsNode=e)})(this)};core.DomUtils=new core.DomUtilsImpl})(); +core.Cursor=function(g,k){function c(a){a.parentNode&&(r.push(a.previousSibling),r.push(a.nextSibling),a.parentNode.removeChild(a))}function b(a,d,b){if(d.nodeType===Node.TEXT_NODE){runtime.assert(Boolean(d),"putCursorIntoTextNode: invalid container");var c=d.parentNode;runtime.assert(Boolean(c),"putCursorIntoTextNode: container without parent");runtime.assert(0<=b&&b<=d.length,"putCursorIntoTextNode: offset is out of bounds");0===b?c.insertBefore(a,d):(b!==d.length&&d.splitText(b),c.insertBefore(a, +d.nextSibling))}else d.nodeType===Node.ELEMENT_NODE&&d.insertBefore(a,d.childNodes.item(b));r.push(a.previousSibling);r.push(a.nextSibling)}var f=g.createElementNS("urn:webodf:names:cursor","cursor"),n=g.createElementNS("urn:webodf:names:cursor","anchor"),p,r=[],q=g.createRange(),e,l=core.DomUtils;this.getNode=function(){return f};this.getAnchorNode=function(){return n.parentNode?n:f};this.getSelectedRange=function(){e?(q.setStartBefore(f),q.collapse(!0)):(q.setStartAfter(p?n:f),q.setEndBefore(p? +f:n));return q};this.setSelectedRange=function(a,d){q&&q!==a&&q.detach();q=a;p=!1!==d;(e=a.collapsed)?(c(n),c(f),b(f,a.startContainer,a.startOffset)):(c(n),c(f),b(p?f:n,a.endContainer,a.endOffset),b(p?n:f,a.startContainer,a.startOffset));r.forEach(l.normalizeTextNodes);r.length=0};this.hasForwardSelection=function(){return p};this.remove=function(){c(f);r.forEach(l.normalizeTextNodes);r.length=0};f.setAttributeNS("urn:webodf:names:cursor","memberId",k);n.setAttributeNS("urn:webodf:names:cursor","memberId", +k)};core.Destroyable=function(){};core.Destroyable.prototype.destroy=function(g){};core.EventSource=function(){};core.EventSource.prototype.subscribe=function(g,k){};core.EventSource.prototype.unsubscribe=function(g,k){}; +core.EventNotifier=function(g){function k(b){runtime.assert(!c.hasOwnProperty(b),'Duplicated event ids: "'+b+'" registered more than once.');c[b]=[]}var c={};this.emit=function(b,f){var n,g;runtime.assert(c.hasOwnProperty(b),'unknown event fired "'+b+'"');g=c[b];for(n=0;n<g.length;n+=1)g[n](f)};this.subscribe=function(b,f){runtime.assert(c.hasOwnProperty(b),'tried to subscribe to unknown event "'+b+'"');c[b].push(f)};this.unsubscribe=function(b,f){var n;runtime.assert(c.hasOwnProperty(b),'tried to unsubscribe from unknown event "'+ +b+'"');n=c[b].indexOf(f);runtime.assert(-1!==n,'tried to unsubscribe unknown callback from event "'+b+'"');-1!==n&&c[b].splice(n,1)};this.register=k;g&&g.forEach(k)}; +core.ScheduledTask=function(g,k,c){function b(){p&&(c(n),p=!1)}function f(){b();g.apply(void 0,r);r=null}var n,p=!1,r=[],q=!1;this.trigger=function(){runtime.assert(!1===q,"Can't trigger destroyed ScheduledTask instance");r=Array.prototype.slice.call(arguments);p||(p=!0,n=k(f))};this.triggerImmediate=function(){runtime.assert(!1===q,"Can't trigger destroyed ScheduledTask instance");r=Array.prototype.slice.call(arguments);f()};this.processRequests=function(){p&&f()};this.cancel=b;this.restart=function(){runtime.assert(!1=== +q,"Can't trigger destroyed ScheduledTask instance");b();p=!0;n=k(f)};this.destroy=function(c){b();q=!0;c()}}; +(function(){var g;core.Task={};core.Task.SUPPRESS_MANUAL_PROCESSING=!1;core.Task.processTasks=function(){core.Task.SUPPRESS_MANUAL_PROCESSING||g.performRedraw()};core.Task.createRedrawTask=function(k){return new core.ScheduledTask(k,g.requestRedrawTask,g.cancelRedrawTask)};core.Task.createTimeoutTask=function(g,c){return new core.ScheduledTask(g,function(b){return runtime.setTimeout(b,c)},runtime.clearTimeout)};g=new function(){var g={};this.requestRedrawTask=function(c){var b=runtime.requestAnimationFrame(function(){c(); +delete g[b]});g[b]=c;return b};this.performRedraw=function(){Object.keys(g).forEach(function(c){g[c]();runtime.cancelAnimationFrame(parseInt(c,10))});g={}};this.cancelRedrawTask=function(c){runtime.cancelAnimationFrame(c);delete g[c]}}})(); +core.EventSubscriptions=function(){function g(b,f,n){b.subscribe(f,n);c.push({eventSource:b,eventid:f,callback:n})}function k(){var n=[];c.forEach(function(b){b.eventSource.unsubscribe(b.eventid,b.callback)});c.length=0;Object.keys(f).forEach(function(b){f[b].forEach(function(b){n.push(b.task.destroy)});delete f[b]});core.Async.destroyAll(n,function(){});b=new core.EventNotifier}var c=[],b=new core.EventNotifier,f={},n=0;this.addSubscription=g;this.addFrameSubscription=function(c,k,q){var e,l,a,d; +f.hasOwnProperty(k)||(f[k]=[]);a=f[k];for(d=0;d<a.length;d+=1)if(a[d].eventSource===c){e=a[d];break}e||(l="s"+n,n+=1,b.register(l),e={frameEventId:l,eventSource:c,task:core.Task.createRedrawTask(function(){b.emit(l,void 0)})},a.push(e),g(c,k,e.task.trigger));b.subscribe(e.frameEventId,q)};this.unsubscribeAll=k;this.destroy=function(b){k();b()}};core.LazyProperty=function(g){var k,c=!1;this.value=function(){c||(k=g(),c=!0);return k};this.reset=function(){c=!1}}; +core.LoopWatchDog=function(g,k){var c=Date.now(),b=0;this.check=function(){var f;if(g&&(f=Date.now(),f-c>g))throw runtime.log("alert","watchdog timeout"),"timeout!";if(0<k&&(b+=1,b>k))throw runtime.log("alert","watchdog loop overflow"),"loop overflow";}};core.NodeFilterChain=function(g){var k=NodeFilter.FILTER_REJECT,c=NodeFilter.FILTER_ACCEPT;this.acceptNode=function(b){var f;for(f=0;f<g.length;f+=1)if(g[f].acceptNode(b)===k)return k;return c}}; +core.PositionIterator=function(g,k,c,b){function f(){this.acceptNode=function(a){return!a||a.nodeType===m&&0===a.length?x:y}}function n(a){this.acceptNode=function(d){return!d||d.nodeType===m&&0===d.length?x:a.acceptNode(d)}}function p(){var d=l.currentNode,b=d.nodeType;a=b===m?d.length-1:b===h?1:0}function r(){if(null===l.previousSibling()){if(!l.parentNode()||l.currentNode===g)return l.firstChild(),!1;a=0}else p();return!0}function q(){var b=l.currentNode,c;c=d(b);if(b!==g)for(b=b.parentNode;b&& +b!==g;)d(b)===x&&(l.currentNode=b,c=x),b=b.parentNode;c===x?(a=l.currentNode.nodeType===m?b.length:1,b=e.nextPosition()):b=c===y?!0:e.nextPosition();b&&runtime.assert(d(l.currentNode)===y,"moveToAcceptedNode did not result in walker being on an accepted node");return b}var e=this,l,a,d,m=Node.TEXT_NODE,h=Node.ELEMENT_NODE,y=NodeFilter.FILTER_ACCEPT,x=NodeFilter.FILTER_REJECT;this.nextPosition=function(){var d=l.currentNode,b=d.nodeType;if(d===g)return!1;if(0===a&&b===h)null===l.firstChild()&&(a=1); +else if(b===m&&a+1<d.length)a+=1;else if(null!==l.nextSibling())a=0;else if(l.parentNode())a=1;else return!1;return!0};this.previousPosition=function(){var d=!0,b=l.currentNode;0===a?d=r():b.nodeType===m?--a:null!==l.lastChild()?p():b===g?d=!1:a=0;return d};this.previousNode=r;this.container=function(){var d=l.currentNode,b=d.nodeType;0===a&&b!==m&&(d=d.parentNode);return d};this.rightNode=function(){var b=l.currentNode,c=b.nodeType;if(c===m&&a===b.length)for(b=b.nextSibling;b&&d(b)!==y;)b=b.nextSibling; +else c===h&&1===a&&(b=null);return b};this.leftNode=function(){var b=l.currentNode;if(0===a)for(b=b.previousSibling;b&&d(b)!==y;)b=b.previousSibling;else if(b.nodeType===h)for(b=b.lastChild;b&&d(b)!==y;)b=b.previousSibling;return b};this.getCurrentNode=function(){return l.currentNode};this.unfilteredDomOffset=function(){if(l.currentNode.nodeType===m)return a;for(var d=0,b=l.currentNode,b=1===a?b.lastChild:b.previousSibling;b;)d+=1,b=b.previousSibling;return d};this.getPreviousSibling=function(){var a= +l.currentNode,d=l.previousSibling();l.currentNode=a;return d};this.getNextSibling=function(){var a=l.currentNode,d=l.nextSibling();l.currentNode=a;return d};this.setPositionBeforeElement=function(d){runtime.assert(Boolean(d),"setPositionBeforeElement called without element");l.currentNode=d;a=0;return q()};this.setUnfilteredPosition=function(d,b){runtime.assert(Boolean(d),"PositionIterator.setUnfilteredPosition called without container");l.currentNode=d;d.nodeType===m?(a=b,runtime.assert(b<=d.length, +"Error in setPosition: "+b+" > "+d.length),runtime.assert(0<=b,"Error in setPosition: "+b+" < 0"),b===d.length&&(l.nextSibling()?a=0:l.parentNode()?a=1:runtime.assert(!1,"Error in setUnfilteredPosition: position not valid."))):b<d.childNodes.length?(l.currentNode=d.childNodes.item(b),a=0):a=1;return q()};this.moveToEnd=function(){l.currentNode=g;a=1};this.moveToEndOfNode=function(d){d.nodeType===m?e.setUnfilteredPosition(d,d.length):(l.currentNode=d,a=1)};this.isBeforeNode=function(){return 0===a}; +this.getNodeFilter=function(){return d};d=(c?new n(c):new f).acceptNode;d.acceptNode=d;k=k||NodeFilter.SHOW_ALL;runtime.assert(g.nodeType!==Node.TEXT_NODE,"Internet Explorer doesn't allow tree walker roots to be text nodes");l=g.ownerDocument.createTreeWalker(g,k,d,b);a=0;null===l.firstChild()&&(a=1)};core.PositionFilter=function(){};core.PositionFilter.FilterResult={FILTER_ACCEPT:1,FILTER_REJECT:2,FILTER_SKIP:3};core.PositionFilter.prototype.acceptPosition=function(g){}; +core.PositionFilterChain=function(){var g=[],k=core.PositionFilter.FilterResult.FILTER_ACCEPT,c=core.PositionFilter.FilterResult.FILTER_REJECT;this.acceptPosition=function(b){var f;for(f=0;f<g.length;f+=1)if(g[f].acceptPosition(b)===c)return c;return k};this.addFilter=function(b){g.push(b)}};core.StepDirection={PREVIOUS:1,NEXT:2}; +core.StepIterator=function(g,k){function c(){a=null;m=d=void 0}function b(){void 0===m&&(m=g.acceptPosition(k)===e);return m}function f(a,d){c();return k.setUnfilteredPosition(a,d)}function n(){a||(a=k.container());return a}function p(){void 0===d&&(d=k.unfilteredDomOffset());return d}function r(){for(c();k.nextPosition();)if(c(),b())return!0;return!1}function q(){for(c();k.previousPosition();)if(c(),b())return!0;return!1}var e=core.PositionFilter.FilterResult.FILTER_ACCEPT,l=core.StepDirection.NEXT, +a,d,m;this.isStep=b;this.setPosition=f;this.container=n;this.offset=p;this.nextStep=r;this.previousStep=q;this.advanceStep=function(a){return a===l?r():q()};this.roundToClosestStep=function(){var a,d,c=b();c||(a=n(),d=p(),c=q(),c||(f(a,d),c=r()));return c};this.roundToPreviousStep=function(){var a=b();a||(a=q());return a};this.roundToNextStep=function(){var a=b();a||(a=r());return a};this.leftNode=function(){return k.leftNode()};this.snapshot=function(){return new core.StepIterator.StepSnapshot(n(), +p())};this.restore=function(a){f(a.container,a.offset)}};core.StepIterator.StepSnapshot=function(g,k){this.container=g;this.offset=k}; +core.Utils=function(){function g(k,c){if(c&&Array.isArray(c)){k=k||[];if(!Array.isArray(k))throw"Destination is not an array.";k=k.concat(c.map(function(b){return g(null,b)}))}else if(c&&"object"===typeof c){k=k||{};if("object"!==typeof k)throw"Destination is not an object.";Object.keys(c).forEach(function(b){k[b]=g(k[b],c[b])})}else k=c;return k}this.hashString=function(g){var c=0,b,f;b=0;for(f=g.length;b<f;b+=1)c=(c<<5)-c+g.charCodeAt(b),c|=0;return c};this.mergeObjects=function(k,c){Object.keys(c).forEach(function(b){k[b]= +g(k[b],c[b])});return k}}; +core.Zip=function(g,k){function c(b,c){var a=r.file(b);a?c(null,a.asUint8Array()):c(b+" not found.",null)}function b(b,l){c(b,function(a,d){if(a||null===d)return l(a,null);var b=runtime.byteArrayToString(d,"utf8");l(null,b)})}function f(b,c){try{b(r.generate({type:"uint8array",compression:"DEFLATE"}))}catch(a){c(a.message)}}function n(b,c){f(function(a){runtime.writeFile(b,a,c)},c)}var p=this,r,q=new core.Base64;this.load=c;this.save=function(b,c,a,d){r.file(b,c,{date:d,compression:a?null:"STORE"})}; +this.remove=function(b){var c=null!==r.file(b);r.remove(b);return c};this.write=function(b){n(g,b)};this.writeAs=n;this.createByteArray=f;this.loadContentXmlAsFragments=function(c,l){b(c,function(a,d){if(a)return l.rootElementReady(a);l.rootElementReady(null,d,!0)})};this.loadAsString=b;this.loadAsDOM=function(c,l){b(c,function(a,d){if(a||null===d)l(a,null);else{var b=(new DOMParser).parseFromString(d,"text/xml");l(null,b)}})};this.loadAsDataURL=function(b,l,a){c(b,function(d,b){if(d||!b)return a(d, +null);var c=0,e;l||(l=80===b[1]&&78===b[2]&&71===b[3]?"image/png":255===b[0]&&216===b[1]&&255===b[2]?"image/jpeg":71===b[0]&&73===b[1]&&70===b[2]?"image/gif":"");for(e="data:"+l+";base64,";c<b.length;)e+=q.convertUTF8ArrayToBase64(b.subarray(c,Math.min(c+45E3,b.length))),c+=45E3;a(null,e)})};this.getEntries=function(){return Object.keys(r.files).map(function(b){return{filename:b}})};r=new externs.JSZip;null!==k&&runtime.readFile(g,"binary",function(b,c){"string"===typeof c&&(b="file was read as a string. Should be Uint8Array."); +if(b||!c||0===c.length)k("File '"+g+"' cannot be read. Err: "+(b||"[none]"),p);else try{r.load(c,{checkCRC32:!1}),k(null,p)}catch(a){k(a.message,p)}})};core.SimpleClientRect=null;gui.CommonConstraints={EDIT:{ANNOTATIONS:{ONLY_DELETE_OWN:"onlyDeleteOwn"},REVIEW_MODE:"reviewMode"}}; +gui.SessionConstraints=function(){function g(b){k.hasOwnProperty(b)||(k[b]=!1,c.register(b))}var k={},c=new core.EventNotifier;this.registerConstraint=g;this.subscribe=function(b,f){g(b);c.subscribe(b,f)};this.unsubscribe=function(b,f){c.unsubscribe(b,f)};this.setState=function(b,f){runtime.assert(!0===k.hasOwnProperty(b),"No such constraint");k[b]!==f&&(k[b]=f,c.emit(b,f))};this.getState=function(b){runtime.assert(!0===k.hasOwnProperty(b),"No such constraint");return k[b]}}; +gui.BlacklistNamespaceNodeFilter=function(g){var k={},c=NodeFilter.FILTER_REJECT,b=NodeFilter.FILTER_ACCEPT;this.acceptNode=function(f){return!f||k.hasOwnProperty(f.namespaceURI)?c:b};(function(){g.forEach(function(b){k[b]=!0})})()}; +odf.Namespaces={namespaceMap:{config:"urn:oasis:names:tc:opendocument:xmlns:config:1.0",db:"urn:oasis:names:tc:opendocument:xmlns:database:1.0",dc:"http://purl.org/dc/elements/1.1/",dr3d:"urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0",draw:"urn:oasis:names:tc:opendocument:xmlns:drawing:1.0",chart:"urn:oasis:names:tc:opendocument:xmlns:chart:1.0",fo:"urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0",form:"urn:oasis:names:tc:opendocument:xmlns:form:1.0",math:"http://www.w3.org/1998/Math/MathML", +meta:"urn:oasis:names:tc:opendocument:xmlns:meta:1.0",number:"urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0",office:"urn:oasis:names:tc:opendocument:xmlns:office:1.0",presentation:"urn:oasis:names:tc:opendocument:xmlns:presentation:1.0",style:"urn:oasis:names:tc:opendocument:xmlns:style:1.0",svg:"urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0",table:"urn:oasis:names:tc:opendocument:xmlns:table:1.0",text:"urn:oasis:names:tc:opendocument:xmlns:text:1.0",xforms:"http://www.w3.org/2002/xforms", +xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace"},prefixMap:{},configns:"urn:oasis:names:tc:opendocument:xmlns:config:1.0",dbns:"urn:oasis:names:tc:opendocument:xmlns:database:1.0",dcns:"http://purl.org/dc/elements/1.1/",dr3dns:"urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0",drawns:"urn:oasis:names:tc:opendocument:xmlns:drawing:1.0",chartns:"urn:oasis:names:tc:opendocument:xmlns:chart:1.0",fons:"urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0",formns:"urn:oasis:names:tc:opendocument:xmlns:form:1.0", +mathns:"http://www.w3.org/1998/Math/MathML",metans:"urn:oasis:names:tc:opendocument:xmlns:meta:1.0",numberns:"urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0",officens:"urn:oasis:names:tc:opendocument:xmlns:office:1.0",presentationns:"urn:oasis:names:tc:opendocument:xmlns:presentation:1.0",stylens:"urn:oasis:names:tc:opendocument:xmlns:style:1.0",svgns:"urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0",tablens:"urn:oasis:names:tc:opendocument:xmlns:table:1.0",textns:"urn:oasis:names:tc:opendocument:xmlns:text:1.0", +xformsns:"http://www.w3.org/2002/xforms",xlinkns:"http://www.w3.org/1999/xlink",xmlns:"http://www.w3.org/XML/1998/namespace"};(function(){var g=odf.Namespaces.namespaceMap,k=odf.Namespaces.prefixMap,c;for(c in g)g.hasOwnProperty(c)&&(k[g[c]]=c)})();odf.Namespaces.forEachPrefix=function(g){var k=odf.Namespaces.namespaceMap,c;for(c in k)k.hasOwnProperty(c)&&g(c,k[c])}; +odf.Namespaces.lookupNamespaceURI=function(g){var k=null;odf.Namespaces.namespaceMap.hasOwnProperty(g)&&(k=odf.Namespaces.namespaceMap[g]);return k};odf.Namespaces.lookupPrefix=function(g){var k=odf.Namespaces.prefixMap;return k.hasOwnProperty(g)?k[g]:null};odf.Namespaces.lookupNamespaceURI.lookupNamespaceURI=odf.Namespaces.lookupNamespaceURI; +(function(){odf.OdfSchemaImpl=function(){var g=[["config:config-item","uncategorized"],["form:item","object"],["form:option","uncategorized"],["math:math","field"],["meta:user-defined","uncategorized"],["number:currency-symbol","uncategorized"],["number:embedded-text","uncategorized"],["number:text","uncategorized"],["presentation:date-time-decl","uncategorized"],["presentation:footer-decl","uncategorized"],["presentation:header-decl","uncategorized"],["svg:desc","text"],["svg:title","text"],["table:desc", +"uncategorized"],["table:title","uncategorized"],["text:a","text"],["text:author-initials","field"],["text:author-name","field"],["text:bibliography-mark","field"],["text:bookmark-ref","field"],["text:chapter","field"],["text:character-count","field"],["text:conditional-text","field"],["text:creation-date","field"],["text:creation-time","field"],["text:creator","field"],["text:database-display","field"],["text:database-name","field"],["text:database-row-number","field"],["text:date","field"],["text:dde-connection", +"field"],["text:description","field"],["text:editing-cycles","field"],["text:editing-duration","field"],["text:execute-macro","uncategorized"],["text:expression","uncategorized"],["text:file-name","field"],["text:h","text"],["text:hidden-paragraph","text"],["text:hidden-text","text"],["text:image-count","field"],["text:index-entry-span","uncategorized"],["text:index-title-template","uncategorized"],["text:initial-creator","field"],["text:keywords","field"],["text:linenumbering-separator","style"], +["text:measure","uncategorized"],["text:meta","uncategorized"],["text:meta-field","uncategorized"],["text:modification-date","field"],["text:modification-time","field"],["text:note-citation","field"],["text:note-continuation-notice-backward","style"],["text:note-continuation-notice-forward","style"],["text:note-ref","field"],["text:object-count","field"],["text:p","text"],["text:page-continuation","uncategorized"],["text:page-count","field"],["text:page-number","field"],["text:page-variable-get", +"field"],["text:page-variable-set","field"],["text:paragraph-count","field"],["text:placeholder","field"],["text:print-date","field"],["text:print-time","field"],["text:printed-by","field"],["text:reference-ref","field"],["text:ruby-base","text"],["text:ruby-text","text"],["text:script","text"],["text:sender-city","field"],["text:sender-company","field"],["text:sender-country","field"],["text:sender-email","field"],["text:sender-fax","field"],["text:sender-firstname","field"],["text:sender-initials", +"field"],["text:sender-lastname","field"],["text:sender-phone-private","field"],["text:sender-phone-work","field"],["text:sender-position","field"],["text:sender-postal-code","field"],["text:sender-state-or-province","field"],["text:sender-street","field"],["text:sender-title","field"],["text:sequence","uncategorized"],["text:sequence-ref","uncategorized"],["text:sheet-name","uncategorized"],["text:span","text"],["text:subject","field"],["text:table-count","field"],["text:table-formula","deprecated"], +["text:template-name","uncategorized"],["text:text-input","field"],["text:time","field"],["text:title","field"],["text:user-defined","field"],["text:user-field-get","field"],["text:user-field-input","field"],["text:variable-get","field"],["text:variable-input","field"],["text:variable-set","field"],["text:word-count","field"],["xforms:model","uncategorized"]],k={};this.isTextContainer=function(c,b){return"text"===k[c+":"+b]};this.isField=function(c,b){return"field"===k[c+":"+b]};this.getFields=function(){return g.filter(function(c){return"field"=== +c[1]}).map(function(c){return c[0]})};(function(){g.forEach(function(c){var b=c[1],f=c[0].split(":");c=f[0];var f=f[1],n=odf.Namespaces.lookupNamespaceURI(c);n?k[n+":"+f]=b:runtime.log("DEBUG: OdfSchema - unknown prefix '"+c+"'")})})()};odf.OdfSchema=new odf.OdfSchemaImpl})(); +odf.OdfUtilsImpl=function(){function g(a){return"image"===(a&&a.localName)&&a.namespaceURI===R}function k(a){return null!==a&&a.nodeType===Node.ELEMENT_NODE&&"frame"===a.localName&&a.namespaceURI===R&&"as-char"===a.getAttributeNS(J,"anchor-type")}function c(a){var d;(d="annotation"===(a&&a.localName)&&a.namespaceURI===odf.Namespaces.officens)||(d="div"===(a&&a.localName)&&"annotationWrapper"===a.className);return d}function b(a){return"a"===(a&&a.localName)&&a.namespaceURI===J}function f(a){var d= +a&&a.localName;return("p"===d||"h"===d)&&a.namespaceURI===J}function n(a,d){for(a&&void 0!==d&&!f(a)&&a.childNodes.item(d)&&(a=a.childNodes.item(d));a&&!f(a);)a=a.parentNode;return a}function p(a,d){for(;a&&a!==d;){if(a.namespaceURI===odf.Namespaces.officens&&"annotation"===a.localName)return a;a=a.parentNode}return null}function r(a){return/^[ \t\r\n]+$/.test(a)}function q(a){if(null===a||a.nodeType!==Node.ELEMENT_NODE)return!1;var d=a.localName;return fa.isTextContainer(a.namespaceURI,d)||"span"=== +d&&"webodf-annotationHighlight"===a.className}function e(a){return null===a||a.nodeType!==Node.ELEMENT_NODE?!1:fa.isField(a.namespaceURI,a.localName)}function l(a){var d=a&&a.localName,b=!1;d&&(a=a.namespaceURI,a===J&&(b="s"===d||"tab"===d||"line-break"===d));return b}function a(a){return l(a)||e(a)||k(a)||c(a)}function d(a){var d=a&&a.localName,b=!1;d&&(a=a.namespaceURI,a===J&&(b="s"===d));return b}function m(a){return-1!==S.indexOf(a.namespaceURI)}function h(a){if(l(a)||e(a))return!1;if(q(a.parentNode)&& +a.nodeType===Node.TEXT_NODE)return 0===a.textContent.length;for(a=a.firstChild;a;){if(m(a)||!h(a))return!1;a=a.nextSibling}return!0}function y(a){for(;null!==a.firstChild&&q(a);)a=a.firstChild;return a}function x(a){for(;null!==a.lastChild&&q(a);)a=a.lastChild;return a}function z(a){for(;!f(a)&&null===a.previousSibling;)a=a.parentNode;return f(a)?null:x(a.previousSibling)}function w(a){for(;!f(a)&&null===a.nextSibling;)a=a.parentNode;return f(a)?null:y(a.nextSibling)}function v(b){for(var c=!1;b;)if(b.nodeType=== +Node.TEXT_NODE)if(0===b.length)b=z(b);else return!r(b.data.substr(b.length-1,1));else a(b)?(c=!1===d(b),b=null):b=z(b);return c}function u(d){var b=!1,c;for(d=d&&y(d);d;){c=d.nodeType===Node.TEXT_NODE?d.length:0;if(0<c&&!r(d.data)){b=!0;break}if(a(d)){b=!0;break}d=w(d)}return b}function t(a,d){return r(a.data.substr(d))?!u(w(a)):!1}function A(d,b){var c=d.data,m;if(!r(c[b])||a(d.parentNode))return!1;0<b?r(c[b-1])||(m=!0):v(z(d))&&(m=!0);return!0===m?t(d,b)?!1:!0:!1}function I(a){return(a=/(-?[0-9]*[0-9][0-9]*(\.[0-9]*)?|0+\.[0-9]*[1-9][0-9]*|\.[0-9]*[1-9][0-9]*)((cm)|(mm)|(in)|(pt)|(pc)|(px)|(%))/.exec(a))? +{value:parseFloat(a[1]),unit:a[3]}:null}function K(a){return(a=I(a))&&(0>a.value||"%"===a.unit)?null:a}function L(a){return(a=I(a))&&"%"!==a.unit?null:a}function E(a){switch(a.namespaceURI){case odf.Namespaces.drawns:case odf.Namespaces.svgns:case odf.Namespaces.dr3dns:return!1;case odf.Namespaces.textns:switch(a.localName){case "note-body":case "ruby-text":return!1}break;case odf.Namespaces.officens:switch(a.localName){case "annotation":case "binary-data":case "event-listeners":return!1}break;default:switch(a.localName){case "cursor":case "editinfo":return!1}}return!0} +function N(a){return Boolean(n(a)&&(!r(a.textContent)||A(a,0)))}function O(a,d){for(;0<d.length&&!aa.rangeContainsNode(a,d[0]);)d.shift();for(;0<d.length&&!aa.rangeContainsNode(a,d[d.length-1]);)d.pop()}function D(d,b,m){var h;h=aa.getNodesInRange(d,function(d){var b=NodeFilter.FILTER_REJECT;if(l(d.parentNode)||e(d.parentNode)||c(d))b=NodeFilter.FILTER_REJECT;else if(d.nodeType===Node.TEXT_NODE){if(m||N(d))b=NodeFilter.FILTER_ACCEPT}else if(a(d))b=NodeFilter.FILTER_ACCEPT;else if(E(d)||q(d))b=NodeFilter.FILTER_SKIP; +return b},NodeFilter.SHOW_ELEMENT|NodeFilter.SHOW_TEXT);b||O(d,h);return h}function V(a,d,b){for(;a;){if(b(a)){d[0]!==a&&d.unshift(a);break}if(c(a))break;a=a.parentNode}}function W(a,d){var b=a;if(d<b.childNodes.length-1)b=b.childNodes[d+1];else{for(;!b.nextSibling;)b=b.parentNode;b=b.nextSibling}for(;b.firstChild;)b=b.firstChild;return b}var J=odf.Namespaces.textns,R=odf.Namespaces.drawns,P=odf.Namespaces.xlinkns,aa=core.DomUtils,S=[odf.Namespaces.dbns,odf.Namespaces.dcns,odf.Namespaces.dr3dns,odf.Namespaces.drawns, +odf.Namespaces.chartns,odf.Namespaces.formns,odf.Namespaces.numberns,odf.Namespaces.officens,odf.Namespaces.presentationns,odf.Namespaces.stylens,odf.Namespaces.svgns,odf.Namespaces.tablens,odf.Namespaces.textns],fa=odf.OdfSchema;this.isImage=g;this.isCharacterFrame=k;this.isInlineRoot=c;this.isTextSpan=function(a){return"span"===(a&&a.localName)&&a.namespaceURI===J};this.isHyperlink=b;this.getHyperlinkTarget=function(a){return a.getAttributeNS(P,"href")||""};this.isParagraph=f;this.getParagraphElement= +n;this.getParentAnnotation=p;this.isWithinAnnotation=function(a,d){return Boolean(p(a,d))};this.getAnnotationCreator=function(a){return a.getElementsByTagNameNS(odf.Namespaces.dcns,"creator")[0].textContent};this.isListItem=function(a){return"list-item"===(a&&a.localName)&&a.namespaceURI===J};this.isLineBreak=function(a){return"line-break"===(a&&a.localName)&&a.namespaceURI===J};this.isODFWhitespace=r;this.isGroupingElement=q;this.isFieldElement=e;this.isCharacterElement=l;this.isAnchoredAsCharacterElement= +a;this.isSpaceElement=d;this.isODFNode=m;this.hasNoODFContent=h;this.firstChild=y;this.lastChild=x;this.previousNode=z;this.nextNode=w;this.scanLeftForNonSpace=v;this.lookLeftForCharacter=function(d){var b,c=b=0;d.nodeType===Node.TEXT_NODE&&(c=d.length);0<c?(b=d.data,b=r(b.substr(c-1,1))?1===c?v(z(d))?2:0:r(b.substr(c-2,1))?0:2:1):a(d)&&(b=1);return b};this.lookRightForCharacter=function(d){var b=!1,c=0;d&&d.nodeType===Node.TEXT_NODE&&(c=d.length);0<c?b=!r(d.data.substr(0,1)):a(d)&&(b=!0);return b}; +this.scanLeftForAnyCharacter=function(d){var b=!1,c;for(d=d&&x(d);d;){c=d.nodeType===Node.TEXT_NODE?d.length:0;if(0<c&&!r(d.data)){b=!0;break}if(a(d)){b=!0;break}d=z(d)}return b};this.scanRightForAnyCharacter=u;this.isTrailingWhitespace=t;this.isSignificantWhitespace=A;this.isDowngradableSpaceElement=function(a){return d(a)?v(z(a))&&u(w(a)):!1};this.parseLength=I;this.parseNonNegativeLength=K;this.parseFoFontSize=function(a){var d;d=(d=I(a))&&(0>=d.value||"%"===d.unit)?null:d;return d||L(a)};this.parseFoLineHeight= +function(a){return K(a)||L(a)};this.isTextContentContainingNode=E;this.getTextNodes=function(a,d){var b;b=aa.getNodesInRange(a,function(a){var d=NodeFilter.FILTER_REJECT;a.nodeType===Node.TEXT_NODE?N(a)&&(d=NodeFilter.FILTER_ACCEPT):E(a)&&(d=NodeFilter.FILTER_SKIP);return d},NodeFilter.SHOW_ELEMENT|NodeFilter.SHOW_TEXT);d||O(a,b);return b};this.getTextElements=D;this.getParagraphElements=function(a){var d;d=aa.getNodesInRange(a,function(a){var d=NodeFilter.FILTER_REJECT;if(f(a))d=NodeFilter.FILTER_ACCEPT; +else if(E(a)||q(a))d=NodeFilter.FILTER_SKIP;return d},NodeFilter.SHOW_ELEMENT);V(a.startContainer,d,f);return d};this.getImageElements=function(a){var d;d=aa.getNodesInRange(a,function(a){var d=NodeFilter.FILTER_SKIP;g(a)&&(d=NodeFilter.FILTER_ACCEPT);return d},NodeFilter.SHOW_ELEMENT);V(a.startContainer,d,g);return d};this.getHyperlinkElements=function(a){var d=[],c=a.cloneRange();a.collapsed&&a.endContainer.nodeType===Node.ELEMENT_NODE&&(a=W(a.endContainer,a.endOffset),a.nodeType===Node.TEXT_NODE&& +c.setEnd(a,1));D(c,!0,!1).forEach(function(a){for(a=a.parentNode;!f(a);){if(b(a)&&-1===d.indexOf(a)){d.push(a);break}a=a.parentNode}});c.detach();return d};this.getNormalizedFontFamilyName=function(a){/^(["'])(?:.|[\n\r])*?\1$/.test(a)||(a=a.replace(/^[ \t\r\n\f]*((?:.|[\n\r])*?)[ \t\r\n\f]*$/,"$1"),/[ \t\r\n\f]/.test(a)&&(a="'"+a.replace(/[ \t\r\n\f]+/g," ")+"'"));return a}};odf.OdfUtils=new odf.OdfUtilsImpl; +gui.OdfTextBodyNodeFilter=function(){var g=odf.OdfUtils,k=Node.TEXT_NODE,c=NodeFilter.FILTER_REJECT,b=NodeFilter.FILTER_ACCEPT,f=odf.Namespaces.textns;this.acceptNode=function(n){if(n.nodeType===k){if(!g.isGroupingElement(n.parentNode))return c}else if(n.namespaceURI===f&&"tracked-changes"===n.localName)return c;return b}};xmldom.LSSerializerFilter=function(){};xmldom.LSSerializerFilter.prototype.acceptNode=function(g){}; +odf.OdfNodeFilter=function(){this.acceptNode=function(g){return"http://www.w3.org/1999/xhtml"===g.namespaceURI?NodeFilter.FILTER_SKIP:g.namespaceURI&&g.namespaceURI.match(/^urn:webodf:/)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}};xmldom.XPathIterator=function(){};xmldom.XPathIterator.prototype.next=function(){};xmldom.XPathIterator.prototype.reset=function(){}; +function createXPathSingleton(){function g(b,a,d){return-1!==b&&(b<a||-1===a)&&(b<d||-1===d)}function k(b){for(var a=[],d=0,c=b.length,h;d<c;){var f=b,n=c,k=a,r="",p=[],q=f.indexOf("[",d),t=f.indexOf("/",d),A=f.indexOf("=",d);g(t,q,A)?(r=f.substring(d,t),d=t+1):g(q,t,A)?(r=f.substring(d,q),d=e(f,q,p)):g(A,t,q)?(r=f.substring(d,A),d=A):(r=f.substring(d,n),d=n);k.push({location:r,predicates:p});if(d<c&&"="===b[d]){h=b.substring(d+1,c);if(2<h.length&&("'"===h[0]||'"'===h[0]))h=h.slice(1,h.length-1); +else try{h=parseInt(h,10)}catch(I){}d=c}}return{steps:a,value:h}}function c(){var b=null,a=!1;this.setNode=function(a){b=a};this.reset=function(){a=!1};this.next=function(){var d=a?null:b;a=!0;return d}}function b(b,a,d){this.reset=function(){b.reset()};this.next=function(){for(var c=b.next();c;){c.nodeType===Node.ELEMENT_NODE&&(c=c.getAttributeNodeNS(a,d));if(c)break;c=b.next()}return c}}function f(b,a){var d=b.next(),c=null;this.reset=function(){b.reset();d=b.next();c=null};this.next=function(){for(;d;){if(c)if(a&& +c.firstChild)c=c.firstChild;else{for(;!c.nextSibling&&c!==d;)c=c.parentNode;c===d?d=b.next():c=c.nextSibling}else{do(c=d.firstChild)||(d=b.next());while(d&&!c)}if(c&&c.nodeType===Node.ELEMENT_NODE)return c}return null}}function n(b,a){this.reset=function(){b.reset()};this.next=function(){for(var d=b.next();d&&!a(d);)d=b.next();return d}}function p(b,a,d){a=a.split(":",2);var c=d(a[0]),h=a[1];return new n(b,function(a){return a.localName===h&&a.namespaceURI===c})}function r(b,a,d){var m=new c,h=q(m, +a,d),e=a.value;return void 0===e?new n(b,function(a){m.setNode(a);h.reset();return null!==h.next()}):new n(b,function(a){m.setNode(a);h.reset();return(a=h.next())?a.nodeValue===e:!1})}var q,e;e=function(b,a,d){for(var c=a,h=b.length,e=0;c<h;)"]"===b[c]?(--e,0>=e&&d.push(k(b.substring(a,c)))):"["===b[c]&&(0>=e&&(a=c+1),e+=1),c+=1;return c};q=function(c,a,d){var m,h,e,n;for(m=0;m<a.steps.length;m+=1){e=a.steps[m];h=e.location;if(""===h)c=new f(c,!1);else if("@"===h[0]){h=h.substr(1).split(":",2);n= +d(h[0]);if(!n)throw"No namespace associated with the prefix "+h[0];c=new b(c,n,h[1])}else"."!==h&&(c=new f(c,!1),-1!==h.indexOf(":")&&(c=p(c,h,d)));for(h=0;h<e.predicates.length;h+=1)n=e.predicates[h],c=r(c,n,d)}return c};return{getODFElementsWithXPath:function(b,a,d){var m=b.ownerDocument,h=[],e=null;if(m&&"function"===typeof m.evaluate)for(d=m.evaluate(a,b,d,XPathResult.UNORDERED_NODE_ITERATOR_TYPE,null),e=d.iterateNext();null!==e;)e.nodeType===Node.ELEMENT_NODE&&h.push(e),e=d.iterateNext();else{h= +new c;h.setNode(b);b=k(a);h=q(h,b,d);b=[];for(d=h.next();d;)b.push(d),d=h.next();h=b}return h}}}xmldom.XPath=createXPathSingleton(); +odf.StyleInfo=function(){function g(a,d){var b,c,h,m,e,l=0;if(b=K[a.localName])if(h=b[a.namespaceURI])l=h.length;for(b=0;b<l;b+=1)c=h[b],m=c.ns,e=c.localname,(c=a.getAttributeNS(m,e))&&a.setAttributeNS(m,A[m]+e,d+c);for(h=a.firstElementChild;h;)g(h,d),h=h.nextElementSibling}function k(a,d){var b,c,h,m,e,l=0;if(b=K[a.localName])if(h=b[a.namespaceURI])l=h.length;for(b=0;b<l;b+=1)if(c=h[b],m=c.ns,e=c.localname,c=a.getAttributeNS(m,e))c=c.replace(d,""),a.setAttributeNS(m,A[m]+e,c);for(h=a.firstElementChild;h;)k(h, +d),h=h.nextElementSibling}function c(a,d){var b,c,h,m,e,l=0;if(b=K[a.localName])if(h=b[a.namespaceURI])l=h.length;for(b=0;b<l;b+=1)if(m=h[b],c=m.ns,e=m.localname,c=a.getAttributeNS(c,e))d=d||{},m=m.keyname,d.hasOwnProperty(m)?d[m][c]=1:(e={},e[c]=1,d[m]=e);return d}function b(a,d){var h,m;c(a,d);for(h=a.firstChild;h;)h.nodeType===Node.ELEMENT_NODE&&(m=h,b(m,d)),h=h.nextSibling}function f(a,d,b){this.key=a;this.name=d;this.family=b;this.requires={}}function n(a,d,b){var c=a+'"'+d,h=b[c];h||(h=b[c]= +new f(c,a,d));return h}function p(a,d,b){var c,h,m,e,l,f=0;c=a.getAttributeNS(v,"name");e=a.getAttributeNS(v,"family");c&&e&&(d=n(c,e,b));if(d){if(c=K[a.localName])if(m=c[a.namespaceURI])f=m.length;for(c=0;c<f;c+=1)if(e=m[c],h=e.ns,l=e.localname,h=a.getAttributeNS(h,l))e=e.keyname,e=n(h,e,b),d.requires[e.key]=e}for(a=a.firstElementChild;a;)p(a,d,b),a=a.nextElementSibling;return b}function r(a,d){var b=d[a.family];b||(b=d[a.family]={});b[a.name]=1;Object.keys(a.requires).forEach(function(b){r(a.requires[b], +d)})}function q(a,d){var b=p(a,null,{});Object.keys(b).forEach(function(a){a=b[a];var c=d[a.family];c&&c.hasOwnProperty(a.name)&&r(a,d)})}function e(a,d){function b(d){(d=m.getAttributeNS(v,d))&&(a[d]=!0)}var c=["font-name","font-name-asian","font-name-complex"],h,m;for(h=d&&d.firstElementChild;h;)m=h,c.forEach(b),e(a,m),h=h.nextElementSibling}function l(a,d){function b(a){var c=m.getAttributeNS(v,a);c&&d.hasOwnProperty(c)&&m.setAttributeNS(v,"style:"+a,d[c])}var c=["font-name","font-name-asian", +"font-name-complex"],h,m;for(h=a&&a.firstElementChild;h;)m=h,c.forEach(b),l(m,d),h=h.nextElementSibling}var a=odf.Namespaces.chartns,d=odf.Namespaces.dbns,m=odf.Namespaces.dr3dns,h=odf.Namespaces.drawns,y=odf.Namespaces.formns,x=odf.Namespaces.numberns,z=odf.Namespaces.officens,w=odf.Namespaces.presentationns,v=odf.Namespaces.stylens,u=odf.Namespaces.tablens,t=odf.Namespaces.textns,A={"urn:oasis:names:tc:opendocument:xmlns:chart:1.0":"chart:","urn:oasis:names:tc:opendocument:xmlns:database:1.0":"db:", +"urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0":"dr3d:","urn:oasis:names:tc:opendocument:xmlns:drawing:1.0":"draw:","urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0":"fo:","urn:oasis:names:tc:opendocument:xmlns:form:1.0":"form:","urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0":"number:","urn:oasis:names:tc:opendocument:xmlns:office:1.0":"office:","urn:oasis:names:tc:opendocument:xmlns:presentation:1.0":"presentation:","urn:oasis:names:tc:opendocument:xmlns:style:1.0":"style:","urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0":"svg:", +"urn:oasis:names:tc:opendocument:xmlns:table:1.0":"table:","urn:oasis:names:tc:opendocument:xmlns:text:1.0":"chart:","http://www.w3.org/XML/1998/namespace":"xml:"},I={text:[{ens:v,en:"tab-stop",ans:v,a:"leader-text-style"},{ens:v,en:"drop-cap",ans:v,a:"style-name"},{ens:t,en:"notes-configuration",ans:t,a:"citation-body-style-name"},{ens:t,en:"notes-configuration",ans:t,a:"citation-style-name"},{ens:t,en:"a",ans:t,a:"style-name"},{ens:t,en:"alphabetical-index",ans:t,a:"style-name"},{ens:t,en:"linenumbering-configuration", +ans:t,a:"style-name"},{ens:t,en:"list-level-style-number",ans:t,a:"style-name"},{ens:t,en:"ruby-text",ans:t,a:"style-name"},{ens:t,en:"span",ans:t,a:"style-name"},{ens:t,en:"a",ans:t,a:"visited-style-name"},{ens:v,en:"text-properties",ans:v,a:"text-line-through-text-style"},{ens:t,en:"alphabetical-index-source",ans:t,a:"main-entry-style-name"},{ens:t,en:"index-entry-bibliography",ans:t,a:"style-name"},{ens:t,en:"index-entry-chapter",ans:t,a:"style-name"},{ens:t,en:"index-entry-link-end",ans:t,a:"style-name"}, +{ens:t,en:"index-entry-link-start",ans:t,a:"style-name"},{ens:t,en:"index-entry-page-number",ans:t,a:"style-name"},{ens:t,en:"index-entry-span",ans:t,a:"style-name"},{ens:t,en:"index-entry-tab-stop",ans:t,a:"style-name"},{ens:t,en:"index-entry-text",ans:t,a:"style-name"},{ens:t,en:"index-title-template",ans:t,a:"style-name"},{ens:t,en:"list-level-style-bullet",ans:t,a:"style-name"},{ens:t,en:"outline-level-style",ans:t,a:"style-name"}],paragraph:[{ens:h,en:"caption",ans:h,a:"text-style-name"},{ens:h, +en:"circle",ans:h,a:"text-style-name"},{ens:h,en:"connector",ans:h,a:"text-style-name"},{ens:h,en:"control",ans:h,a:"text-style-name"},{ens:h,en:"custom-shape",ans:h,a:"text-style-name"},{ens:h,en:"ellipse",ans:h,a:"text-style-name"},{ens:h,en:"frame",ans:h,a:"text-style-name"},{ens:h,en:"line",ans:h,a:"text-style-name"},{ens:h,en:"measure",ans:h,a:"text-style-name"},{ens:h,en:"path",ans:h,a:"text-style-name"},{ens:h,en:"polygon",ans:h,a:"text-style-name"},{ens:h,en:"polyline",ans:h,a:"text-style-name"}, +{ens:h,en:"rect",ans:h,a:"text-style-name"},{ens:h,en:"regular-polygon",ans:h,a:"text-style-name"},{ens:z,en:"annotation",ans:h,a:"text-style-name"},{ens:y,en:"column",ans:y,a:"text-style-name"},{ens:v,en:"style",ans:v,a:"next-style-name"},{ens:u,en:"body",ans:u,a:"paragraph-style-name"},{ens:u,en:"even-columns",ans:u,a:"paragraph-style-name"},{ens:u,en:"even-rows",ans:u,a:"paragraph-style-name"},{ens:u,en:"first-column",ans:u,a:"paragraph-style-name"},{ens:u,en:"first-row",ans:u,a:"paragraph-style-name"}, +{ens:u,en:"last-column",ans:u,a:"paragraph-style-name"},{ens:u,en:"last-row",ans:u,a:"paragraph-style-name"},{ens:u,en:"odd-columns",ans:u,a:"paragraph-style-name"},{ens:u,en:"odd-rows",ans:u,a:"paragraph-style-name"},{ens:t,en:"notes-configuration",ans:t,a:"default-style-name"},{ens:t,en:"alphabetical-index-entry-template",ans:t,a:"style-name"},{ens:t,en:"bibliography-entry-template",ans:t,a:"style-name"},{ens:t,en:"h",ans:t,a:"style-name"},{ens:t,en:"illustration-index-entry-template",ans:t,a:"style-name"}, +{ens:t,en:"index-source-style",ans:t,a:"style-name"},{ens:t,en:"object-index-entry-template",ans:t,a:"style-name"},{ens:t,en:"p",ans:t,a:"style-name"},{ens:t,en:"table-index-entry-template",ans:t,a:"style-name"},{ens:t,en:"table-of-content-entry-template",ans:t,a:"style-name"},{ens:t,en:"table-index-entry-template",ans:t,a:"style-name"},{ens:t,en:"user-index-entry-template",ans:t,a:"style-name"},{ens:v,en:"page-layout-properties",ans:v,a:"register-truth-ref-style-name"}],chart:[{ens:a,en:"axis",ans:a, +a:"style-name"},{ens:a,en:"chart",ans:a,a:"style-name"},{ens:a,en:"data-label",ans:a,a:"style-name"},{ens:a,en:"data-point",ans:a,a:"style-name"},{ens:a,en:"equation",ans:a,a:"style-name"},{ens:a,en:"error-indicator",ans:a,a:"style-name"},{ens:a,en:"floor",ans:a,a:"style-name"},{ens:a,en:"footer",ans:a,a:"style-name"},{ens:a,en:"grid",ans:a,a:"style-name"},{ens:a,en:"legend",ans:a,a:"style-name"},{ens:a,en:"mean-value",ans:a,a:"style-name"},{ens:a,en:"plot-area",ans:a,a:"style-name"},{ens:a,en:"regression-curve", +ans:a,a:"style-name"},{ens:a,en:"series",ans:a,a:"style-name"},{ens:a,en:"stock-gain-marker",ans:a,a:"style-name"},{ens:a,en:"stock-loss-marker",ans:a,a:"style-name"},{ens:a,en:"stock-range-line",ans:a,a:"style-name"},{ens:a,en:"subtitle",ans:a,a:"style-name"},{ens:a,en:"title",ans:a,a:"style-name"},{ens:a,en:"wall",ans:a,a:"style-name"}],section:[{ens:t,en:"alphabetical-index",ans:t,a:"style-name"},{ens:t,en:"bibliography",ans:t,a:"style-name"},{ens:t,en:"illustration-index",ans:t,a:"style-name"}, +{ens:t,en:"index-title",ans:t,a:"style-name"},{ens:t,en:"object-index",ans:t,a:"style-name"},{ens:t,en:"section",ans:t,a:"style-name"},{ens:t,en:"table-of-content",ans:t,a:"style-name"},{ens:t,en:"table-index",ans:t,a:"style-name"},{ens:t,en:"user-index",ans:t,a:"style-name"}],ruby:[{ens:t,en:"ruby",ans:t,a:"style-name"}],table:[{ens:d,en:"query",ans:d,a:"style-name"},{ens:d,en:"table-representation",ans:d,a:"style-name"},{ens:u,en:"background",ans:u,a:"style-name"},{ens:u,en:"table",ans:u,a:"style-name"}], +"table-column":[{ens:d,en:"column",ans:d,a:"style-name"},{ens:u,en:"table-column",ans:u,a:"style-name"}],"table-row":[{ens:d,en:"query",ans:d,a:"default-row-style-name"},{ens:d,en:"table-representation",ans:d,a:"default-row-style-name"},{ens:u,en:"table-row",ans:u,a:"style-name"}],"table-cell":[{ens:d,en:"column",ans:d,a:"default-cell-style-name"},{ens:u,en:"table-column",ans:u,a:"default-cell-style-name"},{ens:u,en:"table-row",ans:u,a:"default-cell-style-name"},{ens:u,en:"body",ans:u,a:"style-name"}, +{ens:u,en:"covered-table-cell",ans:u,a:"style-name"},{ens:u,en:"even-columns",ans:u,a:"style-name"},{ens:u,en:"covered-table-cell",ans:u,a:"style-name"},{ens:u,en:"even-columns",ans:u,a:"style-name"},{ens:u,en:"even-rows",ans:u,a:"style-name"},{ens:u,en:"first-column",ans:u,a:"style-name"},{ens:u,en:"first-row",ans:u,a:"style-name"},{ens:u,en:"last-column",ans:u,a:"style-name"},{ens:u,en:"last-row",ans:u,a:"style-name"},{ens:u,en:"odd-columns",ans:u,a:"style-name"},{ens:u,en:"odd-rows",ans:u,a:"style-name"}, +{ens:u,en:"table-cell",ans:u,a:"style-name"}],graphic:[{ens:m,en:"cube",ans:h,a:"style-name"},{ens:m,en:"extrude",ans:h,a:"style-name"},{ens:m,en:"rotate",ans:h,a:"style-name"},{ens:m,en:"scene",ans:h,a:"style-name"},{ens:m,en:"sphere",ans:h,a:"style-name"},{ens:h,en:"caption",ans:h,a:"style-name"},{ens:h,en:"circle",ans:h,a:"style-name"},{ens:h,en:"connector",ans:h,a:"style-name"},{ens:h,en:"control",ans:h,a:"style-name"},{ens:h,en:"custom-shape",ans:h,a:"style-name"},{ens:h,en:"ellipse",ans:h,a:"style-name"}, +{ens:h,en:"frame",ans:h,a:"style-name"},{ens:h,en:"g",ans:h,a:"style-name"},{ens:h,en:"line",ans:h,a:"style-name"},{ens:h,en:"measure",ans:h,a:"style-name"},{ens:h,en:"page-thumbnail",ans:h,a:"style-name"},{ens:h,en:"path",ans:h,a:"style-name"},{ens:h,en:"polygon",ans:h,a:"style-name"},{ens:h,en:"polyline",ans:h,a:"style-name"},{ens:h,en:"rect",ans:h,a:"style-name"},{ens:h,en:"regular-polygon",ans:h,a:"style-name"},{ens:z,en:"annotation",ans:h,a:"style-name"}],presentation:[{ens:m,en:"cube",ans:w, +a:"style-name"},{ens:m,en:"extrude",ans:w,a:"style-name"},{ens:m,en:"rotate",ans:w,a:"style-name"},{ens:m,en:"scene",ans:w,a:"style-name"},{ens:m,en:"sphere",ans:w,a:"style-name"},{ens:h,en:"caption",ans:w,a:"style-name"},{ens:h,en:"circle",ans:w,a:"style-name"},{ens:h,en:"connector",ans:w,a:"style-name"},{ens:h,en:"control",ans:w,a:"style-name"},{ens:h,en:"custom-shape",ans:w,a:"style-name"},{ens:h,en:"ellipse",ans:w,a:"style-name"},{ens:h,en:"frame",ans:w,a:"style-name"},{ens:h,en:"g",ans:w,a:"style-name"}, +{ens:h,en:"line",ans:w,a:"style-name"},{ens:h,en:"measure",ans:w,a:"style-name"},{ens:h,en:"page-thumbnail",ans:w,a:"style-name"},{ens:h,en:"path",ans:w,a:"style-name"},{ens:h,en:"polygon",ans:w,a:"style-name"},{ens:h,en:"polyline",ans:w,a:"style-name"},{ens:h,en:"rect",ans:w,a:"style-name"},{ens:h,en:"regular-polygon",ans:w,a:"style-name"},{ens:z,en:"annotation",ans:w,a:"style-name"}],"drawing-page":[{ens:h,en:"page",ans:h,a:"style-name"},{ens:w,en:"notes",ans:h,a:"style-name"},{ens:v,en:"handout-master", +ans:h,a:"style-name"},{ens:v,en:"master-page",ans:h,a:"style-name"}],"list-style":[{ens:t,en:"list",ans:t,a:"style-name"},{ens:t,en:"numbered-paragraph",ans:t,a:"style-name"},{ens:t,en:"list-item",ans:t,a:"style-override"},{ens:v,en:"style",ans:v,a:"list-style-name"}],data:[{ens:v,en:"style",ans:v,a:"data-style-name"},{ens:v,en:"style",ans:v,a:"percentage-data-style-name"},{ens:w,en:"date-time-decl",ans:v,a:"data-style-name"},{ens:t,en:"creation-date",ans:v,a:"data-style-name"},{ens:t,en:"creation-time", +ans:v,a:"data-style-name"},{ens:t,en:"database-display",ans:v,a:"data-style-name"},{ens:t,en:"date",ans:v,a:"data-style-name"},{ens:t,en:"editing-duration",ans:v,a:"data-style-name"},{ens:t,en:"expression",ans:v,a:"data-style-name"},{ens:t,en:"meta-field",ans:v,a:"data-style-name"},{ens:t,en:"modification-date",ans:v,a:"data-style-name"},{ens:t,en:"modification-time",ans:v,a:"data-style-name"},{ens:t,en:"print-date",ans:v,a:"data-style-name"},{ens:t,en:"print-time",ans:v,a:"data-style-name"},{ens:t, +en:"table-formula",ans:v,a:"data-style-name"},{ens:t,en:"time",ans:v,a:"data-style-name"},{ens:t,en:"user-defined",ans:v,a:"data-style-name"},{ens:t,en:"user-field-get",ans:v,a:"data-style-name"},{ens:t,en:"user-field-input",ans:v,a:"data-style-name"},{ens:t,en:"variable-get",ans:v,a:"data-style-name"},{ens:t,en:"variable-input",ans:v,a:"data-style-name"},{ens:t,en:"variable-set",ans:v,a:"data-style-name"}],"page-layout":[{ens:w,en:"notes",ans:v,a:"page-layout-name"},{ens:v,en:"handout-master",ans:v, +a:"page-layout-name"},{ens:v,en:"master-page",ans:v,a:"page-layout-name"}]},K,L=xmldom.XPath;this.collectUsedFontFaces=e;this.changeFontFaceNames=l;this.UsedStyleList=function(a,d){var c={};this.uses=function(a){var d=a.localName,b=a.getAttributeNS(h,"name")||a.getAttributeNS(v,"name");a="style"===d?a.getAttributeNS(v,"family"):a.namespaceURI===x?"data":d;return(a=c[a])?0<a[b]:!1};b(a,c);d&&q(d,c)};this.getStyleName=function(a,d){var b,c,h=K[d.localName];if(h&&(h=h[d.namespaceURI]))for(c=0;c<h.length;c+= +1)if(h[c].keyname===a&&(h=h[c],d.hasAttributeNS(h.ns,h.localname))){b=d.getAttributeNS(h.ns,h.localname);break}return b};this.hasDerivedStyles=function(a,d,b){var c=b.getAttributeNS(v,"name");b=b.getAttributeNS(v,"family");return L.getODFElementsWithXPath(a,'//style:*[@style:parent-style-name="'+c+'"][@style:family="'+b+'"]',d).length?!0:!1};this.prefixStyleNames=function(a,d,b){var c;if(a){for(c=a.firstChild;c;){if(c.nodeType===Node.ELEMENT_NODE){var m=c,e=d,l=m.getAttributeNS(h,"name"),f=void 0; +l?f=h:(l=m.getAttributeNS(v,"name"))&&(f=v);f&&m.setAttributeNS(f,A[f]+"name",e+l)}c=c.nextSibling}g(a,d);b&&g(b,d)}};this.removePrefixFromStyleNames=function(a,d,b){var c=new RegExp("^"+d);if(a){for(d=a.firstChild;d;){if(d.nodeType===Node.ELEMENT_NODE){var m=d,e=c,l=m.getAttributeNS(h,"name"),f=void 0;l?f=h:(l=m.getAttributeNS(v,"name"))&&(f=v);f&&(l=l.replace(e,""),m.setAttributeNS(f,A[f]+"name",l))}d=d.nextSibling}k(a,c);b&&k(b,c)}};this.determineStylesForNode=c;K=function(){var a,d,b,c,h,m={}, +e,l,f,n;for(b in I)if(I.hasOwnProperty(b))for(c=I[b],d=c.length,a=0;a<d;a+=1)h=c[a],f=h.en,n=h.ens,m.hasOwnProperty(f)?e=m[f]:m[f]=e={},e.hasOwnProperty(n)?l=e[n]:e[n]=l=[],l.push({ns:h.ans,localname:h.a,keyname:b});return m}()};"function"!==typeof Object.create&&(Object.create=function(g){var k=function(){};k.prototype=g;return new k}); +xmldom.LSSerializer=function(){function g(b){var c=b||{},g=function(b){var a={},d;for(d in b)b.hasOwnProperty(d)&&(a[b[d]]=d);return a}(b),k=[c],q=[g],e=0;this.push=function(){e+=1;c=k[e]=Object.create(c);g=q[e]=Object.create(g)};this.pop=function(){k.pop();q.pop();--e;c=k[e];g=q[e]};this.getLocalNamespaceDefinitions=function(){return g};this.getQName=function(b){var a=b.namespaceURI,d=0,m;if(!a)return b.localName;if(m=g[a])return m+":"+b.localName;do{m||!b.prefix?(m="ns"+d,d+=1):m=b.prefix;if(c[m]=== +a)break;if(!c[m]){c[m]=a;g[a]=m;break}m=null}while(null===m);return m+":"+b.localName}}function k(b){return b.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/'/g,"'").replace(/"/g,""")}function c(f,n){var g="",r=b.filter?b.filter.acceptNode(n):NodeFilter.FILTER_ACCEPT,q;if(r===NodeFilter.FILTER_ACCEPT&&n.nodeType===Node.ELEMENT_NODE){f.push();q=f.getQName(n);var e,l=n.attributes,a,d,m,h="",y;e="<"+q;a=l.length;for(d=0;d<a;d+=1)m=l.item(d),"http://www.w3.org/2000/xmlns/"!== +m.namespaceURI&&(y=b.filter?b.filter.acceptNode(m):NodeFilter.FILTER_ACCEPT,y===NodeFilter.FILTER_ACCEPT&&(y=f.getQName(m),m="string"===typeof m.value?k(m.value):m.value,h+=" "+(y+'="'+m+'"')));a=f.getLocalNamespaceDefinitions();for(d in a)a.hasOwnProperty(d)&&((l=a[d])?"xmlns"!==l&&(e+=" xmlns:"+a[d]+'="'+d+'"'):e+=' xmlns="'+d+'"');g+=e+(h+">")}if(r===NodeFilter.FILTER_ACCEPT||r===NodeFilter.FILTER_SKIP){for(r=n.firstChild;r;)g+=c(f,r),r=r.nextSibling;n.nodeValue&&(g+=k(n.nodeValue))}q&&(g+="</"+ +q+">",f.pop());return g}var b=this;this.filter=null;this.writeToString=function(b,n){if(!b)return"";var k=new g(n);return c(k,b)}}; +(function(){function g(b){var a,d=r.length;for(a=0;a<d;a+=1)if("urn:oasis:names:tc:opendocument:xmlns:office:1.0"===b.namespaceURI&&b.localName===r[a])return a;return-1}function k(b,a){var d=new f.UsedStyleList(b,a),c=new odf.OdfNodeFilter;this.acceptNode=function(b){var e=c.acceptNode(b);e===NodeFilter.FILTER_ACCEPT&&b.parentNode===a&&b.nodeType===Node.ELEMENT_NODE&&(e=d.uses(b)?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_REJECT);return e}}function c(b,a){var d=new k(b,a);this.acceptNode=function(a){var b= +d.acceptNode(a);b!==NodeFilter.FILTER_ACCEPT||!a.parentNode||a.parentNode.namespaceURI!==odf.Namespaces.textns||"s"!==a.parentNode.localName&&"tab"!==a.parentNode.localName||(b=NodeFilter.FILTER_REJECT);return b}}function b(b,a){if(a){var d=g(a),c,h=b.firstChild;if(-1!==d){for(;h;){c=g(h);if(-1!==c&&c>d)break;h=h.nextSibling}b.insertBefore(a,h)}}}var f=new odf.StyleInfo,n=core.DomUtils,p=odf.Namespaces.stylens,r="meta settings scripts font-face-decls styles automatic-styles master-styles body".split(" "), +q=Date.now()+"_webodf_",e=new core.Base64;odf.ODFElement=function(){};odf.ODFDocumentElement=function(){};odf.ODFDocumentElement.prototype=new odf.ODFElement;odf.ODFDocumentElement.prototype.constructor=odf.ODFDocumentElement;odf.ODFDocumentElement.prototype.fontFaceDecls=null;odf.ODFDocumentElement.prototype.manifest=null;odf.ODFDocumentElement.prototype.settings=null;odf.ODFDocumentElement.namespaceURI="urn:oasis:names:tc:opendocument:xmlns:office:1.0";odf.ODFDocumentElement.localName="document"; +odf.AnnotationElement=function(){};odf.OdfPart=function(b,a,d,c){var h=this;this.size=0;this.type=null;this.name=b;this.container=d;this.url=null;this.mimetype=a;this.onstatereadychange=this.document=null;this.EMPTY=0;this.LOADING=1;this.DONE=2;this.state=this.EMPTY;this.data="";this.load=function(){null!==c&&(this.mimetype=a,c.loadAsDataURL(b,a,function(a,d){a&&runtime.log(a);h.url=d;if(h.onchange)h.onchange(h);if(h.onstatereadychange)h.onstatereadychange(h)}))}};odf.OdfPart.prototype.load=function(){}; +odf.OdfPart.prototype.getUrl=function(){return this.data?"data:;base64,"+e.toBase64(this.data):null};odf.OdfContainer=function a(d,m){function h(a){for(var d=a.firstChild,b;d;)b=d.nextSibling,d.nodeType===Node.ELEMENT_NODE?h(d):d.nodeType===Node.PROCESSING_INSTRUCTION_NODE&&a.removeChild(d),d=b}function g(a){var d={},b,c,h=a.ownerDocument.createNodeIterator(a,NodeFilter.SHOW_ELEMENT,null,!1);for(a=h.nextNode();a;)"urn:oasis:names:tc:opendocument:xmlns:office:1.0"===a.namespaceURI&&("annotation"=== +a.localName?(b=a.getAttributeNS("urn:oasis:names:tc:opendocument:xmlns:office:1.0","name"))&&(d.hasOwnProperty(b)?runtime.log("Warning: annotation name used more than once with <office:annotation/>: '"+b+"'"):d[b]=a):"annotation-end"===a.localName&&((b=a.getAttributeNS("urn:oasis:names:tc:opendocument:xmlns:office:1.0","name"))?d.hasOwnProperty(b)?(c=d[b],c.annotationEndElement?runtime.log("Warning: annotation name used more than once with <office:annotation-end/>: '"+b+"'"):c.annotationEndElement= +a):runtime.log("Warning: annotation end without an annotation start, name: '"+b+"'"):runtime.log("Warning: annotation end without a name found"))),a=h.nextNode()}function r(a,d){for(var b=a&&a.firstChild;b;)b.nodeType===Node.ELEMENT_NODE&&b.setAttributeNS("urn:webodf:names:scope","scope",d),b=b.nextSibling}function z(a,d){for(var b=B.rootElement.meta,b=b&&b.firstChild;b&&(b.namespaceURI!==a||b.localName!==d);)b=b.nextSibling;for(b=b&&b.firstChild;b&&b.nodeType!==Node.TEXT_NODE;)b=b.nextSibling;return b? +b.data:null}function w(a){var d={},b;for(a=a.firstChild;a;)a.nodeType===Node.ELEMENT_NODE&&a.namespaceURI===p&&"font-face"===a.localName&&(b=a.getAttributeNS(p,"name"),d[b]=a),a=a.nextSibling;return d}function v(a,d){var b=null,c,h,e;if(a)for(b=a.cloneNode(!0),c=b.firstElementChild;c;)h=c.nextElementSibling,(e=c.getAttributeNS("urn:webodf:names:scope","scope"))&&e!==d&&b.removeChild(c),c=h;return b}function u(a,d){var b,c,h,e=null,m={};if(a)for(d.forEach(function(a){f.collectUsedFontFaces(m,a)}), +e=a.cloneNode(!0),b=e.firstElementChild;b;)c=b.nextElementSibling,h=b.getAttributeNS(p,"name"),m[h]||e.removeChild(b),b=c;return e}function t(a){var d=B.rootElement.ownerDocument,b;if(a){h(a.documentElement);try{b=d.importNode(a.documentElement,!0)}catch(c){}}return b}function A(a){B.state=a;if(B.onchange)B.onchange(B);if(B.onstatereadychange)B.onstatereadychange(B)}function I(a){Q=null;B.rootElement=a;a.fontFaceDecls=n.getDirectChild(a,"urn:oasis:names:tc:opendocument:xmlns:office:1.0","font-face-decls"); +a.styles=n.getDirectChild(a,"urn:oasis:names:tc:opendocument:xmlns:office:1.0","styles");a.automaticStyles=n.getDirectChild(a,"urn:oasis:names:tc:opendocument:xmlns:office:1.0","automatic-styles");a.masterStyles=n.getDirectChild(a,"urn:oasis:names:tc:opendocument:xmlns:office:1.0","master-styles");a.body=n.getDirectChild(a,"urn:oasis:names:tc:opendocument:xmlns:office:1.0","body");a.meta=n.getDirectChild(a,"urn:oasis:names:tc:opendocument:xmlns:office:1.0","meta");a.settings=n.getDirectChild(a,"urn:oasis:names:tc:opendocument:xmlns:office:1.0", +"settings");a.scripts=n.getDirectChild(a,"urn:oasis:names:tc:opendocument:xmlns:office:1.0","scripts");g(a)}function K(d){var c=t(d),h=B.rootElement,e;c&&"document-styles"===c.localName&&"urn:oasis:names:tc:opendocument:xmlns:office:1.0"===c.namespaceURI?(h.fontFaceDecls=n.getDirectChild(c,"urn:oasis:names:tc:opendocument:xmlns:office:1.0","font-face-decls"),b(h,h.fontFaceDecls),e=n.getDirectChild(c,"urn:oasis:names:tc:opendocument:xmlns:office:1.0","styles"),h.styles=e||d.createElementNS("urn:oasis:names:tc:opendocument:xmlns:office:1.0", +"styles"),b(h,h.styles),e=n.getDirectChild(c,"urn:oasis:names:tc:opendocument:xmlns:office:1.0","automatic-styles"),h.automaticStyles=e||d.createElementNS("urn:oasis:names:tc:opendocument:xmlns:office:1.0","automatic-styles"),r(h.automaticStyles,"document-styles"),b(h,h.automaticStyles),c=n.getDirectChild(c,"urn:oasis:names:tc:opendocument:xmlns:office:1.0","master-styles"),h.masterStyles=c||d.createElementNS("urn:oasis:names:tc:opendocument:xmlns:office:1.0","master-styles"),b(h,h.masterStyles), +f.prefixStyleNames(h.automaticStyles,q,h.masterStyles)):A(a.INVALID)}function L(d){d=t(d);var c,h,e,m;if(d&&"document-content"===d.localName&&"urn:oasis:names:tc:opendocument:xmlns:office:1.0"===d.namespaceURI){c=B.rootElement;e=n.getDirectChild(d,"urn:oasis:names:tc:opendocument:xmlns:office:1.0","font-face-decls");if(c.fontFaceDecls&&e){m=c.fontFaceDecls;var g,k,O,q,D={};h=w(m);q=w(e);for(e=e.firstElementChild;e;){g=e.nextElementSibling;if(e.namespaceURI===p&&"font-face"===e.localName)if(k=e.getAttributeNS(p, +"name"),h.hasOwnProperty(k)){if(!e.isEqualNode(h[k])){O=k;for(var y=h,E=q,u=0,W=void 0,W=O=O.replace(/\d+$/,"");y.hasOwnProperty(W)||E.hasOwnProperty(W);)u+=1,W=O+u;O=W;e.setAttributeNS(p,"style:name",O);m.appendChild(e);h[O]=e;delete q[k];D[k]=O}}else m.appendChild(e),h[k]=e,delete q[k];e=g}m=D}else e&&(c.fontFaceDecls=e,b(c,e));h=n.getDirectChild(d,"urn:oasis:names:tc:opendocument:xmlns:office:1.0","automatic-styles");r(h,"document-content");m&&f.changeFontFaceNames(h,m);if(c.automaticStyles&&h)for(m= +h.firstChild;m;)c.automaticStyles.appendChild(m),m=h.firstChild;else h&&(c.automaticStyles=h,b(c,h));d=n.getDirectChild(d,"urn:oasis:names:tc:opendocument:xmlns:office:1.0","body");if(null===d)throw"<office:body/> tag is mising.";c.body=d;b(c,c.body)}else A(a.INVALID)}function E(a){a=t(a);var d;a&&"document-meta"===a.localName&&"urn:oasis:names:tc:opendocument:xmlns:office:1.0"===a.namespaceURI&&(d=B.rootElement,d.meta=n.getDirectChild(a,"urn:oasis:names:tc:opendocument:xmlns:office:1.0","meta"), +b(d,d.meta))}function N(a){a=t(a);var d;a&&"document-settings"===a.localName&&"urn:oasis:names:tc:opendocument:xmlns:office:1.0"===a.namespaceURI&&(d=B.rootElement,d.settings=n.getDirectChild(a,"urn:oasis:names:tc:opendocument:xmlns:office:1.0","settings"),b(d,d.settings))}function O(a){a=t(a);var d;if(a&&"manifest"===a.localName&&"urn:oasis:names:tc:opendocument:xmlns:manifest:1.0"===a.namespaceURI)for(d=B.rootElement,d.manifest=a,a=d.manifest.firstElementChild;a;)"file-entry"===a.localName&&"urn:oasis:names:tc:opendocument:xmlns:manifest:1.0"=== +a.namespaceURI&&(M[a.getAttributeNS("urn:oasis:names:tc:opendocument:xmlns:manifest:1.0","full-path")]=a.getAttributeNS("urn:oasis:names:tc:opendocument:xmlns:manifest:1.0","media-type")),a=a.nextElementSibling}function D(a,d,b){a=n.getElementsByTagName(a,d);var c;for(c=0;c<a.length;c+=1)d=a[c],b.hasOwnProperty(d.namespaceURI)||d.parentNode.removeChild(d)}function V(a){D(a,"script",{"urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0":!0,"urn:oasis:names:tc:opendocument:xmlns:office:1.0":!0,"urn:oasis:names:tc:opendocument:xmlns:table:1.0":!0, +"urn:oasis:names:tc:opendocument:xmlns:text:1.0":!0,"urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0":!0});D(a,"style",{"urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0":!0,"urn:oasis:names:tc:opendocument:xmlns:drawing:1.0":!0,"urn:oasis:names:tc:opendocument:xmlns:style:1.0":!0})}function W(a){var d=a.firstElementChild,b=[],c,h,e,m=a.attributes,f=m.length;for(c=0;c<f;c+=1)e=m.item(c),h=e.localName.substr(0,2).toLowerCase(),null===e.namespaceURI&&"on"===h&&b.push(e);f=b.length;for(c= +0;c<f;c+=1)a.removeAttributeNode(b[c]);for(;d;)W(d),d=d.nextElementSibling}function J(d){var b=d.shift();b?Y.loadAsDOM(b.path,function(c,h){h&&(V(h),W(h.documentElement));b.handler(h);B.state===a.INVALID?c?runtime.log("ERROR: Unable to load "+b.path+" - "+c):runtime.log("ERROR: Unable to load "+b.path):(c&&runtime.log("DEBUG: Unable to load "+b.path+" - "+c),J(d))}):(g(B.rootElement),A(a.DONE))}function R(a){var d="";odf.Namespaces.forEachPrefix(function(a,b){d+=" xmlns:"+a+'="'+b+'"'});return'<?xml version="1.0" encoding="UTF-8"?><office:'+ +a+" "+d+' office:version="1.2">'}function P(){var a=new xmldom.LSSerializer,d=R("document-meta");a.filter=new odf.OdfNodeFilter;d+=a.writeToString(B.rootElement.meta,odf.Namespaces.namespaceMap);return d+"</office:document-meta>"}function aa(a,d){var b=document.createElementNS("urn:oasis:names:tc:opendocument:xmlns:manifest:1.0","manifest:file-entry");b.setAttributeNS("urn:oasis:names:tc:opendocument:xmlns:manifest:1.0","manifest:full-path",a);b.setAttributeNS("urn:oasis:names:tc:opendocument:xmlns:manifest:1.0", +"manifest:media-type",d);return b}function S(){var a=runtime.parseXML('<manifest:manifest xmlns:manifest="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0" manifest:version="1.2"></manifest:manifest>'),d=a.documentElement,b=new xmldom.LSSerializer,c;for(c in M)M.hasOwnProperty(c)&&d.appendChild(aa(c,M[c]));b.filter=new odf.OdfNodeFilter;return'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n'+b.writeToString(a,odf.Namespaces.namespaceMap)}function fa(){var a,d,b,c=odf.Namespaces.namespaceMap, +h=new xmldom.LSSerializer,e=R("document-styles");d=v(B.rootElement.automaticStyles,"document-styles");b=B.rootElement.masterStyles.cloneNode(!0);a=u(B.rootElement.fontFaceDecls,[b,B.rootElement.styles,d]);f.removePrefixFromStyleNames(d,q,b);h.filter=new k(b,d);e+=h.writeToString(a,c);e+=h.writeToString(B.rootElement.styles,c);e+=h.writeToString(d,c);e+=h.writeToString(b,c);return e+"</office:document-styles>"}function ha(){var a,d,b=odf.Namespaces.namespaceMap,h=new xmldom.LSSerializer,e=R("document-content"); +d=v(B.rootElement.automaticStyles,"document-content");a=u(B.rootElement.fontFaceDecls,[d]);h.filter=new c(B.rootElement.body,d);e+=h.writeToString(a,b);e+=h.writeToString(d,b);e+=h.writeToString(B.rootElement.body,b);return e+"</office:document-content>"}function C(d,b){runtime.loadXML(d,function(d,c){if(d)b(d);else if(c){V(c);W(c.documentElement);var h=t(c);h&&"document"===h.localName&&"urn:oasis:names:tc:opendocument:xmlns:office:1.0"===h.namespaceURI?(I(h),A(a.DONE)):A(a.INVALID)}else b("No DOM was loaded.")})} +function Z(a,d){var c;c=B.rootElement;var h=c.meta;h||(c.meta=h=document.createElementNS("urn:oasis:names:tc:opendocument:xmlns:office:1.0","meta"),b(c,h));c=h;a&&n.mapKeyValObjOntoNode(c,a,odf.Namespaces.lookupNamespaceURI);d&&n.removeKeyElementsFromNode(c,d,odf.Namespaces.lookupNamespaceURI)}function ba(d,b){function c(a,d){var b;d||(d=a);b=document.createElementNS("urn:oasis:names:tc:opendocument:xmlns:office:1.0",d);f[a]=b;f.appendChild(b)}var h=new core.Zip("",null),e="application/vnd.oasis.opendocument."+ +d+(!0===b?"-template":""),m=runtime.byteArrayFromString(e,"utf8"),f=B.rootElement,g=document.createElementNS("urn:oasis:names:tc:opendocument:xmlns:office:1.0",d);h.save("mimetype",m,!1,new Date);c("meta");c("settings");c("scripts");c("fontFaceDecls","font-face-decls");c("styles");c("automaticStyles","automatic-styles");c("masterStyles","master-styles");c("body");f.body.appendChild(g);M["/"]=e;M["settings.xml"]="text/xml";M["meta.xml"]="text/xml";M["styles.xml"]="text/xml";M["content.xml"]="text/xml"; +A(a.DONE);return h}function U(){var a,d=new Date,b="";B.rootElement.settings&&B.rootElement.settings.firstElementChild&&(a=new xmldom.LSSerializer,b=R("document-settings"),a.filter=new odf.OdfNodeFilter,b+=a.writeToString(B.rootElement.settings,odf.Namespaces.namespaceMap),b+="</office:document-settings>");(a=b)?(a=runtime.byteArrayFromString(a,"utf8"),Y.save("settings.xml",a,!0,d)):Y.remove("settings.xml");b=runtime.getWindow();a="WebODF/"+webodf.Version;b&&(a=a+" "+b.navigator.userAgent);Z({"meta:generator":a}, +null);a=runtime.byteArrayFromString(P(),"utf8");Y.save("meta.xml",a,!0,d);a=runtime.byteArrayFromString(fa(),"utf8");Y.save("styles.xml",a,!0,d);a=runtime.byteArrayFromString(ha(),"utf8");Y.save("content.xml",a,!0,d);a=runtime.byteArrayFromString(S(),"utf8");Y.save("META-INF/manifest.xml",a,!0,d)}function ga(a,d){U();Y.writeAs(a,function(a){d(a)})}var B=this,Y,M={},Q,F="";this.onstatereadychange=m;this.state=this.onchange=null;this.getMetadata=z;this.setRootElement=I;this.getContentElement=function(){var a; +Q||(a=B.rootElement.body,Q=n.getDirectChild(a,"urn:oasis:names:tc:opendocument:xmlns:office:1.0","text")||n.getDirectChild(a,"urn:oasis:names:tc:opendocument:xmlns:office:1.0","presentation")||n.getDirectChild(a,"urn:oasis:names:tc:opendocument:xmlns:office:1.0","spreadsheet"));if(!Q)throw"Could not find content element in <office:body/>.";return Q};this.getDocumentType=function(){var a=B.getContentElement();return a&&a.localName};this.isTemplate=function(){return"-template"===M["/"].substr(-9)}; +this.setIsTemplate=function(a){var d=M["/"],b="-template"===d.substr(-9);a!==b&&(d=a?d+"-template":d.substr(0,d.length-9),M["/"]=d,a=runtime.byteArrayFromString(d,"utf8"),Y.save("mimetype",a,!1,new Date))};this.getPart=function(a){return new odf.OdfPart(a,M[a],B,Y)};this.getPartData=function(a,d){Y.load(a,d)};this.setMetadata=Z;this.incrementEditingCycles=function(){var a=z(odf.Namespaces.metans,"editing-cycles"),a=a?parseInt(a,10):0;isNaN(a)&&(a=0);Z({"meta:editing-cycles":a+1},null);return a+1}; +this.createByteArray=function(a,d){U();Y.createByteArray(a,d)};this.saveAs=ga;this.save=function(a){ga(F,a)};this.getUrl=function(){return F};this.setBlob=function(a,d,b){b=e.convertBase64ToByteArray(b);Y.save(a,b,!1,new Date);M.hasOwnProperty(a)&&runtime.log(a+" has been overwritten.");M[a]=d};this.removeBlob=function(a){var d=Y.remove(a);runtime.assert(d,"file is not found: "+a);delete M[a]};this.state=a.LOADING;this.rootElement=function(a){var d=document.createElementNS(a.namespaceURI,a.localName), +b;a=new a.Type;for(b in a)a.hasOwnProperty(b)&&(d[b]=a[b]);return d}({Type:odf.ODFDocumentElement,namespaceURI:odf.ODFDocumentElement.namespaceURI,localName:odf.ODFDocumentElement.localName});d===odf.OdfContainer.DocumentType.TEXT?Y=ba("text"):d===odf.OdfContainer.DocumentType.TEXT_TEMPLATE?Y=ba("text",!0):d===odf.OdfContainer.DocumentType.PRESENTATION?Y=ba("presentation"):d===odf.OdfContainer.DocumentType.PRESENTATION_TEMPLATE?Y=ba("presentation",!0):d===odf.OdfContainer.DocumentType.SPREADSHEET? +Y=ba("spreadsheet"):d===odf.OdfContainer.DocumentType.SPREADSHEET_TEMPLATE?Y=ba("spreadsheet",!0):(F=d,Y=new core.Zip(F,function(d,b){Y=b;d?C(F,function(b){d&&(Y.error=d+"\n"+b,A(a.INVALID))}):J([{path:"styles.xml",handler:K},{path:"content.xml",handler:L},{path:"meta.xml",handler:E},{path:"settings.xml",handler:N},{path:"META-INF/manifest.xml",handler:O}])}))};odf.OdfContainer.EMPTY=0;odf.OdfContainer.LOADING=1;odf.OdfContainer.DONE=2;odf.OdfContainer.INVALID=3;odf.OdfContainer.SAVING=4;odf.OdfContainer.MODIFIED= +5;odf.OdfContainer.getContainer=function(a){return new odf.OdfContainer(a,null)}})();odf.OdfContainer.DocumentType={TEXT:1,TEXT_TEMPLATE:2,PRESENTATION:3,PRESENTATION_TEMPLATE:4,SPREADSHEET:5,SPREADSHEET_TEMPLATE:6};gui.AnnotatableCanvas=function(){};gui.AnnotatableCanvas.prototype.refreshSize=function(){};gui.AnnotatableCanvas.prototype.getZoomLevel=function(){};gui.AnnotatableCanvas.prototype.getSizer=function(){}; +gui.AnnotationViewManager=function(g,k,c,b){function f(d){var b=d.annotationEndElement,c=l.createRange(),e=d.getAttributeNS(odf.Namespaces.officens,"name");b&&(c.setStart(d,d.childNodes.length),c.setEnd(b,0),d=a.getTextNodes(c,!1),d.forEach(function(a){var d;a:{for(d=a.parentNode;d.namespaceURI!==odf.Namespaces.officens||"body"!==d.localName;){if("http://www.w3.org/1999/xhtml"===d.namespaceURI&&"webodf-annotationHighlight"===d.className&&d.getAttribute("annotation")===e){d=!0;break a}d=d.parentNode}d= +!1}d||(d=l.createElement("span"),d.className="webodf-annotationHighlight",d.setAttribute("annotation",e),a.parentNode.replaceChild(d,a),d.appendChild(a))}));c.detach()}function n(a){var b=g.getSizer();a?(c.style.display="inline-block",b.style.paddingRight=d.getComputedStyle(c).width):(c.style.display="none",b.style.paddingRight=0);g.refreshSize()}function p(){e.sort(function(a,d){return 0!==(a.compareDocumentPosition(d)&Node.DOCUMENT_POSITION_FOLLOWING)?-1:1})}function r(){var a;for(a=0;a<e.length;a+= +1){var d=e[a],b=d.parentNode,f=b.nextElementSibling,l=f.nextElementSibling,n=b.parentNode,k=0,k=e[e.indexOf(d)-1],r=void 0,d=g.getZoomLevel();b.style.left=(c.getBoundingClientRect().left-n.getBoundingClientRect().left)/d+"px";b.style.width=c.getBoundingClientRect().width/d+"px";f.style.width=parseFloat(b.style.left)-30+"px";k?(r=k.parentNode.getBoundingClientRect(),20>=(n.getBoundingClientRect().top-r.bottom)/d?b.style.top=Math.abs(n.getBoundingClientRect().top-r.bottom)/d+20+"px":b.style.top="0px"): +b.style.top="0px";l.style.left=f.getBoundingClientRect().width/d+"px";var f=l.style,n=l.getBoundingClientRect().left/d,k=l.getBoundingClientRect().top/d,r=b.getBoundingClientRect().left/d,p=b.getBoundingClientRect().top/d,q=0,I=0,q=r-n,q=q*q,I=p-k,I=I*I,n=Math.sqrt(q+I);f.width=n+"px";k=Math.asin((b.getBoundingClientRect().top-l.getBoundingClientRect().top)/(d*parseFloat(l.style.width)));l.style.transform="rotate("+k+"rad)";l.style.MozTransform="rotate("+k+"rad)";l.style.WebkitTransform="rotate("+ +k+"rad)";l.style.msTransform="rotate("+k+"rad)"}}function q(a){var d=e.indexOf(a),b=a.parentNode.parentNode;"div"===b.localName&&(b.parentNode.insertBefore(a,b),b.parentNode.removeChild(b));a=a.getAttributeNS(odf.Namespaces.officens,"name");a=l.querySelectorAll('span.webodf-annotationHighlight[annotation="'+a+'"]');for(var c,b=0;b<a.length;b+=1){for(c=a.item(b);c.firstChild;)c.parentNode.insertBefore(c.firstChild,c);c.parentNode.removeChild(c)}-1!==d&&e.splice(d,1);0===e.length&&n(!1)}var e=[],l= +k.ownerDocument,a=odf.OdfUtils,d=runtime.getWindow();runtime.assert(Boolean(d),"Expected to be run in an environment which has a global window, like a browser.");this.rerenderAnnotations=r;this.rehighlightAnnotations=function(){e.forEach(function(a){f(a)})};this.getMinimumHeightForAnnotationPane=function(){return"none"!==c.style.display&&0<e.length?(e[e.length-1].parentNode.getBoundingClientRect().bottom-c.getBoundingClientRect().top)/g.getZoomLevel()+"px":null};this.addAnnotations=function(d){0!== +d.length&&(n(!0),d.forEach(function(d){e.push(d);var c=l.createElement("div"),m=l.createElement("div"),n=l.createElement("div"),g=l.createElement("div"),k;c.className="annotationWrapper";c.setAttribute("creator",a.getAnnotationCreator(d));d.parentNode.insertBefore(c,d);m.className="annotationNote";m.appendChild(d);b&&(k=l.createElement("div"),k.className="annotationRemoveButton",m.appendChild(k));n.className="annotationConnector horizontal";g.className="annotationConnector angular";c.appendChild(m); +c.appendChild(n);c.appendChild(g);d.annotationEndElement&&f(d)}),p(),r())};this.forgetAnnotation=q;this.forgetAnnotations=function(){for(;e.length;)q(e[0])}};gui.Viewport=function(){};gui.Viewport.prototype.scrollIntoView=function(g,k){}; +gui.SingleScrollViewport=function(g){this.scrollIntoView=function(k,c){var b,f,n,p;p=g.offsetHeight-g.clientHeight;n=g.offsetWidth-g.clientWidth;var r=g.getBoundingClientRect();if(k&&r){b=r.left+5;f=r.top+5;n=r.right-(n+5);p=r.bottom-(p+5);if(c||k.top<f)g.scrollTop-=f-k.top;else if(k.top>p||k.bottom>p)g.scrollTop=k.bottom-k.top<=p-f?g.scrollTop+(k.bottom-p):g.scrollTop+(k.top-f);k.left<b?g.scrollLeft-=b-k.left:k.right>n&&(g.scrollLeft=k.right-k.left<=n-b?g.scrollLeft+(k.right-n):g.scrollLeft-(b-k.left))}}}; +(function(){function g(c,n,k,r,q){var e,l=0,a;for(a in c)if(c.hasOwnProperty(a)){if(l===k){e=a;break}l+=1}e?n.getPartData(c[e].href,function(a,m){if(a)runtime.log(a);else if(m){var h="@font-face { font-family: "+(c[e].family||e)+"; src: url(data:application/x-font-ttf;charset=binary;base64,"+b.convertUTF8ArrayToBase64(m)+') format("truetype"); }';try{r.insertRule(h,r.cssRules.length)}catch(l){runtime.log("Problem inserting rule in CSS: "+runtime.toJson(l)+"\nRule: "+h)}}else runtime.log("missing font data for "+ +c[e].href);g(c,n,k+1,r,q)}):q&&q()}var k=xmldom.XPath,c=odf.OdfUtils,b=new core.Base64;odf.FontLoader=function(){this.loadFonts=function(b,n){for(var p=b.rootElement.fontFaceDecls;n.cssRules.length;)n.deleteRule(n.cssRules.length-1);if(p){var r={},q,e,l,a;if(p)for(p=k.getODFElementsWithXPath(p,"style:font-face[svg:font-face-src]",odf.Namespaces.lookupNamespaceURI),q=0;q<p.length;q+=1)e=p[q],l=e.getAttributeNS(odf.Namespaces.stylens,"name"),a=c.getNormalizedFontFamilyName(e.getAttributeNS(odf.Namespaces.svgns, +"font-family")),e=k.getODFElementsWithXPath(e,"svg:font-face-src/svg:font-face-uri",odf.Namespaces.lookupNamespaceURI),0<e.length&&(e=e[0].getAttributeNS(odf.Namespaces.xlinkns,"href"),r[l]={href:e,family:a});g(r,b,0,n)}}}})(); +odf.Formatting=function(){function g(a){return(a=A[a])?u.mergeObjects({},a):{}}function k(){for(var d=a.rootElement.fontFaceDecls,b={},c,e,d=d&&d.firstElementChild;d;){if(c=d.getAttributeNS(h,"name"))if((e=d.getAttributeNS(m,"font-family"))||0<d.getElementsByTagNameNS(m,"font-face-uri").length)b[c]=e;d=d.nextElementSibling}return b}function c(d){for(var b=a.rootElement.styles.firstElementChild;b;){if(b.namespaceURI===h&&"default-style"===b.localName&&b.getAttributeNS(h,"family")===d)return b;b=b.nextElementSibling}return null} +function b(d,b,c){var e,m,l;c=c||[a.rootElement.automaticStyles,a.rootElement.styles];for(l=0;l<c.length;l+=1)for(e=c[l],e=e.firstElementChild;e;){m=e.getAttributeNS(h,"name");if(e.namespaceURI===h&&"style"===e.localName&&e.getAttributeNS(h,"family")===b&&m===d||"list-style"===b&&e.namespaceURI===y&&"list-style"===e.localName&&m===d||"data"===b&&e.namespaceURI===x&&m===d)return e;e=e.nextElementSibling}return null}function f(a){for(var d,b,c,e,m={},l=a.firstElementChild;l;){if(l.namespaceURI===h)for(c= +m[l.nodeName]={},b=l.attributes,d=0;d<b.length;d+=1)e=b.item(d),c[e.name]=e.value;l=l.nextElementSibling}b=a.attributes;for(d=0;d<b.length;d+=1)e=b.item(d),m[e.name]=e.value;return m}function n(d,e){for(var m=a.rootElement.styles,l,n={},k=d.getAttributeNS(h,"family"),r=d;r;)l=f(r),n=u.mergeObjects(l,n),r=(l=r.getAttributeNS(h,"parent-style-name"))?b(l,k,[m]):null;if(r=c(k))l=f(r),n=u.mergeObjects(l,n);!1!==e&&(l=g(k),n=u.mergeObjects(l,n));return n}function p(b,c){function h(a){Object.keys(a).forEach(function(d){Object.keys(a[d]).forEach(function(a){f+= +"|"+d+":"+a+"|"})})}for(var e=b.nodeType===Node.TEXT_NODE?b.parentNode:b,m,l=[],f="",n=!1;e&&!w.isInlineRoot(e)&&e.parentNode!==a.rootElement;)!n&&w.isGroupingElement(e)&&(n=!0),(m=d.determineStylesForNode(e))&&l.push(m),e=e.parentNode;n&&(l.forEach(h),c&&(c[f]=l));return n?l:void 0}function r(d){var c={orderedStyles:[],styleProperties:{}};d.forEach(function(d){Object.keys(d).forEach(function(e){var m=Object.keys(d[e])[0],l={name:m,family:e,displayName:void 0,isCommonStyle:!1},f;(f=b(m,e))?(e=n(f), +c.styleProperties=u.mergeObjects(e,c.styleProperties),l.displayName=f.getAttributeNS(h,"display-name")||void 0,l.isCommonStyle=f.parentNode===a.rootElement.styles):runtime.log("No style element found for '"+m+"' of family '"+e+"'");c.orderedStyles.push(l)})});return c}function q(a,d){var b={},c=[];d||(d={});a.forEach(function(a){p(a,b)});Object.keys(b).forEach(function(a){d[a]||(d[a]=r(b[a]));c.push(d[a])});return c}function e(d){for(var b=a.rootElement.masterStyles.firstElementChild;b&&(b.namespaceURI!== +h||"master-page"!==b.localName||b.getAttributeNS(h,"name")!==d);)b=b.nextElementSibling;return b}function l(a,d){var b;a&&(b=t.convertMeasure(a,"px"));void 0===b&&d&&(b=t.convertMeasure(d,"px"));return b}var a,d=new odf.StyleInfo,m=odf.Namespaces.svgns,h=odf.Namespaces.stylens,y=odf.Namespaces.textns,x=odf.Namespaces.numberns,z=odf.Namespaces.fons,w=odf.OdfUtils,v=core.DomUtils,u=new core.Utils,t=new core.CSSUnits,A={paragraph:{"style:paragraph-properties":{"fo:text-align":"left"}}};this.getSystemDefaultStyleAttributes= +g;this.setOdfContainer=function(d){a=d};this.getFontMap=k;this.getAvailableParagraphStyles=function(){for(var d=a.rootElement.styles,b,c,e=[],d=d&&d.firstElementChild;d;)"style"===d.localName&&d.namespaceURI===h&&(b=d.getAttributeNS(h,"family"),"paragraph"===b&&(b=d.getAttributeNS(h,"name"),c=d.getAttributeNS(h,"display-name")||b,b&&c&&e.push({name:b,displayName:c}))),d=d.nextElementSibling;return e};this.isStyleUsed=function(b){var c,e=a.rootElement;c=d.hasDerivedStyles(e,odf.Namespaces.lookupNamespaceURI, +b);b=(new d.UsedStyleList(e.styles)).uses(b)||(new d.UsedStyleList(e.automaticStyles)).uses(b)||(new d.UsedStyleList(e.body)).uses(b);return c||b};this.getDefaultStyleElement=c;this.getStyleElement=b;this.getStyleAttributes=f;this.getInheritedStyleAttributes=n;this.getFirstCommonParentStyleNameOrSelf=function(d){var c=a.rootElement.styles,e;if(e=b(d,"paragraph",[a.rootElement.automaticStyles]))if(d=e.getAttributeNS(h,"parent-style-name"),!d)return null;return(e=b(d,"paragraph",[c]))?d:null};this.hasParagraphStyle= +function(a){return Boolean(b(a,"paragraph"))};this.getAppliedStyles=q;this.getAppliedStylesForElement=function(a,d){return q([a],d)[0]};this.updateStyle=function(d,b){var c,e;v.mapObjOntoNode(d,b,odf.Namespaces.lookupNamespaceURI);(c=(c=b["style:text-properties"])&&c["style:font-name"])&&!k().hasOwnProperty(c)&&(e=d.ownerDocument.createElementNS(h,"style:font-face"),e.setAttributeNS(h,"style:name",c),e.setAttributeNS(m,"svg:font-family",c),a.rootElement.fontFaceDecls.appendChild(e))};this.createDerivedStyleObject= +function(d,c,e){var h=b(d,c);runtime.assert(Boolean(h),"No style element found for '"+d+"' of family '"+c+"'");d=h.parentNode===a.rootElement.styles?{"style:parent-style-name":d}:f(h);d["style:family"]=c;u.mergeObjects(d,e);return d};this.getDefaultTabStopDistance=function(){for(var a=c("paragraph"),a=a&&a.firstElementChild,d;a;)a.namespaceURI===h&&"paragraph-properties"===a.localName&&(d=a.getAttributeNS(h,"tab-stop-distance")),a=a.nextElementSibling;d||(d="1.25cm");return w.parseNonNegativeLength(d)}; +this.getMasterPageElement=e;this.getContentSize=function(d,c){var m,f,n,g,k,r,p,q,y,u;a:{f=b(d,c);runtime.assert("paragraph"===c||"table"===c,"styleFamily must be either paragraph or table");if(f){if(f=f.getAttributeNS(h,"master-page-name"))(m=e(f))||runtime.log("WARN: No master page definition found for "+f);m||(m=e("Standard"));m||(m=a.rootElement.masterStyles.getElementsByTagNameNS(h,"master-page")[0])||runtime.log("WARN: Document has no master pages defined");if(m)for(f=m.getAttributeNS(h,"page-layout-name"), +n=a.rootElement.automaticStyles.getElementsByTagNameNS(h,"page-layout"),g=0;g<n.length;g+=1)if(m=n.item(g),m.getAttributeNS(h,"name")===f)break a}m=null}m||(m=v.getDirectChild(a.rootElement.styles,h,"default-page-layout"));(m=v.getDirectChild(m,h,"page-layout-properties"))?("landscape"===m.getAttributeNS(h,"print-orientation")?(f="29.7cm",n="21.001cm"):(f="21.001cm",n="29.7cm"),f=l(m.getAttributeNS(z,"page-width"),f),n=l(m.getAttributeNS(z,"page-height"),n),g=l(m.getAttributeNS(z,"margin")),void 0=== +g?(g=l(m.getAttributeNS(z,"margin-left"),"2cm"),k=l(m.getAttributeNS(z,"margin-right"),"2cm"),r=l(m.getAttributeNS(z,"margin-top"),"2cm"),p=l(m.getAttributeNS(z,"margin-bottom"),"2cm")):g=k=r=p=g,q=l(m.getAttributeNS(z,"padding")),void 0===q?(q=l(m.getAttributeNS(z,"padding-left"),"0cm"),y=l(m.getAttributeNS(z,"padding-right"),"0cm"),u=l(m.getAttributeNS(z,"padding-top"),"0cm"),m=l(m.getAttributeNS(z,"padding-bottom"),"0cm")):q=y=u=m=q):(f=l("21.001cm"),n=l("29.7cm"),g=k=r=p=g=l("2cm"),q=y=u=m=q= +l("0cm"));return{width:f-g-k-q-y,height:n-r-p-u-m}}}; +(function(){var g=odf.Namespaces.stylens,k=odf.Namespaces.textns,c={graphic:"draw","drawing-page":"draw",paragraph:"text",presentation:"presentation",ruby:"text",section:"text",table:"table","table-cell":"table","table-column":"table","table-row":"table",text:"text",list:"text",page:"office"};odf.StyleTreeNode=function(b){this.derivedStyles={};this.element=b};odf.StyleTree=function(b,f){function n(b){var a,d,c,e={};if(!b)return e;for(b=b.firstElementChild;b;){if(d=b.namespaceURI!==g||"style"!==b.localName&& +"default-style"!==b.localName?b.namespaceURI===k&&"list-style"===b.localName?"list":b.namespaceURI!==g||"page-layout"!==b.localName&&"default-page-layout"!==b.localName?void 0:"page":b.getAttributeNS(g,"family"))(a=b.getAttributeNS(g,"name"))||(a=""),e.hasOwnProperty(d)?c=e[d]:e[d]=c={},c[a]=b;b=b.nextElementSibling}return e}function p(b,a){if(b.hasOwnProperty(a))return b[a];var d=null,c=Object.keys(b),e;for(e=0;e<c.length&&!(d=p(b[c[e]].derivedStyles,a));e+=1);return d}function r(b,a,d){var c,e, +f;if(!a.hasOwnProperty(b))return null;c=new odf.StyleTreeNode(a[b]);e=c.element.getAttributeNS(g,"parent-style-name");f=null;e&&(f=p(d,e)||r(e,a,d));f?f.derivedStyles[b]=c:d[b]=c;delete a[b];return c}function q(b,a){b&&Object.keys(b).forEach(function(d){r(d,b,a)})}var e={};this.getStyleTree=function(){return e};(function(){var l,a,d;a=n(b);d=n(f);Object.keys(c).forEach(function(b){l=e[b]={};q(a[b],l);q(d[b],l)})})()}})(); +(function(){function g(b,c){try{b.insertRule(c,b.cssRules.length)}catch(f){runtime.log("cannot load rule: "+c+" - "+f)}}function k(b,c){this.listCounterCount=0;this.contentRules=b;this.counterIdStack=[];this.continuedCounterIdStack=c}function c(b){function c(d,h,f,l){var k=h.namespaceURI===n&&"list"===h.localName,r=h.namespaceURI===n&&"list-item"===h.localName;if(k||r){if(k){var k=f+=1,p,u,t;l.listCounterCount+=1;r=d+"-level"+k+"-"+l.listCounterCount;h.setAttributeNS("urn:webodf:names:helper","counter-id", +r);p=l.continuedCounterIdStack.shift();p||(p=r,a+=r+" 1 ",u='text|list[webodfhelper|counter-id="'+r+'"] > text|list-item:first-child > :not(text|list):first-child:before',u+="{",u+="counter-increment: "+p+" 0;",u+="}",g(b,u));for(;l.counterIdStack.length>=k;)l.counterIdStack.pop();l.counterIdStack.push(p);t=l.contentRules[k.toString()]||"";for(u=1;u<=k;u+=1)t=t.replace(u+"webodf-listLevel",l.counterIdStack[u-1]);u='text|list[webodfhelper|counter-id="'+r+'"] > text|list-item > :not(text|list):first-child:before'; +u+="{";u+=t;u+="counter-increment: "+p+";";u+="}";g(b,u)}for(h=h.firstElementChild;h;)c(d,h,f,l),h=h.nextElementSibling}else l.continuedCounterIdStack=[]}var f=0,a="",d={};this.createCounterRules=function(a,b,n){var g=b.getAttributeNS(p,"id"),r=[];n&&(n=n.getAttributeNS("urn:webodf:names:helper","counter-id"),r=d[n].slice(0));a=new k(a,r);g?g="Y"+g:(f+=1,g="X"+f);c(g,b,0,a);d[g+"-level1-1"]=a.counterIdStack};this.initialiseCreatedCounters=function(){var d;d="office|document{"+("counter-reset: "+a+ +";");d+="}";g(b,d)}}var b=odf.Namespaces.fons,f=odf.Namespaces.stylens,n=odf.Namespaces.textns,p=odf.Namespaces.xmlns,r={1:"decimal",a:"lower-latin",A:"upper-latin",i:"lower-roman",I:"upper-roman"};odf.ListStyleToCss=function(){function k(a){var b=m.parseLength(a);return b?d.convert(b.value,b.unit,"px"):(runtime.log("Could not parse value '"+a+"'."),0)}function e(a){return a.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}function l(a,d){var b;a&&(b=a.getAttributeNS(n,"style-name"));return b===d}function a(a, +d,b){d=d.getElementsByTagNameNS(n,"list");a=new c(a);var m,g,k,q,t,A,I={},K;for(K=0;K<d.length;K+=1)if(m=d.item(K),A=m.getAttributeNS(n,"style-name")){k=m.getAttributeNS(n,"continue-numbering");q=m.getAttributeNS(n,"continue-list");(t=m.getAttributeNS(p,"id"))&&(I[t]=m);t=b[A].element.firstElementChild;for(var L=void 0,E={};t;){var L=(L=t.getAttributeNS(n,"level"))&&parseInt(L,10),N=t,O="",D=void 0,V=void 0,W=D=void 0;if("list-level-style-number"===N.localName){var J=N,O=J.getAttributeNS(f,"num-format"), +D=J.getAttributeNS(f,"num-suffix")||"",V=J.getAttributeNS(f,"num-prefix")||"",R="",P=J.getAttributeNS(n,"level"),J=J.getAttributeNS(n,"display-levels");V&&(R+='"'+e(V)+'"\n');if(r.hasOwnProperty(O))for(P=P?parseInt(P,10):1,J=J?parseInt(J,10):1;0<J;)R+=" counter("+(P-J+1)+"webodf-listLevel,"+r[O]+")",1<J&&(R+='"."'),--J;else R=O?R+(' "'+O+'"'):R+' ""';O="content:"+R+' "'+e(D)+'"'}else"list-level-style-image"===N.localName?O="content: none":"list-level-style-bullet"===N.localName&&(O=N.getAttributeNS(n, +"bullet-char"),O='content: "'+e(O)+'"');if(D=N.getElementsByTagNameNS(f,"list-level-properties")[0])V=D.getAttributeNS(n,"list-level-position-and-space-mode"),"label-alignment"===V&&((D=D.getElementsByTagNameNS(f,"list-level-label-alignment")[0])&&(W=D.getAttributeNS(n,"label-followed-by")),"space"===W&&(O+=' "\\a0"'));E[L]="\n"+O+";\n";t=t.nextElementSibling}t=E;k&&!q&&l(g,A)?a.createCounterRules(t,m,g):q&&l(I[q],A)?a.createCounterRules(t,m,I[q]):a.createCounterRules(t,m);g=m}a.initialiseCreatedCounters()} +var d=new core.CSSUnits,m=odf.OdfUtils;this.applyListStyles=function(d,c,e){var m,l;(m=c.list)&&Object.keys(m).forEach(function(a){l=m[a];for(var c=l.element.firstElementChild;c;){if(c.namespaceURI===n){for(var e=d,r=c,p='text|list[text|style-name="'+a+'"]',y=r.getAttributeNS(n,"level"),x=void 0,E=void 0,N=E=void 0,O=void 0,D=void 0,V=x=void 0,W=void 0,J=void 0,R=void 0,O=void 0,N=(E=r.getElementsByTagNameNS(f,"list-level-properties")[0])&&E.getAttributeNS(n,"list-level-position-and-space-mode"), +O=E&&E.getElementsByTagNameNS(f,"list-level-label-alignment")[0],x=y=y&&parseInt(y,10);1<x;)p+=" > text|list-item > text|list",--x;x=E&&E.getAttributeNS(b,"text-align")||"left";switch(x){case "end":x="right";break;case "start":x="left"}"label-alignment"===N?(D=O&&O.getAttributeNS(b,"margin-left")||"0px",J=O&&O.getAttributeNS(b,"text-indent")||"0px",R=O&&O.getAttributeNS(n,"label-followed-by"),O=k(D)):(D=E&&E.getAttributeNS(n,"space-before")||"0px",V=E&&E.getAttributeNS(n,"min-label-width")||"0px", +W=E&&E.getAttributeNS(n,"min-label-distance")||"0px",O=k(D)+k(V));E=p+" > text|list-item";E+="{";E+="margin-left: "+O+"px;";E+="}";g(e,E);E=p+" > text|list-item > text|list";E+="{";E+="margin-left: "+-O+"px;";E+="}";g(e,E);E=p+" > text|list-item > :not(text|list):first-child:before";E+="{";E+="text-align: "+x+";";E+="display: inline-block;";"label-alignment"===N?(E+="margin-left: "+J+";","listtab"===R&&(E+="padding-right: 0.2cm;")):(E+="min-width: "+V+";",E+="margin-left: "+(0===parseFloat(V)?"": +"-")+V+";",E+="padding-right: "+W+";");E+="}";g(e,E)}c=c.nextElementSibling}});a(d,e,m)}}})();odf.LazyStyleProperties=function(g,k){var c={};this.value=function(b){var f;c.hasOwnProperty(b)?f=c[b]:(f=k[b](),void 0===f&&g&&(f=g.value(b)),c[b]=f);return f};this.reset=function(b){g=b;c={}}}; +odf.StyleParseUtils=function(){function g(c){var b,f;c=(c=/(-?[0-9]*[0-9][0-9]*(\.[0-9]*)?|0+\.[0-9]*[1-9][0-9]*|\.[0-9]*[1-9][0-9]*)((cm)|(mm)|(in)|(pt)|(pc)|(px))/.exec(c))?{value:parseFloat(c[1]),unit:c[3]}:null;f=c&&c.unit;"px"===f?b=c.value:"cm"===f?b=c.value/2.54*96:"mm"===f?b=c.value/25.4*96:"in"===f?b=96*c.value:"pt"===f?b=c.value/.75:"pc"===f&&(b=16*c.value);return b}var k=odf.Namespaces.stylens;this.parseLength=g;this.parsePositiveLengthOrPercent=function(c,b,f){var n;c&&(n=parseFloat(c.substr(0, +c.indexOf("%"))),isNaN(n)&&(n=void 0));var k;void 0!==n?(f&&(k=f.value(b)),n=void 0===k?void 0:k/100*n):n=g(c);return n};this.getPropertiesElement=function(c,b,f){for(b=f?f.nextElementSibling:b.firstElementChild;null!==b&&(b.localName!==c||b.namespaceURI!==k);)b=b.nextElementSibling;return b};this.parseAttributeList=function(c){c&&(c=c.replace(/^\s*(.*?)\s*$/g,"$1"));return c&&0<c.length?c.split(/\s+/):[]}}; +odf.Style2CSS=function(){function g(a,d,b){var c=[];b=b.derivedStyles;var e;var h=z[a],m;void 0===h?d=null:(m=d?"["+h+'|style-name="'+d+'"]':"","presentation"===h&&(h="draw",m=d?'[presentation|style-name="'+d+'"]':""),d=h+"|"+w[a].join(m+","+h+"|")+m);null!==d&&c.push(d);for(e in b)b.hasOwnProperty(e)&&(d=g(a,e,b[e]),c=c.concat(d));return c}function k(a){var d="",b="",d=null;if("default-style"===a.localName)return null;d=a.getAttributeNS(l,"parent-style-name");b=a.getAttributeNS(l,"family");return d= +S.getODFElementsWithXPath(P,d?"//style:*[@style:name='"+d+"'][@style:family='"+b+"']":"//style:default-style[@style:family='"+b+"']",odf.Namespaces.lookupNamespaceURI)[0]}function c(a,d){var b="",c,e,h;for(c=0;c<d.length;c+=1)if(e=d[c],h=a.getAttributeNS(e[0],e[1])){h=h.trim();if(D.hasOwnProperty(e[1])){var m=h,f=m.indexOf(" "),n=void 0;h=void 0;-1!==f?(n=m.substring(0,f),h=m.substring(f)):(n=m,h="");(n=J.parseLength(n))&&"pt"===n.unit&&.75>n.value&&(m="0.75pt"+h);h=m}else if(V.hasOwnProperty(e[1])){var m= +a,f=e[0],n=e[1],g=J.parseLength(h),r=void 0,p=void 0,q=void 0,O=void 0,q=void 0;if(g&&"%"===g.unit){r=g.value/100;p=k(m.parentNode);for(O="0";p;){if(q=y.getDirectChild(p,l,"paragraph-properties"))if(q=J.parseLength(q.getAttributeNS(f,n))){if("%"!==q.unit){O=q.value*r+q.unit;break}r*=q.value/100}p=k(p)}h=O}}e[2]&&(b+=e[2]+":"+h+";")}return b}function b(a,d,b,c){return d+d+b+b+c+c}function f(a,d){var b=[a],c=d.derivedStyles;Object.keys(c).forEach(function(a){a=f(a,c[a]);b=b.concat(a)});return b}function n(a, +d,b,c){function e(d,b){var c=[],h;d.forEach(function(a){m.forEach(function(d){c.push('draw|page[webodfhelper|page-style-name="'+d+'"] draw|frame[presentation|class="'+a+'"]')})});0<c.length&&(h=c.join(",")+"{visibility:"+b+";}",a.insertRule(h,a.cssRules.length))}var m=f(d,c),l=[],n=[];["page-number","date-time","header","footer"].forEach(function(a){var d;d=b.getAttributeNS(h,"display-"+a);"true"===d?l.push(a):"false"===d&&n.push(a)});e(l,"visible");e(n,"hidden")}function p(a,f,D,V){var z,w;if("page"=== +f){var B=V.element,P="",M,Q;Q=M="";D=y.getDirectChild(B,l,"page-layout-properties");var F;if(D)if(F=B.getAttributeNS(l,"name"),P+=c(D,N),(M=y.getDirectChild(D,l,"background-image"))&&(Q=M.getAttributeNS(m,"href"))&&(P=P+("background-image: url('odfkit:"+Q+"');")+c(M,u)),"presentation"===R)for(B=(B=y.getDirectChild(B.parentNode.parentNode,e,"master-styles"))&&B.firstElementChild;B;)B.namespaceURI===l&&"master-page"===B.localName&&B.getAttributeNS(l,"page-layout-name")===F&&(Q=B.getAttributeNS(l,"name"), +M='draw|page[draw|master-page-name="'+Q+'"] {'+P+"}",Q='office|body, draw|page[draw|master-page-name="'+Q+'"] {'+c(D,O)+" }",a.insertRule(M,a.cssRules.length),a.insertRule(Q,a.cssRules.length)),B=B.nextElementSibling;else"text"===R&&(M="office|text {"+P+"}",Q="office|body {width: "+D.getAttributeNS(q,"page-width")+";}",a.insertRule(M,a.cssRules.length),a.insertRule(Q,a.cssRules.length))}else{P=g(f,D,V).join(",");F="";if(B=y.getDirectChild(V.element,l,"text-properties")){var S=B,ca=w="";M="";Q=1;B= +""+c(S,v);z=S.getAttributeNS(l,"text-underline-style");"solid"===z&&(w+=" underline");z=S.getAttributeNS(l,"text-line-through-style");"solid"===z&&(w+=" line-through");w.length&&(B=B+("text-decoration:"+w+";\n")+("text-decoration-line:"+w+";\n"),B+="-moz-text-decoration-line:"+w+";\n");z=S.getAttributeNS(l,"text-line-through-type");switch(z){case "double":ca+=" double";break;case "single":ca+=" single"}ca&&(B+="text-decoration-style:"+ca+";\n",B+="-moz-text-decoration-style:"+ca+";\n");if(w=S.getAttributeNS(l, +"font-name")||S.getAttributeNS(q,"font-family"))z=W[w],B+="font-family: "+(z||w)+";";if(z=S.getAttributeNS(l,"text-position"))w=x.parseAttributeList(z),z=w[0],w=w[1],B+="vertical-align: "+z+"\n; ",w&&(Q=parseFloat(w)/100);if(S.hasAttributeNS(q,"font-size")||1!==Q){for(S=S.parentNode;S;){if(z=(z=y.getDirectChild(S,l,"text-properties"))?J.parseFoFontSize(z.getAttributeNS(q,"font-size")):null){if("%"!==z.unit){M="font-size: "+z.value*Q+z.unit+";";break}Q*=z.value/100}S=k(S)}M||(M="font-size: "+parseFloat(aa)* +Q+fa.getUnits(aa)+";")}B+=M;F+=B}if(B=y.getDirectChild(V.element,l,"paragraph-properties"))M=B,B=""+c(M,t),(Q=y.getDirectChild(M,l,"background-image"))&&(S=Q.getAttributeNS(m,"href"))&&(B=B+("background-image: url('odfkit:"+S+"');")+c(Q,u)),(M=M.getAttributeNS(q,"line-height"))&&"normal"!==M&&(M=J.parseFoLineHeight(M),B="%"!==M.unit?B+("line-height: "+M.value+M.unit+";"):B+("line-height: "+M.value/100+";")),F+=B;if(B=y.getDirectChild(V.element,l,"graphic-properties"))S=B,B=""+c(S,A),M=S.getAttributeNS(r, +"opacity"),Q=S.getAttributeNS(r,"fill"),S=S.getAttributeNS(r,"fill-color"),"solid"===Q||"hatch"===Q?S&&"none"!==S?(M=isNaN(parseFloat(M))?1:parseFloat(M)/100,Q=S.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i,b),(S=(Q=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(Q))?{r:parseInt(Q[1],16),g:parseInt(Q[2],16),b:parseInt(Q[3],16)}:null)&&(B+="background-color: rgba("+S.r+","+S.g+","+S.b+","+M+");")):B+="background: none;":"none"===Q&&(B+="background: none;"),F+=B;if(B=y.getDirectChild(V.element,l,"drawing-page-properties"))M= +B,Q=""+c(M,A),"true"===M.getAttributeNS(h,"background-visible")&&(Q+="background: none;"),F+=Q,n(a,D,B,V);if(B=y.getDirectChild(V.element,l,"table-cell-properties"))D=F,F=""+c(B,I),F=D+F;if(B=y.getDirectChild(V.element,l,"table-row-properties"))D=F,F=""+c(B,L),F=D+F;if(B=y.getDirectChild(V.element,l,"table-column-properties"))D=F,F=""+c(B,K),F=D+F;if(B=y.getDirectChild(V.element,l,"table-properties"))D=F,F=""+c(B,E),B=B.getAttributeNS(d,"border-model"),"collapsing"===B?F+="border-collapse:collapse;": +"separating"===B&&(F+="border-collapse:separate;"),F=D+F;0!==F.length&&a.insertRule(P+"{"+F+"}",a.cssRules.length)}for(var X in V.derivedStyles)V.derivedStyles.hasOwnProperty(X)&&p(a,f,X,V.derivedStyles[X])}var r=odf.Namespaces.drawns,q=odf.Namespaces.fons,e=odf.Namespaces.officens,l=odf.Namespaces.stylens,a=odf.Namespaces.svgns,d=odf.Namespaces.tablens,m=odf.Namespaces.xlinkns,h=odf.Namespaces.presentationns,y=core.DomUtils,x=new odf.StyleParseUtils,z={graphic:"draw","drawing-page":"draw",paragraph:"text", +presentation:"presentation",ruby:"text",section:"text",table:"table","table-cell":"table","table-column":"table","table-row":"table",text:"text",list:"text",page:"office"},w={graphic:"circle connected control custom-shape ellipse frame g line measure page page-thumbnail path polygon polyline rect regular-polygon".split(" "),paragraph:"alphabetical-index-entry-template h illustration-index-entry-template index-source-style object-index-entry-template p table-index-entry-template table-of-content-entry-template user-index-entry-template".split(" "), +presentation:"caption circle connector control custom-shape ellipse frame g line measure page-thumbnail path polygon polyline rect regular-polygon".split(" "),"drawing-page":"caption circle connector control page custom-shape ellipse frame g line measure page-thumbnail path polygon polyline rect regular-polygon".split(" "),ruby:["ruby","ruby-text"],section:"alphabetical-index bibliography illustration-index index-title object-index section table-of-content table-index user-index".split(" "),table:["background", +"table"],"table-cell":"body covered-table-cell even-columns even-rows first-column first-row last-column last-row odd-columns odd-rows table-cell".split(" "),"table-column":["table-column"],"table-row":["table-row"],text:"a index-entry-chapter index-entry-link-end index-entry-link-start index-entry-page-number index-entry-span index-entry-tab-stop index-entry-text index-title-template linenumbering-configuration list-level-style-number list-level-style-bullet outline-level-style span".split(" "), +list:["list-item"]},v=[[q,"color","color"],[q,"background-color","background-color"],[q,"font-weight","font-weight"],[q,"font-style","font-style"]],u=[[l,"repeat","background-repeat"]],t=[[q,"background-color","background-color"],[q,"text-align","text-align"],[q,"text-indent","text-indent"],[q,"padding","padding"],[q,"padding-left","padding-left"],[q,"padding-right","padding-right"],[q,"padding-top","padding-top"],[q,"padding-bottom","padding-bottom"],[q,"border-left","border-left"],[q,"border-right", +"border-right"],[q,"border-top","border-top"],[q,"border-bottom","border-bottom"],[q,"margin","margin"],[q,"margin-left","margin-left"],[q,"margin-right","margin-right"],[q,"margin-top","margin-top"],[q,"margin-bottom","margin-bottom"],[q,"border","border"]],A=[[q,"background-color","background-color"],[q,"min-height","min-height"],[r,"stroke","border"],[a,"stroke-color","border-color"],[a,"stroke-width","border-width"],[q,"border","border"],[q,"border-left","border-left"],[q,"border-right","border-right"], +[q,"border-top","border-top"],[q,"border-bottom","border-bottom"]],I=[[q,"background-color","background-color"],[q,"border-left","border-left"],[q,"border-right","border-right"],[q,"border-top","border-top"],[q,"border-bottom","border-bottom"],[q,"border","border"]],K=[[l,"column-width","width"]],L=[[l,"row-height","height"],[q,"keep-together",null]],E=[[l,"width","width"],[q,"margin-left","margin-left"],[q,"margin-right","margin-right"],[q,"margin-top","margin-top"],[q,"margin-bottom","margin-bottom"]], +N=[[q,"background-color","background-color"],[q,"padding","padding"],[q,"padding-left","padding-left"],[q,"padding-right","padding-right"],[q,"padding-top","padding-top"],[q,"padding-bottom","padding-bottom"],[q,"border","border"],[q,"border-left","border-left"],[q,"border-right","border-right"],[q,"border-top","border-top"],[q,"border-bottom","border-bottom"],[q,"margin","margin"],[q,"margin-left","margin-left"],[q,"margin-right","margin-right"],[q,"margin-top","margin-top"],[q,"margin-bottom","margin-bottom"]], +O=[[q,"page-width","width"],[q,"page-height","height"]],D={border:!0,"border-left":!0,"border-right":!0,"border-top":!0,"border-bottom":!0,"stroke-width":!0},V={margin:!0,"margin-left":!0,"margin-right":!0,"margin-top":!0,"margin-bottom":!0},W={},J=odf.OdfUtils,R,P,aa,S=xmldom.XPath,fa=new core.CSSUnits;this.style2css=function(a,d,b,c,e){function h(a,d){m="@namespace "+a+" url("+d+");";try{b.insertRule(m,b.cssRules.length)}catch(c){}}var m,f,l;for(P=d;b.cssRules.length;)b.deleteRule(b.cssRules.length- +1);odf.Namespaces.forEachPrefix(h);h("webodfhelper","urn:webodf:names:helper");W=c;R=a;aa=runtime.getWindow().getComputedStyle(document.body,null).getPropertyValue("font-size")||"12pt";for(l in z)if(z.hasOwnProperty(l))for(f in a=e[l],a)a.hasOwnProperty(f)&&p(b,l,f,a[f])}}; +(function(){function g(k,c){var b=this;this.getDistance=function(c){var n=b.x-c.x;c=b.y-c.y;return Math.sqrt(n*n+c*c)};this.getCenter=function(c){return new g((b.x+c.x)/2,(b.y+c.y)/2)};b.x=k;b.y=c}gui.ZoomHelper=function(){function k(a,b,c,e){a=e?"translate3d("+a+"px, "+b+"px, 0) scale3d("+c+", "+c+", 1)":"translate("+a+"px, "+b+"px) scale("+c+")";d.style.WebkitTransform=a;d.style.MozTransform=a;d.style.msTransform=a;d.style.OTransform=a;d.style.transform=a}function c(a){a?k(-m.x,-m.y,x,!0):(k(0, +0,x,!0),k(0,0,x,!1))}function b(a){if(w&&I){var d=w.style.overflow,b=w.classList.contains("webodf-customScrollbars");a&&b||!a&&!b||(a?(w.classList.add("webodf-customScrollbars"),w.style.overflow="hidden",runtime.requestAnimationFrame(function(){w.style.overflow=d})):w.classList.remove("webodf-customScrollbars"))}}function f(){k(-m.x,-m.y,x,!0);w.scrollLeft=0;w.scrollTop=0;K=v.style.overflow;v.style.overflow="visible";b(!1)}function n(){k(0,0,x,!0);w.scrollLeft=m.x;w.scrollTop=m.y;v.style.overflow= +K||"";b(!0)}function p(a){return new g(a.pageX-d.offsetLeft,a.pageY-d.offsetTop)}function r(a){if(h){m.x-=a.x-h.x;m.y-=a.y-h.y;var b=m;m=new g(Math.min(Math.max(b.x,d.offsetLeft),(d.offsetLeft+d.offsetWidth)*x-w.clientWidth),Math.min(Math.max(b.y,d.offsetTop),(d.offsetTop+d.offsetHeight)*x-w.clientHeight))}h=a}function q(a){var d=a.touches.length,b=0<d?p(a.touches[0]):null;a=1<d?p(a.touches[1]):null;b&&a?(y=b.getDistance(a),z=x,h=b.getCenter(a),f(),A=t.PINCH):b&&(h=b,A=t.SCROLL)}function e(a){var b= +a.touches.length,e=0<b?p(a.touches[0]):null,b=1<b?p(a.touches[1]):null;if(e&&b)if(a.preventDefault(),A===t.SCROLL)A=t.PINCH,f(),y=e.getDistance(b);else{a=e.getCenter(b);e=e.getDistance(b)/y;r(a);var b=x,h=Math.min(4,d.offsetParent.clientWidth/d.offsetWidth);x=z*e;x=Math.min(Math.max(x,h),4);e=x/b;m.x+=(e-1)*(a.x+m.x);m.y+=(e-1)*(a.y+m.y);c(!0)}else e&&(A===t.PINCH?(A=t.SCROLL,n()):r(e))}function l(){A===t.PINCH&&(u.emit(gui.ZoomHelper.signalZoomChanged,x),n(),c(!1));A=t.NONE}function a(){w&&(w.removeEventListener("touchstart", +q,!1),w.removeEventListener("touchmove",e,!1),w.removeEventListener("touchend",l,!1))}var d,m,h,y,x,z,w,v,u=new core.EventNotifier([gui.ZoomHelper.signalZoomChanged]),t={NONE:0,SCROLL:1,PINCH:2},A=t.NONE,I=runtime.getWindow().hasOwnProperty("ontouchstart"),K="";this.subscribe=function(a,d){u.subscribe(a,d)};this.unsubscribe=function(a,d){u.unsubscribe(a,d)};this.getZoomLevel=function(){return x};this.setZoomLevel=function(a){d&&(x=a,c(!1),u.emit(gui.ZoomHelper.signalZoomChanged,x))};this.destroy= +function(d){a();b(!1);d()};this.setZoomableElement=function(h){a();d=h;w=d.offsetParent;v=d.parentNode;c(!1);w&&(w.addEventListener("touchstart",q,!1),w.addEventListener("touchmove",e,!1),w.addEventListener("touchend",l,!1));b(!0)};z=x=1;m=new g(0,0)};gui.ZoomHelper.signalZoomChanged="zoomChanged"})();ops.Canvas=function(){};ops.Canvas.prototype.getZoomLevel=function(){};ops.Canvas.prototype.getElement=function(){};ops.Canvas.prototype.getSizer=function(){};ops.Canvas.prototype.getZoomHelper=function(){}; +(function(){function g(){function a(c){b=!0;runtime.setTimeout(function(){try{c()}catch(e){runtime.log(String(e)+"\n"+e.stack)}b=!1;0<d.length&&a(d.pop())},10)}var d=[],b=!1;this.clearQueue=function(){d.length=0};this.addToQueue=function(c){if(0===d.length&&!b)return a(c);d.push(c)}}function k(a){function d(){for(;0<b.cssRules.length;)b.deleteRule(0);b.insertRule("#shadowContent draw|page {display:none;}",0);b.insertRule("office|presentation draw|page {display:none;}",1);b.insertRule("#shadowContent draw|page:nth-of-type("+ +c+") {display:block;}",2);b.insertRule("office|presentation draw|page:nth-of-type("+c+") {display:block;}",3)}var b=a.sheet,c=1;this.showFirstPage=function(){c=1;d()};this.showNextPage=function(){c+=1;d()};this.showPreviousPage=function(){1<c&&(--c,d())};this.showPage=function(a){0<a&&(c=a,d())};this.css=a;this.destroy=function(d){a.parentNode.removeChild(a);d()}}function c(a){a=a.sheet;for(var d=a.cssRules;d.length;)a.deleteRule(d.length-1)}function b(a,d,b){var c=new odf.Style2CSS,e=new odf.ListStyleToCss; +b=b.sheet;var h=(new odf.StyleTree(a.rootElement.styles,a.rootElement.automaticStyles)).getStyleTree();c.style2css(a.getDocumentType(),a.rootElement,b,d.getFontMap(),h);e.applyListStyles(b,h,a.rootElement.body)}function f(a,d){(new odf.FontLoader).loadFonts(a,d.sheet)}function n(a,d,b){var c=null;a=a.rootElement.body.getElementsByTagNameNS(L,b+"-decl");b=d.getAttributeNS(L,"use-"+b+"-name");var e;if(b&&0<a.length)for(d=0;d<a.length;d+=1)if(e=a[d],e.getAttributeNS(L,"name")===b){c=e.textContent;break}return c} +function p(a,d,b,c){var e=a.ownerDocument;d=N.getElementsByTagNameNS(a,d,b);for(a=0;a<d.length;a+=1)N.removeAllChildNodes(d[a]),c&&(b=d[a],b.appendChild(e.createTextNode(c)))}function r(a,d,b){d.setAttributeNS("urn:webodf:names:helper","styleid",a);var c,e=d.getAttributeNS(I,"anchor-type"),h=d.getAttributeNS(t,"x"),m=d.getAttributeNS(t,"y"),f=d.getAttributeNS(t,"width"),l=d.getAttributeNS(t,"height"),n=d.getAttributeNS(w,"min-height"),g=d.getAttributeNS(w,"min-width");if("as-char"===e)c="display: inline-block;"; +else if(e||h||m)c="position: absolute;";else if(f||l||n||g)c="display: block;";h&&(c+="left: "+h+";");m&&(c+="top: "+m+";");f&&(c+="width: "+f+";");l&&(c+="height: "+l+";");n&&(c+="min-height: "+n+";");g&&(c+="min-width: "+g+";");c&&(c="draw|"+d.localName+'[webodfhelper|styleid="'+a+'"] {'+c+"}",b.insertRule(c,b.cssRules.length))}function q(a){for(a=a.firstChild;a;){if(a.namespaceURI===v&&"binary-data"===a.localName)return"data:image/png;base64,"+a.textContent.replace(/[\r\n\s]/g,"");a=a.nextSibling}return""} +function e(a,d,b,c){function e(d){d&&(d='draw|image[webodfhelper|styleid="'+a+'"] {'+("background-image: url("+d+");")+"}",c.insertRule(d,c.cssRules.length))}function h(a){e(a.url)}b.setAttributeNS("urn:webodf:names:helper","styleid",a);var m=b.getAttributeNS(K,"href"),f;if(m)try{f=d.getPart(m),f.onchange=h,f.load()}catch(l){runtime.log("slight problem: "+String(l))}else m=q(b),e(m)}function l(a){var d=a.ownerDocument;N.getElementsByTagNameNS(a,I,"line-break").forEach(function(a){a.hasChildNodes()|| +a.appendChild(d.createElement("br"))})}function a(a){var d=a.ownerDocument;N.getElementsByTagNameNS(a,I,"s").forEach(function(a){var b,c;N.removeAllChildNodes(a);a.appendChild(d.createTextNode(" "));c=parseInt(a.getAttributeNS(I,"c"),10);if(1<c)for(a.removeAttributeNS(I,"c"),b=1;b<c;b+=1)a.parentNode.insertBefore(a.cloneNode(!0),a)})}function d(a){N.getElementsByTagNameNS(a,I,"tab").forEach(function(a){a.textContent="\t"})}function m(a,d){function b(a,c){var m=f.documentElement.namespaceURI;"video/"=== +c.substr(0,6)?(e=f.createElementNS(m,"video"),e.setAttribute("controls","controls"),h=f.createElementNS(m,"source"),a&&h.setAttribute("src",a),h.setAttribute("type",c),e.appendChild(h),d.parentNode.appendChild(e)):d.innerHtml="Unrecognised Plugin"}function c(a){b(a.url,a.mimetype)}var e,h,m,f=d.ownerDocument,l;if(m=d.getAttributeNS(K,"href"))try{l=a.getPart(m),l.onchange=c,l.load()}catch(n){runtime.log("slight problem: "+String(n))}else runtime.log("using MP4 data fallback"),m=q(d),b(m,"video/mp4")} +function h(a){var d=a.getElementsByTagName("head")[0],b,c;b=a.styleSheets.length;for(c=d.firstElementChild;c&&("style"!==c.localName||!c.hasAttribute("webodfcss"));)c=c.nextElementSibling;if(c)return b=parseInt(c.getAttribute("webodfcss"),10),c.setAttribute("webodfcss",b+1),c;"string"===String(typeof webodf_css)?b=webodf_css:(c="webodf.css",runtime.currentDirectory&&(c=runtime.currentDirectory(),0<c.length&&"/"!==c.substr(-1)&&(c+="/"),c+="../webodf.css"),b=runtime.readFileSync(c,"utf-8"));c=a.createElementNS(d.namespaceURI, +"style");c.setAttribute("media","screen, print, handheld, projection");c.setAttribute("type","text/css");c.setAttribute("webodfcss","1");c.appendChild(a.createTextNode(b));d.appendChild(c);return c}function y(a){var d=parseInt(a.getAttribute("webodfcss"),10);1===d?a.parentNode.removeChild(a):a.setAttribute("count",d-1)}function x(a){var d=a.getElementsByTagName("head")[0],b=a.createElementNS(d.namespaceURI,"style"),c="";b.setAttribute("type","text/css");b.setAttribute("media","screen, print, handheld, projection"); +odf.Namespaces.forEachPrefix(function(a,d){c+="@namespace "+a+" url("+d+");\n"});c+="@namespace webodfhelper url(urn:webodf:names:helper);\n";b.appendChild(a.createTextNode(c));d.appendChild(b);return b}var z=odf.Namespaces.drawns,w=odf.Namespaces.fons,v=odf.Namespaces.officens,u=odf.Namespaces.stylens,t=odf.Namespaces.svgns,A=odf.Namespaces.tablens,I=odf.Namespaces.textns,K=odf.Namespaces.xlinkns,L=odf.Namespaces.presentationns,E=xmldom.XPath,N=core.DomUtils;odf.OdfCanvas=function(q,D){function t(a, +d,b){function c(a,d,b,h){na.addToQueue(function(){e(a,d,b,h)})}var h,m;h=d.getElementsByTagNameNS(z,"image");for(d=0;d<h.length;d+=1)m=h.item(d),c("image"+String(d),a,m,b)}function W(a,d){function b(a,d){na.addToQueue(function(){m(a,d)})}var c,e,h;e=d.getElementsByTagNameNS(z,"plugin");for(c=0;c<e.length;c+=1)h=e.item(c),b(a,h)}function w(){var a;a=U.firstChild;var d=ea.getZoomLevel();a&&(U.style.WebkitTransformOrigin="0% 0%",U.style.MozTransformOrigin="0% 0%",U.style.msTransformOrigin="0% 0%",U.style.OTransformOrigin= +"0% 0%",U.style.transformOrigin="0% 0%",M&&((a=M.getMinimumHeightForAnnotationPane())?U.style.minHeight=a:U.style.removeProperty("min-height")),q.style.width=Math.round(d*U.offsetWidth)+"px",q.style.height=Math.round(d*U.offsetHeight)+"px",q.style.display="inline-block")}function K(b,c){var e=ca.sheet;N.removeAllChildNodes(q);U=ha.createElementNS(q.namespaceURI,"div");U.style.display="inline-block";U.style.background="white";U.style.setProperty("float","left","important");U.appendChild(c);q.appendChild(U); +ga=ha.createElementNS(q.namespaceURI,"div");ga.id="annotationsPane";X=ha.createElementNS(q.namespaceURI,"div");X.id="shadowContent";X.style.position="absolute";X.style.top=0;X.style.left=0;b.getContentElement().appendChild(X);var h=c.body,m,f=[],g;for(m=h.firstElementChild;m&&m!==h;)if(m.namespaceURI===z&&(f[f.length]=m),m.firstElementChild)m=m.firstElementChild;else{for(;m&&m!==h&&!m.nextElementSibling;)m=m.parentNode;m&&m.nextElementSibling&&(m=m.nextElementSibling)}for(g=0;g<f.length;g+=1)m=f[g], +r("frame"+String(g),m,e);f=E.getODFElementsWithXPath(h,".//*[*[@text:anchor-type='paragraph']]",odf.Namespaces.lookupNamespaceURI);for(m=0;m<f.length;m+=1)h=f[m],h.setAttributeNS&&h.setAttributeNS("urn:webodf:names:helper","containsparagraphanchor",!0);h=Z;m=X;var k,D,y,x,w=0,J;g=b.rootElement.ownerDocument;if((f=c.body.firstElementChild)&&f.namespaceURI===v&&("presentation"===f.localName||"drawing"===f.localName))for(f=f.firstElementChild;f;){if(k=(k=f.getAttributeNS(z,"master-page-name"))?h.getMasterPageElement(k): +null){D=f.getAttributeNS("urn:webodf:names:helper","styleid");y=g.createElementNS(z,"draw:page");J=k.firstElementChild;for(w=0;J;)"true"!==J.getAttributeNS(L,"placeholder")&&(x=J.cloneNode(!0),y.appendChild(x)),J=J.nextElementSibling,w+=1;J=x=w=void 0;for(var B=N.getElementsByTagNameNS(y,z,"frame"),w=0;w<B.length;w+=1)x=B[w],(J=x.getAttributeNS(L,"class"))&&!/^(date-time|footer|header|page-number)$/.test(J)&&x.parentNode.removeChild(x);x=N.getElementsByTagNameNS(y,z,"*");for(w=0;w<x.length;w+=1)r(D+ +"_"+w,x[w],e);m.appendChild(y);w=String(m.getElementsByTagNameNS(z,"page").length);p(y,I,"page-number",w);p(y,L,"header",n(b,f,"header"));p(y,L,"footer",n(b,f,"footer"));r(D,y,e);y.setAttributeNS("urn:webodf:names:helper","page-style-name",f.getAttributeNS(z,"style-name"));y.setAttributeNS(z,"draw:master-page-name",k.getAttributeNS(u,"name"))}f=f.nextElementSibling}h=q.namespaceURI;f=N.getElementsByTagNameNS(c.body,A,"table-cell");for(m=0;m<f.length;m+=1)g=f[m],g.hasAttributeNS(A,"number-columns-spanned")&& +g.setAttributeNS(h,"colspan",g.getAttributeNS(A,"number-columns-spanned")),g.hasAttributeNS(A,"number-rows-spanned")&&g.setAttributeNS(h,"rowspan",g.getAttributeNS(A,"number-rows-spanned"));l(c.body);a(c.body);d(c.body);t(b,c.body,e);W(b,c.body);U.insertBefore(X,U.firstChild);ea.setZoomableElement(U)}function P(a){B?(ga.parentNode||U.appendChild(ga),M&&M.forgetAnnotations(),M=new gui.AnnotationViewManager(fa,a.body,ga,Y),a=N.getElementsByTagNameNS(a.body,v,"annotation"),M.addAnnotations(a),w()):ga.parentNode&& +(U.removeChild(ga),M.forgetAnnotations(),w())}function aa(a){function d(){c(F);c(ja);c(ca);N.removeAllChildNodes(q);q.style.display="inline-block";var e=C.rootElement;q.ownerDocument.importNode(e,!0);Z.setOdfContainer(C);f(C,F);b(C,Z,ja);K(C,e);P(e);a||na.addToQueue(function(){var a=[C];if(da.hasOwnProperty("statereadychange")){var d=da.statereadychange,b;for(b=0;b<d.length;b+=1)d[b].apply(null,a)}})}C.state===odf.OdfContainer.DONE?d():(runtime.log("WARNING: refreshOdf called but ODF was not DONE."), +qa=runtime.setTimeout(function T(){C.state===odf.OdfContainer.DONE?d():(runtime.log("will be back later..."),qa=runtime.setTimeout(T,500))},100))}function S(a){na.clearQueue();N.removeAllChildNodes(q);q.appendChild(q.ownerDocument.createTextNode(runtime.tr("Loading")+a+"..."));q.removeAttribute("style");C=new odf.OdfContainer(a,function(a){C=a;aa(!1)})}runtime.assert(null!==q&&void 0!==q,"odf.OdfCanvas constructor needs DOM element");runtime.assert(null!==q.ownerDocument&&void 0!==q.ownerDocument, +"odf.OdfCanvas constructor needs DOM");var fa=this,ha=q.ownerDocument,C,Z=new odf.Formatting,ba,U=null,ga=null,B=!1,Y=!1,M=null,Q,F,ja,ca,X,da={},qa,la,ia=!1,ma=!1,na=new g,ea=new gui.ZoomHelper,ka=D||new gui.SingleScrollViewport(q.parentNode);this.refreshCSS=function(){ia=!0;la.trigger()};this.refreshSize=function(){la.trigger()};this.odfContainer=function(){return C};this.setOdfContainer=function(a,d){C=a;aa(!0===d)};this.load=this.load=S;this.save=function(a){C.save(a)};this.addListener=function(a, +d){switch(a){case "click":var b=a;q.addEventListener?q.addEventListener(b,d,!1):q.attachEvent?q.attachEvent("on"+b,d):q["on"+b]=d;break;default:b=da.hasOwnProperty(a)?da[a]:da[a]=[],d&&-1===b.indexOf(d)&&b.push(d)}};this.getFormatting=function(){return Z};this.getAnnotationViewManager=function(){return M};this.refreshAnnotations=function(){P(C.rootElement)};this.rerenderAnnotations=function(){M&&(ma=!0,la.trigger())};this.getSizer=function(){return U};this.enableAnnotations=function(a,d){a!==B&&(B= +a,Y=d,C&&P(C.rootElement))};this.addAnnotation=function(a){M&&(M.addAnnotations([a]),w())};this.forgetAnnotation=function(a){M&&(M.forgetAnnotation(a),w())};this.getZoomHelper=function(){return ea};this.setZoomLevel=function(a){ea.setZoomLevel(a)};this.getZoomLevel=function(){return ea.getZoomLevel()};this.fitToContainingElement=function(a,d){var b=ea.getZoomLevel(),c=q.offsetHeight/b,b=a/(q.offsetWidth/b);d/c<b&&(b=d/c);ea.setZoomLevel(b)};this.fitToWidth=function(a){var d=q.offsetWidth/ea.getZoomLevel(); +ea.setZoomLevel(a/d)};this.fitSmart=function(a,d){var b,c;c=ea.getZoomLevel();b=q.offsetWidth/c;c=q.offsetHeight/c;b=a/b;void 0!==d&&d/c<b&&(b=d/c);ea.setZoomLevel(Math.min(1,b))};this.fitToHeight=function(a){var d=q.offsetHeight/ea.getZoomLevel();ea.setZoomLevel(a/d)};this.showFirstPage=function(){ba.showFirstPage()};this.showNextPage=function(){ba.showNextPage()};this.showPreviousPage=function(){ba.showPreviousPage()};this.showPage=function(a){ba.showPage(a);w()};this.getElement=function(){return q}; +this.getViewport=function(){return ka};this.addCssForFrameWithImage=function(a){var d=a.getAttributeNS(z,"name"),b=a.firstElementChild;r(d,a,ca.sheet);b&&e(d+"img",C,b,ca.sheet)};this.destroy=function(a){var d=ha.getElementsByTagName("head")[0],b=[ba.destroy,la.destroy];runtime.clearTimeout(qa);ga&&ga.parentNode&&ga.parentNode.removeChild(ga);ea.destroy(function(){U&&(q.removeChild(U),U=null)});y(Q);d.removeChild(F);d.removeChild(ja);d.removeChild(ca);core.Async.destroyAll(b,a)};Q=h(ha);ba=new k(x(ha)); +F=x(ha);ja=x(ha);ca=x(ha);la=core.Task.createRedrawTask(function(){ia&&(b(C,Z,ja),ia=!1);ma&&(M&&M.rerenderAnnotations(),ma=!1);w()});ea.subscribe(gui.ZoomHelper.signalZoomChanged,w)}})(); +odf.StepUtils=function(){this.getContentBounds=function(g){var k=g.container(),c,b;runtime.assert(g.isStep(),"Step iterator must be on a step");k.nodeType===Node.TEXT_NODE&&0<g.offset()?c=g.offset():(k=g.leftNode())&&k.nodeType===Node.TEXT_NODE&&(c=k.length);k&&(k.nodeType===Node.TEXT_NODE?(runtime.assert(0<c,"Empty text node found"),b={container:k,startOffset:c-1,endOffset:c}):b={container:k,startOffset:0,endOffset:k.childNodes.length});return b}};ops.MemberProperties=function(){}; +ops.Member=function(g,k){var c=new ops.MemberProperties;this.getMemberId=function(){return g};this.getProperties=function(){return c};this.setProperties=function(b){Object.keys(b).forEach(function(f){c[f]=b[f]})};this.removeProperties=function(b){Object.keys(b).forEach(function(b){"fullName"!==b&&"color"!==b&&"imageUrl"!==b&&c.hasOwnProperty(b)&&delete c[b]})};runtime.assert(Boolean(g),"No memberId was supplied!");k.fullName||(k.fullName=runtime.tr("Unknown Author"));k.color||(k.color="black");k.imageUrl|| +(k.imageUrl="avatar-joe.png");c=k};ops.Document=function(){};ops.Document.prototype.getMemberIds=function(){};ops.Document.prototype.removeCursor=function(g){};ops.Document.prototype.getDocumentElement=function(){};ops.Document.prototype.getRootNode=function(){};ops.Document.prototype.getDOMDocument=function(){};ops.Document.prototype.cloneDocumentElement=function(){};ops.Document.prototype.setDocumentElement=function(g){};ops.Document.prototype.subscribe=function(g,k){}; +ops.Document.prototype.unsubscribe=function(g,k){};ops.Document.prototype.getCanvas=function(){};ops.Document.prototype.createRootFilter=function(g){};ops.Document.prototype.createPositionIterator=function(g){};ops.Document.prototype.hasCursor=function(g){};ops.Document.signalCursorAdded="cursor/added";ops.Document.signalCursorRemoved="cursor/removed";ops.Document.signalCursorMoved="cursor/moved";ops.Document.signalMemberAdded="member/added";ops.Document.signalMemberUpdated="member/updated"; +ops.Document.signalMemberRemoved="member/removed"; +ops.OdtCursor=function(g,k){var c=this,b={},f,n,p=new core.EventNotifier([ops.OdtCursor.signalCursorUpdated]);this.removeFromDocument=function(){n.remove()};this.subscribe=function(b,c){p.subscribe(b,c)};this.unsubscribe=function(b,c){p.unsubscribe(b,c)};this.getMemberId=function(){return g};this.getNode=function(){return n.getNode()};this.getAnchorNode=function(){return n.getAnchorNode()};this.getSelectedRange=function(){return n.getSelectedRange()};this.setSelectedRange=function(b,f){n.setSelectedRange(b, +f);p.emit(ops.OdtCursor.signalCursorUpdated,c)};this.hasForwardSelection=function(){return n.hasForwardSelection()};this.getDocument=function(){return k};this.getSelectionType=function(){return f};this.setSelectionType=function(c){b.hasOwnProperty(c)?f=c:runtime.log("Invalid selection type: "+c)};this.resetSelectionType=function(){c.setSelectionType(ops.OdtCursor.RangeSelection)};n=new core.Cursor(k.getDOMDocument(),g);b[ops.OdtCursor.RangeSelection]=!0;b[ops.OdtCursor.RegionSelection]=!0;c.resetSelectionType()}; +ops.OdtCursor.RangeSelection="Range";ops.OdtCursor.RegionSelection="Region";ops.OdtCursor.signalCursorUpdated="cursorUpdated"; +(function(){var g=0;ops.StepsCache=function(k,c,b){function f(a,d){var c=this;this.nodeId=a;this.steps=-1;this.node=d;this.previousBookmark=this.nextBookmark=null;this.setIteratorPosition=function(a){a.setPositionBeforeElement(d);b(c.steps,a)}}function n(a,d,c){var e=this;this.nodeId=a;this.steps=d;this.node=c;this.previousBookmark=this.nextBookmark=null;this.setIteratorPosition=function(a){a.setUnfilteredPosition(c,0);b(e.steps,a)}}function p(a,d){var b="["+a.nodeId;d&&(b+=" => "+d.nodeId);return b+ +"]"}function r(){if(!0===ops.StepsCache.ENABLE_CACHE_VERIFICATION){for(var a=x,d,b,c,e=new core.LoopWatchDog(0,1E5),h={};a;){e.check();(d=a.previousBookmark)?runtime.assert(d.nextBookmark===a,"Broken bookmark link to previous @"+p(d,a)):(runtime.assert(a===x,"Broken bookmark link @"+p(a)),runtime.assert(void 0===z||x===x||x.steps<=z,"Base point is damaged @"+p(a)));(b=a.nextBookmark)&&runtime.assert(b.previousBookmark===a,"Broken bookmark link to next @"+p(a,b));if(void 0===z||a===x||a.steps<=z)runtime.assert(y.containsNode(k, +a.node),"Disconnected node is being reported as undamaged @"+p(a)),d&&(c=a.node.compareDocumentPosition(d.node),runtime.assert(0===c||0!==(c&v),"Bookmark order with previous does not reflect DOM order @"+p(d,a))),b&&y.containsNode(k,b.node)&&(c=a.node.compareDocumentPosition(b.node),runtime.assert(0===c||0!==(c&w),"Bookmark order with next does not reflect DOM order @"+p(a,b)));a=a.nextBookmark}Object.keys(m).forEach(function(a){var d=m[a];(void 0===z||a<=z)&&runtime.assert(d.steps<=a,"Bookmark step of "+ +d.steps+" exceeds cached step lookup for "+a+" @"+p(d));runtime.assert(!1===h.hasOwnProperty(d.nodeId),"Bookmark "+p(d)+" appears twice in cached step lookup at steps "+h[d.nodeId]+" and "+a);h[d.nodeId]=a})}}function q(a){var d="";a.nodeType===Node.ELEMENT_NODE&&(d=a.getAttributeNS("urn:webodf:names:steps","nodeId")||"");return d}function e(a){var d=g.toString();a.setAttributeNS("urn:webodf:names:steps","nodeId",d);g+=1;return d}function l(a){var d,b,e=new core.LoopWatchDog(0,1E4);void 0!==z&&a> +z&&(a=z);for(d=Math.floor(a/c)*c;!b&&0<=d;)b=m[d],d-=c;for(b=b||x;b.nextBookmark&&b.nextBookmark.steps<=a;)e.check(),b=b.nextBookmark;runtime.assert(-1===a||b.steps<=a,"Bookmark @"+p(b)+" at step "+b.steps+" exceeds requested step of "+a);return b}function a(a){a.previousBookmark&&(a.previousBookmark.nextBookmark=a.nextBookmark);a.nextBookmark&&(a.nextBookmark.previousBookmark=a.previousBookmark)}function d(a){for(var d,b=null;!b&&a&&a!==k;)(d=q(a))&&(b=h[d])&&b.node!==a&&(runtime.log("Cloned node detected. Creating new bookmark"), +b=null,a.removeAttributeNS("urn:webodf:names:steps","nodeId")),a=a.parentNode;return b}var m={},h={},y=core.DomUtils,x,z,w=Node.DOCUMENT_POSITION_FOLLOWING,v=Node.DOCUMENT_POSITION_PRECEDING;this.updateBookmark=function(d,b){var g,n=Math.ceil(d/c)*c,p,v,E;if(void 0!==z&&z<d){p=l(z);for(v=p.nextBookmark;v&&v.steps<=d;)g=v.nextBookmark,E=Math.ceil(v.steps/c)*c,m[E]===v&&delete m[E],y.containsNode(k,v.node)?v.steps=d+1:(a(v),delete h[v.nodeId]),v=g;z=d}else p=l(d);v=q(b)||e(b);g=h[v];g?g.node!==b&&(runtime.log("Cloned node detected. Creating new bookmark"), +v=e(b),g=h[v]=new f(v,b)):g=h[v]=new f(v,b);v=g;v.steps!==d&&(g=Math.ceil(v.steps/c)*c,g!==n&&m[g]===v&&delete m[g],v.steps=d);if(p!==v&&p.nextBookmark!==v){if(p.steps===v.steps)for(;0!==(v.node.compareDocumentPosition(p.node)&w)&&p!==x;)p=p.previousBookmark;p!==v&&p.nextBookmark!==v&&(a(v),g=p.nextBookmark,v.nextBookmark=p.nextBookmark,v.previousBookmark=p,p.nextBookmark=v,g&&(g.previousBookmark=v))}p=m[n];if(!p||v.steps>p.steps)m[n]=v;r()};this.setToClosestStep=function(a,d){var b;r();b=l(a);b.setIteratorPosition(d); +return b.steps};this.setToClosestDomPoint=function(a,b,c){var e,h;r();if(a===k&&0===b)e=x;else if(a===k&&b===k.childNodes.length)for(h in e=x,m)m.hasOwnProperty(h)&&(a=m[h],a.steps>e.steps&&(e=a));else if(e=d(a.childNodes.item(b)||a),!e)for(c.setUnfilteredPosition(a,b);!e&&c.previousNode();)e=d(c.getCurrentNode());e=e||x;void 0!==z&&e.steps>z&&(e=l(z));e.setIteratorPosition(c);return e.steps};this.damageCacheAfterStep=function(a){0>a&&(a=-1);void 0===z?z=a:a<z&&(z=a);r()};(function(){var a=q(k)|| +e(k);x=new n(a,0,k)})()};ops.StepsCache.ENABLE_CACHE_VERIFICATION=!1;ops.StepsCache.Bookmark=function(){};ops.StepsCache.Bookmark.prototype.setIteratorPosition=function(g){}})(); +(function(){ops.OdtStepsTranslator=function(g,k,c,b){function f(a,b,c){var e=b.getCurrentNode();b.isBeforeNode()&&r.isParagraph(e)&&(c||(a+=1),p.updateBookmark(a,e))}function n(d,b){if(!b||c.acceptPosition(d)===e)return!0;for(;d.previousPosition();)if(c.acceptPosition(d)===e){if(b(l,d.container(),d.unfilteredDomOffset()))return!0;break}for(;d.nextPosition();)if(c.acceptPosition(d)===e){if(b(a,d.container(),d.unfilteredDomOffset()))return!0;break}return!1}var p,r=odf.OdfUtils,q=core.DomUtils,e=core.PositionFilter.FilterResult.FILTER_ACCEPT, +l=core.StepDirection.PREVIOUS,a=core.StepDirection.NEXT;this.convertStepsToDomPoint=function(a){var b,h;if(isNaN(a))throw new TypeError("Requested steps is not numeric ("+a+")");if(0>a)throw new RangeError("Requested steps is negative ("+a+")");for(b=p.setToClosestStep(a,k);b<a&&k.nextPosition();)(h=c.acceptPosition(k)===e)&&(b+=1),f(b,k,h);if(b!==a)throw new RangeError("Requested steps ("+a+") exceeds available steps ("+b+")");return{node:k.container(),offset:k.unfilteredDomOffset()}};this.convertDomPointToSteps= +function(a,b,h){var l;q.containsNode(g,a)||(b=0>q.comparePoints(g,0,a,b),a=g,b=b?0:g.childNodes.length);k.setUnfilteredPosition(a,b);n(k,h)||k.setUnfilteredPosition(a,b);h=k.container();b=k.unfilteredDomOffset();a=p.setToClosestDomPoint(h,b,k);if(0>q.comparePoints(k.container(),k.unfilteredDomOffset(),h,b))return 0<a?a-1:a;for(;(k.container()!==h||k.unfilteredDomOffset()!==b)&&k.nextPosition();)(l=c.acceptPosition(k)===e)&&(a+=1),f(a,k,l);return a+0};this.prime=function(){var a,b;for(a=p.setToClosestStep(0, +k);k.nextPosition();)(b=c.acceptPosition(k)===e)&&(a+=1),f(a,k,b)};this.handleStepsInserted=function(a){p.damageCacheAfterStep(a.position)};this.handleStepsRemoved=function(a){p.damageCacheAfterStep(a.position-1)};p=new ops.StepsCache(g,b,function(a,b){do{if(c.acceptPosition(b)===e){f(a,b,!0);break}f(a-1,b,!1)}while(b.nextPosition())})}})();ops.Operation=function(){};ops.Operation.prototype.init=function(g){};ops.Operation.prototype.execute=function(g){};ops.Operation.prototype.spec=function(){}; +ops.TextPositionFilter=function(){function g(b,c){for(;b&&c(b)!==n;)b=b.previousSibling;return b}function k(b,f,e,l){var a;if(f){if(c.isInlineRoot(f)&&c.isGroupingElement(e))return p;l=c.lookLeftForCharacter(f);if(1===l||2===l&&(c.scanRightForAnyCharacter(e)||c.scanRightForAnyCharacter(c.nextNode(b))))return n}else if(c.isGroupingElement(b)&&c.isInlineRoot(g(b.previousSibling,l)))return n;l=null===f&&c.isParagraph(b);a=c.lookRightForCharacter(e);if(l)return a?n:c.scanRightForAnyCharacter(e)?p:n;if(!a)return p; +f=f||c.previousNode(b);return c.scanLeftForAnyCharacter(f)?p:n}var c=odf.OdfUtils,b=Node.ELEMENT_NODE,f=Node.TEXT_NODE,n=core.PositionFilter.FilterResult.FILTER_ACCEPT,p=core.PositionFilter.FilterResult.FILTER_REJECT;this.acceptPosition=function(g){var q=g.container(),e=q.nodeType,l,a,d;if(e!==b&&e!==f)return p;if(e===f){e=g.unfilteredDomOffset();l=q.data;runtime.assert(e!==l.length,"Unexpected offset.");if(0<e){g=l[e-1];if(!c.isODFWhitespace(g))return n;if(1<e)if(g=l[e-2],!c.isODFWhitespace(g))d= +n;else{if(!c.isODFWhitespace(l.substr(0,e)))return p}else a=c.previousNode(q),c.scanLeftForNonSpace(a)&&(d=n);if(d===n)return c.isTrailingWhitespace(q,e)?p:n;g=l[e];return c.isODFWhitespace(g)?p:c.scanLeftForAnyCharacter(c.previousNode(q))?p:n}a=g.leftNode();d=q;q=q.parentNode;d=k(q,a,d,g.getNodeFilter())}else c.isGroupingElement(q)?(a=g.leftNode(),d=g.rightNode(),d=k(q,a,d,g.getNodeFilter())):d=p;return d}}; +function RootFilter(g,k,c){var b=core.PositionFilter.FilterResult.FILTER_ACCEPT,f=core.PositionFilter.FilterResult.FILTER_REJECT;this.acceptPosition=function(n){n=n.container();var p;p="string"===typeof g?k[g].getNode():g;return c(n)===c(p)?b:f}} +ops.OdtDocument=function(g){function k(a){return new core.PositionIterator(a,A,L,!1)}function c(){var a=g.odfContainer().getContentElement(),d=a&&a.localName;runtime.assert("text"===d,"Unsupported content element type '"+d+"' for OdtDocument");return a}function b(){return a.getDocumentElement().ownerDocument}function f(a){for(;a&&!(a.namespaceURI===odf.Namespaces.officens&&"text"===a.localName||a.namespaceURI===odf.Namespaces.officens&&"annotation"===a.localName);)a=a.parentNode;return a}function n(a, +d,b,c){c=k(c);var e;1===b.length?e=b[0]:(e=new core.PositionFilterChain,b.forEach(e.addFilter));b=new core.StepIterator(e,c);b.setPosition(a,d);return b}function p(a){var d=k(c());a=u.convertStepsToDomPoint(a);d.setUnfilteredPosition(a.node,a.offset);return d}function r(a){return a===w}function q(d){var b=d.spec(),c=b.memberid,e=(new Date(b.timestamp)).toISOString(),b=g.odfContainer();d.isEdit&&(c=a.getMember(c).getProperties().fullName,b.setMetadata({"dc:creator":c,"dc:date":e},null),c={setProperties:{"dc:creator":c, +"dc:date":e},removedProperties:[]},t||(c.setProperties["meta:editing-cycles"]=b.incrementEditingCycles(),b.setMetadata(null,["meta:editing-duration","meta:document-statistic"])),t=d,a.emit(ops.OdtDocument.signalMetadataUpdated,c))}function e(a){var b,c=[],e,f=2;runtime.assert(a.isStep(),"positionIterator is not at a step");do{if(b=d.getContentBounds(a))if(b=b.container,m.isDowngradableSpaceElement(b)){for(e=b.lastChild;b.firstChild;)c.push(b.firstChild),b.parentNode.insertBefore(b.firstChild,b);b.parentNode.removeChild(b); +a.setPosition(e,e.nodeType===Node.TEXT_NODE?e.length:e.childNodes.length);a.roundToPreviousStep()}--f}while(0<f&&a.nextStep());c.forEach(h.normalizeTextNodes)}function l(a,d,b){a=a.childNodes.item(d)||a;return(a=m.getParagraphElement(a))&&h.containsNode(b,a)?a:b}var a=this,d,m=odf.OdfUtils,h=core.DomUtils,y={},x={},z=new core.EventNotifier([ops.Document.signalMemberAdded,ops.Document.signalMemberUpdated,ops.Document.signalMemberRemoved,ops.Document.signalCursorAdded,ops.Document.signalCursorRemoved, +ops.Document.signalCursorMoved,ops.OdtDocument.signalParagraphChanged,ops.OdtDocument.signalParagraphStyleModified,ops.OdtDocument.signalCommonStyleCreated,ops.OdtDocument.signalCommonStyleDeleted,ops.OdtDocument.signalTableAdded,ops.OdtDocument.signalOperationStart,ops.OdtDocument.signalOperationEnd,ops.OdtDocument.signalProcessingBatchStart,ops.OdtDocument.signalProcessingBatchEnd,ops.OdtDocument.signalUndoStackChanged,ops.OdtDocument.signalStepsInserted,ops.OdtDocument.signalStepsRemoved,ops.OdtDocument.signalMetadataUpdated, +ops.OdtDocument.signalAnnotationAdded]),w=core.StepDirection.NEXT,v,u,t,A=NodeFilter.SHOW_ALL,I=new gui.BlacklistNamespaceNodeFilter(["urn:webodf:names:cursor","urn:webodf:names:editinfo"]),K=new gui.OdfTextBodyNodeFilter,L=new core.NodeFilterChain([I,K]);this.createPositionIterator=k;this.getDocumentElement=function(){return g.odfContainer().rootElement};this.cloneDocumentElement=function(){var d=a.getDocumentElement(),b=g.getAnnotationViewManager();b&&b.forgetAnnotations();d=d.cloneNode(!0);g.refreshAnnotations(); +a.fixCursorPositions();return d};this.setDocumentElement=function(a){var d=g.odfContainer();z.unsubscribe(ops.OdtDocument.signalStepsInserted,u.handleStepsInserted);z.unsubscribe(ops.OdtDocument.signalStepsRemoved,u.handleStepsRemoved);d.setRootElement(a);g.setOdfContainer(d,!0);g.refreshCSS();a=c();u=new ops.OdtStepsTranslator(a,k(a),v,500);z.subscribe(ops.OdtDocument.signalStepsInserted,u.handleStepsInserted);z.subscribe(ops.OdtDocument.signalStepsRemoved,u.handleStepsRemoved)};this.getDOMDocument= +b;this.getRootElement=f;this.createStepIterator=n;this.getIteratorAtPosition=p;this.convertCursorStepToDomPoint=function(a){return u.convertStepsToDomPoint(a)};this.convertDomPointToCursorStep=function(a,d,b){var c;b===w&&(c=r);return u.convertDomPointToSteps(a,d,c)};this.convertDomToCursorRange=function(a){var d;d=u.convertDomPointToSteps(a.anchorNode,a.anchorOffset);a=a.anchorNode===a.focusNode&&a.anchorOffset===a.focusOffset?d:u.convertDomPointToSteps(a.focusNode,a.focusOffset);return{position:d, +length:a-d}};this.convertCursorToDomRange=function(a,d){var c=b().createRange(),e,h;e=u.convertStepsToDomPoint(a);d?(h=u.convertStepsToDomPoint(a+d),0<d?(c.setStart(e.node,e.offset),c.setEnd(h.node,h.offset)):(c.setStart(h.node,h.offset),c.setEnd(e.node,e.offset))):c.setStart(e.node,e.offset);return c};this.upgradeWhitespacesAtPosition=function(a){var b=p(a),b=new core.StepIterator(v,b),c,e=2;runtime.assert(b.isStep(),"positionIterator is not at a step (requested step: "+a+")");do{if(c=d.getContentBounds(b))if(a= +c.container,c=c.startOffset,a.nodeType===Node.TEXT_NODE&&m.isSignificantWhitespace(a,c)){runtime.assert(" "===a.data[c],"upgradeWhitespaceToElement: textNode.data[offset] should be a literal space");var h=a.ownerDocument.createElementNS(odf.Namespaces.textns,"text:s"),f=a.parentNode,l=a;h.appendChild(a.ownerDocument.createTextNode(" "));1===a.length?f.replaceChild(h,a):(a.deleteData(c,1),0<c&&(c<a.length&&a.splitText(c),l=a.nextSibling),f.insertBefore(h,l));a=h;b.setPosition(a,a.childNodes.length); +b.roundToPreviousStep()}--e}while(0<e&&b.nextStep())};this.downgradeWhitespaces=e;this.downgradeWhitespacesAtPosition=function(a){a=p(a);a=new core.StepIterator(v,a);e(a)};this.getTextNodeAtStep=function(d,c){var e=p(d),h=e.container(),m,f=0,l=null;h.nodeType===Node.TEXT_NODE?(m=h,f=e.unfilteredDomOffset(),0<m.length&&(0<f&&(m=m.splitText(f)),m.parentNode.insertBefore(b().createTextNode(""),m),m=m.previousSibling,f=0)):(m=b().createTextNode(""),f=0,h.insertBefore(m,e.rightNode()));if(c){if(y[c]&& +a.getCursorPosition(c)===d){for(l=y[c].getNode();l.nextSibling&&"cursor"===l.nextSibling.localName;)l.parentNode.insertBefore(l.nextSibling,l);0<m.length&&m.nextSibling!==l&&(m=b().createTextNode(""),f=0);l.parentNode.insertBefore(m,l)}}else for(;m.nextSibling&&"cursor"===m.nextSibling.localName;)m.parentNode.insertBefore(m.nextSibling,m);for(;m.previousSibling&&m.previousSibling.nodeType===Node.TEXT_NODE;)e=m.previousSibling,e.appendData(m.data),f=e.length,m=e,m.parentNode.removeChild(m.nextSibling); +for(;m.nextSibling&&m.nextSibling.nodeType===Node.TEXT_NODE;)e=m.nextSibling,m.appendData(e.data),m.parentNode.removeChild(e);return{textNode:m,offset:f}};this.fixCursorPositions=function(){Object.keys(y).forEach(function(d){var b=y[d],c=f(b.getNode()),e=a.createRootFilter(c),h,m,g,k=!1;g=b.getSelectedRange();h=l(g.startContainer,g.startOffset,c);m=n(g.startContainer,g.startOffset,[v,e],h);g.collapsed?c=m:(h=l(g.endContainer,g.endOffset,c),c=n(g.endContainer,g.endOffset,[v,e],h));m.isStep()&&c.isStep()? +m.container()!==c.container()||m.offset()!==c.offset()||g.collapsed&&b.getAnchorNode()===b.getNode()||(k=!0,g.setStart(m.container(),m.offset()),g.collapse(!0)):(k=!0,runtime.assert(m.roundToClosestStep(),"No walkable step found for cursor owned by "+d),g.setStart(m.container(),m.offset()),runtime.assert(c.roundToClosestStep(),"No walkable step found for cursor owned by "+d),g.setEnd(c.container(),c.offset()));k&&(b.setSelectedRange(g,b.hasForwardSelection()),a.emit(ops.Document.signalCursorMoved, +b))})};this.getCursorPosition=function(a){return(a=y[a])?u.convertDomPointToSteps(a.getNode(),0):0};this.getCursorSelection=function(a){a=y[a];var d=0,b=0;a&&(d=u.convertDomPointToSteps(a.getNode(),0),b=u.convertDomPointToSteps(a.getAnchorNode(),0));return{position:b,length:d-b}};this.getPositionFilter=function(){return v};this.getOdfCanvas=function(){return g};this.getCanvas=function(){return g};this.getRootNode=c;this.addMember=function(a){runtime.assert(void 0===x[a.getMemberId()],"This member already exists"); +x[a.getMemberId()]=a};this.getMember=function(a){return x.hasOwnProperty(a)?x[a]:null};this.removeMember=function(a){delete x[a]};this.getCursor=function(a){return y[a]};this.hasCursor=function(a){return y.hasOwnProperty(a)};this.getMemberIds=function(){return Object.keys(x)};this.addCursor=function(d){runtime.assert(Boolean(d),"OdtDocument::addCursor without cursor");var b=d.getMemberId(),c=a.convertCursorToDomRange(0,0);runtime.assert("string"===typeof b,"OdtDocument::addCursor has cursor without memberid"); +runtime.assert(!y[b],"OdtDocument::addCursor is adding a duplicate cursor with memberid "+b);d.setSelectedRange(c,!0);y[b]=d};this.removeCursor=function(d){var b=y[d];return b?(b.removeFromDocument(),delete y[d],a.emit(ops.Document.signalCursorRemoved,d),!0):!1};this.moveCursor=function(d,b,c,e){d=y[d];b=a.convertCursorToDomRange(b,c);d&&(d.setSelectedRange(b,0<=c),d.setSelectionType(e||ops.OdtCursor.RangeSelection))};this.getFormatting=function(){return g.getFormatting()};this.emit=function(a,d){z.emit(a, +d)};this.subscribe=function(a,d){z.subscribe(a,d)};this.unsubscribe=function(a,d){z.unsubscribe(a,d)};this.createRootFilter=function(a){return new RootFilter(a,y,f)};this.close=function(a){a()};this.destroy=function(a){a()};(function(){var a=c();v=new ops.TextPositionFilter;d=new odf.StepUtils;u=new ops.OdtStepsTranslator(a,k(a),v,500);z.subscribe(ops.OdtDocument.signalStepsInserted,u.handleStepsInserted);z.subscribe(ops.OdtDocument.signalStepsRemoved,u.handleStepsRemoved);z.subscribe(ops.OdtDocument.signalOperationEnd, +q);z.subscribe(ops.OdtDocument.signalProcessingBatchEnd,core.Task.processTasks)})()};ops.OdtDocument.signalParagraphChanged="paragraph/changed";ops.OdtDocument.signalTableAdded="table/added";ops.OdtDocument.signalCommonStyleCreated="style/created";ops.OdtDocument.signalCommonStyleDeleted="style/deleted";ops.OdtDocument.signalParagraphStyleModified="paragraphstyle/modified";ops.OdtDocument.signalOperationStart="operation/start";ops.OdtDocument.signalOperationEnd="operation/end"; +ops.OdtDocument.signalProcessingBatchStart="router/batchstart";ops.OdtDocument.signalProcessingBatchEnd="router/batchend";ops.OdtDocument.signalUndoStackChanged="undo/changed";ops.OdtDocument.signalStepsInserted="steps/inserted";ops.OdtDocument.signalStepsRemoved="steps/removed";ops.OdtDocument.signalMetadataUpdated="metadata/updated";ops.OdtDocument.signalAnnotationAdded="annotation/added"; +ops.OpAddAnnotation=function(){function g(b,c,e){var f=b.getTextNodeAtStep(e,k);f&&(b=f.textNode,e=b.parentNode,f.offset!==b.length&&b.splitText(f.offset),e.insertBefore(c,b.nextSibling),0===b.length&&e.removeChild(b))}var k,c,b,f,n,p;this.init=function(g){k=g.memberid;c=parseInt(g.timestamp,10);b=parseInt(g.position,10);f=void 0!==g.length?parseInt(g.length,10)||0:void 0;n=g.name};this.isEdit=!0;this.group=void 0;this.execute=function(r){var q=r.getCursor(k),e,l;p=r.getDOMDocument();var a=new Date(c), +d,m,h;d=p.createElementNS(odf.Namespaces.officens,"office:annotation");d.setAttributeNS(odf.Namespaces.officens,"office:name",n);e=p.createElementNS(odf.Namespaces.dcns,"dc:creator");e.setAttributeNS("urn:webodf:names:editinfo","editinfo:memberid",k);e.textContent=r.getMember(k).getProperties().fullName;l=p.createElementNS(odf.Namespaces.dcns,"dc:date");l.appendChild(p.createTextNode(a.toISOString()));a=p.createElementNS(odf.Namespaces.textns,"text:list");m=p.createElementNS(odf.Namespaces.textns, +"text:list-item");h=p.createElementNS(odf.Namespaces.textns,"text:p");m.appendChild(h);a.appendChild(m);d.appendChild(e);d.appendChild(l);d.appendChild(a);void 0!==f&&(e=p.createElementNS(odf.Namespaces.officens,"office:annotation-end"),e.setAttributeNS(odf.Namespaces.officens,"office:name",n),d.annotationEndElement=e,g(r,e,b+f));g(r,d,b);r.emit(ops.OdtDocument.signalStepsInserted,{position:b});q&&(e=p.createRange(),l=d.getElementsByTagNameNS(odf.Namespaces.textns,"p")[0],e.selectNodeContents(l), +q.setSelectedRange(e,!1),q.setSelectionType(ops.OdtCursor.RangeSelection),r.emit(ops.Document.signalCursorMoved,q));r.getOdfCanvas().addAnnotation(d);r.fixCursorPositions();r.emit(ops.OdtDocument.signalAnnotationAdded,{memberId:k,annotation:d});return!0};this.spec=function(){return{optype:"AddAnnotation",memberid:k,timestamp:c,position:b,length:f,name:n}}}; +ops.OpAddCursor=function(){var g,k;this.init=function(c){g=c.memberid;k=c.timestamp};this.isEdit=!1;this.group=void 0;this.execute=function(c){var b=c.getCursor(g);if(b)return!1;b=new ops.OdtCursor(g,c);c.addCursor(b);c.emit(ops.Document.signalCursorAdded,b);return!0};this.spec=function(){return{optype:"AddCursor",memberid:g,timestamp:k}}}; +ops.OpAddMember=function(){var g,k,c;this.init=function(b){g=b.memberid;k=parseInt(b.timestamp,10);c=b.setProperties};this.isEdit=!1;this.group=void 0;this.execute=function(b){var f;if(b.getMember(g))return!1;f=new ops.Member(g,c);b.addMember(f);b.emit(ops.Document.signalMemberAdded,f);return!0};this.spec=function(){return{optype:"AddMember",memberid:g,timestamp:k,setProperties:c}}}; +ops.OpAddStyle=function(){var g,k,c,b,f,n,p=odf.Namespaces.stylens;this.init=function(p){g=p.memberid;k=p.timestamp;c=p.styleName;b=p.styleFamily;f="true"===p.isAutomaticStyle||!0===p.isAutomaticStyle;n=p.setProperties};this.isEdit=!0;this.group=void 0;this.execute=function(g){var k=g.getOdfCanvas().odfContainer(),e=g.getFormatting(),l=g.getDOMDocument().createElementNS(p,"style:style");if(!l)return!1;n&&e.updateStyle(l,n);l.setAttributeNS(p,"style:family",b);l.setAttributeNS(p,"style:name",c);f? +k.rootElement.automaticStyles.appendChild(l):k.rootElement.styles.appendChild(l);g.getOdfCanvas().refreshCSS();f||g.emit(ops.OdtDocument.signalCommonStyleCreated,{name:c,family:b});return!0};this.spec=function(){return{optype:"AddStyle",memberid:g,timestamp:k,styleName:c,styleFamily:b,isAutomaticStyle:f,setProperties:n}}}; +odf.ObjectNameGenerator=function(g,k){function c(a,d){var b={};this.generateName=function(){var c=d(),e=0,f;do f=a+e,e+=1;while(b[f]||c[f]);b[f]=!0;return f}}function b(){var a={};[g.rootElement.automaticStyles,g.rootElement.styles].forEach(function(d){for(d=d.firstElementChild;d;)d.namespaceURI===f&&"style"===d.localName&&(a[d.getAttributeNS(f,"name")]=!0),d=d.nextElementSibling});return a}var f=odf.Namespaces.stylens,n=odf.Namespaces.drawns,p=odf.Namespaces.xlinkns,r=(new core.Utils).hashString(k), +q=null,e=null,l=null,a={},d={};this.generateStyleName=function(){null===q&&(q=new c("auto"+r+"_",function(){return b()}));return q.generateName()};this.generateFrameName=function(){var d,b,f;if(null===e){b=g.rootElement.body.getElementsByTagNameNS(n,"frame");for(d=0;d<b.length;d+=1)f=b.item(d),a[f.getAttributeNS(n,"name")]=!0;e=new c("fr"+r+"_",function(){return a})}return e.generateName()};this.generateImageName=function(){var a,b,e;if(null===l){e=g.rootElement.body.getElementsByTagNameNS(n,"image"); +for(a=0;a<e.length;a+=1)b=e.item(a),b=b.getAttributeNS(p,"href"),b=b.substring(9,b.lastIndexOf(".")),d[b]=!0;l=new c("img"+r+"_",function(){return d})}return l.generateName()}}; +odf.TextStyleApplicator=function(g,k,c){function b(b){function c(a,b){return"object"===typeof a&&"object"===typeof b?Object.keys(a).every(function(e){return c(a[e],b[e])}):a===b}var a={};this.isStyleApplied=function(d){d=k.getAppliedStylesForElement(d,a).styleProperties;return c(b,d)}}function f(b){var f={};this.applyStyleToContainer=function(a){var d;d=a.getAttributeNS(r,"style-name");var m=a.ownerDocument;d=d||"";if(!f.hasOwnProperty(d)){var h=d,n;n=d?k.createDerivedStyleObject(d,"text",b):b;m= +m.createElementNS(q,"style:style");k.updateStyle(m,n);m.setAttributeNS(q,"style:name",g.generateStyleName());m.setAttributeNS(q,"style:family","text");m.setAttributeNS("urn:webodf:names:scope","scope","document-content");c.appendChild(m);f[h]=m}d=f[d].getAttributeNS(q,"name");a.setAttributeNS(r,"text:style-name",d)}}function n(b,c){var a=b.ownerDocument,d=b.parentNode,m,h,f,g=new core.LoopWatchDog(1E4);h=[];h.push(b);for(f=b.nextSibling;f&&p.rangeContainsNode(c,f);)g.check(),h.push(f),f=f.nextSibling; +"span"!==d.localName||d.namespaceURI!==r?(m=a.createElementNS(r,"text:span"),d.insertBefore(m,b),a=!1):(b.previousSibling&&!p.rangeContainsNode(c,d.firstChild)?(m=d.cloneNode(!1),d.parentNode.insertBefore(m,d.nextSibling)):m=d,a=!0);h.forEach(function(a){a.parentNode!==m&&m.appendChild(a)});if(f&&a)for(h=m.cloneNode(!1),m.parentNode.insertBefore(h,m.nextSibling);f;)g.check(),a=f.nextSibling,h.appendChild(f),f=a;return m}var p=core.DomUtils,r=odf.Namespaces.textns,q=odf.Namespaces.stylens;this.applyStyle= +function(c,g,a){var d={},m,h,k,p;runtime.assert(a&&a.hasOwnProperty("style:text-properties"),"applyStyle without any text properties");d["style:text-properties"]=a["style:text-properties"];k=new f(d);p=new b(d);c.forEach(function(a){m=p.isStyleApplied(a);!1===m&&(h=n(a,g),k.applyStyleToContainer(h))})}}; +ops.OpApplyDirectStyling=function(){function g(b,c,f){var a=b.getOdfCanvas().odfContainer(),d=r.splitBoundaries(c),m=p.getTextNodes(c,!1);(new odf.TextStyleApplicator(new odf.ObjectNameGenerator(a,k),b.getFormatting(),a.rootElement.automaticStyles)).applyStyle(m,c,f);d.forEach(r.normalizeTextNodes)}var k,c,b,f,n,p=odf.OdfUtils,r=core.DomUtils;this.init=function(g){k=g.memberid;c=g.timestamp;b=parseInt(g.position,10);f=parseInt(g.length,10);n=g.setProperties};this.isEdit=!0;this.group=void 0;this.execute= +function(r){var e=r.convertCursorToDomRange(b,f),l=p.getParagraphElements(e);g(r,e,n);e.detach();r.getOdfCanvas().refreshCSS();r.fixCursorPositions();l.forEach(function(a){r.emit(ops.OdtDocument.signalParagraphChanged,{paragraphElement:a,memberId:k,timeStamp:c})});r.getOdfCanvas().rerenderAnnotations();return!0};this.spec=function(){return{optype:"ApplyDirectStyling",memberid:k,timestamp:c,position:b,length:f,setProperties:n}}}; +ops.OpApplyHyperlink=function(){function g(b){for(;b;){if(r.isHyperlink(b))return!0;b=b.parentNode}return!1}var k,c,b,f,n,p=core.DomUtils,r=odf.OdfUtils;this.init=function(g){k=g.memberid;c=g.timestamp;b=g.position;f=g.length;n=g.hyperlink};this.isEdit=!0;this.group=void 0;this.execute=function(q){var e=q.getDOMDocument(),l=q.convertCursorToDomRange(b,f),a=p.splitBoundaries(l),d=[],m=r.getTextNodes(l,!1);if(0===m.length)return!1;m.forEach(function(a){var b=r.getParagraphElement(a);runtime.assert(!1=== +g(a),"The given range should not contain any link.");var c=n,m=e.createElementNS(odf.Namespaces.textns,"text:a");m.setAttributeNS(odf.Namespaces.xlinkns,"xlink:type","simple");m.setAttributeNS(odf.Namespaces.xlinkns,"xlink:href",c);a.parentNode.insertBefore(m,a);m.appendChild(a);-1===d.indexOf(b)&&d.push(b)});a.forEach(p.normalizeTextNodes);l.detach();q.fixCursorPositions();q.getOdfCanvas().refreshSize();q.getOdfCanvas().rerenderAnnotations();d.forEach(function(a){q.emit(ops.OdtDocument.signalParagraphChanged, +{paragraphElement:a,memberId:k,timeStamp:c})});return!0};this.spec=function(){return{optype:"ApplyHyperlink",memberid:k,timestamp:c,position:b,length:f,hyperlink:n}}}; +ops.OpInsertImage=function(){var g,k,c,b,f,n,p,r,q=odf.Namespaces.drawns,e=odf.Namespaces.svgns,l=odf.Namespaces.textns,a=odf.Namespaces.xlinkns,d=odf.OdfUtils;this.init=function(a){g=a.memberid;k=a.timestamp;c=a.position;b=a.filename;f=a.frameWidth;n=a.frameHeight;p=a.frameStyleName;r=a.frameName};this.isEdit=!0;this.group=void 0;this.execute=function(m){var h=m.getOdfCanvas(),y=m.getTextNodeAtStep(c,g),x,z;if(!y)return!1;x=y.textNode;z=d.getParagraphElement(x);var y=y.offset!==x.length?x.splitText(y.offset): +x.nextSibling,w=m.getDOMDocument(),v=w.createElementNS(q,"draw:image"),w=w.createElementNS(q,"draw:frame");v.setAttributeNS(a,"xlink:href",b);v.setAttributeNS(a,"xlink:type","simple");v.setAttributeNS(a,"xlink:show","embed");v.setAttributeNS(a,"xlink:actuate","onLoad");w.setAttributeNS(q,"draw:style-name",p);w.setAttributeNS(q,"draw:name",r);w.setAttributeNS(l,"text:anchor-type","as-char");w.setAttributeNS(e,"svg:width",f);w.setAttributeNS(e,"svg:height",n);w.appendChild(v);x.parentNode.insertBefore(w, +y);m.emit(ops.OdtDocument.signalStepsInserted,{position:c});0===x.length&&x.parentNode.removeChild(x);h.addCssForFrameWithImage(w);h.refreshCSS();m.emit(ops.OdtDocument.signalParagraphChanged,{paragraphElement:z,memberId:g,timeStamp:k});h.rerenderAnnotations();return!0};this.spec=function(){return{optype:"InsertImage",memberid:g,timestamp:k,filename:b,position:c,frameWidth:f,frameHeight:n,frameStyleName:p,frameName:r}}}; +ops.OpInsertTable=function(){function g(a,d){var c;if(1===e.length)c=e[0];else if(3===e.length)switch(a){case 0:c=e[0];break;case b-1:c=e[2];break;default:c=e[1]}else c=e[a];if(1===c.length)return c[0];if(3===c.length)switch(d){case 0:return c[0];case f-1:return c[2];default:return c[1]}return c[d]}var k,c,b,f,n,p,r,q,e,l=odf.OdfUtils;this.init=function(a){k=a.memberid;c=a.timestamp;n=a.position;b=a.initialRows;f=a.initialColumns;p=a.tableName;r=a.tableStyleName;q=a.tableColumnStyleName;e=a.tableCellStyleMatrix}; +this.isEdit=!0;this.group=void 0;this.execute=function(a){var d=a.getTextNodeAtStep(n),e=a.getRootNode();if(d){var h=a.getDOMDocument(),y=h.createElementNS("urn:oasis:names:tc:opendocument:xmlns:table:1.0","table:table"),x=h.createElementNS("urn:oasis:names:tc:opendocument:xmlns:table:1.0","table:table-column"),z,w,v,u;r&&y.setAttributeNS("urn:oasis:names:tc:opendocument:xmlns:table:1.0","table:style-name",r);p&&y.setAttributeNS("urn:oasis:names:tc:opendocument:xmlns:table:1.0","table:name",p);x.setAttributeNS("urn:oasis:names:tc:opendocument:xmlns:table:1.0", +"table:number-columns-repeated",f);q&&x.setAttributeNS("urn:oasis:names:tc:opendocument:xmlns:table:1.0","table:style-name",q);y.appendChild(x);for(v=0;v<b;v+=1){x=h.createElementNS("urn:oasis:names:tc:opendocument:xmlns:table:1.0","table:table-row");for(u=0;u<f;u+=1)z=h.createElementNS("urn:oasis:names:tc:opendocument:xmlns:table:1.0","table:table-cell"),(w=g(v,u))&&z.setAttributeNS("urn:oasis:names:tc:opendocument:xmlns:table:1.0","table:style-name",w),w=h.createElementNS("urn:oasis:names:tc:opendocument:xmlns:text:1.0", +"text:p"),z.appendChild(w),x.appendChild(z);y.appendChild(x)}d=l.getParagraphElement(d.textNode);e.insertBefore(y,d.nextSibling);a.emit(ops.OdtDocument.signalStepsInserted,{position:n});a.getOdfCanvas().refreshSize();a.emit(ops.OdtDocument.signalTableAdded,{tableElement:y,memberId:k,timeStamp:c});a.getOdfCanvas().rerenderAnnotations();return!0}return!1};this.spec=function(){return{optype:"InsertTable",memberid:k,timestamp:c,position:n,initialRows:b,initialColumns:f,tableName:p,tableStyleName:r,tableColumnStyleName:q, +tableCellStyleMatrix:e}}}; +ops.OpInsertText=function(){function g(b){return"\t"!==b&&p.isODFWhitespace(b)}var k,c,b,f,n,p=odf.OdfUtils;this.init=function(g){k=g.memberid;c=g.timestamp;b=g.position;n=g.text;f="true"===g.moveCursor||!0===g.moveCursor};this.isEdit=!0;this.group=void 0;this.execute=function(r){var q,e,l,a=null,d=r.getDOMDocument(),m,h=0,y,x=r.getCursor(k),z;r.upgradeWhitespacesAtPosition(b);if(q=r.getTextNodeAtStep(b)){e=q.textNode;a=e.nextSibling;l=e.parentNode;m=p.getParagraphElement(e);for(z=0;z<n.length;z+= +1){if(!(y="\t"===n[z])){y=n;var w=z;y=g(y[w])&&(0===w||w===y.length-1||g(y[w-1]))}y&&(0===h?(q.offset!==e.length&&(a=e.splitText(q.offset)),0<z&&e.appendData(n.substring(0,z))):h<z&&(h=n.substring(h,z),l.insertBefore(d.createTextNode(h),a)),h=z+1,"\t"===n[z]?(y=d.createElementNS("urn:oasis:names:tc:opendocument:xmlns:text:1.0","text:tab"),y.appendChild(d.createTextNode("\t"))):(" "!==n[z]&&runtime.log("WARN: InsertText operation contains non-tab, non-space whitespace character (character code "+n.charCodeAt(z)+ +")"),y=d.createElementNS("urn:oasis:names:tc:opendocument:xmlns:text:1.0","text:s"),y.appendChild(d.createTextNode(" "))),l.insertBefore(y,a))}0===h?e.insertData(q.offset,n):h<n.length&&(q=n.substring(h),l.insertBefore(d.createTextNode(q),a));l=e.parentNode;a=e.nextSibling;l.removeChild(e);l.insertBefore(e,a);0===e.length&&e.parentNode.removeChild(e);r.emit(ops.OdtDocument.signalStepsInserted,{position:b});x&&f&&(r.moveCursor(k,b+n.length,0),r.emit(ops.Document.signalCursorMoved,x));r.downgradeWhitespacesAtPosition(b); +r.downgradeWhitespacesAtPosition(b+n.length);r.getOdfCanvas().refreshSize();r.emit(ops.OdtDocument.signalParagraphChanged,{paragraphElement:m,memberId:k,timeStamp:c});r.getOdfCanvas().rerenderAnnotations();return!0}return!1};this.spec=function(){return{optype:"InsertText",memberid:k,timestamp:c,position:b,text:n,moveCursor:f}}}; +odf.CollapsingRules=function(g){function k(c){return b.isODFNode(c)||"br"===c.localName&&b.isLineBreak(c.parentNode)||c.nodeType===Node.TEXT_NODE&&b.isODFNode(c.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}function c(n){var p;n.nodeType===Node.TEXT_NODE?(p=n.parentNode,p.removeChild(n)):p=f.removeUnwantedNodes(n,k);if(n=p)n=p,n=!b.isParagraph(n)&&n!==g&&b.hasNoODFContent(n);return n?c(p):p}var b=odf.OdfUtils,f=core.DomUtils;this.mergeChildrenIntoParent=c}; +ops.OpMergeParagraph=function(){function g(a){return odf.OdfUtils.isInlineRoot(a)?NodeFilter.FILTER_SKIP:l.isGroupingElement(a)&&l.hasNoODFContent(a)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}function k(a){if(a.nodeType===Node.TEXT_NODE){if(0===a.length)return runtime.log("WARN: Empty text node found during merge operation"),!0;if(l.isODFWhitespace(a.data)&&!1===l.isSignificantWhitespace(a,0))return!0;a="#text"}else a=(a.prefix?a.prefix+":":"")+a.localName;runtime.log("WARN: Unexpected text element found near paragraph boundary ["+ +a+"]");return!1}function c(d){d.collapsed||(a.splitBoundaries(d),d=l.getTextElements(d,!1,!0).filter(k),d.forEach(function(a){a.parentNode.removeChild(a)}))}function b(a,d,b){a=a.convertCursorStepToDomPoint(d);var c=l.getParagraphElement(a.node,a.offset);runtime.assert(Boolean(c),"Paragraph not found at step "+d);b&&b.setPosition(a.node,a.offset);return c}var f,n,p,r,q,e,l=odf.OdfUtils,a=core.DomUtils,d=odf.Namespaces.textns;this.init=function(a){f=a.memberid;n=a.timestamp;p=a.moveCursor;r=a.paragraphStyleName; +q=parseInt(a.sourceStartPosition,10);e=parseInt(a.destinationStartPosition,10)};this.isEdit=!0;this.group=void 0;this.execute=function(m){var h,l,k=m.getCursor(f);h=m.getRootNode();var z=new odf.CollapsingRules(h),w=m.createStepIterator(h,0,[m.getPositionFilter()],h),v;runtime.assert(e<q,"Destination paragraph ("+e+") must be before source paragraph ("+q+")");l=b(m,e);h=b(m,q,w);w.previousStep();runtime.assert(a.containsNode(l,w.container()),"Destination paragraph must be adjacent to the source paragraph"); +v=l.ownerDocument.createRange();w.setPosition(l,l.childNodes.length);w.roundToPreviousStep();v.setStart(w.container(),w.offset());v.setEnd(l,l.childNodes.length);c(v);v=l.childNodes.length;var u=h.ownerDocument.createRange();w.setPosition(h,0);w.roundToNextStep();u.setStart(h,0);u.setEnd(w.container(),w.offset());c(u);for(u=h.firstChild;u;)"editinfo"===u.localName?h.removeChild(u):(l.appendChild(u),a.removeUnwantedNodes(u,g)),u=h.firstChild;runtime.assert(0===h.childNodes.length,"Source paragraph should be empty before it is removed"); +z.mergeChildrenIntoParent(h);m.emit(ops.OdtDocument.signalStepsRemoved,{position:q-1});w.setPosition(l,v);w.roundToClosestStep();w.previousStep()||w.roundToNextStep();m.downgradeWhitespaces(w);r?l.setAttributeNS(d,"text:style-name",r):l.removeAttributeNS(d,"style-name");k&&p&&(m.moveCursor(f,q-1,0),m.emit(ops.Document.signalCursorMoved,k));m.fixCursorPositions();m.getOdfCanvas().refreshSize();m.emit(ops.OdtDocument.signalParagraphChanged,{paragraphElement:l,memberId:f,timeStamp:n});m.getOdfCanvas().rerenderAnnotations(); +return!0};this.spec=function(){return{optype:"MergeParagraph",memberid:f,timestamp:n,moveCursor:p,paragraphStyleName:r,sourceStartPosition:q,destinationStartPosition:e}}}; +ops.OpMoveCursor=function(){var g,k,c,b,f;this.init=function(n){g=n.memberid;k=n.timestamp;c=n.position;b=n.length||0;f=n.selectionType||ops.OdtCursor.RangeSelection};this.isEdit=!1;this.group=void 0;this.execute=function(n){var k=n.getCursor(g),r;if(!k)return!1;r=n.convertCursorToDomRange(c,b);k.setSelectedRange(r,0<=b);k.setSelectionType(f);n.emit(ops.Document.signalCursorMoved,k);return!0};this.spec=function(){return{optype:"MoveCursor",memberid:g,timestamp:k,position:c,length:b,selectionType:f}}}; +ops.OpRemoveAnnotation=function(){var g,k,c,b,f=core.DomUtils;this.init=function(f){g=f.memberid;k=f.timestamp;c=parseInt(f.position,10);b=parseInt(f.length,10)};this.isEdit=!0;this.group=void 0;this.execute=function(b){function g(b){q.parentNode.insertBefore(b,q)}for(var k=b.getIteratorAtPosition(c).container(),q;k.namespaceURI!==odf.Namespaces.officens||"annotation"!==k.localName;)k=k.parentNode;if(null===k)return!1;q=k;k=q.annotationEndElement;b.getOdfCanvas().forgetAnnotation(q);f.getElementsByTagNameNS(q, +"urn:webodf:names:cursor","cursor").forEach(g);f.getElementsByTagNameNS(q,"urn:webodf:names:cursor","anchor").forEach(g);q.parentNode.removeChild(q);k&&k.parentNode.removeChild(k);b.emit(ops.OdtDocument.signalStepsRemoved,{position:0<c?c-1:c});b.getOdfCanvas().rerenderAnnotations();b.fixCursorPositions();return!0};this.spec=function(){return{optype:"RemoveAnnotation",memberid:g,timestamp:k,position:c,length:b}}}; +ops.OpRemoveBlob=function(){var g,k,c;this.init=function(b){g=b.memberid;k=b.timestamp;c=b.filename};this.isEdit=!0;this.group=void 0;this.execute=function(b){b.getOdfCanvas().odfContainer().removeBlob(c);return!0};this.spec=function(){return{optype:"RemoveBlob",memberid:g,timestamp:k,filename:c}}}; +ops.OpRemoveCursor=function(){var g,k;this.init=function(c){g=c.memberid;k=c.timestamp};this.isEdit=!1;this.group=void 0;this.execute=function(c){return c.removeCursor(g)?!0:!1};this.spec=function(){return{optype:"RemoveCursor",memberid:g,timestamp:k}}}; +ops.OpRemoveHyperlink=function(){var g,k,c,b,f=core.DomUtils,n=odf.OdfUtils;this.init=function(f){g=f.memberid;k=f.timestamp;c=f.position;b=f.length};this.isEdit=!0;this.group=void 0;this.execute=function(p){var r=p.convertCursorToDomRange(c,b),q=n.getHyperlinkElements(r);runtime.assert(1===q.length,"The given range should only contain a single link.");q=f.mergeIntoParent(q[0]);r.detach();p.fixCursorPositions();p.getOdfCanvas().refreshSize();p.getOdfCanvas().rerenderAnnotations();p.emit(ops.OdtDocument.signalParagraphChanged, +{paragraphElement:n.getParagraphElement(q),memberId:g,timeStamp:k});return!0};this.spec=function(){return{optype:"RemoveHyperlink",memberid:g,timestamp:k,position:c,length:b}}};ops.OpRemoveMember=function(){var g,k;this.init=function(c){g=c.memberid;k=parseInt(c.timestamp,10)};this.isEdit=!1;this.group=void 0;this.execute=function(c){if(!c.getMember(g))return!1;c.removeMember(g);c.emit(ops.Document.signalMemberRemoved,g);return!0};this.spec=function(){return{optype:"RemoveMember",memberid:g,timestamp:k}}}; +ops.OpRemoveStyle=function(){var g,k,c,b;this.init=function(f){g=f.memberid;k=f.timestamp;c=f.styleName;b=f.styleFamily};this.isEdit=!0;this.group=void 0;this.execute=function(f){var g=f.getFormatting().getStyleElement(c,b);if(!g)return!1;g.parentNode.removeChild(g);f.getOdfCanvas().refreshCSS();f.emit(ops.OdtDocument.signalCommonStyleDeleted,{name:c,family:b});return!0};this.spec=function(){return{optype:"RemoveStyle",memberid:g,timestamp:k,styleName:c,styleFamily:b}}}; +ops.OpRemoveText=function(){var g,k,c,b,f=odf.OdfUtils,n=core.DomUtils;this.init=function(f){runtime.assert(0<=f.length,"OpRemoveText only supports positive lengths");g=f.memberid;k=f.timestamp;c=parseInt(f.position,10);b=parseInt(f.length,10)};this.isEdit=!0;this.group=void 0;this.execute=function(p){var r,q,e,l=p.getCursor(g),a=new odf.CollapsingRules(p.getRootNode());p.upgradeWhitespacesAtPosition(c);p.upgradeWhitespacesAtPosition(c+b);r=p.convertCursorToDomRange(c,b);n.splitBoundaries(r);q=f.getTextElements(r, +!1,!0);e=f.getParagraphElement(r.startContainer,r.startOffset);runtime.assert(void 0!==e,"Attempting to remove text outside a paragraph element");r.detach();q.forEach(function(d){d.parentNode?(runtime.assert(n.containsNode(e,d),"RemoveText only supports removing elements within the same paragraph"),a.mergeChildrenIntoParent(d)):runtime.log("WARN: text element has already been removed from it's container")});p.emit(ops.OdtDocument.signalStepsRemoved,{position:c});p.downgradeWhitespacesAtPosition(c); +p.fixCursorPositions();p.getOdfCanvas().refreshSize();p.emit(ops.OdtDocument.signalParagraphChanged,{paragraphElement:e,memberId:g,timeStamp:k});l&&(l.resetSelectionType(),p.emit(ops.Document.signalCursorMoved,l));p.getOdfCanvas().rerenderAnnotations();return!0};this.spec=function(){return{optype:"RemoveText",memberid:g,timestamp:k,position:c,length:b}}}; +ops.OpSetBlob=function(){var g,k,c,b,f;this.init=function(n){g=n.memberid;k=n.timestamp;c=n.filename;b=n.mimetype;f=n.content};this.isEdit=!0;this.group=void 0;this.execute=function(g){g.getOdfCanvas().odfContainer().setBlob(c,b,f);return!0};this.spec=function(){return{optype:"SetBlob",memberid:g,timestamp:k,filename:c,mimetype:b,content:f}}}; +ops.OpSetParagraphStyle=function(){function g(b,c,f){var e=[b.getPositionFilter()],g=f.container();f=f.unfilteredDomOffset();return!1===b.createStepIterator(g,f,e,c).previousStep()}var k,c,b,f,n=odf.OdfUtils;this.init=function(g){k=g.memberid;c=g.timestamp;b=g.position;f=g.styleName};this.isEdit=!0;this.group=void 0;this.execute=function(p){var r,q;r=p.getIteratorAtPosition(b);return(q=n.getParagraphElement(r.container()))?(runtime.assert(g(p,q,r),"SetParagraphStyle position should be the first position in the paragraph"), +f?q.setAttributeNS("urn:oasis:names:tc:opendocument:xmlns:text:1.0","text:style-name",f):q.removeAttributeNS("urn:oasis:names:tc:opendocument:xmlns:text:1.0","style-name"),p.getOdfCanvas().refreshSize(),p.emit(ops.OdtDocument.signalParagraphChanged,{paragraphElement:q,timeStamp:c,memberId:k}),p.getOdfCanvas().rerenderAnnotations(),!0):!1};this.spec=function(){return{optype:"SetParagraphStyle",memberid:k,timestamp:c,position:b,styleName:f}}}; +ops.OpSplitParagraph=function(){var g,k,c,b,f,n,p=odf.OdfUtils,r=odf.Namespaces.textns;this.init=function(p){g=p.memberid;k=p.timestamp;b=p.position;c=p.sourceParagraphPosition;n=p.paragraphStyleName;f="true"===p.moveCursor||!0===p.moveCursor};this.isEdit=!0;this.group=void 0;this.execute=function(c){var e,l,a,d,m,h,y,x=c.getCursor(g);c.upgradeWhitespacesAtPosition(b);e=c.getTextNodeAtStep(b);if(!e)return!1;l=p.getParagraphElement(e.textNode);if(!l)return!1;a=p.isListItem(l.parentNode)?l.parentNode: +l;0===e.offset?(y=e.textNode.previousSibling,h=null):(y=e.textNode,h=e.offset>=e.textNode.length?null:e.textNode.splitText(e.offset));for(d=e.textNode;d!==a;){d=d.parentNode;m=d.cloneNode(!1);h&&m.appendChild(h);if(y)for(;y&&y.nextSibling;)m.appendChild(y.nextSibling);else for(;d.firstChild;)m.appendChild(d.firstChild);d.parentNode.insertBefore(m,d.nextSibling);y=d;h=m}p.isListItem(h)&&(h=h.childNodes.item(0));n?h.setAttributeNS(r,"text:style-name",n):h.removeAttributeNS(r,"style-name");0===e.textNode.length&& +e.textNode.parentNode.removeChild(e.textNode);c.emit(ops.OdtDocument.signalStepsInserted,{position:b});x&&f&&(c.moveCursor(g,b+1,0),c.emit(ops.Document.signalCursorMoved,x));c.fixCursorPositions();c.getOdfCanvas().refreshSize();c.emit(ops.OdtDocument.signalParagraphChanged,{paragraphElement:l,memberId:g,timeStamp:k});c.emit(ops.OdtDocument.signalParagraphChanged,{paragraphElement:h,memberId:g,timeStamp:k});c.getOdfCanvas().rerenderAnnotations();return!0};this.spec=function(){return{optype:"SplitParagraph", +memberid:g,timestamp:k,position:b,sourceParagraphPosition:c,paragraphStyleName:n,moveCursor:f}}}; +ops.OpUpdateMember=function(){function g(c){var f="//dc:creator[@editinfo:memberid='"+k+"']";c=xmldom.XPath.getODFElementsWithXPath(c.getRootNode(),f,function(b){return"editinfo"===b?"urn:webodf:names:editinfo":odf.Namespaces.lookupNamespaceURI(b)});for(f=0;f<c.length;f+=1)c[f].textContent=b.fullName}var k,c,b,f;this.init=function(g){k=g.memberid;c=parseInt(g.timestamp,10);b=g.setProperties;f=g.removedProperties};this.isEdit=!1;this.group=void 0;this.execute=function(c){var p=c.getMember(k);if(!p)return!1; +f&&p.removeProperties(f);b&&(p.setProperties(b),b.fullName&&g(c));c.emit(ops.Document.signalMemberUpdated,p);return!0};this.spec=function(){return{optype:"UpdateMember",memberid:k,timestamp:c,setProperties:b,removedProperties:f}}}; +ops.OpUpdateMetadata=function(){var g,k,c,b;this.init=function(f){g=f.memberid;k=parseInt(f.timestamp,10);c=f.setProperties;b=f.removedProperties};this.isEdit=!0;this.group=void 0;this.execute=function(f){var g=f.getOdfCanvas().odfContainer(),k=null;b&&(k=b.attributes.split(","));g.setMetadata(c,k);f.emit(ops.OdtDocument.signalMetadataUpdated,{setProperties:null!==c?c:{},removedProperties:null!==k?k:[]});return!0};this.spec=function(){return{optype:"UpdateMetadata",memberid:g,timestamp:k,setProperties:c, +removedProperties:b}}}; +ops.OpUpdateParagraphStyle=function(){function g(b,c){var e,f,a=c?c.split(","):[];for(e=0;e<a.length;e+=1)f=a[e].split(":"),b.removeAttributeNS(odf.Namespaces.lookupNamespaceURI(f[0]),f[1])}var k,c,b,f,n,p=odf.Namespaces.stylens;this.init=function(g){k=g.memberid;c=g.timestamp;b=g.styleName;f=g.setProperties;n=g.removedProperties};this.isEdit=!0;this.group=void 0;this.execute=function(c){var k=c.getFormatting(),e,l,a;return(e=""!==b?k.getStyleElement(b,"paragraph"):k.getDefaultStyleElement("paragraph"))?(l= +e.getElementsByTagNameNS(p,"paragraph-properties").item(0),a=e.getElementsByTagNameNS(p,"text-properties").item(0),f&&k.updateStyle(e,f),n&&(k=n["style:paragraph-properties"],l&&k&&(g(l,k.attributes),0===l.attributes.length&&e.removeChild(l)),k=n["style:text-properties"],a&&k&&(g(a,k.attributes),0===a.attributes.length&&e.removeChild(a)),g(e,n.attributes)),c.getOdfCanvas().refreshCSS(),c.emit(ops.OdtDocument.signalParagraphStyleModified,b),c.getOdfCanvas().rerenderAnnotations(),!0):!1};this.spec= +function(){return{optype:"UpdateParagraphStyle",memberid:k,timestamp:c,styleName:b,setProperties:f,removedProperties:n}}}; +ops.OperationFactory=function(){function g(c){return function(b){return new c}}var k;this.register=function(c,b){k[c]=b};this.create=function(c){var b=null,f=k[c.optype];f&&(b=f(c),b.init(c));return b};k={AddMember:g(ops.OpAddMember),UpdateMember:g(ops.OpUpdateMember),RemoveMember:g(ops.OpRemoveMember),AddCursor:g(ops.OpAddCursor),ApplyDirectStyling:g(ops.OpApplyDirectStyling),SetBlob:g(ops.OpSetBlob),RemoveBlob:g(ops.OpRemoveBlob),InsertImage:g(ops.OpInsertImage),InsertTable:g(ops.OpInsertTable), +InsertText:g(ops.OpInsertText),RemoveText:g(ops.OpRemoveText),MergeParagraph:g(ops.OpMergeParagraph),SplitParagraph:g(ops.OpSplitParagraph),SetParagraphStyle:g(ops.OpSetParagraphStyle),UpdateParagraphStyle:g(ops.OpUpdateParagraphStyle),AddStyle:g(ops.OpAddStyle),RemoveStyle:g(ops.OpRemoveStyle),MoveCursor:g(ops.OpMoveCursor),RemoveCursor:g(ops.OpRemoveCursor),AddAnnotation:g(ops.OpAddAnnotation),RemoveAnnotation:g(ops.OpRemoveAnnotation),UpdateMetadata:g(ops.OpUpdateMetadata),ApplyHyperlink:g(ops.OpApplyHyperlink), +RemoveHyperlink:g(ops.OpRemoveHyperlink)}};ops.OperationRouter=function(){};ops.OperationRouter.prototype.setOperationFactory=function(g){};ops.OperationRouter.prototype.setPlaybackFunction=function(g){};ops.OperationRouter.prototype.push=function(g){};ops.OperationRouter.prototype.close=function(g){};ops.OperationRouter.prototype.subscribe=function(g,k){};ops.OperationRouter.prototype.unsubscribe=function(g,k){};ops.OperationRouter.prototype.hasLocalUnsyncedOps=function(){}; +ops.OperationRouter.prototype.hasSessionHostConnection=function(){};ops.OperationRouter.signalProcessingBatchStart="router/batchstart";ops.OperationRouter.signalProcessingBatchEnd="router/batchend"; +ops.TrivialOperationRouter=function(){var g=new core.EventNotifier([ops.OperationRouter.signalProcessingBatchStart,ops.OperationRouter.signalProcessingBatchEnd]),k,c,b=0;this.setOperationFactory=function(b){k=b};this.setPlaybackFunction=function(b){c=b};this.push=function(f){b+=1;g.emit(ops.OperationRouter.signalProcessingBatchStart,{});f.forEach(function(f){f=f.spec();f.timestamp=Date.now();f=k.create(f);f.group="g"+b;c(f)});g.emit(ops.OperationRouter.signalProcessingBatchEnd,{})};this.close=function(b){b()}; +this.subscribe=function(b,c){g.subscribe(b,c)};this.unsubscribe=function(b,c){g.unsubscribe(b,c)};this.hasLocalUnsyncedOps=function(){return!1};this.hasSessionHostConnection=function(){return!0}}; +ops.Session=function(g){function k(b){f.emit(ops.OdtDocument.signalProcessingBatchStart,b)}function c(b){f.emit(ops.OdtDocument.signalProcessingBatchEnd,b)}var b=new ops.OperationFactory,f=new ops.OdtDocument(g),n=null;this.setOperationFactory=function(c){b=c;n&&n.setOperationFactory(b)};this.setOperationRouter=function(g){n&&(n.unsubscribe(ops.OperationRouter.signalProcessingBatchStart,k),n.unsubscribe(ops.OperationRouter.signalProcessingBatchEnd,c));n=g;n.subscribe(ops.OperationRouter.signalProcessingBatchStart, +k);n.subscribe(ops.OperationRouter.signalProcessingBatchEnd,c);g.setPlaybackFunction(function(b){f.emit(ops.OdtDocument.signalOperationStart,b);return b.execute(f)?(f.emit(ops.OdtDocument.signalOperationEnd,b),!0):!1});g.setOperationFactory(b)};this.getOperationFactory=function(){return b};this.getOdtDocument=function(){return f};this.enqueue=function(b){n.push(b)};this.close=function(b){n.close(function(c){c?b(c):f.close(b)})};this.destroy=function(b){f.destroy(b)};this.setOperationRouter(new ops.TrivialOperationRouter)}; +gui.AnnotationController=function(g,k,c){function b(){var a=r.getCursor(c),a=a&&a.getNode(),b=!1;a&&(b=!l.isWithinAnnotation(a,r.getRootNode()));b!==q&&(q=b,e.emit(gui.AnnotationController.annotatableChanged,q))}function f(a){a.getMemberId()===c&&b()}function n(a){a===c&&b()}function p(a){a.getMemberId()===c&&b()}var r=g.getOdtDocument(),q=!1,e=new core.EventNotifier([gui.AnnotationController.annotatableChanged]),l=odf.OdfUtils,a=core.StepDirection.NEXT;this.isAnnotatable=function(){return q};this.addAnnotation= +function(){var a=new ops.OpAddAnnotation,b=r.getCursorSelection(c),e=b.length,b=b.position;q&&(0===e?e=void 0:(b=0<=e?b:b+e,e=Math.abs(e)),a.init({memberid:c,position:b,length:e,name:c+Date.now()}),g.enqueue([a]))};this.removeAnnotation=function(d){var b,e;b=r.getMember(c).getProperties().fullName;if(!0!==k.getState(gui.CommonConstraints.EDIT.ANNOTATIONS.ONLY_DELETE_OWN)||b===l.getAnnotationCreator(d))b=r.convertDomPointToCursorStep(d,0,a),e=r.convertDomPointToCursorStep(d,d.childNodes.length),d= +new ops.OpRemoveAnnotation,d.init({memberid:c,position:b,length:e-b}),e=new ops.OpMoveCursor,e.init({memberid:c,position:0<b?b-1:b,length:0}),g.enqueue([d,e])};this.subscribe=function(a,b){e.subscribe(a,b)};this.unsubscribe=function(a,b){e.unsubscribe(a,b)};this.destroy=function(a){r.unsubscribe(ops.Document.signalCursorAdded,f);r.unsubscribe(ops.Document.signalCursorRemoved,n);r.unsubscribe(ops.Document.signalCursorMoved,p);a()};k.registerConstraint(gui.CommonConstraints.EDIT.ANNOTATIONS.ONLY_DELETE_OWN); +r.subscribe(ops.Document.signalCursorAdded,f);r.subscribe(ops.Document.signalCursorRemoved,n);r.subscribe(ops.Document.signalCursorMoved,p);b()};gui.AnnotationController.annotatableChanged="annotatable/changed"; +gui.Avatar=function(g,k){var c=this,b,f,n;this.setColor=function(b){f.style.borderColor=b};this.setImageUrl=function(b){c.isVisible()?f.src=b:n=b};this.isVisible=function(){return"block"===b.style.display};this.show=function(){n&&(f.src=n,n=void 0);b.style.display="block"};this.hide=function(){b.style.display="none"};this.markAsFocussed=function(c){c?b.classList.add("active"):b.classList.remove("active")};this.destroy=function(c){g.removeChild(b);c()};(function(){var c=g.ownerDocument;b=c.createElement("div"); +f=c.createElement("img");b.appendChild(f);b.style.display=k?"block":"none";b.className="handle";g.appendChild(b)})()};gui.StepInfo=function(){};gui.StepInfo.VisualDirection={LEFT_TO_RIGHT:0,RIGHT_TO_LEFT:1};gui.StepInfo.prototype.container=function(){};gui.StepInfo.prototype.offset=function(){};gui.VisualStepScanner=function(){};gui.VisualStepScanner.prototype.process=function(g,k,c){}; +gui.GuiStepUtils=function(){function g(f){f=c.getContentBounds(f);var g,e=null;if(f)if(f.container.nodeType===Node.TEXT_NODE)g=f.container.ownerDocument.createRange(),g.setStart(f.container,f.startOffset),g.setEnd(f.container,f.endOffset),(e=0<g.getClientRects().length?g.getBoundingClientRect():null)&&" "===f.container.data.substring(f.startOffset,f.endOffset)&&1>=e.width&&(e=null),g.detach();else if(k.isCharacterElement(f.container)||k.isCharacterFrame(f.container))e=b.getBoundingClientRect(f.container); +return e}var k=odf.OdfUtils,c=new odf.StepUtils,b=core.DomUtils,f=core.StepDirection.NEXT,n=gui.StepInfo.VisualDirection.LEFT_TO_RIGHT,p=gui.StepInfo.VisualDirection.RIGHT_TO_LEFT;this.getContentRect=g;this.moveToFilteredStep=function(b,c,e){function l(a,b){b.process(w,h,k)&&(a=!0,!x&&b.token&&(x=b.token));return a}var a=c===f,d,m,h,k,x,z=b.snapshot();d=!1;var w;do d=g(b),w={token:b.snapshot(),container:b.container,offset:b.offset,direction:c,visualDirection:c===f?n:p},m=b.nextStep()?g(b):null,b.restore(w.token), +a?(h=d,k=m):(h=m,k=d),d=e.reduce(l,!1);while(!d&&b.advanceStep(c));d||e.forEach(function(a){!x&&a.token&&(x=a.token)});b.restore(x||z);return Boolean(x)}}; +gui.Caret=function(g,k,c,b){function f(){a.style.opacity="0"===a.style.opacity?"1":"0";t.trigger()}function n(){y.selectNodeContents(h);return y.getBoundingClientRect()}function p(a){return E[a]!==L[a]}function r(){Object.keys(L).forEach(function(a){E[a]=L[a]})}function q(){if(!1===L.isShown||g.getSelectionType()!==ops.OdtCursor.RangeSelection||!b&&!g.getSelectedRange().collapsed)L.visibility="hidden",a.style.visibility="hidden",t.cancel();else if(L.visibility="visible",a.style.visibility="visible", +!1===L.isFocused)a.style.opacity="1",t.cancel();else{if(A||p("visibility"))a.style.opacity="1",t.cancel();t.trigger()}if(K||I){var c;c=g.getNode();var e,h,f=z.getBoundingClientRect(x.getSizer()),q=!1,y=0;c.removeAttributeNS("urn:webodf:names:cursor","caret-sizer-active");if(0<c.getClientRects().length)h=n(),y=h.left-z.getBoundingClientRect(c).left,q=!0;else if(v.setPosition(c,0),h=w.getContentRect(v),!h&&v.nextStep()&&(e=w.getContentRect(v))&&(h=e,q=!0),h||(c.setAttributeNS("urn:webodf:names:cursor", +"caret-sizer-active","true"),h=n(),q=!0),!h)for(runtime.log("WARN: No suitable client rectangle found for visual caret for "+g.getMemberId());c;){if(0<c.getClientRects().length){h=z.getBoundingClientRect(c);q=!0;break}c=c.parentNode}h=z.translateRect(h,f,x.getZoomLevel());c={top:h.top,height:h.height,right:q?h.left:h.right,width:z.adaptRangeDifferenceToZoomLevel(y,x.getZoomLevel())};8>c.height&&(c={top:c.top-(8-c.height)/2,height:8,right:c.right});l.style.height=c.height+"px";l.style.top=c.top+"px"; +l.style.left=c.right-c.width+"px";l.style.width=c.width?c.width+"px":"";m&&(c=runtime.getWindow().getComputedStyle(g.getNode(),null),c.font?m.style.font=c.font:(m.style.fontStyle=c.fontStyle,m.style.fontVariant=c.fontVariant,m.style.fontWeight=c.fontWeight,m.style.fontSize=c.fontSize,m.style.lineHeight=c.lineHeight,m.style.fontFamily=c.fontFamily))}L.isShown&&I&&k.scrollIntoView(a.getBoundingClientRect());p("isFocused")&&d.markAsFocussed(L.isFocused);r();K=I=A=!1}function e(a){l.parentNode.removeChild(l); +h.parentNode.removeChild(h);a()}var l,a,d,m,h,y,x=g.getDocument().getCanvas(),z=core.DomUtils,w=new gui.GuiStepUtils,v,u,t,A=!1,I=!1,K=!1,L={isFocused:!1,isShown:!0,visibility:"hidden"},E={isFocused:!L.isFocused,isShown:!L.isShown,visibility:"hidden"};this.handleUpdate=function(){K=!0;u.trigger()};this.refreshCursorBlinking=function(){A=!0;u.trigger()};this.setFocus=function(){L.isFocused=!0;u.trigger()};this.removeFocus=function(){L.isFocused=!1;u.trigger()};this.show=function(){L.isShown=!0;u.trigger()}; +this.hide=function(){L.isShown=!1;u.trigger()};this.setAvatarImageUrl=function(a){d.setImageUrl(a)};this.setColor=function(b){a.style.borderColor=b;d.setColor(b)};this.getCursor=function(){return g};this.getFocusElement=function(){return a};this.toggleHandleVisibility=function(){d.isVisible()?d.hide():d.show()};this.showHandle=function(){d.show()};this.hideHandle=function(){d.hide()};this.setOverlayElement=function(a){m=a;l.appendChild(a);K=!0;u.trigger()};this.ensureVisible=function(){I=!0;u.trigger()}; +this.getBoundingClientRect=function(){return z.getBoundingClientRect(l)};this.destroy=function(a){core.Async.destroyAll([u.destroy,t.destroy,d.destroy,e],a)};(function(){var b=g.getDocument(),e=[b.createRootFilter(g.getMemberId()),b.getPositionFilter()],m=b.getDOMDocument();y=m.createRange();h=m.createElement("span");h.className="webodf-caretSizer";h.textContent="|";g.getNode().appendChild(h);l=m.createElement("div");l.setAttributeNS("urn:webodf:names:editinfo","editinfo:memberid",g.getMemberId()); +l.className="webodf-caretOverlay";a=m.createElement("div");a.className="caret";l.appendChild(a);d=new gui.Avatar(l,c);x.getSizer().appendChild(l);v=b.createStepIterator(g.getNode(),0,e,b.getRootNode());u=core.Task.createRedrawTask(q);t=core.Task.createTimeoutTask(f,500);u.triggerImmediate()})()}; +odf.TextSerializer=function(){function g(b){var f="",n=k.filter?k.filter.acceptNode(b):NodeFilter.FILTER_ACCEPT,p=b.nodeType,r;if((n===NodeFilter.FILTER_ACCEPT||n===NodeFilter.FILTER_SKIP)&&c.isTextContentContainingNode(b))for(r=b.firstChild;r;)f+=g(r),r=r.nextSibling;n===NodeFilter.FILTER_ACCEPT&&(p===Node.ELEMENT_NODE&&c.isParagraph(b)?f+="\n":p===Node.TEXT_NODE&&b.textContent&&(f+=b.textContent));return f}var k=this,c=odf.OdfUtils;this.filter=null;this.writeToString=function(b){if(!b)return""; +b=g(b);"\n"===b[b.length-1]&&(b=b.substr(0,b.length-1));return b}};gui.MimeDataExporter=function(){var g;this.exportRangeToDataTransfer=function(k,c){var b;b=c.startContainer.ownerDocument.createElement("span");b.appendChild(c.cloneContents());b=g.writeToString(b);try{k.setData("text/plain",b)}catch(f){k.setData("Text",b)}};g=new odf.TextSerializer;g.filter=new odf.OdfNodeFilter}; +gui.Clipboard=function(g){this.setDataFromRange=function(k,c){var b,f=k.clipboardData;b=runtime.getWindow();!f&&b&&(f=b.clipboardData);f?(b=!0,g.exportRangeToDataTransfer(f,c),k.preventDefault()):b=!1;return b}}; +gui.SessionContext=function(g,k){var c=g.getOdtDocument(),b=odf.OdfUtils;this.isLocalCursorWithinOwnAnnotation=function(){var f=c.getCursor(k),g;if(!f)return!1;g=f&&f.getNode();f=c.getMember(k).getProperties().fullName;return(g=b.getParentAnnotation(g,c.getRootNode()))&&b.getAnnotationCreator(g)===f?!0:!1}}; +gui.StyleSummary=function(g){function k(b,c){var k=b+"|"+c,q;f.hasOwnProperty(k)||(q=[],g.forEach(function(e){e=(e=e.styleProperties[b])&&e[c];-1===q.indexOf(e)&&q.push(e)}),f[k]=q);return f[k]}function c(b,c,f){return function(){var g=k(b,c);return f.length>=g.length&&g.every(function(b){return-1!==f.indexOf(b)})}}function b(b,c){var f=k(b,c);return 1===f.length?f[0]:void 0}var f={};this.getPropertyValues=k;this.getCommonValue=b;this.isBold=c("style:text-properties","fo:font-weight",["bold"]);this.isItalic= +c("style:text-properties","fo:font-style",["italic"]);this.hasUnderline=c("style:text-properties","style:text-underline-style",["solid"]);this.hasStrikeThrough=c("style:text-properties","style:text-line-through-style",["solid"]);this.fontSize=function(){var c=b("style:text-properties","fo:font-size");return c&&parseFloat(c)};this.fontName=function(){return b("style:text-properties","style:font-name")};this.isAlignedLeft=c("style:paragraph-properties","fo:text-align",["left","start"]);this.isAlignedCenter= +c("style:paragraph-properties","fo:text-align",["center"]);this.isAlignedRight=c("style:paragraph-properties","fo:text-align",["right","end"]);this.isAlignedJustified=c("style:paragraph-properties","fo:text-align",["justify"]);this.text={isBold:this.isBold,isItalic:this.isItalic,hasUnderline:this.hasUnderline,hasStrikeThrough:this.hasStrikeThrough,fontSize:this.fontSize,fontName:this.fontName};this.paragraph={isAlignedLeft:this.isAlignedLeft,isAlignedCenter:this.isAlignedCenter,isAlignedRight:this.isAlignedRight, +isAlignedJustified:this.isAlignedJustified}}; +gui.DirectFormattingController=function(g,k,c,b,f,n,p){function r(){return U.value().styleSummary}function q(){return U.value().enabledFeatures}function e(a){var b;a.collapsed?(b=a.startContainer,b.hasChildNodes()&&a.startOffset<b.childNodes.length&&(b=b.childNodes.item(a.startOffset)),a=[b]):a=S.getTextElements(a,!0,!1);return a}function l(){var a=P.getCursor(b),d=a&&a.getSelectedRange(),h=[],h=[],f=!0,g={directTextStyling:!0,directParagraphStyling:!0};d&&(h=e(d),0===h.length&&(h=[d.startContainer, +d.endContainer],f=!1),h=P.getFormatting().getAppliedStyles(h));void 0!==h[0]&&Z&&(h[0].styleProperties=aa.mergeObjects(h[0].styleProperties,Z));!0===k.getState(gui.CommonConstraints.EDIT.REVIEW_MODE)&&(g.directTextStyling=g.directParagraphStyling=c.isLocalCursorWithinOwnAnnotation());g.directTextStyling&&(g.directTextStyling=f&&void 0!==a&&a.getSelectionType()===ops.OdtCursor.RangeSelection);return{enabledFeatures:g,appliedStyles:h,styleSummary:new gui.StyleSummary(h)}}function a(a,b){var d={};Object.keys(a).forEach(function(c){var e= +a[c](),h=b[c]();e!==h&&(d[c]=h)});return d}function d(){var b,d;d=ba.styleSummary;var c=U.value(),e=c.styleSummary,h=ba.enabledFeatures,f=c.enabledFeatures;b=a(d.text,e.text);d=a(d.paragraph,e.paragraph);h=!(f.directTextStyling===h.directTextStyling&&f.directParagraphStyling===h.directParagraphStyling);ba=c;h&&fa.emit(gui.DirectFormattingController.enabledChanged,f);0<Object.keys(b).length&&fa.emit(gui.DirectFormattingController.textStylingChanged,b);0<Object.keys(d).length&&fa.emit(gui.DirectFormattingController.paragraphStylingChanged, +d)}function m(){U.reset();d()}function h(a){("string"===typeof a?a:a.getMemberId())===b&&U.reset()}function y(){U.reset()}function x(a){var d=P.getCursor(b);a=a.paragraphElement;d&&S.getParagraphElement(d.getNode())===a&&U.reset()}function z(a,b){b(!a());return!0}function w(a){if(q().directTextStyling){var d=P.getCursorSelection(b),c={"style:text-properties":a};0!==d.length?(a=new ops.OpApplyDirectStyling,a.init({memberid:b,position:d.position,length:d.length,setProperties:c}),g.enqueue([a])):(Z= +aa.mergeObjects(Z||{},c),U.reset())}}function v(a,b){var d={};d[a]=b;w(d)}function u(a){a=a.spec();Z&&a.memberid===b&&"SplitParagraph"!==a.optype&&(Z=null,U.reset())}function t(a){v("fo:font-weight",a?"bold":"normal")}function A(a){v("fo:font-style",a?"italic":"normal")}function I(a){v("style:text-underline-style",a?"solid":"none")}function K(a){v("style:text-line-through-style",a?"solid":"none")}function L(a){if(q().directParagraphStyling){var d=P.getCursor(b).getSelectedRange(),d=S.getParagraphElements(d), +c=P.getFormatting(),e=[],h={},m;d.forEach(function(d){var g=P.convertDomPointToCursorStep(d,0,C),l=d.getAttributeNS(odf.Namespaces.textns,"style-name"),k;d=l?h.hasOwnProperty(l)?h[l]:void 0:m;d||(d=f.generateStyleName(),l?(h[l]=d,k=c.createDerivedStyleObject(l,"paragraph",{})):(m=d,k={}),k=a(k),l=new ops.OpAddStyle,l.init({memberid:b,styleName:d.toString(),styleFamily:"paragraph",isAutomaticStyle:!0,setProperties:k}),e.push(l));l=new ops.OpSetParagraphStyle;l.init({memberid:b,styleName:d.toString(), +position:g});e.push(l)});g.enqueue(e)}}function E(a){L(function(b){return aa.mergeObjects(b,a)})}function N(a){E({"style:paragraph-properties":{"fo:text-align":a}})}function O(a,b){var d=P.getFormatting().getDefaultTabStopDistance(),c=b["style:paragraph-properties"],e;c&&(c=c["fo:margin-left"],e=S.parseLength(c));return aa.mergeObjects(b,{"style:paragraph-properties":{"fo:margin-left":e&&e.unit===d.unit?e.value+a*d.value+e.unit:a*d.value+d.unit}})}function D(a,b){var d=e(a),d=0===d.length?[a.startContainer]: +d,d=P.getFormatting().getAppliedStyles(d),c=0<d.length?d[0].styleProperties:void 0,h=P.getFormatting().getAppliedStylesForElement(b).styleProperties;if(!c||"text"!==c["style:family"]||!c["style:text-properties"])return!1;if(!h||!h["style:text-properties"])return!0;c=c["style:text-properties"];h=h["style:text-properties"];return!Object.keys(c).every(function(a){return c[a]===h[a]})}function V(){}function W(){return!1}function J(){return!1}var R=this,P=g.getOdtDocument(),aa=new core.Utils,S=odf.OdfUtils, +fa=new core.EventNotifier([gui.DirectFormattingController.enabledChanged,gui.DirectFormattingController.textStylingChanged,gui.DirectFormattingController.paragraphStylingChanged]),ha=odf.Namespaces.textns,C=core.StepDirection.NEXT,Z=null,ba,U;this.enabledFeatures=q;this.formatTextSelection=w;this.createCursorStyleOp=function(a,d,c){var e=null,h=Z;c&&(h=(c=U.value().appliedStyles[0])&&c.styleProperties);h&&h["style:text-properties"]&&(e=new ops.OpApplyDirectStyling,e.init({memberid:b,position:a,length:d, +setProperties:{"style:text-properties":h["style:text-properties"]}}),Z=null,U.reset());return e};this.setBold=t;this.setItalic=A;this.setHasUnderline=I;this.setHasStrikethrough=K;this.setFontSize=function(a){v("fo:font-size",a+"pt")};this.setFontName=function(a){v("style:font-name",a)};this.getAppliedStyles=function(){return U.value().appliedStyles};this.toggleBold=z.bind(R,function(){return r().isBold()},t);this.toggleItalic=z.bind(R,function(){return r().isItalic()},A);this.toggleUnderline=z.bind(R, +function(){return r().hasUnderline()},I);this.toggleStrikethrough=z.bind(R,function(){return r().hasStrikeThrough()},K);this.isBold=function(){return r().isBold()};this.isItalic=function(){return r().isItalic()};this.hasUnderline=function(){return r().hasUnderline()};this.hasStrikeThrough=function(){return r().hasStrikeThrough()};this.fontSize=function(){return r().fontSize()};this.fontName=function(){return r().fontName()};this.isAlignedLeft=function(){return r().isAlignedLeft()};this.isAlignedCenter= +function(){return r().isAlignedCenter()};this.isAlignedRight=function(){return r().isAlignedRight()};this.isAlignedJustified=function(){return r().isAlignedJustified()};this.alignParagraphLeft=function(){N("left");return!0};this.alignParagraphCenter=function(){N("center");return!0};this.alignParagraphRight=function(){N("right");return!0};this.alignParagraphJustified=function(){N("justify");return!0};this.indent=function(){L(O.bind(null,1));return!0};this.outdent=function(){L(O.bind(null,-1));return!0}; +this.createParagraphStyleOps=function(a){if(!q().directParagraphStyling)return[];var d=P.getCursor(b),c=d.getSelectedRange(),e=[],h,g;d.hasForwardSelection()?(h=d.getAnchorNode(),g=d.getNode()):(h=d.getNode(),g=d.getAnchorNode());d=S.getParagraphElement(g);runtime.assert(Boolean(d),"DirectFormattingController: Cursor outside paragraph");var m=d,l=[P.getPositionFilter(),P.createRootFilter(b)];if(!1!==P.createStepIterator(c.endContainer,c.endOffset,l,m).nextStep())return e;g!==h&&(d=S.getParagraphElement(h)); +if(!Z&&!D(c,d))return e;c=(c=U.value().appliedStyles[0])&&c.styleProperties;if(!c)return e;if(d=d.getAttributeNS(ha,"style-name"))c={"style:text-properties":c["style:text-properties"]},c=P.getFormatting().createDerivedStyleObject(d,"paragraph",c);h=f.generateStyleName();d=new ops.OpAddStyle;d.init({memberid:b,styleName:h,styleFamily:"paragraph",isAutomaticStyle:!0,setProperties:c});e.push(d);d=new ops.OpSetParagraphStyle;d.init({memberid:b,styleName:h,position:a});e.push(d);return e};this.subscribe= +function(a,d){fa.subscribe(a,d)};this.unsubscribe=function(a,d){fa.unsubscribe(a,d)};this.destroy=function(a){P.unsubscribe(ops.Document.signalCursorAdded,h);P.unsubscribe(ops.Document.signalCursorRemoved,h);P.unsubscribe(ops.Document.signalCursorMoved,h);P.unsubscribe(ops.OdtDocument.signalParagraphStyleModified,y);P.unsubscribe(ops.OdtDocument.signalParagraphChanged,x);P.unsubscribe(ops.OdtDocument.signalOperationEnd,u);P.unsubscribe(ops.OdtDocument.signalProcessingBatchEnd,d);k.unsubscribe(gui.CommonConstraints.EDIT.REVIEW_MODE, +m);a()};(function(){P.subscribe(ops.Document.signalCursorAdded,h);P.subscribe(ops.Document.signalCursorRemoved,h);P.subscribe(ops.Document.signalCursorMoved,h);P.subscribe(ops.OdtDocument.signalParagraphStyleModified,y);P.subscribe(ops.OdtDocument.signalParagraphChanged,x);P.subscribe(ops.OdtDocument.signalOperationEnd,u);P.subscribe(ops.OdtDocument.signalProcessingBatchEnd,d);k.subscribe(gui.CommonConstraints.EDIT.REVIEW_MODE,m);U=new core.LazyProperty(l);ba=U.value();n||(R.formatTextSelection=V, +R.setBold=V,R.setItalic=V,R.setHasUnderline=V,R.setHasStrikethrough=V,R.setFontSize=V,R.setFontName=V,R.toggleBold=J,R.toggleItalic=J,R.toggleUnderline=J,R.toggleStrikethrough=J);p||(R.alignParagraphCenter=W,R.alignParagraphJustified=W,R.alignParagraphLeft=W,R.alignParagraphRight=W,R.createParagraphStyleOps=function(){return[]},R.indent=W,R.outdent=W)})()};gui.DirectFormattingController.enabledChanged="enabled/changed";gui.DirectFormattingController.textStylingChanged="textStyling/changed"; +gui.DirectFormattingController.paragraphStylingChanged="paragraphStyling/changed";gui.DirectFormattingController.SelectionInfo=function(){}; +gui.KeyboardHandler=function(){function g(b,c){c||(c=k.None);switch(b){case gui.KeyboardHandler.KeyCode.LeftMeta:case gui.KeyboardHandler.KeyCode.RightMeta:case gui.KeyboardHandler.KeyCode.MetaInMozilla:c|=k.Meta;break;case gui.KeyboardHandler.KeyCode.Ctrl:c|=k.Ctrl;break;case gui.KeyboardHandler.KeyCode.Alt:c|=k.Alt;break;case gui.KeyboardHandler.KeyCode.Shift:c|=k.Shift}return b+":"+c}var k=gui.KeyboardHandler.Modifier,c=null,b={};this.setDefault=function(b){c=b};this.bind=function(c,k,p,r){c=g(c, +k);runtime.assert(r||!1===b.hasOwnProperty(c),"tried to overwrite the callback handler of key combo: "+c);b[c]=p};this.unbind=function(c,k){var p=g(c,k);delete b[p]};this.reset=function(){c=null;b={}};this.handleEvent=function(f){var n=f.keyCode,p=k.None;f.metaKey&&(p|=k.Meta);f.ctrlKey&&(p|=k.Ctrl);f.altKey&&(p|=k.Alt);f.shiftKey&&(p|=k.Shift);n=g(n,p);n=b[n];p=!1;n?p=n():null!==c&&(p=c(f));p&&(f.preventDefault?f.preventDefault():f.returnValue=!1)}}; +gui.KeyboardHandler.Modifier={None:0,Meta:1,Ctrl:2,Alt:4,CtrlAlt:6,Shift:8,MetaShift:9,CtrlShift:10,AltShift:12};gui.KeyboardHandler.KeyCode={Backspace:8,Tab:9,Clear:12,Enter:13,Shift:16,Ctrl:17,Alt:18,End:35,Home:36,Left:37,Up:38,Right:39,Down:40,Delete:46,A:65,B:66,C:67,D:68,E:69,F:70,G:71,H:72,I:73,J:74,K:75,L:76,M:77,N:78,O:79,P:80,Q:81,R:82,S:83,T:84,U:85,V:86,W:87,X:88,Y:89,Z:90,LeftMeta:91,RightMeta:93,MetaInMozilla:224}; +gui.HyperlinkClickHandler=function(g,k,c){function b(){var a=g();runtime.assert(Boolean(a.classList),"Document container has no classList element");a.classList.remove("webodf-inactiveLinks")}function f(){var a=g();runtime.assert(Boolean(a.classList),"Document container has no classList element");a.classList.add("webodf-inactiveLinks")}function n(){a.removeEventListener("focus",f,!1);m.forEach(function(a){k.unbind(a.keyCode,a.modifier);c.unbind(a.keyCode,a.modifier)});m.length=0}function p(d){n(); +if(d!==r.None){a.addEventListener("focus",f,!1);switch(d){case r.Ctrl:m.push({keyCode:q.Ctrl,modifier:r.None});break;case r.Meta:m.push({keyCode:q.LeftMeta,modifier:r.None}),m.push({keyCode:q.RightMeta,modifier:r.None}),m.push({keyCode:q.MetaInMozilla,modifier:r.None})}m.forEach(function(a){k.bind(a.keyCode,a.modifier,b);c.bind(a.keyCode,a.modifier,f)})}}var r=gui.KeyboardHandler.Modifier,q=gui.KeyboardHandler.KeyCode,e=xmldom.XPath,l=odf.OdfUtils,a=runtime.getWindow(),d=r.None,m=[];runtime.assert(null!== +a,"Expected to be run in an environment which has a global window, like a browser.");this.handleClick=function(b){var c=b.target||b.srcElement,f,m;b.ctrlKey?f=r.Ctrl:b.metaKey&&(f=r.Meta);if(d===r.None||d===f){a:{for(;null!==c;){if(l.isHyperlink(c))break a;if(l.isParagraph(c))break;c=c.parentNode}c=null}c&&(c=l.getHyperlinkTarget(c),""!==c&&("#"===c[0]?(c=c.substring(1),f=g(),m=e.getODFElementsWithXPath(f,"//text:bookmark-start[@text:name='"+c+"']",odf.Namespaces.lookupNamespaceURI),0===m.length&& +(m=e.getODFElementsWithXPath(f,"//text:bookmark[@text:name='"+c+"']",odf.Namespaces.lookupNamespaceURI)),0<m.length&&m[0].scrollIntoView(!0)):/^\s*(javascript|data):/.test(c)?runtime.log("WARN:","potentially malicious URL ignored"):a.open(c),b.preventDefault?b.preventDefault():b.returnValue=!1))}};this.setModifier=function(a){d!==a&&(runtime.assert(a===r.None||a===r.Ctrl||a===r.Meta,"Unsupported KeyboardHandler.Modifier value: "+a),d=a,d!==r.None?f():b(),p(d))};this.getModifier=function(){return d}; +this.destroy=function(a){f();n();a()}}; +gui.EventManager=function(g){function k(a){function d(a,b,c){var e,h=!1;e="on"+b;a.attachEvent&&(a.attachEvent(e,c),h=!0);!h&&a.addEventListener&&(a.addEventListener(b,c,!1),h=!0);h&&!u[b]||!a.hasOwnProperty(e)||(a[e]=c)}function b(a,d,c){var e="on"+d;a.detachEvent&&a.detachEvent(e,c);a.removeEventListener&&a.removeEventListener(d,c,!1);a[e]===c&&(a[e]=null)}function c(b){if(-1===h.indexOf(b)){h.push(b);if(e.filters.every(function(a){return a(b)}))try{f.emit(a,b)}catch(d){runtime.log("Error occurred while processing "+ +a+":\n"+d.message+"\n"+d.stack)}runtime.setTimeout(function(){h.splice(h.indexOf(b),1)},0)}}var e=this,h=[],f=new core.EventNotifier([a]);this.filters=[];this.subscribe=function(b){f.subscribe(a,b)};this.unsubscribe=function(b){f.unsubscribe(a,b)};this.destroy=function(){b(v,a,c);b(K,a,c);b(L,a,c)};t[a]&&d(v,a,c);d(K,a,c);d(L,a,c)}function c(a,b,d){function c(b){d(b,e,function(b){b.type=a;h.emit(a,b)})}var e={},h=new core.EventNotifier([a]);this.subscribe=function(b){h.subscribe(a,b)};this.unsubscribe= +function(b){h.unsubscribe(a,b)};this.destroy=function(){b.forEach(function(a){E.unsubscribe(a,c)})};(function(){b.forEach(function(a){E.subscribe(a,c)})})()}function b(a){runtime.clearTimeout(a);delete N[a]}function f(a,d){var c=runtime.setTimeout(function(){a();b(c)},d);N[c]=!0;return c}function n(a,d,c){var e=a.touches.length,h=a.touches[0],g=d.timer;"touchmove"===a.type||"touchend"===a.type?g&&b(g):"touchstart"===a.type&&(1!==e?runtime.clearTimeout(g):g=f(function(){c({clientX:h.clientX,clientY:h.clientY, +pageX:h.pageX,pageY:h.pageY,target:a.target||a.srcElement||null,detail:1})},400));d.timer=g}function p(a,b,d){var c=a.touches[0],e=a.target||a.srcElement||null,h=b.target;1!==a.touches.length||"touchend"===a.type?h=null:"touchstart"===a.type&&"webodf-draggable"===e.getAttribute("class")?h=e:"touchmove"===a.type&&h&&(a.preventDefault(),a.stopPropagation(),d({clientX:c.clientX,clientY:c.clientY,pageX:c.pageX,pageY:c.pageY,target:h,detail:1}));b.target=h}function r(a,b,d){var c=a.target||a.srcElement|| +null,e=b.dragging;"drag"===a.type?e=!0:"touchend"===a.type&&e&&(e=!1,a=a.changedTouches[0],d({clientX:a.clientX,clientY:a.clientY,pageX:a.pageX,pageY:a.pageY,target:c,detail:1}));b.dragging=e}function q(){L.classList.add("webodf-touchEnabled");E.unsubscribe("touchstart",q)}function e(a){var b=a.scrollX,d=a.scrollY;this.restore=function(){a.scrollX===b&&a.scrollY===d||a.scrollTo(b,d)}}function l(a){var b=a.scrollTop,d=a.scrollLeft;this.restore=function(){if(a.scrollTop!==b||a.scrollLeft!==d)a.scrollTop= +b,a.scrollLeft=d}}function a(a,b){var d=I[a]||A[a]||null;!d&&b&&(d=I[a]=new k(a));return d}function d(b,d){a(b,!0).subscribe(d)}function m(b,d){var c=a(b,!1);c&&c.unsubscribe(d)}function h(){return g.getDOMDocument().activeElement===K}function y(){h()&&K.blur();K.setAttribute("disabled","true")}function x(){K.removeAttribute("disabled")}function z(a){for(var b=[];a;)(a.scrollWidth>a.clientWidth||a.scrollHeight>a.clientHeight)&&b.push(new l(a)),a=a.parentNode;b.push(new e(v));return b}function w(){var a; +h()||(a=z(K),x(),K.focus(),a.forEach(function(a){a.restore()}))}var v=runtime.getWindow(),u={beforecut:!0,beforepaste:!0,longpress:!0,drag:!0,dragstop:!0},t={mousedown:!0,mouseup:!0,focus:!0},A={},I={},K,L=g.getCanvas().getElement(),E=this,N={};this.addFilter=function(b,d){a(b,!0).filters.push(d)};this.removeFilter=function(b,d){var c=a(b,!0),e=c.filters.indexOf(d);-1!==e&&c.filters.splice(e,1)};this.subscribe=d;this.unsubscribe=m;this.hasFocus=h;this.focus=w;this.getEventTrap=function(){return K}; +this.setEditing=function(a){var b=h();b&&K.blur();a?K.removeAttribute("readOnly"):K.setAttribute("readOnly","true");b&&w()};this.destroy=function(a){m("touchstart",q);Object.keys(N).forEach(function(a){b(parseInt(a,10))});N.length=0;Object.keys(A).forEach(function(a){A[a].destroy()});A={};m("mousedown",y);m("mouseup",x);m("contextmenu",x);Object.keys(I).forEach(function(a){I[a].destroy()});I={};K.parentNode.removeChild(K);a()};(function(){var a=g.getOdfCanvas().getSizer(),b=a.ownerDocument;runtime.assert(Boolean(v), +"EventManager requires a window object to operate correctly");K=b.createElement("textarea");K.id="eventTrap";K.setAttribute("tabindex","-1");K.setAttribute("readOnly","true");K.setAttribute("rows","1");a.appendChild(K);d("mousedown",y);d("mouseup",x);d("contextmenu",x);A.longpress=new c("longpress",["touchstart","touchmove","touchend"],n);A.drag=new c("drag",["touchstart","touchmove","touchend"],p);A.dragstop=new c("dragstop",["drag","touchend"],r);d("touchstart",q)})()}; +gui.IOSSafariSupport=function(g){function k(){c.innerHeight!==c.outerHeight&&(b.style.display="none",runtime.requestAnimationFrame(function(){b.style.display="block"}))}var c=runtime.getWindow(),b=g.getEventTrap();this.destroy=function(c){g.unsubscribe("focus",k);b.removeAttribute("autocapitalize");b.style.WebkitTransform="";c()};g.subscribe("focus",k);b.setAttribute("autocapitalize","off");b.style.WebkitTransform="translateX(-10000px)"}; +gui.HyperlinkController=function(g,k,c,b){function f(){var b=!0;!0===k.getState(gui.CommonConstraints.EDIT.REVIEW_MODE)&&(b=c.isLocalCursorWithinOwnAnnotation());b!==e&&(e=b,q.emit(gui.HyperlinkController.enabledChanged,e))}function n(c){c.getMemberId()===b&&f()}var p=odf.OdfUtils,r=g.getOdtDocument(),q=new core.EventNotifier([gui.HyperlinkController.enabledChanged]),e=!1;this.isEnabled=function(){return e};this.subscribe=function(b,a){q.subscribe(b,a)};this.unsubscribe=function(b,a){q.unsubscribe(b, +a)};this.addHyperlink=function(c,a){if(e){var d=r.getCursorSelection(b),f=new ops.OpApplyHyperlink,h=[];if(0===d.length||a)a=a||c,f=new ops.OpInsertText,f.init({memberid:b,position:d.position,text:a}),d.length=a.length,h.push(f);f=new ops.OpApplyHyperlink;f.init({memberid:b,position:d.position,length:d.length,hyperlink:c});h.push(f);g.enqueue(h)}};this.removeHyperlinks=function(){if(e){var c=r.createPositionIterator(r.getRootNode()),a=r.getCursor(b).getSelectedRange(),d=p.getHyperlinkElements(a), +f=a.collapsed&&1===d.length,h=r.getDOMDocument().createRange(),k=[],n,q;0!==d.length&&(d.forEach(function(a){h.selectNodeContents(a);n=r.convertDomToCursorRange({anchorNode:h.startContainer,anchorOffset:h.startOffset,focusNode:h.endContainer,focusOffset:h.endOffset});q=new ops.OpRemoveHyperlink;q.init({memberid:b,position:n.position,length:n.length});k.push(q)}),f||(f=d[0],-1===a.comparePoint(f,0)&&(h.setStart(f,0),h.setEnd(a.startContainer,a.startOffset),n=r.convertDomToCursorRange({anchorNode:h.startContainer, +anchorOffset:h.startOffset,focusNode:h.endContainer,focusOffset:h.endOffset}),0<n.length&&(q=new ops.OpApplyHyperlink,q.init({memberid:b,position:n.position,length:n.length,hyperlink:p.getHyperlinkTarget(f)}),k.push(q))),d=d[d.length-1],c.moveToEndOfNode(d),c=c.unfilteredDomOffset(),1===a.comparePoint(d,c)&&(h.setStart(a.endContainer,a.endOffset),h.setEnd(d,c),n=r.convertDomToCursorRange({anchorNode:h.startContainer,anchorOffset:h.startOffset,focusNode:h.endContainer,focusOffset:h.endOffset}),0<n.length&& +(q=new ops.OpApplyHyperlink,q.init({memberid:b,position:n.position,length:n.length,hyperlink:p.getHyperlinkTarget(d)}),k.push(q)))),g.enqueue(k),h.detach())}};this.destroy=function(b){r.unsubscribe(ops.Document.signalCursorMoved,n);k.unsubscribe(gui.CommonConstraints.EDIT.REVIEW_MODE,f);b()};r.subscribe(ops.Document.signalCursorMoved,n);k.subscribe(gui.CommonConstraints.EDIT.REVIEW_MODE,f);f()};gui.HyperlinkController.enabledChanged="enabled/changed"; +gui.ImageController=function(g,k,c,b,f){function n(){var a=!0;!0===k.getState(gui.CommonConstraints.EDIT.REVIEW_MODE)&&(a=c.isLocalCursorWithinOwnAnnotation());a!==m&&(m=a,d.emit(gui.ImageController.enabledChanged,m))}function p(a){a.getMemberId()===b&&n()}var r={"image/gif":".gif","image/jpeg":".jpg","image/png":".png"},q=odf.Namespaces.textns,e=g.getOdtDocument(),l=odf.OdfUtils,a=e.getFormatting(),d=new core.EventNotifier([gui.HyperlinkController.enabledChanged]),m=!1;this.isEnabled=function(){return m}; +this.subscribe=function(a,b){d.subscribe(a,b)};this.unsubscribe=function(a,b){d.unsubscribe(a,b)};this.insertImage=function(d,c,k,n){if(m){var p=new core.CSSUnits;runtime.assert(0<k&&0<n,"Both width and height of the image should be greater than 0px.");n={width:k,height:n};if(k=l.getParagraphElement(e.getCursor(b).getNode()).getAttributeNS(q,"style-name")){k=a.getContentSize(k,"paragraph");var v=1,u=1;n.width>k.width&&(v=k.width/n.width);n.height>k.height&&(u=k.height/n.height);k=Math.min(v,u);n= +{width:n.width*k,height:n.height*k}}k=p.convert(n.width,"px","cm")+"cm";p=p.convert(n.height,"px","cm")+"cm";u=e.getOdfCanvas().odfContainer().rootElement.styles;n=d.toLowerCase();var v=r.hasOwnProperty(n)?r[n]:null,t;n=[];runtime.assert(null!==v,"Image type is not supported: "+d);v="Pictures/"+f.generateImageName()+v;t=new ops.OpSetBlob;t.init({memberid:b,filename:v,mimetype:d,content:c});n.push(t);a.getStyleElement("Graphics","graphic",[u])||(d=new ops.OpAddStyle,d.init({memberid:b,styleName:"Graphics", +styleFamily:"graphic",isAutomaticStyle:!1,setProperties:{"style:graphic-properties":{"text:anchor-type":"paragraph","svg:x":"0cm","svg:y":"0cm","style:wrap":"dynamic","style:number-wrapped-paragraphs":"no-limit","style:wrap-contour":"false","style:vertical-pos":"top","style:vertical-rel":"paragraph","style:horizontal-pos":"center","style:horizontal-rel":"paragraph"}}}),n.push(d));d=f.generateStyleName();c=new ops.OpAddStyle;c.init({memberid:b,styleName:d,styleFamily:"graphic",isAutomaticStyle:!0, +setProperties:{"style:parent-style-name":"Graphics","style:graphic-properties":{"style:vertical-pos":"top","style:vertical-rel":"baseline","style:horizontal-pos":"center","style:horizontal-rel":"paragraph","fo:background-color":"transparent","style:background-transparency":"100%","style:shadow":"none","style:mirror":"none","fo:clip":"rect(0cm, 0cm, 0cm, 0cm)","draw:luminance":"0%","draw:contrast":"0%","draw:red":"0%","draw:green":"0%","draw:blue":"0%","draw:gamma":"100%","draw:color-inversion":"false", +"draw:image-opacity":"100%","draw:color-mode":"standard"}}});n.push(c);t=new ops.OpInsertImage;t.init({memberid:b,position:e.getCursorPosition(b),filename:v,frameWidth:k,frameHeight:p,frameStyleName:d,frameName:f.generateFrameName()});n.push(t);g.enqueue(n)}};this.destroy=function(a){e.unsubscribe(ops.Document.signalCursorMoved,p);k.unsubscribe(gui.CommonConstraints.EDIT.REVIEW_MODE,n);a()};e.subscribe(ops.Document.signalCursorMoved,p);k.subscribe(gui.CommonConstraints.EDIT.REVIEW_MODE,n);n()}; +gui.ImageController.enabledChanged="enabled/changed"; +gui.ImageSelector=function(g){function k(){var c=g.getSizer(),k=f.createElement("div");k.id="imageSelector";k.style.borderWidth="1px";c.appendChild(k);b.forEach(function(b){var c=f.createElement("div");c.className=b;k.appendChild(c)});return k}var c=odf.Namespaces.svgns,b="topLeft topRight bottomRight bottomLeft topMiddle rightMiddle bottomMiddle leftMiddle".split(" "),f=g.getElement().ownerDocument,n=!1;this.select=function(b){var r,q,e=f.getElementById("imageSelector");e||(e=k());n=!0;r=e.parentNode; +q=b.getBoundingClientRect();var l=r.getBoundingClientRect(),a=g.getZoomLevel();r=(q.left-l.left)/a-1;q=(q.top-l.top)/a-1;e.style.display="block";e.style.left=r+"px";e.style.top=q+"px";e.style.width=b.getAttributeNS(c,"width");e.style.height=b.getAttributeNS(c,"height")};this.clearSelection=function(){var b;n&&(b=f.getElementById("imageSelector"))&&(b.style.display="none");n=!1};this.isSelectorElement=function(b){var c=f.getElementById("imageSelector");return c?b===c||b.parentNode===c:!1}}; +(function(){function g(g){function c(b){p=b.which&&String.fromCharCode(b.which)===n;n=void 0;return!1===p}function b(){p=!1}function f(b){n=b.data;p=!1}var n,p=!1;this.destroy=function(n){g.unsubscribe("textInput",b);g.unsubscribe("compositionend",f);g.removeFilter("keypress",c);n()};g.subscribe("textInput",b);g.subscribe("compositionend",f);g.addFilter("keypress",c)}gui.InputMethodEditor=function(k,c){function b(b){a&&(b?a.getNode().setAttributeNS("urn:webodf:names:cursor","composing","true"):(a.getNode().removeAttributeNS("urn:webodf:names:cursor", +"composing"),h.textContent=""))}function f(){x&&(x=!1,b(!1),w.emit(gui.InputMethodEditor.signalCompositionEnd,{data:z}),z="")}function n(){I||(I=!0,f(),a&&a.getSelectedRange().collapsed?d.value="":d.value=u.writeToString(a.getSelectedRange().cloneContents()),d.setSelectionRange(0,d.value.length),I=!1)}function p(){c.hasFocus()&&y.trigger()}function r(){v=void 0;y.cancel();b(!0);x||w.emit(gui.InputMethodEditor.signalCompositionStart,{data:""})}function q(a){a=v=a.data;x=!0;z+=a;y.trigger()}function e(a){a.data!== +v&&(a=a.data,x=!0,z+=a,y.trigger());v=void 0}function l(){h.textContent=d.value}var a=null,d=c.getEventTrap(),m=d.ownerDocument,h,y,x=!1,z="",w=new core.EventNotifier([gui.InputMethodEditor.signalCompositionStart,gui.InputMethodEditor.signalCompositionEnd]),v,u,t=[],A,I=!1;this.subscribe=w.subscribe;this.unsubscribe=w.unsubscribe;this.registerCursor=function(b){b.getMemberId()===k&&(a=b,a.getNode().appendChild(h),b.subscribe(ops.OdtCursor.signalCursorUpdated,p),c.subscribe("input",l),c.subscribe("compositionupdate", +l))};this.removeCursor=function(b){a&&b===k&&(a.getNode().removeChild(h),a.unsubscribe(ops.OdtCursor.signalCursorUpdated,p),c.unsubscribe("input",l),c.unsubscribe("compositionupdate",l),a=null)};this.destroy=function(a){c.unsubscribe("compositionstart",r);c.unsubscribe("compositionend",q);c.unsubscribe("textInput",e);c.unsubscribe("keypress",f);c.unsubscribe("focus",n);core.Async.destroyAll(A,a)};(function(){u=new odf.TextSerializer;u.filter=new odf.OdfNodeFilter;c.subscribe("compositionstart",r); +c.subscribe("compositionend",q);c.subscribe("textInput",e);c.subscribe("keypress",f);c.subscribe("focus",n);t.push(new g(c));A=t.map(function(a){return a.destroy});h=m.createElement("span");h.setAttribute("id","composer");y=core.Task.createTimeoutTask(n,1);A.push(y.destroy)})()};gui.InputMethodEditor.signalCompositionStart="input/compositionstart";gui.InputMethodEditor.signalCompositionEnd="input/compositionend"})(); +gui.MetadataController=function(g,k){function c(b){n.emit(gui.MetadataController.signalMetadataChanged,b)}function b(b){var c=-1===p.indexOf(b);c||runtime.log("Setting "+b+" is restricted.");return c}var f=g.getOdtDocument(),n=new core.EventNotifier([gui.MetadataController.signalMetadataChanged]),p=["dc:creator","dc:date","meta:editing-cycles","meta:editing-duration","meta:document-statistic"];this.setMetadata=function(c,f){var e={},l="",a;c&&Object.keys(c).filter(b).forEach(function(a){e[a]=c[a]}); +f&&(l=f.filter(b).join(","));if(0<l.length||0<Object.keys(e).length)a=new ops.OpUpdateMetadata,a.init({memberid:k,setProperties:e,removedProperties:0<l.length?{attributes:l}:null}),g.enqueue([a])};this.getMetadata=function(b){var c;runtime.assert("string"===typeof b,"Property must be a string");c=b.split(":");runtime.assert(2===c.length,"Property must be a namespace-prefixed string");b=odf.Namespaces.lookupNamespaceURI(c[0]);runtime.assert(Boolean(b),"Prefix must be for an ODF namespace.");return f.getOdfCanvas().odfContainer().getMetadata(b, +c[1])};this.subscribe=function(b,c){n.subscribe(b,c)};this.unsubscribe=function(b,c){n.unsubscribe(b,c)};this.destroy=function(b){f.unsubscribe(ops.OdtDocument.signalMetadataUpdated,c);b()};f.subscribe(ops.OdtDocument.signalMetadataUpdated,c)};gui.MetadataController.signalMetadataChanged="metadata/changed"; +gui.PasteController=function(g,k,c,b){function f(){r=!0===k.getState(gui.CommonConstraints.EDIT.REVIEW_MODE)?c.isLocalCursorWithinOwnAnnotation():!0}function n(a){a.getMemberId()===b&&f()}var p=g.getOdtDocument(),r=!1,q=odf.Namespaces.textns,e=core.StepDirection.NEXT,l=odf.OdfUtils;this.isEnabled=function(){return r};this.paste=function(a){if(r){var d=p.getCursorPosition(b),c=p.getCursor(b).getNode(),c=l.getParagraphElement(c),h=c.getAttributeNS(q,"style-name")||"",f=d,k=[],n=p.convertDomPointToCursorStep(c, +0,e);a.replace(/\r/g,"").split("\n").forEach(function(a){var d=new ops.OpInsertText,c=new ops.OpSplitParagraph;d.init({memberid:b,position:f,text:a,moveCursor:!0});k.push(d);f+=a.length;c.init({memberid:b,position:f,paragraphStyleName:h,sourceParagraphPosition:n,moveCursor:!0});k.push(c);n=f+=1});k.pop();g.enqueue(k)}};this.destroy=function(a){p.unsubscribe(ops.Document.signalCursorMoved,n);k.unsubscribe(gui.CommonConstraints.EDIT.REVIEW_MODE,f);a()};p.subscribe(ops.Document.signalCursorMoved,n); +k.subscribe(gui.CommonConstraints.EDIT.REVIEW_MODE,f);f()};gui.ClosestXOffsetScanner=function(g){function k(b){return null!==b&&void 0!==f?Math.abs(b-g)>f:!1}function c(b){null!==b&&!1===k(b)&&(f=Math.abs(b-g))}var b=this,f,n=gui.StepInfo.VisualDirection.LEFT_TO_RIGHT;this.token=void 0;this.process=function(f,g,q){var e,l;f.visualDirection===n?(e=g&&g.right,l=q&&q.left):(e=g&&g.left,l=q&&q.right);if(k(e)||k(l))return!0;if(g||q)c(e),c(l),b.token=f.token;return!1}}; +gui.LineBoundaryScanner=function(){var g=this,k=null;this.token=void 0;this.process=function(c,b,f){var n;if(n=f)if(k){var p=k;n=Math.min(p.bottom-p.top,f.bottom-f.top);var r=Math.max(p.top,f.top),p=Math.min(p.bottom,f.bottom)-r;n=.4>=(0<n?p/n:0)}else n=!1;!b||f&&!n||(g.token=c.token);if(n)return!0;k=(c=k)&&b?{left:Math.min(c.left,b.left),right:Math.max(c.right,b.right),top:Math.min(c.top,b.top),bottom:Math.min(c.bottom,b.bottom)}:c||b;return!1}}; +gui.ParagraphBoundaryScanner=function(){var g=this,k=!1,c,b=odf.OdfUtils;this.token=void 0;this.process=function(f){var n=b.getParagraphElement(f.container());k||(c=n,k=!0);if(c!==n)return!0;g.token=f.token;return!1}}; +odf.WordBoundaryFilter=function(g,k){function c(a,b,d){for(var c=null,e=g.getRootNode(),f;a!==e&&null!==a&&null===c;)f=0>b?a.previousSibling:a.nextSibling,d(f)===NodeFilter.FILTER_ACCEPT&&(c=f),a=a.parentNode;return c}function b(a,b){var d;return null===a?m.NO_NEIGHBOUR:p.isCharacterElement(a)?m.SPACE_CHAR:a.nodeType===f||p.isTextSpan(a)||p.isHyperlink(a)?(d=a.textContent.charAt(b()),q.test(d)?m.SPACE_CHAR:r.test(d)?m.PUNCTUATION_CHAR:m.WORD_CHAR):m.OTHER}var f=Node.TEXT_NODE,n=Node.ELEMENT_NODE, +p=odf.OdfUtils,r=/[!-#%-*,-\/:-;?-@\[-\]_{}\u00a1\u00ab\u00b7\u00bb\u00bf;\u00b7\u055a-\u055f\u0589-\u058a\u05be\u05c0\u05c3\u05c6\u05f3-\u05f4\u0609-\u060a\u060c-\u060d\u061b\u061e-\u061f\u066a-\u066d\u06d4\u0700-\u070d\u07f7-\u07f9\u0964-\u0965\u0970\u0df4\u0e4f\u0e5a-\u0e5b\u0f04-\u0f12\u0f3a-\u0f3d\u0f85\u0fd0-\u0fd4\u104a-\u104f\u10fb\u1361-\u1368\u166d-\u166e\u169b-\u169c\u16eb-\u16ed\u1735-\u1736\u17d4-\u17d6\u17d8-\u17da\u1800-\u180a\u1944-\u1945\u19de-\u19df\u1a1e-\u1a1f\u1b5a-\u1b60\u1c3b-\u1c3f\u1c7e-\u1c7f\u2000-\u206e\u207d-\u207e\u208d-\u208e\u3008-\u3009\u2768-\u2775\u27c5-\u27c6\u27e6-\u27ef\u2983-\u2998\u29d8-\u29db\u29fc-\u29fd\u2cf9-\u2cfc\u2cfe-\u2cff\u2e00-\u2e7e\u3000-\u303f\u30a0\u30fb\ua60d-\ua60f\ua673\ua67e\ua874-\ua877\ua8ce-\ua8cf\ua92e-\ua92f\ua95f\uaa5c-\uaa5f\ufd3e-\ufd3f\ufe10-\ufe19\ufe30-\ufe52\ufe54-\ufe61\ufe63\ufe68\ufe6a-\ufe6b\uff01-\uff03\uff05-\uff0a\uff0c-\uff0f\uff1a-\uff1b\uff1f-\uff20\uff3b-\uff3d\uff3f\uff5b\uff5d\uff5f-\uff65]|\ud800[\udd00-\udd01\udf9f\udfd0]|\ud802[\udd1f\udd3f\ude50-\ude58]|\ud809[\udc00-\udc7e]/, +q=/\s/,e=core.PositionFilter.FilterResult.FILTER_ACCEPT,l=core.PositionFilter.FilterResult.FILTER_REJECT,a=odf.WordBoundaryFilter.IncludeWhitespace.TRAILING,d=odf.WordBoundaryFilter.IncludeWhitespace.LEADING,m={NO_NEIGHBOUR:0,SPACE_CHAR:1,PUNCTUATION_CHAR:2,WORD_CHAR:3,OTHER:4};this.acceptPosition=function(f){var g=f.container(),p=f.leftNode(),q=f.rightNode(),r=f.unfilteredDomOffset,v=function(){return f.unfilteredDomOffset()-1};g.nodeType===n&&(null===q&&(q=c(g,1,f.getNodeFilter())),null===p&&(p= +c(g,-1,f.getNodeFilter())));g!==q&&(r=function(){return 0});g!==p&&null!==p&&(v=function(){return p.textContent.length-1});g=b(p,v);q=b(q,r);return g===m.WORD_CHAR&&q===m.WORD_CHAR||g===m.PUNCTUATION_CHAR&&q===m.PUNCTUATION_CHAR||k===a&&g!==m.NO_NEIGHBOUR&&q===m.SPACE_CHAR||k===d&&g===m.SPACE_CHAR&&q!==m.NO_NEIGHBOUR?l:e}};odf.WordBoundaryFilter.IncludeWhitespace={None:0,TRAILING:1,LEADING:2}; +gui.SelectionController=function(g,k){function c(a){var b=a.spec();if(a.isEdit||b.memberid===k)I=void 0,K.cancel()}function b(){var a=x.getCursor(k).getNode();return x.createStepIterator(a,0,[v,t],x.getRootElement(a))}function f(a,b,d){d=new odf.WordBoundaryFilter(x,d);var c=x.getRootElement(a)||x.getRootNode(),e=x.createRootFilter(c);return x.createStepIterator(a,b,[v,e,d],c)}function n(a,b){return b?{anchorNode:a.startContainer,anchorOffset:a.startOffset,focusNode:a.endContainer,focusOffset:a.endOffset}: +{anchorNode:a.endContainer,anchorOffset:a.endOffset,focusNode:a.startContainer,focusOffset:a.startOffset}}function p(a,b,d){var c=new ops.OpMoveCursor;c.init({memberid:k,position:a,length:b||0,selectionType:d});return c}function r(a,b,d){var c;c=x.getCursor(k);c=n(c.getSelectedRange(),c.hasForwardSelection());c.focusNode=a;c.focusOffset=b;d||(c.anchorNode=c.focusNode,c.anchorOffset=c.focusOffset);a=x.convertDomToCursorRange(c);g.enqueue([p(a.position,a.length)])}function q(a){var b;b=f(a.startContainer, +a.startOffset,L);b.roundToPreviousStep()&&a.setStart(b.container(),b.offset());b=f(a.endContainer,a.endOffset,E);b.roundToNextStep()&&a.setEnd(b.container(),b.offset())}function e(a){var b=w.getParagraphElements(a),d=b[0],b=b[b.length-1];d&&a.setStart(d,0);b&&(w.isParagraph(a.endContainer)&&0===a.endOffset?a.setEndBefore(b):a.setEnd(b,b.childNodes.length))}function l(a,b,d,c){var e,f;c?(e=d.startContainer,f=d.startOffset):(e=d.endContainer,f=d.endOffset);z.containsNode(a,e)||(f=0>z.comparePoints(a, +0,e,f)?0:a.childNodes.length,e=a);a=x.createStepIterator(e,f,b,w.getParagraphElement(e)||a);a.roundToClosestStep()||runtime.assert(!1,"No step found in requested range");c?d.setStart(a.container(),a.offset()):d.setEnd(a.container(),a.offset())}function a(a,d){var c=b();c.advanceStep(a)&&r(c.container(),c.offset(),d)}function d(a,d){var c,e=I,f=[new gui.LineBoundaryScanner,new gui.ParagraphBoundaryScanner];void 0===e&&A&&(e=A());isNaN(e)||(c=b(),u.moveToFilteredStep(c,a,f)&&c.advanceStep(a)&&(f=[new gui.ClosestXOffsetScanner(e), +new gui.LineBoundaryScanner,new gui.ParagraphBoundaryScanner],u.moveToFilteredStep(c,a,f)&&(r(c.container(),c.offset(),d),I=e,K.restart())))}function m(a,d){var c=b(),e=[new gui.LineBoundaryScanner,new gui.ParagraphBoundaryScanner];u.moveToFilteredStep(c,a,e)&&r(c.container(),c.offset(),d)}function h(a,b){var d=x.getCursor(k),d=n(d.getSelectedRange(),d.hasForwardSelection()),d=f(d.focusNode,d.focusOffset,L);d.advanceStep(a)&&r(d.container(),d.offset(),b)}function y(a,b,d){var c=!1,e=x.getCursor(k), +e=n(e.getSelectedRange(),e.hasForwardSelection()),c=x.getRootElement(e.focusNode);runtime.assert(Boolean(c),"SelectionController: Cursor outside root");e=x.createStepIterator(e.focusNode,e.focusOffset,[v,t],c);e.roundToClosestStep();e.advanceStep(a)&&(d=d(e.container()))&&(a===N?(e.setPosition(d,0),c=e.roundToNextStep()):(e.setPosition(d,d.childNodes.length),c=e.roundToPreviousStep()),c&&r(e.container(),e.offset(),b))}var x=g.getOdtDocument(),z=core.DomUtils,w=odf.OdfUtils,v=x.getPositionFilter(), +u=new gui.GuiStepUtils,t=x.createRootFilter(k),A=null,I,K,L=odf.WordBoundaryFilter.IncludeWhitespace.TRAILING,E=odf.WordBoundaryFilter.IncludeWhitespace.LEADING,N=core.StepDirection.PREVIOUS,O=core.StepDirection.NEXT;this.selectionToRange=function(a){var b=0<=z.comparePoints(a.anchorNode,a.anchorOffset,a.focusNode,a.focusOffset),d=a.focusNode.ownerDocument.createRange();b?(d.setStart(a.anchorNode,a.anchorOffset),d.setEnd(a.focusNode,a.focusOffset)):(d.setStart(a.focusNode,a.focusOffset),d.setEnd(a.anchorNode, +a.anchorOffset));return{range:d,hasForwardSelection:b}};this.rangeToSelection=n;this.selectImage=function(a){var b=x.getRootElement(a),d=x.createRootFilter(b),b=x.createStepIterator(a,0,[d,x.getPositionFilter()],b),c;b.roundToPreviousStep()||runtime.assert(!1,"No walkable position before frame");d=b.container();c=b.offset();b.setPosition(a,a.childNodes.length);b.roundToNextStep()||runtime.assert(!1,"No walkable position after frame");a=x.convertDomToCursorRange({anchorNode:d,anchorOffset:c,focusNode:b.container(), +focusOffset:b.offset()});a=p(a.position,a.length,ops.OdtCursor.RegionSelection);g.enqueue([a])};this.expandToWordBoundaries=q;this.expandToParagraphBoundaries=e;this.selectRange=function(a,b,d){var c=x.getOdfCanvas().getElement(),f,h=[v];f=z.containsNode(c,a.startContainer);c=z.containsNode(c,a.endContainer);if(f||c)if(f&&c&&(2===d?q(a):3<=d&&e(a)),(d=b?x.getRootElement(a.startContainer):x.getRootElement(a.endContainer))||(d=x.getRootNode()),h.push(x.createRootFilter(d)),l(d,h,a,!0),l(d,h,a,!1),a= +n(a,b),b=x.convertDomToCursorRange(a),a=x.getCursorSelection(k),b.position!==a.position||b.length!==a.length)a=p(b.position,b.length,ops.OdtCursor.RangeSelection),g.enqueue([a])};this.moveCursorToLeft=function(){a(N,!1);return!0};this.moveCursorToRight=function(){a(O,!1);return!0};this.extendSelectionToLeft=function(){a(N,!0);return!0};this.extendSelectionToRight=function(){a(O,!0);return!0};this.setCaretXPositionLocator=function(a){A=a};this.moveCursorUp=function(){d(N,!1);return!0};this.moveCursorDown= +function(){d(O,!1);return!0};this.extendSelectionUp=function(){d(N,!0);return!0};this.extendSelectionDown=function(){d(O,!0);return!0};this.moveCursorBeforeWord=function(){h(N,!1);return!0};this.moveCursorPastWord=function(){h(O,!1);return!0};this.extendSelectionBeforeWord=function(){h(N,!0);return!0};this.extendSelectionPastWord=function(){h(O,!0);return!0};this.moveCursorToLineStart=function(){m(N,!1);return!0};this.moveCursorToLineEnd=function(){m(O,!1);return!0};this.extendSelectionToLineStart= +function(){m(N,!0);return!0};this.extendSelectionToLineEnd=function(){m(O,!0);return!0};this.extendSelectionToParagraphStart=function(){y(N,!0,w.getParagraphElement);return!0};this.extendSelectionToParagraphEnd=function(){y(O,!0,w.getParagraphElement);return!0};this.moveCursorToParagraphStart=function(){y(N,!1,w.getParagraphElement);return!0};this.moveCursorToParagraphEnd=function(){y(O,!1,w.getParagraphElement);return!0};this.moveCursorToDocumentStart=function(){y(N,!1,x.getRootElement);return!0}; +this.moveCursorToDocumentEnd=function(){y(O,!1,x.getRootElement);return!0};this.extendSelectionToDocumentStart=function(){y(N,!0,x.getRootElement);return!0};this.extendSelectionToDocumentEnd=function(){y(O,!0,x.getRootElement);return!0};this.extendSelectionToEntireDocument=function(){var a=x.getCursor(k),a=x.getRootElement(a.getNode()),b,d,c;runtime.assert(Boolean(a),"SelectionController: Cursor outside root");c=x.createStepIterator(a,0,[v,t],a);c.roundToClosestStep();b=c.container();d=c.offset(); +c.setPosition(a,a.childNodes.length);c.roundToClosestStep();a=x.convertDomToCursorRange({anchorNode:b,anchorOffset:d,focusNode:c.container(),focusOffset:c.offset()});g.enqueue([p(a.position,a.length)]);return!0};this.destroy=function(a){x.unsubscribe(ops.OdtDocument.signalOperationStart,c);core.Async.destroyAll([K.destroy],a)};(function(){K=core.Task.createTimeoutTask(function(){I=void 0},2E3);x.subscribe(ops.OdtDocument.signalOperationStart,c)})()}; +gui.TextController=function(g,k,c,b,f,n){function p(){y=!0===k.getState(gui.CommonConstraints.EDIT.REVIEW_MODE)?c.isLocalCursorWithinOwnAnnotation():!0}function r(a){a.getMemberId()===b&&p()}function q(a,b,c){var e=[d.getPositionFilter()];c&&e.push(d.createRootFilter(a.startContainer));c=d.createStepIterator(a.startContainer,a.startOffset,e,b);c.roundToClosestStep()||runtime.assert(!1,"No walkable step found in paragraph element at range start");b=d.convertDomPointToCursorStep(c.container(),c.offset()); +a.collapsed?a=b:(c.setPosition(a.endContainer,a.endOffset),c.roundToClosestStep()||runtime.assert(!1,"No walkable step found in paragraph element at range end"),a=d.convertDomPointToCursorStep(c.container(),c.offset()));return{position:b,length:a-b}}function e(a){var d,c,e,f=m.getParagraphElements(a),g=a.cloneRange(),l=[];d=f[0];1<f.length&&(m.hasNoODFContent(d)&&(d=f[f.length-1]),c=d.getAttributeNS(odf.Namespaces.textns,"style-name")||"");f.forEach(function(d,f){var m,k;g.setStart(d,0);g.collapse(!0); +m=q(g,d,!1).position;0<f&&(k=new ops.OpMergeParagraph,k.init({memberid:b,paragraphStyleName:c,destinationStartPosition:e,sourceStartPosition:m,moveCursor:1===f}),l.unshift(k));e=m;g.selectNodeContents(d);if(m=h.rangeIntersection(g,a))m=q(m,d,!0),0<m.length&&(k=new ops.OpRemoveText,k.init({memberid:b,position:m.position,length:m.length}),l.unshift(k))});return l}function l(a){0>a.length&&(a.position+=a.length,a.length=-a.length);return a}function a(a){if(!y)return!1;var c,f=d.getCursor(b).getSelectedRange().cloneRange(), +h=l(d.getCursorSelection(b)),m;if(0===h.length){h=void 0;c=d.getCursor(b).getNode();m=d.getRootElement(c);var k=[d.getPositionFilter(),d.createRootFilter(m)];m=d.createStepIterator(c,0,k,m);m.roundToClosestStep()&&(a?m.nextStep():m.previousStep())&&(h=l(d.convertDomToCursorRange({anchorNode:c,anchorOffset:0,focusNode:m.container(),focusOffset:m.offset()})),a?(f.setStart(c,0),f.setEnd(m.container(),m.offset())):(f.setStart(m.container(),m.offset()),f.setEnd(c,0)))}h&&g.enqueue(e(f));return void 0!== +h}var d=g.getOdtDocument(),m=odf.OdfUtils,h=core.DomUtils,y=!1,x=odf.Namespaces.textns,z=core.StepDirection.NEXT;this.isEnabled=function(){return y};this.enqueueParagraphSplittingOps=function(){if(!y)return!1;var a=d.getCursor(b),c=a.getSelectedRange(),f=l(d.getCursorSelection(b)),h=[],a=m.getParagraphElement(a.getNode()),k=a.getAttributeNS(x,"style-name")||"";0<f.length&&(h=h.concat(e(c)));c=new ops.OpSplitParagraph;c.init({memberid:b,position:f.position,paragraphStyleName:k,sourceParagraphPosition:d.convertDomPointToCursorStep(a, +0,z),moveCursor:!0});h.push(c);n&&(f=n(f.position+1),h=h.concat(f));g.enqueue(h);return!0};this.removeTextByBackspaceKey=function(){return a(!1)};this.removeTextByDeleteKey=function(){return a(!0)};this.removeCurrentSelection=function(){if(!y)return!1;var a=d.getCursor(b).getSelectedRange();g.enqueue(e(a));return!0};this.insertText=function(a){if(y){var c=d.getCursor(b).getSelectedRange(),h=l(d.getCursorSelection(b)),m=[],k=!1;0<h.length&&(m=m.concat(e(c)),k=!0);c=new ops.OpInsertText;c.init({memberid:b, +position:h.position,text:a,moveCursor:!0});m.push(c);f&&(a=f(h.position,a.length,k))&&m.push(a);g.enqueue(m)}};this.destroy=function(a){d.unsubscribe(ops.Document.signalCursorMoved,r);k.unsubscribe(gui.CommonConstraints.EDIT.REVIEW_MODE,p);a()};d.subscribe(ops.Document.signalCursorMoved,r);k.subscribe(gui.CommonConstraints.EDIT.REVIEW_MODE,p);p()};gui.UndoManager=function(){};gui.UndoManager.prototype.subscribe=function(g,k){};gui.UndoManager.prototype.unsubscribe=function(g,k){}; +gui.UndoManager.prototype.setDocument=function(g){};gui.UndoManager.prototype.setInitialState=function(){};gui.UndoManager.prototype.initialize=function(){};gui.UndoManager.prototype.purgeInitialState=function(){};gui.UndoManager.prototype.setPlaybackFunction=function(g){};gui.UndoManager.prototype.hasUndoStates=function(){};gui.UndoManager.prototype.hasRedoStates=function(){};gui.UndoManager.prototype.moveForward=function(g){};gui.UndoManager.prototype.moveBackward=function(g){}; +gui.UndoManager.prototype.onOperationExecuted=function(g){};gui.UndoManager.prototype.isDocumentModified=function(){};gui.UndoManager.prototype.setDocumentModified=function(g){};gui.UndoManager.signalUndoStackChanged="undoStackChanged";gui.UndoManager.signalUndoStateCreated="undoStateCreated";gui.UndoManager.signalUndoStateModified="undoStateModified";gui.UndoManager.signalDocumentModifiedChanged="documentModifiedChanged"; +gui.SessionControllerOptions=function(){this.annotationsEnabled=this.directParagraphStylingEnabled=this.directTextStylingEnabled=!1}; +(function(){var g=core.PositionFilter.FilterResult.FILTER_ACCEPT;gui.SessionController=function(k,c,b,f){function n(a,b){var d=J.getDOMDocument(),c=null;d.caretRangeFromPoint?(d=d.caretRangeFromPoint(a,b),c={container:d.startContainer,offset:d.startOffset}):d.caretPositionFromPoint&&(d=d.caretPositionFromPoint(a,b))&&d.offsetNode&&(c={container:d.offsetNode,offset:d.offset});return c}function p(a){var b=J.getCursor(c).getSelectedRange();b.collapsed?a.preventDefault():ha.setDataFromRange(a,b)?da.removeCurrentSelection(): +runtime.log("Cut operation failed")}function r(){return!1!==J.getCursor(c).getSelectedRange().collapsed}function q(a){var b=J.getCursor(c).getSelectedRange();b.collapsed?a.preventDefault():ha.setDataFromRange(a,b)||runtime.log("Copy operation failed")}function e(a){var b;W.clipboardData&&W.clipboardData.getData?b=W.clipboardData.getData("Text"):a.clipboardData&&a.clipboardData.getData&&(b=a.clipboardData.getData("text/plain"));b&&(da.removeCurrentSelection(),ea.paste(b));a.preventDefault?a.preventDefault(): +a.returnValue=!1}function l(){return!1}function a(a){if(Q)Q.onOperationExecuted(a)}function d(a){J.emit(ops.OdtDocument.signalUndoStackChanged,a)}function m(){var a;return Q?(a=F.hasFocus(),Q.moveBackward(1),a&&F.focus(),!0):!1}function h(){var a;return Q?(a=F.hasFocus(),Q.moveForward(1),a&&F.focus(),!0):!1}function y(a){var d=J.getCursor(c).getSelectedRange(),e=(a.target||a.srcElement||null).getAttribute("end");d&&e&&(a=n(a.clientX,a.clientY))&&(ia.setUnfilteredPosition(a.container,a.offset),Y.acceptPosition(ia)=== +g&&(d=d.cloneRange(),"left"===e?d.setStart(ia.container(),ia.unfilteredDomOffset()):d.setEnd(ia.container(),ia.unfilteredDomOffset()),b.setSelectedRange(d,"right"===e),J.emit(ops.Document.signalCursorMoved,b)))}function x(){T.selectRange(b.getSelectedRange(),b.hasForwardSelection(),1)}function z(){var a=W.getSelection(),d=0<a.rangeCount&&T.selectionToRange(a);U&&d&&(B=!0,la.clearSelection(),ia.setUnfilteredPosition(a.focusNode,a.focusOffset),Y.acceptPosition(ia)===g&&(2===oa?T.expandToWordBoundaries(d.range): +3<=oa&&T.expandToParagraphBoundaries(d.range),b.setSelectedRange(d.range,d.hasForwardSelection),J.emit(ops.Document.signalCursorMoved,b)))}function w(a){var b=a.target||a.srcElement||null,d=J.getCursor(c);if(U=null!==b&&aa.containsNode(J.getOdfCanvas().getElement(),b))B=!1,b=J.getRootElement(b)||J.getRootNode(),Y=J.createRootFilter(b),oa=0===a.button?a.detail:0,d&&a.shiftKey?W.getSelection().collapse(d.getAnchorNode(),0):(a=W.getSelection(),b=d.getSelectedRange(),a.extend?d.hasForwardSelection()? +(a.collapse(b.startContainer,b.startOffset),a.extend(b.endContainer,b.endOffset)):(a.collapse(b.endContainer,b.endOffset),a.extend(b.startContainer,b.startOffset)):(a.removeAllRanges(),a.addRange(b.cloneRange()))),1<oa&&z()}function v(a){var b=J.getRootElement(a),d=J.createRootFilter(b),b=J.createStepIterator(a,0,[d,J.getPositionFilter()],b);b.setPosition(a,a.childNodes.length);return b.roundToNextStep()?{container:b.container(),offset:b.offset()}:null}function u(a){var b;b=(b=W.getSelection())?{anchorNode:b.anchorNode, +anchorOffset:b.anchorOffset,focusNode:b.focusNode,focusOffset:b.focusOffset}:null;var d=W.getSelection().isCollapsed,c,e;b.anchorNode||b.focusNode||!(c=n(a.clientX,a.clientY))||(b.anchorNode=c.container,b.anchorOffset=c.offset,b.focusNode=b.anchorNode,b.focusOffset=b.anchorOffset);if(S.isImage(b.focusNode)&&0===b.focusOffset&&S.isCharacterFrame(b.focusNode.parentNode)){if(e=b.focusNode.parentNode,c=e.getBoundingClientRect(),a.clientX>c.left&&(c=v(e)))b.focusNode=c.container,b.focusOffset=c.offset, +d&&(b.anchorNode=b.focusNode,b.anchorOffset=b.focusOffset)}else S.isImage(b.focusNode.firstChild)&&1===b.focusOffset&&S.isCharacterFrame(b.focusNode)&&(c=v(b.focusNode))&&(b.anchorNode=b.focusNode=c.container,b.anchorOffset=b.focusOffset=c.offset);b.anchorNode&&b.focusNode&&(b=T.selectionToRange(b),T.selectRange(b.range,b.hasForwardSelection,0===a.button?a.detail:0));F.focus()}function t(a){var b;if(b=n(a.clientX,a.clientY))a=b.container,b=b.offset,a={anchorNode:a,anchorOffset:b,focusNode:a,focusOffset:b}, +a=T.selectionToRange(a),T.selectRange(a.range,a.hasForwardSelection,2),F.focus()}function A(a){var d=a.target||a.srcElement||null,c,e,f;ma.processRequests();U&&(S.isImage(d)&&S.isCharacterFrame(d.parentNode)&&W.getSelection().isCollapsed?(T.selectImage(d.parentNode),F.focus()):la.isSelectorElement(d)?F.focus():B?(d=b.getSelectedRange(),e=d.collapsed,S.isImage(d.endContainer)&&0===d.endOffset&&S.isCharacterFrame(d.endContainer.parentNode)&&(f=d.endContainer.parentNode,f=v(f))&&(d.setEnd(f.container, +f.offset),e&&d.collapse(!1)),T.selectRange(d,b.hasForwardSelection(),0===a.button?a.detail:0),F.focus()):ua?u(a):(c=aa.cloneEvent(a),M=runtime.setTimeout(function(){u(c)},0)),oa=0,B=U=!1)}function I(a){var b=J.getCursor(c).getSelectedRange();b.collapsed||fa.exportRangeToDataTransfer(a.dataTransfer,b)}function K(){U&&F.focus();oa=0;B=U=!1}function L(a){A(a)}function E(a){var b=a.target||a.srcElement||null,d=null;"annotationRemoveButton"===b.className?(runtime.assert(ja,"Remove buttons are displayed on annotations while annotation editing is disabled in the controller."), +d=b.parentNode.getElementsByTagNameNS(odf.Namespaces.officens,"annotation").item(0),ca.removeAnnotation(d),F.focus()):"webodf-draggable"!==b.getAttribute("class")&&A(a)}function N(a){(a=a.data)&&(-1===a.indexOf("\n")?da.insertText(a):ea.paste(a))}function O(a){return function(){a();return!0}}function D(a){return function(b){return J.getCursor(c).getSelectionType()===ops.OdtCursor.RangeSelection?a(b):!0}}function V(b){F.unsubscribe("keydown",C.handleEvent);F.unsubscribe("keypress",Z.handleEvent);F.unsubscribe("keyup", +ba.handleEvent);F.unsubscribe("copy",q);F.unsubscribe("mousedown",w);F.unsubscribe("mousemove",ma.trigger);F.unsubscribe("mouseup",E);F.unsubscribe("contextmenu",L);F.unsubscribe("dragstart",I);F.unsubscribe("dragend",K);F.unsubscribe("click",pa.handleClick);F.unsubscribe("longpress",t);F.unsubscribe("drag",y);F.unsubscribe("dragstop",x);J.unsubscribe(ops.OdtDocument.signalOperationEnd,na.trigger);J.unsubscribe(ops.Document.signalCursorAdded,ka.registerCursor);J.unsubscribe(ops.Document.signalCursorRemoved, +ka.removeCursor);J.unsubscribe(ops.OdtDocument.signalOperationEnd,a);b()}var W=runtime.getWindow(),J=k.getOdtDocument(),R=new gui.SessionConstraints,P=new gui.SessionContext(k,c),aa=core.DomUtils,S=odf.OdfUtils,fa=new gui.MimeDataExporter,ha=new gui.Clipboard(fa),C=new gui.KeyboardHandler,Z=new gui.KeyboardHandler,ba=new gui.KeyboardHandler,U=!1,ga=new odf.ObjectNameGenerator(J.getOdfCanvas().odfContainer(),c),B=!1,Y=null,M,Q=null,F=new gui.EventManager(J),ja=f.annotationsEnabled,ca=new gui.AnnotationController(k, +R,c),X=new gui.DirectFormattingController(k,R,P,c,ga,f.directTextStylingEnabled,f.directParagraphStylingEnabled),da=new gui.TextController(k,R,P,c,X.createCursorStyleOp,X.createParagraphStyleOps),qa=new gui.ImageController(k,R,P,c,ga),la=new gui.ImageSelector(J.getOdfCanvas()),ia=J.createPositionIterator(J.getRootNode()),ma,na,ea=new gui.PasteController(k,R,P,c),ka=new gui.InputMethodEditor(c,F),oa=0,pa=new gui.HyperlinkClickHandler(J.getOdfCanvas().getElement,C,ba),ta=new gui.HyperlinkController(k, +R,P,c),T=new gui.SelectionController(k,c),va=new gui.MetadataController(k,c),G=gui.KeyboardHandler.Modifier,H=gui.KeyboardHandler.KeyCode,ra=-1!==W.navigator.appVersion.toLowerCase().indexOf("mac"),ua=-1!==["iPad","iPod","iPhone"].indexOf(W.navigator.platform),sa;runtime.assert(null!==W,"Expected to be run in an environment which has a global window, like a browser.");this.undo=m;this.redo=h;this.insertLocalCursor=function(){runtime.assert(void 0===k.getOdtDocument().getCursor(c),"Inserting local cursor a second time."); +var a=new ops.OpAddCursor;a.init({memberid:c});k.enqueue([a]);F.focus()};this.removeLocalCursor=function(){runtime.assert(void 0!==k.getOdtDocument().getCursor(c),"Removing local cursor without inserting before.");var a=new ops.OpRemoveCursor;a.init({memberid:c});k.enqueue([a])};this.startEditing=function(){ka.subscribe(gui.InputMethodEditor.signalCompositionStart,da.removeCurrentSelection);ka.subscribe(gui.InputMethodEditor.signalCompositionEnd,N);F.subscribe("beforecut",r);F.subscribe("cut",p); +F.subscribe("beforepaste",l);F.subscribe("paste",e);Q&&Q.initialize();F.setEditing(!0);pa.setModifier(ra?G.Meta:G.Ctrl);C.bind(H.Backspace,G.None,O(da.removeTextByBackspaceKey),!0);C.bind(H.Delete,G.None,da.removeTextByDeleteKey);C.bind(H.Tab,G.None,D(function(){da.insertText("\t");return!0}));ra?(C.bind(H.Clear,G.None,da.removeCurrentSelection),C.bind(H.B,G.Meta,D(X.toggleBold)),C.bind(H.I,G.Meta,D(X.toggleItalic)),C.bind(H.U,G.Meta,D(X.toggleUnderline)),C.bind(H.L,G.MetaShift,D(X.alignParagraphLeft)), +C.bind(H.E,G.MetaShift,D(X.alignParagraphCenter)),C.bind(H.R,G.MetaShift,D(X.alignParagraphRight)),C.bind(H.J,G.MetaShift,D(X.alignParagraphJustified)),ja&&C.bind(H.C,G.MetaShift,ca.addAnnotation),C.bind(H.Z,G.Meta,m),C.bind(H.Z,G.MetaShift,h)):(C.bind(H.B,G.Ctrl,D(X.toggleBold)),C.bind(H.I,G.Ctrl,D(X.toggleItalic)),C.bind(H.U,G.Ctrl,D(X.toggleUnderline)),C.bind(H.L,G.CtrlShift,D(X.alignParagraphLeft)),C.bind(H.E,G.CtrlShift,D(X.alignParagraphCenter)),C.bind(H.R,G.CtrlShift,D(X.alignParagraphRight)), +C.bind(H.J,G.CtrlShift,D(X.alignParagraphJustified)),ja&&C.bind(H.C,G.CtrlAlt,ca.addAnnotation),C.bind(H.Z,G.Ctrl,m),C.bind(H.Z,G.CtrlShift,h));Z.setDefault(D(function(a){var b;b=null===a.which||void 0===a.which?String.fromCharCode(a.keyCode):0!==a.which&&0!==a.charCode?String.fromCharCode(a.which):null;return!b||a.altKey||a.ctrlKey||a.metaKey?!1:(da.insertText(b),!0)}));Z.bind(H.Enter,G.None,D(da.enqueueParagraphSplittingOps))};this.endEditing=function(){ka.unsubscribe(gui.InputMethodEditor.signalCompositionStart, +da.removeCurrentSelection);ka.unsubscribe(gui.InputMethodEditor.signalCompositionEnd,N);F.unsubscribe("cut",p);F.unsubscribe("beforecut",r);F.unsubscribe("paste",e);F.unsubscribe("beforepaste",l);F.setEditing(!1);pa.setModifier(G.None);C.bind(H.Backspace,G.None,function(){return!0},!0);C.unbind(H.Delete,G.None);C.unbind(H.Tab,G.None);ra?(C.unbind(H.Clear,G.None),C.unbind(H.B,G.Meta),C.unbind(H.I,G.Meta),C.unbind(H.U,G.Meta),C.unbind(H.L,G.MetaShift),C.unbind(H.E,G.MetaShift),C.unbind(H.R,G.MetaShift), +C.unbind(H.J,G.MetaShift),ja&&C.unbind(H.C,G.MetaShift),C.unbind(H.Z,G.Meta),C.unbind(H.Z,G.MetaShift)):(C.unbind(H.B,G.Ctrl),C.unbind(H.I,G.Ctrl),C.unbind(H.U,G.Ctrl),C.unbind(H.L,G.CtrlShift),C.unbind(H.E,G.CtrlShift),C.unbind(H.R,G.CtrlShift),C.unbind(H.J,G.CtrlShift),ja&&C.unbind(H.C,G.CtrlAlt),C.unbind(H.Z,G.Ctrl),C.unbind(H.Z,G.CtrlShift));Z.setDefault(null);Z.unbind(H.Enter,G.None)};this.getInputMemberId=function(){return c};this.getSession=function(){return k};this.getSessionConstraints=function(){return R}; +this.setUndoManager=function(a){Q&&Q.unsubscribe(gui.UndoManager.signalUndoStackChanged,d);if(Q=a)Q.setDocument(J),Q.setPlaybackFunction(k.enqueue),Q.subscribe(gui.UndoManager.signalUndoStackChanged,d)};this.getUndoManager=function(){return Q};this.getMetadataController=function(){return va};this.getAnnotationController=function(){return ca};this.getDirectFormattingController=function(){return X};this.getHyperlinkClickHandler=function(){return pa};this.getHyperlinkController=function(){return ta}; +this.getImageController=function(){return qa};this.getSelectionController=function(){return T};this.getTextController=function(){return da};this.getEventManager=function(){return F};this.getKeyboardHandlers=function(){return{keydown:C,keypress:Z}};this.destroy=function(a){var b=[ma.destroy,na.destroy,X.destroy,ka.destroy,F.destroy,pa.destroy,ta.destroy,va.destroy,T.destroy,da.destroy,V];sa&&b.unshift(sa.destroy);runtime.clearTimeout(M);core.Async.destroyAll(b,a)};ma=core.Task.createRedrawTask(z); +na=core.Task.createRedrawTask(function(){var a=J.getCursor(c);if(a&&a.getSelectionType()===ops.OdtCursor.RegionSelection&&(a=S.getImageElements(a.getSelectedRange())[0])){la.select(a.parentNode);return}la.clearSelection()});C.bind(H.Left,G.None,D(T.moveCursorToLeft));C.bind(H.Right,G.None,D(T.moveCursorToRight));C.bind(H.Up,G.None,D(T.moveCursorUp));C.bind(H.Down,G.None,D(T.moveCursorDown));C.bind(H.Left,G.Shift,D(T.extendSelectionToLeft));C.bind(H.Right,G.Shift,D(T.extendSelectionToRight));C.bind(H.Up, +G.Shift,D(T.extendSelectionUp));C.bind(H.Down,G.Shift,D(T.extendSelectionDown));C.bind(H.Home,G.None,D(T.moveCursorToLineStart));C.bind(H.End,G.None,D(T.moveCursorToLineEnd));C.bind(H.Home,G.Ctrl,D(T.moveCursorToDocumentStart));C.bind(H.End,G.Ctrl,D(T.moveCursorToDocumentEnd));C.bind(H.Home,G.Shift,D(T.extendSelectionToLineStart));C.bind(H.End,G.Shift,D(T.extendSelectionToLineEnd));C.bind(H.Up,G.CtrlShift,D(T.extendSelectionToParagraphStart));C.bind(H.Down,G.CtrlShift,D(T.extendSelectionToParagraphEnd)); +C.bind(H.Home,G.CtrlShift,D(T.extendSelectionToDocumentStart));C.bind(H.End,G.CtrlShift,D(T.extendSelectionToDocumentEnd));ra?(C.bind(H.Left,G.Alt,D(T.moveCursorBeforeWord)),C.bind(H.Right,G.Alt,D(T.moveCursorPastWord)),C.bind(H.Left,G.Meta,D(T.moveCursorToLineStart)),C.bind(H.Right,G.Meta,D(T.moveCursorToLineEnd)),C.bind(H.Home,G.Meta,D(T.moveCursorToDocumentStart)),C.bind(H.End,G.Meta,D(T.moveCursorToDocumentEnd)),C.bind(H.Left,G.AltShift,D(T.extendSelectionBeforeWord)),C.bind(H.Right,G.AltShift, +D(T.extendSelectionPastWord)),C.bind(H.Left,G.MetaShift,D(T.extendSelectionToLineStart)),C.bind(H.Right,G.MetaShift,D(T.extendSelectionToLineEnd)),C.bind(H.Up,G.AltShift,D(T.extendSelectionToParagraphStart)),C.bind(H.Down,G.AltShift,D(T.extendSelectionToParagraphEnd)),C.bind(H.Up,G.MetaShift,D(T.extendSelectionToDocumentStart)),C.bind(H.Down,G.MetaShift,D(T.extendSelectionToDocumentEnd)),C.bind(H.A,G.Meta,D(T.extendSelectionToEntireDocument))):(C.bind(H.Left,G.Ctrl,D(T.moveCursorBeforeWord)),C.bind(H.Right, +G.Ctrl,D(T.moveCursorPastWord)),C.bind(H.Left,G.CtrlShift,D(T.extendSelectionBeforeWord)),C.bind(H.Right,G.CtrlShift,D(T.extendSelectionPastWord)),C.bind(H.A,G.Ctrl,D(T.extendSelectionToEntireDocument)));ua&&(sa=new gui.IOSSafariSupport(F));F.subscribe("keydown",C.handleEvent);F.subscribe("keypress",Z.handleEvent);F.subscribe("keyup",ba.handleEvent);F.subscribe("copy",q);F.subscribe("mousedown",w);F.subscribe("mousemove",ma.trigger);F.subscribe("mouseup",E);F.subscribe("contextmenu",L);F.subscribe("dragstart", +I);F.subscribe("dragend",K);F.subscribe("click",pa.handleClick);F.subscribe("longpress",t);F.subscribe("drag",y);F.subscribe("dragstop",x);J.subscribe(ops.OdtDocument.signalOperationEnd,na.trigger);J.subscribe(ops.Document.signalCursorAdded,ka.registerCursor);J.subscribe(ops.Document.signalCursorRemoved,ka.removeCursor);J.subscribe(ops.OdtDocument.signalOperationEnd,a)}})(); +gui.CaretManager=function(g,k){function c(b){return n.hasOwnProperty(b)?n[b]:null}function b(){return Object.keys(n).map(function(b){return n[b]})}function f(b){var c=n[b];c&&(delete n[b],b===g.getInputMemberId()?(r.unsubscribe(ops.OdtDocument.signalProcessingBatchEnd,c.ensureVisible),r.unsubscribe(ops.Document.signalCursorMoved,c.refreshCursorBlinking),q.unsubscribe("compositionupdate",c.handleUpdate),q.unsubscribe("compositionend",c.handleUpdate),q.unsubscribe("focus",c.setFocus),q.unsubscribe("blur", +c.removeFocus),p.removeEventListener("focus",c.show,!1),p.removeEventListener("blur",c.hide,!1)):r.unsubscribe(ops.OdtDocument.signalProcessingBatchEnd,c.handleUpdate),c.destroy(function(){}))}var n={},p=runtime.getWindow(),r=g.getSession().getOdtDocument(),q=g.getEventManager();this.registerCursor=function(b,c,a){var d=b.getMemberId();b=new gui.Caret(b,k,c,a);n[d]=b;d===g.getInputMemberId()?(runtime.log("Starting to track input on new cursor of "+d),r.subscribe(ops.OdtDocument.signalProcessingBatchEnd, +b.ensureVisible),r.subscribe(ops.Document.signalCursorMoved,b.refreshCursorBlinking),q.subscribe("compositionupdate",b.handleUpdate),q.subscribe("compositionend",b.handleUpdate),q.subscribe("focus",b.setFocus),q.subscribe("blur",b.removeFocus),p.addEventListener("focus",b.show,!1),p.addEventListener("blur",b.hide,!1),b.setOverlayElement(q.getEventTrap())):r.subscribe(ops.OdtDocument.signalProcessingBatchEnd,b.handleUpdate);return b};this.getCaret=c;this.getCarets=b;this.destroy=function(c){var l= +b().map(function(a){return a.destroy});g.getSelectionController().setCaretXPositionLocator(null);r.unsubscribe(ops.Document.signalCursorRemoved,f);n={};core.Async.destroyAll(l,c)};g.getSelectionController().setCaretXPositionLocator(function(){var b=c(g.getInputMemberId()),f;b&&(f=b.getBoundingClientRect());return f?f.right:void 0});r.subscribe(ops.Document.signalCursorRemoved,f)}; +gui.EditInfoHandle=function(g){var k=[],c,b=g.ownerDocument,f=b.documentElement.namespaceURI;this.setEdits=function(g){k=g;var p,r,q,e;core.DomUtils.removeAllChildNodes(c);for(g=0;g<k.length;g+=1)p=b.createElementNS(f,"div"),p.className="editInfo",r=b.createElementNS(f,"span"),r.className="editInfoColor",r.setAttributeNS("urn:webodf:names:editinfo","editinfo:memberid",k[g].memberid),q=b.createElementNS(f,"span"),q.className="editInfoAuthor",q.setAttributeNS("urn:webodf:names:editinfo","editinfo:memberid", +k[g].memberid),e=b.createElementNS(f,"span"),e.className="editInfoTime",e.setAttributeNS("urn:webodf:names:editinfo","editinfo:memberid",k[g].memberid),e.appendChild(b.createTextNode(k[g].time.toString())),p.appendChild(r),p.appendChild(q),p.appendChild(e),c.appendChild(p)};this.show=function(){c.style.display="block"};this.hide=function(){c.style.display="none"};this.destroy=function(b){g.removeChild(c);b()};c=b.createElementNS(f,"div");c.setAttribute("class","editInfoHandle");c.style.display="none"; +g.appendChild(c)}; +ops.EditInfo=function(g,k){function c(){var b=[],c;for(c in f)f.hasOwnProperty(c)&&b.push({memberid:c,time:f[c].time});b.sort(function(b,c){return b.time-c.time});return b}var b,f={};this.getNode=function(){return b};this.getOdtDocument=function(){return k};this.getEdits=function(){return f};this.getSortedEdits=function(){return c()};this.addEdit=function(b,c){f[b]={time:c}};this.clearEdits=function(){f={}};this.destroy=function(c){g.parentNode&&g.removeChild(b);c()};b=k.getDOMDocument().createElementNS("urn:webodf:names:editinfo","editinfo"); +g.insertBefore(b,g.firstChild)}; +gui.EditInfoMarker=function(g,k){function c(b,a){return runtime.setTimeout(function(){p.style.opacity=b},a)}var b=this,f,n,p,r,q,e;this.addEdit=function(b,a){var d=Date.now()-a;g.addEdit(b,a);n.setEdits(g.getSortedEdits());p.setAttributeNS("urn:webodf:names:editinfo","editinfo:memberid",b);runtime.clearTimeout(q);runtime.clearTimeout(e);1E4>d?(r=c(1,0),q=c(.5,1E4-d),e=c(.2,2E4-d)):1E4<=d&&2E4>d?(r=c(.5,0),e=c(.2,2E4-d)):r=c(.2,0)};this.getEdits=function(){return g.getEdits()};this.clearEdits=function(){g.clearEdits(); +n.setEdits([]);p.hasAttributeNS("urn:webodf:names:editinfo","editinfo:memberid")&&p.removeAttributeNS("urn:webodf:names:editinfo","editinfo:memberid")};this.getEditInfo=function(){return g};this.show=function(){p.style.display="block"};this.hide=function(){b.hideHandle();p.style.display="none"};this.showHandle=function(){n.show()};this.hideHandle=function(){n.hide()};this.destroy=function(b){runtime.clearTimeout(r);runtime.clearTimeout(q);runtime.clearTimeout(e);f.removeChild(p);n.destroy(function(a){a? +b(a):g.destroy(b)})};(function(){var c=g.getOdtDocument().getDOMDocument();p=c.createElementNS(c.documentElement.namespaceURI,"div");p.setAttribute("class","editInfoMarker");p.onmouseover=function(){b.showHandle()};p.onmouseout=function(){b.hideHandle()};f=g.getNode();f.appendChild(p);n=new gui.EditInfoHandle(f);k||b.hide()})()}; +gui.HyperlinkTooltipView=function(g,k){var c=core.DomUtils,b=odf.OdfUtils,f=runtime.getWindow(),n,p,r;runtime.assert(null!==f,"Expected to be run in an environment which has a global window, like a browser.");this.showTooltip=function(q){var e=q.target||q.srcElement,l=g.getSizer(),a=g.getZoomLevel(),d;a:{for(;e;){if(b.isHyperlink(e))break a;if(b.isParagraph(e)||b.isInlineRoot(e))break;e=e.parentNode}e=null}if(e){c.containsNode(l,r)||l.appendChild(r);d=p;var m;switch(k()){case gui.KeyboardHandler.Modifier.Ctrl:m= +runtime.tr("Ctrl-click to follow link");break;case gui.KeyboardHandler.Modifier.Meta:m=runtime.tr("\u2318-click to follow link");break;default:m=""}d.textContent=m;n.textContent=b.getHyperlinkTarget(e);r.style.display="block";d=f.innerWidth-r.offsetWidth-15;e=q.clientX>d?d:q.clientX+15;d=f.innerHeight-r.offsetHeight-10;q=q.clientY>d?d:q.clientY+10;l=l.getBoundingClientRect();e=(e-l.left)/a;q=(q-l.top)/a;r.style.left=e+"px";r.style.top=q+"px"}};this.hideTooltip=function(){r.style.display="none"};this.destroy= +function(b){r.parentNode&&r.parentNode.removeChild(r);b()};(function(){var b=g.getElement().ownerDocument;n=b.createElement("span");p=b.createElement("span");n.className="webodf-hyperlinkTooltipLink";p.className="webodf-hyperlinkTooltipText";r=b.createElement("div");r.className="webodf-hyperlinkTooltip";r.appendChild(n);r.appendChild(p);g.getElement().appendChild(r)})()}; +gui.OdfFieldView=function(g){function k(){var b=odf.OdfSchema.getFields().map(function(b){return b.replace(":","|")}),c=b.join(",\n")+"\n{ background-color: #D0D0D0; }\n",b=b.map(function(b){return b+":empty::after"}).join(",\n")+"\n{ content:' '; white-space: pre; }\n";return c+"\n"+b}var c,b=g.getElement().ownerDocument;this.showFieldHighlight=function(){c.appendChild(b.createTextNode(k()))};this.hideFieldHighlight=function(){for(var b=c.sheet,g=b.cssRules;g.length;)b.deleteRule(g.length-1)};this.destroy= +function(b){c.parentNode&&c.parentNode.removeChild(c);b()};c=function(){var c=b.getElementsByTagName("head").item(0),g=b.createElement("style"),k="";g.type="text/css";g.media="screen, print, handheld, projection";odf.Namespaces.forEachPrefix(function(b,c){k+="@namespace "+b+" url("+c+");\n"});g.appendChild(b.createTextNode(k));c.appendChild(g);return g}()}; +gui.ShadowCursor=function(g){var k=g.getDOMDocument().createRange(),c=!0;this.removeFromDocument=function(){};this.getMemberId=function(){return gui.ShadowCursor.ShadowCursorMemberId};this.getSelectedRange=function(){return k};this.setSelectedRange=function(b,f){k=b;c=!1!==f};this.hasForwardSelection=function(){return c};this.getDocument=function(){return g};this.getSelectionType=function(){return ops.OdtCursor.RangeSelection};k.setStart(g.getRootNode(),0)};gui.ShadowCursor.ShadowCursorMemberId=""; +gui.SelectionView=function(g){};gui.SelectionView.prototype.rerender=function(){};gui.SelectionView.prototype.show=function(){};gui.SelectionView.prototype.hide=function(){};gui.SelectionView.prototype.destroy=function(g){}; +gui.SelectionViewManager=function(g){function k(){return Object.keys(c).map(function(b){return c[b]})}var c={};this.getSelectionView=function(b){return c.hasOwnProperty(b)?c[b]:null};this.getSelectionViews=k;this.removeSelectionView=function(b){c.hasOwnProperty(b)&&(c[b].destroy(function(){}),delete c[b])};this.hideSelectionView=function(b){c.hasOwnProperty(b)&&c[b].hide()};this.showSelectionView=function(b){c.hasOwnProperty(b)&&c[b].show()};this.rerenderSelectionViews=function(){Object.keys(c).forEach(function(b){c[b].rerender()})}; +this.registerCursor=function(b,f){var k=b.getMemberId(),p=new g(b);f?p.show():p.hide();return c[k]=p};this.destroy=function(b){function c(k,r){r?b(r):k<g.length?g[k].destroy(function(b){c(k+1,b)}):b()}var g=k();c(0,void 0)}};gui.SessionViewOptions=function(){this.caretBlinksOnRangeSelect=this.caretAvatarsInitiallyVisible=this.editInfoMarkersInitiallyVisible=!0}; +(function(){function g(g,c){return void 0!==g?Boolean(g):c}gui.SessionView=function(k,c,b,f,n,p){function r(a){a.memberId===c&&I.getViewport().scrollIntoView(a.annotation.getBoundingClientRect())}function q(){var a=document.getElementsByTagName("head").item(0),b=document.createElement("style");b.type="text/css";b.media="screen, print, handheld, projection";a.appendChild(b);return b}function e(a,b,d){function e(b,d,c){d=b+'[editinfo|memberid="'+a+'"]'+c+d;a:{var f=v.firstChild;for(b=b+'[editinfo|memberid="'+ +a+'"]'+c+"{";f;){if(f.nodeType===Node.TEXT_NODE&&0===f.data.indexOf(b)){b=f;break a}f=f.nextSibling}b=null}b?b.data=d:v.appendChild(document.createTextNode(d))}e("div.editInfoMarker","{ background-color: "+d+"; }","");e("span.editInfoColor","{ background-color: "+d+"; }","");e("span.editInfoAuthor",'{ content: "'+b+'"; }',":before");e("dc|creator","{ background-color: "+d+"; }","");e(".webodf-selectionOverlay","{ fill: "+d+"; stroke: "+d+";}","");a===c&&(e(".webodf-touchEnabled .webodf-selectionOverlay", +"{ display: block; }"," > .webodf-draggable"),a=gui.ShadowCursor.ShadowCursorMemberId,e(".webodf-selectionOverlay","{ fill: "+d+"; stroke: "+d+";}",""),e(".webodf-touchEnabled .webodf-selectionOverlay","{ display: block; }"," > .webodf-draggable"))}function l(a){var b,d;for(d in t)t.hasOwnProperty(d)&&(b=t[d],a?b.show():b.hide())}function a(a){n.getCarets().forEach(function(b){a?b.showHandle():b.hideHandle()})}function d(a){var b=a.getMemberId();a=a.getProperties();e(b,a.fullName,a.color)}function m(a){var d= +a.getMemberId(),c=b.getOdtDocument().getMember(d).getProperties();n.registerCursor(a,E,N);p.registerCursor(a,!0);if(a=n.getCaret(d))a.setAvatarImageUrl(c.imageUrl),a.setColor(c.color);runtime.log("+++ View here +++ eagerly created an Caret for '"+d+"'! +++")}function h(a){a=a.getMemberId();var b=p.getSelectionView(c),d=p.getSelectionView(gui.ShadowCursor.ShadowCursorMemberId),e=n.getCaret(c);a===c?(d.hide(),b&&b.show(),e&&e.show()):a===gui.ShadowCursor.ShadowCursorMemberId&&(d.show(),b&&b.hide(), +e&&e.hide())}function y(a){p.removeSelectionView(a)}function x(a){var d=a.paragraphElement,c=a.memberId;a=a.timeStamp;var e,f="",h=d.getElementsByTagNameNS("urn:webodf:names:editinfo","editinfo").item(0);h?(f=h.getAttributeNS("urn:webodf:names:editinfo","id"),e=t[f]):(f=Math.random().toString(),e=new ops.EditInfo(d,b.getOdtDocument()),e=new gui.EditInfoMarker(e,L),h=d.getElementsByTagNameNS("urn:webodf:names:editinfo","editinfo").item(0),h.setAttributeNS("urn:webodf:names:editinfo","id",f),t[f]=e); +e.addEdit(c,new Date(a));K.trigger()}function z(){var a;u.hasChildNodes()&&core.DomUtils.removeAllChildNodes(u);!0===f.getState(gui.CommonConstraints.EDIT.ANNOTATIONS.ONLY_DELETE_OWN)&&(a=b.getOdtDocument().getMember(c))&&(a=a.getProperties().fullName,u.appendChild(document.createTextNode(".annotationWrapper:not([creator = '"+a+"']) .annotationRemoveButton { display: none; }")))}function w(a){var b=Object.keys(t).map(function(a){return t[a]});A.unsubscribe(ops.Document.signalMemberAdded,d);A.unsubscribe(ops.Document.signalMemberUpdated, +d);A.unsubscribe(ops.Document.signalCursorAdded,m);A.unsubscribe(ops.Document.signalCursorRemoved,y);A.unsubscribe(ops.OdtDocument.signalParagraphChanged,x);A.unsubscribe(ops.Document.signalCursorMoved,h);A.unsubscribe(ops.OdtDocument.signalParagraphChanged,p.rerenderSelectionViews);A.unsubscribe(ops.OdtDocument.signalTableAdded,p.rerenderSelectionViews);A.unsubscribe(ops.OdtDocument.signalParagraphStyleModified,p.rerenderSelectionViews);f.unsubscribe(gui.CommonConstraints.EDIT.ANNOTATIONS.ONLY_DELETE_OWN, +z);A.unsubscribe(ops.Document.signalMemberAdded,z);A.unsubscribe(ops.Document.signalMemberUpdated,z);v.parentNode.removeChild(v);u.parentNode.removeChild(u);(function W(d,c){c?a(c):d<b.length?b[d].destroy(function(a){W(d+1,a)}):a()})(0,void 0)}var v,u,t={},A,I,K,L=g(k.editInfoMarkersInitiallyVisible,!0),E=g(k.caretAvatarsInitiallyVisible,!0),N=g(k.caretBlinksOnRangeSelect,!0);this.showEditInfoMarkers=function(){L||(L=!0,l(L))};this.hideEditInfoMarkers=function(){L&&(L=!1,l(L))};this.showCaretAvatars= +function(){E||(E=!0,a(E))};this.hideCaretAvatars=function(){E&&(E=!1,a(E))};this.getSession=function(){return b};this.getCaret=function(a){return n.getCaret(a)};this.destroy=function(a){var b=[K.destroy,w];A.unsubscribe(ops.OdtDocument.signalAnnotationAdded,r);core.Async.destroyAll(b,a)};A=b.getOdtDocument();I=A.getOdfCanvas();A.subscribe(ops.OdtDocument.signalAnnotationAdded,r);A.subscribe(ops.Document.signalMemberAdded,d);A.subscribe(ops.Document.signalMemberUpdated,d);A.subscribe(ops.Document.signalCursorAdded, +m);A.subscribe(ops.Document.signalCursorRemoved,y);A.subscribe(ops.OdtDocument.signalParagraphChanged,x);A.subscribe(ops.Document.signalCursorMoved,h);A.subscribe(ops.OdtDocument.signalParagraphChanged,p.rerenderSelectionViews);A.subscribe(ops.OdtDocument.signalTableAdded,p.rerenderSelectionViews);A.subscribe(ops.OdtDocument.signalParagraphStyleModified,p.rerenderSelectionViews);f.subscribe(gui.CommonConstraints.EDIT.ANNOTATIONS.ONLY_DELETE_OWN,z);A.subscribe(ops.Document.signalMemberAdded,z);A.subscribe(ops.Document.signalMemberUpdated, +z);v=q();v.appendChild(document.createTextNode("@namespace editinfo url(urn:webodf:names:editinfo);"));v.appendChild(document.createTextNode("@namespace dc url(http://purl.org/dc/elements/1.1/);"));u=q();z();K=core.Task.createRedrawTask(function(){var a=I.getAnnotationViewManager();a&&(a.rehighlightAnnotations(),A.fixCursorPositions())})}})(); +gui.SvgSelectionView=function(g){function k(){var a=d.getRootNode();m!==a&&(m=a,h=d.getCanvas().getSizer(),h.appendChild(x),x.setAttribute("class","webodf-selectionOverlay"),w.setAttribute("class","webodf-draggable"),v.setAttribute("class","webodf-draggable"),w.setAttribute("end","left"),v.setAttribute("end","right"),w.setAttribute("r",8),v.setAttribute("r",8),x.appendChild(z),x.appendChild(w),x.appendChild(v))}function c(a){a=a.getBoundingClientRect();return Boolean(a&&0!==a.height)}function b(a){var b= +u.getTextElements(a,!0,!1),d=a.cloneRange(),e=a.cloneRange();a=a.cloneRange();if(!b.length)return null;var f;a:{f=0;var h=b[f],g=d.startContainer===h?d.startOffset:0,m=g;d.setStart(h,g);for(d.setEnd(h,m);!c(d);){if(h.nodeType===Node.ELEMENT_NODE&&m<h.childNodes.length)m=h.childNodes.length;else if(h.nodeType===Node.TEXT_NODE&&m<h.length)m+=1;else if(b[f])h=b[f],f+=1,g=m=0;else{f=!1;break a}d.setStart(h,g);d.setEnd(h,m)}f=!0}if(!f)return null;a:{f=b.length-1;h=b[f];m=g=e.endContainer===h?e.endOffset: +h.nodeType===Node.TEXT_NODE?h.length:h.childNodes.length;e.setStart(h,g);for(e.setEnd(h,m);!c(e);){if(h.nodeType===Node.ELEMENT_NODE&&0<g)g=0;else if(h.nodeType===Node.TEXT_NODE&&0<g)--g;else if(b[f])h=b[f],--f,g=m=h.length||h.childNodes.length;else{b=!1;break a}e.setStart(h,g);e.setEnd(h,m)}b=!0}if(!b)return null;a.setStart(d.startContainer,d.startOffset);a.setEnd(e.endContainer,e.endOffset);return{firstRange:d,lastRange:e,fillerRange:a}}function f(a,b){var d={};d.top=Math.min(a.top,b.top);d.left= +Math.min(a.left,b.left);d.right=Math.max(a.right,b.right);d.bottom=Math.max(a.bottom,b.bottom);d.width=d.right-d.left;d.height=d.bottom-d.top;return d}function n(a,b){b&&0<b.width&&0<b.height&&(a=a?f(a,b):b);return a}function p(a){function b(a){K.setUnfilteredPosition(a,0);return v.acceptNode(a)===L&&x.acceptPosition(K)===L?L:E}function c(a){var d=null;b(a)===L&&(d=t.getBoundingClientRect(a));return d}var e=a.commonAncestorContainer,f=a.startContainer,h=a.endContainer,g=a.startOffset,m=a.endOffset, +k,l,p=null,q,r=y.createRange(),x,v=new odf.OdfNodeFilter,w;if(f===e||h===e)return r=a.cloneRange(),p=r.getBoundingClientRect(),r.detach(),p;for(a=f;a.parentNode!==e;)a=a.parentNode;for(l=h;l.parentNode!==e;)l=l.parentNode;x=d.createRootFilter(f);for(e=a.nextSibling;e&&e!==l;)q=c(e),p=n(p,q),e=e.nextSibling;if(u.isParagraph(a))p=n(p,t.getBoundingClientRect(a));else if(a.nodeType===Node.TEXT_NODE)e=a,r.setStart(e,g),r.setEnd(e,e===l?m:e.length),q=r.getBoundingClientRect(),p=n(p,q);else for(w=y.createTreeWalker(a, +NodeFilter.SHOW_TEXT,b,!1),e=w.currentNode=f;e&&e!==h;)r.setStart(e,g),r.setEnd(e,e.length),q=r.getBoundingClientRect(),p=n(p,q),k=e,g=0,e=w.nextNode();k||(k=f);if(u.isParagraph(l))p=n(p,t.getBoundingClientRect(l));else if(l.nodeType===Node.TEXT_NODE)e=l,r.setStart(e,e===a?g:0),r.setEnd(e,m),q=r.getBoundingClientRect(),p=n(p,q);else for(w=y.createTreeWalker(l,NodeFilter.SHOW_TEXT,b,!1),e=w.currentNode=h;e&&e!==k;)if(r.setStart(e,0),r.setEnd(e,m),q=r.getBoundingClientRect(),p=n(p,q),e=w.previousNode())m= +e.length;return p}function r(a,b){var d=a.getBoundingClientRect(),c={width:0};c.top=d.top;c.bottom=d.bottom;c.height=d.height;c.left=c.right=b?d.right:d.left;return c}function q(){var a=g.getSelectedRange(),d;if(d=I&&g.getSelectionType()===ops.OdtCursor.RangeSelection&&!a.collapsed){k();var c=t.getBoundingClientRect(h),e=A.getZoomLevel(),a=b(a),m,l,n,q,y,u;if(a){d=a.firstRange;m=a.lastRange;l=a.fillerRange;n=t.translateRect(r(d,!1),c,e);y=t.translateRect(r(m,!0),c,e);q=(q=p(l))?t.translateRect(q, +c,e):f(n,y);u=q.left;q=n.left+Math.max(0,q.width-(n.left-q.left));c=Math.min(n.top,y.top);e=y.top+y.height;u=[{x:n.left,y:c+n.height},{x:n.left,y:c},{x:q,y:c},{x:q,y:e-y.height},{x:y.right,y:e-y.height},{x:y.right,y:e},{x:u,y:e},{x:u,y:c+n.height},{x:n.left,y:c+n.height}];q="";var E;for(E=0;E<u.length;E+=1)q+=u[E].x+","+u[E].y+" ";z.setAttribute("points",q);w.setAttribute("cx",n.left);w.setAttribute("cy",c+n.height/2);v.setAttribute("cx",y.right);v.setAttribute("cy",e-y.height/2);d.detach();m.detach(); +l.detach()}d=Boolean(a)}x.style.display=d?"block":"none"}function e(a){I&&a===g&&N.trigger()}function l(a){a=8/a;w.setAttribute("r",a);v.setAttribute("r",a)}function a(a){h.removeChild(x);h.classList.remove("webodf-virtualSelections");g.getDocument().unsubscribe(ops.Document.signalCursorMoved,e);A.unsubscribe(gui.ZoomHelper.signalZoomChanged,l);a()}var d=g.getDocument(),m,h,y=d.getDOMDocument(),x=y.createElementNS("http://www.w3.org/2000/svg","svg"),z=y.createElementNS("http://www.w3.org/2000/svg", +"polygon"),w=y.createElementNS("http://www.w3.org/2000/svg","circle"),v=y.createElementNS("http://www.w3.org/2000/svg","circle"),u=odf.OdfUtils,t=core.DomUtils,A=d.getCanvas().getZoomHelper(),I=!0,K=g.getDocument().createPositionIterator(d.getRootNode()),L=NodeFilter.FILTER_ACCEPT,E=NodeFilter.FILTER_REJECT,N;this.rerender=function(){I&&N.trigger()};this.show=function(){I=!0;N.trigger()};this.hide=function(){I=!1;N.trigger()};this.destroy=function(b){core.Async.destroyAll([N.destroy,a],b)};(function(){var a= +g.getMemberId();N=core.Task.createRedrawTask(q);k();x.setAttributeNS("urn:webodf:names:editinfo","editinfo:memberid",a);h.classList.add("webodf-virtualSelections");g.getDocument().subscribe(ops.Document.signalCursorMoved,e);A.subscribe(gui.ZoomHelper.signalZoomChanged,l);l(A.getZoomLevel())})()}; +gui.UndoStateRules=function(){function g(b,c){var g=b.length;this.previous=function(){for(--g;0<=g;--g)if(c(b[g]))return b[g];return null}}function k(b){b=b.spec();var c;b.hasOwnProperty("position")&&(c=b.position);return c}function c(b){return b.isEdit}function b(b,c,g){if(!g)return g=k(b)-k(c),0===g||1===Math.abs(g);b=k(b);c=k(c);g=k(g);return b-c===c-g}this.isEditOperation=c;this.isPartOfOperationSet=function(f,k){var p=void 0!==f.group,r;if(!f.isEdit||0===k.length)return!0;r=k[k.length-1];if(p&& +f.group===r.group)return!0;a:switch(f.spec().optype){case "RemoveText":case "InsertText":r=!0;break a;default:r=!1}if(r&&k.some(c)){if(p){var q;p=f.spec().optype;r=new g(k,c);var e=r.previous(),l=null,a,d;runtime.assert(Boolean(e),"No edit operations found in state");d=e.group;runtime.assert(void 0!==d,"Operation has no group");for(a=1;e&&e.group===d;){if(p===e.spec().optype){q=e;break}e=r.previous()}if(q){for(e=r.previous();e;){if(e.group!==d){if(2===a)break;d=e.group;a+=1}if(p===e.spec().optype){l= +e;break}e=r.previous()}q=b(f,q,l)}else q=!1;return q}q=f.spec().optype;p=new g(k,c);r=p.previous();runtime.assert(Boolean(r),"No edit operations found in state");q=q===r.spec().optype?b(f,r,p.previous()):!1;return q}return!1}}; +(function(){function g(b,c){this.mainId=void 0!==b?b:-1;this.subId=void 0!==c?c:-1}function k(b,f,k){function p(c,a){return c+(b.isEditOperation(a)?1:0)}var r,q,e;this.addOperation=function(c){b.isEditOperation(c)&&(e+=1);q.push(c)};this.isNextStateId=function(b){return b.mainId===r&&b.subId===e};this.getNextStateId=function(){return new g(r,e)};this.getOperations=function(){return q};r=c+=1;q=f||[];e=f&&k?f.reduce(p,0):0}var c=0;gui.TrivialUndoManager=function(b){function c(){return!0!==u.isNextStateId(v)} +function n(a){a=a.getOperations();0<a.length&&(L=!0,z(a),L=!1)}function p(){I.emit(gui.UndoManager.signalUndoStackChanged,{undoAvailable:m.hasUndoStates(),redoAvailable:m.hasRedoStates()})}function r(a){var b=c();a!==b&&I.emit(gui.UndoManager.signalDocumentModifiedChanged,b)}function q(){u!==x&&u!==t[t.length-1]&&t.push(u)}function e(a){var b=a.previousSibling||a.nextSibling;a.parentNode.removeChild(a);h.normalizeTextNodes(b)}function l(a){return Object.keys(a).map(function(b){return a[b]})}function a(a){function b(a){var h= +a.spec();if(e[h.memberid])switch(h.optype){case "AddCursor":d[h.memberid]||(d[h.memberid]=a,delete e[h.memberid],--f);break;case "MoveCursor":c[h.memberid]||(c[h.memberid]=a)}}var d={},c={},e={},f,h;h=a.pop();w.getMemberIds().forEach(function(a){e[a]=!0});for(f=Object.keys(e).length;h&&0<f;)h=h.getOperations(),h.reverse(),h.forEach(b),h=a.pop();return new k(K,l(d).concat(l(c)))}function d(){var b=c(),d=y=w.cloneDocumentElement();h.getElementsByTagNameNS(d,"urn:webodf:names:cursor","cursor").forEach(e); +h.getElementsByTagNameNS(d,"urn:webodf:names:cursor","anchor").forEach(e);q();u=x=a([x].concat(t));t.length=0;A.length=0;b||(v=u.getNextStateId());p();r(b)}var m=this,h=core.DomUtils,y,x,z,w,v,u,t=[],A=[],I=new core.EventNotifier([gui.UndoManager.signalUndoStackChanged,gui.UndoManager.signalUndoStateCreated,gui.UndoManager.signalUndoStateModified,gui.UndoManager.signalDocumentModifiedChanged,gui.TrivialUndoManager.signalDocumentRootReplaced]),K=b||new gui.UndoStateRules,L=!1;this.subscribe=function(a, +b){I.subscribe(a,b)};this.unsubscribe=function(a,b){I.unsubscribe(a,b)};this.isDocumentModified=c;this.setDocumentModified=function(a){c()!==a&&(v=a?new g:u.getNextStateId(),I.emit(gui.UndoManager.signalDocumentModifiedChanged,a))};this.hasUndoStates=function(){return 0<t.length};this.hasRedoStates=function(){return 0<A.length};this.setDocument=function(a){w=a};this.purgeInitialState=function(){var a=c();t.length=0;A.length=0;u=x=new k(K);v=u.getNextStateId();y=null;p();r(a)};this.setInitialState= +d;this.initialize=function(){y||d()};this.setPlaybackFunction=function(a){z=a};this.onOperationExecuted=function(a){if(!L){var b=c();K.isEditOperation(a)&&(u===x||0<A.length)||!K.isPartOfOperationSet(a,u.getOperations())?(A.length=0,q(),u=new k(K,[a],!0),t.push(u),I.emit(gui.UndoManager.signalUndoStateCreated,{operations:u.getOperations()}),p()):(u.addOperation(a),I.emit(gui.UndoManager.signalUndoStateModified,{operations:u.getOperations()}));r(b)}};this.moveForward=function(a){for(var b=0,d=c(), +e;a&&A.length;)e=A.pop(),t.push(e),n(e),--a,b+=1;b&&(u=t[t.length-1],p(),r(d));return b};this.moveBackward=function(a){for(var b=0,d=c();a&&t.length;)A.push(t.pop()),--a,b+=1;b&&(w.getMemberIds().forEach(function(a){w.hasCursor(a)&&w.removeCursor(a)}),w.setDocumentElement(y.cloneNode(!0)),I.emit(gui.TrivialUndoManager.signalDocumentRootReplaced,{}),n(x),t.forEach(n),u=t[t.length-1]||x,p(),r(d));return b};u=x=new k(K);v=u.getNextStateId()};gui.TrivialUndoManager.signalDocumentRootReplaced="documentRootReplaced"})(); +odf.GraphicProperties=function(g,k,c){var b=this,f=odf.Namespaces.stylens,n=odf.Namespaces.svgns;this.verticalPos=function(){return b.data.value("verticalPos")};this.verticalRel=function(){return b.data.value("verticalRel")};this.horizontalPos=function(){return b.data.value("horizontalPos")};this.horizontalRel=function(){return b.data.value("horizontalRel")};this.strokeWidth=function(){return b.data.value("strokeWidth")};b.data=new odf.LazyStyleProperties(void 0===c?void 0:c.data,{verticalPos:function(){var b= +g.getAttributeNS(f,"vertical-pos");return""===b?void 0:b},verticalRel:function(){var b=g.getAttributeNS(f,"vertical-rel");return""===b?void 0:b},horizontalPos:function(){var b=g.getAttributeNS(f,"horizontal-pos");return""===b?void 0:b},horizontalRel:function(){var b=g.getAttributeNS(f,"horizontal-rel");return""===b?void 0:b},strokeWidth:function(){var b=g.getAttributeNS(n,"stroke-width");return k.parseLength(b)}})}; +odf.ComputedGraphicProperties=function(){var g;this.setGraphicProperties=function(k){g=k};this.verticalPos=function(){return g&&g.verticalPos()||"from-top"};this.verticalRel=function(){return g&&g.verticalRel()||"page"};this.horizontalPos=function(){return g&&g.horizontalPos()||"from-left"};this.horizontalRel=function(){return g&&g.horizontalRel()||"page"}}; +odf.PageLayoutProperties=function(g,k,c){var b=this,f=odf.Namespaces.fons;this.pageHeight=function(){return b.data.value("pageHeight")||1123};this.pageWidth=function(){return b.data.value("pageWidth")||794};b.data=new odf.LazyStyleProperties(void 0===c?void 0:c.data,{pageHeight:function(){var b;g&&(b=g.getAttributeNS(f,"page-height"),b=k.parseLength(b));return b},pageWidth:function(){var b;g&&(b=g.getAttributeNS(f,"page-width"),b=k.parseLength(b));return b}})}; +odf.PageLayout=function(g,k,c){var b=null;g&&(b=k.getPropertiesElement("page-layout-properties",g));this.pageLayout=new odf.PageLayoutProperties(b,k,c&&c.pageLayout)};odf.PageLayoutCache=function(){};odf.PageLayoutCache.prototype.getPageLayout=function(g){};odf.PageLayoutCache.prototype.getDefaultPageLayout=function(){}; +odf.ParagraphProperties=function(g,k,c){var b=this,f=odf.Namespaces.fons;this.marginTop=function(){return b.data.value("marginTop")};b.data=new odf.LazyStyleProperties(void 0===c?void 0:c.data,{marginTop:function(){var b=g.getAttributeNS(f,"margin-top");return k.parsePositiveLengthOrPercent(b,"marginTop",c&&c.data)}})}; +odf.ComputedParagraphProperties=function(){var g={},k=[];this.setStyleChain=function(c){k=c;g={}};this.marginTop=function(){var c,b;if(g.hasOwnProperty("marginTop"))c=g.marginTop;else{for(b=0;void 0===c&&b<k.length;b+=1)c=k[b].marginTop();g.marginTop=c}return c||0}}; +odf.TextProperties=function(g,k,c){var b=this,f=odf.Namespaces.fons;this.fontSize=function(){return b.data.value("fontSize")};b.data=new odf.LazyStyleProperties(void 0===c?void 0:c.data,{fontSize:function(){var b=g.getAttributeNS(f,"font-size");return k.parsePositiveLengthOrPercent(b,"fontSize",c&&c.data)}})}; +odf.ComputedTextProperties=function(){var g={},k=[];this.setStyleChain=function(c){k=c;g={}};this.fontSize=function(){var c,b;if(g.hasOwnProperty("fontSize"))c=g.fontSize;else{for(b=0;void 0===c&&b<k.length;b+=1)c=k[b].fontSize();g.fontSize=c}return c||12}};odf.MasterPage=function(g,k){var c;g?(c=g.getAttributeNS(odf.Namespaces.stylens,"page-layout-name"),this.pageLayout=k.getPageLayout(c)):this.pageLayout=k.getDefaultPageLayout()};odf.MasterPageCache=function(){}; +odf.MasterPageCache.prototype.getMasterPage=function(g){}; +odf.StylePileEntry=function(g,k,c,b){this.masterPage=function(){var b=g.getAttributeNS(odf.Namespaces.stylens,"master-page-name"),k=null;b&&(k=c.getMasterPage(b));return k};(function(c){var n=g.getAttributeNS(odf.Namespaces.stylens,"family"),p=null;if("graphic"===n||"chart"===n)c.graphic=void 0===b?void 0:b.graphic,p=k.getPropertiesElement("graphic-properties",g,p),null!==p&&(c.graphic=new odf.GraphicProperties(p,k,c.graphic));if("paragraph"===n||"table-cell"===n||"graphic"===n||"presentation"=== +n||"chart"===n)c.paragraph=void 0===b?void 0:b.paragraph,p=k.getPropertiesElement("paragraph-properties",g,p),null!==p&&(c.paragraph=new odf.ParagraphProperties(p,k,c.paragraph));if("text"===n||"paragraph"===n||"table-cell"===n||"graphic"===n||"presentation"===n||"chart"===n)c.text=void 0===b?void 0:b.text,p=k.getPropertiesElement("text-properties",g,p),null!==p&&(c.text=new odf.TextProperties(p,k,c.text))})(this)}; +odf.StylePile=function(g,k){function c(c,a){var d,f;c.hasAttributeNS(b,"parent-style-name")&&(f=c.getAttributeNS(b,"parent-style-name"),-1===a.indexOf(f)&&(d=e(f,a)));return new odf.StylePileEntry(c,g,k,d)}var b=odf.Namespaces.stylens,f={},n={},p,r={},q={},e;e=function(b,a){var d=r[b],e;!d&&(e=f[b])&&(a.push(b),d=c(e,a),r[b]=d);return d};this.getStyle=function(b){var a=q[b]||r[b],d,e=[];a||(d=n[b],d||(d=f[b])&&e.push(b),d&&(a=c(d,e)));return a};this.addCommonStyle=function(c){var a;c.hasAttributeNS(b, +"name")&&(a=c.getAttributeNS(b,"name"),f.hasOwnProperty(a)||(f[a]=c))};this.addAutomaticStyle=function(c){var a;c.hasAttributeNS(b,"name")&&(a=c.getAttributeNS(b,"name"),n.hasOwnProperty(a)||(n[a]=c))};this.setDefaultStyle=function(b){void 0===p&&(p=c(b,[]))};this.getDefaultStyle=function(){return p}};odf.ComputedGraphicStyle=function(){this.text=new odf.ComputedTextProperties;this.paragraph=new odf.ComputedParagraphProperties;this.graphic=new odf.ComputedGraphicProperties}; +odf.ComputedParagraphStyle=function(){this.text=new odf.ComputedTextProperties;this.paragraph=new odf.ComputedParagraphProperties};odf.ComputedTextStyle=function(){this.text=new odf.ComputedTextProperties}; +odf.StyleCache=function(g){function k(a,b,d,c){b=d.getAttributeNS(b,"class-names");var e;if(b)for(b=b.split(" "),e=0;e<b.length;e+=1)if(d=b[e])c.push(a),c.push(d)}function c(a,b){var d=x.getStyleName("paragraph",a);void 0!==d&&(b.push("paragraph"),b.push(d));a.namespaceURI!==h||"h"!==a.localName&&"p"!==a.localName||k("paragraph",h,a,b);return b}function b(a,b,d){var c=[],e,h,f,g;for(e=0;e<a.length;e+=2)f=a[e],g=a[e+1],f=r[f],g=f.getStyle(g),void 0!==g&&(g=g[b],void 0!==g&&g!==h&&(c.push(g),h=g)); +f=r[d];if(g=f.getDefaultStyle())g=g[b],void 0!==g&&g!==h&&c.push(g);return c}function f(a,b){var d=x.getStyleName("text",a),e=a.parentNode;void 0!==d&&(b.push("text"),b.push(d));"span"===a.localName&&a.namespaceURI===h&&k("text",h,a,b);if(!e||e===g)return b;e.namespaceURI!==h||"p"!==e.localName&&"h"!==e.localName?f(e,b):c(e,b);return b}function n(a){a=a.getAttributeNS(y,"family");return r[a]}var p=this,r,q,e,l,a,d,m,h=odf.Namespaces.textns,y=odf.Namespaces.stylens,x=new odf.StyleInfo,z=new odf.StyleParseUtils, +w,v,u,t,A,I;this.getComputedGraphicStyle=function(a){var d=[];a=x.getStyleName("graphic",a);void 0!==a&&(d.push("graphic"),d.push(a));a=d.join("/");var c=l[a];runtime.assert(0===d.length%2,"Invalid style chain.");void 0===c&&(c=new odf.ComputedGraphicStyle,c.graphic.setGraphicProperties(b(d,"graphic","graphic")[0]),c.text.setStyleChain(b(d,"text","graphic")),c.paragraph.setStyleChain(b(d,"paragraph","graphic")),l[a]=c);return c};this.getComputedParagraphStyle=function(a){a=c(a,[]);var d=a.join("/"), +f=e[d];runtime.assert(0===a.length%2,"Invalid style chain.");void 0===f&&(f=new odf.ComputedParagraphStyle,f.text.setStyleChain(b(a,"text","paragraph")),f.paragraph.setStyleChain(b(a,"paragraph","paragraph")),e[d]=f);return f};this.getComputedTextStyle=function(a){a=f(a,[]);var d=a.join("/"),c=q[d];runtime.assert(0===a.length%2,"Invalid style chain.");void 0===c&&(c=new odf.ComputedTextStyle,c.text.setStyleChain(b(a,"text","text")),q[d]=c);return c};this.getPageLayout=function(a){var b=I[a];b||((b= +A[a])?(b=new odf.PageLayout(b,z,t),I[a]=b):b=t);return b};this.getDefaultPageLayout=function(){return t};this.getMasterPage=function(a){var b=v[a];void 0===b&&((b=w[a])?(b=new odf.MasterPage(b,p),v[a]=b):b=null);return b};this.getDefaultMasterPage=function(){return u};this.update=function(){var b,c,f=null,h=null;q={};e={};l={};w={};v={};I={};A={};a=new odf.StylePile(z,p);d=new odf.StylePile(z,p);m=new odf.StylePile(z,p);r={text:a,paragraph:d,graphic:m};for(b=g.styles.firstElementChild;b;)b.namespaceURI=== +y&&((c=n(b))?"style"===b.localName?c.addCommonStyle(b):"default-style"===b.localName&&c.setDefaultStyle(b):"default-page-layout"===b.localName&&(f=b)),b=b.nextElementSibling;t=new odf.PageLayout(f,z);for(b=g.automaticStyles.firstElementChild;b;)b.namespaceURI===y&&((c=n(b))&&"style"===b.localName?c.addAutomaticStyle(b):"page-layout"===b.localName&&(A[b.getAttributeNS(y,"name")]=b)),b=b.nextElementSibling;for(b=g.masterStyles.firstElementChild;b;)b.namespaceURI===y&&"master-page"===b.localName&&(h= +h||b,c=b,f=c.getAttributeNS(y,"name"),0<f.length&&!w.hasOwnProperty(f)&&(w[f]=c)),b=b.nextElementSibling;u=new odf.MasterPage(h,p)}}; +ops.OperationTransformMatrix=function(){function g(a){a.position+=a.length;a.length*=-1}function k(a){var b=0>a.length;b&&g(a);return b}function c(a,b){function c(f){a[f]===b&&e.push(f)}var e=[];a&&["style:parent-style-name","style:next-style-name"].forEach(c);return e}function b(a,b){function c(e){a[e]===b&&delete a[e]}a&&["style:parent-style-name","style:next-style-name"].forEach(c)}function f(a){var b={};Object.keys(a).forEach(function(c){b[c]="object"===typeof a[c]?f(a[c]):a[c]});return b}function n(a, +b,c,e){var f,g=!1,k=!1,l,n=[];e&&e.attributes&&(n=e.attributes.split(","));a&&(c||0<n.length)&&Object.keys(a).forEach(function(b){var d=a[b],e;"object"!==typeof d&&(c&&(e=c[b]),void 0!==e?(delete a[b],k=!0,e===d&&(delete c[b],g=!0)):-1!==n.indexOf(b)&&(delete a[b],k=!0))});if(b&&b.attributes&&(c||0<n.length)){l=b.attributes.split(",");for(e=0;e<l.length;e+=1)if(f=l[e],c&&void 0!==c[f]||n&&-1!==n.indexOf(f))l.splice(e,1),--e,k=!0;0<l.length?b.attributes=l.join(","):delete b.attributes}return{majorChanged:g, +minorChanged:k}}function p(a){for(var b in a)if(a.hasOwnProperty(b))return!0;return!1}function r(a){for(var b in a)if(a.hasOwnProperty(b)&&("attributes"!==b||0<a.attributes.length))return!0;return!1}function q(a,b,c,e,f){var g=a?a[f]:null,k=b?b[f]:null,l=c?c[f]:null,q=e?e[f]:null,u;u=n(g,k,l,q);g&&!p(g)&&delete a[f];k&&!r(k)&&delete b[f];l&&!p(l)&&delete c[f];q&&!r(q)&&delete e[f];return u}function e(a,b){return{opSpecsA:[a],opSpecsB:[b]}}var l;l={AddAnnotation:{AddAnnotation:function(a,b,c){var e; +a.position<b.position?(e=a,c=b):b.position<a.position?(e=b,c=a):(e=c?a:b,c=c?b:a);c.position<e.position+e.length&&(e.length+=2);c.position+=2;return{opSpecsA:[a],opSpecsB:[b]}},AddCursor:e,AddMember:e,AddStyle:e,ApplyDirectStyling:function(a,b){a.position<=b.position?b.position+=2:a.position<=b.position+b.length&&(b.length+=2);return{opSpecsA:[a],opSpecsB:[b]}},InsertText:function(a,b){b.position<=a.position?a.position+=b.text.length:(void 0!==a.length&&b.position<=a.position+a.length&&(a.length+= +b.text.length),b.position+=2);return{opSpecsA:[a],opSpecsB:[b]}},MergeParagraph:function(a,b){b.sourceStartPosition<=a.position?--a.position:(void 0!==a.length&&b.sourceStartPosition<=a.position+a.length&&--a.length,b.sourceStartPosition+=2,a.position<b.destinationStartPosition&&(b.destinationStartPosition+=2));return{opSpecsA:[a],opSpecsB:[b]}},MoveCursor:function(a,b){var c=k(b);a.position<b.position?b.position+=2:a.position<b.position+b.length&&(b.length+=2);c&&g(b);return{opSpecsA:[a],opSpecsB:[b]}}, +RemoveAnnotation:function(a,b){a.position<b.position?(b.position<a.position+a.length&&(a.length-=b.length+2),b.position+=2):a.position-=b.length+2;return{opSpecsA:[a],opSpecsB:[b]}},RemoveCursor:e,RemoveMember:e,RemoveStyle:e,RemoveText:function(a,b){var c=b.position,e=b.position+b.length,f,g=[a],k=[b];a.position<=b.position?b.position+=2:a.position<e&&(b.length=a.position-b.position,f={optype:"RemoveText",memberid:b.memberid,timestamp:b.timestamp,position:a.position+2,length:e-a.position},k.unshift(f)); +b.position+b.length<=a.position?(a.position-=b.length,void 0!==a.length&&f&&(a.length=f.length>=a.length?0:a.length-f.length)):void 0!==a.length&&(f=a.position+a.length,e<=f?a.length-=b.length:c<f&&(a.length=c-a.position));return{opSpecsA:g,opSpecsB:k}},SetParagraphStyle:function(a,b){a.position<b.position&&(b.position+=2);return{opSpecsA:[a],opSpecsB:[b]}},SplitParagraph:function(a,b){a.position<b.sourceParagraphPosition&&(b.sourceParagraphPosition+=2);b.position<=a.position?a.position+=1:(void 0!== +a.length&&b.position<=a.position+a.length&&(a.length+=1),b.position+=2);return{opSpecsA:[a],opSpecsB:[b]}},UpdateMember:e,UpdateMetadata:e,UpdateParagraphStyle:e},AddCursor:{AddCursor:e,AddMember:e,AddStyle:e,ApplyDirectStyling:e,InsertText:e,MergeParagraph:e,MoveCursor:e,RemoveAnnotation:e,RemoveCursor:e,RemoveMember:e,RemoveStyle:e,RemoveText:e,SetParagraphStyle:e,SplitParagraph:e,UpdateMember:e,UpdateMetadata:e,UpdateParagraphStyle:e},AddMember:{AddStyle:e,ApplyDirectStyling:e,InsertText:e,MergeParagraph:e, +MoveCursor:e,RemoveAnnotation:e,RemoveCursor:e,RemoveStyle:e,RemoveText:e,SetParagraphStyle:e,SplitParagraph:e,UpdateMetadata:e,UpdateParagraphStyle:e},AddStyle:{AddStyle:e,ApplyDirectStyling:e,InsertText:e,MergeParagraph:e,MoveCursor:e,RemoveAnnotation:e,RemoveCursor:e,RemoveMember:e,RemoveStyle:function(a,d){var e,f=[a],g=[d];a.styleFamily===d.styleFamily&&(e=c(a.setProperties,d.styleName),0<e.length&&(e={optype:"UpdateParagraphStyle",memberid:d.memberid,timestamp:d.timestamp,styleName:a.styleName, +removedProperties:{attributes:e.join(",")}},g.unshift(e)),b(a.setProperties,d.styleName));return{opSpecsA:f,opSpecsB:g}},RemoveText:e,SetParagraphStyle:e,SplitParagraph:e,UpdateMember:e,UpdateMetadata:e,UpdateParagraphStyle:e},ApplyDirectStyling:{ApplyDirectStyling:function(a,b,c){var e,g,k,l,n,r,u,t;l=[a];k=[b];if(!(a.position+a.length<=b.position||a.position>=b.position+b.length)){e=c?a:b;g=c?b:a;if(a.position!==b.position||a.length!==b.length)r=f(e),u=f(g);b=q(g.setProperties,null,e.setProperties, +null,"style:text-properties");if(b.majorChanged||b.minorChanged)k=[],a=[],l=e.position+e.length,n=g.position+g.length,g.position<e.position?b.minorChanged&&(t=f(u),t.length=e.position-g.position,a.push(t),g.position=e.position,g.length=n-g.position):e.position<g.position&&b.majorChanged&&(t=f(r),t.length=g.position-e.position,k.push(t),e.position=g.position,e.length=l-e.position),n>l?b.minorChanged&&(r=u,r.position=l,r.length=n-l,a.push(r),g.length=l-g.position):l>n&&b.majorChanged&&(r.position=n, +r.length=l-n,k.push(r),e.length=n-e.position),e.setProperties&&p(e.setProperties)&&k.push(e),g.setProperties&&p(g.setProperties)&&a.push(g),c?(l=k,k=a):l=a}return{opSpecsA:l,opSpecsB:k}},InsertText:function(a,b){b.position<=a.position?a.position+=b.text.length:b.position<=a.position+a.length&&(a.length+=b.text.length);return{opSpecsA:[a],opSpecsB:[b]}},MergeParagraph:function(a,b){var c=a.position,e=a.position+a.length;c>=b.sourceStartPosition&&--c;e>=b.sourceStartPosition&&--e;a.position=c;a.length= +e-c;return{opSpecsA:[a],opSpecsB:[b]}},MoveCursor:e,RemoveAnnotation:function(a,b){var c=a.position,e=a.position+a.length,f=b.position+b.length,g=[a],k=[b];b.position<=c&&e<=f?g=[]:(f<c&&(c-=b.length+2),f<e&&(e-=b.length+2),a.position=c,a.length=e-c);return{opSpecsA:g,opSpecsB:k}},RemoveCursor:e,RemoveMember:e,RemoveStyle:e,RemoveText:function(a,b){var c=a.position+a.length,e=b.position+b.length,f=[a],g=[b];e<=a.position?a.position-=b.length:b.position<c&&(a.position<b.position?a.length=e<c?a.length- +b.length:b.position-a.position:(a.position=b.position,e<c?a.length=c-e:f=[]));return{opSpecsA:f,opSpecsB:g}},SetParagraphStyle:e,SplitParagraph:function(a,b){b.position<a.position?a.position+=1:b.position<a.position+a.length&&(a.length+=1);return{opSpecsA:[a],opSpecsB:[b]}},UpdateMember:e,UpdateMetadata:e,UpdateParagraphStyle:e},InsertText:{InsertText:function(a,b,c){a.position<b.position?b.position+=a.text.length:a.position>b.position?a.position+=b.text.length:c?b.position+=a.text.length:a.position+= +b.text.length;return{opSpecsA:[a],opSpecsB:[b]}},MergeParagraph:function(a,b){a.position>=b.sourceStartPosition?--a.position:(a.position<b.sourceStartPosition&&(b.sourceStartPosition+=a.text.length),a.position<b.destinationStartPosition&&(b.destinationStartPosition+=a.text.length));return{opSpecsA:[a],opSpecsB:[b]}},MoveCursor:function(a,b){var c=k(b);a.position<b.position?b.position+=a.text.length:a.position<b.position+b.length&&(b.length+=a.text.length);c&&g(b);return{opSpecsA:[a],opSpecsB:[b]}}, +RemoveAnnotation:function(a,b){var c=a.position,e=b.position+b.length,f=[a],g=[b];b.position<=c&&c<=e?(f=[],b.length+=a.text.length):e<a.position?a.position-=b.length+2:b.position+=a.text.length;return{opSpecsA:f,opSpecsB:g}},RemoveCursor:e,RemoveMember:e,RemoveStyle:e,RemoveText:function(a,b){var c;c=b.position+b.length;var e=[a],f=[b];c<=a.position?a.position-=b.length:a.position<=b.position?b.position+=a.text.length:(b.length=a.position-b.position,c={optype:"RemoveText",memberid:b.memberid,timestamp:b.timestamp, +position:a.position+a.text.length,length:c-a.position},f.unshift(c),a.position=b.position);return{opSpecsA:e,opSpecsB:f}},SetParagraphStyle:function(a,b){b.position>a.position&&(b.position+=a.text.length);return{opSpecsA:[a],opSpecsB:[b]}},SplitParagraph:function(a,b){a.position<b.sourceParagraphPosition&&(b.sourceParagraphPosition+=a.text.length);a.position<=b.position?b.position+=a.text.length:a.position+=1;return{opSpecsA:[a],opSpecsB:[b]}},UpdateMember:e,UpdateMetadata:e,UpdateParagraphStyle:e}, +MergeParagraph:{MergeParagraph:function(a,b,c){var e=[a],f=[b],g;a.destinationStartPosition===b.destinationStartPosition?(e=[],f=[],a.moveCursor&&(g={optype:"MoveCursor",memberid:a.memberid,timestamp:a.timestamp,position:a.sourceStartPosition-1},e.push(g)),b.moveCursor&&(g={optype:"MoveCursor",memberid:b.memberid,timestamp:b.timestamp,position:b.sourceStartPosition-1},f.push(g)),a=c?a:b,a={optype:"SetParagraphStyle",memberid:a.memberid,timestamp:a.timestamp,position:a.destinationStartPosition,styleName:a.paragraphStyleName}, +c?e.push(a):f.push(a)):b.sourceStartPosition===a.destinationStartPosition?(a.destinationStartPosition=b.destinationStartPosition,--a.sourceStartPosition,a.paragraphStyleName=b.paragraphStyleName):a.sourceStartPosition===b.destinationStartPosition?(b.destinationStartPosition=a.destinationStartPosition,--b.sourceStartPosition,b.paragraphStyleName=a.paragraphStyleName):a.destinationStartPosition<b.destinationStartPosition?(--b.destinationStartPosition,--b.sourceStartPosition):(--a.destinationStartPosition, +--a.sourceStartPosition);return{opSpecsA:e,opSpecsB:f}},MoveCursor:function(a,b){var c=b.position,e=b.position+b.length,f=Math.min(c,e),c=Math.max(c,e);f>=a.sourceStartPosition&&--f;c>=a.sourceStartPosition&&--c;0<=b.length?(b.position=f,b.length=c-f):(b.position=c,b.length=f-c);return{opSpecsA:[a],opSpecsB:[b]}},RemoveAnnotation:function(a,b){var c=b.position+b.length,e=[a],f=[b];b.position<=a.destinationStartPosition&&a.sourceStartPosition<=c?(e=[],--b.length):a.sourceStartPosition<b.position?--b.position: +(c<a.destinationStartPosition&&(a.destinationStartPosition-=b.length+2),c<a.sourceStartPosition&&(a.sourceStartPosition-=b.length+2));return{opSpecsA:e,opSpecsB:f}},RemoveCursor:e,RemoveMember:e,RemoveStyle:e,RemoveText:function(a,b){b.position>=a.sourceStartPosition?--b.position:(b.position<a.destinationStartPosition&&(a.destinationStartPosition-=b.length),b.position<a.sourceStartPosition&&(a.sourceStartPosition-=b.length));return{opSpecsA:[a],opSpecsB:[b]}},SetParagraphStyle:function(a,b){var c= +[a],e=[b];if(b.position>a.sourceStartPosition)--b.position;else if(b.position===a.destinationStartPosition||b.position===a.sourceStartPosition)b.position=a.destinationStartPosition,a.paragraphStyleName=b.styleName;return{opSpecsA:c,opSpecsB:e}},SplitParagraph:function(a,b){var c,e=[a],f=[b];b.position<a.destinationStartPosition?(a.destinationStartPosition+=1,a.sourceStartPosition+=1):b.position>=a.destinationStartPosition&&b.position<a.sourceStartPosition?(b.paragraphStyleName=a.paragraphStyleName, +c={optype:"SetParagraphStyle",memberid:a.memberid,timestamp:a.timestamp,position:a.destinationStartPosition,styleName:a.paragraphStyleName},e.push(c),b.position===a.sourceStartPosition-1&&a.moveCursor&&(c={optype:"MoveCursor",memberid:a.memberid,timestamp:a.timestamp,position:b.position,length:0},e.push(c)),a.destinationStartPosition=b.position+1,a.sourceStartPosition+=1):b.position>=a.sourceStartPosition&&(--b.position,--b.sourceParagraphPosition);return{opSpecsA:e,opSpecsB:f}},UpdateMember:e,UpdateMetadata:e, +UpdateParagraphStyle:e},MoveCursor:{MoveCursor:e,RemoveAnnotation:function(a,b){var c=k(a),e=a.position+a.length,f=b.position+b.length;b.position<=a.position&&e<=f?(a.position=b.position-1,a.length=0):(f<a.position?a.position-=b.length+2:f<e&&(a.length-=b.length+2),c&&g(a));return{opSpecsA:[a],opSpecsB:[b]}},RemoveCursor:function(a,b){return{opSpecsA:a.memberid===b.memberid?[]:[a],opSpecsB:[b]}},RemoveMember:e,RemoveStyle:e,RemoveText:function(a,b){var c=k(a),e=a.position+a.length,f=b.position+b.length; +f<=a.position?a.position-=b.length:b.position<e&&(a.position<b.position?a.length=f<e?a.length-b.length:b.position-a.position:(a.position=b.position,a.length=f<e?e-f:0));c&&g(a);return{opSpecsA:[a],opSpecsB:[b]}},SetParagraphStyle:e,SplitParagraph:function(a,b){var c=k(a);b.position<a.position?a.position+=1:b.position<a.position+a.length&&(a.length+=1);c&&g(a);return{opSpecsA:[a],opSpecsB:[b]}},UpdateMember:e,UpdateMetadata:e,UpdateParagraphStyle:e},RemoveAnnotation:{RemoveAnnotation:function(a,b){var c= +[a],e=[b];a.position===b.position&&a.length===b.length?(c=[],e=[]):a.position<b.position?b.position-=a.length+2:a.position-=b.length+2;return{opSpecsA:c,opSpecsB:e}},RemoveCursor:e,RemoveMember:e,RemoveStyle:e,RemoveText:function(a,b){var c=a.position+a.length,e=b.position+b.length,f=[a],g=[b];a.position<=b.position&&e<=c?(g=[],a.length-=b.length):e<a.position?a.position-=b.length:b.position<a.position?(a.position=b.position+1,b.length-=a.length+2):b.position-=a.length+2;return{opSpecsA:f,opSpecsB:g}}, +SetParagraphStyle:function(a,b){var c=b.position,e=a.position+a.length,f=[a],g=[b];a.position<=c&&c<=e?g=[]:e<c&&(b.position-=a.length+2);return{opSpecsA:f,opSpecsB:g}},SplitParagraph:function(a,b){var c=b.position,e=a.position+a.length,f=[a],g=[b];a.position<=c&&c<=e?(g=[],a.length+=1):(e<b.sourceParagraphPosition&&(b.sourceParagraphPosition-=a.length+2),e<c?b.position-=a.length+2:a.position+=1);return{opSpecsA:f,opSpecsB:g}},UpdateMember:e,UpdateMetadata:e,UpdateParagraphStyle:e},RemoveCursor:{RemoveCursor:function(a, +b){var c=a.memberid===b.memberid;return{opSpecsA:c?[]:[a],opSpecsB:c?[]:[b]}},RemoveMember:e,RemoveStyle:e,RemoveText:e,SetParagraphStyle:e,SplitParagraph:e,UpdateMember:e,UpdateMetadata:e,UpdateParagraphStyle:e},RemoveMember:{RemoveStyle:e,RemoveText:e,SetParagraphStyle:e,SplitParagraph:e,UpdateMetadata:e,UpdateParagraphStyle:e},RemoveStyle:{RemoveStyle:function(a,b){var c=a.styleName===b.styleName&&a.styleFamily===b.styleFamily;return{opSpecsA:c?[]:[a],opSpecsB:c?[]:[b]}},RemoveText:e,SetParagraphStyle:function(a, +b){var c,e=[a],f=[b];"paragraph"===a.styleFamily&&a.styleName===b.styleName&&(c={optype:"SetParagraphStyle",memberid:a.memberid,timestamp:a.timestamp,position:b.position,styleName:""},e.unshift(c),b.styleName="");return{opSpecsA:e,opSpecsB:f}},SplitParagraph:e,UpdateMember:e,UpdateMetadata:e,UpdateParagraphStyle:function(a,d){var e,f=[a],g=[d];"paragraph"===a.styleFamily&&(e=c(d.setProperties,a.styleName),0<e.length&&(e={optype:"UpdateParagraphStyle",memberid:a.memberid,timestamp:a.timestamp,styleName:d.styleName, +removedProperties:{attributes:e.join(",")}},f.unshift(e)),a.styleName===d.styleName?g=[]:b(d.setProperties,a.styleName));return{opSpecsA:f,opSpecsB:g}}},RemoveText:{RemoveText:function(a,b){var c=a.position+a.length,e=b.position+b.length,f=[a],g=[b];e<=a.position?a.position-=b.length:c<=b.position?b.position-=a.length:b.position<c&&(a.position<b.position?(a.length=e<c?a.length-b.length:b.position-a.position,c<e?(b.position=a.position,b.length=e-c):g=[]):(c<e?b.length-=a.length:b.position<a.position? +b.length=a.position-b.position:g=[],e<c?(a.position=b.position,a.length=c-e):f=[]));return{opSpecsA:f,opSpecsB:g}},SetParagraphStyle:function(a,b){a.position<b.position&&(b.position-=a.length);return{opSpecsA:[a],opSpecsB:[b]}},SplitParagraph:function(a,b){var c=a.position+a.length,e=[a],f=[b];b.position<=a.position?a.position+=1:b.position<c&&(a.length=b.position-a.position,c={optype:"RemoveText",memberid:a.memberid,timestamp:a.timestamp,position:b.position+1,length:c-b.position},e.unshift(c));a.position+ +a.length<=b.position?b.position-=a.length:a.position<b.position&&(b.position=a.position);a.position+a.length<b.sourceParagraphPosition&&(b.sourceParagraphPosition-=a.length);return{opSpecsA:e,opSpecsB:f}},UpdateMember:e,UpdateMetadata:e,UpdateParagraphStyle:e},SetParagraphStyle:{SetParagraphStyle:function(a,b,c){a.position===b.position&&(c?b.styleName=a.styleName:a.styleName=b.styleName);return{opSpecsA:[a],opSpecsB:[b]}},SplitParagraph:function(a,b){var c=[a],e=[b],g;a.position>b.position?a.position+= +1:a.position===b.sourceParagraphPosition&&(b.paragraphStyleName=a.styleName,g=f(a),g.position=b.position+1,c.push(g));return{opSpecsA:c,opSpecsB:e}},UpdateMember:e,UpdateMetadata:e,UpdateParagraphStyle:e},SplitParagraph:{SplitParagraph:function(a,b,c){var e,f;a.position<b.position?e=!0:b.position<a.position?f=!0:a.position===b.position&&(c?e=!0:f=!0);e?(b.position+=1,b.sourceParagraphPosition=a.position<b.sourceParagraphPosition?b.sourceParagraphPosition+1:a.position+1):f&&(a.position+=1,a.sourceParagraphPosition= +b.position<b.sourceParagraphPosition?a.sourceParagraphPosition+1:b.position+1);return{opSpecsA:[a],opSpecsB:[b]}},UpdateMember:e,UpdateMetadata:e,UpdateParagraphStyle:e},UpdateMember:{UpdateMetadata:e,UpdateParagraphStyle:e},UpdateMetadata:{UpdateMetadata:function(a,b,c){var e,f=[a],g=[b];e=c?a:b;a=c?b:a;n(a.setProperties||null,a.removedProperties||null,e.setProperties||null,e.removedProperties||null);e.setProperties&&p(e.setProperties)||e.removedProperties&&r(e.removedProperties)||(c?f=[]:g=[]); +a.setProperties&&p(a.setProperties)||a.removedProperties&&r(a.removedProperties)||(c?g=[]:f=[]);return{opSpecsA:f,opSpecsB:g}},UpdateParagraphStyle:e},UpdateParagraphStyle:{UpdateParagraphStyle:function(a,b,c){var e,f=[a],g=[b];a.styleName===b.styleName&&(e=c?a:b,a=c?b:a,q(a.setProperties,a.removedProperties,e.setProperties,e.removedProperties,"style:paragraph-properties"),q(a.setProperties,a.removedProperties,e.setProperties,e.removedProperties,"style:text-properties"),n(a.setProperties||null,a.removedProperties|| +null,e.setProperties||null,e.removedProperties||null),e.setProperties&&p(e.setProperties)||e.removedProperties&&r(e.removedProperties)||(c?f=[]:g=[]),a.setProperties&&p(a.setProperties)||a.removedProperties&&r(a.removedProperties)||(c?g=[]:f=[]));return{opSpecsA:f,opSpecsB:g}}}};this.passUnchanged=e;this.extendTransformations=function(a){Object.keys(a).forEach(function(b){var c=a[b],e,f=l.hasOwnProperty(b);runtime.log((f?"Extending":"Adding")+" map for optypeA: "+b);f||(l[b]={});e=l[b];Object.keys(c).forEach(function(a){var f= +e.hasOwnProperty(a);runtime.assert(b<=a,"Wrong order:"+b+", "+a);runtime.log(" "+(f?"Overwriting":"Adding")+" entry for optypeB: "+a);e[a]=c[a]})})};this.transformOpspecVsOpspec=function(a,b){var c=a.optype<=b.optype,e;runtime.log("Crosstransforming:");runtime.log(runtime.toJson(a));runtime.log(runtime.toJson(b));c||(e=a,a=b,b=e);(e=(e=l[a.optype])&&e[b.optype])?(e=e(a,b,!c),c||null===e||(e={opSpecsA:e.opSpecsB,opSpecsB:e.opSpecsA})):e=null;runtime.log("result:");e?(runtime.log(runtime.toJson(e.opSpecsA)), +runtime.log(runtime.toJson(e.opSpecsB))):runtime.log("null");return e}}; +ops.OperationTransformer=function(){function g(c,b){for(var f,n,p=[],r=[];0<c.length&&b;){f=c.shift();f=k.transformOpspecVsOpspec(f,b);if(!f)return null;p=p.concat(f.opSpecsA);if(0===f.opSpecsB.length){p=p.concat(c);b=null;break}for(;1<f.opSpecsB.length;){n=g(c,f.opSpecsB.shift());if(!n)return null;r=r.concat(n.opSpecsB);c=n.opSpecsA}b=f.opSpecsB.pop()}b&&r.push(b);return{opSpecsA:p,opSpecsB:r}}var k=new ops.OperationTransformMatrix;this.getOperationTransformMatrix=function(){return k};this.transform= +function(c,b){for(var f,k=[];0<b.length;){f=g(c,b.shift());if(!f)return null;c=f.opSpecsA;k=k.concat(f.opSpecsB)}return{opSpecsA:c,opSpecsB:k}}};var webodf_css='@namespace draw url(urn:oasis:names:tc:opendocument:xmlns:drawing:1.0);@namespace fo url(urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0);@namespace office url(urn:oasis:names:tc:opendocument:xmlns:office:1.0);@namespace presentation url(urn:oasis:names:tc:opendocument:xmlns:presentation:1.0);@namespace style url(urn:oasis:names:tc:opendocument:xmlns:style:1.0);@namespace svg url(urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0);@namespace table url(urn:oasis:names:tc:opendocument:xmlns:table:1.0);@namespace text url(urn:oasis:names:tc:opendocument:xmlns:text:1.0);@namespace webodfhelper url(urn:webodf:names:helper);@namespace cursor url(urn:webodf:names:cursor);@namespace editinfo url(urn:webodf:names:editinfo);@namespace annotation url(urn:webodf:names:annotation);@namespace dc url(http://purl.org/dc/elements/1.1/);@namespace svgns url(http://www.w3.org/2000/svg);office|document > *, office|document-content > * {display: none;}office|body, office|document {display: inline-block;position: relative;}text|p, text|h {display: block;padding: 0;margin: 0;line-height: normal;position: relative;}text|p::after, text|h::after {content: "\\200B";white-space: pre;}*[webodfhelper|containsparagraphanchor] {position: relative;}text|s {white-space: pre;}text|tab {display: inline;white-space: pre;}text|tracked-changes {display: none;}office|binary-data {display: none;}office|text {display: block;text-align: left;overflow: visible;word-wrap: break-word;}office|text::selection {background: transparent;}.webodf-virtualSelections *::selection {background: transparent;}.webodf-virtualSelections *::-moz-selection {background: transparent;}office|text * draw|text-box {display: block;border: 1px solid #d3d3d3;}office|text draw|frame {z-index: 1;}office|spreadsheet {display: block;border-collapse: collapse;empty-cells: show;font-family: sans-serif;font-size: 10pt;text-align: left;page-break-inside: avoid;overflow: hidden;}office|presentation {display: inline-block;text-align: left;}#shadowContent {display: inline-block;text-align: left;}draw|page {display: block;position: relative;overflow: hidden;}presentation|notes, presentation|footer-decl, presentation|date-time-decl {display: none;}@media print {draw|page {border: 1pt solid black;page-break-inside: avoid;}presentation|notes {}}office|spreadsheet text|p {border: 0px;padding: 1px;margin: 0px;}office|spreadsheet table|table {margin: 3px;}office|spreadsheet table|table:after {}office|spreadsheet table|table-row {counter-increment: row;}office|spreadsheet table|table-row:before {width: 3em;background: #cccccc;border: 1px solid black;text-align: center;content: counter(row);display: table-cell;}office|spreadsheet table|table-cell {border: 1px solid #cccccc;}table|table {display: table;}draw|frame table|table {width: 100%;height: 100%;background: white;}table|table-header-rows {display: table-header-group;}table|table-row {display: table-row;}table|table-column {display: table-column;}table|table-cell {width: 0.889in;display: table-cell;word-break: break-all;}draw|frame {display: block;}draw|image {display: block;width: 100%;height: 100%;top: 0px;left: 0px;background-repeat: no-repeat;background-size: 100% 100%;-moz-background-size: 100% 100%;}draw|frame > draw|image:nth-of-type(n+2) {display: none;}text|list:before {display: none;content:"";}text|list {display: block;}text|list-item {display: block;}text|number {display:none;}text|a {color: blue;text-decoration: underline;cursor: pointer;}.webodf-inactiveLinks text|a {cursor: text;}text|note-citation {vertical-align: super;font-size: smaller;}text|note-body {display: none;}text|note:hover text|note-citation {background: #dddddd;}text|note:hover text|note-body {display: block;left:1em;max-width: 80%;position: absolute;background: #ffffaa;}text|bibliography-source {display: none;}svg|title, svg|desc {display: none;}video {width: 100%;height: 100%}cursor|anchor {display: none;}cursor|cursor {display: none;}.webodf-caretOverlay {position: absolute;top: 5%;height: 1em;z-index: 10;padding-left: 1px;pointer-events: none;}.webodf-caretOverlay .caret {position: absolute;border-left: 2px solid black;top: 0;bottom: 0;right: 0;}.webodf-caretOverlay .handle {position: absolute;margin-top: 5px;padding-top: 3px;margin-left: auto;margin-right: auto;width: 64px;height: 68px;border-radius: 5px;opacity: 0.3;text-align: center;background-color: black;box-shadow: 0px 0px 5px rgb(90, 90, 90);border: 1px solid black;top: -85px;right: -32px;}.webodf-caretOverlay .handle > img {box-shadow: 0px 0px 5px rgb(90, 90, 90) inset;background-color: rgb(200, 200, 200);border-radius: 5px;border: 2px solid;height: 60px;width: 60px;display: block;margin: auto;}.webodf-caretOverlay .handle.active {opacity: 0.8;}.webodf-caretOverlay .handle:after {content: " ";position: absolute;width: 0px;height: 0px;border-style: solid;border-width: 8.7px 5px 0 5px;border-color: black transparent transparent transparent;top: 100%;left: 43%;}.webodf-caretSizer {display: inline-block;width: 0;visibility: hidden;}#eventTrap {display: block;position: absolute;bottom: 0;left: 0;outline: none;opacity: 0;color: rgba(255, 255, 255, 0);pointer-events: none;white-space: pre;overflow: hidden;}cursor|cursor > #composer {text-decoration: underline;}cursor|cursor[cursor|caret-sizer-active="true"],cursor|cursor[cursor|composing="true"] {display: inline;}editinfo|editinfo {display: inline-block;}.editInfoMarker {position: absolute;width: 10px;height: 100%;left: -20px;opacity: 0.8;top: 0;border-radius: 5px;background-color: transparent;box-shadow: 0px 0px 5px rgba(50, 50, 50, 0.75);}.editInfoMarker:hover {box-shadow: 0px 0px 8px rgba(0, 0, 0, 1);}.editInfoHandle {position: absolute;background-color: black;padding: 5px;border-radius: 5px;opacity: 0.8;box-shadow: 0px 0px 5px rgba(50, 50, 50, 0.75);bottom: 100%;margin-bottom: 10px;z-index: 3;left: -25px;}.editInfoHandle:after {content: " ";position: absolute;width: 0px;height: 0px;border-style: solid;border-width: 8.7px 5px 0 5px;border-color: black transparent transparent transparent;top: 100%;left: 5px;}.editInfo {font-family: sans-serif;font-weight: normal;font-style: normal;text-decoration: none;color: white;width: 100%;height: 12pt;}.editInfoColor {float: left;width: 10pt;height: 10pt;border: 1px solid white;}.editInfoAuthor {float: left;margin-left: 5pt;font-size: 10pt;text-align: left;height: 12pt;line-height: 12pt;}.editInfoTime {float: right;margin-left: 30pt;font-size: 8pt;font-style: italic;color: yellow;height: 12pt;line-height: 12pt;}.annotationWrapper {display: inline;position: relative;}.annotationRemoveButton:before {content: "\u00d7";color: white;padding: 5px;line-height: 1em;}.annotationRemoveButton {width: 20px;height: 20px;border-radius: 10px;background-color: black;box-shadow: 0px 0px 5px rgba(50, 50, 50, 0.75);position: absolute;top: -10px;left: -10px;z-index: 3;text-align: center;font-family: sans-serif;font-style: normal;font-weight: normal;text-decoration: none;font-size: 15px;}.annotationRemoveButton:hover {cursor: pointer;box-shadow: 0px 0px 5px rgba(0, 0, 0, 1);}.annotationNote {width: 4cm;position: absolute;display: inline;z-index: 10;top: 0;}.annotationNote > office|annotation {display: block;text-align: left;}.annotationConnector {position: absolute;display: inline;top: 0;z-index: 2;border-top: 1px dashed brown;}.annotationConnector.angular {-moz-transform-origin: left top;-webkit-transform-origin: left top;-ms-transform-origin: left top;transform-origin: left top;}.annotationConnector.horizontal {left: 0;}.annotationConnector.horizontal:before {content: "";display: inline;position: absolute;width: 0px;height: 0px;border-style: solid;border-width: 8.7px 5px 0 5px;border-color: brown transparent transparent transparent;top: -1px;left: -5px;}office|annotation {width: 100%;height: 100%;display: none;background: rgb(198, 238, 184);background: -moz-linear-gradient(90deg, rgb(198, 238, 184) 30%, rgb(180, 196, 159) 100%);background: -webkit-linear-gradient(90deg, rgb(198, 238, 184) 30%, rgb(180, 196, 159) 100%);background: -o-linear-gradient(90deg, rgb(198, 238, 184) 30%, rgb(180, 196, 159) 100%);background: -ms-linear-gradient(90deg, rgb(198, 238, 184) 30%, rgb(180, 196, 159) 100%);background: linear-gradient(180deg, rgb(198, 238, 184) 30%, rgb(180, 196, 159) 100%);box-shadow: 0 3px 4px -3px #ccc;}office|annotation > dc|creator {display: block;font-size: 10pt;font-weight: normal;font-style: normal;font-family: sans-serif;color: white;background-color: brown;padding: 4px;}office|annotation > dc|date {display: block;font-size: 10pt;font-weight: normal;font-style: normal;font-family: sans-serif;border: 4px solid transparent;color: black;}office|annotation > text|list {display: block;padding: 5px;}office|annotation text|p {font-size: 10pt;color: black;font-weight: normal;font-style: normal;text-decoration: none;font-family: sans-serif;}#annotationsPane {background-color: #EAEAEA;width: 4cm;height: 100%;display: none;position: absolute;outline: 1px solid #ccc;}.webodf-annotationHighlight {background-color: yellow;position: relative;}.webodf-selectionOverlay {position: absolute;pointer-events: none;top: 0;left: 0;top: 0;left: 0;width: 100%;height: 100%;z-index: 15;}.webodf-selectionOverlay > polygon {fill-opacity: 0.3;stroke-opacity: 0.8;stroke-width: 1;fill-rule: evenodd;}.webodf-selectionOverlay > .webodf-draggable {fill-opacity: 0.8;stroke-opacity: 0;stroke-width: 8;pointer-events: all;display: none;-moz-transform-origin: center center;-webkit-transform-origin: center center;-ms-transform-origin: center center;transform-origin: center center;}#imageSelector {display: none;position: absolute;border-style: solid;border-color: black;}#imageSelector > div {width: 5px;height: 5px;display: block;position: absolute;border: 1px solid black;background-color: #ffffff;}#imageSelector > .topLeft {top: -4px;left: -4px;}#imageSelector > .topRight {top: -4px;right: -4px;}#imageSelector > .bottomRight {right: -4px;bottom: -4px;}#imageSelector > .bottomLeft {bottom: -4px;left: -4px;}#imageSelector > .topMiddle {top: -4px;left: 50%;margin-left: -2.5px;}#imageSelector > .rightMiddle {top: 50%;right: -4px;margin-top: -2.5px;}#imageSelector > .bottomMiddle {bottom: -4px;left: 50%;margin-left: -2.5px;}#imageSelector > .leftMiddle {top: 50%;left: -4px;margin-top: -2.5px;}div.webodf-customScrollbars::-webkit-scrollbar{width: 8px;height: 8px;background-color: transparent;}div.webodf-customScrollbars::-webkit-scrollbar-track{background-color: transparent;}div.webodf-customScrollbars::-webkit-scrollbar-thumb{background-color: #444;border-radius: 4px;}.webodf-hyperlinkTooltip {display: none;color: white;background-color: black;border-radius: 5px;box-shadow: 2px 2px 5px gray;padding: 3px;position: absolute;max-width: 210px;text-align: left;word-break: break-all;z-index: 16;}.webodf-hyperlinkTooltipText {display: block;font-weight: bold;}';/* + + @licstart +JSZip - A Javascript class for generating and reading zip files +<http://stuartk.com/jszip> + +(c) 2009-2014 Stuart Knightley <stuart [at] stuartk.com> +Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/master/LICENSE.markdown. + +JSZip uses the library pako released under the MIT license : +https://github.com/nodeca/pako/blob/master/LICENSE + @licend +*/ +!function(e){var globalScope=typeof window!=="undefined"?window:typeof global!=="undefined"?global:{},externs=globalScope.externs||(globalScope.externs={});externs.JSZip=e()}(function(){var define,module,exports;return function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'");}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f, +f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}({1:[function(_dereq_,module,exports){var _keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";exports.encode=function(input,utf8){var output="";var chr1,chr2,chr3,enc1,enc2,enc3,enc4;var i=0;while(i<input.length){chr1=input.charCodeAt(i++);chr2=input.charCodeAt(i++);chr3=input.charCodeAt(i++);enc1=chr1>>2;enc2=(chr1&3)<<4|chr2>>4;enc3=(chr2&15)<<2|chr3>> +6;enc4=chr3&63;if(isNaN(chr2))enc3=enc4=64;else if(isNaN(chr3))enc4=64;output=output+_keyStr.charAt(enc1)+_keyStr.charAt(enc2)+_keyStr.charAt(enc3)+_keyStr.charAt(enc4)}return output};exports.decode=function(input,utf8){var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");while(i<input.length){enc1=_keyStr.indexOf(input.charAt(i++));enc2=_keyStr.indexOf(input.charAt(i++));enc3=_keyStr.indexOf(input.charAt(i++));enc4=_keyStr.indexOf(input.charAt(i++)); +chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!=64)output=output+String.fromCharCode(chr2);if(enc4!=64)output=output+String.fromCharCode(chr3)}return output}},{}],2:[function(_dereq_,module,exports){function CompressedObject(){this.compressedSize=0;this.uncompressedSize=0;this.crc32=0;this.compressionMethod=null;this.compressedContent=null}CompressedObject.prototype={getContent:function(){return null},getCompressedContent:function(){return null}}; +module.exports=CompressedObject},{}],3:[function(_dereq_,module,exports){exports.STORE={magic:"\x00\x00",compress:function(content){return content},uncompress:function(content){return content},compressInputType:null,uncompressInputType:null};exports.DEFLATE=_dereq_("./flate")},{"./flate":8}],4:[function(_dereq_,module,exports){var utils=_dereq_("./utils");var table=[0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021, +3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527, +1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856, +1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626, +1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692, +2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918E3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614, +3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117];module.exports=function crc32(input,crc){if(typeof input==="undefined"||!input.length)return 0;var isArray=utils.getTypeOf(input)!=="string";if(typeof crc=="undefined")crc=0;var x=0;var y=0;var b=0;crc=crc^-1;for(var i=0,iTop=input.length;i<iTop;i++){b=isArray?input[i]:input.charCodeAt(i);y=(crc^b)&255;x=table[y];crc=crc>>>8^x}return crc^-1}},{"./utils":21}],5:[function(_dereq_,module,exports){var utils=_dereq_("./utils"); +function DataReader(data){this.data=null;this.length=0;this.index=0}DataReader.prototype={checkOffset:function(offset){this.checkIndex(this.index+offset)},checkIndex:function(newIndex){if(this.length<newIndex||newIndex<0)throw new Error("End of data reached (data length = "+this.length+", asked index = "+newIndex+"). Corrupted zip ?");},setIndex:function(newIndex){this.checkIndex(newIndex);this.index=newIndex},skip:function(n){this.setIndex(this.index+n)},byteAt:function(i){},readInt:function(size){var result= +0,i;this.checkOffset(size);for(i=this.index+size-1;i>=this.index;i--)result=(result<<8)+this.byteAt(i);this.index+=size;return result},readString:function(size){return utils.transformTo("string",this.readData(size))},readData:function(size){},lastIndexOfSignature:function(sig){},readDate:function(){var dostime=this.readInt(4);return new Date((dostime>>25&127)+1980,(dostime>>21&15)-1,dostime>>16&31,dostime>>11&31,dostime>>5&63,(dostime&31)<<1)}};module.exports=DataReader},{"./utils":21}],6:[function(_dereq_, +module,exports){exports.base64=false;exports.binary=false;exports.dir=false;exports.createFolders=false;exports.date=null;exports.compression=null;exports.comment=null},{}],7:[function(_dereq_,module,exports){var utils=_dereq_("./utils");exports.string2binary=function(str){return utils.string2binary(str)};exports.string2Uint8Array=function(str){return utils.transformTo("uint8array",str)};exports.uint8Array2String=function(array){return utils.transformTo("string",array)};exports.string2Blob=function(str){var buffer= +utils.transformTo("arraybuffer",str);return utils.arrayBuffer2Blob(buffer)};exports.arrayBuffer2Blob=function(buffer){return utils.arrayBuffer2Blob(buffer)};exports.transformTo=function(outputType,input){return utils.transformTo(outputType,input)};exports.getTypeOf=function(input){return utils.getTypeOf(input)};exports.checkSupport=function(type){return utils.checkSupport(type)};exports.MAX_VALUE_16BITS=utils.MAX_VALUE_16BITS;exports.MAX_VALUE_32BITS=utils.MAX_VALUE_32BITS;exports.pretty=function(str){return utils.pretty(str)}; +exports.findCompression=function(compressionMethod){return utils.findCompression(compressionMethod)};exports.isRegExp=function(object){return utils.isRegExp(object)}},{"./utils":21}],8:[function(_dereq_,module,exports){var USE_TYPEDARRAY=typeof Uint8Array!=="undefined"&&typeof Uint16Array!=="undefined"&&typeof Uint32Array!=="undefined";var pako=_dereq_("pako");exports.uncompressInputType=USE_TYPEDARRAY?"uint8array":"array";exports.compressInputType=USE_TYPEDARRAY?"uint8array":"array";exports.magic= +"\b\x00";exports.compress=function(input){return pako.deflateRaw(input)};exports.uncompress=function(input){return pako.inflateRaw(input)}},{"pako":24}],9:[function(_dereq_,module,exports){var base64=_dereq_("./base64");function JSZip(data,options){if(!(this instanceof JSZip))return new JSZip(data,options);this.files={};this.comment=null;this.root="";if(data)this.load(data,options);this.clone=function(){var newObj=new JSZip;for(var i in this)if(typeof this[i]!=="function")newObj[i]=this[i];return newObj}} +JSZip.prototype=_dereq_("./object");JSZip.prototype.load=_dereq_("./load");JSZip.support=_dereq_("./support");JSZip.defaults=_dereq_("./defaults");JSZip.utils=_dereq_("./deprecatedPublicUtils");JSZip.base64={encode:function(input){return base64.encode(input)},decode:function(input){return base64.decode(input)}};JSZip.compressions=_dereq_("./compressions");module.exports=JSZip},{"./base64":1,"./compressions":3,"./defaults":6,"./deprecatedPublicUtils":7,"./load":10,"./object":13,"./support":17}],10:[function(_dereq_, +module,exports){var base64=_dereq_("./base64");var ZipEntries=_dereq_("./zipEntries");module.exports=function(data,options){var files,zipEntries,i,input;options=options||{};if(options.base64)data=base64.decode(data);zipEntries=new ZipEntries(data,options);files=zipEntries.files;for(i=0;i<files.length;i++){input=files[i];this.file(input.fileName,input.decompressed,{binary:true,optimizedBinaryString:true,date:input.date,dir:input.dir,comment:input.fileComment.length?input.fileComment:null,createFolders:options.createFolders})}if(zipEntries.zipComment.length)this.comment= +zipEntries.zipComment;return this}},{"./base64":1,"./zipEntries":22}],11:[function(_dereq_,module,exports){(function(Buffer){module.exports=function(data,encoding){return new Buffer(data,encoding)};module.exports.test=function(b){return Buffer.isBuffer(b)}}).call(this,typeof Buffer!=="undefined"?Buffer:undefined)},{}],12:[function(_dereq_,module,exports){var Uint8ArrayReader=_dereq_("./uint8ArrayReader");function NodeBufferReader(data){this.data=data;this.length=this.data.length;this.index=0}NodeBufferReader.prototype= +new Uint8ArrayReader;NodeBufferReader.prototype.readData=function(size){this.checkOffset(size);var result=this.data.slice(this.index,this.index+size);this.index+=size;return result};module.exports=NodeBufferReader},{"./uint8ArrayReader":18}],13:[function(_dereq_,module,exports){var support=_dereq_("./support");var utils=_dereq_("./utils");var crc32=_dereq_("./crc32");var signature=_dereq_("./signature");var defaults=_dereq_("./defaults");var base64=_dereq_("./base64");var compressions=_dereq_("./compressions"); +var CompressedObject=_dereq_("./compressedObject");var nodeBuffer=_dereq_("./nodeBuffer");var utf8=_dereq_("./utf8");var StringWriter=_dereq_("./stringWriter");var Uint8ArrayWriter=_dereq_("./uint8ArrayWriter");var getRawData=function(file){if(file._data instanceof CompressedObject){file._data=file._data.getContent();file.options.binary=true;file.options.base64=false;if(utils.getTypeOf(file._data)==="uint8array"){var copy=file._data;file._data=new Uint8Array(copy.length);if(copy.length!==0)file._data.set(copy, +0)}}return file._data};var getBinaryData=function(file){var result=getRawData(file),type=utils.getTypeOf(result);if(type==="string"){if(!file.options.binary)if(support.nodebuffer)return nodeBuffer(result,"utf-8");return file.asBinary()}return result};var dataToString=function(asUTF8){var result=getRawData(this);if(result===null||typeof result==="undefined")return"";if(this.options.base64)result=base64.decode(result);if(asUTF8&&this.options.binary)result=out.utf8decode(result);else result=utils.transformTo("string", +result);if(!asUTF8&&!this.options.binary)result=utils.transformTo("string",out.utf8encode(result));return result};var ZipObject=function(name,data,options){this.name=name;this.dir=options.dir;this.date=options.date;this.comment=options.comment;this._data=data;this.options=options;this._initialMetadata={dir:options.dir,date:options.date}};ZipObject.prototype={asText:function(){return dataToString.call(this,true)},asBinary:function(){return dataToString.call(this,false)},asNodeBuffer:function(){var result= +getBinaryData(this);return utils.transformTo("nodebuffer",result)},asUint8Array:function(){var result=getBinaryData(this);return utils.transformTo("uint8array",result)},asArrayBuffer:function(){return this.asUint8Array().buffer}};var decToHex=function(dec,bytes){var hex="",i;for(i=0;i<bytes;i++){hex+=String.fromCharCode(dec&255);dec=dec>>>8}return hex};var extend=function(){var result={},i,attr;for(i=0;i<arguments.length;i++)for(attr in arguments[i])if(arguments[i].hasOwnProperty(attr)&&typeof result[attr]=== +"undefined")result[attr]=arguments[i][attr];return result};var prepareFileAttrs=function(o){o=o||{};if(o.base64===true&&(o.binary===null||o.binary===undefined))o.binary=true;o=extend(o,defaults);o.date=o.date||new Date;if(o.compression!==null)o.compression=o.compression.toUpperCase();return o};var fileAdd=function(name,data,o){var dataType=utils.getTypeOf(data),parent;o=prepareFileAttrs(o);if(o.createFolders&&(parent=parentFolder(name)))folderAdd.call(this,parent,true);if(o.dir||data===null||typeof data=== +"undefined"){o.base64=false;o.binary=false;data=null}else if(dataType==="string"){if(o.binary&&!o.base64)if(o.optimizedBinaryString!==true)data=utils.string2binary(data)}else{o.base64=false;o.binary=true;if(!dataType&&!(data instanceof CompressedObject))throw new Error("The data of '"+name+"' is in an unsupported format !");if(dataType==="arraybuffer")data=utils.transformTo("uint8array",data)}var object=new ZipObject(name,data,o);this.files[name]=object;return object};var parentFolder=function(path){if(path.slice(-1)== +"/")path=path.substring(0,path.length-1);var lastSlash=path.lastIndexOf("/");return lastSlash>0?path.substring(0,lastSlash):""};var folderAdd=function(name,createFolders){if(name.slice(-1)!="/")name+="/";createFolders=typeof createFolders!=="undefined"?createFolders:false;if(!this.files[name])fileAdd.call(this,name,null,{dir:true,createFolders:createFolders});return this.files[name]};var generateCompressedObjectFrom=function(file,compression){var result=new CompressedObject,content;if(file._data instanceof +CompressedObject){result.uncompressedSize=file._data.uncompressedSize;result.crc32=file._data.crc32;if(result.uncompressedSize===0||file.dir){compression=compressions["STORE"];result.compressedContent="";result.crc32=0}else if(file._data.compressionMethod===compression.magic)result.compressedContent=file._data.getCompressedContent();else{content=file._data.getContent();result.compressedContent=compression.compress(utils.transformTo(compression.compressInputType,content))}}else{content=getBinaryData(file); +if(!content||content.length===0||file.dir){compression=compressions["STORE"];content=""}result.uncompressedSize=content.length;result.crc32=crc32(content);result.compressedContent=compression.compress(utils.transformTo(compression.compressInputType,content))}result.compressedSize=result.compressedContent.length;result.compressionMethod=compression.magic;return result};var generateZipParts=function(name,file,compressedObject,offset){var data=compressedObject.compressedContent,utfEncodedFileName=utils.transformTo("string", +utf8.utf8encode(file.name)),comment=file.comment||"",utfEncodedComment=utils.transformTo("string",utf8.utf8encode(comment)),useUTF8ForFileName=utfEncodedFileName.length!==file.name.length,useUTF8ForComment=utfEncodedComment.length!==comment.length,o=file.options,dosTime,dosDate,extraFields="",unicodePathExtraField="",unicodeCommentExtraField="",dir,date;if(file._initialMetadata.dir!==file.dir)dir=file.dir;else dir=o.dir;if(file._initialMetadata.date!==file.date)date=file.date;else date=o.date;dosTime= +date.getHours();dosTime=dosTime<<6;dosTime=dosTime|date.getMinutes();dosTime=dosTime<<5;dosTime=dosTime|date.getSeconds()/2;dosDate=date.getFullYear()-1980;dosDate=dosDate<<4;dosDate=dosDate|date.getMonth()+1;dosDate=dosDate<<5;dosDate=dosDate|date.getDate();if(useUTF8ForFileName){unicodePathExtraField=decToHex(1,1)+decToHex(crc32(utfEncodedFileName),4)+utfEncodedFileName;extraFields+="up"+decToHex(unicodePathExtraField.length,2)+unicodePathExtraField}if(useUTF8ForComment){unicodeCommentExtraField= +decToHex(1,1)+decToHex(this.crc32(utfEncodedComment),4)+utfEncodedComment;extraFields+="uc"+decToHex(unicodeCommentExtraField.length,2)+unicodeCommentExtraField}var header="";header+="\n\x00";header+=useUTF8ForFileName||useUTF8ForComment?"\x00\b":"\x00\x00";header+=compressedObject.compressionMethod;header+=decToHex(dosTime,2);header+=decToHex(dosDate,2);header+=decToHex(compressedObject.crc32,4);header+=decToHex(compressedObject.compressedSize,4);header+=decToHex(compressedObject.uncompressedSize, +4);header+=decToHex(utfEncodedFileName.length,2);header+=decToHex(extraFields.length,2);var fileRecord=signature.LOCAL_FILE_HEADER+header+utfEncodedFileName+extraFields;var dirRecord=signature.CENTRAL_FILE_HEADER+"\u0014\x00"+header+decToHex(utfEncodedComment.length,2)+"\x00\x00"+"\x00\x00"+(dir===true?"\u0010\x00\x00\x00":"\x00\x00\x00\x00")+decToHex(offset,4)+utfEncodedFileName+extraFields+utfEncodedComment;return{fileRecord:fileRecord,dirRecord:dirRecord,compressedObject:compressedObject}};var out= +{load:function(stream,options){throw new Error("Load method is not defined. Is the file jszip-load.js included ?");},filter:function(search){var result=[],filename,relativePath,file,fileClone;for(filename in this.files){if(!this.files.hasOwnProperty(filename))continue;file=this.files[filename];fileClone=new ZipObject(file.name,file._data,extend(file.options));relativePath=filename.slice(this.root.length,filename.length);if(filename.slice(0,this.root.length)===this.root&&search(relativePath,fileClone))result.push(fileClone)}return result}, +file:function(name,data,o){if(arguments.length===1)if(utils.isRegExp(name)){var regexp=name;return this.filter(function(relativePath,file){return!file.dir&®exp.test(relativePath)})}else return this.filter(function(relativePath,file){return!file.dir&&relativePath===name})[0]||null;else{name=this.root+name;fileAdd.call(this,name,data,o)}return this},folder:function(arg){if(!arg)return this;if(utils.isRegExp(arg))return this.filter(function(relativePath,file){return file.dir&&arg.test(relativePath)}); +var name=this.root+arg;var newFolder=folderAdd.call(this,name);var ret=this.clone();ret.root=newFolder.name;return ret},remove:function(name){name=this.root+name;var file=this.files[name];if(!file){if(name.slice(-1)!="/")name+="/";file=this.files[name]}if(file&&!file.dir)delete this.files[name];else{var kids=this.filter(function(relativePath,file){return file.name.slice(0,name.length)===name});for(var i=0;i<kids.length;i++)delete this.files[kids[i].name]}return this},generate:function(options){options= +extend(options||{},{base64:true,compression:"STORE",type:"base64",comment:null});utils.checkSupport(options.type);var zipData=[],localDirLength=0,centralDirLength=0,writer,i,utfEncodedComment=utils.transformTo("string",this.utf8encode(options.comment||this.comment||""));for(var name in this.files){if(!this.files.hasOwnProperty(name))continue;var file=this.files[name];var compressionName=file.options.compression||options.compression.toUpperCase();var compression=compressions[compressionName];if(!compression)throw new Error(compressionName+ +" is not a valid compression method !");var compressedObject=generateCompressedObjectFrom.call(this,file,compression);var zipPart=generateZipParts.call(this,name,file,compressedObject,localDirLength);localDirLength+=zipPart.fileRecord.length+compressedObject.compressedSize;centralDirLength+=zipPart.dirRecord.length;zipData.push(zipPart)}var dirEnd="";dirEnd=signature.CENTRAL_DIRECTORY_END+"\x00\x00"+"\x00\x00"+decToHex(zipData.length,2)+decToHex(zipData.length,2)+decToHex(centralDirLength,4)+decToHex(localDirLength, +4)+decToHex(utfEncodedComment.length,2)+utfEncodedComment;var typeName=options.type.toLowerCase();if(typeName==="uint8array"||typeName==="arraybuffer"||typeName==="blob"||typeName==="nodebuffer")writer=new Uint8ArrayWriter(localDirLength+centralDirLength+dirEnd.length);else writer=new StringWriter(localDirLength+centralDirLength+dirEnd.length);for(i=0;i<zipData.length;i++){writer.append(zipData[i].fileRecord);writer.append(zipData[i].compressedObject.compressedContent)}for(i=0;i<zipData.length;i++)writer.append(zipData[i].dirRecord); +writer.append(dirEnd);var zip=writer.finalize();switch(options.type.toLowerCase()){case "uint8array":case "arraybuffer":case "nodebuffer":return utils.transformTo(options.type.toLowerCase(),zip);case "blob":return utils.arrayBuffer2Blob(utils.transformTo("arraybuffer",zip));case "base64":return options.base64?base64.encode(zip):zip;default:return zip}},crc32:function(input,crc){return crc32(input,crc)},utf8encode:function(string){return utils.transformTo("string",utf8.utf8encode(string))},utf8decode:function(input){return utf8.utf8decode(input)}}; +module.exports=out},{"./base64":1,"./compressedObject":2,"./compressions":3,"./crc32":4,"./defaults":6,"./nodeBuffer":11,"./signature":14,"./stringWriter":16,"./support":17,"./uint8ArrayWriter":19,"./utf8":20,"./utils":21}],14:[function(_dereq_,module,exports){exports.LOCAL_FILE_HEADER="PK\u0003\u0004";exports.CENTRAL_FILE_HEADER="PK\u0001\u0002";exports.CENTRAL_DIRECTORY_END="PK\u0005\u0006";exports.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK\u0006\u0007";exports.ZIP64_CENTRAL_DIRECTORY_END="PK\u0006\u0006"; +exports.DATA_DESCRIPTOR="PK\u0007\b"},{}],15:[function(_dereq_,module,exports){var DataReader=_dereq_("./dataReader");var utils=_dereq_("./utils");function StringReader(data,optimizedBinaryString){this.data=data;if(!optimizedBinaryString)this.data=utils.string2binary(this.data);this.length=this.data.length;this.index=0}StringReader.prototype=new DataReader;StringReader.prototype.byteAt=function(i){return this.data.charCodeAt(i)};StringReader.prototype.lastIndexOfSignature=function(sig){return this.data.lastIndexOf(sig)}; +StringReader.prototype.readData=function(size){this.checkOffset(size);var result=this.data.slice(this.index,this.index+size);this.index+=size;return result};module.exports=StringReader},{"./dataReader":5,"./utils":21}],16:[function(_dereq_,module,exports){var utils=_dereq_("./utils");var StringWriter=function(){this.data=[]};StringWriter.prototype={append:function(input){input=utils.transformTo("string",input);this.data.push(input)},finalize:function(){return this.data.join("")}};module.exports=StringWriter}, +{"./utils":21}],17:[function(_dereq_,module,exports){(function(Buffer){exports.base64=true;exports.array=true;exports.string=true;exports.arraybuffer=typeof ArrayBuffer!=="undefined"&&typeof Uint8Array!=="undefined";exports.nodebuffer=typeof Buffer!=="undefined";exports.uint8array=typeof Uint8Array!=="undefined";if(typeof ArrayBuffer==="undefined")exports.blob=false;else{var buffer=new ArrayBuffer(0);try{exports.blob=(new Blob([buffer],{type:"application/zip"})).size===0}catch(e){try{var Builder= +window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder;var builder=new Builder;builder.append(buffer);exports.blob=builder.getBlob("application/zip").size===0}catch(e){exports.blob=false}}}}).call(this,typeof Buffer!=="undefined"?Buffer:undefined)},{}],18:[function(_dereq_,module,exports){var DataReader=_dereq_("./dataReader");function Uint8ArrayReader(data){if(data){this.data=data;this.length=this.data.length;this.index=0}}Uint8ArrayReader.prototype=new DataReader; +Uint8ArrayReader.prototype.byteAt=function(i){return this.data[i]};Uint8ArrayReader.prototype.lastIndexOfSignature=function(sig){var sig0=sig.charCodeAt(0),sig1=sig.charCodeAt(1),sig2=sig.charCodeAt(2),sig3=sig.charCodeAt(3);for(var i=this.length-4;i>=0;--i)if(this.data[i]===sig0&&this.data[i+1]===sig1&&this.data[i+2]===sig2&&this.data[i+3]===sig3)return i;return-1};Uint8ArrayReader.prototype.readData=function(size){this.checkOffset(size);if(size===0)return new Uint8Array(0);var result=this.data.subarray(this.index, +this.index+size);this.index+=size;return result};module.exports=Uint8ArrayReader},{"./dataReader":5}],19:[function(_dereq_,module,exports){var utils=_dereq_("./utils");var Uint8ArrayWriter=function(length){this.data=new Uint8Array(length);this.index=0};Uint8ArrayWriter.prototype={append:function(input){if(input.length!==0){input=utils.transformTo("uint8array",input);this.data.set(input,this.index);this.index+=input.length}},finalize:function(){return this.data}};module.exports=Uint8ArrayWriter},{"./utils":21}], +20:[function(_dereq_,module,exports){var utils=_dereq_("./utils");var support=_dereq_("./support");var nodeBuffer=_dereq_("./nodeBuffer");var _utf8len=new Array(256);for(var i=0;i<256;i++)_utf8len[i]=i>=252?6:i>=248?5:i>=240?4:i>=224?3:i>=192?2:1;_utf8len[254]=_utf8len[254]=1;var string2buf=function(str){var buf,c,c2,m_pos,i,str_len=str.length,buf_len=0;for(m_pos=0;m_pos<str_len;m_pos++){c=str.charCodeAt(m_pos);if((c&64512)===55296&&m_pos+1<str_len){c2=str.charCodeAt(m_pos+1);if((c2&64512)===56320){c= +65536+(c-55296<<10)+(c2-56320);m_pos++}}buf_len+=c<128?1:c<2048?2:c<65536?3:4}if(support.uint8array)buf=new Uint8Array(buf_len);else buf=new Array(buf_len);for(i=0,m_pos=0;i<buf_len;m_pos++){c=str.charCodeAt(m_pos);if((c&64512)===55296&&m_pos+1<str_len){c2=str.charCodeAt(m_pos+1);if((c2&64512)===56320){c=65536+(c-55296<<10)+(c2-56320);m_pos++}}if(c<128)buf[i++]=c;else if(c<2048){buf[i++]=192|c>>>6;buf[i++]=128|c&63}else if(c<65536){buf[i++]=224|c>>>12;buf[i++]=128|c>>>6&63;buf[i++]=128|c&63}else{buf[i++]= +240|c>>>18;buf[i++]=128|c>>>12&63;buf[i++]=128|c>>>6&63;buf[i++]=128|c&63}}return buf};var utf8border=function(buf,max){var pos;max=max||buf.length;if(max>buf.length)max=buf.length;pos=max-1;while(pos>=0&&(buf[pos]&192)===128)pos--;if(pos<0)return max;if(pos===0)return max;return pos+_utf8len[buf[pos]]>max?pos:max};var buf2string=function(buf){var str,i,out,c,c_len;var len=buf.length;var utf16buf=new Array(len*2);for(out=0,i=0;i<len;){c=buf[i++];if(c<128){utf16buf[out++]=c;continue}c_len=_utf8len[c]; +if(c_len>4){utf16buf[out++]=65533;i+=c_len-1;continue}c&=c_len===2?31:c_len===3?15:7;while(c_len>1&&i<len){c=c<<6|buf[i++]&63;c_len--}if(c_len>1){utf16buf[out++]=65533;continue}if(c<65536)utf16buf[out++]=c;else{c-=65536;utf16buf[out++]=55296|c>>10&1023;utf16buf[out++]=56320|c&1023}}if(utf16buf.length!==out)if(utf16buf.subarray)utf16buf=utf16buf.subarray(0,out);else utf16buf.length=out;return utils.applyFromCharCode(utf16buf)};exports.utf8encode=function utf8encode(str){if(support.nodebuffer)return nodeBuffer(str, +"utf-8");return string2buf(str)};exports.utf8decode=function utf8decode(buf){if(support.nodebuffer)return utils.transformTo("nodebuffer",buf).toString("utf-8");buf=utils.transformTo(support.uint8array?"uint8array":"array",buf);var result=[],k=0,len=buf.length,chunk=65536;while(k<len){var nextBoundary=utf8border(buf,Math.min(k+chunk,len));if(support.uint8array)result.push(buf2string(buf.subarray(k,nextBoundary)));else result.push(buf2string(buf.slice(k,nextBoundary)));k=nextBoundary}return result.join("")}}, +{"./nodeBuffer":11,"./support":17,"./utils":21}],21:[function(_dereq_,module,exports){var support=_dereq_("./support");var compressions=_dereq_("./compressions");var nodeBuffer=_dereq_("./nodeBuffer");exports.string2binary=function(str){var result="";for(var i=0;i<str.length;i++)result+=String.fromCharCode(str.charCodeAt(i)&255);return result};exports.arrayBuffer2Blob=function(buffer){exports.checkSupport("blob");try{return new Blob([buffer],{type:"application/zip"})}catch(e){try{var Builder=window.BlobBuilder|| +window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder;var builder=new Builder;builder.append(buffer);return builder.getBlob("application/zip")}catch(e){throw new Error("Bug : can't construct the Blob.");}}};function identity(input){return input}function stringToArrayLike(str,array){for(var i=0;i<str.length;++i)array[i]=str.charCodeAt(i)&255;return array}function arrayLikeToString(array){var chunk=65536;var result=[],len=array.length,type=exports.getTypeOf(array),k=0,canUseApply=true; +try{switch(type){case "uint8array":String.fromCharCode.apply(null,new Uint8Array(0));break;case "nodebuffer":String.fromCharCode.apply(null,nodeBuffer(0));break}}catch(e){canUseApply=false}if(!canUseApply){var resultStr="";for(var i=0;i<array.length;i++)resultStr+=String.fromCharCode(array[i]);return resultStr}while(k<len&&chunk>1)try{if(type==="array"||type==="nodebuffer")result.push(String.fromCharCode.apply(null,array.slice(k,Math.min(k+chunk,len))));else result.push(String.fromCharCode.apply(null, +array.subarray(k,Math.min(k+chunk,len))));k+=chunk}catch(e){chunk=Math.floor(chunk/2)}return result.join("")}exports.applyFromCharCode=arrayLikeToString;function arrayLikeToArrayLike(arrayFrom,arrayTo){for(var i=0;i<arrayFrom.length;i++)arrayTo[i]=arrayFrom[i];return arrayTo}var transform={};transform["string"]={"string":identity,"array":function(input){return stringToArrayLike(input,new Array(input.length))},"arraybuffer":function(input){return transform["string"]["uint8array"](input).buffer},"uint8array":function(input){return stringToArrayLike(input, +new Uint8Array(input.length))},"nodebuffer":function(input){return stringToArrayLike(input,nodeBuffer(input.length))}};transform["array"]={"string":arrayLikeToString,"array":identity,"arraybuffer":function(input){return(new Uint8Array(input)).buffer},"uint8array":function(input){return new Uint8Array(input)},"nodebuffer":function(input){return nodeBuffer(input)}};transform["arraybuffer"]={"string":function(input){return arrayLikeToString(new Uint8Array(input))},"array":function(input){return arrayLikeToArrayLike(new Uint8Array(input), +new Array(input.byteLength))},"arraybuffer":identity,"uint8array":function(input){return new Uint8Array(input)},"nodebuffer":function(input){return nodeBuffer(new Uint8Array(input))}};transform["uint8array"]={"string":arrayLikeToString,"array":function(input){return arrayLikeToArrayLike(input,new Array(input.length))},"arraybuffer":function(input){return input.buffer},"uint8array":identity,"nodebuffer":function(input){return nodeBuffer(input)}};transform["nodebuffer"]={"string":arrayLikeToString, +"array":function(input){return arrayLikeToArrayLike(input,new Array(input.length))},"arraybuffer":function(input){return transform["nodebuffer"]["uint8array"](input).buffer},"uint8array":function(input){return arrayLikeToArrayLike(input,new Uint8Array(input.length))},"nodebuffer":identity};exports.transformTo=function(outputType,input){if(!input)input="";if(!outputType)return input;exports.checkSupport(outputType);var inputType=exports.getTypeOf(input);var result=transform[inputType][outputType](input); +return result};exports.getTypeOf=function(input){if(typeof input==="string")return"string";if(Object.prototype.toString.call(input)==="[object Array]")return"array";if(support.nodebuffer&&nodeBuffer.test(input))return"nodebuffer";if(support.uint8array&&input instanceof Uint8Array)return"uint8array";if(support.arraybuffer&&input instanceof ArrayBuffer)return"arraybuffer"};exports.checkSupport=function(type){var supported=support[type.toLowerCase()];if(!supported)throw new Error(type+" is not supported by this browser"); +};exports.MAX_VALUE_16BITS=65535;exports.MAX_VALUE_32BITS=-1;exports.pretty=function(str){var res="",code,i;for(i=0;i<(str||"").length;i++){code=str.charCodeAt(i);res+="\\x"+(code<16?"0":"")+code.toString(16).toUpperCase()}return res};exports.findCompression=function(compressionMethod){for(var method in compressions){if(!compressions.hasOwnProperty(method))continue;if(compressions[method].magic===compressionMethod)return compressions[method]}return null};exports.isRegExp=function(object){return Object.prototype.toString.call(object)=== +"[object RegExp]"}},{"./compressions":3,"./nodeBuffer":11,"./support":17}],22:[function(_dereq_,module,exports){var StringReader=_dereq_("./stringReader");var NodeBufferReader=_dereq_("./nodeBufferReader");var Uint8ArrayReader=_dereq_("./uint8ArrayReader");var utils=_dereq_("./utils");var sig=_dereq_("./signature");var ZipEntry=_dereq_("./zipEntry");var support=_dereq_("./support");var jszipProto=_dereq_("./object");function ZipEntries(data,loadOptions){this.files=[];this.loadOptions=loadOptions; +if(data)this.load(data)}ZipEntries.prototype={checkSignature:function(expectedSignature){var signature=this.reader.readString(4);if(signature!==expectedSignature)throw new Error("Corrupted zip or bug : unexpected signature "+"("+utils.pretty(signature)+", expected "+utils.pretty(expectedSignature)+")");},readBlockEndOfCentral:function(){this.diskNumber=this.reader.readInt(2);this.diskWithCentralDirStart=this.reader.readInt(2);this.centralDirRecordsOnThisDisk=this.reader.readInt(2);this.centralDirRecords= +this.reader.readInt(2);this.centralDirSize=this.reader.readInt(4);this.centralDirOffset=this.reader.readInt(4);this.zipCommentLength=this.reader.readInt(2);this.zipComment=this.reader.readString(this.zipCommentLength);this.zipComment=jszipProto.utf8decode(this.zipComment)},readBlockZip64EndOfCentral:function(){this.zip64EndOfCentralSize=this.reader.readInt(8);this.versionMadeBy=this.reader.readString(2);this.versionNeeded=this.reader.readInt(2);this.diskNumber=this.reader.readInt(4);this.diskWithCentralDirStart= +this.reader.readInt(4);this.centralDirRecordsOnThisDisk=this.reader.readInt(8);this.centralDirRecords=this.reader.readInt(8);this.centralDirSize=this.reader.readInt(8);this.centralDirOffset=this.reader.readInt(8);this.zip64ExtensibleData={};var extraDataSize=this.zip64EndOfCentralSize-44,index=0,extraFieldId,extraFieldLength,extraFieldValue;while(index<extraDataSize){extraFieldId=this.reader.readInt(2);extraFieldLength=this.reader.readInt(4);extraFieldValue=this.reader.readString(extraFieldLength); +this.zip64ExtensibleData[extraFieldId]={id:extraFieldId,length:extraFieldLength,value:extraFieldValue}}},readBlockZip64EndOfCentralLocator:function(){this.diskWithZip64CentralDirStart=this.reader.readInt(4);this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8);this.disksCount=this.reader.readInt(4);if(this.disksCount>1)throw new Error("Multi-volumes zip are not supported");},readLocalFiles:function(){var i,file;for(i=0;i<this.files.length;i++){file=this.files[i];this.reader.setIndex(file.localHeaderOffset); +this.checkSignature(sig.LOCAL_FILE_HEADER);file.readLocalPart(this.reader);file.handleUTF8()}},readCentralDir:function(){var file;this.reader.setIndex(this.centralDirOffset);while(this.reader.readString(4)===sig.CENTRAL_FILE_HEADER){file=new ZipEntry({zip64:this.zip64},this.loadOptions);file.readCentralPart(this.reader);this.files.push(file)}},readEndOfCentral:function(){var offset=this.reader.lastIndexOfSignature(sig.CENTRAL_DIRECTORY_END);if(offset===-1)throw new Error("Corrupted zip : can't find end of central directory"); +this.reader.setIndex(offset);this.checkSignature(sig.CENTRAL_DIRECTORY_END);this.readBlockEndOfCentral();if(this.diskNumber===utils.MAX_VALUE_16BITS||this.diskWithCentralDirStart===utils.MAX_VALUE_16BITS||this.centralDirRecordsOnThisDisk===utils.MAX_VALUE_16BITS||this.centralDirRecords===utils.MAX_VALUE_16BITS||this.centralDirSize===utils.MAX_VALUE_32BITS||this.centralDirOffset===utils.MAX_VALUE_32BITS){this.zip64=true;offset=this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR);if(offset=== +-1)throw new Error("Corrupted zip : can't find the ZIP64 end of central directory locator");this.reader.setIndex(offset);this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR);this.readBlockZip64EndOfCentralLocator();this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir);this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_END);this.readBlockZip64EndOfCentral()}},prepareReader:function(data){var type=utils.getTypeOf(data);if(type==="string"&&!support.uint8array)this.reader=new StringReader(data, +this.loadOptions.optimizedBinaryString);else if(type==="nodebuffer")this.reader=new NodeBufferReader(data);else this.reader=new Uint8ArrayReader(utils.transformTo("uint8array",data))},load:function(data){this.prepareReader(data);this.readEndOfCentral();this.readCentralDir();this.readLocalFiles()}};module.exports=ZipEntries},{"./nodeBufferReader":12,"./object":13,"./signature":14,"./stringReader":15,"./support":17,"./uint8ArrayReader":18,"./utils":21,"./zipEntry":23}],23:[function(_dereq_,module,exports){var StringReader= +_dereq_("./stringReader");var utils=_dereq_("./utils");var CompressedObject=_dereq_("./compressedObject");var jszipProto=_dereq_("./object");function ZipEntry(options,loadOptions){this.options=options;this.loadOptions=loadOptions}ZipEntry.prototype={isEncrypted:function(){return(this.bitFlag&1)===1},useUTF8:function(){return(this.bitFlag&2048)===2048},prepareCompressedContent:function(reader,from,length){return function(){var previousIndex=reader.index;reader.setIndex(from);var compressedFileData= +reader.readData(length);reader.setIndex(previousIndex);return compressedFileData}},prepareContent:function(reader,from,length,compression,uncompressedSize){return function(){var compressedFileData=utils.transformTo(compression.uncompressInputType,this.getCompressedContent());var uncompressedFileData=compression.uncompress(compressedFileData);if(uncompressedFileData.length!==uncompressedSize)throw new Error("Bug : uncompressed data size mismatch");return uncompressedFileData}},readLocalPart:function(reader){var compression, +localExtraFieldsLength;reader.skip(22);this.fileNameLength=reader.readInt(2);localExtraFieldsLength=reader.readInt(2);this.fileName=reader.readString(this.fileNameLength);reader.skip(localExtraFieldsLength);if(this.compressedSize==-1||this.uncompressedSize==-1)throw new Error("Bug or corrupted zip : didn't get enough informations from the central directory "+"(compressedSize == -1 || uncompressedSize == -1)");compression=utils.findCompression(this.compressionMethod);if(compression===null)throw new Error("Corrupted zip : compression "+ +utils.pretty(this.compressionMethod)+" unknown (inner file : "+this.fileName+")");this.decompressed=new CompressedObject;this.decompressed.compressedSize=this.compressedSize;this.decompressed.uncompressedSize=this.uncompressedSize;this.decompressed.crc32=this.crc32;this.decompressed.compressionMethod=this.compressionMethod;this.decompressed.getCompressedContent=this.prepareCompressedContent(reader,reader.index,this.compressedSize,compression);this.decompressed.getContent=this.prepareContent(reader, +reader.index,this.compressedSize,compression,this.uncompressedSize);if(this.loadOptions.checkCRC32){this.decompressed=utils.transformTo("string",this.decompressed.getContent());if(jszipProto.crc32(this.decompressed)!==this.crc32)throw new Error("Corrupted zip : CRC32 mismatch");}},readCentralPart:function(reader){this.versionMadeBy=reader.readString(2);this.versionNeeded=reader.readInt(2);this.bitFlag=reader.readInt(2);this.compressionMethod=reader.readString(2);this.date=reader.readDate();this.crc32= +reader.readInt(4);this.compressedSize=reader.readInt(4);this.uncompressedSize=reader.readInt(4);this.fileNameLength=reader.readInt(2);this.extraFieldsLength=reader.readInt(2);this.fileCommentLength=reader.readInt(2);this.diskNumberStart=reader.readInt(2);this.internalFileAttributes=reader.readInt(2);this.externalFileAttributes=reader.readInt(4);this.localHeaderOffset=reader.readInt(4);if(this.isEncrypted())throw new Error("Encrypted zip are not supported");this.fileName=reader.readString(this.fileNameLength); +this.readExtraFields(reader);this.parseZIP64ExtraField(reader);this.fileComment=reader.readString(this.fileCommentLength);this.dir=this.externalFileAttributes&16?true:false},parseZIP64ExtraField:function(reader){if(!this.extraFields[1])return;var extraReader=new StringReader(this.extraFields[1].value);if(this.uncompressedSize===utils.MAX_VALUE_32BITS)this.uncompressedSize=extraReader.readInt(8);if(this.compressedSize===utils.MAX_VALUE_32BITS)this.compressedSize=extraReader.readInt(8);if(this.localHeaderOffset=== +utils.MAX_VALUE_32BITS)this.localHeaderOffset=extraReader.readInt(8);if(this.diskNumberStart===utils.MAX_VALUE_32BITS)this.diskNumberStart=extraReader.readInt(4)},readExtraFields:function(reader){var start=reader.index,extraFieldId,extraFieldLength,extraFieldValue;this.extraFields=this.extraFields||{};while(reader.index<start+this.extraFieldsLength){extraFieldId=reader.readInt(2);extraFieldLength=reader.readInt(2);extraFieldValue=reader.readString(extraFieldLength);this.extraFields[extraFieldId]= +{id:extraFieldId,length:extraFieldLength,value:extraFieldValue}}},handleUTF8:function(){if(this.useUTF8()){this.fileName=jszipProto.utf8decode(this.fileName);this.fileComment=jszipProto.utf8decode(this.fileComment)}else{var upath=this.findExtraFieldUnicodePath();if(upath!==null)this.fileName=upath;var ucomment=this.findExtraFieldUnicodeComment();if(ucomment!==null)this.fileComment=ucomment}},findExtraFieldUnicodePath:function(){var upathField=this.extraFields[28789];if(upathField){var extraReader= +new StringReader(upathField.value);if(extraReader.readInt(1)!==1)return null;if(jszipProto.crc32(this.fileName)!==extraReader.readInt(4))return null;return jszipProto.utf8decode(extraReader.readString(upathField.length-5))}return null},findExtraFieldUnicodeComment:function(){var ucommentField=this.extraFields[25461];if(ucommentField){var extraReader=new StringReader(ucommentField.value);if(extraReader.readInt(1)!==1)return null;if(jszipProto.crc32(this.fileComment)!==extraReader.readInt(4))return null; +return jszipProto.utf8decode(extraReader.readString(ucommentField.length-5))}return null}};module.exports=ZipEntry},{"./compressedObject":2,"./object":13,"./stringReader":15,"./utils":21}],24:[function(_dereq_,module,exports){var assign=_dereq_("./lib/utils/common").assign;var deflate=_dereq_("./lib/deflate");var inflate=_dereq_("./lib/inflate");var constants=_dereq_("./lib/zlib/constants");var pako={};assign(pako,deflate,inflate,constants);module.exports=pako},{"./lib/deflate":25,"./lib/inflate":26, +"./lib/utils/common":27,"./lib/zlib/constants":30}],25:[function(_dereq_,module,exports){var zlib_deflate=_dereq_("./zlib/deflate.js");var utils=_dereq_("./utils/common");var strings=_dereq_("./utils/strings");var msg=_dereq_("./zlib/messages");var zstream=_dereq_("./zlib/zstream");var Z_NO_FLUSH=0;var Z_FINISH=4;var Z_OK=0;var Z_STREAM_END=1;var Z_DEFAULT_COMPRESSION=-1;var Z_DEFAULT_STRATEGY=0;var Z_DEFLATED=8;var Deflate=function(options){this.options=utils.assign({level:Z_DEFAULT_COMPRESSION, +method:Z_DEFLATED,chunkSize:16384,windowBits:15,memLevel:8,strategy:Z_DEFAULT_STRATEGY,to:""},options||{});var opt=this.options;if(opt.raw&&opt.windowBits>0)opt.windowBits=-opt.windowBits;else if(opt.gzip&&opt.windowBits>0&&opt.windowBits<16)opt.windowBits+=16;this.err=0;this.msg="";this.ended=false;this.chunks=[];this.strm=new zstream;this.strm.avail_out=0;var status=zlib_deflate.deflateInit2(this.strm,opt.level,opt.method,opt.windowBits,opt.memLevel,opt.strategy);if(status!==Z_OK)throw new Error(msg[status]); +if(opt.header)zlib_deflate.deflateSetHeader(this.strm,opt.header)};Deflate.prototype.push=function(data,mode){var strm=this.strm;var chunkSize=this.options.chunkSize;var status,_mode;if(this.ended)return false;_mode=mode===~~mode?mode:mode===true?Z_FINISH:Z_NO_FLUSH;if(typeof data==="string")strm.input=strings.string2buf(data);else strm.input=data;strm.next_in=0;strm.avail_in=strm.input.length;do{if(strm.avail_out===0){strm.output=new utils.Buf8(chunkSize);strm.next_out=0;strm.avail_out=chunkSize}status= +zlib_deflate.deflate(strm,_mode);if(status!==Z_STREAM_END&&status!==Z_OK){this.onEnd(status);this.ended=true;return false}if(strm.avail_out===0||strm.avail_in===0&&_mode===Z_FINISH)if(this.options.to==="string")this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output,strm.next_out)));else this.onData(utils.shrinkBuf(strm.output,strm.next_out))}while((strm.avail_in>0||strm.avail_out===0)&&status!==Z_STREAM_END);if(_mode===Z_FINISH){status=zlib_deflate.deflateEnd(this.strm);this.onEnd(status); +this.ended=true;return status===Z_OK}return true};Deflate.prototype.onData=function(chunk){this.chunks.push(chunk)};Deflate.prototype.onEnd=function(status){if(status===Z_OK)if(this.options.to==="string")this.result=this.chunks.join("");else this.result=utils.flattenChunks(this.chunks);this.chunks=[];this.err=status;this.msg=this.strm.msg};function deflate(input,options){var deflator=new Deflate(options);deflator.push(input,true);if(deflator.err)throw deflator.msg;return deflator.result}function deflateRaw(input, +options){options=options||{};options.raw=true;return deflate(input,options)}function gzip(input,options){options=options||{};options.gzip=true;return deflate(input,options)}exports.Deflate=Deflate;exports.deflate=deflate;exports.deflateRaw=deflateRaw;exports.gzip=gzip},{"./utils/common":27,"./utils/strings":28,"./zlib/deflate.js":32,"./zlib/messages":37,"./zlib/zstream":39}],26:[function(_dereq_,module,exports){var zlib_inflate=_dereq_("./zlib/inflate.js");var utils=_dereq_("./utils/common");var strings= +_dereq_("./utils/strings");var c=_dereq_("./zlib/constants");var msg=_dereq_("./zlib/messages");var zstream=_dereq_("./zlib/zstream");var gzheader=_dereq_("./zlib/gzheader");var Inflate=function(options){this.options=utils.assign({chunkSize:16384,windowBits:0,to:""},options||{});var opt=this.options;if(opt.raw&&opt.windowBits>=0&&opt.windowBits<16){opt.windowBits=-opt.windowBits;if(opt.windowBits===0)opt.windowBits=-15}if(opt.windowBits>=0&&opt.windowBits<16&&!(options&&options.windowBits))opt.windowBits+= +32;if(opt.windowBits>15&&opt.windowBits<48)if((opt.windowBits&15)===0)opt.windowBits|=15;this.err=0;this.msg="";this.ended=false;this.chunks=[];this.strm=new zstream;this.strm.avail_out=0;var status=zlib_inflate.inflateInit2(this.strm,opt.windowBits);if(status!==c.Z_OK)throw new Error(msg[status]);this.header=new gzheader;zlib_inflate.inflateGetHeader(this.strm,this.header)};Inflate.prototype.push=function(data,mode){var strm=this.strm;var chunkSize=this.options.chunkSize;var status,_mode;var next_out_utf8, +tail,utf8str;if(this.ended)return false;_mode=mode===~~mode?mode:mode===true?c.Z_FINISH:c.Z_NO_FLUSH;if(typeof data==="string")strm.input=strings.binstring2buf(data);else strm.input=data;strm.next_in=0;strm.avail_in=strm.input.length;do{if(strm.avail_out===0){strm.output=new utils.Buf8(chunkSize);strm.next_out=0;strm.avail_out=chunkSize}status=zlib_inflate.inflate(strm,c.Z_NO_FLUSH);if(status!==c.Z_STREAM_END&&status!==c.Z_OK){this.onEnd(status);this.ended=true;return false}if(strm.next_out)if(strm.avail_out=== +0||status===c.Z_STREAM_END||strm.avail_in===0&&_mode===c.Z_FINISH)if(this.options.to==="string"){next_out_utf8=strings.utf8border(strm.output,strm.next_out);tail=strm.next_out-next_out_utf8;utf8str=strings.buf2string(strm.output,next_out_utf8);strm.next_out=tail;strm.avail_out=chunkSize-tail;if(tail)utils.arraySet(strm.output,strm.output,next_out_utf8,tail,0);this.onData(utf8str)}else this.onData(utils.shrinkBuf(strm.output,strm.next_out))}while(strm.avail_in>0&&status!==c.Z_STREAM_END);if(status=== +c.Z_STREAM_END)_mode=c.Z_FINISH;if(_mode===c.Z_FINISH){status=zlib_inflate.inflateEnd(this.strm);this.onEnd(status);this.ended=true;return status===c.Z_OK}return true};Inflate.prototype.onData=function(chunk){this.chunks.push(chunk)};Inflate.prototype.onEnd=function(status){if(status===c.Z_OK)if(this.options.to==="string")this.result=this.chunks.join("");else this.result=utils.flattenChunks(this.chunks);this.chunks=[];this.err=status;this.msg=this.strm.msg};function inflate(input,options){var inflator= +new Inflate(options);inflator.push(input,true);if(inflator.err)throw inflator.msg;return inflator.result}function inflateRaw(input,options){options=options||{};options.raw=true;return inflate(input,options)}exports.Inflate=Inflate;exports.inflate=inflate;exports.inflateRaw=inflateRaw;exports.ungzip=inflate},{"./utils/common":27,"./utils/strings":28,"./zlib/constants":30,"./zlib/gzheader":33,"./zlib/inflate.js":35,"./zlib/messages":37,"./zlib/zstream":39}],27:[function(_dereq_,module,exports){var TYPED_OK= +typeof Uint8Array!=="undefined"&&typeof Uint16Array!=="undefined"&&typeof Int32Array!=="undefined";exports.assign=function(obj){var sources=Array.prototype.slice.call(arguments,1);while(sources.length){var source=sources.shift();if(!source)continue;if(typeof source!=="object")throw new TypeError(source+"must be non-object");for(var p in source)if(source.hasOwnProperty(p))obj[p]=source[p]}return obj};exports.shrinkBuf=function(buf,size){if(buf.length===size)return buf;if(buf.subarray)return buf.subarray(0, +size);buf.length=size;return buf};var fnTyped={arraySet:function(dest,src,src_offs,len,dest_offs){if(src.subarray&&dest.subarray){dest.set(src.subarray(src_offs,src_offs+len),dest_offs);return}for(var i=0;i<len;i++)dest[dest_offs+i]=src[src_offs+i]},flattenChunks:function(chunks){var i,l,len,pos,chunk,result;len=0;for(i=0,l=chunks.length;i<l;i++)len+=chunks[i].length;result=new Uint8Array(len);pos=0;for(i=0,l=chunks.length;i<l;i++){chunk=chunks[i];result.set(chunk,pos);pos+=chunk.length}return result}}; +var fnUntyped={arraySet:function(dest,src,src_offs,len,dest_offs){for(var i=0;i<len;i++)dest[dest_offs+i]=src[src_offs+i]},flattenChunks:function(chunks){return[].concat.apply([],chunks)}};exports.setTyped=function(on){if(on){exports.Buf8=Uint8Array;exports.Buf16=Uint16Array;exports.Buf32=Int32Array;exports.assign(exports,fnTyped)}else{exports.Buf8=Array;exports.Buf16=Array;exports.Buf32=Array;exports.assign(exports,fnUntyped)}};exports.setTyped(TYPED_OK)},{}],28:[function(_dereq_,module,exports){var utils= +_dereq_("./common");var STR_APPLY_OK=true;var STR_APPLY_UIA_OK=true;try{String.fromCharCode.apply(null,[0])}catch(__){STR_APPLY_OK=false}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(__){STR_APPLY_UIA_OK=false}var _utf8len=new utils.Buf8(256);for(var i=0;i<256;i++)_utf8len[i]=i>=252?6:i>=248?5:i>=240?4:i>=224?3:i>=192?2:1;_utf8len[254]=_utf8len[254]=1;exports.string2buf=function(str){var buf,c,c2,m_pos,i,str_len=str.length,buf_len=0;for(m_pos=0;m_pos<str_len;m_pos++){c=str.charCodeAt(m_pos); +if((c&64512)===55296&&m_pos+1<str_len){c2=str.charCodeAt(m_pos+1);if((c2&64512)===56320){c=65536+(c-55296<<10)+(c2-56320);m_pos++}}buf_len+=c<128?1:c<2048?2:c<65536?3:4}buf=new utils.Buf8(buf_len);for(i=0,m_pos=0;i<buf_len;m_pos++){c=str.charCodeAt(m_pos);if((c&64512)===55296&&m_pos+1<str_len){c2=str.charCodeAt(m_pos+1);if((c2&64512)===56320){c=65536+(c-55296<<10)+(c2-56320);m_pos++}}if(c<128)buf[i++]=c;else if(c<2048){buf[i++]=192|c>>>6;buf[i++]=128|c&63}else if(c<65536){buf[i++]=224|c>>>12;buf[i++]= +128|c>>>6&63;buf[i++]=128|c&63}else{buf[i++]=240|c>>>18;buf[i++]=128|c>>>12&63;buf[i++]=128|c>>>6&63;buf[i++]=128|c&63}}return buf};function buf2binstring(buf,len){if(len<65537)if(buf.subarray&&STR_APPLY_UIA_OK||!buf.subarray&&STR_APPLY_OK)return String.fromCharCode.apply(null,utils.shrinkBuf(buf,len));var result="";for(var i=0;i<len;i++)result+=String.fromCharCode(buf[i]);return result}exports.buf2binstring=function(buf){return buf2binstring(buf,buf.length)};exports.binstring2buf=function(str){var buf= +new utils.Buf8(str.length);for(var i=0,len=buf.length;i<len;i++)buf[i]=str.charCodeAt(i);return buf};exports.buf2string=function(buf,max){var i,out,c,c_len;var len=max||buf.length;var utf16buf=new Array(len*2);for(out=0,i=0;i<len;){c=buf[i++];if(c<128){utf16buf[out++]=c;continue}c_len=_utf8len[c];if(c_len>4){utf16buf[out++]=65533;i+=c_len-1;continue}c&=c_len===2?31:c_len===3?15:7;while(c_len>1&&i<len){c=c<<6|buf[i++]&63;c_len--}if(c_len>1){utf16buf[out++]=65533;continue}if(c<65536)utf16buf[out++]= +c;else{c-=65536;utf16buf[out++]=55296|c>>10&1023;utf16buf[out++]=56320|c&1023}}return buf2binstring(utf16buf,out)};exports.utf8border=function(buf,max){var pos;max=max||buf.length;if(max>buf.length)max=buf.length;pos=max-1;while(pos>=0&&(buf[pos]&192)===128)pos--;if(pos<0)return max;if(pos===0)return max;return pos+_utf8len[buf[pos]]>max?pos:max}},{"./common":27}],29:[function(_dereq_,module,exports){function adler32(adler,buf,len,pos){var s1=adler&65535|0,s2=adler>>>16&65535|0,n=0;while(len!==0){n= +len>2E3?2E3:len;len-=n;do{s1=s1+buf[pos++]|0;s2=s2+s1|0}while(--n);s1%=65521;s2%=65521}return s1|s2<<16|0}module.exports=adler32},{}],30:[function(_dereq_,module,exports){module.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4, +Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],31:[function(_dereq_,module,exports){function makeTable(){var c,table=[];for(var n=0;n<256;n++){c=n;for(var k=0;k<8;k++)c=c&1?3988292384^c>>>1:c>>>1;table[n]=c}return table}var crcTable=makeTable();function crc32(crc,buf,len,pos){var t=crcTable,end=pos+len;crc=crc^-1;for(var i=pos;i<end;i++)crc=crc>>>8^t[(crc^buf[i])&255];return crc^-1}module.exports=crc32},{}],32:[function(_dereq_,module,exports){var utils=_dereq_("../utils/common"); +var trees=_dereq_("./trees");var adler32=_dereq_("./adler32");var crc32=_dereq_("./crc32");var msg=_dereq_("./messages");var Z_NO_FLUSH=0;var Z_PARTIAL_FLUSH=1;var Z_FULL_FLUSH=3;var Z_FINISH=4;var Z_BLOCK=5;var Z_OK=0;var Z_STREAM_END=1;var Z_STREAM_ERROR=-2;var Z_DATA_ERROR=-3;var Z_BUF_ERROR=-5;var Z_DEFAULT_COMPRESSION=-1;var Z_FILTERED=1;var Z_HUFFMAN_ONLY=2;var Z_RLE=3;var Z_FIXED=4;var Z_DEFAULT_STRATEGY=0;var Z_UNKNOWN=2;var Z_DEFLATED=8;var MAX_MEM_LEVEL=9;var MAX_WBITS=15;var DEF_MEM_LEVEL= +8;var LENGTH_CODES=29;var LITERALS=256;var L_CODES=LITERALS+1+LENGTH_CODES;var D_CODES=30;var BL_CODES=19;var HEAP_SIZE=2*L_CODES+1;var MAX_BITS=15;var MIN_MATCH=3;var MAX_MATCH=258;var MIN_LOOKAHEAD=MAX_MATCH+MIN_MATCH+1;var PRESET_DICT=32;var INIT_STATE=42;var EXTRA_STATE=69;var NAME_STATE=73;var COMMENT_STATE=91;var HCRC_STATE=103;var BUSY_STATE=113;var FINISH_STATE=666;var BS_NEED_MORE=1;var BS_BLOCK_DONE=2;var BS_FINISH_STARTED=3;var BS_FINISH_DONE=4;var OS_CODE=3;function err(strm,errorCode){strm.msg= +msg[errorCode];return errorCode}function rank(f){return(f<<1)-(f>4?9:0)}function zero(buf){var len=buf.length;while(--len>=0)buf[len]=0}function flush_pending(strm){var s=strm.state;var len=s.pending;if(len>strm.avail_out)len=strm.avail_out;if(len===0)return;utils.arraySet(strm.output,s.pending_buf,s.pending_out,len,strm.next_out);strm.next_out+=len;s.pending_out+=len;strm.total_out+=len;strm.avail_out-=len;s.pending-=len;if(s.pending===0)s.pending_out=0}function flush_block_only(s,last){trees._tr_flush_block(s, +s.block_start>=0?s.block_start:-1,s.strstart-s.block_start,last);s.block_start=s.strstart;flush_pending(s.strm)}function put_byte(s,b){s.pending_buf[s.pending++]=b}function putShortMSB(s,b){s.pending_buf[s.pending++]=b>>>8&255;s.pending_buf[s.pending++]=b&255}function read_buf(strm,buf,start,size){var len=strm.avail_in;if(len>size)len=size;if(len===0)return 0;strm.avail_in-=len;utils.arraySet(buf,strm.input,strm.next_in,len,start);if(strm.state.wrap===1)strm.adler=adler32(strm.adler,buf,len,start); +else if(strm.state.wrap===2)strm.adler=crc32(strm.adler,buf,len,start);strm.next_in+=len;strm.total_in+=len;return len}function longest_match(s,cur_match){var chain_length=s.max_chain_length;var scan=s.strstart;var match;var len;var best_len=s.prev_length;var nice_match=s.nice_match;var limit=s.strstart>s.w_size-MIN_LOOKAHEAD?s.strstart-(s.w_size-MIN_LOOKAHEAD):0;var _win=s.window;var wmask=s.w_mask;var prev=s.prev;var strend=s.strstart+MAX_MATCH;var scan_end1=_win[scan+best_len-1];var scan_end=_win[scan+ +best_len];if(s.prev_length>=s.good_match)chain_length>>=2;if(nice_match>s.lookahead)nice_match=s.lookahead;do{match=cur_match;if(_win[match+best_len]!==scan_end||_win[match+best_len-1]!==scan_end1||_win[match]!==_win[scan]||_win[++match]!==_win[scan+1])continue;scan+=2;match++;do;while(_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]=== +_win[++match]&&scan<strend);len=MAX_MATCH-(strend-scan);scan=strend-MAX_MATCH;if(len>best_len){s.match_start=cur_match;best_len=len;if(len>=nice_match)break;scan_end1=_win[scan+best_len-1];scan_end=_win[scan+best_len]}}while((cur_match=prev[cur_match&wmask])>limit&&--chain_length!==0);if(best_len<=s.lookahead)return best_len;return s.lookahead}function fill_window(s){var _w_size=s.w_size;var p,n,m,more,str;do{more=s.window_size-s.lookahead-s.strstart;if(s.strstart>=_w_size+(_w_size-MIN_LOOKAHEAD)){utils.arraySet(s.window, +s.window,_w_size,_w_size,0);s.match_start-=_w_size;s.strstart-=_w_size;s.block_start-=_w_size;n=s.hash_size;p=n;do{m=s.head[--p];s.head[p]=m>=_w_size?m-_w_size:0}while(--n);n=_w_size;p=n;do{m=s.prev[--p];s.prev[p]=m>=_w_size?m-_w_size:0}while(--n);more+=_w_size}if(s.strm.avail_in===0)break;n=read_buf(s.strm,s.window,s.strstart+s.lookahead,more);s.lookahead+=n;if(s.lookahead+s.insert>=MIN_MATCH){str=s.strstart-s.insert;s.ins_h=s.window[str];s.ins_h=(s.ins_h<<s.hash_shift^s.window[str+1])&s.hash_mask; +while(s.insert){s.ins_h=(s.ins_h<<s.hash_shift^s.window[str+MIN_MATCH-1])&s.hash_mask;s.prev[str&s.w_mask]=s.head[s.ins_h];s.head[s.ins_h]=str;str++;s.insert--;if(s.lookahead+s.insert<MIN_MATCH)break}}}while(s.lookahead<MIN_LOOKAHEAD&&s.strm.avail_in!==0)}function deflate_stored(s,flush){var max_block_size=65535;if(max_block_size>s.pending_buf_size-5)max_block_size=s.pending_buf_size-5;for(;;){if(s.lookahead<=1){fill_window(s);if(s.lookahead===0&&flush===Z_NO_FLUSH)return BS_NEED_MORE;if(s.lookahead=== +0)break}s.strstart+=s.lookahead;s.lookahead=0;var max_start=s.block_start+max_block_size;if(s.strstart===0||s.strstart>=max_start){s.lookahead=s.strstart-max_start;s.strstart=max_start;flush_block_only(s,false);if(s.strm.avail_out===0)return BS_NEED_MORE}if(s.strstart-s.block_start>=s.w_size-MIN_LOOKAHEAD){flush_block_only(s,false);if(s.strm.avail_out===0)return BS_NEED_MORE}}s.insert=0;if(flush===Z_FINISH){flush_block_only(s,true);if(s.strm.avail_out===0)return BS_FINISH_STARTED;return BS_FINISH_DONE}if(s.strstart> +s.block_start){flush_block_only(s,false);if(s.strm.avail_out===0)return BS_NEED_MORE}return BS_NEED_MORE}function deflate_fast(s,flush){var hash_head;var bflush;for(;;){if(s.lookahead<MIN_LOOKAHEAD){fill_window(s);if(s.lookahead<MIN_LOOKAHEAD&&flush===Z_NO_FLUSH)return BS_NEED_MORE;if(s.lookahead===0)break}hash_head=0;if(s.lookahead>=MIN_MATCH){s.ins_h=(s.ins_h<<s.hash_shift^s.window[s.strstart+MIN_MATCH-1])&s.hash_mask;hash_head=s.prev[s.strstart&s.w_mask]=s.head[s.ins_h];s.head[s.ins_h]=s.strstart}if(hash_head!== +0&&s.strstart-hash_head<=s.w_size-MIN_LOOKAHEAD)s.match_length=longest_match(s,hash_head);if(s.match_length>=MIN_MATCH){bflush=trees._tr_tally(s,s.strstart-s.match_start,s.match_length-MIN_MATCH);s.lookahead-=s.match_length;if(s.match_length<=s.max_lazy_match&&s.lookahead>=MIN_MATCH){s.match_length--;do{s.strstart++;s.ins_h=(s.ins_h<<s.hash_shift^s.window[s.strstart+MIN_MATCH-1])&s.hash_mask;hash_head=s.prev[s.strstart&s.w_mask]=s.head[s.ins_h];s.head[s.ins_h]=s.strstart}while(--s.match_length!== +0);s.strstart++}else{s.strstart+=s.match_length;s.match_length=0;s.ins_h=s.window[s.strstart];s.ins_h=(s.ins_h<<s.hash_shift^s.window[s.strstart+1])&s.hash_mask}}else{bflush=trees._tr_tally(s,0,s.window[s.strstart]);s.lookahead--;s.strstart++}if(bflush){flush_block_only(s,false);if(s.strm.avail_out===0)return BS_NEED_MORE}}s.insert=s.strstart<MIN_MATCH-1?s.strstart:MIN_MATCH-1;if(flush===Z_FINISH){flush_block_only(s,true);if(s.strm.avail_out===0)return BS_FINISH_STARTED;return BS_FINISH_DONE}if(s.last_lit){flush_block_only(s, +false);if(s.strm.avail_out===0)return BS_NEED_MORE}return BS_BLOCK_DONE}function deflate_slow(s,flush){var hash_head;var bflush;var max_insert;for(;;){if(s.lookahead<MIN_LOOKAHEAD){fill_window(s);if(s.lookahead<MIN_LOOKAHEAD&&flush===Z_NO_FLUSH)return BS_NEED_MORE;if(s.lookahead===0)break}hash_head=0;if(s.lookahead>=MIN_MATCH){s.ins_h=(s.ins_h<<s.hash_shift^s.window[s.strstart+MIN_MATCH-1])&s.hash_mask;hash_head=s.prev[s.strstart&s.w_mask]=s.head[s.ins_h];s.head[s.ins_h]=s.strstart}s.prev_length= +s.match_length;s.prev_match=s.match_start;s.match_length=MIN_MATCH-1;if(hash_head!==0&&s.prev_length<s.max_lazy_match&&s.strstart-hash_head<=s.w_size-MIN_LOOKAHEAD){s.match_length=longest_match(s,hash_head);if(s.match_length<=5&&(s.strategy===Z_FILTERED||s.match_length===MIN_MATCH&&s.strstart-s.match_start>4096))s.match_length=MIN_MATCH-1}if(s.prev_length>=MIN_MATCH&&s.match_length<=s.prev_length){max_insert=s.strstart+s.lookahead-MIN_MATCH;bflush=trees._tr_tally(s,s.strstart-1-s.prev_match,s.prev_length- +MIN_MATCH);s.lookahead-=s.prev_length-1;s.prev_length-=2;do if(++s.strstart<=max_insert){s.ins_h=(s.ins_h<<s.hash_shift^s.window[s.strstart+MIN_MATCH-1])&s.hash_mask;hash_head=s.prev[s.strstart&s.w_mask]=s.head[s.ins_h];s.head[s.ins_h]=s.strstart}while(--s.prev_length!==0);s.match_available=0;s.match_length=MIN_MATCH-1;s.strstart++;if(bflush){flush_block_only(s,false);if(s.strm.avail_out===0)return BS_NEED_MORE}}else if(s.match_available){bflush=trees._tr_tally(s,0,s.window[s.strstart-1]);if(bflush)flush_block_only(s, +false);s.strstart++;s.lookahead--;if(s.strm.avail_out===0)return BS_NEED_MORE}else{s.match_available=1;s.strstart++;s.lookahead--}}if(s.match_available){bflush=trees._tr_tally(s,0,s.window[s.strstart-1]);s.match_available=0}s.insert=s.strstart<MIN_MATCH-1?s.strstart:MIN_MATCH-1;if(flush===Z_FINISH){flush_block_only(s,true);if(s.strm.avail_out===0)return BS_FINISH_STARTED;return BS_FINISH_DONE}if(s.last_lit){flush_block_only(s,false);if(s.strm.avail_out===0)return BS_NEED_MORE}return BS_BLOCK_DONE} +function deflate_rle(s,flush){var bflush;var prev;var scan,strend;var _win=s.window;for(;;){if(s.lookahead<=MAX_MATCH){fill_window(s);if(s.lookahead<=MAX_MATCH&&flush===Z_NO_FLUSH)return BS_NEED_MORE;if(s.lookahead===0)break}s.match_length=0;if(s.lookahead>=MIN_MATCH&&s.strstart>0){scan=s.strstart-1;prev=_win[scan];if(prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]){strend=s.strstart+MAX_MATCH;do;while(prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&& +prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&scan<strend);s.match_length=MAX_MATCH-(strend-scan);if(s.match_length>s.lookahead)s.match_length=s.lookahead}}if(s.match_length>=MIN_MATCH){bflush=trees._tr_tally(s,1,s.match_length-MIN_MATCH);s.lookahead-=s.match_length;s.strstart+=s.match_length;s.match_length=0}else{bflush=trees._tr_tally(s,0,s.window[s.strstart]);s.lookahead--;s.strstart++}if(bflush){flush_block_only(s,false);if(s.strm.avail_out===0)return BS_NEED_MORE}}s.insert= +0;if(flush===Z_FINISH){flush_block_only(s,true);if(s.strm.avail_out===0)return BS_FINISH_STARTED;return BS_FINISH_DONE}if(s.last_lit){flush_block_only(s,false);if(s.strm.avail_out===0)return BS_NEED_MORE}return BS_BLOCK_DONE}function deflate_huff(s,flush){var bflush;for(;;){if(s.lookahead===0){fill_window(s);if(s.lookahead===0){if(flush===Z_NO_FLUSH)return BS_NEED_MORE;break}}s.match_length=0;bflush=trees._tr_tally(s,0,s.window[s.strstart]);s.lookahead--;s.strstart++;if(bflush){flush_block_only(s, +false);if(s.strm.avail_out===0)return BS_NEED_MORE}}s.insert=0;if(flush===Z_FINISH){flush_block_only(s,true);if(s.strm.avail_out===0)return BS_FINISH_STARTED;return BS_FINISH_DONE}if(s.last_lit){flush_block_only(s,false);if(s.strm.avail_out===0)return BS_NEED_MORE}return BS_BLOCK_DONE}var Config=function(good_length,max_lazy,nice_length,max_chain,func){this.good_length=good_length;this.max_lazy=max_lazy;this.nice_length=nice_length;this.max_chain=max_chain;this.func=func};var configuration_table; +configuration_table=[new Config(0,0,0,0,deflate_stored),new Config(4,4,8,4,deflate_fast),new Config(4,5,16,8,deflate_fast),new Config(4,6,32,32,deflate_fast),new Config(4,4,16,16,deflate_slow),new Config(8,16,32,32,deflate_slow),new Config(8,16,128,128,deflate_slow),new Config(8,32,128,256,deflate_slow),new Config(32,128,258,1024,deflate_slow),new Config(32,258,258,4096,deflate_slow)];function lm_init(s){s.window_size=2*s.w_size;zero(s.head);s.max_lazy_match=configuration_table[s.level].max_lazy; +s.good_match=configuration_table[s.level].good_length;s.nice_match=configuration_table[s.level].nice_length;s.max_chain_length=configuration_table[s.level].max_chain;s.strstart=0;s.block_start=0;s.lookahead=0;s.insert=0;s.match_length=s.prev_length=MIN_MATCH-1;s.match_available=0;s.ins_h=0}function DeflateState(){this.strm=null;this.status=0;this.pending_buf=null;this.pending_buf_size=0;this.pending_out=0;this.pending=0;this.wrap=0;this.gzhead=null;this.gzindex=0;this.method=Z_DEFLATED;this.last_flush= +-1;this.w_size=0;this.w_bits=0;this.w_mask=0;this.window=null;this.window_size=0;this.prev=null;this.head=null;this.ins_h=0;this.hash_size=0;this.hash_bits=0;this.hash_mask=0;this.hash_shift=0;this.block_start=0;this.match_length=0;this.prev_match=0;this.match_available=0;this.strstart=0;this.match_start=0;this.lookahead=0;this.prev_length=0;this.max_chain_length=0;this.max_lazy_match=0;this.level=0;this.strategy=0;this.good_match=0;this.nice_match=0;this.dyn_ltree=new utils.Buf16(HEAP_SIZE*2);this.dyn_dtree= +new utils.Buf16((2*D_CODES+1)*2);this.bl_tree=new utils.Buf16((2*BL_CODES+1)*2);zero(this.dyn_ltree);zero(this.dyn_dtree);zero(this.bl_tree);this.l_desc=null;this.d_desc=null;this.bl_desc=null;this.bl_count=new utils.Buf16(MAX_BITS+1);this.heap=new utils.Buf16(2*L_CODES+1);zero(this.heap);this.heap_len=0;this.heap_max=0;this.depth=new utils.Buf16(2*L_CODES+1);zero(this.depth);this.l_buf=0;this.lit_bufsize=0;this.last_lit=0;this.d_buf=0;this.opt_len=0;this.static_len=0;this.matches=0;this.insert=0; +this.bi_buf=0;this.bi_valid=0}function deflateResetKeep(strm){var s;if(!strm||!strm.state)return err(strm,Z_STREAM_ERROR);strm.total_in=strm.total_out=0;strm.data_type=Z_UNKNOWN;s=strm.state;s.pending=0;s.pending_out=0;if(s.wrap<0)s.wrap=-s.wrap;s.status=s.wrap?INIT_STATE:BUSY_STATE;strm.adler=s.wrap===2?0:1;s.last_flush=Z_NO_FLUSH;trees._tr_init(s);return Z_OK}function deflateReset(strm){var ret=deflateResetKeep(strm);if(ret===Z_OK)lm_init(strm.state);return ret}function deflateSetHeader(strm,head){if(!strm|| +!strm.state)return Z_STREAM_ERROR;if(strm.state.wrap!==2)return Z_STREAM_ERROR;strm.state.gzhead=head;return Z_OK}function deflateInit2(strm,level,method,windowBits,memLevel,strategy){if(!strm)return Z_STREAM_ERROR;var wrap=1;if(level===Z_DEFAULT_COMPRESSION)level=6;if(windowBits<0){wrap=0;windowBits=-windowBits}else if(windowBits>15){wrap=2;windowBits-=16}if(memLevel<1||memLevel>MAX_MEM_LEVEL||method!==Z_DEFLATED||windowBits<8||windowBits>15||level<0||level>9||strategy<0||strategy>Z_FIXED)return err(strm, +Z_STREAM_ERROR);if(windowBits===8)windowBits=9;var s=new DeflateState;strm.state=s;s.strm=strm;s.wrap=wrap;s.gzhead=null;s.w_bits=windowBits;s.w_size=1<<s.w_bits;s.w_mask=s.w_size-1;s.hash_bits=memLevel+7;s.hash_size=1<<s.hash_bits;s.hash_mask=s.hash_size-1;s.hash_shift=~~((s.hash_bits+MIN_MATCH-1)/MIN_MATCH);s.window=new utils.Buf8(s.w_size*2);s.head=new utils.Buf16(s.hash_size);s.prev=new utils.Buf16(s.w_size);s.lit_bufsize=1<<memLevel+6;s.pending_buf_size=s.lit_bufsize*4;s.pending_buf=new utils.Buf8(s.pending_buf_size); +s.d_buf=s.lit_bufsize>>1;s.l_buf=(1+2)*s.lit_bufsize;s.level=level;s.strategy=strategy;s.method=method;return deflateReset(strm)}function deflateInit(strm,level){return deflateInit2(strm,level,Z_DEFLATED,MAX_WBITS,DEF_MEM_LEVEL,Z_DEFAULT_STRATEGY)}function deflate(strm,flush){var old_flush,s;var beg,val;if(!strm||!strm.state||flush>Z_BLOCK||flush<0)return strm?err(strm,Z_STREAM_ERROR):Z_STREAM_ERROR;s=strm.state;if(!strm.output||!strm.input&&strm.avail_in!==0||s.status===FINISH_STATE&&flush!==Z_FINISH)return err(strm, +strm.avail_out===0?Z_BUF_ERROR:Z_STREAM_ERROR);s.strm=strm;old_flush=s.last_flush;s.last_flush=flush;if(s.status===INIT_STATE)if(s.wrap===2){strm.adler=0;put_byte(s,31);put_byte(s,139);put_byte(s,8);if(!s.gzhead){put_byte(s,0);put_byte(s,0);put_byte(s,0);put_byte(s,0);put_byte(s,0);put_byte(s,s.level===9?2:s.strategy>=Z_HUFFMAN_ONLY||s.level<2?4:0);put_byte(s,OS_CODE);s.status=BUSY_STATE}else{put_byte(s,(s.gzhead.text?1:0)+(s.gzhead.hcrc?2:0)+(!s.gzhead.extra?0:4)+(!s.gzhead.name?0:8)+(!s.gzhead.comment? +0:16));put_byte(s,s.gzhead.time&255);put_byte(s,s.gzhead.time>>8&255);put_byte(s,s.gzhead.time>>16&255);put_byte(s,s.gzhead.time>>24&255);put_byte(s,s.level===9?2:s.strategy>=Z_HUFFMAN_ONLY||s.level<2?4:0);put_byte(s,s.gzhead.os&255);if(s.gzhead.extra&&s.gzhead.extra.length){put_byte(s,s.gzhead.extra.length&255);put_byte(s,s.gzhead.extra.length>>8&255)}if(s.gzhead.hcrc)strm.adler=crc32(strm.adler,s.pending_buf,s.pending,0);s.gzindex=0;s.status=EXTRA_STATE}}else{var header=Z_DEFLATED+(s.w_bits-8<< +4)<<8;var level_flags=-1;if(s.strategy>=Z_HUFFMAN_ONLY||s.level<2)level_flags=0;else if(s.level<6)level_flags=1;else if(s.level===6)level_flags=2;else level_flags=3;header|=level_flags<<6;if(s.strstart!==0)header|=PRESET_DICT;header+=31-header%31;s.status=BUSY_STATE;putShortMSB(s,header);if(s.strstart!==0){putShortMSB(s,strm.adler>>>16);putShortMSB(s,strm.adler&65535)}strm.adler=1}if(s.status===EXTRA_STATE)if(s.gzhead.extra){beg=s.pending;while(s.gzindex<(s.gzhead.extra.length&65535)){if(s.pending=== +s.pending_buf_size){if(s.gzhead.hcrc&&s.pending>beg)strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg);flush_pending(strm);beg=s.pending;if(s.pending===s.pending_buf_size)break}put_byte(s,s.gzhead.extra[s.gzindex]&255);s.gzindex++}if(s.gzhead.hcrc&&s.pending>beg)strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg);if(s.gzindex===s.gzhead.extra.length){s.gzindex=0;s.status=NAME_STATE}}else s.status=NAME_STATE;if(s.status===NAME_STATE)if(s.gzhead.name){beg=s.pending;do{if(s.pending=== +s.pending_buf_size){if(s.gzhead.hcrc&&s.pending>beg)strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg);flush_pending(strm);beg=s.pending;if(s.pending===s.pending_buf_size){val=1;break}}if(s.gzindex<s.gzhead.name.length)val=s.gzhead.name.charCodeAt(s.gzindex++)&255;else val=0;put_byte(s,val)}while(val!==0);if(s.gzhead.hcrc&&s.pending>beg)strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg);if(val===0){s.gzindex=0;s.status=COMMENT_STATE}}else s.status=COMMENT_STATE;if(s.status===COMMENT_STATE)if(s.gzhead.comment){beg= +s.pending;do{if(s.pending===s.pending_buf_size){if(s.gzhead.hcrc&&s.pending>beg)strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg);flush_pending(strm);beg=s.pending;if(s.pending===s.pending_buf_size){val=1;break}}if(s.gzindex<s.gzhead.comment.length)val=s.gzhead.comment.charCodeAt(s.gzindex++)&255;else val=0;put_byte(s,val)}while(val!==0);if(s.gzhead.hcrc&&s.pending>beg)strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg);if(val===0)s.status=HCRC_STATE}else s.status=HCRC_STATE;if(s.status=== +HCRC_STATE)if(s.gzhead.hcrc){if(s.pending+2>s.pending_buf_size)flush_pending(strm);if(s.pending+2<=s.pending_buf_size){put_byte(s,strm.adler&255);put_byte(s,strm.adler>>8&255);strm.adler=0;s.status=BUSY_STATE}}else s.status=BUSY_STATE;if(s.pending!==0){flush_pending(strm);if(strm.avail_out===0){s.last_flush=-1;return Z_OK}}else if(strm.avail_in===0&&rank(flush)<=rank(old_flush)&&flush!==Z_FINISH)return err(strm,Z_BUF_ERROR);if(s.status===FINISH_STATE&&strm.avail_in!==0)return err(strm,Z_BUF_ERROR); +if(strm.avail_in!==0||s.lookahead!==0||flush!==Z_NO_FLUSH&&s.status!==FINISH_STATE){var bstate=s.strategy===Z_HUFFMAN_ONLY?deflate_huff(s,flush):s.strategy===Z_RLE?deflate_rle(s,flush):configuration_table[s.level].func(s,flush);if(bstate===BS_FINISH_STARTED||bstate===BS_FINISH_DONE)s.status=FINISH_STATE;if(bstate===BS_NEED_MORE||bstate===BS_FINISH_STARTED){if(strm.avail_out===0)s.last_flush=-1;return Z_OK}if(bstate===BS_BLOCK_DONE){if(flush===Z_PARTIAL_FLUSH)trees._tr_align(s);else if(flush!==Z_BLOCK){trees._tr_stored_block(s, +0,0,false);if(flush===Z_FULL_FLUSH){zero(s.head);if(s.lookahead===0){s.strstart=0;s.block_start=0;s.insert=0}}}flush_pending(strm);if(strm.avail_out===0){s.last_flush=-1;return Z_OK}}}if(flush!==Z_FINISH)return Z_OK;if(s.wrap<=0)return Z_STREAM_END;if(s.wrap===2){put_byte(s,strm.adler&255);put_byte(s,strm.adler>>8&255);put_byte(s,strm.adler>>16&255);put_byte(s,strm.adler>>24&255);put_byte(s,strm.total_in&255);put_byte(s,strm.total_in>>8&255);put_byte(s,strm.total_in>>16&255);put_byte(s,strm.total_in>> +24&255)}else{putShortMSB(s,strm.adler>>>16);putShortMSB(s,strm.adler&65535)}flush_pending(strm);if(s.wrap>0)s.wrap=-s.wrap;return s.pending!==0?Z_OK:Z_STREAM_END}function deflateEnd(strm){var status;if(!strm||!strm.state)return Z_STREAM_ERROR;status=strm.state.status;if(status!==INIT_STATE&&status!==EXTRA_STATE&&status!==NAME_STATE&&status!==COMMENT_STATE&&status!==HCRC_STATE&&status!==BUSY_STATE&&status!==FINISH_STATE)return err(strm,Z_STREAM_ERROR);strm.state=null;return status===BUSY_STATE?err(strm, +Z_DATA_ERROR):Z_OK}exports.deflateInit=deflateInit;exports.deflateInit2=deflateInit2;exports.deflateReset=deflateReset;exports.deflateResetKeep=deflateResetKeep;exports.deflateSetHeader=deflateSetHeader;exports.deflate=deflate;exports.deflateEnd=deflateEnd;exports.deflateInfo="pako deflate (from Nodeca project)"},{"../utils/common":27,"./adler32":29,"./crc32":31,"./messages":37,"./trees":38}],33:[function(_dereq_,module,exports){function GZheader(){this.text=0;this.time=0;this.xflags=0;this.os=0; +this.extra=null;this.extra_len=0;this.name="";this.comment="";this.hcrc=0;this.done=false}module.exports=GZheader},{}],34:[function(_dereq_,module,exports){var BAD=30;var TYPE=12;module.exports=function inflate_fast(strm,start){var state;var _in;var last;var _out;var beg;var end;var dmax;var wsize;var whave;var wnext;var window;var hold;var bits;var lcode;var dcode;var lmask;var dmask;var here;var op;var len;var dist;var from;var from_source;var input,output;state=strm.state;_in=strm.next_in;input= +strm.input;last=_in+(strm.avail_in-5);_out=strm.next_out;output=strm.output;beg=_out-(start-strm.avail_out);end=_out+(strm.avail_out-257);dmax=state.dmax;wsize=state.wsize;whave=state.whave;wnext=state.wnext;window=state.window;hold=state.hold;bits=state.bits;lcode=state.lencode;dcode=state.distcode;lmask=(1<<state.lenbits)-1;dmask=(1<<state.distbits)-1;top:do{if(bits<15){hold+=input[_in++]<<bits;bits+=8;hold+=input[_in++]<<bits;bits+=8}here=lcode[hold&lmask];dolen:for(;;){op=here>>>24;hold>>>=op; +bits-=op;op=here>>>16&255;if(op===0)output[_out++]=here&65535;else if(op&16){len=here&65535;op&=15;if(op){if(bits<op){hold+=input[_in++]<<bits;bits+=8}len+=hold&(1<<op)-1;hold>>>=op;bits-=op}if(bits<15){hold+=input[_in++]<<bits;bits+=8;hold+=input[_in++]<<bits;bits+=8}here=dcode[hold&dmask];dodist:for(;;){op=here>>>24;hold>>>=op;bits-=op;op=here>>>16&255;if(op&16){dist=here&65535;op&=15;if(bits<op){hold+=input[_in++]<<bits;bits+=8;if(bits<op){hold+=input[_in++]<<bits;bits+=8}}dist+=hold&(1<<op)-1; +if(dist>dmax){strm.msg="invalid distance too far back";state.mode=BAD;break top}hold>>>=op;bits-=op;op=_out-beg;if(dist>op){op=dist-op;if(op>whave)if(state.sane){strm.msg="invalid distance too far back";state.mode=BAD;break top}from=0;from_source=window;if(wnext===0){from+=wsize-op;if(op<len){len-=op;do output[_out++]=window[from++];while(--op);from=_out-dist;from_source=output}}else if(wnext<op){from+=wsize+wnext-op;op-=wnext;if(op<len){len-=op;do output[_out++]=window[from++];while(--op);from=0; +if(wnext<len){op=wnext;len-=op;do output[_out++]=window[from++];while(--op);from=_out-dist;from_source=output}}}else{from+=wnext-op;if(op<len){len-=op;do output[_out++]=window[from++];while(--op);from=_out-dist;from_source=output}}while(len>2){output[_out++]=from_source[from++];output[_out++]=from_source[from++];output[_out++]=from_source[from++];len-=3}if(len){output[_out++]=from_source[from++];if(len>1)output[_out++]=from_source[from++]}}else{from=_out-dist;do{output[_out++]=output[from++];output[_out++]= +output[from++];output[_out++]=output[from++];len-=3}while(len>2);if(len){output[_out++]=output[from++];if(len>1)output[_out++]=output[from++]}}}else if((op&64)===0){here=dcode[(here&65535)+(hold&(1<<op)-1)];continue dodist}else{strm.msg="invalid distance code";state.mode=BAD;break top}break}}else if((op&64)===0){here=lcode[(here&65535)+(hold&(1<<op)-1)];continue dolen}else if(op&32){state.mode=TYPE;break top}else{strm.msg="invalid literal/length code";state.mode=BAD;break top}break}}while(_in<last&& +_out<end);len=bits>>3;_in-=len;bits-=len<<3;hold&=(1<<bits)-1;strm.next_in=_in;strm.next_out=_out;strm.avail_in=_in<last?5+(last-_in):5-(_in-last);strm.avail_out=_out<end?257+(end-_out):257-(_out-end);state.hold=hold;state.bits=bits;return}},{}],35:[function(_dereq_,module,exports){var utils=_dereq_("../utils/common");var adler32=_dereq_("./adler32");var crc32=_dereq_("./crc32");var inflate_fast=_dereq_("./inffast");var inflate_table=_dereq_("./inftrees");var CODES=0;var LENS=1;var DISTS=2;var Z_FINISH= +4;var Z_BLOCK=5;var Z_TREES=6;var Z_OK=0;var Z_STREAM_END=1;var Z_NEED_DICT=2;var Z_STREAM_ERROR=-2;var Z_DATA_ERROR=-3;var Z_MEM_ERROR=-4;var Z_BUF_ERROR=-5;var Z_DEFLATED=8;var HEAD=1;var FLAGS=2;var TIME=3;var OS=4;var EXLEN=5;var EXTRA=6;var NAME=7;var COMMENT=8;var HCRC=9;var DICTID=10;var DICT=11;var TYPE=12;var TYPEDO=13;var STORED=14;var COPY_=15;var COPY=16;var TABLE=17;var LENLENS=18;var CODELENS=19;var LEN_=20;var LEN=21;var LENEXT=22;var DIST=23;var DISTEXT=24;var MATCH=25;var LIT=26; +var CHECK=27;var LENGTH=28;var DONE=29;var BAD=30;var MEM=31;var SYNC=32;var ENOUGH_LENS=852;var ENOUGH_DISTS=592;var MAX_WBITS=15;var DEF_WBITS=MAX_WBITS;function ZSWAP32(q){return(q>>>24&255)+(q>>>8&65280)+((q&65280)<<8)+((q&255)<<24)}function InflateState(){this.mode=0;this.last=false;this.wrap=0;this.havedict=false;this.flags=0;this.dmax=0;this.check=0;this.total=0;this.head=null;this.wbits=0;this.wsize=0;this.whave=0;this.wnext=0;this.window=null;this.hold=0;this.bits=0;this.length=0;this.offset= +0;this.extra=0;this.lencode=null;this.distcode=null;this.lenbits=0;this.distbits=0;this.ncode=0;this.nlen=0;this.ndist=0;this.have=0;this.next=null;this.lens=new utils.Buf16(320);this.work=new utils.Buf16(288);this.lendyn=null;this.distdyn=null;this.sane=0;this.back=0;this.was=0}function inflateResetKeep(strm){var state;if(!strm||!strm.state)return Z_STREAM_ERROR;state=strm.state;strm.total_in=strm.total_out=state.total=0;strm.msg="";if(state.wrap)strm.adler=state.wrap&1;state.mode=HEAD;state.last= +0;state.havedict=0;state.dmax=32768;state.head=null;state.hold=0;state.bits=0;state.lencode=state.lendyn=new utils.Buf32(ENOUGH_LENS);state.distcode=state.distdyn=new utils.Buf32(ENOUGH_DISTS);state.sane=1;state.back=-1;return Z_OK}function inflateReset(strm){var state;if(!strm||!strm.state)return Z_STREAM_ERROR;state=strm.state;state.wsize=0;state.whave=0;state.wnext=0;return inflateResetKeep(strm)}function inflateReset2(strm,windowBits){var wrap;var state;if(!strm||!strm.state)return Z_STREAM_ERROR; +state=strm.state;if(windowBits<0){wrap=0;windowBits=-windowBits}else{wrap=(windowBits>>4)+1;if(windowBits<48)windowBits&=15}if(windowBits&&(windowBits<8||windowBits>15))return Z_STREAM_ERROR;if(state.window!==null&&state.wbits!==windowBits)state.window=null;state.wrap=wrap;state.wbits=windowBits;return inflateReset(strm)}function inflateInit2(strm,windowBits){var ret;var state;if(!strm)return Z_STREAM_ERROR;state=new InflateState;strm.state=state;state.window=null;ret=inflateReset2(strm,windowBits); +if(ret!==Z_OK)strm.state=null;return ret}function inflateInit(strm){return inflateInit2(strm,DEF_WBITS)}var virgin=true;var lenfix,distfix;function fixedtables(state){if(virgin){var sym;lenfix=new utils.Buf32(512);distfix=new utils.Buf32(32);sym=0;while(sym<144)state.lens[sym++]=8;while(sym<256)state.lens[sym++]=9;while(sym<280)state.lens[sym++]=7;while(sym<288)state.lens[sym++]=8;inflate_table(LENS,state.lens,0,288,lenfix,0,state.work,{bits:9});sym=0;while(sym<32)state.lens[sym++]=5;inflate_table(DISTS, +state.lens,0,32,distfix,0,state.work,{bits:5});virgin=false}state.lencode=lenfix;state.lenbits=9;state.distcode=distfix;state.distbits=5}function updatewindow(strm,src,end,copy){var dist;var state=strm.state;if(state.window===null){state.wsize=1<<state.wbits;state.wnext=0;state.whave=0;state.window=new utils.Buf8(state.wsize)}if(copy>=state.wsize){utils.arraySet(state.window,src,end-state.wsize,state.wsize,0);state.wnext=0;state.whave=state.wsize}else{dist=state.wsize-state.wnext;if(dist>copy)dist= +copy;utils.arraySet(state.window,src,end-copy,dist,state.wnext);copy-=dist;if(copy){utils.arraySet(state.window,src,end-copy,copy,0);state.wnext=copy;state.whave=state.wsize}else{state.wnext+=dist;if(state.wnext===state.wsize)state.wnext=0;if(state.whave<state.wsize)state.whave+=dist}}return 0}function inflate(strm,flush){var state;var input,output;var next;var put;var have,left;var hold;var bits;var _in,_out;var copy;var from;var from_source;var here=0;var here_bits,here_op,here_val;var last_bits, +last_op,last_val;var len;var ret;var hbuf=new utils.Buf8(4);var opts;var n;var order=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!strm||!strm.state||!strm.output||!strm.input&&strm.avail_in!==0)return Z_STREAM_ERROR;state=strm.state;if(state.mode===TYPE)state.mode=TYPEDO;put=strm.next_out;output=strm.output;left=strm.avail_out;next=strm.next_in;input=strm.input;have=strm.avail_in;hold=state.hold;bits=state.bits;_in=have;_out=left;ret=Z_OK;inf_leave:for(;;)switch(state.mode){case HEAD:if(state.wrap=== +0){state.mode=TYPEDO;break}while(bits<16){if(have===0)break inf_leave;have--;hold+=input[next++]<<bits;bits+=8}if(state.wrap&2&&hold===35615){state.check=0;hbuf[0]=hold&255;hbuf[1]=hold>>>8&255;state.check=crc32(state.check,hbuf,2,0);hold=0;bits=0;state.mode=FLAGS;break}state.flags=0;if(state.head)state.head.done=false;if(!(state.wrap&1)||(((hold&255)<<8)+(hold>>8))%31){strm.msg="incorrect header check";state.mode=BAD;break}if((hold&15)!==Z_DEFLATED){strm.msg="unknown compression method";state.mode= +BAD;break}hold>>>=4;bits-=4;len=(hold&15)+8;if(state.wbits===0)state.wbits=len;else if(len>state.wbits){strm.msg="invalid window size";state.mode=BAD;break}state.dmax=1<<len;strm.adler=state.check=1;state.mode=hold&512?DICTID:TYPE;hold=0;bits=0;break;case FLAGS:while(bits<16){if(have===0)break inf_leave;have--;hold+=input[next++]<<bits;bits+=8}state.flags=hold;if((state.flags&255)!==Z_DEFLATED){strm.msg="unknown compression method";state.mode=BAD;break}if(state.flags&57344){strm.msg="unknown header flags set"; +state.mode=BAD;break}if(state.head)state.head.text=hold>>8&1;if(state.flags&512){hbuf[0]=hold&255;hbuf[1]=hold>>>8&255;state.check=crc32(state.check,hbuf,2,0)}hold=0;bits=0;state.mode=TIME;case TIME:while(bits<32){if(have===0)break inf_leave;have--;hold+=input[next++]<<bits;bits+=8}if(state.head)state.head.time=hold;if(state.flags&512){hbuf[0]=hold&255;hbuf[1]=hold>>>8&255;hbuf[2]=hold>>>16&255;hbuf[3]=hold>>>24&255;state.check=crc32(state.check,hbuf,4,0)}hold=0;bits=0;state.mode=OS;case OS:while(bits< +16){if(have===0)break inf_leave;have--;hold+=input[next++]<<bits;bits+=8}if(state.head){state.head.xflags=hold&255;state.head.os=hold>>8}if(state.flags&512){hbuf[0]=hold&255;hbuf[1]=hold>>>8&255;state.check=crc32(state.check,hbuf,2,0)}hold=0;bits=0;state.mode=EXLEN;case EXLEN:if(state.flags&1024){while(bits<16){if(have===0)break inf_leave;have--;hold+=input[next++]<<bits;bits+=8}state.length=hold;if(state.head)state.head.extra_len=hold;if(state.flags&512){hbuf[0]=hold&255;hbuf[1]=hold>>>8&255;state.check= +crc32(state.check,hbuf,2,0)}hold=0;bits=0}else if(state.head)state.head.extra=null;state.mode=EXTRA;case EXTRA:if(state.flags&1024){copy=state.length;if(copy>have)copy=have;if(copy){if(state.head){len=state.head.extra_len-state.length;if(!state.head.extra)state.head.extra=new Array(state.head.extra_len);utils.arraySet(state.head.extra,input,next,copy,len)}if(state.flags&512)state.check=crc32(state.check,input,copy,next);have-=copy;next+=copy;state.length-=copy}if(state.length)break inf_leave}state.length= +0;state.mode=NAME;case NAME:if(state.flags&2048){if(have===0)break inf_leave;copy=0;do{len=input[next+copy++];if(state.head&&len&&state.length<65536)state.head.name+=String.fromCharCode(len)}while(len&©<have);if(state.flags&512)state.check=crc32(state.check,input,copy,next);have-=copy;next+=copy;if(len)break inf_leave}else if(state.head)state.head.name=null;state.length=0;state.mode=COMMENT;case COMMENT:if(state.flags&4096){if(have===0)break inf_leave;copy=0;do{len=input[next+copy++];if(state.head&& +len&&state.length<65536)state.head.comment+=String.fromCharCode(len)}while(len&©<have);if(state.flags&512)state.check=crc32(state.check,input,copy,next);have-=copy;next+=copy;if(len)break inf_leave}else if(state.head)state.head.comment=null;state.mode=HCRC;case HCRC:if(state.flags&512){while(bits<16){if(have===0)break inf_leave;have--;hold+=input[next++]<<bits;bits+=8}if(hold!==(state.check&65535)){strm.msg="header crc mismatch";state.mode=BAD;break}hold=0;bits=0}if(state.head){state.head.hcrc= +state.flags>>9&1;state.head.done=true}strm.adler=state.check=0;state.mode=TYPE;break;case DICTID:while(bits<32){if(have===0)break inf_leave;have--;hold+=input[next++]<<bits;bits+=8}strm.adler=state.check=ZSWAP32(hold);hold=0;bits=0;state.mode=DICT;case DICT:if(state.havedict===0){strm.next_out=put;strm.avail_out=left;strm.next_in=next;strm.avail_in=have;state.hold=hold;state.bits=bits;return Z_NEED_DICT}strm.adler=state.check=1;state.mode=TYPE;case TYPE:if(flush===Z_BLOCK||flush===Z_TREES)break inf_leave; +case TYPEDO:if(state.last){hold>>>=bits&7;bits-=bits&7;state.mode=CHECK;break}while(bits<3){if(have===0)break inf_leave;have--;hold+=input[next++]<<bits;bits+=8}state.last=hold&1;hold>>>=1;bits-=1;switch(hold&3){case 0:state.mode=STORED;break;case 1:fixedtables(state);state.mode=LEN_;if(flush===Z_TREES){hold>>>=2;bits-=2;break inf_leave}break;case 2:state.mode=TABLE;break;case 3:strm.msg="invalid block type";state.mode=BAD}hold>>>=2;bits-=2;break;case STORED:hold>>>=bits&7;bits-=bits&7;while(bits< +32){if(have===0)break inf_leave;have--;hold+=input[next++]<<bits;bits+=8}if((hold&65535)!==(hold>>>16^65535)){strm.msg="invalid stored block lengths";state.mode=BAD;break}state.length=hold&65535;hold=0;bits=0;state.mode=COPY_;if(flush===Z_TREES)break inf_leave;case COPY_:state.mode=COPY;case COPY:copy=state.length;if(copy){if(copy>have)copy=have;if(copy>left)copy=left;if(copy===0)break inf_leave;utils.arraySet(output,input,next,copy,put);have-=copy;next+=copy;left-=copy;put+=copy;state.length-=copy; +break}state.mode=TYPE;break;case TABLE:while(bits<14){if(have===0)break inf_leave;have--;hold+=input[next++]<<bits;bits+=8}state.nlen=(hold&31)+257;hold>>>=5;bits-=5;state.ndist=(hold&31)+1;hold>>>=5;bits-=5;state.ncode=(hold&15)+4;hold>>>=4;bits-=4;if(state.nlen>286||state.ndist>30){strm.msg="too many length or distance symbols";state.mode=BAD;break}state.have=0;state.mode=LENLENS;case LENLENS:while(state.have<state.ncode){while(bits<3){if(have===0)break inf_leave;have--;hold+=input[next++]<<bits; +bits+=8}state.lens[order[state.have++]]=hold&7;hold>>>=3;bits-=3}while(state.have<19)state.lens[order[state.have++]]=0;state.lencode=state.lendyn;state.lenbits=7;opts={bits:state.lenbits};ret=inflate_table(CODES,state.lens,0,19,state.lencode,0,state.work,opts);state.lenbits=opts.bits;if(ret){strm.msg="invalid code lengths set";state.mode=BAD;break}state.have=0;state.mode=CODELENS;case CODELENS:while(state.have<state.nlen+state.ndist){for(;;){here=state.lencode[hold&(1<<state.lenbits)-1];here_bits= +here>>>24;here_op=here>>>16&255;here_val=here&65535;if(here_bits<=bits)break;if(have===0)break inf_leave;have--;hold+=input[next++]<<bits;bits+=8}if(here_val<16){hold>>>=here_bits;bits-=here_bits;state.lens[state.have++]=here_val}else{if(here_val===16){n=here_bits+2;while(bits<n){if(have===0)break inf_leave;have--;hold+=input[next++]<<bits;bits+=8}hold>>>=here_bits;bits-=here_bits;if(state.have===0){strm.msg="invalid bit length repeat";state.mode=BAD;break}len=state.lens[state.have-1];copy=3+(hold& +3);hold>>>=2;bits-=2}else if(here_val===17){n=here_bits+3;while(bits<n){if(have===0)break inf_leave;have--;hold+=input[next++]<<bits;bits+=8}hold>>>=here_bits;bits-=here_bits;len=0;copy=3+(hold&7);hold>>>=3;bits-=3}else{n=here_bits+7;while(bits<n){if(have===0)break inf_leave;have--;hold+=input[next++]<<bits;bits+=8}hold>>>=here_bits;bits-=here_bits;len=0;copy=11+(hold&127);hold>>>=7;bits-=7}if(state.have+copy>state.nlen+state.ndist){strm.msg="invalid bit length repeat";state.mode=BAD;break}while(copy--)state.lens[state.have++]= +len}}if(state.mode===BAD)break;if(state.lens[256]===0){strm.msg="invalid code -- missing end-of-block";state.mode=BAD;break}state.lenbits=9;opts={bits:state.lenbits};ret=inflate_table(LENS,state.lens,0,state.nlen,state.lencode,0,state.work,opts);state.lenbits=opts.bits;if(ret){strm.msg="invalid literal/lengths set";state.mode=BAD;break}state.distbits=6;state.distcode=state.distdyn;opts={bits:state.distbits};ret=inflate_table(DISTS,state.lens,state.nlen,state.ndist,state.distcode,0,state.work,opts); +state.distbits=opts.bits;if(ret){strm.msg="invalid distances set";state.mode=BAD;break}state.mode=LEN_;if(flush===Z_TREES)break inf_leave;case LEN_:state.mode=LEN;case LEN:if(have>=6&&left>=258){strm.next_out=put;strm.avail_out=left;strm.next_in=next;strm.avail_in=have;state.hold=hold;state.bits=bits;inflate_fast(strm,_out);put=strm.next_out;output=strm.output;left=strm.avail_out;next=strm.next_in;input=strm.input;have=strm.avail_in;hold=state.hold;bits=state.bits;if(state.mode===TYPE)state.back= +-1;break}state.back=0;for(;;){here=state.lencode[hold&(1<<state.lenbits)-1];here_bits=here>>>24;here_op=here>>>16&255;here_val=here&65535;if(here_bits<=bits)break;if(have===0)break inf_leave;have--;hold+=input[next++]<<bits;bits+=8}if(here_op&&(here_op&240)===0){last_bits=here_bits;last_op=here_op;last_val=here_val;for(;;){here=state.lencode[last_val+((hold&(1<<last_bits+last_op)-1)>>last_bits)];here_bits=here>>>24;here_op=here>>>16&255;here_val=here&65535;if(last_bits+here_bits<=bits)break;if(have=== +0)break inf_leave;have--;hold+=input[next++]<<bits;bits+=8}hold>>>=last_bits;bits-=last_bits;state.back+=last_bits}hold>>>=here_bits;bits-=here_bits;state.back+=here_bits;state.length=here_val;if(here_op===0){state.mode=LIT;break}if(here_op&32){state.back=-1;state.mode=TYPE;break}if(here_op&64){strm.msg="invalid literal/length code";state.mode=BAD;break}state.extra=here_op&15;state.mode=LENEXT;case LENEXT:if(state.extra){n=state.extra;while(bits<n){if(have===0)break inf_leave;have--;hold+=input[next++]<< +bits;bits+=8}state.length+=hold&(1<<state.extra)-1;hold>>>=state.extra;bits-=state.extra;state.back+=state.extra}state.was=state.length;state.mode=DIST;case DIST:for(;;){here=state.distcode[hold&(1<<state.distbits)-1];here_bits=here>>>24;here_op=here>>>16&255;here_val=here&65535;if(here_bits<=bits)break;if(have===0)break inf_leave;have--;hold+=input[next++]<<bits;bits+=8}if((here_op&240)===0){last_bits=here_bits;last_op=here_op;last_val=here_val;for(;;){here=state.distcode[last_val+((hold&(1<<last_bits+ +last_op)-1)>>last_bits)];here_bits=here>>>24;here_op=here>>>16&255;here_val=here&65535;if(last_bits+here_bits<=bits)break;if(have===0)break inf_leave;have--;hold+=input[next++]<<bits;bits+=8}hold>>>=last_bits;bits-=last_bits;state.back+=last_bits}hold>>>=here_bits;bits-=here_bits;state.back+=here_bits;if(here_op&64){strm.msg="invalid distance code";state.mode=BAD;break}state.offset=here_val;state.extra=here_op&15;state.mode=DISTEXT;case DISTEXT:if(state.extra){n=state.extra;while(bits<n){if(have=== +0)break inf_leave;have--;hold+=input[next++]<<bits;bits+=8}state.offset+=hold&(1<<state.extra)-1;hold>>>=state.extra;bits-=state.extra;state.back+=state.extra}if(state.offset>state.dmax){strm.msg="invalid distance too far back";state.mode=BAD;break}state.mode=MATCH;case MATCH:if(left===0)break inf_leave;copy=_out-left;if(state.offset>copy){copy=state.offset-copy;if(copy>state.whave)if(state.sane){strm.msg="invalid distance too far back";state.mode=BAD;break}if(copy>state.wnext){copy-=state.wnext; +from=state.wsize-copy}else from=state.wnext-copy;if(copy>state.length)copy=state.length;from_source=state.window}else{from_source=output;from=put-state.offset;copy=state.length}if(copy>left)copy=left;left-=copy;state.length-=copy;do output[put++]=from_source[from++];while(--copy);if(state.length===0)state.mode=LEN;break;case LIT:if(left===0)break inf_leave;output[put++]=state.length;left--;state.mode=LEN;break;case CHECK:if(state.wrap){while(bits<32){if(have===0)break inf_leave;have--;hold|=input[next++]<< +bits;bits+=8}_out-=left;strm.total_out+=_out;state.total+=_out;if(_out)strm.adler=state.check=state.flags?crc32(state.check,output,_out,put-_out):adler32(state.check,output,_out,put-_out);_out=left;if((state.flags?hold:ZSWAP32(hold))!==state.check){strm.msg="incorrect data check";state.mode=BAD;break}hold=0;bits=0}state.mode=LENGTH;case LENGTH:if(state.wrap&&state.flags){while(bits<32){if(have===0)break inf_leave;have--;hold+=input[next++]<<bits;bits+=8}if(hold!==(state.total&4294967295)){strm.msg= +"incorrect length check";state.mode=BAD;break}hold=0;bits=0}state.mode=DONE;case DONE:ret=Z_STREAM_END;break inf_leave;case BAD:ret=Z_DATA_ERROR;break inf_leave;case MEM:return Z_MEM_ERROR;case SYNC:default:return Z_STREAM_ERROR}strm.next_out=put;strm.avail_out=left;strm.next_in=next;strm.avail_in=have;state.hold=hold;state.bits=bits;if(state.wsize||_out!==strm.avail_out&&state.mode<BAD&&(state.mode<CHECK||flush!==Z_FINISH))if(updatewindow(strm,strm.output,strm.next_out,_out-strm.avail_out)){state.mode= +MEM;return Z_MEM_ERROR}_in-=strm.avail_in;_out-=strm.avail_out;strm.total_in+=_in;strm.total_out+=_out;state.total+=_out;if(state.wrap&&_out)strm.adler=state.check=state.flags?crc32(state.check,output,_out,strm.next_out-_out):adler32(state.check,output,_out,strm.next_out-_out);strm.data_type=state.bits+(state.last?64:0)+(state.mode===TYPE?128:0)+(state.mode===LEN_||state.mode===COPY_?256:0);if((_in===0&&_out===0||flush===Z_FINISH)&&ret===Z_OK)ret=Z_BUF_ERROR;return ret}function inflateEnd(strm){if(!strm|| +!strm.state)return Z_STREAM_ERROR;var state=strm.state;if(state.window)state.window=null;strm.state=null;return Z_OK}function inflateGetHeader(strm,head){var state;if(!strm||!strm.state)return Z_STREAM_ERROR;state=strm.state;if((state.wrap&2)===0)return Z_STREAM_ERROR;state.head=head;head.done=false;return Z_OK}exports.inflateReset=inflateReset;exports.inflateReset2=inflateReset2;exports.inflateResetKeep=inflateResetKeep;exports.inflateInit=inflateInit;exports.inflateInit2=inflateInit2;exports.inflate= +inflate;exports.inflateEnd=inflateEnd;exports.inflateGetHeader=inflateGetHeader;exports.inflateInfo="pako inflate (from Nodeca project)"},{"../utils/common":27,"./adler32":29,"./crc32":31,"./inffast":34,"./inftrees":36}],36:[function(_dereq_,module,exports){var utils=_dereq_("../utils/common");var MAXBITS=15;var ENOUGH_LENS=852;var ENOUGH_DISTS=592;var CODES=0;var LENS=1;var DISTS=2;var lbase=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0];var lext=[16, +16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78];var dbase=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0];var dext=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];module.exports=function inflate_table(type,lens,lens_index,codes,table,table_index,work,opts){var bits=opts.bits;var len=0;var sym=0;var min=0,max=0;var root=0;var curr=0;var drop= +0;var left=0;var used=0;var huff=0;var incr;var fill;var low;var mask;var next;var base=null;var base_index=0;var end;var count=new utils.Buf16(MAXBITS+1);var offs=new utils.Buf16(MAXBITS+1);var extra=null;var extra_index=0;var here_bits,here_op,here_val;for(len=0;len<=MAXBITS;len++)count[len]=0;for(sym=0;sym<codes;sym++)count[lens[lens_index+sym]]++;root=bits;for(max=MAXBITS;max>=1;max--)if(count[max]!==0)break;if(root>max)root=max;if(max===0){table[table_index++]=1<<24|64<<16|0;table[table_index++]= +1<<24|64<<16|0;opts.bits=1;return 0}for(min=1;min<max;min++)if(count[min]!==0)break;if(root<min)root=min;left=1;for(len=1;len<=MAXBITS;len++){left<<=1;left-=count[len];if(left<0)return-1}if(left>0&&(type===CODES||max!==1))return-1;offs[1]=0;for(len=1;len<MAXBITS;len++)offs[len+1]=offs[len]+count[len];for(sym=0;sym<codes;sym++)if(lens[lens_index+sym]!==0)work[offs[lens[lens_index+sym]]++]=sym;if(type===CODES){base=extra=work;end=19}else if(type===LENS){base=lbase;base_index-=257;extra=lext;extra_index-= +257;end=256}else{base=dbase;extra=dext;end=-1}huff=0;sym=0;len=min;next=table_index;curr=root;drop=0;low=-1;used=1<<root;mask=used-1;if(type===LENS&&used>ENOUGH_LENS||type===DISTS&&used>ENOUGH_DISTS)return 1;var i=0;for(;;){i++;here_bits=len-drop;if(work[sym]<end){here_op=0;here_val=work[sym]}else if(work[sym]>end){here_op=extra[extra_index+work[sym]];here_val=base[base_index+work[sym]]}else{here_op=32+64;here_val=0}incr=1<<len-drop;fill=1<<curr;min=fill;do{fill-=incr;table[next+(huff>>drop)+fill]= +here_bits<<24|here_op<<16|here_val|0}while(fill!==0);incr=1<<len-1;while(huff&incr)incr>>=1;if(incr!==0){huff&=incr-1;huff+=incr}else huff=0;sym++;if(--count[len]===0){if(len===max)break;len=lens[lens_index+work[sym]]}if(len>root&&(huff&mask)!==low){if(drop===0)drop=root;next+=min;curr=len-drop;left=1<<curr;while(curr+drop<max){left-=count[curr+drop];if(left<=0)break;curr++;left<<=1}used+=1<<curr;if(type===LENS&&used>ENOUGH_LENS||type===DISTS&&used>ENOUGH_DISTS)return 1;low=huff&mask;table[low]=root<< +24|curr<<16|next-table_index|0}}if(huff!==0)table[next+huff]=len-drop<<24|64<<16|0;opts.bits=root;return 0}},{"../utils/common":27}],37:[function(_dereq_,module,exports){module.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],38:[function(_dereq_,module,exports){var utils=_dereq_("../utils/common");var Z_FIXED=4;var Z_BINARY=0;var Z_TEXT=1;var Z_UNKNOWN=2;function zero(buf){var len= +buf.length;while(--len>=0)buf[len]=0}var STORED_BLOCK=0;var STATIC_TREES=1;var DYN_TREES=2;var MIN_MATCH=3;var MAX_MATCH=258;var LENGTH_CODES=29;var LITERALS=256;var L_CODES=LITERALS+1+LENGTH_CODES;var D_CODES=30;var BL_CODES=19;var HEAP_SIZE=2*L_CODES+1;var MAX_BITS=15;var Buf_size=16;var MAX_BL_BITS=7;var END_BLOCK=256;var REP_3_6=16;var REPZ_3_10=17;var REPZ_11_138=18;var extra_lbits=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0];var extra_dbits=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7, +7,8,8,9,9,10,10,11,11,12,12,13,13];var extra_blbits=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];var bl_order=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];var DIST_CODE_LEN=512;var static_ltree=new Array((L_CODES+2)*2);zero(static_ltree);var static_dtree=new Array(D_CODES*2);zero(static_dtree);var _dist_code=new Array(DIST_CODE_LEN);zero(_dist_code);var _length_code=new Array(MAX_MATCH-MIN_MATCH+1);zero(_length_code);var base_length=new Array(LENGTH_CODES);zero(base_length);var base_dist=new Array(D_CODES); +zero(base_dist);var StaticTreeDesc=function(static_tree,extra_bits,extra_base,elems,max_length){this.static_tree=static_tree;this.extra_bits=extra_bits;this.extra_base=extra_base;this.elems=elems;this.max_length=max_length;this.has_stree=static_tree&&static_tree.length};var static_l_desc;var static_d_desc;var static_bl_desc;var TreeDesc=function(dyn_tree,stat_desc){this.dyn_tree=dyn_tree;this.max_code=0;this.stat_desc=stat_desc};function d_code(dist){return dist<256?_dist_code[dist]:_dist_code[256+ +(dist>>>7)]}function put_short(s,w){s.pending_buf[s.pending++]=w&255;s.pending_buf[s.pending++]=w>>>8&255}function send_bits(s,value,length){if(s.bi_valid>Buf_size-length){s.bi_buf|=value<<s.bi_valid&65535;put_short(s,s.bi_buf);s.bi_buf=value>>Buf_size-s.bi_valid;s.bi_valid+=length-Buf_size}else{s.bi_buf|=value<<s.bi_valid&65535;s.bi_valid+=length}}function send_code(s,c,tree){send_bits(s,tree[c*2],tree[c*2+1])}function bi_reverse(code,len){var res=0;do{res|=code&1;code>>>=1;res<<=1}while(--len>0); +return res>>>1}function bi_flush(s){if(s.bi_valid===16){put_short(s,s.bi_buf);s.bi_buf=0;s.bi_valid=0}else if(s.bi_valid>=8){s.pending_buf[s.pending++]=s.bi_buf&255;s.bi_buf>>=8;s.bi_valid-=8}}function gen_bitlen(s,desc){var tree=desc.dyn_tree;var max_code=desc.max_code;var stree=desc.stat_desc.static_tree;var has_stree=desc.stat_desc.has_stree;var extra=desc.stat_desc.extra_bits;var base=desc.stat_desc.extra_base;var max_length=desc.stat_desc.max_length;var h;var n,m;var bits;var xbits;var f;var overflow= +0;for(bits=0;bits<=MAX_BITS;bits++)s.bl_count[bits]=0;tree[s.heap[s.heap_max]*2+1]=0;for(h=s.heap_max+1;h<HEAP_SIZE;h++){n=s.heap[h];bits=tree[tree[n*2+1]*2+1]+1;if(bits>max_length){bits=max_length;overflow++}tree[n*2+1]=bits;if(n>max_code)continue;s.bl_count[bits]++;xbits=0;if(n>=base)xbits=extra[n-base];f=tree[n*2];s.opt_len+=f*(bits+xbits);if(has_stree)s.static_len+=f*(stree[n*2+1]+xbits)}if(overflow===0)return;do{bits=max_length-1;while(s.bl_count[bits]===0)bits--;s.bl_count[bits]--;s.bl_count[bits+ +1]+=2;s.bl_count[max_length]--;overflow-=2}while(overflow>0);for(bits=max_length;bits!==0;bits--){n=s.bl_count[bits];while(n!==0){m=s.heap[--h];if(m>max_code)continue;if(tree[m*2+1]!==bits){s.opt_len+=(bits-tree[m*2+1])*tree[m*2];tree[m*2+1]=bits}n--}}}function gen_codes(tree,max_code,bl_count){var next_code=new Array(MAX_BITS+1);var code=0;var bits;var n;for(bits=1;bits<=MAX_BITS;bits++)next_code[bits]=code=code+bl_count[bits-1]<<1;for(n=0;n<=max_code;n++){var len=tree[n*2+1];if(len===0)continue; +tree[n*2]=bi_reverse(next_code[len]++,len)}}function tr_static_init(){var n;var bits;var length;var code;var dist;var bl_count=new Array(MAX_BITS+1);length=0;for(code=0;code<LENGTH_CODES-1;code++){base_length[code]=length;for(n=0;n<1<<extra_lbits[code];n++)_length_code[length++]=code}_length_code[length-1]=code;dist=0;for(code=0;code<16;code++){base_dist[code]=dist;for(n=0;n<1<<extra_dbits[code];n++)_dist_code[dist++]=code}dist>>=7;for(;code<D_CODES;code++){base_dist[code]=dist<<7;for(n=0;n<1<<extra_dbits[code]- +7;n++)_dist_code[256+dist++]=code}for(bits=0;bits<=MAX_BITS;bits++)bl_count[bits]=0;n=0;while(n<=143){static_ltree[n*2+1]=8;n++;bl_count[8]++}while(n<=255){static_ltree[n*2+1]=9;n++;bl_count[9]++}while(n<=279){static_ltree[n*2+1]=7;n++;bl_count[7]++}while(n<=287){static_ltree[n*2+1]=8;n++;bl_count[8]++}gen_codes(static_ltree,L_CODES+1,bl_count);for(n=0;n<D_CODES;n++){static_dtree[n*2+1]=5;static_dtree[n*2]=bi_reverse(n,5)}static_l_desc=new StaticTreeDesc(static_ltree,extra_lbits,LITERALS+1,L_CODES, +MAX_BITS);static_d_desc=new StaticTreeDesc(static_dtree,extra_dbits,0,D_CODES,MAX_BITS);static_bl_desc=new StaticTreeDesc(new Array(0),extra_blbits,0,BL_CODES,MAX_BL_BITS)}function init_block(s){var n;for(n=0;n<L_CODES;n++)s.dyn_ltree[n*2]=0;for(n=0;n<D_CODES;n++)s.dyn_dtree[n*2]=0;for(n=0;n<BL_CODES;n++)s.bl_tree[n*2]=0;s.dyn_ltree[END_BLOCK*2]=1;s.opt_len=s.static_len=0;s.last_lit=s.matches=0}function bi_windup(s){if(s.bi_valid>8)put_short(s,s.bi_buf);else if(s.bi_valid>0)s.pending_buf[s.pending++]= +s.bi_buf;s.bi_buf=0;s.bi_valid=0}function copy_block(s,buf,len,header){bi_windup(s);if(header){put_short(s,len);put_short(s,~len)}utils.arraySet(s.pending_buf,s.window,buf,len,s.pending);s.pending+=len}function smaller(tree,n,m,depth){var _n2=n*2;var _m2=m*2;return tree[_n2]<tree[_m2]||tree[_n2]===tree[_m2]&&depth[n]<=depth[m]}function pqdownheap(s,tree,k){var v=s.heap[k];var j=k<<1;while(j<=s.heap_len){if(j<s.heap_len&&smaller(tree,s.heap[j+1],s.heap[j],s.depth))j++;if(smaller(tree,v,s.heap[j],s.depth))break; +s.heap[k]=s.heap[j];k=j;j<<=1}s.heap[k]=v}function compress_block(s,ltree,dtree){var dist;var lc;var lx=0;var code;var extra;if(s.last_lit!==0){do{dist=s.pending_buf[s.d_buf+lx*2]<<8|s.pending_buf[s.d_buf+lx*2+1];lc=s.pending_buf[s.l_buf+lx];lx++;if(dist===0)send_code(s,lc,ltree);else{code=_length_code[lc];send_code(s,code+LITERALS+1,ltree);extra=extra_lbits[code];if(extra!==0){lc-=base_length[code];send_bits(s,lc,extra)}dist--;code=d_code(dist);send_code(s,code,dtree);extra=extra_dbits[code];if(extra!== +0){dist-=base_dist[code];send_bits(s,dist,extra)}}}while(lx<s.last_lit)}send_code(s,END_BLOCK,ltree)}function build_tree(s,desc){var tree=desc.dyn_tree;var stree=desc.stat_desc.static_tree;var has_stree=desc.stat_desc.has_stree;var elems=desc.stat_desc.elems;var n,m;var max_code=-1;var node;s.heap_len=0;s.heap_max=HEAP_SIZE;for(n=0;n<elems;n++)if(tree[n*2]!==0){s.heap[++s.heap_len]=max_code=n;s.depth[n]=0}else tree[n*2+1]=0;while(s.heap_len<2){node=s.heap[++s.heap_len]=max_code<2?++max_code:0;tree[node* +2]=1;s.depth[node]=0;s.opt_len--;if(has_stree)s.static_len-=stree[node*2+1]}desc.max_code=max_code;for(n=s.heap_len>>1;n>=1;n--)pqdownheap(s,tree,n);node=elems;do{n=s.heap[1];s.heap[1]=s.heap[s.heap_len--];pqdownheap(s,tree,1);m=s.heap[1];s.heap[--s.heap_max]=n;s.heap[--s.heap_max]=m;tree[node*2]=tree[n*2]+tree[m*2];s.depth[node]=(s.depth[n]>=s.depth[m]?s.depth[n]:s.depth[m])+1;tree[n*2+1]=tree[m*2+1]=node;s.heap[1]=node++;pqdownheap(s,tree,1)}while(s.heap_len>=2);s.heap[--s.heap_max]=s.heap[1];gen_bitlen(s, +desc);gen_codes(tree,max_code,s.bl_count)}function scan_tree(s,tree,max_code){var n;var prevlen=-1;var curlen;var nextlen=tree[0*2+1];var count=0;var max_count=7;var min_count=4;if(nextlen===0){max_count=138;min_count=3}tree[(max_code+1)*2+1]=65535;for(n=0;n<=max_code;n++){curlen=nextlen;nextlen=tree[(n+1)*2+1];if(++count<max_count&&curlen===nextlen)continue;else if(count<min_count)s.bl_tree[curlen*2]+=count;else if(curlen!==0){if(curlen!==prevlen)s.bl_tree[curlen*2]++;s.bl_tree[REP_3_6*2]++}else if(count<= +10)s.bl_tree[REPZ_3_10*2]++;else s.bl_tree[REPZ_11_138*2]++;count=0;prevlen=curlen;if(nextlen===0){max_count=138;min_count=3}else if(curlen===nextlen){max_count=6;min_count=3}else{max_count=7;min_count=4}}}function send_tree(s,tree,max_code){var n;var prevlen=-1;var curlen;var nextlen=tree[0*2+1];var count=0;var max_count=7;var min_count=4;if(nextlen===0){max_count=138;min_count=3}for(n=0;n<=max_code;n++){curlen=nextlen;nextlen=tree[(n+1)*2+1];if(++count<max_count&&curlen===nextlen)continue;else if(count< +min_count){do send_code(s,curlen,s.bl_tree);while(--count!==0)}else if(curlen!==0){if(curlen!==prevlen){send_code(s,curlen,s.bl_tree);count--}send_code(s,REP_3_6,s.bl_tree);send_bits(s,count-3,2)}else if(count<=10){send_code(s,REPZ_3_10,s.bl_tree);send_bits(s,count-3,3)}else{send_code(s,REPZ_11_138,s.bl_tree);send_bits(s,count-11,7)}count=0;prevlen=curlen;if(nextlen===0){max_count=138;min_count=3}else if(curlen===nextlen){max_count=6;min_count=3}else{max_count=7;min_count=4}}}function build_bl_tree(s){var max_blindex; +scan_tree(s,s.dyn_ltree,s.l_desc.max_code);scan_tree(s,s.dyn_dtree,s.d_desc.max_code);build_tree(s,s.bl_desc);for(max_blindex=BL_CODES-1;max_blindex>=3;max_blindex--)if(s.bl_tree[bl_order[max_blindex]*2+1]!==0)break;s.opt_len+=3*(max_blindex+1)+5+5+4;return max_blindex}function send_all_trees(s,lcodes,dcodes,blcodes){var rank;send_bits(s,lcodes-257,5);send_bits(s,dcodes-1,5);send_bits(s,blcodes-4,4);for(rank=0;rank<blcodes;rank++)send_bits(s,s.bl_tree[bl_order[rank]*2+1],3);send_tree(s,s.dyn_ltree, +lcodes-1);send_tree(s,s.dyn_dtree,dcodes-1)}function detect_data_type(s){var black_mask=4093624447;var n;for(n=0;n<=31;n++,black_mask>>>=1)if(black_mask&1&&s.dyn_ltree[n*2]!==0)return Z_BINARY;if(s.dyn_ltree[9*2]!==0||s.dyn_ltree[10*2]!==0||s.dyn_ltree[13*2]!==0)return Z_TEXT;for(n=32;n<LITERALS;n++)if(s.dyn_ltree[n*2]!==0)return Z_TEXT;return Z_BINARY}var static_init_done=false;function _tr_init(s){if(!static_init_done){tr_static_init();static_init_done=true}s.l_desc=new TreeDesc(s.dyn_ltree,static_l_desc); +s.d_desc=new TreeDesc(s.dyn_dtree,static_d_desc);s.bl_desc=new TreeDesc(s.bl_tree,static_bl_desc);s.bi_buf=0;s.bi_valid=0;init_block(s)}function _tr_stored_block(s,buf,stored_len,last){send_bits(s,(STORED_BLOCK<<1)+(last?1:0),3);copy_block(s,buf,stored_len,true)}function _tr_align(s){send_bits(s,STATIC_TREES<<1,3);send_code(s,END_BLOCK,static_ltree);bi_flush(s)}function _tr_flush_block(s,buf,stored_len,last){var opt_lenb,static_lenb;var max_blindex=0;if(s.level>0){if(s.strm.data_type===Z_UNKNOWN)s.strm.data_type= +detect_data_type(s);build_tree(s,s.l_desc);build_tree(s,s.d_desc);max_blindex=build_bl_tree(s);opt_lenb=s.opt_len+3+7>>>3;static_lenb=s.static_len+3+7>>>3;if(static_lenb<=opt_lenb)opt_lenb=static_lenb}else opt_lenb=static_lenb=stored_len+5;if(stored_len+4<=opt_lenb&&buf!==-1)_tr_stored_block(s,buf,stored_len,last);else if(s.strategy===Z_FIXED||static_lenb===opt_lenb){send_bits(s,(STATIC_TREES<<1)+(last?1:0),3);compress_block(s,static_ltree,static_dtree)}else{send_bits(s,(DYN_TREES<<1)+(last?1:0), +3);send_all_trees(s,s.l_desc.max_code+1,s.d_desc.max_code+1,max_blindex+1);compress_block(s,s.dyn_ltree,s.dyn_dtree)}init_block(s);if(last)bi_windup(s)}function _tr_tally(s,dist,lc){s.pending_buf[s.d_buf+s.last_lit*2]=dist>>>8&255;s.pending_buf[s.d_buf+s.last_lit*2+1]=dist&255;s.pending_buf[s.l_buf+s.last_lit]=lc&255;s.last_lit++;if(dist===0)s.dyn_ltree[lc*2]++;else{s.matches++;dist--;s.dyn_ltree[(_length_code[lc]+LITERALS+1)*2]++;s.dyn_dtree[d_code(dist)*2]++}return s.last_lit===s.lit_bufsize-1} +exports._tr_init=_tr_init;exports._tr_stored_block=_tr_stored_block;exports._tr_flush_block=_tr_flush_block;exports._tr_tally=_tr_tally;exports._tr_align=_tr_align},{"../utils/common":27}],39:[function(_dereq_,module,exports){function ZStream(){this.input=null;this.next_in=0;this.avail_in=0;this.total_in=0;this.output=null;this.next_out=0;this.avail_out=0;this.total_out=0;this.msg="";this.state=null;this.data_type=2;this.adler=0}module.exports=ZStream},{}]},{},[9])(9)}); diff --git a/source/author.html.haml b/source/author.html.haml index 668420b..51d4c4b 100644 --- a/source/author.html.haml +++ b/source/author.html.haml @@ -2,40 +2,6 @@ pageable: true per_page: 6 --- --# --#%header.main-header.author-head{cover} --# %nav.main-nav.overlay.clearfix --# - if blog_settings.logo.present? --# %a.blog-logo{href: home_path} --# = image_tag blog_settings.logo, alt: blog_settings.name --# - if blog_settings.navigation --# %a.menu-button.icon-menu{href: '#'} --# %span.word Menu --# --#%section.author-profile.inner --# - if gravatar? --# %figure.author-image --# .img{style: "background-image: url(#{gravatar(114)})"} --# %span.hidden #{blog_author.name}'s Picture --# %h1.author-title= blog_author.name --# - if blog_author.bio.present? --# %h2.author-bio= blog_author.bio --# .author-meta --# - if blog_author.location.present? --# %span.author-location.icon-location= blog_author.location --# - if blog_author.website.present? --# %span.author-link.icon-link --# %a{href: blog_author.website}= blog_author.website --# %span.author-stats --# %i.icon-stats --# = pluralize(blog.articles.count, 'post') --# --#%main#content.content{role: :main} --# = partial('shared/page_articles', --# locals: { page_articles: page_articles, paginate: paginate }) - - - %header.subheader .container diff --git a/source/blog.html.haml b/source/blog.html.haml new file mode 100644 index 0000000..7f8a38f --- /dev/null +++ b/source/blog.html.haml @@ -0,0 +1,19 @@ +--- +pageable: true +per_page: 6 +--- + + +%header.subheader + .container + %h2.page-title + = blog_settings.name + %small= blog_settings.description +%main#content.container{role: :main} + .row + .col-md-9 + = partial('shared/page_articles', + locals: { page_articles: page_articles, paginate: paginate }) + .col-md-3 + = partial('shared/tags_nav', + locals: { blog: blog, selected_tag: 'all' }) diff --git a/source/fonts/KaTeX_AMS-Regular.eot b/source/fonts/KaTeX_AMS-Regular.eot new file mode 100644 index 0000000000000000000000000000000000000000..784276a3cbfb3d3b93c974594ffaf70514ab0eb7 GIT binary patch literal 71656 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 literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_AMS-Regular.ttf b/source/fonts/KaTeX_AMS-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..6f1e0be2028f8c9ccb9ca055f9091fd8495c2975 GIT binary patch literal 71428 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.^-DhzKr@CmEg&10<s-g;FhSJ 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 literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_AMS-Regular.woff b/source/fonts/KaTeX_AMS-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..4dded4733b3fd85fdb1c00352e30d8efa3f1a426 GIT binary patch literal 40200 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
Q<g24}#K%(p9Y`Xh%68i68O5NF=v*9|3 zTUG|=P>SB94-V2rC~bBKi+wSE8GK<?Ye@WTw+T8u?l@+{6L+_S+tTg*JJ;_qL=Q+V zv2ar4@ngYHIB~X<hXqRC<rek>W}!c2;2*)DU_=A{;x;{vYjBBz*`_8-t5JaAdP!Cc zS}=+Wh!;Tb>WT6S;YWzbD=Dm$_efQ9$w^=G9x-_@dIJ<Ud%tr>n&zNOb9S^`yG)uI zQpn%y+auLZ)RwZXeX!TRlpq;Q0S#W?1hCXDasgV%lY$bAigai;_K*19hj8+JoO2kC zWc(Ho(FiUz9`c@=Z?orfm$gzrxuS>#&_`>gi#vFlJA1bU<yzRO#6+70kY|M00DQ@D zCKU}R4p2rIdlMngiaJd9K*pM~fiHLrAGV}4w;Z=~H$z{LS}#FFe9t#Fgu$_yobKBh z9R)p~hY6D32v?hpHlHnWI3?<G(GE06ozgrk^5oD<go7YnH7nZo>ck*Tsjq~8MphH= z8=^EM_IJC`qMM~LZEKaFj=PxI_jqeq-_X;2fo=vG*>960bosGH(jFygkL046R{xM) z$z=x2#}pv~6~WzK$l#%TPT{qrVx^5+xQ(iIiK*u!IIm(gTIWt*r2DV){+35tmp#%o zGn`%17K1}IJ&5e5oRpJ8fL(~qCx(c<Udd=C6N2xFiJIAI;!zTC!SFp&DGs43De^~0 zS;U5&MR>Z*EO|v{4q)ZxxWytshKpX@ABIGKrx4{A2E;-z;saQVxVV;!VhTgOa?;uH z15k`PexXKBD<WNNriCFCLWCotQTD=jgHif3B5s|zjLj6=9m&1H2ur5}Rr)Y^+j2jx z0kan$O0pPqV?|92Ue-y!D{I($RDy}2u!-@)o&2FHaR=1|)qLECX-or8ByBM;oXTA! z(w+P3TMfbRQ2q&~23N5KdD#1ylPz;IH0|a6E)Pr3l;L^==I|c$y5Gjr?n~e(GIFYB zu;<6%n06kK))PouCaNCCcPqZMi<s)WdKlMp{#^TO@0-WI^L*s8cC*uG^(E$VwFV3G zY*v%T!i9_fK?=iP*aNM?J01r}<L**Ks;L2S{qAc_ra*DWg_Z%7CmY7)l*(W&Y(V4t z6X9;dlPR<L1?g=^eJr#KeUD~`yg@j^q3Y=bz8j)oby#|EqIwp#6o7u%>$?ka%a4~N z>LK!8z(DnPW+tP%b%WTw=S`b0Yu<rB{b~(#J&DCd?QwOZlyx0e8XnQ1;!=68>*sm@ z8;m3TxZYmO^t{a8x&sCaH)?`uReFw)3l|W+{86k8r!*ZXb2I%sABk_)AU`+OgyRzQ zwusy?gP)Nu>ly;C9QVCEt<l59hA8d2)#c$VfmuJZK!6)d9>n$7Kg+d8l~tJWmm{m) zkl6dU<#T3NToQ>$N(=!+K%`8vIM=jrF?9h=e-8m}Wo0eU@2m#-^4Lk(fP`Q{nq2(z zwOoJY$7c|1?=ZaVt&g8nT0Y*y*Xq3VjQ6|UQL;_x?ZVY`G+R_uN?cWURKsAN%>>iW z{(<J|FEB{v4B@XJ7hJ1-Z!E!72jQd_m_$@f`c{Ln2Olu0yR_fEbHg<B8Tj7kD}BW; zO*Kkg-In{8wLE^dKL;&zSt|+(u}hsU35w#!p@3fGn_GOXT>Eh|9UF*^CI)1C)$SZ= z+DSNhYqeRf+VCZu?0SSk-(`kmADETDZka<Qk2@8{t;4tTuV{nIPE56!&!*#uQV*{n zdV}ZR)$jplnjU_279yHKjJs4q#Bp2rJ`~sS>5@T4VWpLU;%INcq_QVBcoB6vSLX2@ zNKU)xZ2Z_Rtf)7dYMR5QzS7DakMkjgPbuc=ohUY2z4(Z17O#qaWwmpii1216)KIW- zZjJe2(eTZ&@tjN%Vti@0fhM?zfng_XgR$g<`tocNJE;kh%$$syzvN0d(<fbU#SJlf z`^>(W_O($n*@-BKm=V45-6v_>tOMwo8SfXn#-iW2R}b@9;L1jr96Z?aan~6<hgIOE zxvfof&dC^BQW;w4yW3Vf(~-Rwqqg=RFci`ZF1WEWCocAnFY7tP&h%ZJe-2hc;V!)+ z_pQmd)W)!U>lNcQfVJIOmp67Uim~xA_Bf9}F1-S?oMX>hqNjC+_Q)_)AT@<IDRp3s zIHjIt`o2jyvMIOA$sY>g1G#rG6bDiZjT*dGU_r+R%!gHzOKB^@waps*#Z8XGv7o`} z$Z(gM2gvngmQ^oQBk^+j{p2o^@xaOxQQQmvjZP>FBdH$$Du!&NI}~0PBs0P}q>4cW z1(R3TI|ErRZKp(n($r?bXU-csXsRD-gh*MyGS)sAnysmW6JO;XW!f7f^N{8j`;QJv zN7$lsgZXR(969i5E-sgoCT{Jl7&dOd)ALV?Vol#u`70Q2>!mc5nVQKL&H6vsKH@lt zzQIj1?D~8sX(onaB@Bb&_n`+Ii2GK?=Fs~xvf{=hi$FM~*-Ha{KONoM^a(Tdh(#oP zhAQoE^NWQ?`C56~%tFtl@BuTRLiIJZHo3c$26`y&QzHQ_5lY7zlxXdf**_(|?u89$ z_(ek(75iFPZ`YBArX7}IVDofRFs;Fz1`v{NfKxk2*Ql^M(ZhT-^pn_N)E{4EejF9# zXlylAqj)lW5Lk;!M2~Tzyn8;5`Y*F}(${~ly@+r)+`4A=TDiB(ng{0zHXiAV9;x;u zqu*zRi<Y-ZClfoH(2IvBUi3J6Dys(Bnj+Qh3G{^i20MJ<hU-a|AO2~j4n6%*@SR+6 z`1Y?^{P~RfQE;PXP0j5y7=#E-B;?C+o>OGN7TIV1ifHq_iO>-CEMS>2Il=_KP}}Eu zAxmwHkAjzAaT*-rR)4y*k6uM9F6wc?Ag8`KBUn%O@vgXEnRUk?swYDIUQqF;5q=Wf zoCh{=jH@4G^!sAE8qK&VHaNU35<qen5|9SI{r$551LFc&<tcb>_QT(Kgvk~92b~po zOWsJH4Q5%_h6w3rWk;f4BWk%5+wH3frS<H?O?oIn6^U$xb4iXm@UIA%43Tqbz2h5J zJBz(Uk;)~S9Fy`Nn*~G>A!_1vF2(Z(RO=yE));4LiVu{<B{--2)#=y`E)1LaOP%)q zXtb552TyO$2XWiY%wzOVI-ZU8JmD==F{Dgbir{|Fd<V`z8G@oP0e8JKG{1=7pc;-P za(;W{j5U=oSg`J>PnzO=1~wBiLpx(?8+MT#Lw4e4zY%9D_5^dRT@r;r^UtVCBDr)r zIQ@2kowt)f+Sx0F92I*(m1~#MFx1Q#B6QHL?}ojOUxF~ktAAz^E>R0B!;wXqiBtH+ znJn3e*R5#+u)+ctyZfta3KkYQNXhP7qm4j+QSS+VF_SGK!|{;PxQby`YEUZ6qC2rB zCEU<<Afep1LYWZ`_7vys2@Da0n96x~7=U28r|4{M=*WyAG2A^w+QU1iZ9%7wAI}kI zUW3)BP(lQaKb(X5gBR>SO8RqSwEvhf#h(Fja=RiX=`zEH6){zHI^)}ruz)B05q<bj zE7(!Cyilbkl2X;-E8Opb^-Z#3?%y}<Gkn`4LUgVl9M^4iaGcCtt&&nqh({R19*?<8 z&N@NZ;Y5=>%5g1ss1^_J>F7;%cb-2xl7o2kRYS!dN1D#woJm8Zz_{5E5U86Sj3j$< zFq8p`4-RRId#K@|1!>|uJnEuSdO9s3y%c|h9uz$N&cP0Q>b--Ief(k?Otnik$}Di~ z)cqJ=P`FQe69{GAsto?*!6Dp=Q3_Kj6H2z3)^Jfh5>Fe+Rb3n_e*@D7lL`R^H=om} z7f$K@E-5-!ibWGNGriU^2(IlAUA62FJVy+Z4GO=Rn=<$cJxjBSu@pPMFiAAlB=$#x zW^*0o>@}q{wlwTm?sX`5-QR_TJ2S|RV_VbiSQ|;MLXB+8-O*+^*>4PKUm>KHw~>1c zr`I8dk@2sT6)TK4inPbo5t>Ye4fzEBiHPgR%6^|b{Cy3dbKuVef&_J_*u3b*WPW~- zF<P53`-kP2@*K-H#@G{^kEoo>X5jVqW1;nqZ*CU*iKTN(f&cx?W7Pn3UAyo^#KWfB zt-xJq<XMXRyaE#H;<cyr7>|jNTs4f*xMi>k5dRBHG`RO2O@fU$V5`>{NiFC~R*Gg{ zHGX|8AIa%(--f*w9|yr&bv^kj&OoTaT=c@JbkTPIGwvStJGu`3gKJ^%^IW)=+ffs` zb06B@A;ciduA0x-F2uTNsOL(tJA4)5EenWx|EF3&KK@Vs(+VD6RxMm)q0fzAnaL)2 z7V}_^HjeajT1QE(jFPsuieJN)(J{$_brRO>1tpF4Z7Z&XdAw@HQ22H$16aP}0UJ0S zC3vG|ny6cG+usDsX5_zXBZLOS5z)zEq$01!{B*KK0>ZP9!Hl`|Q==>qUBZnBzf%RO zue|Yk=6+I-ys+QVN;u6$7ltGeTo3M2%ZAcXx1BLjR#1@G77{|@=Q|f!JqkUtkW*R3 zGBCl(43(hXdc!DC#gY(9M(%~Us1dyXVh8(mcP=yd6mPezY_wK4gNdzo^}22BmJBF- zkzEAT^d-^RSk#VDJ{>y$k{!Z*LJGgQvn8v7#pj?DPdhj1$W*i4sYNmh^2PjM1NvJ* zJ;%^*hIPV_X(^X<Z`_%TBT5H#?^^Mf8HzEkg1}Gr+neUWsL`vfrj!=6YXKA2_PY-< ztsFT<%ZRB{JC)|S4lRnh37L849^wcTXmADmqxa1Vviami&>s>>&**Y>^L`tCD8^Li z<`%_`iDf0Pq@s}q+6vJN0=c;_({1gsUVYah{}ygNsvu?pReQbwoMW?sL!pb-3TCjc zO=)mV9Uj%Op~n9)>)E<e=aN9*A#74Kf;?KXrg4$ghqygFAv`EvHz#~rz<_Cv!B6R@ zx#}>KZs-=T#e@ehrNk$yJl<4#T(XA&>T7ZXpNY(AShD`=(h$N6x_fg_ch<Zgl2?9s zI>rBm-;8@PJWl%J-b2MxM)w!Ujo5oarS||5&-~;J<zqykVPSqg??v%fv0&4C^~o-E zsHh_$Q*E|UHxv)@&HM9EGvukY2s6&^h;y?(SSEOW^@7f1z1^WKe#J3k$4cWi_|xrp z%HK=y+>GaPe1?<bE`<zv{og?MuWw4tz(NHFn>U=$Nffo`k-A&`C%f#u#~z5jO#V&~ zBznEM-0#fXo(*II6Z!sP_$c%V2Ig9R1!m=DxeRPyx}6%=e%S<`L{exB6h(A%zn3QX ztKyZ+wZxmv#!XYnL{#j?vkBUoP~O@x62<SmocjjG7CgpI?@^x$h{k4<eNfPQG|{g+ zGA_GOrV<*!PJ?JWDyv_8L%NLD8!YEMkhe$Sue2J8TH6N>s@4}1VeD(PIrs)BFZjDS zP_<K)Z=Rdm?V?<C+`=+t$N{c0(z}^C*jW?u@V|MGyK1@4E|ca~^^I^pw9hAr&ur>0 z3S1t7Tme2^*GqIl+_+?T;U{oC&?{L%<z98kKC3g;*sjYMX^o7WZF_IRq2It6WwH*t z@m{k}n&n%qYcW-Q$<aGsqc#{Htw&!sDHuH5=#$@&`I{|uA<;GK7Nr*AqpWUkqPO9J zUvJFRSBNzEr($!DhMOxJvD&ZhMP8~oD#USR622UmN3|v(1)pa#y*{L<cM+3Yn-6=n z)JNA`Yq7bM@N+|uosEk54bov3^_C`0l4f8Ixp5;GBBCi)1&$OrQgeYlCK}J4F{?F2 z#_X%x%^4NYzgYZWlvF#~D|yn;&O4gBtVoGp{(3)HyG{SmrM+vtfL%4YAJIf02DRJ4 zja&Zxj@%@yl&f2$FTm}G=Me5hzq;KmC<?{*L76DpFt?pEX*9J-__vNB%^i2&8OR&~ zx9NlD;7$e<_h}KO7euhvl2rJ`S<|b%@9zN7L{ew~e?%V2O91VP7w%CIg80a9P78Ni z2M6P-&^<1OiB$`Dv_8uuuV*3$VuS*iUUlELqeg#2g1{#r86~K^)kr1_LD^U^ZYq3y z9w2ePg~7{}yVm!`lON&^`8}BBPiimIDx3!4p+QfeU%(&Pzxg}$b7!ZQO=S69kG1vO zuc(ID4ty-Zo=+8&>s2r6hJh&5mu7r^1#C(<_()DuTtoWZ9HA2JThlw_`xYylc4~Fg zuThG6mBz2IBpyyGcKw<p5HmnBFF-hP#z(P7GIfCSjS6*My=OiePg%0h7<sR}Tr5+s zy(cfjf>&R7bV>1?jW@-P-u_j^@3mcU&xK`VOyMG)2kMnx^8WxdK+C`FAA}&o#KvBS zFSym#R05P}xeuT(W67zOdPg2v>oC)#={r7`4^I|vUoRqLCLB3L#b^vOTH0!3<zQYC zaUu#g=;*Z>jRiVRKFIxJ0LJ!h^q0bV7+Z41*t}9y$SwPru`)UJ(yjJxXc)|eH!<;6 z%VZJVr=~{2YgP|zjhJD{EU(e{Yh0YtT#P{{l)?RBOeJItrn+5h{lN{f&SUQ#h78M; zSS8!oi@pqo-<8-o7~dFF^iq;yF`B@l6qxN*Ffq24G#rbHG-*NldhO#bz52+}gCIc0 ztZR?2Yiw`%{?do=bNE4FE0291hpaA7#zg#gJS}fHT;5a4J^#Yt)*Ow$a5LvJ?-GuR zI1ea$V~5shs>1~hm--8aGE%t$TU&|)8@82)7A6iO?TYn~8xS0<Wv93AxaW>1?EEze zM#O~12$1A330A3z(?yDDu%H=(VVQ=9Pn->#x9rGAyR6vQRp*jy@2k2P7EMv4TDr9D zs#|w0e&CM&^69#T6=h&B&iBkBrtRvdXnD-vfH7}_G0%8>zTu_8Tw89=$2SgGp6}#q z?S+QzQC_G#w6@!N<+IjaxrVn_{f~PksWhOPomxlAboI1O!jOItrX@t6`Pby_x1M70 zJDyO?&1Dx8iy3PU8<Yk=epg52^xMIGtSyxh#puOn3{ffuVC+TY+Pw{kl6)-j!2w0V zR{eB;<>o)s(FgA6>KZ$i&?w)oh*{@7o5LHzx4e@E-gyffW4G)W4pTYG$NkBrN%VX8 zqe2+Q9rVWSR6G~;N-f?_1kX4>>9W#XD2#AstWUvWT*LrcAJOOXx)h11;U1-VU-Mq7 z>lE(UvotCEuys$#mt|!cAbq1*#iQz<GuOM5(l?gDD4ie2f2=p>oAdlO=x%hE(i2uA z5jj@4Y(M#u(3o$O<s|Zv&9Ogq(G5G{34g3>w0Upy-sQWE>yS}><g)$r@9Cqr|5~&( zYTfgq@q722YtFA2Ke`Lu4Lk^Nmpp|Z6Oxc2%Fi@1F$_Eit>BKGo=LPgwa176ej%K+ zasuCldOX^|S=<Gl-MpiDhX=Ih(784(`pw4&76NcOR#MSfbPk&;g=V)aJxLQ79r|UP zWqKgqW=74oCKk&$R~^t0wR8!q1EU#q&5FKv_<c`%eP0plc<)-BYjI3(VAWR8@AMtO z9~x)E7bqw6jVl%Uc4v!i5{HjVk|E?O&D)!|W6i`cva@O_1|ut?U$*(DXCW=l+5Fel zS7I|r8@(zP4T~aepqj&1`}Oq?LEqOytd^cGXS{gV79@Y?b9jYx#f%5jInL4i^~ZyJ z1$m?5Ra41(xDcU7%1{R;1gjlG3VHxNKvfft-qD$oqG%vE+pDSjd$3a6rE0yi!2ukR zQl01-RZ|&Ohi9lFA~8HO%wGa*Fw{A$R!MnhT#`nvq``evNs8|*ld3x0>0!@~r78S# zutQ!0i?;ZM$E&>3?+RB0I+-mHhr5u+rrL)b->GUluARWNZ)?&_ZtWLAfMROAq{<2b z?ygoRL!!jQ$*QWVM3L2=@lJ|xp>R?ZH}%?f?<Vy`k&~68@|$1kCfArU99Ovn;={^s z{<o<EQ7WYD$R)Cl@jN|PZDhO!A{AZ`<DKE=>lMVj{W6*E6_(LhVJ{7fs4FCTpm>Qy zxy@TD<?;u0c)bC2aP3ePy-Qav2zKn)#ezl5@Kq58O(@h;g)i$#Pu5lFd!|*l2}c|s zq&<@1z>&It#0M7MY41gt7ck*Rnks7`QjxFO1(71AYl>PLPl@Q-39<iz259GakBUEF zAmcax0rK<=3gpRsm>>J4QcQAlKcTMFL8_p5@9=0W{X57R3n8Ho{4o`=y`1X#?pSNo z83;GzLEs9UsZ~EmA`vYF;B+^-+jGGA=A3@;AVJTdXY_+Pel}cGI66`t{U4BTW~7Dg zF01|&epHUB7<D!HL0*x&(5I*{2z}~_YrIbgyxog?X%xB$;85*(n8D2i{~{70NFm(| zI-uyBhidnryOo}hc784N?IT`aIc68b8Z>p*_F@5RI3#ZF14QRwru2<un(t`Gk46{5 z>d*pzC5G3>zat;UVPTW77y7t+eprG&c6)U&UWwzip-6i#N;@s_^k4C2;~@8I7oB)j z7l$(54&-def6q*qZ#(hdkqT*lgM7$nzAc?FRc0j9U(@?LRi+YTup^(1Nk|QU?h0nO zNR3zYx4$)$k|kL(GLj)9YMQTk2z7Qo@r2R*ukU|vaC6$U`g*`7(r=ZFg{ioqZd`9x zCW4|wu=eZ(lVrvwo;4tz2Ztw3Jike18k6SjjDvJp0_>cd!^R(Bd%%`iB&E#p_5GQp z?~>1h9QF&>3a=E@kG<lClLr?|1oXu!4bK%J-uWxV+8YabjOH{P*I<yoxN4ridRq&_ zJcj#Zr@hFRM@;`+_&h%>hZ(=FEgg_!Chxs@-%A?n4ZN@a(0;AdiA9_uX7>KM01?&s z`?4lU!J!TZh3vcU54)zu3|_H)w%ydo-8UB`OqshcXLwCJOWM8nm#L`R$6x<&I9yX8 zPwolddTSItIui{4Orfp~$9uAvzL^-+Sxux8?b!IrlxT=F^~#NLkpVAkBycz^<AtdX zLqu-TS*6?1l!}b-rXXJoO;Z?>32nA&5cD{u`WLVh%t1;J$OZ6xuj6#s6T|$=O1s-E z900r9v8BSm?gD^~?f3P%R=a{$DYtWHKXYDLT56T#K?i)or&8uQ4{m^5#X`ojK#zhJ z@*_Grna)b0B-+XJSGA#(8o<b=M?V|X!SFtFi~?Q+)M#C6em$E|J<AhK*8GiOJou0p zXO4nC_ym5;X#Ogb{-gI9`GKTi51?J9zOW#Hn9%0+W_>g$D#o)D-oHgK@vMdwG1$M_ zT-cy`#%E<6WS9mPXRV$f0$x40fR$v_QdrcBYx7Hw09G9HYSCfMuc2jH>kBy&fNA({ zSN75*!obra+)baygfe0B6f)0$6Cn{t0&X@-_k3Oxr7!HJ*{mCgAi_7h^qa^&|8aSI zvx06!H&P8K+QZF<l`W$(-eA}HJAGuDFIKSj{Z}$VZ~J=<SBiN)O@$y4&{cKI7{ijG z16^J<uc}_0dxSg&{hxyV=c0Z+I>UQ?0pkYRWQX_C=b%|{H72PwmRos>?FN0}AM)Nb zzt{X8F~FX}@TWDP9BB=R<dz52{7LgCUb`;T#YfeAee?DDuT_<I&%?kM8IX6Lj|j1L zJ;$&4a$SsGTJz2FVwGo@kc#76drk;YkiST#9T+cH{Jr5c+4ZC%OFMVtyv$#igk=Mh z!HS~v^zUnI?NMYr(D%HeC*Jf25C}JKMqMnVVjbwI*xN6Pxzd)t%{fs-#o}@ml;ha6 zFiro_n`>!+F4T`rj@8RunEdv0L6mPa1Ow}8{r)ZHhIW`}$g-MWM{jC>c$u?BTjLCV zG4CggWoK(FOt8GMbULOg@v+n|>09@2IiIxi(hg$nWzR7Ed_^C>`f?|mc+UJ&^hvTH z)cKm0AomZxE034O{UV1qC(3*3*j}*kH;9Cjeqm=7Y8OCWBhU2YCsjh!L@0=~lkYgG zf@#l=1cGKkKIbAknt+fh;pBW_TD>+Bj|QcgNjZ^RyN=bSr|JyVQH}MEt0D>=X6x3Z z5^Q<~t2h&h`u5XU+K2v)91vyznRkQCw=Aq#ol=O$TPwW!wT#X@yhj`h=URli&ck5d zZ{>wVe<v&8@hXUHi0^ChR$qjI{G){3N<%yMKtR`IM3`aOBQ?IA_S^$bkcvt$-KZPd z#6*VK%C0@C#6FS)5MB}t^u~dHBs(mH9^1YhP2Ymw3#t74NP;4riR;&4iJd>js5cuG zco-4G*6>5w4c!QMy(B5G$!_dM)NVe9QW#}7C0~bV^J6GONb|?EJ^u6f>v&FBC2SY2 zhVdWWH#e0Mh`06!R75InYXP|A@7VQ=*&H3f*dR|t%dZOZ*)RWHXYIOO$lLZ_7I@)4 z0_1?yvO@diKc3q0CuD<3!JZhVA|9g7)VhQEyndi+4&_Yd>V3V0N;sn-<g7YyTP(3_ z!WbL`2l};J3k23)9oC2?MZgemH`B?tbpgC#(tK4Z(dQ1>f$g_x1kY(U6P@lTk`%gW zS3J6JX4XL{Sk+2t&1HIbk)NoJz%%zvACS~Bz1WY27&Z>C&etj#JC8OKGZ_5W`7z4Z zc{l$A%ZUJA3v%0b%g4^EmX^?$(8oPH@8Px7NcO^8wWj<+k7pMEl&ybvManK$`j%gi z^!85IHV4e4MOQ_{UAsjJ{<OGPBq%svgse=rhDHmClSyEBx6F4SIp}g2;Zo5kvZMgO zjTwuD*lbGaRAn_QrcW5fQefTD0I#|16n=!>jZDB5>1m1MdmB&MxZwM^$B##s{t!Qh zn}Q;wfu|&F$*WORfxUTeH4)&-n%8&7yMsTkgmxs0=~OV3YW~PXC8R2l*OuVM-{x~j z-^O2Ylc{1V*{sLeWA8Am=9l4N%`clKs`)b9zw~4LA@pIvf&OV;j>~tCiL^z-ySobc z{a_^!5o4H{OoHI|&zPaNGvlk@Bw&`t*PbJc&xr{g_&M~~5DQjA-$#cc$m8}NAP#!l zA68T(y?DSUa3=lT!tI(}ce#Gi+gIQael9w^uOqILNHB55(3Z*Wa46hy)!NGbly|IS z-*7a!akz4PW3st+;e;O8G$<uEov0Kh^&z)Eo9<F;(QJPu-8VE;9;(kSA8`X%EY~+~ zKF;3=JJ*%&TP34wH*Ku<=&kj54N%D2As>x_Tx4!r70+;xu$+D{Bzg(RdK;@Kf>Jt> zHG*beGt>Ncq$17W3zQ-DO`?rdQzQ{>eSA~%%Sh1-=5x}Y!TtY2=oETDUWHtTjN8u; z+9{4C_z8Ojw9SKmflq6K#R8{?hcY}ONthW#Y<_|wb-_V@V_Dx3Et@LQRq5MPuX&Jn zK*jHbL<OEtn|F)IxZ;cn2H@Is$CVqp9_~V_-<PjIUkXB(Fa&++D_Y#{M6Q0+0+_C4 zBwj9~dZ`3o{GX*R<%{9)+jZGE|D45hX&vqPd|G6>a+a5Kb2(lLMfWQYr6t^aBf1_@ zJ=`g4C<1A^3_SURhb&Fjq}2q7)80?+r7|XHMncxMUDikNM@p-GI~DE+JLP^Pwrhgi z1NH;c<x8vHZ5Yj6hQZe^{cMS%BK{W`kMwk?RZB>FFCT_MB$4ZJ5{J)xc{Lk<{Uo|o z1J}W|5&lmk^aS;WE$I}Gj8Rz+Opo9n7?i#1@!?@zMxxg3Xv62<4M$KCbqo(drpKJI zYAeV6F`7e93bGIcS=tc$aJ#Rdzzlz=)8O4{m?nfH(MB$R5M`3dfV$|-ZJNPv{3H_@ z^Tq;f2FB9Qx%%?B>kWth;x91rwBilMk(fVk+s+SRQ1^p$*6)HJlhdMP&d(XLA?;ev z*9T4ZLk?@k%X2U^<NS|i_o6#Nf*+h%g-lV~uyFp*!0T~*?`-p|VW903eE~ya9YYH| zZbg?qjPFO^0i1G#IK-`Rz}6Y(N~r41L;}cS{sWMUX7m0rh{^G2E?3Uom#t>9RrCw^ z8INVrWAQ8;%r)<;X0z4oZCU<{KO?gIjG)i~&xpE?|BT@BGrBK4t^Jfp>mlfutq<?@ z9+PQ5Cf0gdU+X#C&(Gqop;JO1ukmp|Z?qOAURZe5+O6fyjCvsE?RNCu_Ome%we9Xf zYIKJCj!u`YK&99v@mDR02R1r#W&Qf8Zh4}RSI!m(Yso-X1>2b~t2EbDNlMYg{54pw z)ibozQ&PiTE^rPo^ai1q&s|CW8em@d@ZLYvdWk}7J!N}FBZb;~$#8yQAC-uz#CtYm z(w$S&xk6Vq-8ZU&e@R$hUoQ1@3{Q3C&<!_jk1@&7`+KG=Yh=_3*pcH?2|`7wAr4H% z0==V-)5gF~kj*!Nok&lQ1y{<3i>BO`Qfoo%ij8gM6b||Sk_ner&YLl8apYRHy}<2) z080~WY6nmWvU*Md;%jW03ngW^pulA*F@i|Q2tcFBT_H-}D9TKqk;pu>>CR<ShMSjt z@fO(>fY0UwoSrF*J4IyK#L0rF8FNf?xR7v*Y|_S0hze7-GP*<Z8d#Fs(*xr7>g-wk zb@VmB7+yo`RK55cXvJ#}4}DVa_dd70J}*VQl^k3s4Flh0n&<DsueoAPEYUwPo9#)} zOI@HB3mLt`lezWd<FmPuc?oMGkeZK}hN+u>vH5z%ERQ>ZV%J!P<ZOBEP=9u~oZUQ< z6`8lj@k-!{4+$qh539Kzf<6WG{-r9sf+%y+=XHheyJ;<T<iR(>BS@zG+ar_yQY?Ss z6Znx&p&Psw)E*<WnzgEhTu=A<DYrL);_(I*nQYW5q@yt}k|<i!Frpn{Ya;pRTXnPf zY&rk+Z@}+Or6QATEuUXlV50t!QvdxA7}}fOusZ9~v5iGLTG>f3x;r~G?>fnn88^|u z;1!g=>u7NwAya+nFp}};Zi|TG$tu=ObKex!ZGFQAk-wQ`-3(vatmtzK*p`@vZyMEc zzF!xo`_ru&qfiE${ee&vwt)`Umc!m$382FYXQ?#G-p-`fzr(a_jJYgd57CnCiuUD* zKX16Ab>rYd_qy@b<ApWFC}dvzC5?w?3#(_wqJ`d`oE3;ElAVVC*Gw2`XgD)bnudln zO02-H;qIB$lP+&(xG^-lW-pHAy28b9B8l?rcSXChvTaMjXjlt;O$+4tTNH3S*A*&; z5~*w{n;(GIl5JBr#&NQ;^f&lhcnx629^nMw<iWkO16_!$Soi3Sq1xJu)wW@Oe%oJx zJ&C}!+ppQW_(WrQ^4x!M2YmHYtyUQbr1A;dPDV0|S2WnVQe0F-eWX9p6AR_HA8lx* zjV2?yp=qn})R9>^CwA{RJf`$+Y9H;@!kxkV&c<}7cM!CF{ss+#-#RplRYrII0#8xK zMyJKWc)x6>>kC0cQX5m^K$mGHQyt0t*!lH`L@bX?vVpFE#t#)nWeRP&l60_3anjBE z45o+_GnFy^Z>Ivr%7C#y1BN{V_A!>VMC|9AJ}a$wUepps3vqM#Q2QTzY~fpLV?}$f zMIo0TF`r~xRyDRrPg<&U^q7IAMj+lu1_?GkZ`+^uz9(ua{{7fdNwuETW|NuC{f_vg ziGW{^tlL;+hAt8*Fx?>+V>yS3Pg~-JZ$tv#xR5bt;#ua|xgRU|IQSey>1B^2lOp_` z?k~|{d?#XrSm*D5vECt(FlsR7?N=XJ`hCb<jzGM2g$!7uF|GD=r6U0d+LSL;s8{@i zLiFD$#l+0Y-q7XqXeQq|)0OUQe$&KfEVKF9=4UVJj`IIB_Z@(7Rae^Y-q-t^KAO=; znxdIe?;2TMwq@CtEZef>g1a#`*x1Gdj4?KjO<BqxAk<Kj0Gos~LV{zH#<Gx*vMFp5 zQZ}0qQZ`wVkfkL{ik|;-?|W}FvIQ|@|AMhKntAiyIp?<T-20t#oR5*+UoG}kW{$w~ zb@1v-<$2cm$cdvjPu+|EjMu`P?gv}d61l3Y5+RF}=pvIlb*@s8*`-Q3xikpGBCw%V zm{lhH{?>FV7EfZ1T$8?b7Li^C<dLk3mpL*Sr|zLLmDnmzZ6$fOqTInZu$5SJ2=Ot% zHt@))+h&!kHq}lLPnyV;iI&YO*ok;m60TxO`qW+~4KhKW%DQu>BLt<)k&SY<LJeIm zXkno=G+!<)1S4%-L=HtbaJd+bikBaNehy+-FOlC~0)*bMw4q@s=}@#Y$%*lVO#3w< z4$|NFW1AC+%?a9{h%ETqj0PT9hG`)-YRaX`1G++Ngn}Ln0$T{JMejZooZV*VmHwu5 zJXk(>&d}}S6?H<aT|xHiv$y89#sR<HTHe$@cyVREQ$;mGIQO$zOy{&Ek@LIkIwr&< zV9n_ua<<iFt6~wA0XYK{BlzjY42@%=wrfHu9IWcd&Mxae`&i*|l3j{JfWRLYSZn_> z^gh&|vBA7og1}Ewfe$+ZA2ZO;d4m^Jv=DRPDcGL@@TrN%ueX1XQUCAXKyH><acVg} ziC<>oVBJPoH)^U=6{frQ1Y&SvIKnxT9N7XOnS#JAMJ^V~Mo8!nl^s7QX`=m$zg%=3 zs^VC`U_Wm^2d*)6<$9i*dd$T0EOYAfhG8I!yu>dXq9j~*S;x?IfJ^=Oy6Z8osRF2q z@l>ZOi!o9B8r}6*h@U(yX9PUuT9C6kSrOBVet_nr(ASXz#;OY_8#q(O6^bCCYE*$l z5!=t%&kKH*LshR&{ile|knbmgasBnMAoBS7>#!eWyly{pN}QTFLo^sK6ZX&X3H%cD z(3LP=29th=m%$KEgb3xD5V|TuHa>jx#Hp?5Nz*x+1VcHmW|HJxWY$?o=d!CrJOr?q zW9`@MKODFXDWp!KIQ0blKnI&zFy<vKlNldZ^(U;}mhi_uqU!c_jY_$JIaX5B@Ch{h zQzMJu1N1{41$2WG4j=6vIV=dgsG|T6kjftCt+qC#$wD@RiC^j)XbZD4K$vDFVIZu_ zVz!#40C3qDo~eI~nFRfZz`el^?qF!EFfQnCfK@2-cNt(Uabbo?<mS{9BCm5iQjv1t zR{J&Xty=)UAlfgIM1;KkqE1qB9y&T_;bDOjq^bV5Y67sq;!^_p2>9nKne)H~>nH0~ zmtXB{$QFS)`9mN?5T<S#>*gJV2rf%mC<*x~bkg8DaB3;9(m~__cW<m%9pe0eBsRC{ zYIQCN>RVN1RU(VkOAWxHm#W}L!5fw)iIvG(O>?gCWrC+)6U_MD{f={a1&QlS+#RgI zKMHW=jhdQ@1vN=kLczGqvHFdVaphK=`^=3x%gOOzNKqv%7_Kf}R%SVueTIu$<=kV= zWmcK;*YDo_#HVh9p`c#=fIoTt#dSH_Z%#Eqzxfg~z$^rt4G*PNZ@;MtrJSv9@1V<L z?~(9UcUcSt>47#S1Q<xHz{HN#0y%r-f?<3@=cNZ8#LLDdPQs#G7Va)wNJ?P~pZnZU zp90;%xS+ObK1uhsd2@Jen6I74znA6gn^B=Wj_hB5Jjh$)qwl*@=8!6CHH{bTZEFTZ z$w|UFtBxL0ur9LS#wcJV$slTIsQ+X=4(9#inEMR3t5Cq#a7&$j;py1RjDe0LgH?*_ zhd{?@^E-@f=mid}q`=(WBc+-<@n2N$ew21<e`M2HgEJ{3Dm$U`!Uz8m-Om$!mgTEa zOZPUJlOFpl_|Pq35%8|O3oTqk#tOH2>ri<$y8k^UhrTh15i3ZBp>}1pA8T0*oqT)= z>fy0&+`D{9S*%Is3~B9Z_Sohes4qO5anx)&+O-5NS)g&x=Mk@(v5L@czpzsX(mCMU z_#~TTR?xHcb0!x@K+g#EB&RvT#B-pIl;fj1$_pl2G6WiVnqw^KCW>%f)Xol4Sg4TV zf)%jVPw0mS`*HXD%T<o^fBvh{c#FsxdR_i7hRIPLTh`w{IQ}kymj&|%y*gU%vtXL< z>qQUh>W_YutmFjE=<4cF(XwW2e`VLsL%enOJvfo<R7q-gW7QT^7}_tu3Mp;g%yom_ zaw>o89hKQZ8D<G>p5Rw?Nkr(~w^+O);;}_!F-12ZSnOUud?#*iCV91{?XiS%Tqc*z zDFb_S7SC-9&XFhCVvl$hVLje8J>#9-299suVX%bbO1e#FM|OuMbMld+{fUj|JOoRD z$fLg0+z}Q`a$Q5)CWV)7PA$zM+<%4z^urw;nX!gi^wC8qn?d-8$xclWd9lC$mc<P< z%V2WU@3J2JAclJi_UD7qdgueZG~cTBqg!t}U3-PMjvhl+bvS@}lkDo%Xgl`N7@2aw zZ$Acnu^8--E;kwcH?T#j&kbdWI77Oakg(Km^$xe*9CmzIU)iUq0WH>9RnZyE)kb|a zT^PK}<-LNxwXUkweXqb`{Np#qBYz!?NlSMtm=!8w@g^fG=wnUkswI0h6c04e-$&c3 zm=awh%mUE0GOBxf4zuAC_ATkTLKfcux)^7#<JSaz7EJTk^=G9X=vRM=#n0i7Fj0Cw zkcn%Up6!6F8E1TFoJEcgb7U$eigQ$N&RNk&QjA;{Kc`9T)P7Ns416^wY3kHN??rQt zA$4k;1a99z>Vr=0hvizqYu{^s<rq><i28qV&>Xw~I93&Y+VhTPBoxS-LRjGbYx+Hq zaRtbD5@d`42A59M#C2!y4%|xKkwtUcATvPWh!eNZN5UM%9;te_%zLKLxk8i4#(oNH zj_jY=|IYh07753$y6oNd>nt7#iR{!%S6_`dR)v1|WBX@FR9W0AVf-#j!<St_42=#R z#6Dd>dkcluzP+q{O+e+@=eoM~h^ikSJcvX|<I(SFNiZt=4v>95_z(RcdsnS<c1F8G zwU=Cnq;$+sJP}SHgB9IeP7yI!%mS8j2u$?U?4)FvT-bhL$5jDdRk`5OMM#^73v9qI z%vpbazbNH$?`aS4dxENj)sBwOURuU075xjpyE5tXMNc+DFVhu~70V9hI-+bq=w9ES z)i9FumJ4cY-yc@2MV%eJEGsHOEq$of(P2B)p_cBewAID%^m-Qw^I?|)B6xq&4x!DR z5CPrLdBCm5K;}PzQr}kSqMw!XTT!gHF(81)BL=^?_t`L3INsv0S-E}iBBIMDYW1Uj zY5t`zb5TADb79$Ec6O*(#;u|nA85V^E)_{hc*G_O_XT*?3N&mkWFkbNIY(=z7IA@d z=3k;ABypky$Z}`rB2z0F*Lh|&=+s;jD>>7oe^T^x%uOQE53@4e^>&-)Ely}BNmEF< z$(NSQ%W;ar<>oDUX)-5aS@TOx<6js`g>wh0#Hn|m^|1eBM6vpsc0@&(q{AXcVsuAS zpQ*8-rCl4crYc#zyQB8x+0Fr;EozyyH0Cj(7w2;!&4~_p=_qMXuPf3&t#4y`SGk=1 zt1C8}SW<(I1!AcKNy*O%3bE76qw|&U)CbSn9OxNUQAI3_cAsx45yu9y*|R5QhFLz~ z7z#}-IXinGz<14n@1BHpUN~Mw;_#}mSWGKI4mlit3Q@A76%=iCK~ISCGwCLsmpDWS zIw-Jcg+`P{$G#$C2@A%yt>Zg030+SNtcgwH9p|$MP_4dsgQ`xRW3aL!>Sq3ic_vom zdHu(H7>gRoZSK1^KB|1pzE~!B_35WLRu*(am#~h${w)k(?=zocd0eq!LD0~}Xv6OA zsKuG7;j8?dDv18ed(`j@9ZBp>hNrPqen%1K#D|21IuzVu!V}j7fr3~(t;%*dZqPt6 zr$up7IgGB!eALls>o#-sexhglxs}UtV^^d*il_nZBc-Ws_pz)X6VC5P=jlAh%VYBW z2~H;|UwLEWnl_YKh?aw5BKpeX5};XfzzMpu>-N^~YXZ+r6j0j`uXkVRlLT3^?iz{8 zYLuOSqfe1Fj*X3MtniaL46xe?z-}v<ZP3ThT{RYSu`DT6<R;5=Mmlvzh#6=RFKPus zP6GMbS}Ra1yg^DMrE`LKCYZ}2FGGw|5w5U9yFhEw^wDjgWT>NmtRlT|T`I)^3X@DB zQRvh;ad7DTXh%$utMVOX52^Y`)=df()iYq-Y7N~vvNE%92i(M5HE3?Tf;STvm-FQp zjfT>h!1A8{pbSu8d>KJ?D3J9HlLHi<!++{N)=z>1Nd?{c>t~`n13$ydf$a-?^L>Mx zBf={#zCBLy?G~`nn&pj#yYK8cyzL&Sb)wN6f(?nYNxCK~v4i8?H+ct7H17!pKZni& zbbr807Cxch_W?DN*ZFLcApUu(e@T_Dm+c#=?aNok(M@2XZ$IN2VwbKTu8wco3@SXc zb!(^ov4=zsy~u?njzya`#?39agjv>y&l4=n>!OU;t{|9SxW7zqJtucze*QMUy0PB` zXuwa~!IG?v{TMud!FuU;fJjIgTz-=Gi!A^A^LXECE1mK!cGmKhr%V_#S1>j7{Aod3 zfUJWVGDfl``4(FVL$GA%xCM%O5ZMx>;mjV(gl?12Lp$OSb~+m);N;$SWq*9pzB0oo z|A$G`z9M_SuHW;Zy7&@!r|go&>Vx-8{S$cISvl%seS!#Ux9XSD2M?&a{fqouS=7}; zdhcG5TWaX66xcQ&*5ds5PL=SKMV(bv4`o}Lazm>X_TL06Ek#V$FeQOSvL#kx=qj0h zm`>uAU<Jq5HSuxKIZOTd{zeOXeIi_>i_pUecS0=YIf1u)(=_a0iLQbh4*<$S;~(iy zjO;6e$>F-y>Id#~G`$plFT0dzs_Q6`kHRc2>Gl3g_JNB3ov$YwKSsU(&|z?fcW@Rf z`?t-{Uzh_OSrDCQm}_dL8tPMN!D@_$Vby2}66Km&V1{f966Hu-$`1h7#2E|bK+TN- za@beSE@O^e!D)EDX-++h>&R9jFC(mK9ARH+@DEl|faXhq`}~W0ABo(Do-0S7ZRk!q z+-}goyG2P7r*1PWJTdig^yiq!DpTKA2xE~)uQ~h8b54B%e;Y4g%9%#+HkOn9=J7>+ z&D9ADaV3GgCFIm%uw$SY_vw+V0@Gzk4O+z2y*ARGO*!QnI#H~lke9ZPuL^OTZ^78E zaHb)%@j4&*rSQ4SKR#rYFW-KU{8-Xh5epbKJu=2}Z=H}8>U!a&@m%*rcW<t)3wQXC zId}BZ@WSx9i<SmBIdbb}`nr4S^B=!_`$Q-*<o-Yp7;uMLEvCU85Q3Y*%LSY2x_a_; zUA<&axYP#MGRkAS`iT1MTUMWKr^!qmzI!V@@+AXqIuE`x{u~mfbFU^!D5vb%eoPav zc|idK4(a^t?KK`W1YtkRax4xbiPZuKu>!*7i5`|0^^k(=nnK}pdH^dyLuT3D@^W%5 z3Y5DS!swOEfLy#xehVhP(h9Pxve|5P04(fNmCCu{a41xV*s!51I2=|K%U6jN-3($> z7YdOpRm*a&TfyRhWyr;=WajiXA^hn%&2O_!I*Vj+$MZRRgEp~u9Z2(nz^4z~31jl? ztx>>;6Z`@x1!ZUqPq}~J!JlGu#>a%1GA6;8gIYWW<Hc_p0>cxcUe4##2lJ7{wZ0_% z<NX}bIO4A#QCO_nPloK@<5By+^3D%VLyOU3nS*h@oA3s9qjLL~<gfjCl(2t6{yN;? z88Rr3Ige&fe>8%}p)($dGE*n;=+uc>ALcxWDbZ7dXGEA3Q%Cfy$(BXKAyYq7PZ%W0 zh`*i5`3k&GG+6M_A|fSsMv?_rfWu@4v!A+W@6?O@f7*ZLS-kM7U|nSyxYAeq_Jp;o zuek;(S9@~7^mc*5qWuqC%-hdmr14Y#&a$}rx=>wJOqB5T`FDiX8~*{J)9m4J&Steo zHP|BKvBAzX3L13yV5b=-kGD*{{|_acFb3D*lVB5<vs)0vRL)0SQ#TTZgr337y@?(N zX{v}GH;`q|M_;gzVb3$kVbY!O@(1Med&mVYH^t$U%Fw5z6P8B#Mbq~V6kj=OOY!bc z6(6(HH0?W!x1T!Sdu4wWmKv|$utW420VWN0iiOE@*x8@+hEF_s#tXCq9)0&Lk3K^P zeClhbPT^Yo7}Lh|5iW2?mF#gK+laS3os_cG_4Sj27;=(SQ(|c`rDb~^tzz9-=rT0p zwj2Hzrzs+zIQQ^@&1oL<g8i%Yizr~tDnUUISXuYA*5A?5h53#sNxEl$<w5Wx1xXMS z2X5q905G!1ZJ#`<tNGe`B`m?>Ec2o6_K)GA-ag77VvDl(Fmsv3V84aK1ATdiPtzI+ zwH1%AL<;@ABP>*;Sk0yfn<ifrNvK$;&`EUp_0}z*fTVKaM*qaJ30416cwOWnK=$^# z+hb>_^xd*A_16_{K#H!aM6Vz0+lN$1;89t7coQ}RQ7_vO!-it@CeG09wfKE)efJ=g zP)(ZGkLY(d=r@;e<~=@XC_?hiJE0*?(MozcfjtG2gkhS>b+nW1X%dUr;iVlVo7!E5 zq2bt$G7|5|;X9t-$XO-MPgLD;#~q;2CsdUnu5|4f!HfmKo^oYS&w?V_sj0H9WoWx$ z-21+pK5H60$}X$8i5|VFvi(C{KXN3MUj%@DUbG7!x>^y`GhY89IxJ?!p?@tIZSgp^ zC3>_?pS^i4MH>p_r)R>+&>Jg6$~TrOwR`&>$&y4JmleW0wr*AR--VXL!g#)}+wYl8 zHPkpaIYYf4Y`IXf42k7XtP@%cFlJy`Am}Gp`$w~CiPA%r-rk^tKgp~ooe201%FPzs zt#gkp9>G?MqXhskj97O!T<38;^m$#(V_Q9R=r1^CAhN%$=sb%67MoM2(2rk4Jw2D9 zna?s|6_-wggB;njk7UUVL5_4obSE1T5R|goNN$?!d8#O@9B!8lXL}my9XC`|V2uBA z=+H$q;6GMd_8)mcSIE{gy1Q)1FzpPwtf!~bIosb4&pSkQ%fMKxj1&D>CkE~f^yA%A zeL;LPO{c!^oaZBB<PCNHqc^oNrLqv+vmi?{LG&l{=9}q{iqgEPCG5?fI9;>Y#57!+ zO#P}vB)VR#=PJ>Am@1|f+9RK&ZI5VPUwUBVB(R}5F^Vyb9i3jvF4ub|JMaG?ujmdL zg~gIFR4<15Rw@|T$L&XH5aT#ng5J|SRG;>TYI{_nqeejSw#8Um(N`9!>z2^M4h3N+ ztPyRR*G8@(*EaUci00`!RgYdnkI*;?lk9`>2Ad|y5YjoPa$E(b8z88k;}l&kSJBvL zMVx=)pA=cG7#lk&i7Hn?;w1p+OIQ$mYFtC^T3Ls`0obdWoH<m5ruUQmk!j+wo5P2c zEg%UMNg~!R73S4@`u2|nkw^ybrJSg7fC|}5_MlfyyUw!E_wZ*WRkZ*4oqxE$7Kw@= z{^u*QMZzRr`t{VFs3eEw;(ASFkfBFNC#p!Ks_XwnD5;1(nVk*-Bt)NLEEYHkq!Zfp z7J7|^HMs3TA`x^%j%9xaix<a32e|YS{5e&mtv<EQuU>#wP>EDdP|)`U1+yal!)snV z3iBNEIAegFMJFC5*Wt#-lK^;vby$(Rkzk!+PFuE&6R{+|pO=vrYxXSuSDa*m%pztZ z^zT)ptr4w=&%HP^@329n0IIU29+)#}IvG@HT<Ua;0kt|{`oL^=LVF}BVkqT27Y?T~ zp<vMXiXrgH(OtVQfEl%Xcr!9#p?-PuaJeo@7wq0Ongr)3F}%rs8Qgkv({SR)#qURw z>2NS;;YuuWan-LTV&QN&Srst*1fyzn*REZ<$X5<;A^CT=4p+i$;H}Xr`sP-cpSKKG z+V^6Sk1Kw)0=^o7uUfR7Z)GHW3HlvV0T@_1k*W-OJeFw-n4S;lYMvvfNVmeht4DV2 z-l2&4&Rx59>Y{wUt3m$ZIhUZH>ZyhFZ3+I}1*^lZojXCGu7|rXIqkU_(!VN=Vjp)O zOoK+IZB6J9un?OlJpE)6PgHy=+<zDPT)t)HYV<?VeYoA}K30@Lh+Xz!v@YMYdX<x# z<u`z-Ptsgux*Piiofk2YAmtzCvP=mvrL)7~W3*=rx}_r2jXE&WEgsoF!NTpgvjVgy z!gsyrJ$GS5_wSMYar?M{SR|`FMsryH{`*N_F3Ioo;0HeNporKK8EQ!U8R^$y_gRQ3 z5<Z;NR>5hq4B2W9t+e2Ar~~9s<>@Dbu?6<_+m&0AW7T2$FaajGl}MfOU=T^b_unty zmzl^Rm;0E(-$DNhJ`g!SY-^0t{29TSl>cJzh2zq;6+<AP+as53mdxVsnBdf?nprz1 zBsI?;OVrebrJg0Gig7i0t7*aF$~=8*YKMg{x6G-l4HQpSMq)u<9xLs0!0Xnb2Uj%Z z^H}a6ziM0TADYm>nk3Raso&xc;JGwrC0UHwqg(2gsC7Dg#UmbhY0Ml|R%kNPJ~Kq< zgUBe{8i8p**2*s%?BnP;5o@mMUR{nGB@LIq$X4n)mRrBsEU{RV{H*Wj(HE*&Md1SN z)vxXz(OEZ7&TptZEg+A-Bo31jKYEd~oeATol=0-81f<<E&*y^#tGid3EXF(*Snyc5 zzJUYfMAAs))`EdpRzyRe(ZWOsePs75ZS^8ayN0pKR{!S6F(2y(d0DCXo2@d|^-A`| za_sHL{t(u6vMaF++O@YOM{<skWV+p`v)kE(_0AfL+pv`H?(ELetqR_K<>*x0xb>nI z;f<9KyaNR)bFI;PP5u2J_91ck9zY7pSRt7RW^Q=DZr=S~@w~eOJl<;Bqk(+Kobn3s z{`Z^a{SSy;7OJTdAGqKA^JVYTNOl~Vgv_Df?qyOuCJk&UHv#C=utB7}b3<e~0i+9> z7FCB>1Y=CbMi1w!ZjtCV48?Fi#3w-C2C8pghgsZ<ow*h3aO*mYH36NB2?X0vwtF{f zD^Q}ZFuif>!3p?%g{Kf7xM!Pm-`%d(RaJ#i1!HBjkS?cs>$hh{BhiL*cOe&8Y?}tv z7uQmKu|!llvLU)4vf-Enn$r=AB%^$5zvT~D{jTarz6CysWfwIq&;_!iYV=4t(b$cn z{0%-AuY&nwgq%y(M##Bjm_Yjuhj!#fn|k5x?YM&;u%(>hSoF%`MQ{oEo#quXPy(%q ziHJjTW%lxg6IUnW9Bm$~R95cnJ~EOL&~5NJuMXBV&lj*rUPmvC@+f3HQ`vH@fl)3~ z+uGY!QzLxyYo<Pog2PS8RBmx~BmecU8pgvnH0tTbIeF>fhYjOnH`c2S4Ql<3A1l=< z&kWOZXWik>fO8h2!5P!RC{8$Vs1kXhDt)LkRTALuejcPbtNKwN!b`!HM5XG(3&yWa z#Yopu;4N(Y!z5Knyay~S4zC{;u@g(|=!939MWyOm`dYJ%;y1pg>(6{knYYBz$TS~* zSgProQzJg|ux^$pMDh_3eV%9fV1Dp9^FywKrt)zPLR=|f9Cf2`n^#E9Z3+@>M<bon zG$Tt$7z3fOR<~desX57lkeY-M;y51n?M%c}o;HMW(P9-|sO|NuLm0_n^Rdq;g*3of zv}LPqK8X-tmyG9vUwG6oK6P`m(a_J^e#1b&XMGh5l*b;^T@K$5U@Rq=C{s(;=Q7`H z{N5tHx4I;|yfag*67W1iP2=r9Qr@n{dc0lqbVWlftOk>jaM%iC#0$tj&C2BrLdpdv zZxL=tMrvd}63C=Orif?AL^%4ngj&Q5)1=#J&TXK*vn1G^iZ%fv;32-qrR9)DxwL=a zxfQ91BuDge6R=igSZ&6#U`%smUGWZyoc(&NPR62|P{Y;!2p=K%vg_32+!XGj{F`Nf zFBf#xB`o60an5{S?`-)p1JJ@$7C;$q?<0IflXzLSe{0*AWm%jdHH-~`ojQeK`WSw@ zALcEU<L|nOBif=m=ux}@NW%WL{U1npTOWD2+p$YIAovMlm+smsi};lh+D@pEbI5%j zRZIg{34mV7ug+SED2Ix2t0LZqjFTwF`Dj$q1cXETzP@Xs90`WRp%|)Ud7cAr^fw%; z^ucm3qO_rDhW(>cj3m;_@3w!pofS~0BJ&DDQ53@*$4-4&@`Jk<_^|!LN-WG%Edil; z?}c4;77`?bzvFJi`+0oNZFswnMK|0dN?}QS-!*{3$aNF9b`U72@weT{@ft7K&jw|H ze`V*~R*!i%_Q1XpKgjN<o;EovXs^vwnlygc;gmH};&i46VF-gO66T8lOC+S5utOmv z9J5@JV)mda$y49QJPTMx!!l?gX)?BD)PHx3)2ALaaTCC;XAA@$7Kd}ZBC=E8!2v9z zKc(!~zlCJ<xTJj#a~3J2{#60%;2h#7ujp2=@GXKe0e_t|I2L_}6;y?1zvnmjr}Xod zA%2ElQSc-BL9do{Rh-6D1e`W>ge3fju*;7Vi#qYHs+2+(nx@v(gDtj8Dmdz|I1*}L z&00<r@znR@o;rArq!Tr-Ld-s1#(oZz5}`eH6oR?&Bbo$g_X#4Wphy~emL*ic?>*uw z^nfN2CEK>vVczhA@f1}+J9e@TE?xouoW#$8-$?dyYr>Z7;)xQ<lXFy4eHt~b63xnB zTj7$kBrPB%+kbs)gky2{>AW-~=|1)h`WpIztUBZ@HaO5RzCq<LIfI<0o<?6Q)xl47 zXb5Sj$kC5Dp>hr)70;fo_QimoRXcY6rA)6FSn%x1{6%NYQ^Q{i#TRw%gk>wBr4RLQ zIva+X%ex@llns=dvSs5!#feRBYb|n7NS&xww^@qCqk@q$xJ9(Q<1D-smxbXR%vZM# zATb!8&=WUZUAb%pS(C<s=>Wow%Eo}hJF0z8Oq8^2%QcoqJ2K9VjLSGw@0*yxO(B$w ziHUrtxp7VcHN%{n3ZUhN9uvR(WsdNcPc%(7M}*ED4jXA-w`y4e)}jlK5k8U-*fB@1 zYTlcFawa#$lB};jLCR|*Qoc{7Ly&NmT>kYrfHfwXk;_E~7v%Jo96-}-q_CSLvEW7) zfOi=twTsD?amsW8sLwFh3hnT+Kz#`7wY3gCNfR;l9h*B|rW((8STJ?Stg-Q&x>j-J z3K`5d8K@2UgG(0@lGE1h{`E`0`)y5|wvl!PZ+@v^XDiQ1f$l5)qM&mAtA^8-$l<0t zYRX032###5FeLVy-vA33Pd9IGLs-@g-M~M844gAXD&g(8`-k@3_!;~on2$C?pIKTT zn8q)mGXs>^l$)C+Qh`fj`|0kv>+5>iTAaZ0U@>oFyB9Go3admsz>^(W`&Ijo2W|z> z!#kiy;{funADX+Ecy5Sq?c`WaGLr3KAvjcMuc?+;4Sdaxik#m!xH#OE4MXSZD%9)w zn*2PH10Fp^LYG8|bx{&4(by$rYGb9~U$$*X5LnD_+KQ1X;h`;A-D<DN52mUF|H_t> z#1HxK)&(iu*nU1v$<c<I2n~9iwow`7Gc9X)^BAV~{~;r-5jg_F;6DPwG+0qIq#n4< zeiifT-)ANKT@v2JS}Z^|Ll8OsN-)-yJZJrN`0bmi#7;S8FW6~gPr2&(mDGVOuGMap zSvR`gCHedhS#7zIc<TDK8+CG&C+b$m&!VdSd?$=FRbusxYp;JQVf>xeLyrkYZN<ig zWzcEG@|xS51s*ruPDY;|T)45KR+-xIwyijA!z{B0Y`CF2uFyRumjq^@VtT*g%;eG} zVJ1TVGbY5J*2}+i-I|R$Cy^<<@Kb6+Qx|ns&^NBR{)^@M)UAJ~4NnR>v0+drv-us3 zFo8AS-VlW;fh{98)TdUxZ5y&KC-o`t$lRQRbL#720$?mYRqY~?c7KOQ)|_4&3Gvpc z)+Xf07OKGk2xHq*Tqqpr#1F{!Q{~zAGR5L<$bUlRIOUN?=XA-urZu%>>sJAu=J?9d zt=(cs(@5F&@?UZGA3mV2t+{J>a(^S><1Xx5A(1E<X~oK`jsTbz)Lpx=Kb$qDz9({R z=(%jeQL8y#uHkFYh4=_s#y{y`VNaiSW-c=d`Yf8?)0v?;@LDTK*{A7zw`^OmB*DK+ zkRg2{?Y#7Ll0xIDP_V6YfNhUBae}Rx?dY6`=Hhw7u&xODJbxf8quu8bx9{YmTz72< zG;RsUP%gJp5*6c-n^?r+eACMA?(aP!3pII+bR4f8ue|$iUX%s%_S)L^FzRSh1YQu( zITM_G;M|-g?`$3j1admAGp-o^?Mwb}?a`xX$4WiCVgo)xbfnlNMfqwQK*#kf7LN2p zSZ8e}x!Fk7IJdE;Q~tp?aI+>gVv@qo-K%r8CEc2^1FLCc;!p*08<SFMC)7m?3thqM zc1Rre&risFZG{5rYw7IbOtoNu6LVvFUKZ{6>X&u(+s~AT48`QjqJu-wReL7;JJf{E zzW!y-{(dqa8IzI?SI8>9>rPG?YLx(?3+va!m3ORHz%@{}U4W97587B8@>f|1+rQ=< zl+sgXNkhXJ^ZbkGx!T0dl}pnIUxE(dn~@b%vaEGQ(Jo15m{|#UMR{!Ps?kLas>?N? zdiWjh-JMju5HTEj17px!E|>-n<^tI!N}h0%dbdZiX))Y6VQBAaILIY}8wF1CVcgx@ z)UiS1I5$*m`<Vs-LpC>wJNM|a@WY$+AVz!kv0OI)#I52G{vqCN%nNs8y%#YOXYwC- zFc_}~sKe1%F=7mSx-}#)<<YA;+BI~1t|Y(o`}R)6?cR;nFZv|f?w)fU#NR;&nIzyh z#mUE%otcn{MC;557FZ(dzMAe;=ga=iwp+$UKQxh4RkP{xOltVjYULofITZ^VM`Yw{ zxy#`Fn8m*CnoY8A>momW-p%xRRU~J+x0gPh>!TmHg^MSxPJ(4!R^@nV>ow=C7|8LQ zCi#uJYnN1{GZhoJW;nE6R*}CUwY8^VNRhx56QT<?nLKapS?HWIOQ)8zSK_CcIMc)& zV174P-j6suhy-qE4(5e(kSuLRqRcPe2+sN<r^0wA0}8>^auFlRf+X*OyC4>k^4!ci z1-vx>C?g2mI)>vcQg>cl$B1G;^s0onpZ0C?4a_n4T<<oses{3-4ZkKcA}fn$d|en@ zyLK>+nccf~oVRAxqLKM?3vKnasY=UW;yA97y4TakgC+KKtE;pV$3#dwyYSB0b#*&s zWqK7(S|cICqV6bi1uLe{<Q!a2=^J!pIMqM0uE&EuY)uTEcV|_!Dt&ZveC6cWs-x+u zN4pmHqUZL0_Cg`Zz3cl1{;v<d`+Jqz)aRGZ!8*5~LGa58$RY@aAw>7&+gr5mzOJ(J zwZoIml0QH`fp#-=Vf9F^Js#G33Q~O^ema=EZQJmoRZAz|nX0Hry>oKus^_k$iw5nH zi#~TgQosK0a`U4v96!>0fA<Or<@k`MAmQVJAYR*;ZHw}TR-UeJgq2W;29Pj0Ka7ze z3=Fr|#2PeFS2<%T>9432eF2{YOfMWar|TQi{2bo)V<WP_5cApNkCJ@t4}A!6(1K(u zooDf<owNLhuFjD&@mdtC<!OyS@4i8A+>!DHX*a-$I!G4W9DP`oKlBjc4IF<|B2|oe z0kxWFiBpUS^R@P`YI(suTSQ+#dzg@SzW||sIg+|b)QFH{n)soIh?I{WXF1ln;U3dI z?&eX(j)ZP4U+<noMzvVmhf3ybK~Ta0x?QH^D8yq4?h3Mk1vZ(2BOG>$H_`hsr~26S zptH}*@#vgeIR}qH0WqQw;0-_i$%xJi#(DPl?A^NWiv}<H@n1$%-Pmb=-QJ*CGwv1e z@@V>;%>=}Rovlo0@T|d0z816>)tzSuyw2H=+vgAa@jvp0)nXsBzrNFeRz~CK!z2D; z4oZjfC>$5uGyf8<<4k(vX_Q8fzu<8ur4xiNiD%<Wo=KCOjUGvInV$L`K8yz_hn;c| zB4956fWz>O5k|_n=Fy=+fa4-Mc9j{FRUVbya3dfl`vv<KyeiZ4IPV^W&lC-c4#()U z`{dd&!7s3U&A4OcIqssp_-8*q^UgIG{X~BC6^xk@&b|q9a*mucIXtJ6bxvn0QC(jI zIR~ljl_Fn16jYp<Yo&=*^QvP=B-M$NVHpIne__9Xc#Z1leK!m`22G`yN3Qt&KzlkB z@<$4tr8j!*XFtDZAt*TGemH@V{pdZfzQQo2x{*F>5V>aIg3UsVI-UCE#`GP+=i+ZL z6-=I-B_#dy%-c;X7jd(klBfW;>~;*b<1~PeN|-D9MNyKjOw3Oqo)?ZDVqw*14;>Xa zPJi_;FQ6CRu^-{5Md2&;7q(-W<7M$1UnIl%i{B7Ml9m}Awl@Kkus<5%KYfw`Cmh)0 z>eX`U-Ruz<KXZz?58M5Pc1pGkM2JKox99^!0HrxI2rr_2dL?N?dp99~x16vM-E*J@ zVa#25AQWp-SdPE^;K9pzj#ZkPE<enHIHvyyx)Gr?spw`u&y#9x2y@)})o9+bn?(uZ zweTOtl6doNXw5o~!{o+JU8<F*p2IH!ZYR72!>QNqIbZCIY`0$3@HXNn`>RQ&#vl7w zA-a6*;cl$zwWh|iBMVqQTwX31sX9bXf8T+8l@SR)rE-EA>|67%_G>=P2ukdsgA&VW zW-#16#)4T<_p>qH%~#ue>Nl((+LF|dZ@{RSx5;3gN|Qv6O5_uAo>NXw<K2`)9qs)r zT+rbHD#w{{98X&Iv620vfF2<$o`gRuvsLZ)uTf<V#-P}8&DM%A%gNQZV3}nFdwKDq zWb3K}bzpQsQ)ga;pMsT#Bj+z1+Wm}APTd=nS$mnxBX#0jo%403Z<>U;n`dWU=HIx) z5YQ*JpmR~?rj_I(w?>%PkA>rYZ(VqUKJ0(9p8Muq);-U8KdxgND8ITHFngkym$b+W z3l(3{eSg1`LNH9L*c0309PK8h46)*?pkVxxki!)4CGju8QxRPz8yk0dVkbSm*n}b| z=-&led`A)NYWP(|gAS$5;{rIG#yHbL@_8lxb`A!Bz8Z>DaMSO<d7_0UB`lySa##sJ zaq&}p=#8@~*o_!ncNJz4EccxIkup=>2$TEUc@z-I%2<4d>3riPPk5;xd++HSZjtc$ zvnF}6$NZY}jwWEFa87%JLf^rEX3CfzW*xNmlKzIgIUUzRPi!JHGYAAchKsZ1G9B^i zz}iB4tFQD5ns9RF=lEXC>4K!QQ!gPb@v5&R&%nT@1@&!xb9>KU$ss|N@YV&jZTN6c zd+kC?M&;8VV$GQO5&jcWO__ZT{W}(PKRS32!4r7&`>FjS8=_T>nckLws01W^czqNt z$<!pRK*E0A`zVntdArmuF{YPU4|W+JXsj_<)=7Ex21yst-))$4#L&#t3_i7(ngL(> zwk`7mQ4UOJZb1HG=7y>Fymi|+@sK12G!C|rPP8WdEamOu*?9wnPS(kbMY<E=+`BQ5 z6pPaIdg##5y$exE0x(J>5T>3W8L?y?CE6Mk@I+ap_{7Rrblv_{d!wJ69REQ_FIO%~ z8JfTyIXY+L2=6ir$dRg@ko1;j4!*AXrKE1?EiEJshgg}>OLZutHRqZuwNjoz=nSHP z?{BC;5*E=6UPNkuzAVxy>)=(;<jv&A+Xd5pkpy)K4hMlh^3Lv&BOEtX{U+j*T>AE5 z{4M+^@RL3W^54JSJ^RSaa`r)Z5*{PSJ*#v!T6w@9rTL1dnH_C3hd~8yD`DEfIurDE zV%_|^)E5h-OcV^y{KUJPLuGUcmTsCip0)pIzkc8rq>z&nVlVA=Yao=&4A7*(e3Nf( zvY{1=oB$JCAz80A=ILh|bcQCaBHzIK46bHK2B_)xXE8}vmX?At3O1%P$v%mVqV*#U zt*VL26AMEvnW}2~UPq$EQj_82Sl;r<0Tsd549p0xk^>iU@7}iFeLOjEc~yXgM+^Al zgB5}h8EgubmmwA=bBwNGQ8*?<edPm{f*2lbGA)3U7-{vqE>t(I#k?v?tNcx2#LEF+ ze2}L3ox7zB{OGy!xJD)Hiw{*s;JrmnaUF|NQ#@ZEY$$`TNn&YxmN6fK_IzN2>YdX# z6AjPJJg52pqCwZl;BC$mc%FxK@h1v7=24Jz;1>IjEdTQVqb7Ytd{tmAR=E5iJssKy zExT9b%)hSvzuu@Ev%+q{C)wY^JV`Q+E+nzcT@AI_RE3Y^&O}B2s>6u@>u0@uLyVi` zQE-2X(|iz~^Ad9xT)G8*P*zp6@aeyZNc;<yb%~pLnpY$dcTauBz{4iZ|LFWAl?QMS z0aEr)?4R;}`Zd;m^-lm?e@pTWq4>g$?3N7}))y6hm!KM+eRk@ym?*}?&(nYJ!{|FO zsmTJ`y%UfGPriZ9g>NVtQ=&78w`^h-6P^2-8>*{fI?WgA5=Ao8G?7p#Ph@7MP=1;o zLjZ{D1-25($oY~kb6A}E6IKafWPlYFVd~3KqNV{z=sC;6^PL2upEvNhq{$pyDq_{o z+ds8`f(UuUk17m|6QnQ$_ryPgs+2k+$S`?-=aE_Rias!Xr62Fyjd(@lx9{Z9Ol;?) z`HHLj(li#G262VX2tjqTgHwt`Js2n87A%0nBig_G>#WceA5w{n4`|M(6DlLZPeEhM z4oOSpvzP`dpE?73dZI)efE<p@kQ*8dft1q-)RRT^;IV;_C%U2!Jb@IFd(?%YqC}+; zKTL74#A9%*92Cln73W;ZoGRjDFW+W8vxC&JYmX2a-E_fp{vrGQl<(mb@ur0DYARzJ zO*&IRZ#M%cewWD$M(A5(8qaHEo4fl}Q8Pr&8b4tFvP;*yj6wPFe+f=~?X9Qd{5M56 z%#RF*F&nPxoHuET2HckqFE1=t2n2>n$lSekYU5i=&3UG+l7@TMN>5sy+TKprBGY|G zJB6KY5edQoY74)8Tb<CmtO4=yuLn6%he@Nqd-IqM?&a9GLWaPboPX>9D(}*#-uu?G zw|+wapNJR)05-X|IXSPhD$L^W@JCETSHdgWCuH4T@|N?Mvar7X2!9jS*9K+{a~0tE zi`Oma%NT44*Gp)NIQgx-Gk&k1IeFu==(L3T&f-clmKE!0IGGg^GcNT)xK6*;InbWa z$9}W(vJi9w3?j3JC}*t3p2;%RSX-#~XJk<~un@ZJg5Qqm_=*h+GK>3{CH%>hxx!gJ z=XM(DtezVk$@@}CE7!=eioSlhdbEEuMXt&>vUC9^m*v&u^1&u@*>VZ4LVpl-p|<5> ztZ?ApgTtZEZHT7weo|vHUs2vLSBDu8hc9la6;=E2{7scLEh@*AFNTFO*tOc^Sk7!} zGNIW!(}~a@=WVX6Y0`OK@5sO!8=SMs<T+MvsSj{md@K>3*#<dgf;kLraN*=&A)&BN zzjf(LUY~VI0;JQnxsA~l4*VZ!0(`<4{p|&p2P9<Zf>`aZ?_M2M^_6{%R<#(^krcRm z*9)UY^ncd)FxS_%?u#H5%-r8nUXk~U9QM_uqAmS#9!2)G)(VEb=kGN;!Ih6tT-iYV zg#Eo41HXkn&w37O$w@tc!=j-**ho;L6UB4}p3LS_)A3#Hv$mWYcvbQdjEZ0HK7CXa z*3wbY;G?60<(*MccFw|dq^`f3$H{8Ma-vz8EH+0JZCJ2L)=hsh*x%wBKZ@23&)u5G zY%=7RWHnWpcUzP+)%;E?*;o^{;0r^IB`r+{OI`D6gC!fJgQYUoFb}3dnGIju41;Cr z&+|43R&AIcnvaksvh#;H%WW@MB<F7`<2aN^59tj)o{x>uH|K4c8{vlP;{ZW==+)(; z70}*uR)ez?mN2=x(c*d93rgBF$Gjif^rFs$$Fn(`F@*jfHK{Yo4g^I^N13mIj<VI= z)1z$nuSboktN-sbCmDXt7e}zHiuyoHtdb7DK(09aTIvL2>bL)A8<Nh6D^JzX{O^rS zC*@T4&FN^#iBA6aLO1SgJ-ZMt>okYqYy-AV^AFH7XBDJnFDP*cynOqP9t}(f(+7I= zcC|N~n0>3US^m@XINLxhbebagCubXcHC1_<E(BX0!6#Ug$ub*AZtDjBX*teHQk)et zoOub(2&x)D4kyb?_>~r>F%=y)ozsY_;G~E<tBhwK)zRLzF5c2`Lw<5X)xTP|=0h~6 zMn|TMB=)SYotP9kb^Er_t`9vVa=#?G&%Cr?8lokW)zw4U%_J=twtpp9y@TNOu$<7; zL~=H?Z^x=ASp9WnmWT>%E}Lb=2+e|4YL{x73wuGmg*}e;-^_!?zCE*?O>VTeViNqC zn-4B`Ax#HIOhQtnHIrm;D*o$BZ_y^Ce%%YqOXw3!B_kZSiup!7iaJTYL5LePT+QJ= zl6rpm3YY@*jxLfQqc#C=RBK{^RQS6jU#052++DDB{k!!Q8n{R~UFxRK`A>8gdW7kM z=j2Oj{&f~Q-00It2}jk5tL~u5KhjOOL!2(H+@(q2Fzz@9ONzvcI8p|F9xEj>l*u&o zPOM1=hs$E3pkXeRK@S+bxPALzTSL9ZE9FVkfMEj`4BAiW>TP#q$Jea|8OO&h!xA`- z3kMw@!^iM5cmq>Q>ht=@c~v(Gw}zc!Z?uLz-TRIaq}Gl4QEQtMT9$@&2yKccV}N-z zENd6;i*?F!dFRSW%qpn7p=(k4_(0*Vr>gVFfVBbs=XU=Hq(Nu`jT5#8_!{8uzVBZ5 z%&_{@pYe0(QF>-r>zrYFVFM(VfTn_>oKi0r7qO2p9S}|kd;KWa?$tqZA`hn1`;ZVG zeB2i^xshQx;u91e#pn6BU_$n<YtET6D^=;^n@&hoF)JD!7?D+3uV6F%Iv)za8YKDF zw`EM3)5|n8h|+Qudeks9oo}oQrsi1bAXYh5G}BE<GpuT@J(Vr}`><uHW-#AiTG6U? z9A+h+=i!o;L?96J*SExR?PHwojn!YewL3_@;=bCyQM-f8yR__kvV)RLXqQSLItPcG ze@VPz@{LP%APxEL-@|zHlTby3L|H_puG=p=|LT@%|NafDb4*=hX!pT5XljHTiE>@N zC0XS6b*j8!ram!Rf3?5vZ`I;BTZP`F^v2m}^v2aT{(9+~s6_NxhflJ1F_$sNK%Zk* ztVm*y3)qi4yqXvUtC2!&nC93e)2G3<c@@SDOaWS(mz;Gv>IFP^FMUO!gg7}}4zC}R zK8+|q3&DN12r?(V?@qP{uiSQ0Awd@PJL+0iwW7{$l8{u4wpQWlrg53)<#%2hj5U4i zBQWYe`6&?x`5?MOSHJyTtc2upQx%MPVn3l(jts|RTQ<Xs3%1uv5e4;*{R2j9U$e}j zNaW+1Aac^^2xdQp^DUDSJR;Z>h}J~V10NQlLxmUIxh)vX%DljdVs8QWj$MPn-G})* z!p||g=u{<CbeB&i0arck=iF&|Y#gR#Nm22^viS+XS}4hu#}GGv2zh<TiJe*N#2Bsb zdyBOT3>5JWxyTga78&d$7&q<Gv7znWMhydYDPHvWd9WC8=v)8N)FKF)k;@^>#a5~o zr;Lv0rJ(#a3mSY5C(mhyA&1V}c<DPNxBze3jP+XH;shmKy)M`uIkUEbXQ$OPu4d!f zB~j8hp(7Ui<yjWJ$dc$H_g6x=%hoy5D;O@&4xO>Rv)ZeDu^nyR%r%`&@eAX|t0h#Y zKKdwz`4P(xe~d$w>A5`E?AndnI33M%%3plAz8-Oxopt?-p?O>5D<?VVaN5MOkyY;{ z7oz!mz72%<ml^dhoN>FCIRv)3bl;i?&9~qTs&=<v`2Z><w&S90uvZYprFEv>^6*83 z1Rf!iK|h`#V@nRJw;qka();YUQB5_W=vyhll6TTcdSti|FUN)9%fW7<vHu{>=g)rR zqW5z4$Nw8?Wr|v+rO2o%AE?5Mx=l_KxE<Rrxd?g_kGF-J%TNnBxJ)J=9ABBJ?12eY z)aG<w{Eo98vUrmH0NS4(t*97FIW|5CHtuCMF&7j6cFV#j%}Y<x&pFYgB>`(*lmIT2 zl=y6SFevoU)HGm+MZl>q5F!4qL)A>vLomScY&!`XOqXP>?!=$g>~AJB=m1Ri`}5^5 z{94mqc`5AIB_HSGWgaCeb$wZ7CBJB~u0NE_u+fn{1iS-GJ+PM~=$3U}QzKyjdPBS8 zbIQ?8@76Bg9xJ5rLIUX{7Y)n1_x=-aE*sND&e}Z332|%5h5SNR4(kXLaJXm@Od5v1 zYzZrpB*uHP0OWCH28*nT<8cCG^gs3-8A6<aF|1I^+JXGWeE%8+|M#D1tl+1?Cwqyx z0PxT9uoEko1YliEPcmDo=Act{w+BsQ*r4O+xb;=jrQw3kvfJJdBiOMy+|dE<Xjw<Y z#*Nba%;xlIF3sc>0hTqF_Ert9S(l2MA~<Db*{rT_ukYHvUDf}iYVHR=plOdjn#`z@ zj>_We*8v#z4f^iAPlS<dtysugp~87?MrUwqz<gM_aGABh>fKOgif#FzCUH$!0`3Rb zx*(n!x2+evc#LXl5&0~3e$317?Dn_wm`k9)?c6cP@cfzx-OBK~jeBD11}Y#g?e|&t zM=-tfj=w-0$vVVmQ#e%gl$<o+J#$S%FB3@jNr(m@j<yI%n_hQWzyItz<L`9!$kA)( z=3B}JuDA#Nw~4=?YpbpVv+MYK;PMC=m5Wz)3DAwC9y19Jwbi;hv>>>=r=jhv`s0|z zODaaScT{PxpqTc0jMZJse5th6Mf=@xiq$THes^v!D(0B?rm~Wk1IP>Jr7@|eXV32N z8o>=#u0!5{Eit>7Jlr$-3T;fSQAUOVN!+LA)xEo6Qro{j=+h*D6p!Z-o35IFet6o2 z1gq~GYY!7MZ}?yFgy@sdlTU%6cLi&I_X0SR6~Qt?geea2eIlWKl{1~L1AQ^JBSt1N zRmLs(pf1Q6B}&R{7?XX~PWEkTHEb;Ho}lL4JZjbkq4!CG=UKK4Xht>p7B*boB?8+W zWLA*;l_KH4x)qH<!$OIJOl){&#`QC{Biv<36lVC`_=IlX)>tR9oUCD-O47jE$3m0g ze0}oFEeL14F6(Jo)l~0(hfO9YSAw^_rVhOAgMw9P<B&<?sYqH6Y9HA;Z#WN_YI^Ho z7a5{`8=_%)wZhkA$>7}Hj#XNV0psJK_ZrZ9-b}r7?irNhqPfMKoq^>nu`TY5ep=@_ zb7R6${sG<2rmJ}tlQLrQL?i%!cci6l<!W93YAVBlSEZwhvZ`2c#y&%FBZ8#mA8Ja? z|Jn2E6};8a!6KxJe0?q8G2R+mLej6dwX-})KOr`zaq0eoKE3-u^6--`K;|FP@b!R6 zSw@8UhbMJ>o9kLS+CpvccboIy*<VM&E?h;f6OJR|_qI5nGyfafLp>3A+ND%oPTN2b z9tQ}*DiI*HQY%&6@=}nD69X><ij+blMd3#fig-hdvxyCf9od^0o_mR^7pQuKUZhv( z8LGbY^Lh(}(o$$v@qV72`R4QN>=Mxvqd*2_zb*Qxu|X5`L*pEc8;>;}p_c~Nc$B7% zPa2QW3*)=Sd793>)_BseMn7v@plA6<8c)$gepTaX8qdE2voSh>w+|{yiVd2fZyM*Q zV2o)zLT`-c8jsSf@m}LGS~tFEoTu5`Q;jEcN4Z^%3$#4;RpTj|$-mNgnhN>1v_T>D z=z=2hsZAb9Vl+oC&0}7q62=NGDCFSJXp;oR$~VAU1D-xC0cJrKEH#B~GVf$|Xc?%E z6|T4{SmV?LPZv?N5%w-3zwJpj=gzamQfXyjvE-E4rilG^z#6VE0#{h97Pz)~)7e>O zb&m(E;_{~Gf~^kf15h8)F%oS<IMw-qI6AIu1MXv`O?~RXE5fU2_d6V*icbh2Je?zW z2qoQCg(xfWH(3{Ma#h1XR>P<**rHuxWp<f$;WEoVu-p=L2#-i@MX1W>K$k<SKoX;c zxIX3(<@MD!q{Sa7uO(~&9f~OS!+<%qv&y7w@xBZ_KR^Koj=ePhP*wM9C+i*!mGZ1n zqK1tY;o$b@6!SUWv;A2|p8svU;XG&Bix2r+&u1ZHf=sCzrYaPxof+WSgymNcG1>t` zSM|{EwM`F<30t~b@laF)s0Ea$ny1m3M+dX3Di!NYec-0b&6FCUqHDO~8114WLVfKO z^VSeUTI<_;${tcSoR>k>0DoWg#0j3M?W!JJWvtMi!V;&(R68P}r%XkR7;NcI^<ayU zD^^^;DqMu}DwO`|I<RiN57^vVk|cJQOYfAQ+c<vf^LO15I_3-}o>{Uu%S?Rfv3(JX zXds#_J<x22cg59FwoUWE^W$u(5w>K)Bf((k_^t?I1oeZah?w*QYt**bZchZ6^H%0y zv1`ZC&d78u;{)z@_(?}FrGv9-Wsh-LHa#hO<zg{*BflqOJN7%N;Nor-)p}5g|3>(r z`|~H>^lqtm+HI88gBw*8#_zAT-BR4$>N<0i$xJH1SSVJcxM#cB-9UD;q$zE2C|cZ# zyA*dT?(W*+yz;`I0NKo!H|8O~nVWOIbI#oFju~az*T1WcHUD$bHS%LdnbBsFnQW$* zsb-p)Zf2O7W|o<4=9sz0F>Wh2XY$4~1>>8*6wN#{-z+c-&0<EGwPua^o6%;2*~l2i zGLA0B)6E1nVIrHd8Jn{OTe1~fvklv_9ow@5JF*iyvkSYj8@sayd$JdMGl|JeVJg#@ z&J1QUi`mR!E)Fi19C<tn_yiQqKg?r33s}fL?8|<HM8qVdl-Qp|9KeBQ9S3nRhp?DK zIgG<Of+ZZuQ5?-N9LsSW&k3B!Nu10noJyG<meNawKKdD;%4wWVjX{Q}Gt3z@SVoiO zoXHASvWl}fn{zmq^EjUixR8rj&Ba{8rCi44T)`Ty<SMS_8m{F!uIC1B<R)%rEw^wh zw{bgna3^<hH}`Na_i;ZD@E{NIFza}PM|q6Ld4eZ-il=#oXL*k2&3azoMPA}%USU12 z@*1!625<5fZ}SfC@*eN=0Uz=aAM**H@)@7=1z++NU-J#$@*Usv13&T;8`#Lt{KBvN z#_#;WpZwLee5mR;p)+Qnr`%{i<Q&`Gtk!xfOY4I@*-DaREIA{zPR?u7bxIknpD|~} zg4kIPGUnaxa-&gSQLFSdC$#Sx)&7BI_Gd8^BQebwI-<nGoT#`k786l<k@6x}R8x_f zic~L>PSnZMP_gR8su$-)>BQ2BHC$X2r5j5(R)4Yji&ZC9oka18;uFQC>Oal;u#PL{ z$5#f2o2!;pnp(&bTCZ0uOdM|1hwF`IwLVm?jV%xL*DBdxRvK2CHYY08dSaowIZ$a- z`sxj3wzhm(b+B5?OwxK*(YzG%Qp^{`P)x;aTI(s^Q@p1RJmq=5n7uVy(0W1Zg+MHd zojBDgsE+T5s^_bouX?_8ed+qr@imt(Jzsi(^aAMx>LXAef#wY&QF%q>$=z1&wnf#E z%WYBda=Q&xCsdtKbwcUL^;WL8a=i_u6KUQ^^G4d?NIM)!SEs=06xb;4>a8~i%gur8 zSuVG7x0SoC+->D<D|cJD+sfTG(L9OfNz_-Oz7qA7Xg?CwOVnSYx;iCRr^F_zlc<hP zi%nH0m0l{nRC=lOQt74AOEpKD&5_dy$?1gT<6!)flH)q9Yvd-^xv`y_{K!o^)|2Nv z-*)#^Yqd&mPkrUMMXiI{GGDV%E%z@U&H}VKUhC7;Uhf^!bJm0xXMzPM+ce+J;(eQ~ z7u9^|WiKO?c|(~u3_P(Q`eGm!#ZZ)9kiCqssQjYxWu7qVJWEez3M1*sRAH=meKJFt zCd^EeI!;0K#Xu~Iow!6y#ZpGs5nWMwuJl~#xzck(vE4^nDkWknmi`0Ub!g%M0RRF2 i{{RmF000310002YJ)+M50002S`7%!c0002dw|tVTE!i{x literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_AMS-Regular.woff2 b/source/fonts/KaTeX_AMS-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..ea81079c4e2ec7160db9fe41ffa1ab70098f3d45 GIT binary patch literal 33188 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≀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 literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Caligraphic-Bold.eot b/source/fonts/KaTeX_Caligraphic-Bold.eot new file mode 100644 index 0000000000000000000000000000000000000000..1a0db0c568e4697d56785a687649e98e9bacda7b GIT binary patch literal 19836 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 literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Caligraphic-Bold.ttf b/source/fonts/KaTeX_Caligraphic-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..b94907dad11e545adaf8fb1aaf54c032b7de1796 GIT binary patch literal 19588 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 literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Caligraphic-Bold.woff b/source/fonts/KaTeX_Caligraphic-Bold.woff new file mode 100644 index 0000000000000000000000000000000000000000..799fa8122ca184fff98b8f0424ae6949f8668984 GIT binary patch literal 12136 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 U3l~oPCkLN7RR5DR&Av(h4+#X92><{9 literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Caligraphic-Bold.woff2 b/source/fonts/KaTeX_Caligraphic-Bold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..73bb54228786739b75b05af392000dd214486580 GIT binary patch literal 10604 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%0A2%pt}O-d006uefE()!vxz3= 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 G<+V;xU{sp` literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Caligraphic-Regular.eot b/source/fonts/KaTeX_Caligraphic-Regular.eot new file mode 100644 index 0000000000000000000000000000000000000000..6cc83d0922c961a8e94dc0460bb583f14b6a041e GIT binary patch literal 19220 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 AGXMYp literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Caligraphic-Regular.ttf b/source/fonts/KaTeX_Caligraphic-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..cf51e2021e4d84b7fa8d19820387742138b5aedb GIT binary patch literal 18960 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 R`0M}Bg+C@R{@<hb{2v+=Mmqoi literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Caligraphic-Regular.woff b/source/fonts/KaTeX_Caligraphic-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..f5e5c623577a08e9c85da33e2bd383e32fe18c28 GIT binary patch literal 11868 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 DcOwsL literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Caligraphic-Regular.woff2 b/source/fonts/KaTeX_Caligraphic-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..dd76d3488d5b1722e8f929349a978d8cd953c4c2 GIT binary patch literal 10396 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 G0001QsQan_ literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Fraktur-Bold.eot b/source/fonts/KaTeX_Fraktur-Bold.eot new file mode 100644 index 0000000000000000000000000000000000000000..1960b106656db1de5df7206db47cb445c8e906dc GIT binary patch literal 36200 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	-0IiRIyY+ zbNX~ukn^Q}%Rl+}0mmy}B*FK+d-vG7AxcI%KYA)QN&-*KpAP$u>{aaJvj*i8RaJ_3 zg0`m4?lA)1jI2cJ@j%Gnm1MS(hL4>In;LHf^8FE?EqNj-C!+91E<^!*5^j0(tMv2G zQ4au1h#cIz8`}47jInJ|jPLT!;X)q7+f)0oEgBX;!?2@4$h{E<A;&x4>n0G{^^Sh& z;?X0`M!D?H2y-a5$8Co6Fy@|w+cud295J!e2;LS$O`BS9u1fth=Nj2Et0E0y$bQ2h zLin%L&-WroY({%H9W&<uH<H=m<)$6I`<b}9v}iOhS9bsSnPgzxBsoE}#;0m#ML+ar z#12faZHi{l1goZ<843uhFO9K)i6{9yluk@aPF=PqY(!-u!0|N6FIoBg*oaP%{acTE zQZj9u*Ot~+!tsklD@n23yuLde-+4yKuCHpmR?LNEpVX{M#8Zm|WGd*oruwO<G|DVi zr&xA$=cwN(m$XJwQgf;%dUyqJvyN=yFtoqu2l*85hg$QxJmTHFN<Rl(^$fSxIlKhL zbn5W_-6MU_O!r(k#sdO^o`ORqh}V!p4}=IRNv0grQv})!S_|q+Vjhlb`@`UP`l;8v z`tqgu*~#(#TBV{e$h=g9UBD)z=To{Y0E6HTd-TldHaMt<3<Pguq_-!JNhQWTCEV&& zfVd)KDX1738fQy^-9`_4`U{o|n?F`-0OpaP@QX8+8IF2%V)^TR69XmQT&;Sl8V#2& zSiYx+b8+B*l41&x#>lDqj?&?o7zW*n6l{p&^-(iF=xrwgM4q(*?a5jOaqLnN@=6{n zwJdXFXlYk6ySyY(s^$ES@lFJ8Azx_0poYir`$u>7)dotL9UirGq!AoX%2qTxJS-~{ zf%HxlL#&#IhQ>l>E-p~nNa~t)qC$8}@FW5u=#hb0-L4O2>Jp#J8ikNfEAy#XXmr(S zSkm-DxZpuA9TStp_>o_wzXGf9A@1EB-yBf)1N)YcW=@yKG?nMJcoDqILyN!#0WXSF zWO7gxT><ENb1*f4XfZhW`;}x-=#KMUssn~75P-;Tpc+QF`RWI*T|IXOR!dQ0f|bcp z=F+x7nLR<sOqU*a;sTfuYR471GXzu1Xef;n7Jp-!&cz`>HFC%eD{rejch14HIATn; zMFlfOwyA-d7tk($e_tgb96lA6&W<(wil_`{5<|QDW1Yx@$7c`b<k0SuQdlxZr){V% zAVTVdVUWHDebU~rHUVyHR>lLW>ezy9W^{x4;+4X#L}c|YEpgz&VC{G|LeK8ja_K;T zpV;Lid@kJzMSS7DJ+W}KoZ*$}@=vedJFJ_PA*xWN7y~>HCrlJmGuHAXN$fL8I3M^^ zBV`pMA+IFMy3Qw)eC$TWl+=Vt{PCr+SD$u#GX`DXy);+@*1))N^C|k*(0M<~9q+6S z!l4DMBHn!cqbCJHS_22b?!+~?3)eUq_NUD3PZ*-YRfuX)fW^u4uR=wl%&>ooRGQTv zdGk|G+;`>t*`tT&cGN0~ID_*F?m$9b4sW|i(-aK4Es>!jgDG+w$pFW~4ZzJ52{f4Y zgvfQv_9mO&R-sHnv|+XO%vjgy>M<|NA#e+WC~ixMehTn>OBEA2N|mt*k!XR@fhAs* z2&7hj#kLh8(~)7O6XEq@AZduh3uc~|6Ji)M%C}C3%2o4Z2)P{&g$F?Q?Tu)5yPQlC znBQX3lJ#uNBMHt_B+^_C31U*`L*k)BgBeXQd;y>e0H0$E1>2*D`RuM@LNp3%$HsV- z27-O<{whWkXjIvRh^!#SfS{gm4}!T;S;<FaTT8dq3Ir!#Z5o8=NzYVc{Q4=`=c7WS zsqy7(j@T)Y&xI$PJ@=dpC>4_^Y9nu$#i+D*PentpJ3<6m<m0nG`0XqPNjYcp>-0YQ z3tR!1<k^n3P|JlNgVvd?#=w0Q+?>2k0b2;A$y^K<@U<AW|4-ca3ed#b(Zj9g0K*A^ zTQUxICx^-NCX3!MPG+jOC(2zd$`>(HuBZ;DC@aXUQpC&Qc(SW({+TWYk!;b-02us- z8{-M3xUd@LmBJ1Uz`Z~`r<Y92ySkEJ7*xYlQB`rYA}ZeIf>#r~Nm~#5OQ{&I$&kNu z>$<IJ6DDuyx?U<?x@%%ePbBCQeME`I1yYAjl!>t`2My{EOc_}bt8cEn@E$?)47Dvu zc2c&Y6tnZ*BlCTEN!53b%HYvjMYW?#I|j^RCOa74RhGR_qIB~gH}9vH=?A$I77DI* zc0pQj1CE~;$zCGC0AlP0HUx4g;{R1QuEzLH!vCwBi@2Y`+?m|!>61qe?OvJNk%;Cq zGUVg-=(=MYkX<1O6Qwt{h}}c4f}2E)J9Emmhq1>fFSSb917Mu?ZIq)Ybhnv!i-&)s zuM)~968m!TS!8F(=Z^a-MlG863jRzy78i-v@CXCsDUa*x=>CGo^7&-l6Rvkw%+zqK z;+I5KHL`(-rIPCM<e*0(LM2~v5{lyWA#}n!qx7v|pY3Z!AbNDZKMvz3q?<hP1q+f% z12Jj-0fg0v;4h@pnSrrRvXSd6H!=eT)qO30x?u%0$qPTA9x)e2#e6fBXvT_pSQ<vA zCP~?8jC5f0Px&I~{~_)T<las^0=3<)z$<y?b&pL8valP`Q}tCu;kL7`<~a@FOAWZL zEWm13p#oJ-6}f9V)*-4KJn^jnn9C$Ud{tFBjzlVp#Y3gzoFsXr?ZD5!v@Y-Mx-7S@ z5SaA;zAo0T&LZ4L4bJj4P7|mGs{8)E-0I++Mxi1W*+~-ak%u3=apj(4YX|l%?;IH( z?9XKaKJFp%kO7sj72bWRPH>fb7%`uo9tX6<_#EiLmMI7Y-e}7}C}6*b($p0r6L3CV zFX;|q0hwTv1aT2L)X;ObV4P38pa*ej8w3piYKAF?Uk`?f5-W=&o}D@UxbO5($e~`M zG6O6Az`mK|UNcCwbElHQQqk}Re5L~|;(dX#77Im*Xd!hVlZWq;-anZ2rwsV3gQ>cx zBTym-^2xH}kA-~kuvy8PvOtsMNFcm8XTn~iQe*Ny-OvWJab#_E&W<60rLR8HSk=RN z+5m88jCT5RvGmA{qMnH>`QlK3s0I&Hu`Ov-THQx<(-YP;D?H)L%$<yxNOXcZpn7Pa z63B<LwkE4#tP#@19pv7?IlnC?q^LJk(yJ-R4#K52zec|ey?-~6JKjsDp;I%kc;&G+ z{96{pV5yRW95kUMGf4!Zz6iq}F%4jbQ1@H-k|gzTe3sSVb#Z(arToF3v)tz*Kk#$x zeVqp6p^UYVU`K-g@GrhcOQAQn8p&wWcj4TrlZOs8hbrYnEE>rwEQIya0HP}sf#|Z# zm!5Ue8g|nyw#W%&%Q6<3?vj|UqSHbTIdNSRCS{qP1DeM4R1-9v#eY|B(imMFJQt#h z7)~iXX^p(a9vX~fp33q8MWc>0Jl)<gcJX8qHeM#E$1UPf>m#ZajAi{$6l%q<L86UU z&%R@#P!<D9!Y}dU$N4~vS7@rQz6VJx3D4koDJ~&?IX*_J0wB>FKnHCS&&g|vK2y&j zjm)p*e8lh_9aLbsXjTa165Ejo6%wkD-kV$XhNiTZ?syeyR#O29OT-w>#5cbrd>S<K zX)@nQ{q&okftUKB`>$OY5=HIT55TkJmw$C>ej;E<1i=#~l=ea-N`OeO889??Xf6OJ z3_OEQ)2JrGrlh(?^{bo?7>KDjq6wHoRRwe@N%C=Ikm5|!{47+8Bnh||EV#DsdseFf z(qS5tN+N|M)}>zMNZ(<VBRl##D(}_%Pqg%(Q6(X-dU>0f0PLg**Zq~B`pLJy?Tv4E z>WP!b_wAXPs#lW<p9kajX_KLEkZ+7e7+}^jfLLgumr2;Ol7<)|Z9AmQ-(i6xP#lUg zM}^|F2RblvV}SaWhIS<<GobO)dt?CqG^>dH^bimBhHcThePrg?7P*H5%=^D%A|Q{7 z2g(<M6#-Cdr0r%Lp-#6(1aF_uEQN?LrtVv@wP3(&Wuhi1*xR4>hWs)gNg^1<SBK+{ zDWww<l9)Xc+Vb1fYRPeU1c88+E1uD4$nOc|>bjMfS*i3J-bB>)m}W9<daKn*O8^Et zL)BuzRODcL?~Sr@t}5vVcZ%BXs;n&UF6I2T?(sMQMK|IIPI>b?!mzCMmTaYX883lb zOKy>JnTU}hG8Z*X)j}3>vNvi8vz&kax^K^tt@wac>b%AK8c9VXa#$o0Y3-Mv9Enpc zE_#X)Z{bZh0?o@>HSQYgu&KRM5Ux^PmlG?$@V@E1N>$sF@cUA!K-4G{VVLo%C>7wp z1#0DpM>nkEz&!C_9l@kRrc`-4Vv0i08CC^k0)rA%Z@)+OpQ<K)CgEOT35NF$3|;y_ zQHm4;$Xp@3EH|=x3@izrjBS2}|IhRT+&j6?cEY=eAid*>d+r{~1CMzdkvV?(B9Xz2 z%#0sGbQ-b(4jdA-u!J0PToxEILn&;PtyB}72?E$nmMxjF8_RV30Uz|@!A|q`%LKso zJv2z_p+OMX-|<da##7)K?_1vd$iv6hmv&B14mU~}7Yz!*nsuWNuDtERc#NoB%`U+$ zcqL_Tfzjb@U(aO&R1$U{3c4b>N9J%l!-3$I2Qoms%+P2RfnE2~n0xXaa^7X59<Gg) z6W1U8o9tLL8@A3(?;N)zuaO=>cs^0CNF*qTZ7L)OA$IMB*;7cd+Sl~^EBW;!lU~Wt z70VKhKuiowW&zgAVXs$GMJG;(XZEn6dyBSSC?O@-WB3eD$TIa<q*-AhRu8Y2#ETc< zog|hbsy9^>pV%4p&rSXD<xUpQMf^@XW*Al|9!tXd;rToW&P)&H6+>5t+f9{N(~)W= zwKHJ^BW4J`3F66F<l$D2j%W7g;$BJD;O+B@R;kIJ_<)}j3>Xhce=$7iTuPSw#kLk4 zwuh(gSvQt;ih>i-yqPj0wxB@+H25m)Z}BRIn_t~Q1@6dxm=U!;mWz!vPAsS4nXHG8 z4FN0&Zu$!-&CQ*?_pVbX@&icZ3?u0WQ^)MP?I~j7XnU%AX56+bgP0Wk&WTUaJ87WX zlCLKPT_^Ik1T5tS2r>o9kMh8;@K3Uhl@n8^H++h0Hx%RE6U!5+YHi1{LNJgi2%1)_ zc~*V0<*Q~bSsfll>a!w^C{*<hmqen6+deJ##HmEHpc&Qt;8e0%9?idYNKvr%<`3bX zPzrn=m^kMB&|0OhoISW|YDWrbMGYooBh71iyDj*#mhDRvT9vq820vEADvR%Ba)4+9 zg*}rNmAwAau!r#Zm;`vRwfyw!W)h|j(P`OqYy$H@xy)vUe~xy!N4XD?g-&{;KzZeZ zKlb)F3ljeePd<oDpL_2*dq99!vwWNgTT)>h8O=PRhk$i>k(U^3D<k#!DrBF4pjMAl z)$Pc<8(f5V5CnMkTj^{6(i#|cu+nAm`5&wXWC!s4?KX7AzF!9ffrYlsmD`=@RlxV0 zl*b<<-231A*oPkf&;!>mp5MQ>HC(S|9qv)`C|j4}??ty64Z?gYWqTyoPXHD&S+NBs zg<f*%8jFA$x5EOES8gs8;srg^kqNK>%QJ@}W|>btik7z!?4BauQmQOodPir&78r(k zP%N>fFU8@0ahn&sc*E}|2WG~uGzC~mVE(C2P{l&4$(2fFtiG5)w$AMQ!f@OlG>oF? z@tKkcWN0*#RfS?Yq^h%#zFZ{QIb;y0w9_<&kUbbK4#XUgiqcLcQ?ZB=0^&qOPpd}0 z6^bKz)KCpcoz4eSSR%wYh~>mmU!hqy!$$4yIeMip9Gz?h>q}WIe4%}X(2k&OX<j9q z+!yr(vvUXr45bo^-kP_8)2Ol_#KIxJqUDCGwO}+9-0yQtrO%jJ(gfZg>I2qhti8!E z`LaO=xVOGP6}MDMhdZy0pB^Z_@R?Xh)DlB8cED5(?=-U8R7Eu*Y<XL>5Hpb_8ZMi8 z?~8Bqlmb1yX>9&7{|?BkH*otqd!AWmk&3(E@%5De`!|5H5n;KXuz;V)U{2Vr1UVGU zy+Gm%3`}ubhPg=f(@#ElV{)9Ou+~|Y);}f3EUY(iO{^IpoIQXBQ~y%o=8{_L|CxA` zb-tXbdYo9XER+0dA}p_UG;L;d=HzZqK3vI$RV0Rl|MexFg2V@b&u9pBiIVCsB0lK! z$wDj{;nj$x^8xa&AO$J%)W6360c7BhV^fQN?4)njlK|d-@jY+fp(0*!aE0>HqnJry z`BnGr<3-3o=I4&Vb5w||T*Hn+M8Wh52%or_7BI*d#4S>uc@-i<x*-A)@MSqjemCC1 z{G1=C0yh`;b_EcAuXs85fiiamkTiq)V6nMPfS<PAgkB8@aw2{9-S2w+)31Ku?z>JL zTi#Xe%VnZrm4Pb|6fe)haYYosk~>EKwqgVhA7W}#w%{XzG}Cm;b3l|O5C#m$g4kOr zA9By`f-r-K>X}E(9%51}#ou;7kXLY9g)`HMRnA}+_%1Xc2UrR>7WcVkR&gJNA>y;* zypqjWGCzE9Lsazp<|1g!siU?%6I7ADtHY=_h-BFdRoOO871Jas8OI``U<JckEk+L? z$ro+d^k(1EsKD#7sDTKxD2zk|C4|HsMY&u@tl#U`f>gJnlcxrTgk0Pfq_7an8(0Y9 z>8D5SsK;u9DS)jTNAFLlF<n)Zzo%FtC7OCTEGvPmleE13&HXx=izIaGxS#Lym4^%q z>IHeii7+g4*U_L<H{{7(*<?KDS4>{h8jVgf*f(q!GkQ+ojj{HaL4OMN)*uy=3UVti z>xcv^eu5OEk^k_4#T*~CvAoNQi?L$Zu$u#Vn5_BX3!783078ZMFqp_|SNnUi>;UqI z-avmDiELLocTY`FS<n^c0WZVA7XkP~r?Z$1hzV59{NkP=MpQ^%IK-Twa?tmjA~5)J zd)+8QO90IfZsYXP!z;VyXGdB?16d~$3V6A5<ea-|lOY<6u$s5?6kO!l&3a@C&ke_I zJDl6fl3DXxnGLMOz*c~Um3NipR>JBQfsx0Dr<SVz0D2OPnN6v9=+JCt_Yq%Ux$@Wt zOSOl7(x%1n$5+o9g1mZRI9l_0b4Y1W%<}L`HW-N>J01-Aopg3oSK@__JiP0fc%Z*f z9qT)Np2Qn{<rNb+vnZtkUgX~R&E>^nsk9tjm4k18AQ0NO^S;S^fY0><-<NZKS<_1S ze!pte2NVfWg?cu>I&<QBvoDp)PFfy6Q!H$q%vbm<eGYNb3!SqTOv^JskV#)L&Qo#1 zji&)+TLNmu0^yh#7Qth-@fOqbi2YwhBC(78vz5Fqj0~s?8N^o(ADrFM9v-Y`(}u=f zC)XLLL)XAc?xk!EuzViI);*u!J!KPum`M-qe+fp~GeB^wdE0$re9V}VF>0?KfB>+@ zVfZl2U>nq;?^+tgYHVqG%*+l{$Ac4I&+xR*KW4XTDbeyted8Ju(8Td`UR9C%k1S+G zZ^$T&=>Xsk+Q;OuU$2Zs<iRCaD0l5kwc>V6i(r+?eo7Nkka(UuE}8iUZqO&|f=7@i z+DNq$lB0oWxH%s4gkwV{1)u<n1}?6oORYJB2-yTiPpK-p%I~WvN;qPL?Q(0tJT$Ee z9y@OP6EWQ*VW|_DBMI3_d!*g>%fyEXBb;yZzw?(|o4K!3yf`;JR22ComMw~ucY^Gx z-Xbl|;#MDeaCxbmVk>kCpj9Rihh3>j+)-tg85=kmOZ~tUZhm&pc4Kn*710)m!JY%k zhP>z8!lFaki2Ie{EMYgW#j108f?1Uaf~E+6N%{@mi&eUz(iAWEnS!UdtY-N6sxBmp z67}6hrkAk@&FXIxZRMmW>jodhio*DqIyP?UM@~6mPbz@mm<-oWR%Z?Yi2(^h1`|aL zsJ1AoLKX;!Rs!kLUBcZonVLctmeb$`oeD7?F=iq=ARc<RHBgoEn1BOL&^*_|GEjxu zPDT?8jSG8Iq3Ic*8PSAdhb&8fSLNbkJqU&hkwJKaJTak`MZZ5i+rIl<Nn^&a3{eoU zfhF@}qR2=1Ey%OGxOZ{y>3GpndIl=xt<SD50L0ryr-#8bz|<M^D+w}_Zcvy6%p+pX z7`)+1GMK|G$sGEYW0M%~{NRsyv713Be9zraKlR#&?|#=k@49gA#IaV>fm!S_U>k8r zHc^<W1WD0tkG02ZAPKgFkAW1uAErrP!eCph+V93VUV<RA(mjL@XFV`*YkdUo`W`bR zhj8|7B^*Z5Y{2HXmPUs|{99VYN+k0v3@Y+=ExXhiOSY@ikM&RNVxhE=@JLDnfKl`A z%r@eJZ3jnWKHIk&<}%ihO~G$0mk=$L5__KU7L^-W;nbdNthTG5Nxz!FdlViDZqBO( z^U+8xY{~vqKBW*+7RN`4oR}?+@5yE8Wr@HF_s5G_CFl1A)Reu~S?tdaR(*E7-3B-6 zl2q~*gVdKB{KAezrKZWAaL_+&%bJtQRbjhBTo#g&=&O_g1FE*2y=0QW-Nyd1w-ONO z3!hFo-b4PXod{%0NL}+_m6jD1XgFQaLy#R8c5Brd5u$b^qso|lo?&I!G4z+X$GMMi ze@LWG_G7>F$Qs;o?UR=;^0M((qRR_&04{{(AHo{rT}XyN<_m+)uqOt(LYaYxJ~1}{ z`JX_sH3Lg3uX2X08Z5&}S7nA}o2qVJ<&bn?GNJ@*$*ehEWyun*`RKyiP_Ar+oL2-% z{y(W6@i@2o^-kh<f4lqKPrUP~Cm(w7@WIvP9W&!&jiEk-r28xey0jsRT;g=e4C*2T zslO$8dgx0}mG=v`>5WP(J(v+POQC^)gBn2<a7$mNJ=oJM7Pr03p_ez`qvtdf*NEtf z%q?J>z2#00@RsM>!>ZW}Bo;woEf7mRW@ET{FVCYFpn=E4yk+`xDPN>dlJCLB1G(1D zjE@CKd>cMK;FGX&;sb_%MDv+mEg~=WH~ez674e#$h-YAGpct&pfhKbU9lv*1ePV7Z zoLcn~+m2^V)6#cVRMXTmv1+h7Ha^uDerU=9LK2)I2Q5?9%6W@w8AXj`M6<F!t2ur| z-hu`LoxOuia3L?KyrziF@fUyAkmRC|>{aLHBqbL=mXTDul#%@EOwvPt!WSz{h|)2S z5HBEw2(eh|IXJ2rp@U2Hcs6P9S7kWV!0Bihn>562#^7=~WHvyEe6p`*i9?-d553B- z3}W45z@Kn}K06%owL?e}7o*`wyx?yK@)M(e&jGJr_Ea-i_MA73R^!C}pc&60+1`mz zIc$atXC{(nJjRQ@i5wIJv;hgn00>D5hi2Zpp%)9l8En1C6F=mEy8O%MN8Q{`XY+sZ zbBL!ujcgJaS)z35z%D>vX-ZW-iCTo^bGxYo14xvv1Be!{bMQ9-(=&JwjwiSXV3e$E zAls9%%m$n-Fp4X?pLqP?*W9>v_Dp{6a;4s<NwI3d-7Nrg0LpL`uuB<R&h$(3i$I)g z-vW!|WVS-M5pJ@;1(U-l>_RUrs}n!2mD3&>V&}a?v#=YS>1V_lglXDrFpAD0T`3%L zO)EYFV9i+!q>ES}-kHz9n^TT279y(d2@Yn<eN-&;DYm61G6kRKptqS4Lrz*Q<mdQw zZY&cIW{`|2sJ_WPKJj#`V9Ca)zrMrA3*Ly~@ked4R@EyA&Duw#UGWt!k!>~oL&Ew# zE1{)^jCBKA+24fTCd%?IucYiRhg4qmM@wZfjXYg7o|+t=fi5Q`o`BnWp*CQuDZe18 zzKJP|D6K+Uv0GLyifCItszX>I!Cds^qk{L;eSoJeIqpC8xIwYU1>18L)=+k{!e52G z^kdM>i62|p1<9tspx}6hoX{s9N0O(oe3^(_lCuG?f~8R+*nnwf3*qq#6MYWac{_;g z&M+LO6PzUZSQ5fN?;!}dI}c&8+*{xB>@$zP_T=$Oxlrp@rD&C{Bw<40PR2Bw<Q|^9 zWwZ4J*tY!IwuJBK=bj<mON<`@#ccaBZel9Lj;qs|&SyVvVMK61jo1dHou)1UjQ}LZ zbIkcA<lA&uwkz$R#kUsIwwmonqCm4)$O>Yqyn7%S99c9})jKy~hYyzhs)txp^?_o* zAKQVL*p4Z1yeJK+l95T<Hg7HLxz^Yl^cW%y?OqsG!G&Ual~SKzkI4Q<-ZaoZbUd2% zV2lE@<9E;B?f30evT|QZCf_6_<*|dhicMx@qy_RuR?!e4ZWd!<RZIERF@(mv^L1S) z2Z~b%irUFmDS#b@GqYw;i^j&0--H~PM8X@&rLpow)rLl=OHLGFy0N~Ph>cx@MAhSa z`p9JFnH%1~BSj+_?PRb;M7^@(3Q63xv>bq3tGT;qlg)2$-b=61pToxM%blGuSZ=WP zxK1w*O2ncHQGg+bts0<85w8+C`CKmp>h=Z#CRshUwtw&P(##Z=5f_UJ%Q9<&x1p1^ z7OQ~qA#%3^t6LOsXXV3|yyz)3xwM^n%qA3O_ieR?;4J-g70{xpc$em>w%D?hfw-O! z)5MU(_*J#KaQNPtv0<aW*SU25;09Dh(g|f%F_85aL}CY|i9W+<nO1##pud$#<&PBd zHV_PgWgWUE49tY2Vp$MOA&C73JgN{oOttaO>Tn(TIFuOn;1h4!H|xcUqmZ+!lJ<mI zI!H#Lk-);-Y^`-|<cKc}btCXSKFx1F#(f1lko!68^}@EGAj=k^OMr2A!or4QgOToS zg@OgW9NAaMHQBmiUslG7`%t(U1QX=ESghC#euduT#mA9%xPC&C{HGV`e>A@RXA<%2 z{6zpCc-q>0g!?r83ig$0bsAwGvINO8UbKW4x-Y}>Nxbebd*g8|IK<W?l=Iq($VF(x zT_y>B$+ciXV6Z2M*ZqP8Cr$4==@Y!rUP}X4AvFBzVUa!wWbRiL5@8zY+wX#fkEm6c z$t6Pm16`tDz<yxT^D@u&C&~&zB)oA=f#FZ3A}Np;|AE9vkq}2W!sKu0d;W+3+cEzE zu7!zR(J8kN`@}6{kMcTpV!>`PJ`IaMmO3*NaJXZUklNd_W@(WyfDH>|wj68NGfY)5 zPc4n4R#43rW(I$b>6c>3?`j%$+l{!-5UhfNsnW`2_xbI8$BoLY&q=dIn8@DdNi!S~ zb}g2%*UpI(R6HU7tQR`k13jCFXwj?=fS<_qCvQ9`NcmCOWAY}3nb)T7SsgZJ;42$+ zbY$3TOV}Sr!YV3y65Fkb!O8~0ivEO8F}$KyF;4go@=Typ?#Sks$Uo2za}(SF>>syx zzQkkyI6reb!fdAz)+_9$;zBkf3_I-Y(Zz5;#t&N(6aFrSfc?jct`=1B0M<t!c_xg- z6fP?Gx`PuT-cJn;Fh3Sq?edgWjrxL}JWB^Te|RQrcN)}yKL_F=*zpKE{cuuD$w`PN zfRa256~z+#^iV5l=+LixAYQ$y=9R>N2F-<)5HVW{?LM?~SQMI-2$EiFbmMD#2JcM~ z9n0VpH6XtD-pM@N7M&ubEG-}NXN`uzXU!Q`rybq=Q}RLb-?@G+gsn(m^%rvqUFc0W z!&D$oT=@=^g{}G6n$4cjM~-=uB}%Y$1`H*^$o<xar!Q0T21{5g-PZ?k4fG9@Tjd+A zA)$3WrM2du0Y#}s-Z#RlrjLYT14PZ($kQCC)uU7>&|(0Q$3>4)n)6SNXHqLX+eij` z%72Y)(ucTtF4hTSgqG%K>xEn_DEFG$nP!xUx$9}8P|qo33W>FjvbMQ23$Tuv&Pc3t z3%Z6oX3gywGu9(J)<p5?pTjm{q#$`CW9L2Mv01GBXWJm`^66Se_7j_@9w*<Y@KROu zzGW?9IekzXbj(Q;nz`5H)nU<5AHE(m{P`J)HphhY^59`FHL61f64tTkYGQA(?(+nq zUaZ*L|K{1EXkPOnRY_)l%VGcKpO6oc&v6xQ2UqxbK7vdkamy9^C?<@#@$AU_@{c&F z?M`E9E+b0dB|*lIZsK?wS>@<I)Aj=t(*py*?IzneN5bYRGj7fdF5S2^cPeYO4lgH& z72S=@;e-wo535J_UlxT*JB{`727RX&x)#iaWkD1(t7J^uB#(|}cZW1u>9hj6g<L9s zgRLsV7F9$V>ZGel-QQn1zXOXxRICWF<%ODGiN@p*BJFTW376Z<k{eii(cvEL*o^8M zAV9i2JqaUurCWmYnSsKSt|Pt8UBc%gg=ew0hNa(c0NHT2*D1fW48r*LBLzwjvDedf zaZy-DC`;JwZn!ZqR<HII6ETmitI)L_cf*Y$+my^D2)5x0EL=u6_`zv*82%RwXlybu zj5QblCK$E289)<kr7j2#0KYw1l+<L{AlDVmyNCBcvk8p`(xgpU_6ejh<aI(JDZm@e z2_1QFv0x0f(ptgC@UqmrRSGlI2uzNMy6`Sea*$oc&{?jL{hM44Dv2(Zw!t;qqs zfW2#yqnLddlHSchq*Q($f0ktff06~d=N>FZ>dQ)$Yr)f?%T5YgoG~GHoo8Wqwg3|Q zYMeWJ_WpDCHwF`Uf1nzM-@wH27Vk3tMJ&U01{mZ9Ug;%_FaQ<XJN8Hk=dkgH8*M+< ze_@L(SM;;7Yha)dc$p+4!&3~`_HRdUTUn4BtF~({LVyd1IY?9eEug}(Db#~;S?H@` zYX=eqW7&s~V3{O9nwjB_;Ke={0lN2{3_e3Acte0C;Sb`jtz)sOtYF&<KQAM9^EZf7 zF{Z=jUig~2G#%SDQ>PL#v9TQh4IttMt84yIGc<8w&SQAi<{?&tUdUh7pkw5}LLgD% z-Lcv#8kW!Y@JUT>O&k_=1qr9XR$t8c;vR2vULsGTSWse{CSVi1%^~uCK)dVExmDHO zpKk=A0Hzngfo@Cy6clv7Gu43saMg#)d|O8Kwgv$~VNkaQ5(104b1b(FdJ=0!PJ5`S zYinh%4yPFUdIljEKDibSR%T5MXAo<1c5L{32o0yRQU&onf5S;bG5{_NN2gnGJ82-L zQWIvxj}fg{ltzNs%?|_0^O-gOtMb&E_GrN<NY;$2sj+{%p~``|gBmbvArx1~o^P+L zm{bKQYwMTW8IS733s_Yw(^OXL`{a*aJu2D)$c*3oI@t;A-^Bg~%14JH@NA(=ftxce z$o8gS1i=<CxbR9Y%lgPv26Sez#M1K_Oz493J(>%LcG**y?S#IU@R`JWNZP^d7Y{|S z@Hnbtb+{12Dly{q_{#%k(w{-N9=O;AW5@^ukUz339(++ohA_fnktv@qtz)OE(834H ziX|(^ZPU$YP7j!&%#PhxkpSx2jdb&yn=S6I=r3ZAh!*;gwXh@^eSjQgTEm?a+0`#t zml0-@2~7fwCx@=Mz7U%)oWtO{-Y4huxIbF(XT4hI89`7>A`<-ttfWZ{lGI@;I8@so zF|a0{4@CTaN}tI~DJ|p=W<4>#_7~?7s)dw<Ke2e~r|z@jb&^;DDkn9nk!0uRUacnM z0`g@+hZH{P*GU&`J`B)zvNLvc-)@AmmZn-mJd9nW9&y5Dh>JUW9Bwe`?d@@R_RRcT zXF8wDq}dh^gylH)LM7-_Ajm>hOeXf+z;F{B%A)s>lQ33C0Mc&_3BI&jxe{iY;R^j& zEf4SkjKD%B*h0^xceYDc16jgQ!Y)ol5G`aZt*L50<Yl~VMb82+8MNsf!tZ9}trDqM zX(%>CRekVMKIIHTiem53vXW68#H*3bh%8#mWSc?uZ79U_@Q~SF)s$7}s+f#yKl&a- z`oJ%26=$?2g*`;|jDvlq65asa86if@3Oy<ENCeRXJ~=fWh{SS6=Hgxj$}1`z`q?QK zG=V)*WP9YKUZ=q0@MlY9>_#iGS40sk*HxB?NVxO(3q7O2eX5WJWj|yA>nK|Zi@eb^ z?8L1oGaCw69*}JWdy0VR&ufS!A$tTMovwSwMncSF%VDPkbjUKTxcz!!d)s^7{LCk! z4!9RK2`S`^d;<GS3w(5_QTmw&F5qwA2%_dQ&R}5(Yl{c*(5J~C<IjE}rt`)hdi_(6 zo?Kr$yklax5VvLO<(95ryRzD-OFgqG=P(NbT*<PvWj1GQ`bOM&hyG)B5)<5rox5Vq zopfeTxTXWT=w@$Vc3qJNF260d&^zFxE-MGvS|!jCz#|tC#jWDDY%4*nLQH1a&Y{pC zY$FEH6M5)tnfaO}k6nUc6`E|L_rMeR1k^jv$AIQg5}z500^!bK1(P7y9fV&9pO9>U ze-PA=0^$aIQp^`1=;Cp_SW)_vgq*^o*z=6|e8CVX$TKz*AA$^}dnYvVxqifiEzu*1 zQOz~2VOfKK?1e+fIux_W@iqj(;60_BPs$Z^xGj4h2HYeV|9@#$797WQUHkPmJ>Ani z-80iOgIOE105g~kvtS2E><a+`HbIFXC7K+Ppa3o)1Aw5U*s@|Lj$N+ulDHfzR;66| z@JCXKDy77#Y#&Z3{))@xROMF{r%Fk_l8@vgOO=pwyN8mPlA^?!A=r(<o9=%1-FNSO zcR5ezKlgl53BwQdOgLIHT9>zL0bUIvBT*mNY|4fxius%%X|j}+Y^~bQ^y*G$RtZTG zuM={Iu9fS_w4|whwFaU<r~^fP!gbi>7r;-O6<W`^B!<+Xr3uD`B9)$kfZ<K+4WA7n z_oNi$D%cMuA4p3p5t6f>KhS4`%otqQshnzyD76z(py9|;2K2P*hJcBc1zun?09?F8 zW?aq#<O3i#Sg#0v!4v|DGCPZGB8$z=+I%Fvqq5()@akMlLh?dD3-*s=X&P?@4Y=7+ zVynxdC4H*8==38PU6Th<soOudah!noMY)%Psfg5)YRyde;_-gWeAOs;au`_M?_fRn zci7Kq405>UAmRoZkS0M2Mb9t;0eE-G0UbhiE!Mp6n<7)5?u4Pnrfl`>Ws~X1)CyeN zkB8Q(SVO5|{5<jl5fkP41Rw-v#{7~X^ofBP_BXm*>=W%jSSk4=WxA%SwY*<T9FJW> zTEh@9NqK4b)@U*4uUUfj{N3T4#QYEesB1etZKANH#%;hJ1McD4%7U)Jz=7Fy?&5_; zy;h1v6l`M#OZE_!E(Z`S#9v{>vkiePvD~058uOR{10+k~3mAhLMRSFENfLwx-V2D@ z-jWR2qO?E-N%BvGG4gp0MoaD>PvHU2g9BFhBCrl6f4!swJ!K{UWEkGpXGogU48khp zMPzW~!rzFtF$;j63upc0g6SWs`GLVR_5%w!7il)LL6Xl8U(Uc!Bt!md2;ih&3h-m7 z1qxmMCA5UgHCSmF0QQo?K^f=9&~+^l0hN(-q>gI8@XUyu8P(;a%&Wf#F9g3PX@R37 zB_|E8PM2z`3{+8`yL4K^*uM+>NY{=i72+6s2?jWc38Dt+8_<Ke7&61AoU#}}G&Pvu zS)-6eF=_;+r+LEe=vS{Yb{#51)%ogZ*XT3?`8?27cz<|3torw30uR8Akx)G6AYB2F z#6xf2|56rU*)Q<^b91xXd^|mZl{6?S^R?eP+<P5GvM^dDep&WaUQhALxFH)R|NUhk zo1n0m0R!{z*<Zpo2jbtGb0XP>GRZgCK~WnjfkYkNctk>xhO2;lrg-NE+z|$}Cv_p( zK7*h^3_Zi&$g6-pjnK3nB<F+9FBS6P_z>SwLI9kF2+Z05i(!1SgEGF9tjEGkP?-v? zAsT&<@}YqQOCP6|{I~?TOXLus{5PRSAq7SD3aiCphLw>bQcVu33gV`6Q^k@A+B257 zP?+Ki1%;55c}B9OSxGU%eK6e-1yn;TmeM~Ys+7FnT%J4|@JAIahkzCjI$#&Vci7L^ zJD>w{qqmT52aASVqebL7TEP#)H@5;9Dz~uygQNqt&$yMP@v(Xp8{l1XO%vp=yRIdS zr-zZ(3x2tbK!)`bGli%Ky@T}$ae!NGOAG_Ld8Kb;bwVwVx;3Ct_G)2F5LQ-{@;cn~ z$a6!50ZLc(_EJnU^HBTY?<B3W<H1O=<Y)eu1ql#3m5WhG4af~Ax>XEhct*^X4}~J^ zcMB?lV#7_T2`=JGYM&E}Ls1)9K<37Hu@+CvPE6{`h$+P-gYP1Q#0O^J+cJXXO2o>R zLV=PZoLg(R;ayZU;-d<D0pI4o3>@diY!#YoHK6d&+mPOHD8l3hK1i1wivZ+i-1&N~ zTuLS^7ksUVg<RA}&Nwj72*rQKIwOQ+1jjIrkR?#g27_5f9y=Iz#E`%wT3y33i|y=~ zer;KL7G@Tpm!pH5n_=D;j5BqwuWu5MEj!sI<bfk;(ePtpZ-4y^EG>+xUkrV#0Z>7o zVaviB3}wTSaQV4L6TiE*i61`3E0`CEfW5hz#JrF?G-aRYGuJ9;P|O1MbQ`7z+1U82 zmkWTbxj`%zTw4kvFHQ4_78LY-_Gi;lwK8MzKBaypB1jEg8u9@^X<-h2B|!s595do0 zv3ZQ#)C_!W!B9-{B{M#uFtnBBuf^=afC!X4q))Uy+n$cYx|WT41L#=l;FZ~B)P*6; zleE5fF7Bjk)DJM@?zhtUA*O0RU&`_F&&M%V{|Shf3GO^MFq@yBn;2_XGC(qeKNzbJ zj2Z_xOYA|$ZLBU26bU%pjnQC<O;9V|NI_+j+un88fPaCP*KWBofutRzKP|CQ0!~~` z1K11Gkx9+|4cSvE>6P@nY08RP%7=iIgana1ub$Vj<i;8|z{>+Bgz;LTur+;>n9v0? z)UOT(M<iWJ3+y#v%P+@#Um4X#11accpW5H2isItv;&e_K3`=ruNdu~J$P^W;WEnnR zEgH=w=M7tu72{`pVKot0e7Tb)89sLUw?cz2BCc^lzU1TX<!2C|7_L<fjayy8>;@h7 zA0D{AWZDOVnDl)K=Xv8iZz9!dw`s*l3<`d5`;Vh*2e~A9Vh*^`aSwcL2C@=_lu;>b zM~j1SKHyCzD1<60#4*?f|Jb~T2Dv_(sf;(}hz(yyK8Y11>_tg{HJ;S@J8`LYS!3JV z%s4w3VSEO5w{dMF!a|qFVJf1s11sjb8mq#R_|+6!$5)xI-!gfh+9zoJ4`=vIpT7be z1I#I@v9~%c+c5!Y6Nz%tCZkgfVao$Mt`(OoA(a;`tJU;n4JG}<=U`TVDt@hF!dGf$ zmoF5`KFg$#WMb=;|L|v7(+&<4D?x2oNH2b^U+Up;E2oR>kKsGq$Nbt&V}8XvPd%zd zXzq~kbB#qnQGg6Y&<LV<?G9-h@E06|#D-|*PRb`j0ZlOJs8T2oz9V9Ke`&kM2HBT@ zbwQvv4Pl4;BasZ<s4poSthAc8`;gu<hW-o5SWr+cp98%#4MSQ(#uC(4t^hWUf*hB3 zgi2LW0Zd@#c94=)BNN=*iK|zlC@^dFDMtRx*CBHh30S%)0)c_gQf)&w(^d%h#bEY) z48qiJ`T#A;7i3ZES66PLoI{2bRurFK86Pd=MI#moMa*0f4#cD!M7m3&sFSYZrcd(- z4b@zK&UhTOD;nhRc1sN1Af{)C(VUEV+6P=nKprk*M%>~Xq7A$Oo{2*97ZcN^C+Q?N z<_3Kc_jM|~Ka;VL<Ac>j6w4QF++kSh2@x~RhSX$AOodug@E5>kd}#yO1G#`XY?;9f zLZG}DoV0j34j58Nw8A6OP`^K)G_|Sk%}b&Q=o8uRi;idERsdCPxE4}K{1rm}WK2$E z-uoA;;V+dhHA5(s@cE+9*5#|4S8AI%o;Wt}MgeP2F$#Y>;WP}fm%&RDuxNpZJ2y2v zgn0<fa}L?Et8gf|z_{-_78$p^lykTVHsJ-e5I=EA=W1q<#fw9etxD(Q4f4!dBG8Bz zog`wR%m)S!nYFa&bSe0no(!O#3%LP%^>|%NXueW7vt&h7L0a1|9yKEVn=glA#Z}g- z^htu1S>PAfWj33O7@`Uv!x88KwV*cV!&W&3bRtbILbNTett??5h0)R3l#dx-z5(7e z5pT_B;2ZOYtjv4=9O1{$#{@Z3S43$zI@JM>jIi%=f6Bj&9fYut16eR6$6$0pmWQ7p zbI@EuH{llY(lT5@_I+Mga)2J}m%#FA!!K!h&4}je{M!&1&7>X-4V3&ozbdM>AXV&a zJkj57;^MgHB=+<DA@<|QaQ%M>P%O?XU7`>GfY;nm0BtygjSnbPbB3z?drtsDyF);U zNp*f?pfe+8fH1BP1ds#)-x(mZ>N+jmB>ua;kRW$b;fPa9Wc8RV2N&~tEbEH^6F7or zm^*zJbK`{Df?TPS-gY5vyz*D9yT~5JVAHAv)5A5ovTi64sg;-zu4s10n_57Dx$b0$ z-<}*{&o+f@`P@p<4A}5$0co89V#+sX>vC*3QJY^i#fs?H8g2Qq<l7#`G6Ti6qEWgb zgNFkF9YGaj6_w(XOMfyn5$sF1VyKRx%RoM>0&?g~M2$xS_R=@MifWj2R_x5?1L9O_ zaCrvlcG*!FeyG6KRK;wqtR|EFgiFb|;%SwAhyNpPlWdhJ`W$x4<_K(_x=9_$=YZqT zZUNen{J!m23W^Ehki;zBkfA*Z+V)}!;C;l<<UD<QWRUiJYBOZd6(TV~^zlGT!pe!U zp~*lHTACk0_)-=!rlulgP%#Sw{41&+zhFtqcsqbZTT0cxgKmaHOIvl#$XO5<2$ciU zQzm>yxDH#0rii?aN;=u>3tDOD5Ls0t)wgb^!?&Mf&zueX^v52L6;F%oRrs%#(ARN; z`bz#7L^@o1<jI)2lNW(;>Kv?WKv-gwV>US?5HLYGHvYL9m?(tFJW>`lJr<9tmZ*(5 zImF1~31<mT571l41B@?$l->d0h`uVswHrv?$gd&;4QO6S;D=tmuHa#j-4SYSS}^QF zHqXw(Ko_N&!qTxE;2{#o(KI46?~P8s2x7=a!<k%|AN$2C*!+a&7EY^t7(SF~?$hug zEX{OMw2q{ZgljvIWOr-HFh5<Fmn+!OBk0B6Lff0h#K2%~04-rNFV}{E{}WN{(GlA4 zW`NDst5KoaxsE&wN+hNsY~0K6lCQO-mWP3sf}&Tz5qw*k8oYCXpV#cq4A_9oh~~vu z5(8vyjRn4xDu%z7?4QZy0`Ra5A-21@s-Wbef7IlKDDtJl0*a(Zo`3cEycw~iUt_@q z{${z!hvzn1PC8+wH9f9K_wVq*6ved}Y9ZfcUjR<sMVha=J6{2F8u7MK@D#So!vH(R zu^n^O6yn(A=ysJoj4twQlbuCX@2-W05r;&vJwGr7x7jH6T_C$sT$r@Y$`q^|<RC9I zE9a-QHYC&PqTd)@h$0#<=Hg+4O-_hamVpoyb7>QcR`!K>;5oq=S%dEk9zO7UVZbno z$gT_I#y+<sOMxhB?hnIdqx$mxxIgaz)F6^g)CYt@enoKLRI8`bX@t`B`mYSBb{>6q zP7A_a)P%o|zVA$-?_<3L7{aOW7?W~0-<LivS5wN8r>tGIL_~4Lm>nf@fYFi8<Sj8> z6;Be4GG(yF!VV4aTM{)vL?|%VzQV<+wVQqgMMkkS7mp90dx4MN(QG5^3kx;_Z^ZXQ zW^2nz)uXfhsUaUfUiM34gY!rTPKQhNfZ&TxEM7LJDhp}2C(oW_RRqQfkV#&b^>2Qo z(%vd31A?9kG)aC4)}zJIg>*4o?jOJo%l;e?gZQ>DXk7E3s|;AB3EGN7i*+WVej}F} zxY<SsS_}y>hPX&_2Np>#S-$qmtNq19L=jRGLy>?|D5nQR#Z1_`QRz5JAQY@rI)2+( zhqq9z%>$LRpk}h0p{34`zN!X3pVu-W*fuG>#iaXEv36<iwclS8`ogBf5=t^8`iy~- z^N_Z4a#q)B&_cmTXUIb7qKC6#oj&GY;(v_YlH@lpwK0BD4@U$^G42p~3Wwz}F!;p# z4EZ{+*2s%Op8$sy285fhNQ+v}=&&Ph0T{HS_dAI(gel1~^Qy%#m@qDxnlEiehU0^u z3FLr*sWUy8YIJ}a$Oq4sH+08hkwFPH>O=9EB_#W!C()cT7FE)t&naPhBHQjnw5#in zN^2V?ves-zMKpL$j^_FTftscRlRUlf;u0{;;f;i=Sjy#wY}=4h@QCuJZi{j&9h3B! zhWzlX5vo=;Yp`V%y%=<gZ(Losv9cC@b7@Lc*IEHacA6`||CPH1X8`Si2$v1*f!G94 zZ$Ex+vFa^)_1aZGs$HAfc`uS3^t$D?li$RW)w>p50<S1DdM!9ug}>Q5hrf%qETRUu z58Um&bAihNH^=*2<U;I?-nqoVr0t!{TnJFTUK<E1@y~nb2A7Zvy>k=k<b*L#FAMo_ zN9Zd<*%pU7M~Z~gIj|tOf9Rd_NL06a=K{CLoZh*}71&pL=Mr~@{YCFw<_cK1d)LwV z>)64^J2$wF^iREW6VG$DcW!Ztyw5EFzw9CR5^A0Hxfi%S;8#0b2~}ui99!Hl-V?~B zqO&G`9OSL+B2G_j5AfSITJGbM0~~j;?}Wpxx#x9G{lqIbxenT|<DOmjT64HY7bCXI z-N*BA3lAQ?bh!V*-mz1<S$0~(!xOdEaC6vM+&$WV;lSCxxxagGbGPcO9o(#||Gjau z<E-y>51hH1-CMi&akX_^`XVm9gT?$ZI@`s>JO+3za_H8(7k78AEgyF89zVjb^B~AQ zJO(%a;2!>8#;*rxO2<R=dKb^!LY5KHV$yy7kGpW~gG((xI5=K@aQMQm)2a_Ulg?AO zta&&3_$U0(g+A(w&*GU5-7%pjbudnK{7m8O81LKY>LVN<fX@4FPiTBk+*WOjGWYE6 z;nDts1E*PUPC3WNx4VyyAMEWPfb1vDdK(RX?g#t7u@*7U|CYI^3)9?V_gx3ObkV^* z?hcMGqVwKBok8dRzfAb_eeU*HwfhvKe)xV>-0?BUOi$w=>_t<B2ImC--@+$Pn8|@T z-o<khGkrXHX%ea6S{k^cr@p<7KHkP%9^)z~QpDf97WZ(ZiFn}Nm+tro=QO1baZXP~ zZMQK=H*nm-#HY3&ey)wDu0Uh*(d<Rf_Q8`qeP0Jpb%LLL%%d)M1OL-qKcGw3z2h7V zT55TWX{6%Gh*=-vyn*)-dO-r|AwE08h?2m$_x{K>@Z`(r!N-Y+>PN~5r!@We@#Fga z?(yE8?u&KI#xvzlk{iA6+=VFVdXmKZUR8a(f4t{h*ge`kJlVbF(EN5byZ3jWp4oL( zy|}l3<o$X3!R_P6-NRi6AKcr&xqEPgFFrcBwR`9s@9jF<Ya7ni!`%a~@rKu+>U?N+ z*1e1MzUy>Py8HLKH}35^?z42A<+)Eg-Q!7h@A&xPWTSC(^Kk#+@lpL~{~kSbV`~`{ z`?<*cKV9(Sx%U&~YES2L-02q~Pe1B)10RxmMnD;fgbHUBd(Z@smt!D5*n|cR!3Q0I z_aKU$X|QcGG-nc#)-*f}4wvH!ToJLiK?sU6au6%fO*Jr3!_{Lgt_|HYf_TIjHxB(a z328ZveSpp&gKrK(XbJ4K0<Xv#cMj8Y1D^0ru-vD>uop0SE+R+eS;T^N;A6W22#M#p ztB7R$fO`vOD>)9aoX7eJQ6;8fUHs@^e|UIqn2t;B;b!mH>K)s?W2bi<=^e*=#|ihi pyu8>uF7=MfE^Uxa3R?86oxhs-?Vk`CfAsIIEjs@6t<V1Ye*tBnm&*VE literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Fraktur-Bold.ttf b/source/fonts/KaTeX_Fraktur-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..7b0790f1ae89994c5e7a54b219c013f80166cc18 GIT binary patch literal 35968 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 K^48~m{l5Tyl6G<c literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Fraktur-Bold.woff b/source/fonts/KaTeX_Fraktur-Bold.woff new file mode 100644 index 0000000000000000000000000000000000000000..dc325713291c91c9fef5967e0d52d0366704715e GIT binary patch literal 23388 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 I0MWO6lO0N-BLDyZ literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Fraktur-Bold.woff2 b/source/fonts/KaTeX_Fraktur-Bold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..fdc429227adb718aabf201bed2075bfbaff70a75 GIT binary patch literal 20476 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 DV&7%c literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Fraktur-Regular.eot b/source/fonts/KaTeX_Fraktur-Regular.eot new file mode 100644 index 0000000000000000000000000000000000000000..e4e73796aea73b5a7bf372f36a27d6703679a7ca GIT binary patch literal 34896 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%0At0b+{OCX_D`rX{6r`VWQrMATlEm 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%0Axzvam33F?$txZa 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 literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Fraktur-Regular.ttf b/source/fonts/KaTeX_Fraktur-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..063bc0263eba6fff6ab62d728b5ef666b134f5e1 GIT binary patch literal 34652 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 KKm6dcU;ZB>;KKX> literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Fraktur-Regular.woff b/source/fonts/KaTeX_Fraktur-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..c4b18d863f31c568adb0b8de64ff2368cad1b656 GIT binary patch literal 22844 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 literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Fraktur-Regular.woff2 b/source/fonts/KaTeX_Fraktur-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..4318d938e26c1dd40212772f4c9984b7fbce6adf GIT binary patch literal 19868 zcmV({K+?Z=Pew8T0RR9108N|#4*&oF0Eb)v08Kpr0RR9100000000000000000000 z0000#Mn+Uk90p(jgAxcj36~cU2nvDN9D%J(0X7081A`0;fk*%ZAO(*z2ZBfpfeITw za24#>2yO>RMEM;if<7!#{n`KD59Ao54LhLB?=2Ce7%svjYz_gPqHyvmo9Hf`i>0zW zf7tWi?X9x?s0nXz2KTd2dTNT-+S6uwVq2GLs7I%@`ppP}T_K`1EmLr-GRPrf7W$kw zBuZh4*YV%@7SZDP_>iP%^6>mP-g7_UL3p#HkQbMNT&3apx%J=s|1a_{3K(o-8&L}? z)-c#uK})qLv~>nj+K64JcSgnOg=fW;_LbLOd8E^tS*;`!2`saa%>gAjb{+|f8jJFP z%B%Woy8pk=t^VG#e^qDyZdE}OOyow<41zEznBGv`HG9}|d^vnZ{2hOxad1LZM<;B^ zrp=+HU$AIRhj#Biq-=!-z$A6P{+BK7y-(e<B-z>{#2vNdk`7h!TI4a{)M$?>B8-nK zhahuZnjO!R2Ydf-w>Y3Q&$>Y4z;a12(jbfC1prj2`<IF`VKu8<faEUhkW4|4g7W)N z)G2Cr)yQGL*Qv}b(;tnCoL1VFcM)eKio}x+i2HwFG$8y}%Qka_7`l2d^fQW2urX~c z58B}rjt2NY5NKa(pYtv}bKfmQ0kR{7SUy7HwC%3Ag=4T`u)O<!HY=;oS@+pdfwUB9 z*aSxy0cuWWc)8Omhg}Y<eyIgB3zC`yGprHr^3bj3cDmJu$Vq01bi>o=f+s;JaT@G5 ze3K$@2;wK~+(h?(s+R2l+!QY4>Ky10FTUQX>@|N#E@y^XEe6!?4zLN3E&$X9fYP1- zas8AoNDev4F#uEoxrv}Ih!;b-)jfA1#Ikc++Fi(<i{9=FgE?DM@G0cFO@C@Iw%p-o zJHHKvNc5@>*-`~w+K!pM;z=O!ivkmkMIZ>j(l&mcU-0Ff&b7q<ho>w?AXo_&A~=F% z%!Vfr#FK}a<7-3<AXdog^3xOY6XE+G?iKgbT8kLSexcflO8V5-GRT6@5CGrZhafVM z-Dp+{P(VZGUT_?qj(J~-5yO)$QKd+ep;Wm^)*tup{--27xVrQ)MrEoT`L3V->)*J$ zzV?+T9(&}0gI`yhA8%;^6R-Ayg;Wv4riJsz0CeL2r-*c*P-%1qlf@>Eoo-JMCAqH* zAb?chX*yFi-7qcNaXmi>qc};ke7;z&An6K7%5DGPusAZAEmm7*mOVSi;mmcpJzifP zlJ(@{EmrVAKy%hn2!g<OFLf~M^UtMbbj79eY}Nl=2z&vLq#;XB|3TyCDcs$sM81dp zQVz8|@(l6$e<}4T)a=>Dc@I1RoLIjCCY2aKn3jhDg7(FoYiRLlwKLPOH@x|rym_}g ze$4&X$y2;Iu_^{uFIlyLHSc3z=P#s)dxDq>-Jy~o@Mm>Q<vNucHZ5nBLS3N6wvxTu z92hwpaDO_;Il!PnP@ne&t5*ruBAi9pgBdIX6jRBs{mRx+rMZq_9|X%`4`$@cc1laU zmvhv3BB@i<>r`I3`AtriYh-bkM$BoH7dl&j1zuNHAa<eLc_$W4fEH&+eF!#S2|Eh# zNWxH6d;e&v#cWfQxmqthS*XOy&m|4<vbXfhDP#Fkg+n6@15Th`G%Q->1>z(D14kZY zx<}!fK`?G}-~J0zeX54e@KP|)Ys>`IK%0ALt<H{JB=5}U%RW%2lHLU`SAC!XSW49N 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 TnS<+ZgZ~G>KHm%580?|7K50xN literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Greek-Bold.woff2 b/source/fonts/KaTeX_Greek-Bold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..1e289dd5e069183e3aa2476266d7552237977e0f GIT binary patch literal 2904 zcmV-e3#asVPew8T0RR9101H?E4*&oF02T}Y01Es70RR9100000000000000000000 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 C>2&r0 literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Greek-BoldItalic.woff2 b/source/fonts/KaTeX_Greek-BoldItalic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..8a18d2e35e20f57da262f493d1ae9b5ba4093ce0 GIT binary patch literal 7648 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 O7)?fc6!Rzx0001imX;6z literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Greek-Italic.woff2 b/source/fonts/KaTeX_Greek-Italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..20559746fa3459baaff76fcdfd45eece7290c323 GIT binary patch literal 7436 zcmV+n9rNOMPew8T0RR91038ef4*&oF05iY<035LZ0RR9100000000000000000000 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	T&f- zhvGe`zdn3Gplc>JY=2F(W{W@3P1@PZ>Y)y0iWkH}>(Q{%C<78Hg{YEJ{mt^`CkRJs z$lrzw=KPMKK*)=ttuf))Yun#T&C<GU0YyB@Ig1{mBbfWfS^(L(Cb<t*p-ef3PE`2v zBXF76T8>|aZ;84o^fbW}X#Rrd5K`gMxo$C89~!%7Pw+J?8CMMWIw63)0MxbCFJ~7l zS5p1Jp(pUDwseq1YhC4KL9|WUwn-sYGvNvabAr3T?%4{ND%qBOoKf~zV{1a-pC8I| zM5|PBCQOM|IB~Y&gDfnG%E>oSN+w^)5W@Ck^faD;!SXdZdYDJE)4DJFE8L@>9dWgx zc5P&801CZ-{pd5l6FPSWJ%cQCR7|1HED8<ek|u?)|CJm>K1hEBxgBY_z46gIy&7c* zBfT>taZ>)3#v2Gvh@rqKMv4GYtkv{mH9@q-fV$>r-Ai1#J&?v&XO5$0Kh>x8ON0$u zTg2}jFv{_CNv>eM358&~oy)VrmCD)rVDWc`*kQV@D8mNX*M;VbbJ^sa^pz^JvDCz5 zuEag592`pZVLqPO4^OfJ6WLed-#2+t<eib>O6z&}W3dj8gfRs~O95H+O}nyGZkqyi zmA)ko1WqnD%L%XClx-KGRLWh&@<Q%GsqPmwW&<adCNmlh5;~mE2HQe7nxDu#m`4|C z;WMbM#f1AYQB5sf$x;<Go9P~8<gBhK6B>oFWdmf4p%rUlE_tbZ#l@#N(`3D(D=;yc zBk*g)r0Y0dZO$z`Hq+mw`AVxjgrjcH%^m<`e8leexhO)5yc}g_iZK#f@vt$2a!r}p z2@F@i4iz$C7Y^E#t}m{+A{Pd(5gW4Cfe^{t!)j@gMCL(8$_xRkr5gaZmj|op#fvHt z6y6>1%9fFY)a^szRd?Rk(KI`>d2q}90QnPHI%S#x=eMM`LwV8agG+XGud7QYJo5qz z7KQ`y*hULqx;ww(!GD(Ym4BRx&JXgDhj<Sm5pw&yvaX6@(JDTd3XXoWT&ddn*0P>r zf73k4Zt2!*5lt!FzP-G~WEKg1Hj?(zf#ahwg75BygboCx7>@xziUUyDTmX4^Z=#aL zMFQ`vEIR@xSZM~xeew`$g{wIA1g3aa^ii5k1BNECUcgH0KNA1cKuj8paP}!F=V?BX z3-A(W7`&Gw6W2{*5TLj);9RFxarT@{5Q+&5B_Db0>&&kAk#d;fk-{+?Dc;H3M-0<d zK%QZeF;UTHf!_m9p9u%MDf&n0B?v1OnFBq6$}Uq8dnew5tv`X*(7oMHsHD(gDQY&E z&By1Ct+2wyH(#C>b?I@OV4>NBYColV-quvw<iSbBFZ#S>3?mnm`10y5z({#egZ%vC ziXyt80w9MEZ<*GhBscO?m=t_`C}`l>cAY=I<I%lfTWtF?ia_XgcZ6N1XMo*xN3xG- ztSjnGb_-CJf|<_{xfXo(Xo4547f7)S+Za^q^O$rxb2X`X6IMxttAInnOPF!y!iJ%N z%4_bQERv&gD4*Wgx-`vE7WrY`snmin&GHcn(>-9Udo~;>I?`qqSn)NBs54kaQ%1UV zrG73@QYnJXqFdP@yL|4{l%iKTDC^YEE3LkEUW@IEi%WM<V05V{r|MF)(D2TIJ<XBB z!nQxt=AbPI?i_93rVipPjU<px-ei~8@ZFB>U1{3;@aPr{Wjcie&0x81?4!>xsh@8D zXF-XmL(3Ovw-5GgaQ^|B?gi&y+y$X*O^3WF>#wYP_3=WbZnEN@!+q54f=<_S!0T&N zr;9J`mQ}p+5?^wCNttU`Go?O$t_11YaFKc8Ld~K_t6mX)JYs=6aVP9*i5{lz_1N=e zH&nd>Z~bn3Ml-QsrLJA$E#rhXh%VVEf|iB|RcyhR%D#1*vTU&cm9iO>An@K*WI&I{ zLSZnj*84ct<+tMu`Y`<PA%Pna)^-^Zy7(kd&&BrD_YC|JQ(Rs*H&iy`OuC}AU8C(i z-q@XXjAMixG+hxrJ6+G2l%_Oc?X+}o|9SeaR~OlG%@Mq!z1V-)Gt}YlY!Adkp23jp z2vy=Ff@IRlR!3q?A__vgSsvP?TM`|<i9{0LnTVHGv@23VhEMceb+LvFDk3(2Dpneg zba(Q-IIXD==MEm|<)a^B{_d#6+mGvAF?C;a@Il)Ca;fHzO_8zlm6bd`BE|WO3O=zS zR2khNkw<~<;S7RaJlU*C|8sco@wLc@SZhaHle@Nm_Sx~o-2MB9#fP=IqF{CFzpSig znXR!aEFM;=WZ26s>?h4VOVp`OAI`(*x(2VOcl-c0muN6wWbZVRws$~pboNv?QT3M! zk%}2U>Sew8+)1G}@pp5E?RiIy!M3H=LC<&?&|*;rg>2&Ds#6Ia8I(p;bL%{~R42gq z+xMp+A3UPuXIaYqs*kF2@eH4?ryL{e?8Zp#NLkv}cJXssvP_zC#-T1M8|!VGdQ85| zW}VZ8QKg^9mP^1md#f^4T=9oP8$4Y!uiE_G{q;xtjOLB<00=CNO|PJesFx&UZQqc` zTNC(iZL$5IhjyG;H_vE}9T}=vB?-O1M7LVRf2zTg0jN<9b|<%e=aF&a7gCBCZ%}vQ zZxC$LX=F5kL|I&q0)(cA>Etp}o;>zErQby_GmhUoy?X2r8&_2g#7sLjmj3*so!0zt z=>O$1ZO<nbYovD`g{P*z*1WWjvH1K~cv;?H`9{y{ivB(K#_T&1V4*<VqUmgw6>F$9 zE0leZ0a6?z#2J+LMCs|Z`qq7y^AULc2XktD)m2JoZQZ-|U)P-H#I%rH_nA}K=$0)H ziCyW1+%&f>b{?#L5Wa|ay|Z9KYZUINU1<vU&cFRTCFyuRvcYxC`sDJdCjX`_6V;|N zgLzd81zf`*D2$4t6|Z|AB@7#ygOfMNO6*=|5Y(L#C3(!MpB9W15hd45n&}HnJ!RJ( zVa^+9lbG06dbxGvtb%S65RJ&*i;B@M9Ha!7pVNUgb@!Sdst{2Ui64Bh_!@b|3r|_g zOVl-5`A!+8JobG1_=2Z!#Jx?#1WGl50Y-7Tg#K^0EMiZK_=!pks+o@9^;T!Kli$sg zK5)wz`6CS!gPL*Md2snMAt}!xQ^<3TaQ40h7@7(0-!kw&(ipscUYkPq%B-AtLwMir zpfBKqqijQyQ3}4E6t{@u%@|dt+j31n9#6Yy9yZEjN9}BS_Ss-L-MS@)oz8fxcHZz9 zlU%>{KbhDi6dZ{ZQTVHHiiFL-7&NM6K+3+zhAjsy`|HkwZD-*D0Tl9x@_Q=oM`><^ z8?{|>pMKE`Hj!7%3lwkv<fRjqodWb{m?n_2v-Wd(f*~<BgL36=GoYU}X0$RnL#8aF zo*gj_qmteg0X~Dst`uR@r=GZJ+6*hlrJ3sH+(bxqn_U#uSx*>dDHJ0vmxZphk}3CA z8@m5Z)eX3e$7&|Qe6=(`eLn>rer0f;d?aYowe6CLl@D*{9&G1!xa<f3hP%Yvvach# zNaNSm$nNaEOilT>Xj|j(@<3I8o&95*jEyQSnT#lbtMjSWzepx7kAkyS>2s{)nm&8L zN)bV2K7fp%uw{|m2cB3nDz`8c^-SAErWI?slFx>w)RB}>F2F7c&hzo}Z(r)FVU2$$ zTfH0=smK{3c~Jj`NiP^XTJ-y9D3cW-1x#^Eyfx#?O<vohs1j3_o?gvT)$run|N4Gy z)0-@zhB@ymN9e$cyEt2Aiiv;^K1jP|3O&7N4t*IFM8#@{q;1pOgeahLfnG87zHs>J z-%ZgK-6v2%)lJfqU2YHzz<H*UijusP{Z7Pth9p+>fI9`DbS_xE`(!3vIr%ae%rwf3 zUnLuxVr<2-uCBFF$=JnQBGWuGj~QB}D!a6}=J^>mdluNVtN;SI&Es{Iy^_5AQeTxq zRQgErHUt<hGhV}VTqZG@1n$eO(DaOUL8se0Hxo&L3pXp%3e^Q%k*w|Ow&tm<9+!!a zN|vJ{rG2Ais8=a&<KxQUtR&<AX%J<qbmbMM(*H_ikoeR&<#haDXCs%!7c$ZHGW$F4 z)YgFC?yhT`(;_$0WAQn$NLKzhr$LNYN1|7WUjlPQHP-=-bNS^xLs2HKoAUZZEDxLf zL)E_*S9cJ8txHCy#x<D<=Yqc1rmnEhmbf#W+VD%FwtX)V*?7fP>GyXjKwyv&V9W3E zwyV!RKdl+aLG=CKQb|-MC1uRyj&<7)avN+NCci>_GFiHu<yMvj*y2AVRO<WZN_KCl ze(y)Whaj&fa4Y(ouiv7gJ(lnm!I*d?cQXMly{klGVGQLPiPE*cj8cRo+R|;nBw|Q@ z!k3I71k3!qWR2WEpDrW%yN<6)vFZys<yw(9uj%l5v)w}iMZa<YvNBNy!OL$&hsleX zDKRl>9ph35-)r!H2zMtX<;S(1wWo7Bg)*UUhuyEot7x|8Gl{R(;5f^SRL*(r*d4dM zAtrwd4GZSrlFAE8go!^I*UE|07u-0)H(CYu3*tlgxoLN?Q_FTtuoa?NUcr}<!t<ap z8qnW2vGF!lT9KuZB>mKz=R%P$H>q8e^z#4hi{~^vrPV-`KD_*}%Y&fgh)WQ>T;9Lr z)>Z4v_OB8)(uywCn5_OkHlt(g^Rx3R)ptxA0wz*Rg(ga0f!dYe)VXRNPk_fq>Q^rO zuBA1x%+K$Qyx~*jj-8s%-Y&(IgUTVPsIMK)<`jL9hrH}Pp9(+f)ws7@F_wJQYs69g zq+yLgS@S`VblzKjAF_NxQk~R({@rA+Xa5&3LDbuRVfP{sKzQt?rEc}UHbC-gYQl{? zt|qV~FWah=dPB^J^HnC|4rJMq1>CmmZ=X;7QBwC`rIJCMsMH#!OuKp_{L{;CbaRWJ z3OBXO+83%*t+voR(S;JP%_J6Q5CozGdcJs3hrc#j-vOST2nR~*%I&ZJ<Q9*0aQfVk zIKd`uu{x+$$B8Vf-E-d?_3JFxvqG&sz1BDf&RZoA$RgMi=Uqf_QXuhKOY&S%T6JE{ zJ#QW=jefh-Bzfew`6p0bONTi(e8g^RHaBNmv)@qj8eXMKY@bV{3~jNwh6LPD<IPVA z<h6GIFox)_DXCh<wtU46u8`qAiVsPeeglMl3HV<FyPYj7W^HI)u(m%#p4@eDM3C>a z=^g8))X~;oxDR#vo5z9|swJs~JiMTmZTBCZ-oet(Rgc!;*HQ=#jacagR2?%rFi7+R z=GIV_04iUx=4IO4!I7V^d5t9_w(GUS6K%E6e7;vcjkEa-><04UUiF1uw2?8llT`<- z2XxviEOu{eFEP_Sp4(+(G|{?&q)Pr5v0?|n*n*kow)r`w^1Sc}1xptwBJQ2n?r)4B z$}B<<DI%0P69^;AIfSEf9}#2~B2n7QCM2d=KSnfaQ@u$MTL%g*vjBio8UPTa@C8B$ zLkJbjD8g8?2jLWXgc9SLKS!b-?g$dAT5m)&#rofKBPHC%1O(Ag!U~Q6B}T2`c(|}x zue_#iFUScZnU4CfKFt}qQyXLxCwA2|fmH5RRl9Kx%BlBpWTSiC7*c^F4igtnV0Cm2 zJT6y#dG?caySN}_E<BtVCU0mHV&3R+LW#SIi#zo2$)KgimB*n|<kEv562i$96~CU+ z<-?Ce)RPn=P>mU<mlJC?N`(cUlx|WW!!_q(&>DWWDReJef)<7kFX<Od1;I<Fi)-Li zX1A2=xR7l!x!p)w9gTszIn(bg(0xmpgNGfbTkuX?Hx8B~0vTqLwb<4cLw7@`ga-7S zzGmMmU5mD&BeRfVPYk!vMIDj378_!M)QnJqb$f^fYs1)}18TNo-f~TVc^3zJX0B*j z&>{LEP-bANvJ_0>^#v`knm5o)z!;4<D}UJqIz_rIr0&_yUB9^<>&Bi=qqd^c26;X3 zvKnf8Fud8~(DK^MPmWqwye3#7TtuK1*j&l1C>ldE)0%Vj0>0x~I(@gheec^5EQFG# zwJ53^6j$Ov??@-~er=cUqNmkh8hwSQrbDpyB@T`$Q|gh0UGrM7j}7gVVLdLePtFsf zC!r&KOaud-nhp8PGD+84N+7Ps$*)~Fh~x>=yAu!JgxxRg6x79cCcqwYjqRGih{uKS z{nHVkydIx-N_^d_SZNYR$vSi0-J79x@O@X!;q4Z-YYvD80u^p-cKfBm)*<VD@23MI z@UwnxFo;6}l8^`aPyi`#NrX@Y#ZUriD1|a8hYVz)0vwGJs-PO2j0S3<4(g!+8X*Tw z&<rim3X7l(7Q+%)3d_jVe!k1)bKwzOyf}}ay75(cViy;WjOCF_Mh+Q2;kk?R<XN<L zwWUkYLpMK7$n$Zmm(9y#ZAt?#xH>E?Dv(6Nu+c~rouG;^j&W$h6)szrCu+G#zKaZ) z49)z}6%w7~mJ(Tq;l_(KP{Gw?S6zLiCdIu$JT&8T^MpX=#zq=$Vn}n_Fsm|LHdGG? zg~P$-(ESVF1!t!Va6gC_c!|rKAv}<~Is87Hw?OCO1twMTEjj&rYj@J01%-tR6;OK+ K{==b^D=>CCk~<Xu literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Greek-Regular.woff2 b/source/fonts/KaTeX_Greek-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..48ed7f118fd624431cb38574414f692b26a3dbbd GIT binary patch literal 3036 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 literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Main-Bold.eot b/source/fonts/KaTeX_Main-Bold.eot new file mode 100644 index 0000000000000000000000000000000000000000..80fbd022363e7ee84f211c9f814ffa479d588815 GIT binary patch literal 60688 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 literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Main-Bold.ttf b/source/fonts/KaTeX_Main-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..8e10722afae5f5f0d9ac4dc5245d445db9151f2c GIT binary patch literal 60468 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 literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Main-Bold.woff b/source/fonts/KaTeX_Main-Bold.woff new file mode 100644 index 0000000000000000000000000000000000000000..43b361a6005e845717c8de2fbc8980830acfceb2 GIT binary patch literal 35480 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�fb90$9PVN>lhfq%jzzlZ{qhVZ& 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 literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Main-Bold.woff2 b/source/fonts/KaTeX_Main-Bold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..af57a96c1488802f4a5a3d59cac03ad04860ea84 GIT binary patch literal 29492 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 Xf;9h=;B5aP!m4RV$0k;o00000frDRh literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Main-Italic.eot b/source/fonts/KaTeX_Main-Italic.eot new file mode 100644 index 0000000000000000000000000000000000000000..fc770166b5e86b6a9c18440231ec09449c89b634 GIT binary patch literal 44132 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 literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Main-Italic.ttf b/source/fonts/KaTeX_Main-Italic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..d124495d7b68caa27fb15435bf0004bfe058e5a6 GIT binary patch literal 43904 zcmbTf2Yh5#eJ_5`xqW)?qiLEMjb=3J8g<R8tahdCRa$M4tljmxt=AO;HW-5`YeOKR zhJ^4)Ae4N<EW{2t`Q%ZOyd)1oNa2ykgOL15s1M$QkixU2|Mz$9j8@xh60c|H&b{Z{ zd+z!5@9%fcN=%X@xAeFqOP6-;JhJ!f4-fvXBz^2G&L;LB?(UoW$nvlxu}AQGb^V^T zOK*Gn-S3bj`7b1i`_><RFwGa-=OxK!;QHwKOSj+i)xg*Ok0hzzk|g`PZeM%g63%;Y zzmxbjZom8G=fCtTzj;NH{IinumM>g5w{}+j;dlnup2uhC0#0b};Qx&04d8eCg?k=+ z<fs2NeFuJj6`y~*``-1ncf9vLjKzok(#Ab&k6dCO=Iyw)gx~3lYxkU6D8K4gB<TZq zrhf6#y$?M2M_;^fMv^}AINE&e(*5Ty{o>Ql|CuCtA4U7i61_V<FR%T>m(IAye=4Qq z@8FE|<==huH(K8t|Fo$oXZa5$E*bb(|Dg~6;ie{?kT-DsKIN>qQ}d$udX+fyD(Nkf zB7SqJLmHM|hU3>WnhV^3eUQCXQgLvZ|2}>{ZGE$EO1-T09MSM`N&1mT`oaGeKk(Oq z^K<mP^p7^>^yaX10%QAGT9SU@w2YVeH2)Zyq;dUcQXlnTd-2!L@ZB%n#ktgw`=kf( zc^lu9UX62q!`>sk6(29#ls=DhPvP7gJ1-rf_Ba>7=VJ4-2j8psRPnhJpGWX{BR=c+ z+$GxgOFMCo2l1Qk^=|%cX_S9P8sT4%-pPL=4f794L;TIskgVbNx1}NWgw)HO(mt8t z`~x`u8nnlG^nC}~*2MSU;=4~;z&$>OYoEjCi!wg=?!)Jg`8nwTp1qs(Z~mBVG6m0G z!RH+Nf^;`Nw>OV5zRmCAH;sJ`?HBR;oA^BkQXa>AEaDl9xJK<YoIl4tgx~Lx_OLzD zaUR9-7trS2`2GuNl>L*qHiWkSN^^_xFNu5Z+5Dy?ZD#Q~j1OqL@o)J26OR4(tXStZ zNAL}K*$jwx?h|wN4*olM_jltx>HWVT9l*Q)4ZeR3-(SM_Sv+e+-jE)`bN&dQzX2_O zLiFSbsgwAJRY2#n_+U8APeSmZ#2h$-*OU_AMaU-jFpZ;#l#|A!328+-BfUa;mGpk; z*I6&G$%<^q4*Bi!yXE)F?~~sz|GNAk`6KB-I+{*q+&|jf+{7KyQXW00q*Kz`ww{u# z$u{|yw)Om={Nc1e9Z4t9^96MM|2F?&^Y1smx%qdS-`M=x=5w2$+AMDrUO4^2sTWQ@ z|CQ(e>iI7}|E1^u{P{0D|KFegvv00_^Yk}Q{@q<3OOo)=|IB|(!^|{03aPqAvTy+x zWkuB_-7sx-htuWuczymrFcgkNWAQ{%YLimwOg7h^FBCgUo#jebwY#UcuYX{0s5U$@ zIwp-zOiEMr9n&+jb35mE?Os^ivv=SA0|yTsK63QfaZ*alKhLni8MpZFf$ir{h#wC= z^vKH}CQb5U|5-Yw*`gs;(hce8(%f=7z4$4~b#Sqv9X_$t7>GAImRHZGFCSfM@ci1R z4XC*F_1taoOr{|%H>8=|>?bfoGpo~G4OVHSSI>7fcqM%{-T2IbhEh23i4JC)nOmPb zw6c`RW#X5Y(v1TLmNJd{ay;D_rlaBI<@6P+(c0NY2TnDAr5inTy@y(U=D<=KgSfnw zZrBbit>R3YuG#2lh>nI<<EzWd%kc&)FE8gB(t)LO%gbF2xssksH<bJu2Bgj$SZb)b z>4uh@#_*RLY_+SQRB{+s`s@|;w&^rou^vu;<NDlsL+;Gr{7m|C`ZDf)rAN)<wGJ+= z9*D0UT3*U6<7)lz5-!E*rJ7IfYN(ZlK2!b#%z>C14L@_!IZSbGdac24JKtdIxPL?K z>}u$hG!4=|v;HYXx(!V*%=+pwHCde%gET6i(CyO9+;nGVYqHJCwUckN?!w9#!VKPc zH9dDZw?>2zGbP1oHXG?U2H6^AL(b>cX01oqZ_&Ncj$Y`z^=jKYIf!R+)1R>0<hi9x zJeOJS%yc!Jl`EXjHO{Whb~RiTyg)kLaLg>wd*L8Az1(opuS59d#ILS~8@KU@DM@1n z)-mjcYi2clc{SZ|VbZ!9p335pr7OzW+2!_z^IYzcu7<a=cyMX)uyrz?!Fj(p@2gyq z+%rd)uDIQx-`aG;T_z?4>rP*B&|gmc)nFk|Le3vpx<Z_b$(p_l^3r2FGdXl?9mlQf z)CIgxSC{c7^BDj9Du{Ruscu0)a%6It;+cjt`3c6D;0Aw1x+3wpBTEf;ZaO{Ju!AXW zc<}0UdKHg<#^Yg<OPZd(yn4l_l^YM0<5^5o0Pp56cQt~QD~!HFm}mM9SFXtP9jRPV z=sQ}uqSAM)az&%>c;$*t--*f<gT9lMD<*xHD(Py2o$6|Iii7*Q8f9^Ce^;ZeA~l@l z|HK$m7-JjmoyHjHJA*OOcNSx$?;OTR-|ZM9edjSo`YvFM^j*Xl>AM4Cr0+^4JuXC` ztAeTVtfpsZnuwlj_-<5)->Q{HSGmyzN$Lg@&x6};DoVMv;T);47i|Gn>T2|Ck%xsE z-JMrd7Mxpx8X_X}Zl9SOFZWf_gJQh>XvgMmlxQf5n+}i8OQGKp+IV&{H+-d!1@T4$ zcz+D|rd?LS*lWXGjloJaJl@q9da0&h!gVySfh1BWpRT6oNq8}pyDwj!&&@+wEJ3Y9 zEkdG)7z+mQ{9$OB5CjDOizW?orhM*lHJ470U&g&gu3k=8t$Q>S+!L+Rja8EO`oX17 z^0b_ef07sE*zz>#Km*zo&%+aQJ0X3b=Cz^(xo2fd+4Gszv$=*mvvwA0h|jFWalE<= z*}cBc8ioYLoZGoJ9M9niJMmul5>LVXZt@Tegp{QM1%SC%!B9}`*Np^sTtnx)7zF-? zr6DbM^;zJEQJRA^o~{;}bC4Uy)QpMK4Fdw6PVdak)5C~b<6_F_1)4J|9a*ZT$6*_3 z#Lbhq+0`l6^7yqIm$t00MW`E@Yc<!T493{im}rh*rbU`nGSAn)VvCfMm0Y??v$hk8 zd3?EgrOE;jz^Sd%pyt)n^{vyQb*t+&ZFW=|!{yeMYi>GSX^fOFgNKM&E<-GDcreIP zZB+6688KbNfUVgj=E^}Tst^)ujI&T0(BWI0+IruYX2toNF~)y}`)J-szl`UG<C$&r z&MY^_I7gGwn$(^2{u!Ei8e;Q3wqAK2uN<_56V@Jb=&v>gAd9<haeg;+E(`b@gJ`o* zY1HtwNV7JFc}?$xS!>PHo(i#JV-eH3xAF-|n#I9B956cAU-<+RXAa;%oH<Bs=5Xl{ zwV{K<)P@d@P#ZcpN^N%F;25=`gX7eO4wk459V}Cu862FTHgvE;ZRp@6wV{Jk)Mh6R zPE#8?I74mdV3pd?!5X!h#=&jWh7Q)L4IP}NHgs^V(iq*E=JWKUF^SW+i=!zVT@d_) z({=o~qtY1LYJDgD5UuYLN7VXmaYRk;sWis7nqH(IqUpWjh?-s!N7VGbN@HTH>HYLW zG<`rEQPT&-5jB0N@<~(SE$3;v+%V2H<n{xPv`kKyB*7W~lS6P+*ju2PE%*D<6-k@^ zM1)D5bnr>L!3^stsEH$e`Z<d8B@<_j>F1=nbu3G>SK8Sd55l{A<I)xR?Cg~S{d&%L zTw+T7jq7l+&;(BO@+X}Jb98=+Z9dsh-VAFodqq7vD@@b%e;tvIAkNDZqQIYJ&u#w8 z<|Gf|__Lee6Tg4D*-yX4e<8{G^9t!(KxCelzo%4`^U80jlj^55LmSf0Ywy+z`bUi) z+uCg3v46qwtn&k|3+^TNv!06QPH)vW?fbF+4+D<|L&2Yg{#W=bk$;K4F*Xoii2qaK z&yv5=R%rWS>iJAh*2sQ1_h@@(eyFgkm?-{Xhte_K@v4sBF5Oo8ap%SIq4FPAp6mMU z>iO!AyWiRKV9yVFf4}c^-$(mT^#5?+6@#I{4-c&l{dw)_;j<$<N4_^YJvu!$H1^x$ zqvNN?e{uW^6GIbsPW;xyKTK98pP2l@6rZ|n>fQBh{hd3G?fAj;()2fGeq(lZ_MhfL zbF*`g&wXxZ`_8w__sq}EFU_CF`*VS{{0U}5mUPK@MpKx?d&>RZes8hgo9lb$*}gs= zeBt|j3~rZn7wGpWV)}rTmQL4g3S&})ahWeHHgX4+>M>9h0lRz&H<5yik}UHTm2vLk zd*bylPBQ6!TxR!gT?z0#%XNP!$fQIpm=2|F25_5zrUlBZFO+1urfa$EfUh=Go8<jN za<(uy$@=?3!GOjVg2_D#G7kiI%eJ^|Xx#X4Fd>%`;bfJ6Ari9x!#~KHkNtrjbupRq z7Y5>yWGNnsRq34@?3FympOuop5%Tq{$`#_w6&aqeTiTOqV^TiXHkKOGRVm4mVmNs8 zzz`mtWC0o#jjJ$#aSaXPxc^13G9w(Xq{2xa+!2jvT=6*Pk`6_7JahBYd?FfZtK?#4 z$bMp1(yMrFw&BI3#<+H?^MZ~KY);DKc&B@$hot%Xtfp}8ap?efI6Lb$xa72R(<Yf~ zDwAdRqJ!CNKHHvqFFtVJ#fR>F=<Yk$*Nz`s+&wiu?JwqH{=q(<S4);_1GRp<VJ=(5 z+t-H1*c78V&;z=QyIH^WD;UrNZWitj1@xS*1#vx$Ll-ME-KDx2O%ys0fPzyjcg-pM zE*A2lQ*G!0&&LaebLVA;L%#3QzJr=+IM}o&8)oK*@XNpr7Z>*JbBR_5qpGH<@e}v% zH+^om-H^FxU^V~XwI|VQubX}SgM|YAe~-<!cMs#L)1mQS`+(*)<=3TmR=E$ybQk%Z z?_jn7HDQY8gDm`-FW;67c~sT9+-!X9$#=e!>Cd6d-aVj$BE4<%PvreTHb<p{(mCnn z(%Jf&3@|5-r}72G!6ivkC2bw}Dc4oL4ylt3U0!!GL$cWo+qz_D%zj+5+u4eVBewtW zAtpWaz=hjamJgjfd~R`JVtk;lyDOK8hMjgGdZR8&S|Afa&49>Q^F3s+K|1b+rMB3$ zSY@EYB&!h#!=e5@;@;YjI*`j+91YeEhiZM)qBaEi!yV}kM0>~|&W6!c%ejPD1_Ra& z<T2gJ_{NouXSkvnPA;=J3)y;m`p4WI-E+Fzqh&jozJDkjjYK>{rz86Mv{TVGUS84U zWF!#qxlE_cZJ5(O&Rm_HJNnX@(S$irRK2XctISmvC^#K1PtL9s+B^6U?IzTRw(;o3 zYq{byxTdmsHq8`o-0<z+cP7NSZFaz;Ej}4@xq~~IYqy*6R~}=wV*21*o6+tvnWmdl zk9s!#eST=+>0)#~k*PmaR6Q*D*b-AKnbb%<GtS+!`=BFUz4<*k3tjh0=`x$F2j?R$ zz-<YpDTkP;ozb{%Q<`dTOacz4D%vGUb1>7UnM72ZejE~KL+-#Pt;1h(FG{K^uR!xb zF&YM6kvI=QFD^DJ(3~S%w~!@Ok=6B=xK;B8QE`KA++gVEzX6f~20ueXVo=KyTOCc! zp_z_L(BRDxNDiCkxba=K_lH%kryqOtiN_zk{MhAJJaYe~+s~aodHm?Y?#c1tp?oeJ z%(}E-85%tY<|B5SgbD!{S;{mF&U7>I8H5|>EG09=NL@796f9^pCgn3&Wm!_aE{q)a z0v8i&gF(T+!9bIt2M56C7Dx9}lYHOMpy2Q%Yh%F>zrQ`6DJt#JkxDI~afde>&dG9e zpVG}kpMKZEeW^BAsAB5eb!paS_Ku`e-f-NfK{I5BdOTjQ3^kmU6Onj2o5~j3m5}q~ zzUiS?RNNlb$Mv3W9jYbc4Q+fq5)ZVsg&6m+N+iomxvoOA&{iwjS;!U6WbO9#IeC6A z?tA(-YTaGKZJjeij$AlmKmH~=-_cj-33>x<D%az=YFlp39yd)lvlZf<g=GA2Z+h3f zzw52NU6powvOSj#Mg5-MRG=*cL#yyCxik#9kyo;p3;Why&%|JN*@BNr^BiWGtq|pr z9gr;JCX@Dfar0Ga+9}^ix=oQ4m%}n&+w9c-`3}D<>{QHzof2bs>!t>c_e0p&a6LeS zx}U?mA|r+~i4hrW5f%!GxT3!gv}xK^P%;d{=KgQB-`Ds0-Lnp8$IwIb`+Yo-Rsuh( zzURc=<)3`yc$F!t61eljzyH}tcHdons%qd7-c60Y9?#55ZS^?b81Id<3{RG%JGc}L zOIeT)Zye5UJsa#%0Lv5y2c}rx7%_=8kev101719rai*$@>JUSk-TkxHvp*Nf;Mqvs za7|`nWdHn|M|&+Ae4f?$E{x@n)LXCaou7`HDwlSUFR}o4XBS*2F5QowGADQFj-9hp z<GnrUHlK=_@e5a@Ka>KW3w7K#)E^25AS_n}gJed-RAI76dWsOAAkOKUAZLvP0}@B_ zhAYLwkK!JTQ|&Bkx=qy$m>Z~{sKe3LHYIDC%@fie<IK^~uc$2UGGwKr(}{KtuWCB` z9@F#~=W1wVXCyhGsQiLE&RD54Q<@0r23{ec?rqNp0wpGU>>;~6#>_~YqB`AS&O1u- z!dOUmxXkw)k`s2tbjH$dZ(7j>k36;c-}wLKT~bMU*&-q6^)`4b{C<t8lKKF=F|f^X za>}HW!g)LZZ5cwV&{hMSRvD5<ocqbge2MN*RxUiZB$Wn+0s{qIi<VVlefS}mKjGkz z=@W`Y(_!Gqk->cG0j_K8VZ)xuJo%*Tbjp`6XR|U4kbO#i-II#Lp<I3wn`P>V!_c01 zE!W`Wz3Gjr>CpM6$;D5FZ~Rn&F#tEtZB9zxfnSi8CM>VnOFkMLWBAF7;8-7N<*Vlc z&2!6jCj$e+K~A%@0v4|I2}Tu~lbkd9GYC!C)R%ojzcauCQ|^MMxb41J$&Y}}?Fh%) zqs;d58K2|yye}7!L620=xC6dPB$VjTAS;NReuo{E{vUGRsd@q;i!mQ1$wj&iSNG!` zJdy{A&|o<aF(qwmxd?bZ+owA?kDt0vQ8Z2ef4Z#n$Z$7d&mvI}oKgHBeH-uYkb13m zci@Gk6%tREgx9|MGaw-_urtZfBnNYl$O<33MVwy=Cfu=1FxeFk`@(JUP_iuMHUOP- z2V~AqI)}!NPy>>Wk6-e4(wNDu(E~xG&B$;RYC}?Oh#$dAuowPX(M+&B7_g!!{D%$$ zH;|v-0nbu($nt;Hs89fey14m$-pAjAsIgmm{bD0Q{0IS-Rw(FkE`p3g#fCse>m37h zLFSUYe(kkh^t|y}l*k|5)`c;CyxEbn{bX?6OzOzTqjpmYv5-po+hT>Lw^nR2Lrrek zL@)+)TmjCT<>;~Zy**Ky9oQX-CIic|Bi_+DJTUb?I#VuhIh7nJwMEoGa=_EppN32P zo{!h>{*9wM{F;`2b#3hR$4_*XjTinjU)9{*mB0F6CDp03_HgOXUo{v8eJ_H@f6aec z>X+`V+j=nl1)=Y(S&HH!D9tZ{=FUZ^4KCavm)x4D5bi((v-INCtC-&#F9hU0%geu; zf2bqrQ6b0vY)b~fB9P!<K;}WXvj|HpCxPA`ZG?D(Rs93H_HO}$`7_ZuxXOy++P$FL zdoe?*-FG6JIhNHKkB#_r{b8fRzHfJVz{vLGZW}l38{gdcs-i=inuxGe&h0!(o~X&b z%+wfogh_jVGZZlo_pp=CoQ6xt;3-Bx?g7LHTv9LvCU{#h;Tdv-103OiVF<PX1KDhT z3Z2yz9Y!al((DkE)g+r?8aDIN&vTD!yHjjFctdvxmyH?gHxA|6&g7o{Cpt$l@cQUW zKUCIK8T{Rxh32DWl^A`wo@CPbvn$I7_tz(fhkCk8#Y`$0L)3E*yT<{(_h$<etjX<7 zZ_r|JHxtSm5els5BqOU%7s{3?w7kP0{cL)gLU#^;MT7w*Uy_vR0Q5r>ZlLpDji&AK zkxZ&koI9@B2fFVr2YT{`mKmB)`PD?#uBi4fm?Y9)>6MEE<*>ta8g9G7gC0!@p4)Y} zr|i&5?RH1yK**!phcG0SGoNaAaQ9@D9mvLvaOUtx#^pb=5Q&f0x~HP9OrMQ8T+Hap zI1oHIkM@-0Y?~?@&a8uLnylD&Jyz}+AKsgabo9&Sv8i&*ZI>@7rrTvIvb*4O8@2rk z_;D5d*av<*!}ivl!xA^8#a+_~I|;b4_)<3wQ#YvQ$<!qTFpQ}y2w1?5vJ7^FLZpDj zL!payQqr`Lc9kz>h_wu!zV$tB(cR+9>$|Ifh*Y+|HI!R)w)pZt+&PMY*ZWZTa_yL} zf2bh={9E06Zw1PRyoWO@#r#yUy_hfLZNNv^zz_jamhElE(cnCbb((&Ju*bw;;81dG z!Ac_L5!xDBd2j%J2JC3K4agR?vpBDaNIMIxi8+!*<y3_4jwfco8@`yKJMF6J9?Zqk z+%dCb=it1{u(@`WT~lvf(p^I{b~ceyQxT?C3*HziSOU(HmeG9N#p-f`DKKi`w;I9S z_DDT3knlO3cDq?{Wozwi9&N{9Pfuqg6wZ_vLR#t2%BxLQ>(&Ct@F-cyb?T0AW`BRI z*F~09=(+0VB>M*VYM1o+x+{Xvyqo-4hWHVTMM^8bHPOI56fPoR@RXvcC&68zMR1Z& za1yaXwuudL8O~6%`Hd|*U%X|sb<cYGX19}6O;OKUk0pxQ@})?rvn#J_@p5>m29YQ2 zAfOU*y!}lg20<+VUT_Hex5cK=DWG<3$fBzT_>27ST=s>m8X4;t3Ho)}<BO|*dBT}< z`<Wg;_R+AbJn55zUc+$to&HdWnMuS2hRxHF^?F>U?g}J7_+FKpVYf%-A=&VF)laj# z%RU!VSz*sVe-wU{x_>rmxI7MHWtnkPmTeAI2h28Giy3fknRF*)y#|`>m45V0h8a59 z9&(ziCVnXJ*Gb4xQ3MH7#B3nK*IUvJr9u!zXv-#7ZtTTTa>Vtky|3v*Qu*`uiQ+l+ z-k;+UvaB5k(P(g*ESw-O-eRw`w=)pPb(AVGo0cg1Axl1zvv3GRu?&Jm5KvW!ow!C$ zD+!m7JaS>nEVy0vhy&o%{-J)9Tvyw`>*@}LYqsR6O2841>k6h^4b?^m@|8EAmV@fZ z&KZ9w7nYT-yyoi7wuOB0`1}xjM%DwJ&5ppp#bT<){kCKk@Bnw%D}iIBTy@|14|w^m z$<>fIn%8p`Zm$$i%(bUF=780b5A+D=I0!#;NZKR)<QdMO$3aO7k_sRkyoU>DCa490 zQdQwSKtF5RHfV`NuxPbrMD~|xPC}U9Y7R&ousDFqo8Ox#{c|)XhzgP|MvO7EZmLOK z0|?c+w`%EETW6qHE|rQTjWFze2+M^$0^hMTXj6e&&ij_f2Z~!^JBX^c%(x4Ie5j>S z*_ZoZRJc3ZQ=Q6tjZ8V@*<A=~u94n}>Cs%7+kDmg=Xcu^YBuBdMSQ_hTT*xACIXIN zrmZ8H4f_xcq&mHbeVxU=d;3+R-L3AdbVd_1D;>Rs>RKYOyZ-(&qeyw>+dKTe(C6E- zT$>-u-Wg4IL=$_aM%yv_OnM_|`U=SA4D&sM5L#|gGz)s`z=JP|s#;a3NqGejzAS^d zx*pQW+L9EvZ?#1CtrjR-CTk5t-D*pe|M~7pL{GQwN{^Hn*p~2ViPK10cO-hhc)KV@ z3Fd6Qimu;x?d{a#7$b#|swCVy1bC%ls8$Q*yavRVX#@c_gA{-l<gFvaFb0577iLiy zPyt*|DnM$4V=oIcN+FMbi2cZ!4!M2)kqb#U?_QreoQQL;M{~<cX+X0B$5ZXHtvZct z54<PcquD;RVmN(~B3Ju=)6N~LI}l$QMlj3_<)Psbrpb9Orwx{9Z`b*0Sx00CpUd^n z8}H9LeeE{ipD~@Z5O{hWF<}XGEdcf3C;f8WwtGikQdeOLn|2V6Axd6bA)+h`X}uaE z1_h3RsYgEGnu`=8-sGYP5@Xvtfg6rDyUJFS=<g^pX=<W4+A$jNNd=Z~X4NPhf&&6c zqS#&F1ufteIFV)D!dU>S2%g$liiIqXq`*j;Ea#*OI}a-fOyvC&doIKrtY{P%cb}Zf zv=8rf>5jrhr?ZEvo(of|v;U~BR?QH+e62qd=-BwXq0;DzgBhBy(4)i_VkZCP`ta#l zzrr$R$4pG$aV})<D+eR($y39+y)+h!jIY{QX?M5N=PVjNC=8`-pfg#lY^dd-J^h*| z?6v#SC12lSoM?d@C1i|fF@j2G_Dql=GHdG1yiUn5CS8!AeIyNY-9+ReV@UX%gj*6) zNYKb7E{Mi3lR))fyfq0>`_<Nf&ou$yH+x-kXA+{9ZX3lY>ZKRCrJ}Io%^@@8fN)KL zDbCMLjP>`Hi;0-SCXKKW10hmPq;U`rZ6$mN5d`Th6>3o)6efUC;7J<6B8aMn2&NYd zvZY2p;tfW<irW)+IR>lwHmEOndig%xn+X)c0ef(4_X786uS$14yk~APqG#BFvEBl- zX(*E{q$bny<)9~!Qn_lFvTLIEcFhhjS?xrU#NAt{Br3<o=S`-6_~>1~zCPB22qsfv z?_1~$j_*8~Od&IK#n+@S6zKr_xMW8i_&pZFLaAj7*oFbzo^-a7D>uE2%yYaRM2P`X z)(mQ{)r~UJNJ%>#ObYlM5oZK2xt-Zbco1${Ibiq<G95Ra4DGwYL{~DHtlrr|rPxp+ zkgUXm$;!r`T}7z4v=jcaHTF*Fo@cU%nus@vfkN9~;TmLwSmtI|0f58-tkVksRUvFi zSa*So5JXh!K>AmVogkuX#!l$6AhwHdMJIy=Xax|z(0ZBomfNaYVBE+WTyc4N;(oaH zx~_!c+g|S9Q|0kc;>a#rPVp(KyJxuI1X9RY6ukeS^rURCdx7;uq-;F}>(?A7W|{yk zc^ROXymufsm{qh$SqkWxw8f4krVP|FX#u_hQ#RZiU*Gr!P*$1cSnh>ay6H=?+ZCMt zIy)aSt#t0+(?JXvJD&Y{{8dEmZntz)dPm(cKP$_UwwJ+gZBBQ$$s|qDBsjy0tSRzE z%6b_>Y&8Zv67@|K>gp>trt2=UYhBm(AWfo44A4!hYpZ=g2X>iUTwv0{{R>AIk4{Z= zmGkYXq{rp3W4Xs}dy5`~PC%o=u365i5KGEsS#FDE;s{?QUYq2iIiV85Mk3`-DFH7o zHbDyQ``)nPnXe>Ki^5GlIH~!%%wv<f&m9W6ZG=PEJma}|TPF(_eUnKu&OIZET)5h% zsxhU#RXo8y9`q=li3@E$&17@Kk;qhsxuZu9C&D2oN+D#MFV#^>jaQg2>FSBNig}M? zz~d`S1CdC?avKM?*IB%K^QUr<e^y$P9+Cb>-CR3u!VxrEJYSPgkYF<<c!e4gC_oU9 z0tdvk4s1+^sg<;|EgS;W;9OaOh9=#(*dV+3ALx$c>$dKIv#x(I!heG>hZ_fQwI9@i z@6yF{>!(h%ca#=O?H%Q;0~kPF1NDfETPQ2ErbuGZ=_x8#35Q7EUgxwz<04QIcz|_f zAU7b|SV|@wN^z1>H<Ll{rXseKIGiHjx%>{M7!GG97FF5NT^?`m(Ajs-jU|i8)TvXp zXvhY*Qs#F(QmnptBFTJfx!`Sgaku*L%pg}w!SZ;2K!x@m8JSvq?{YO8Fx7zJ&t`gq zNmFi{2<1C$-f%Ko4u}1pc9}--_~DxFKlw6;9Ikx*iG!DdHpO04xMHe|^?S5e4IIqa ze&OMQ?}&pPoj(%|^*@oFDWW_`k-JxBFMd27irSc|zV7vGILP#g%EH3_u<i+roI0s` ziX^Y2`0G<bUXK7dc7%|enwwGKiMHf53Cf^~Oj`pTgNyL2C^@vEn2>gnI7m`X`~Fs= zYp#n-LR68C9GtF?jtus9wznmMet_q@m3bQ^afo6;3m7IM4j>^=8v<qgK48Z}1T{TJ zB1f%ilWKq8;6OJDSx{{O9|;XX8z40Wj;IB8c8on+t=XL9fKIh(j2%ScOwMZD2M@=n zdUc!ZOdSgB^LdbGKzymIby@vNI;(U#pbcfshGGil=7B)v$f;8(XOLs4I4IlTJ)R&a zUE>?Szws>BblHf)c+h$$6JQw&tCPD&Cb(|IAV|>rn0c1wne2ggLhZ`%g(UvJPz^T> z?{rOi>KSNy;T4hPNx>aQrdC^5P#7c@{WupfdMk_J5?Ks_TyAXUzS=B6NsA=nMFd%r z48O{{<JN6(ouuc)u|xZJ&(+6<2Fk@`G;2_%6Ukrrm|MV@70AIa#sBa`dIp7=onoV` zpOmE!>Tj@6W>uzIdN7+4UTgrhNOWB%SqYH*h2g7CqTr?QHAQ>&S;rj#uDMso?Dm13 zn(vO8aL2EoKZDGQinOjv&xKX~6w_)xjkEWSX$!u5m;tyQ=X>_rdI9-Arkps=a=D{3 z3D4l}B7e6NRRI2DMj+wo-3Oe;+%*^sj-T;>+W24A3}o+^h6>6GB{?)zKf6F?(NKPh zS>?`s{pM%z=(ju#)6G@y`Ki({#fI<P{Jva)uG}sC@-w?oFx1kL`KJGQiOeTwNU=x? zs_GO4I+0>PcrF%PLpt%6jiCXXjRoe?aotUEKhz~*l?yO4S@@Q8V@6O*-ByfOi|w6o z_$er-2^PwX0t5;O$oL2$5L%2P_U&;wC`<6Dm6CzXP+3@EaA<Ide|Bu@_EWu?P8;j$ zTR8CQsI0kz93a^fhojlJw(pLB$-S$&#O)7wvc`P7%)Nm;kVRLz9fb6tijMv7#g*m$ zh4tHw(23r@Cl8~lNR1qR62+$W+xB)8f|1J)mO{rI%r&fegGHt*Pd<gf7DIQ0M4W(0 zM@aWEsSD`kdee^te2+vPE?fC25v5roKwcQ3`_^T*NMDJ|g7r~LiffeOBZ{}qWA4nm z@}-5btfs{Tr?+qlF@rZ}@4=#AZ$A_XMO!Vi(#Z<QUxC>*{y!D%<Db+I-#$6MGQQLN zoiir{A1mrLeB3da9_-DY>q*&_xk(mEB~n3R>9+{xHJ&{8z{LwA9gbTu><b@N4R7D; zSNFC%=MEWycVGB#;L#!Ik#F-4BZ7LLHDi;|$|%T^VZt#1>P6&xbi)Q51GS_&(t#>+ zOsaud!5Arl;9P_oCE1r9%x-ttp)|%{;s&5IgH)1A5qG-UJz$5IMWnnSonJe1{76SM z+|ijYbmW~d%Kd@~p)z1Aeb5v|k?XAul~@SqUo-R5%8G&-q%knz)_fB`hg&2<ig<9K z3a+JeVzU9cY$ATvG81r#+uFlwF1J%L3u(BuDq!wSX;V+4hZ`<suE)1Nq`G82kqS)3 zlO9=?eO|m(CJp)WcmNL?&h%JiZqJF-fkIo+2802uyspU`KhqWD7okZ|T@Z1IdG>fY zl>Aq@4iwv+&i0g$u4cOYW0^U<I~<yVpRap@6uA;e`@C*r<6oSx!jAs-)hLH5QZ_VL zOrj&>UjrTQl->tq5t^at7S|*lMMOGz#gH)VqGXuNG(-q&8mMa{6odSBpi(xFR9b<j zW*OkYTlEBAa9u{Mtx4h*SNjRWj11qIQ%lG8@136;8|klP)A1OLvyN5T=P1KhBby5+ zN~r%9Em2DbLS?Q}5_(?HGF!-XB8CBhfz^x3nMt`%07z88VJRLk0}47cp}a)I3-3CY z)#kmh1x*<ev@9mT*|N@lVi8hDtXm%9qXBm&#GJC6PWOy@!ZACnHPxQF^(i<eZrvXC z4ELnd&P*0B!9D(!O!^?RwJgFG9aWD*7i2`afofAbB7;RLbJ5kuUxV1ZP{v|pcxS4- zDJi<HW-@V2d-bC(1WuYg2x||fCwuWdVJ}WgKdQTsXID-!Ra-_q4CP+Pu$Lsb7mBQ3 zLQyCRA5|Tp3V?%FbVE>_4YvxR@WP6dU#x>DU$i<zMF+Arg_}G<#XVIl%x*o&O;|>y z)sTWFxF*W_wlM){Y$AiAt3dbTOgega-`+j*)Aib5r8Aq3Mv(SB%}!J7Bx-gnQAOn# zWc3y%2FCxYu@bfl>XhOq;sh&rhl}1Xa>Kc-h<>3dG<Nx}H@&#&A<H$MiQCju2fFrq zHM_$Rs)Rr&dvG;)C}@Il6wO)Ih9HJ+pK~$v_J?208pUD9CQj|yor@ekS7~>4b?K-_ z5TZ}cgU6}4zO1@^WbH}+$|qs7-Yk9gnLeb1T5?;)l)EI=wQeGoB~^>sHF%58MUUHQ zgJrj`_<ddnVrJ60iw*MUZqdbkLl@{-fKlRx;_gUVlQtHQyZ-j1lb3-}OBmsspMJw@ zUiH{3AG+_JyUw3GduI9Q;)3^RVL0zSTFM8ut7zfXHO(HVN>2Axs*oQ@2~%iiBAw;? zU2O#khIdXdCe(AA3^f6MAk{6T8h*Q=bJKGqxkoGB7wWsVSxbqxoIsQ>IcInDju<vU zO5YF)V<WmpQJ#2W!g3R@w$M#E*&bHpr(~)Tcd0310%S9AEP5(xYgz|3^TZRGtgPxb z(|K)+mWsdXEV`XqlkU3Qwic_q-TXTq%a0V7bj66sOf}RO{#unOoePH_#nZ40O>4nX zm%`rgBw(9u7eNy64@wi+^WdKe>EbhaiV>QsA_5~|0cg%eQhSzz=@OwfG0WBK?rqlt zB-*IWL1%){u6D!)@*DHs^QGeXUdwMpRU(yJ!E{0rQA#c-Cv>%-9r==iaujEg*yaj^ z{##Bzt8|7@OGu{GU0T_dio=a#Jlp9&vg;|ks{`;DkVL#s;8g5P!j5#Nk}O2w)ARcr zm>sy|m<db})#)GuZpx_j(t&0vP9H9bs0mICIqaCDeZcZBVva_ok33_QkXq`r4bX*( zV(ClU=86F1lUoir&D4#pgys~j$n&<K3);^@+)GRz5IjhfbtmDSXKr#Cl`)h)p&O|( zLB4gf)LtvREJMDfD5<_Wy>L$;7gQEX{vwGGO{#@miYii#rdz;CKKA>E1E|@>{BdvB znaG^Wt#Q-Wp~<i0{<SGRFgjnz1Y#@~QDsl4;8qg@F8LMw0UM%Px0qNH2oIK-IJAwh zI&{FsM*0fXkUw4`?<T~}5di7`NW4e7YX$TAwDhsMcLYzo@8Y4VaF-EtH2E-XB2NH9 zLw_O73NORyu!%_D?rKK*mh!r;o%`B$a4b*?DsCa}2hV){nj4Ylv0TqF>4{fEIh{GN zw6J@2W_n_{Rw`yQ>3Apr2jpq?2KV(2$ct$znq)T=7wH-(swSd9$R6qg2yC^&CYYIU z8^<mkO|t`52W^^#Mg%NSGX$_rP1USi%2BhOo~tg(b((6_5JpE8ny64<zy9c;!ck?! zWT$6WxIf@Fbvd9-4q-*h>KQpV8F!Zb@Yfa1k=*6m<9A}pQN2{{>y^hQndU&%nZpdK z<N+y~yZuCX|5YF6Mnwe|724=s@40+OH!PP+rgAt`#Sw7pqLqIdKX|}g`^YX9f~V?* zc7w)pdi0ol`Aq`@3JdoHmNi%_cqp)SLbybn@gR6*QhJ>wd}%84WvX<E+@xkC0kM&^ zWdMbmOO%k1_}$o!LbX=A0M-7qwQeP0tqLP+c1;5?h8wzaQW_6M@(-0z;1#<XP29i$ z2!MsGLBJqtLX$NG3wDfb6VB&uVqRRi)#%Bf7dS$3%#IT3r|Yxf*;$lDXS5~M9VVY^ zDf4Tm8&PZ=7=xxjg?))Ds(<-}%QU(C0%ZXpW5ChmA7kF`kltChA4rl_z_e|FXu^F* z5>oi@21?f9!JE1rIe7xnEGIB|wUK+#c1<H8S8>94pid!FH(bTs34i|R;k~<O#^Jb? z^SNl)=Rpzg9qeq&pC=oD51^cFMxWd`f50bD9Bbxa1FQ+fmFtD26%o|@%{pFQ6y=`V z+U)`e#{G4#^13aHy}Al)qyGbk;E}WE0L1yCW=4~rQp}D7MfSQYw-nmzLj|+E1q(g3 z@ouL1{G1Q)=^bNK11jsz)NcO{W>cbo6LLED(S*UfCgUvg7rrJl|5KOYn^|@mwIZ<7 z5G3M#6oiBKNo~T~@Xi<B4>4ExUUgI2_*VwvTP>QplKi~0(i@-M8$}YbWvG*Y$w>fU z3CX=PKy`h^ZZnaYp)7@^9j|HRzNQgU6Y+YSdee;nC&3ZFdJ9TiEYo5QJoxPTsZwX? zZNchbf1Y6Oe$>YU>H*>Wg`yRK31mCP0+R}<JfX$NeG@W4MVFRyCgegUAC4k0IM`TK zwFR68T)buQCr~b~yFsuw$lV#Cd6srzLD%vLu3#C0V{nJ5;6Ke?8nU$;wuGA-aJ@Y3 zfq<s$_U26+4|(;0w$PpIu~E>A>^g|0$evw+Jwe@YxIip}w;@_npo1Xy|N8Gtam9M3 zd;ij&l2yNx#Gy$vhs|Sbd}HU^3wd3C>#=c`+c4ym0#5>l4pWC)1G9by;;#Vz4C1F= z=@pii3IgE}@DZH#Yts0H9&KHOL(sfPX?)8e@ByR+kDO`Uz)ji72nf-v3AiD>|Lj<2 z8Os17W%78p)~pCqBCzams|*Iyzm<%zVkVw&Bwb5)#PY}Xo#^g9HMQ%>)BC@>d&UzQ zK9}wB@X-Oy7c%O@^BpOJ@y~GQn=kBIxcB(pq-Sc^qmO-kV&KdB*Hzb<o$HT>l8dVd zfL+7$51rbF>Ub{I@Yml8y}cy;f;A^u$;7*vG8k=3a}z`&X)87zWf)g=_l+&xi`!cY z?VSeD&&a_=-LiGx>zY^$yl-)K3Oao9SZ|@6FXiokF1H{dp?bDQ5)?r;^Dtrs>&-$0 zaIS^FiC~0`y7+@&a<b{;Z!^hPuGo)dy@BZZMD)zDwzix3{p_3C4tFNNY%0t7d^_g! zdOqm|9%sL);zx1Cbh<s?*}u=Nv6sEfpd!mHzn{MnGmDJLn|JPnddVl}yCOb~_EeL> zqmzP1hoocD8k6hJwW%7)ejx~OgPT5ApQNB{Nuk;-*b3~W2+veER229%OUb~@&Ej;_ zYhnY#EmQH5J;CYCo~X)f^(5e+=a$dJDlTM=x1NnVSpDkN8@jY=##_T}brl`RLH4bl zURmC=du*hq+F9!8@R(W{*a6iF(VA`2S3*>p7=qvdoF@kjsa1=_5H7fGC<vvLIZ|>2 zJmF7sIR#y@VDK7=8;;S7#}?tC%WA3Pj1aA(khax9pYCVo;+~6krUZhrt(*-RieYkF z^|<ogiAoCVjJWN1Pr|0uhc(CHy(bHfs#{^d8cRj<+04M_jwh?g*KtQv1P$&wm<U&A zgZiTvAM97P&Z5e);e_4P+kVl({!hoOKiFm0r(eJSV8OSzZnFKW&khW&b$g9mwiL?{ zXbM?Hoy=cBR<Va3^Ve-T_<aKaXIgB5r3xBl1TG<guPF`<N!cy=Md3K=#8;d)ZkkxL zL`C}uO{}E~<b~b3FRanFzF6DT>`SW!EdK*c)qF0;6CEVz%>mrHXTAHDogf6Nte&~1 zuL&!+3_nnM@cs+yc>gn}mk%Ex1af?&zpq+>zHot4UQ}N+HLg$`q+cy=p`wbdU`vDn zFqOB!9FR#NSeh_>H=O1mnN1Nq+(e)J+K1iToLcadpHQ@6rz;q8c}ygiT)j!vF}26- z>C>ks)0u5*21_F~|MAF5jK@1Vv|$I<LSki;9`L(jiSdC{Th@u_$ikMdaWG+mxNCo3 zCcRXamG)`JJ9sP{4CL)tdD1bcv05!KKII(qa`xKST&IJo?HN+=%t$8o?87!qy4%~| zlOvyW0etpy{#og?^wGL4j)-CxvimJA+d>eLFu<C?i(9ZEln!9Q6&UI!Uy%vDWow}( ztkz=P$rh5?ye+h)1v}!Ns&u?{Yl)Vb)P2iKhY!xr4fJ&ubD3B~q$O*jAh;RJ5uvIm zN2Q<80w}~Fub)<90&cd}k&^pEd>~Spv_*u)21V?XKpG`0a>o`Dt!p2V=cjynY2L<5 zNZa~jDR1=7agXgt$rW`%gLCJIEPD(D6HK{h_(UxDhMHT|yi22*_H*4PHyw%};Tm_0 zQbmWX{?hm)w;k-ahbMxvH{|f`*wZz2Lgy3iB<l2C|A@#+L6$k1eB!o=c$Z#EPI|qr zY<T95h;z!uZ7wAUqRHPuVTa;@!@;DF!EhA#2eHy`<r!G_tvn<uc*yL?mk_jAUXF8- z{9#d*K~NDAz|9sg?gR>P<O`bD2@$H>ItmY!%AExQgy2L%57#n%;b1sGff7Z?m}gSX z)>^e&c>kob;fI12enb!y7*j+26Dprkb@p-CLI7Jl4HQ8!{Sn__7cdj->Z0%Lz+kYc zL+8V7cfdYEwWMot$J|a?>$)w6jYkyr4DkQ|?$Lp&f(TzlfCDE|F#}`CwupiEQTPjg ziRxIr6~s~~282y@vM@uTKd;12$EeErbMOnvcRwzD?32@s@3P#WxY0yr(ULrO;zR83 z(1PDdYhK#~EZu5i0q!IKQR*%3WTCLldr*UV+jZB#>Q=oio?;c;)}xTd-8&|Rhq}8m zsaQ1PcR8fv>^N0HG%@vSgR&cuSa9=}wxj8{Fg*e3HKR5n1~4b_g#yu69K2m&=e9zy z>tR)A*%`;$hN0e_lcRCA+Vb&7`wt<J*mUpJGdx&Mdj<z0p?eNQup;K|&9wS<q_pQF zefNyZnZUr<K>rbiy}|{r3qC!-Jpq@(qql9mL9Y+x9Gwnp?eP~ur?a5bJnA9H?`eft zL7i%#fresT9xYUaiL&zRM5Ajjf=04zp?X9eKlKp32@Y*uswZHA<Ok>yZhBnYR9X?O zu$q<(kv;ES8OjyUf&M6h4*7zC7KS7cJu$gkcqx`83eQF61ceJ1rbbDwK8ps;Tn2lb zb-w9MvfN>pDQ0pcXZ!s=RE;p%tmig<RS#m_X(GWpTmca&L7>6=)xmo`7U1ou^V{W( zHidor`>LUZaSNJC$b|)=_Py{S9nsP_lB+HtN*pyP0DNR*G6CQ~w=xNHtI*s&B7Lsz zc<{p6u}m_i+qb4T4&ut3+G39r?3{sYs1rNV*s*xL6~o@732j<qw?{=2Aq-a6*1eF5 zTyHg~x8q2%KVY?>d2c=j8LZ}`o0Ffxz66)n*G`@|x_@E!=x~2uZ+Eq;BOeaB4D1s9 z2<@#RN+-$dyOt8*@L<4)bqP~c@?a4It(vkx0sz&7&>}D?TRLr<tXPPkP+b-|aR>Bp z@gO=u3G!m$d#Hb)<p$Zs$+nolyTesG^F5Rr@`4Uow;R)qXt+3h(QBGW1jvq>-85O> z&Yk_Jzl=Hr;hpLE0W1R4W!q>{Q8xZS1LVXFn>(_Snn9h6$6!(Du*a}_64k6+r7**q z!^p;x=dVZ4rnBv`6X|5c$Fk{hE8P42?=yDdiPxScY|ydA8v^a?GL#p73t_|m{-5D+ z<s&1noJ2~~Q24`Ga47hq54L3leDSpO-nwsW1kASt50Ah03?yy~1a32c9s&afHX<-! zJEA=RRSw%01WeSwwv~Hvdn*A{B}9L^7hzS`U5402o_@m<kKc9n^vS~qckh~?9<IGD z*qH|dN3qfzStF7`LE9>b(E>ckN$c+u*oI}{wQwLrWg29&h`uQAo#e<ap<#1b81Vts z7l?Arkf;~KDN(~Iv?rd^x`DVQK_dhgBLM>Wu4B^~&Aq3e-?6U9)h^kr#soBC?;N#v z+8jAQw}JSY-KOVwoxfhz15Q-^5%>WYL3Zzs4kmmE_8|D)(W0mSab>usnAId<c#53x z?uqYn3-DKS$S&TtpH<3BT*=Zy9h0>}r(JQl(6(QG#e)w0jgQMnBNKW;NQvolz$jv; zl;8U`#je}o?|@CH7LA+)?As#?d@N=kd6)Wu|DvFbR(8^gd?2o}$BkClM2Gz&z>7No zT}8M}bwI-i9{FSN$X(!(+oX5Z9VbSy7Dehu^Onb$w3!xgX$atwd=O$50yV9b<OMLt zb&Y@{Y&8;P({a&R+=&*#U2_$zkyNDR<02<8IZ~^1=G${^(J(3oZ&TI?#FU5$n&2+H zJ8W-8LEsit53+%Ht;FL1)u4cbz#oFEn)-oAOpq~Di17Q#meO^(zmNa8GGrAHju$<T zy*#Enb<<HoZJJ0rP9ZI666BB%tA<O94h(XmnuWBxs>Anrk#JP~F`Mle|5Jt8(@xL= zTQNBKhfz_0N<umB`PFyb9vx}}f`V|NnNJjffSo03;oE=vw?Qf!w#7jND<TBAJ*YYS z`{z|u_6Kab&42@B$?^dNk)Hvb#-#T=)4wg3h&5qI{SclY(t@b0MtDemJWMINP!$mE z2WLT*w`?ptdeK-E>gTSzDQy6Pl!d(Bx}{aNPrG}JNy8oGa1GU%QCL&VbHL7;g*zm; zh~k4(4I*mIA-O&YyMKTX)*s7HuMMDHjsKpi|J%RqSj|jl+fvBwYaXs0ROF34@Bumd z7O)a?*Is>BM<D`G&=qErSf~8g{9~%@aPf`5+4u@GJmunQ*nrVgHvXLiQr3{fWPUb? zUA>sCv#>8n1)lt?=!m)6jlFCB0DD&?B&wE2Eg7)CHJC0Y;uWeXli2>?P<vjWes~2c zSfX4vsSzxEq)KCfVdU7UZ?R&^0i&RejL6DQR2g5Y;|Tv8fBrtmENy<K;K^UYIw)1~ zIs`p8e~jnfzV&<%*>Ykq?xP?fkwWHM&ktjv<p3C+GP>4du^*f@kXrxYn?L@~x%>-P zpZ<LB*3+><hP$~3`xUiG?z#hr^eznPjx3}7I%or^Vxilr0-%Mtv_uJ&(E_C59$?uD zE953zX;c?!7=+B<3)YtTF)04BilrYtUETJmrlVPqK<~%#8jl#Li6B2^W%F~qbMxES z9R&LYU7hP?GB}L>`3b+|JuJ2=LN=PVpaL8e4D|{~D0dt3%={Y<-vdaQ8@@lCR2>M6 z5j`m66p@f{>D=Z|d5S%Uy4!=&E9y4H#cCS)8`5R8#;6@BEfnHvmq@0tbOjYiRN~%T z#YtLRte!05G9r3Og-BWLZ{BjbP8$pD93SoPE#{MPzegHo!?Xwpd_pWwT8fOC^&%u1 z;CewcQ9*$t5zLb1BbtU`y$kSBD3ldj!wHbX@=e(n9l?3Ha88Hc4>N75UQBBQdmQ#) zyG4YskSkxQ&*nWm)RD+XOphEL^AuC5P}1uU+r9okGVatvQT8EEXye;%Bb3B$Zh^%B zJWMDK*RfPM<23=%_iL^LBW>lGdt-i|9<+HTDw*)~?18w^?K2(TcAtOwtmdS7zI*eh z?61H-IaE47_)HAJTFaZyLx7-56a_vvCK)=YiE4`J7S*#N<$hf|bh%kO%rKW|c2miq z-(kb@*c{K%4Ey`Ac@*X|KvTChvt$JPRDCG&CI05J4ht9}=g-Zx_p$k%j!e5&EsyQ& z&5!g}2j=*lnmvg!R#{C9JM~f`5cY9<(R7!Jnl}ywqxoL<l%nNUW{w=1%(oq#jd@rD zei)f%{|lcx#NB<lmEFaVUQs=x=FHv1=eKYE3;P@PX=zY8_H38L5vGCzZQwvEL;!Pb zEhWaRG*Lb;WgwE)W$1FK1FAH><~p`t8Lf0;!zw6Rm^Vv<Ht|p}S!><HcD`!rUvM4G z4SQcC8uZL$BPiF?eeJ1Q$z}w&>>65%rXuF>4%NLrn~m63d^{8LhO_L|epw409z9|B zcYC=r(CY}G3UbP?a{ICAcx3VAQ5U)-3x03jg8?_?uLi!TOH0xp)$Ic)MNC0hu?3eE zl~*Mcf9M?hUI;GHG%F?tm%xq^riu4849mN?8t2`j7kK98y-@zvd<+Hr*6xquc{gni z{{wOQfqk>n<D-2&h4w@&;02@AS)Jl^CKwGW=~`KSF-aytri~3OE|jkqX<Vc_dG@Pp z=e*<XY`aLS%8eo&xHMz<lNlfHXDv4MwnQ7LQKvI7Xp{ShO+7C(G=B=)WLc7}_^y}h zLyx+!eXIIKt;M|?f6x-}q`OTs1_J7zszSc+0{?ymdb9%T-jD17B3T8fG*!)T?Aj_e zCIO$*)^=X}vp3SnP;WOHm;0iX0Ru_0nwYO9NDI(*Yr2|#J{5^JcjwS@0?Vfsfb+q| zU-S$r?x1;S(BjRB^Ja9i*k`y-)YEO)nMy9!OgYf=sXtCfe7>1BNAzUA`|s-6{XQV6 z(}F?g-K^MmJfE(gCwQ+tg;`4Nd~GPHh4;m=O2;22US*r#-5g+_15SEG`dQr$_gE_B zVV#Ln9T3zWq`R<n@&($P5q=K|q_G0t45A(jP6d=3V_;TA5n>wK+P|UK>IVt_4|JsX z>Xsd;0_^5btash;Fk}Ty{L3sD9XbIjpbFI12nqXe9X{BZAMI$5<_B`thAK7UPe7*d zZV1ePS7GTDvQ*F+Tk2I{?to%}26A{Jq9hngbHK}%i4$s=`mi$vKY$6v6(8s)A6gw6 zjJLZY=@j<;%vI9~FIF2Re5%W>+gx&h$%$yCf_AdrRVC0b98T5{UG-$*-Vk4H3+rKX z2Nn|OZUjb8JvV$?Z?}UN((yvjrz<g3=!8AR1^0?!f6MDQ8X@DaY9aH{jsa?w%!^H@ zxm4ZkXFmi#k4cB6e|@HinqN}LE=+p`-Vb>n7c4(O*TrmsvQ2X&wulp(r^H0cgxrWO z(FZ;x%C^aQc*#yw9gGy5Oc{4n2jhXF^Go#mxw?q$>RRI?3Wu4rxG)9Gu~Kf&iv8=x z*q8}T7Pjmp_BFJ2Y2t(1ybwV}gju1m*kGrPiIOO|BIKYC)moO66qglB3;+F2PlWJ| ze495~u`@S35t)~IeD>}E`BXg}<u0{5#gv4@?jIec<p1jEllk+54zrX;ReG=PDZ?}* z6Y02be*kv^M5R%zJOa0kvyALGTtE5?X*X&wi-61#(FcC;P1zmp=$nq_KDSqP4q~I} zKa|a2KQmIryXMI5&cXjn!~PtQE<ZERkh$KnJE$gr-_*1_hOuRLu6i95Hqj1XUfM_t z+0UDGxW-M{)&VAjOM4b(r)xvyQZ^Ms@ia`x0e*l?i11a&`2%*f<*W#8M_KJ=jMVfE z$x1^9TC)s6gfD1iHVVb7j*akPa_vTMePF`jNn(it{w1oIUq;O2g&<`Y4Nsxs=>iU6 zPZ;V<uiX|0yhj`0uwQD~5Hc91{S9yBTDjJnsE!@1qF&kON$hZ7b8f@DKf)`8VCSob z%&1SzF!N|2edoor?(#bM(U$dqy<dc#IKtnGwc+#9Vttnz3IscV0tkZt58<#@`hqZE zcPqt=3J2QMs+onvR68A06Scw4jtnAx$GmgCJ!@*A=6;+A`JqpA@U55#vJW?(vF3V& zR#*w|$ePC5_i|xxI3Mzc0_|l;`7+Zy{u^dWX3Lsx_xrHcUSU3L9u^ru#Ckl~9)b@P zdUF-(O#Z1H@C3ZuW~Z8Sy5yg-pvPe{Ut-)ti*gkE(Yy;#HpjnPHo)!{^D-;Fwr-1J zUa*2r7?-Bf*_tE7Am_;*ZA}s4b<9w+Je3R!>6@#~u@Hrpq}{sxa^2%_IA$F)rBHiU ziRP1*ky)Ha^C>qche8hQ_>P2Glf$-@eaJH0KH@_%4)mvt2s#t?hl_w<KdpKC_S%fe zklt%gIGN{2pApQJ+cDKiY!V($d6ab~hf&6g(pEyOmICb|UpN!m_zO+e(`Q|L(Cdo* zap%1QyazcsWJYp+PsY!K@m>de%I0*XtFa<<i6zhM$B^ecrMK4YYY^yTSUI`1{e2aw zX6$tdP7~hUHmSDaXPQS~IFM>h6Wfs8q64J*rX7S-p9f;OxVt{q+Y|J=osjA~`JG!* z9gsuUSwGU2L&ZYNhNAFPL??*nFsX!0i(s&SbZg&R%gRFF5otGrKb*Q=+Rw>RZ%1z| zmr113Nl!Q)0KOgyg`!=_gsy6r6g^-lcArbfF6}ZwusZhb2qZh)o>IR)sXA4KMS|u{ zRDfsWE;;0^40^+bRJQE*gwrUb!)~;0Z*L|Fz<|Z}yWOd<k>IjF8x10N2?gWr-Qm-Q z%Vx=_2H|9^ABkV57>GZm<A@Q5LAx&LwrAS6MTpol7A_TU>0*i$QEN((qLtf0p}<WW z2r3~cSgw1yRKlhk!cFhuU1F<<7jx5z;o-S#x#U8BzMZ?a1=E)2UFv6Q+jwTXj)YU~ za9-zB_jRID`Q<-;?Uo`G@4JY#_lMzQJS-io?~D4KvRylOKyWK^BhZNUEsbcyM(T)s z$O|A8f|MboL|7i&>0#-Cd+s{BUW&C9`zwWTftJ_#v4oRY2liRi#1L9QKatH9hC@g7 zxnM90aJy<ugu`}?Ie{#rBuB_LS#rz9Y&+Q!_*^!35c_o}2UJ%+>Q)u|@LLnitnBvK z?lc{qHb5_)!6Z;FVR9n9@l3u7VOO@SPM_TtOUtftz7y!QD-@4(wcAYV%zmuYbDCaa zCMPnw*sI1?JmF+=$m6v+hWl7_%*}7p64i+VJ%CY||Dt7+4iy5`oXw#{?XT%?nx$j@ z^j)tu;z@(Wuu?1L2s%SMJefPJQzM4Uo^b^aBiTm$2>NiM&k1Q~eFhuisPllq_yRUV zL&1tcD=LXt7s&;{zYA&sM6?+JRxl`D1wjsa9*@N0#ldo+*xLR~5QV7mpR?`OyhG1| zMA(nX(i&psJ>GD*Z3_6Mv$m`M=dtoz^Ihyf{?zTVd$y)mws-Z1ql3s_Icq<Uv2V?) z`o0gyE=LC2uVb+t=8yx|_$g8i&q*GsNV^q-bw&9ln3y6Is9{uCMmh=^f=vBQlhX_& zumq)5w$t(<$?oXd-|pHwd-#ddp3wY3?0B7TZ%Ylw6A>&fvhm!cA5aB*&B&>RlOGKz zCl}(8yFcIAA8cPf)mM!Km_AkkIDv6#`1fWsjB5eaMUcL6J4ej}w%_9m-3+@9;5mkd z-8PX<f!sA|+uYLMd$p*-M^s)uzHbliGv84>x(gdmQY9m#Pk3dhb`EcI;RwkCPD-J! z*vA}p6q+0IgQYZEVG&Vwn@CZen~>y|hlg4uc2EPgBiR%dqQN>4EHza08EqjR3}$r& z+f4w;wt05>X8p)4Vk_z__K_HugLZpMgkI?wObmG)fi2w1Xopl;WapWvF<@a=Np6cN zhmWBA5UB=4N&rbH-Nfw1cfM<L+nTcSn@9VLi9K6@R`yK-*O_GhhWV|bN@b>AA9P@T z;pl12y<0$kU6)o6*+|iArjzza8XM{D?#w14J`XZFHC7X`h=8Lg=zt2dWT?4;ur-rl z3o(`WySY?@QiHnYr|BiOY2l+yFy&h#I~C{BSVy9kHf?6kZkwBL&K&Zkx@#^LopA#B z$K-jt?OG^cRvx?&L$RNnjs_QAo%HwM-;@X&=Ee^;zGcmo*gFDwG>@t)#}4Qj_TWu% z6QN^}sh~LX?z#<|NXXb)M{7X}86f%q#4o@dA<y_C(RGU(t&LXd*g}rl5JG*cM%H=> zWL+YWVtXE?GFa-~G7qiEgwH_}NNhVuQ%1<A(EFCE*~XBTj#tb%zayUUg-c`E7@Ppz zoidf4l9A0S(BRN00YeQ(w-k!%C@eeKs3U39%lUZG@9DsDYd13wxSx8X8BaF#hT>iq zY6H4=4}5_SU|!~=OTb!apSvPLMVc5pLgO6jWw@kXz`NsrYr_RAvffs=4e(yH;@Fqr z*3E!$%*{+qh!w11?7)VE2L34=%g_;oC$bn;DiNGTc^peip=7MNM2iH|`a`qVLN(Z8 z&gn_^g-w@{%}22ZP-JLVDVK2>sf0J2v8iUHFB1u;T<*@inQ)n@u0vguZQ&%_iLHul zSp0)RF<Pka$#xZX1<P(v(iKh>gWh(JV#Xbgo@mJJMpc2c%^UCOp6n{cb1*keAL=3O zvoa%{eZ~uinBrLii_*A;ox9=u0-U;}V<7}Mi3(mIiK;3}^4hLxf@{=Dk>s;h19(w* z!i-cW@eIu7iv-(|qO&4Wp}!!T<VgS-A|DnzdMaWImJnTR?m{6<R+H0e1G&>W7J)d6 z-F^=_n`!P3u&%1^Tx-`*DyuT5!xO1`Rn6@MJK9~TQmU<^Kc8b=>@`qqSl_`8OvepZ z(%1tR0b5@=-xlg=Z}Tz@x5C2g(K2>aP(9ITZ`3=`;ryjHQxGKV`Y5pWgVG!7_9T@4 zSZA}^nr3R--lz)H9=7uk;T5SXyuW9WQtR6a8N0!VVq?gwd!#nI-Moi2jR&Oz9mPno z7%pAs7*OPjKUUx>HcQ2nLU)qMAhib;qcE(Q84^kBEpu5Lx@tHMYKp&<%5_$mx82Zs zyE5Jda;+Ab?6V`Q?A5#o{8fK8P$-6-GP9QlMyH&fVAvh>TTv~U1I0d9OqENauG_j2 zk-173Y5k%O-)ZA3y4y#QV6oysDhXbY_h2e4N8C1h$K-H(*Wl<x#V<l!!IKp8|A74- z*0gqFuTwZpNdG}5o4YLv25bSt(ORL1L^?DS0?<~Prul++`>pre3fKu1-Zo`qAO<lj z?6tXS#NSqq#!|(p8GkCY^<Ie9Q+sufku5QAo6Q_E9G!z9ogpfHB9Jd93kM#WZ4ZQY zjAiDIOm$i>K@)K)%DeNSu7jmQVh?v*I+}<UQqCqXeG2b(T6(DNr~!rQqLuVQQ4urc zf!qO9g(ELA6@a@CTT+sSd_>Fsd8st81A!^hNx%nN?QhX^x$Y<>W0g{^P{^3@^YbmO z{gP7yb7;w`FrfmigH1$HgymgWs%`s}lTKr=%8yO&?7jK)<qdg<sim+r50gi+X;K^a zXYBAE<hF1oZNrp;20`pNHs}lWWc`|49-Nx&fBj8n^<1~lbBNoAY#uqRdcUp3liJ=V zdR-w$GA}2~j}>XIT|}My@p}e$d$q93f$hMgQTUb&HsXx*;kt9O$_>Sbf8ENm5)MrM zpkyE^YXFg_o!>7?cCOet#2HP_o0xwq&i7!W3@F2ssAPvTLd2+9{lKHwcSI0+@zy<; z>nSE3JF<6ix;|3t@1-r}tc|R&Pu3ZB#tCE(iyJJ0S$2ZZ^ALsk#I_a%#r8WbWeU=? z><JVtRjCL=O#Vz0+PbO`gx+9#$MVI2e1ArO<`J72?+D97oOc$pF(+5NUPCoI|Nqji zH8zgxI^TO|cXoGX-|q*PJA5p;TrQVfE+vYhNRgC8iWFtaqGZXIWqBp7#FfQ|NlLP7 zCo%l$8+kZz-PU~|E!+U<4<m~0x-AMAX!FBxn>48#HwX%(DB1#X`=fSi8-b~Q=gur2 z5+&KG2y#ZVvorUed+xdCp2v6M9UbEh4!t$k+S`=!$68gV7SJ83paM9Ag61qYdei_s zy+K!|Go$Z9Db{p5+0Gl>Hs3zidu~^t)X~`G5>Br%9LVg_+|6`H$e;HjP)P9>T|e~u zd?n!<ZGz*R^5DCCrKn%dm9o$vcaO3kkN6r$?!xC#XoC-hvWv;t*+)VY<^-~ntFUun zfhUv9x+KMVrk;Wl8Q5a(GFP}ATfPgU7m1j=e|ZF8`x^p${oV5WcYZHS=d>aoW%uSf z@@?7Z9Yi_i9)=Q<99ec)`!=))$a)MWu>d~b(T6dtFO3_r4!i0tvOJRyw`EDox|I6D z{@gAnmxB#f4clUkoz3kL-DYcPxvMyDF<$z*o=S_gllNR~Z?d}@b2P|)SRq6#+cBEN z_F4(wB+Zc{4!!ILm~$uD)W`(#3E-#3$P&sTP*}<1hXert3)xV$0^7g3=g)2jPNPdW z8~`B3^^@$rY_7Grp%{(kbqKMT)H^`{=_#P~Pipa!`=Np1M{4{#2Zgop(Y&F{W=6(F zZ7O_i1CZL$vPX5~pI+^5LY^>0vf@L99h<*9m2o<w$pjP*El!%V?pGZlZ|A~bt5XlQ zwMLr;G$37R4tpTopH917x-S(Dczoe7!E+#-U!VHYvdg1~fF?#kU42GK*wYQ<ifH#@ zHMDs$p@GZ0+u^WqdkO&SgQN+ihXE^O^E8BAUIVzLoPET;F9!KAcEvkK%1|i;lrtb> zLeB-;LTx4dO~B_N;!dy`&a$oPWGLYCz*X0dH5ig4i{h3bkOaarbD>C5NFjizA5$MC zVSzMQpBm}SINi<w>ifmYPHb;@)QH5x$Qkkl!Y(M3o!;-G!=V!V?zVWW%L%)7)bIp^ zBLLTZ&Vx3bgslAw@ix227TI^mJ}s0P<RjJH^!rG~Rs<UF09uYiqxzycd~ghP@-*gF zHB_myRCDBwsHzi@^-d>p&O9FL)Cs{mdh=62C`xFc{O_Bew*51JH?=tbNbN%P^r>S< zvu)jd``cS`sBi~^7!)Tt3neSjItOMU01J}4Gz$q{3Rk5+(@QiW)0w5>OXU?h7tLOR zR<<}4%9zw@8(~DllUmvwkk2Z7(x19pnj;}QFcyZJqPzBtw24eqoy-q=l_Ff1sE~L% zY}erOfRy1*t&nL9_-u)ShFFQX2tG8FD5cV|;;1Xs?L(!3L%qQ$+?-sbA|tA^*&i_? z-F!M2=0|6|C1WQdviH<l;?0O5t?ut}04)k?dxk5sft(M{2B&UUQ*H>=o+jPq6wZNT zejwfyJtFOPDq3q9;ZXe2adpj=G7#Zw`ez`c2ifSzFoZY4bl{h!IA^Jv5V{>HE~rCA zI|ouyFs=aw#p-}-+=1mT=+PPchs2^G$&i~Ct6M!+xAnvP<L7n1@Haod+XX&-^1Dnx zp6zDyuNOR6it29ORs=BC`%Mai>^5W<dJRT?5M56aq+)jSZKNJ-d!Jd=Y&RRoqb30g zzo8lui9A~NVItb>Q`xjM#5Orq%yl0O(+S&8CSK0k1G#SLO9|Z5;|djH0dl4^fPW$h zzj9vTsN$Axj7V<^Y4YB_Y#taQJ^7&YqLdCm$Oq!&Mgi(vBmuD9FJsXU22vULNFkqY zH1iK{ye{5^-Oe*YRnbt75az~6CqOD_3Rum==6I^XE}Z9u(ijYB_A%jAVz#I3sx#OS zaD4^OndKj{c04D_k|QzfDLGpK=}^~_qjn`#$D+bviZna`Bv-0Cw1cFitgqX{TzpM| zT{7gdO$R&T!o@#~AW%VwmxL?Ss5y3f4b*f*>-Y^+4qyTJ4sMN43{i`38=n~12u}n; z$L9%8<ZB;`BHJTgh77;|(5p>QU*a1g+?3pBXtU@cJ^_^6on<@_t+x~NAkAkI^Z)ai zq`WBJQOq;G_HV*qJH=rZxm~<vgoXNLnKo<9rg*WQh(vnBvc2}7fVHxV-#<1Z<4HV$ z=Y)Zcx*I-u!rqKyGX%+j@j`+e8^(C0S#Bg7Lk&JyD&WOIqyv*glN=Ha`@H}uM1f}l z$TqnI3NeJVOmQN^1N{%O+smKm8`cy(s1&k2hkZ6x3nAL(l29i4^AL0PsH3g8zn}y9 z43c!uc{BlSI3-$d{7C#Be9=R%QD$}B_m6}Jd`!k^4{ZkmU|Qs-;J?yhLTM=@gnulN zyX)*rEuqz8wGPrOS~p;p;or53JnO={G!|nAUiVP0QT=sZ=qB`RG=WK83CqSX)K#Qr z(5HwiMs-0%MFjMiJJ!;Sh?P!-3{k)eg2EW1m8`y1_<25^w|At&4gZq28*$ARPIZa< z6P<;0KAG%FwyGi#$+V&W;>Lhz#Pa$MLTEE=(hRo?A*gvB<p86>A{1mOi``+s5F7+H zRyLP0ARO~_Di+ZkEW|@{n1~K_9gZww$exJGy$x+ycJ|M-7G0^ms((*NWHNc7cjUX> z-p*9QCEm#zp<thn7acx?Z#wz$o><sO>WCB+H=O(<HY(*v7iypzF&EW9SL$z)GrTTP z;q$T@u=VoeO*Y%E-Oy_7n!mF(0MtbB$Ms7#y?#l&X-lKd*4TbUMeyI$o&=VJTdzp| z3G@GDY4JsD8Y3e?MA1wTZ`bgf;DE6**FTwOx^6hkz=@jy46bfRoY@PADp$Mv;_&pT zQ7!LU5?_Gj-X<P~#?xI=ZAmOZD1@SnfD0tv&Rf8P9AWBp)bT_8cRBxV#m|HiL!dU6 zfkb9%wnM)m^fgjuh%(?9Xohvno0gVMxR~$1Z-FT)_Jk3f9*QF~6Htk1<c37gCC?`7 zImzodiNNj>@CpF$5^>ML?r1Ixlx|q!kckONpaGj7dMqaOIR5+>crD5rFn+1Ho5rt$ zo7uS%(3#9y2qF%*sO?HK3mg2m*FJ7YLvZ|51$av!VpsMZKnU}rRlfEzf19H9#dS*3 zQ`NOs*8T`Km;3mQHQ4tEQ=yLgk!KGx?TxX%)`W*CJ$FXp0F5A3OjQ~%#n^4b!3I7y zvp(#55z!95l3{P)X-P>GPZuEOc5of<AKZWD{=<g5uM~<LoqjOqeO8EC4ekVA40&Nt zD6kyB=LW&I?bU5SJ>I+bkxOS^9w<$m_N&tmUf=VA&~)zgsxD>B9rfr?R$$lwM!~HY ziGK*c`+3m+2>1sA4g4d+v>-wtIFeX+NqoeR+9)X?RoxBb7dellu<ggjVh45=ra=<? zBqKE`$9Dq7z7@5#J;J~7hw$Ip{Xv_8xIJ$}jG{j=>uic=Je54;^P-(V@9Wp$Y!g=( zbfrmX2>X}0a>MyyU5yJRm4P9RcVaRiSmV<d<6e%W7q<XbE9Jk#sz3(JpZ!eXKl$4z zggb4-kp4zvKZSn&H*%wMz|(jZV}IsEslz8Q_R#;E;QYoA66{*D*`=LBP}*e>5Sd*t zO<^Ik!)LcHzkoJQ#bwc7(jnT3OvoRkB?ke~w4I>9A-YJ^qi9H!8$;NfOd+Dn>-j8r z0-o`KgFnB-IbtI)X8<fqAd+wYIZo|}utoMt2VaIs8;PK>gCmWYKl>bjkVJ^UXmNon z28`w0{@k<JPp^3$87LPh_JM$W)Vc&aA&KzMzUu`gy(kw<$uM0I*2<cA8Iu!dj%N@u zfb}od;szR=V($xL037^Re~P8qF)?LV9ZEAk#vdxNdiXHzL4X~y1A{yqa;!}O@a?xC z{xK%bU>?;m@ks7+=OdIq!(W20jBM*BhTJ!?PrQqq0?x0LMMTNFLPLT<<v3t3A+`aL z+*Xuv)K}Sn{=F0SqnH@yPe09rS^va#x7|kOtt0=g{Ra%hn9nz(Jlc5!kAtB6;0t4G z{|XqXja#sMfL2EkvhPKH*2MapB$+NfaP6e^A;$?+!V+(C9~p>fUyrRNf}_Bquz{Ga zVL3J76u|zJ*sSS<gTMHq(LR9~Y|3|m%cqgs2qR0_6Un3Q#VYbWx$>2-&MzKJcQ>?W zVD137ARh$b49eQiG0>cU^~?P5>2KK*(3c=$e~chmCDaz)k$^5B_}V|i8Rz)rUkBrP z((NbUWD$;X?+U==hzH(9zedDc@Rz99^CWAUOeeP$0Zg+cM13h@H%;w@pRt<*M&6u8 zQplo5^uPLk078~}kFMixYbCR=D1m=bYn+G45;8!Ije3F0JAo1g?QKD4f5_&f4sa14 zYtD`D#sHw%f$(J2u6LE(Hm?t?+m`Ol?afbmqDAx!zA+@Vn3%2zQ?>Kfd&im_ZEYe@ zhLePpSFRoHN<45Z5Y;e0m5!!g()sXNXt=0LoNCJLeP!(@0LQ_!CfrJpf&BsG(R&!< z1@<KS709D!o_ca=uSRQ;m5)k&gdBzZfMmiz6FtZnL87(p=b`bJ7io3ciov;wrl@?- zx1*oT8PW(QRj-|U1(q^e|LKR;w=5wT3e%ayf0*oOhd9RC;qSbVJRJ!@zDT$`5ma>J z;byPH(=xh%2pz!@C{s*ABuEs`*v0fCb&`+4Pp(k;1KQvyp2qSN#=?K{;5l8_GO!2_ zwFf;7<sPn|(D`AmM(=BC5KBNavS2^W+Pv^xV~>aW3(0+{#%LthvcCcOkH;YbEn032 zijr4csuTMwdZW`b*cOZi)FZq4bW!O1BAVdIh7-F63VH1Z(;>0;ci6O!14y3c+xIXa zyD%2dfiKTwz?Wnb0zF9%N$rTH9_Ck@OcdU3U=*1N48AnwdYEP*C4`&gh0EMjvTi>_ z<Xo5LU&+opXe0eSy}id3*S%v7;OBzD)WPkC<PsTn9xWuY?nr9}m3BBR>xq!x8)`ZD zlvmd`4^MRN=HbzW5{O;WVR_PYk3i8|RWGD_`U<C$-1ZOe63gE@9&5lk<oQ?6Bq*a4 zZYj8}((&H$9SdR6RoLM2O(WBp2M@S%kG1#Y!U_<OutpHwvE33MK^{B=y6=jD?)?C7 zCrS;%_-5G>FbgmRHgP-+3HFwz6fiAwq}57($I#S;0r51AAEt*?d1=(XM)FG;YKdm- z`dg2wD8X_1aU{>XCjH&R@p!Pg)9H#Jw!`mpj0@%1EL?H1L#0T5-yWZPpzx>@bQO_( zv*ehL{HbD#Ck)|mrH)lXg|^4O4FIs&X<yQ>9;rkJCbO+}?)G&>N#U{mF8(@w)6bqL zo|+n(6ngf-zfM2X)aNN9ncD7f{|0w}7N^+9BG1!z&u8qvdp_gGx8yT&c7=Ux^Wypb zt^0Sl`e_r1X#j&xnfCAI^HIV{szg{co}^?+<#}im0N!02G9QiwL<k4KjcFYJhCjhC zVb7jmEh8wp#}DG#){QY|kr3^EXjfdX_l;4d@li?Sn0w?;`leb?Wz6Pv?ri}svdsg_ zRgph&;P^xNsDg;4(o_L2O`u$tId9*^dmop!g4U6yq}-?j_IF}^mk!&M+>XOeKrcql zD|9lv3hqsFVq*EAeW(N#<AqqNfHX)E955OYR_b*hNV|c}Achjr#zITd71d`Zav>$4 zX}b<3VKY<F2*Ez!Pl$(P-+Ni-NDd4}U8h-yU{okgAjM1yZ7UX%y{TT43bLFZ<&5Li z#M)b_ATbQ&CpVD?`LjeH<b-o=6M<f#t2U?Cwdq=&Xg<5$wLvwLkU^(&<C5&dtLQ^g z(s7VwN1A1`VPK$6fP|Sw*q>S&2Q!1PY=D$z>+eL$@|_9ov<Mv;O~m0A@q0`{zqbA5 zP4s`@U^-xv^iM;fP}j%hrt9bvXZaf+pl<dXsAZ;JKhZ+6r7zS%+C8aKkSV78fU-d< z2z7=o&|2$5L<(|~Ok)Lhb!u3CU`Zg;ySkTxW2JPV2h#3<1dm*cN#Y0^P<)V|=e8lm z72-|+F%+;TMetNi^=lBihsV7r;Or5Z&d`xCfZmrD5%69f?i$q{y)kbj6!N*EA-CQ> z<<=W_XtqE(*I<OYbk%Soy;f5LQ5b0z{#U^;<ds+T`s|3&Z~_L~=1@D3r{&Pa&N8ap zdmX5;=yfRBX8tIabNHQOq4IBzguL-kXVj@BAC4+U!kGw{f2~~dyNWT#Q|WzKpfUK7 z?S!d~KYs}+t-ufJ1jZ7Ka6O%+9py+9e$Vp{&(lBiK3>@FzB1is{-ZIWe}E^&^VI8@ zt>&}n5%?G7Uh58qs=2>oopad5KDEvfo5=xLPB-HTO}t{A+gO1AiFIyg8UBfNuEOp+ zWSx6>m+f2DxtAqXpLOnMnmS^g2jG4}fee)8Bgm7N<Xh+*)dbnUTh|3cxUY4turbI} z^L`s^=FeE?b~X$@iFsXR%_3o)d&C1`#ya=1KKnme=YAGe^VWF)F0n&wAAD&`>~XdX zG~kQKCtGC(_O0hw2adh02R{Rdg{QL;ehs#tRbf4+dl&G(S=?E}l?5EDNToDTmx#`b zpyl13Tw;B={}A3;k<S{%_bM2%Dw{`p*uKT3$Cqmt=T?o}xelYZr)Qw6x2M!&?60oW zE-o0e=W5l3bJc<|xp1zi-F$PY&p0$!SujS=RnAxE@w7vD^f5g8Bmy-K<GhAfvO|?) z)strqS86z)M9(YiGCqLQcyhIJxrXC7h_iqX=(vn7SJB{JbdCtITQ>gIr*>_9)cE4U z>iFXF#j4R;>@jv58}IC@zh%3&-Sm`gzI7j3vn+>#+Gt>SiufJG*(!c6pfgu+Tm*Tk zuja5`m3Ngfxa_{_@=9%S!6+3=gU0IWh02xH#ktx7sC~6mEaQe>tW|d#^sVef4D(qT zir8`wyC#2%V37*?G{-LC_!xR_j?XZ9_WxzPt?zlnV$aGJ=G^?g0^WEHG^W-V2*jZ2 zK_hb&f6wDeorerrRBawtiRo|U8=5j2c$CI#Wy|+w(Yp(H{xy7SS$^NV!(>*PeDp?o z*A<-81X{*9wTIp{3x1r&aR$?z?%mv?Y02*OC(vkY&sEg6jh1bFuYp!w#cvIhr^3$S zFTHhxA{F_@Q3N{DovWBP8d^p?x`gv?{H%bsBz~4~Z3SaV;^p%Cn0BM(<LJTd1VUk3 ziD2aRT)TFyIA2+vyHt6shzU5{aW^SpediGfj*2Na%<mPnYqixm<7joIx_q^I-k>RM z+*6saZko(RO*=MMTQNVIUA(Y*t+HG-Z~=0py0C(8U0FC^T{c$ds>bZ(v@x?(T`+H+ zHg6~xn`UIue3<oJqjI%UyIeVYxoXIURE+V_dyUHKZf$OLb!m5Z_sY5D+S2Muaiw;d zTHHM|4s!iMG``aVw`1D7i%@HAXY9r^5S`oo`ywuq%S}Ph4k`koI-?6Lq65#>1HgG7 zHVXlu35T#UMqs&*p-yaqC0PnK{4_kR25SbMM=Q&+Huyku5CD1BiIu1e4Ad=GtzK5f zO0xr2!G0jD41nndAxMUR`#i!%*%$=S0WjDE&}1fIxjh6{JB+D11IyUGn9j3c{NtDw zC$Mzfk6fBl>_K*#Rj?U(j{OM6M;mNgFkM3Jg02L_9yeUAFekEaaz8)@g23?!^9X7h z#9)Q_HoMMVXK%3Yu-9OeOTc-ba$H%c_4J@{Djj>v{jQ74m8;cri}Pn)m2+2C<(d4f z+|%n?tzAC9`AVPl$xiFoZyk48$5HDzW*zt0Co1#v75lNd>S{%uuFRi3UlAv3;z-Rt zTe~=4aU5R)3oR}vN9JnEk(C;Kt+&)OPR9e|<NK}S0qY2N3N))5H!wz)#`Vt7H(=jj R?7N@z(l(F%{Told^nZjocWnRw literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Main-Italic.woff b/source/fonts/KaTeX_Main-Italic.woff new file mode 100644 index 0000000000000000000000000000000000000000..e623236bc44485389e5a1d77937699967818bbca GIT binary patch literal 24880 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 literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Main-Italic.woff2 b/source/fonts/KaTeX_Main-Italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..944e9740bdf61ca4f437f48f44133253c7caf052 GIT binary patch literal 21032 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 literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Main-Regular.eot b/source/fonts/KaTeX_Main-Regular.eot new file mode 100644 index 0000000000000000000000000000000000000000..dc60c090c7a31a74ffa16acea85ddb4e715ccc5f GIT binary patch literal 68228 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 literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Main-Regular.ttf b/source/fonts/KaTeX_Main-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..da5797ffcce7d6bcf6155a5744398fc92ed15cc4 GIT binary patch literal 67996 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 GyZ%3WHxvT^ literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Main-Regular.woff b/source/fonts/KaTeX_Main-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..37db672e821041b2232c741848d4a37052fda363 GIT binary patch literal 37620 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 n00962|Nj6F0000100000%sryd00000#`!W&00000(YJh?u4?m9 literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Main-Regular.woff2 b/source/fonts/KaTeX_Main-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..4882042489387f004bbfd83fa1aaa68d3655cc48 GIT binary patch literal 31220 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 literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Math-BoldItalic.eot b/source/fonts/KaTeX_Math-BoldItalic.eot new file mode 100644 index 0000000000000000000000000000000000000000..52c8b8c6b4089c75de5f6f82635154be2188afcb GIT binary patch literal 39990 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 literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Math-BoldItalic.ttf b/source/fonts/KaTeX_Math-BoldItalic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..a8b527c7ef6b56119ef869c96947eb0f3228c20f GIT binary patch literal 39744 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 literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Math-BoldItalic.woff b/source/fonts/KaTeX_Math-BoldItalic.woff new file mode 100644 index 0000000000000000000000000000000000000000..8940e0b58013e7002cc8af7f77c2ad78460f9411 GIT binary patch literal 23192 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 Z007KAqR#*T0074MGEV>i007aqe4Ox#?P&l2 literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Math-BoldItalic.woff2 b/source/fonts/KaTeX_Math-BoldItalic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..15cf56d3408b3d1afa9ccae05dae5de94e91cdce GIT binary patch literal 20036 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 literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Math-Italic.eot b/source/fonts/KaTeX_Math-Italic.eot new file mode 100644 index 0000000000000000000000000000000000000000..64c8992c477ed0007844d3cfd3f0f962eb91ac89 GIT binary patch literal 41676 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 literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Math-Italic.ttf b/source/fonts/KaTeX_Math-Italic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..06f39d3a29906ba9c26675cb57188dd25a57609d GIT binary patch literal 41448 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 LfBVOu`}O|;WxgSb literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Math-Italic.woff b/source/fonts/KaTeX_Math-Italic.woff new file mode 100644 index 0000000000000000000000000000000000000000..cf3b4b79e5b940e9e7a48b79022e1ed82fcf2786 GIT binary patch literal 23820 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⋘}=QksW*@c`5tZlWFk>o)0{pf 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 literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Math-Italic.woff2 b/source/fonts/KaTeX_Math-Italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..5f8c4bfa455259e3e0a1c53c8fa399fe2a4ead59 GIT binary patch literal 20432 zcmV)JK)b(pPew8T0RR9108h{W4*&oF0HNdn08elL0RR9100000000000000000000 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 L`ga**&^mem*y&Pi literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Math-Regular.eot b/source/fonts/KaTeX_Math-Regular.eot new file mode 100644 index 0000000000000000000000000000000000000000..5521e6a564de3076d4b790a9db8eb302333a2916 GIT binary patch literal 41536 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 S_0RvON*urNH{bu<H~$xtvntI1 literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Math-Regular.ttf b/source/fonts/KaTeX_Math-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..731270823704787f06e136c49e588614fa39ab68 GIT binary patch literal 41304 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 literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Math-Regular.woff b/source/fonts/KaTeX_Math-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..0e2ebdf18af76d3f8af92b55f7c76a60e30a9c08 GIT binary patch literal 23712 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 U&j0`b0LJ+;PXGV_0MWO6orJ?YRsaA1 literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Math-Regular.woff2 b/source/fonts/KaTeX_Math-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..ebe3d028a34a343fe4d31706cf3d2644d646cfad GIT binary patch literal 20344 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 bsAcs`lnHTDp9ZHV&mrs1L!ES5y9WRO97-I# literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_SansSerif-Bold.eot b/source/fonts/KaTeX_SansSerif-Bold.eot new file mode 100644 index 0000000000000000000000000000000000000000..1660e76a2b6ea179340472720b3cbd15acf1ce9f GIT binary patch literal 34204 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 literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_SansSerif-Bold.ttf b/source/fonts/KaTeX_SansSerif-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..dbeb7b92ab57a2687b8bcd80350520205127b6bc GIT binary patch literal 33964 zcmeIbd3;;PbuT_Mcg4N~1i%Fg0gwa;uHYsv5J{1eDOr*wTcjo1qA1Cdt<74zBz6|Z zNgOq+-Nb43zNF6D1hOsJ*_*V@OVYfT<TXp1w6BSqUy`=Y()^sXb!G5<&s>0{7TbM& zzkhz8&m#%mduQg}J9Fmj=gfd{#+Zk_iYe^G%*@U$`+vFp^Nc<4R+Khw-O<%M^P|OA zFvjo3_1>kUizjC9{MFkSQ@(++=a%j~olv;f&Y15R)Q=oIaqH2)3jXldjA>tG%<;&r zi>FSY+>7Tuh@*Myk$Vm<&c3Cau|O+hxBleNfyMn=aI^(=7x5W5gaYkz$_Mf6eq6U6 zI(qu<>POUTaQ#>KJbUE$(&Cc`zg=L=-$wTwUA+4Qe*=Fr>gI8sIJS87!226_o?`6f zCS%6OP8>gV`l(R!hZwv63AFk4iIWFTJoLtkUq^rUqWxJ$W5-9kc-NL&Jfpv5Ey~YP z!oL0Fz378=tY(*Wbx!;e?Mx=96hF8}{Bl`mH>#Ua|Cj2Ve3DgX{l8C^+{aEcO%@22 zV!iAxoF8RBwMzJB#pkG2oW+r`H(E#jBi6&^doTp~^D4%E<z>(OqISu)9o(>=C0OED z%SvK-h~0?3J(pnYEjKIZ*w@7cv`gUa&*6Re;al+UIUJ9(W1`41%G=qP$g&<)V`It$ z>*Bp^8~+5`iVu}fDf4VhmK|qKI--oq^Z0DWr&#;6;Fwu+Ez9M7xQCu041E4pemZd6 zBfg0D#c;eIpCx=yN7sCgU5~a!aS>%3*dFD7;Dd5}#&OTe5%=`qo;KO;Z&_URum)Ub z@M#bqK%aME47+fiWk>K~!o^xd4;$eBfHplW!<Shz-^Q9y=fiagQ&{B9%bykjHi7d2 zWr>xj9Q6shPu_DH_dkmJexC(#-Orz8G4XTOfFpgH_}}0iS++;Q7tf&QF;*SG=P`U{ zYUk)pwF95`;8ViqVSF~?Gb6|Qb~XxljbjY$7)!A>_Ax3W7!WLR?4dEKn=y~QY`dJ7 zB0Ed-iGDB+ieUR`wn4?#r%~b`W6z=l!()w1WuPJ8L;`1iwvLUl-Ru_jGWH7g0p249 z6;&}6r}F#CJC%1U?^8aYd{B8*`Dh}Th$fnTwY<EHdlR^4g5AUxSMFhouGp1_*WB|* z%107`L_?zSSI^_7zh8cO`NzvYTK>D`zghn5a=w~<{^sXzdVbHv?_K=Mi{HNZ&5Qs2 z;x{h-#l^4xXz@ok|7efbq8YsCfA5FufI#gQNjY^Ytv?2pimK^`X|p?=F1N?)^9O>V zaHJs`i#Ikkvlf;}rqZpMY_6@nBVXt&c6Imk_Vt$r28V`6){U~U@d;L5KRGqMVP<yY zrfcRlZ@G5sw(ZyL*m?a8yXF`0mK*DD`p+G~uU3C{%hS_m?!M<v;ubIVvuAB(g%uJN zcK!T@g+yZRDdyfjSJ8LeIA7_HSK1c#9!#9Qe!e0yi=Q^Z#+H`S`{K!Dg)LOrRC@X` zfNyH=WM_pJDv7-ZJ1e4)*q^BU$+n7`z45U&ZlBt)wBfql^T~8Fes(@l*|u#ySt&2X z6O|!48(LUMoU<A&?yt0=sCJd8bW?pdwfvK9^9gj~>|&x~-!{J&B?+pt)7b!>4eX8Y zU07I%S9pG5AzfkH<_|0^bXJr?Vnd>$W){&QZED+mMN3as^z<aUzfj?OJ1c4-jeaHe zpVRhDCaA`GIsHfdhNX(qkwp1a;%wq9o_(%c%V1dB=l5=lFJ8AWpI$(1dB;4e;xwq* zn>#C7p<+zs9|OympwV%eo=gM8>B+^4*mtnPm+<_G*3nrp3JL0@V`}LsmF+_lbhEs7 zftu`{mYp;Uj~Na&wPCU&xdLok;Zoq+t*7ujx-f+i?@eqtn_i@ekdR_=f@UQVM<?sO ztSFiE;<WV&#|zwEX~kW*d1Yv8Z*mgOq$eM9*p&_Q$#^=s(2?w{xC-Zl*ihNOINe!s z7chWCqT-yohQ@`H^yEUtMOWA1%7v@WiU*JJN{}P~fhBai;-1=@IJ-AdaRX?b6>ni~ z=lnT!|MWs@#dRQkcW1>{nA<)-x5FxoCs7`d<^IAs=9#*F{+!2y`CFW<c=Cj#K;6l6 zPWtD<zX}gyCX~#!`E!K10M_JLOfS8*Bbml+_4Bw@PqzT~sdfP)nMMC+_hJ$+nW`6< zz;jSm(g5*Pg^fSPIhWWFD6n%(Y}h$p@uVjc8!8SUr5!KcJDJ#v*Pr)#Idikg$+LUU z`SpC|Og^3hn1UEvAm3RD70z)wh5=_fMhfQ?IyMx}sdS7M&S`Xv70&5&j2F%sbZjh~ zGwIk=IA^0{dm&M*@S8d-9rEOk&PraMob0SL7g)uW|4;O>1$}JBvlHke9h2xI9aHEd z9n<I|9b3^yI%d#EI%d&FI_A(vI<}#YbSxASqml$V3jmFGZ(@qTMDw|bW2Hd&RxDIH z^Oa6eQWubT7T9)GQc5olrHPHbXbYfHXQg{(dU&|f)p1Vap$+q3Lo^9JYaw%Gb#Eb2 zlKt&NJHFvciUy;&YWJv|g`sBRXL>w6bgq|&Frt2pA058xEqj63i$k52QlS_b?W_#E zR8t_~5}FTUN?16PC?;l!cmc{yXV1>2XTdDy!PdbRLD2)8hk|(j5V%Yj1cE==q+*-O zA2?e~ClaG)@vPz1>O|3cMn%Ol(JE2dOY~meKL5B#D2e#vBCEs}CW!}{;HG#V-k6>N z^<g$IB_+^3&s)r1OzqvDt|(KB`@x39)M6axdlx{vm*2C9E`c$pXBLOzX}n<u<HA9{ z1<$+6OVANwmMRzkV6Oq8z}heC37)u!n=`T#_zy`#TyFJUz=#ooK>}~rvNaf_M**63 zvbbV`z!Qm?^enxMW@}V}j0RAHDBC$-OpHP{Qjcqec-Sh)^$e~yp=w3?S`&38a_vpm zW(Ixitc=xqFjb$Ly(FG5A7Xtf#|!C1k)SpM#yq-EJXhpF5a7g0F=lhMxV%y<Ti0*B zq|N$5Whh^-x#Xdfh01XLEO3aB<t)hZiWg&Aij^YXKPACM2v~<MAy*nyQ3R1#eVhi< z01scm)cSZ|8Wm@+h8X`D>?61le;G{=#gl91JGoHn;|2mo9jG%j{v<)3x>y^>%8+L< z<d8+2koKU%K(W#fTHN>o<(t5Bc`#5Zq0Kdg${-GN1hox-Yhngstq!Nn1wzNl9KgDz z01IOpC)eVH)5+GtV_cSO!-*`}PHi@z>N;veCp)MOo$RDGbaFklS&x$&s12R$qBe9g zPi^RAf!a*r<VI>kC%dT)o$R4DbaE55nZe1;)P_!Op*D1~m)g+DBDI;s$v$dBCri|Z zPWDq9Iyq3NjI4n9AYD|(QGBaBo50y2iBBjl<Kl3kvTmjIZFC`9-!9Ln^$~eSO^+5T zqbp61(S>Y!T%J+W6Y`9j-chKGtu#GJ7qaOoc}7i7%QI?vrtr8;6?NrlGG8$dRFu|j zch^NuCu2~?zj_@M75-*$W=s7(agOPek2P@CK_`zpOm13dAzhvslb<15p4m`pPJV`! zt#gG<pKIk0ZijaH;QTpd|Ma;mU46!U72|68!6m3zXaXgA;c=JAogGi{<=0l!H$hrV zpVRhFlVrN$=MnY@%$FO<YalN0A27B&E<!l}#_~UkFYzBN|8BXDuH{ddS--E~jQ?ER zuf$ZRx=($l`aiUJ?NRNb-lp%<-(eJuPna_{yX|%M0f*|i&6#!njccRpd+tW}Cp~4) z1@E-?Lq5~@PQTlKr~jvcRN(%=v%!tQpNDP?eLY+ZKNq>bq1^Cj)E~Vq#$sn<zl)!a zKNWwjvD|oDlfUVc&1UmQT13ky5;r9NdvaUy>C|nhN7JL}FSnYlPi0y&k7iTZkL4zF zA88wE`;+#e_7Al`+x~3FNXMHyzL9t5Z^%EE|7oG4aH8<7&RFNGI=|fcuf@sYL&YC- z-Q4xAu4lXVbpK7yo}TaZir$Xilf7T<8|nL8-?#dH()Sw}0lk30R{;ry8O%JdtDK4M ze4nq+m+SMTd*89Yw^xLo|EFFKm5UvtxdTLfEW@^4NJfMr_%(Bt^tSnO7?0t*Rp^nf zIVOa%z!b%;Y>uy~@T^q$l+6oeH)Ac0K|dbm4QqNR9|%W;;pVAq4!@=T!GS(ypf?hZ zgoB1|=;>Uxi=*)0G~v_~_qA?CF?3B?->u%D1~egbzgEZt%Y-H_7<#qO&^XuBfB2d| zsEFr(AcW@Ecj^IEa44F2JwVeg;A8j<{}9I0z<SuRvcD&ph&Gr2gJ7LO!G*xs92i>= z!xDnus^LG|t-$JbiOq3q+yScNr!K83Us382n-><!wuXkOhKBXJ9?J&?`UckVa3mxL zm!c6*@cwic$GERvkyTW_e!ZgRvWjSIQG`F>@#w#}TA}!q&Q;|#gF{^Cn4)5*;Q9ks z7FjSDTb@vM0S1TIDfX7Kb1*AZZMPyAr_s~QW=&nFZW|t?D*HTkAzTgtEZ~a<*EH9h z(<|V$WSHp}ZRlBPxKPe<cJla<!}}K(cJ0`{dDHBM@>r>_tI(QiZfXbxd`=rX#1HxO zU_O!}L>T7;84E&v6QWc<9UK6xdc&b0u*SoK>j1jT3L>cV@H9Xi>RUb6)2olobAmrF zrBirFuy2C@I1ovheofuFH5u1;?+J!ZoWRL*nT%qO1sYODK-D&FN_1$hFd7;GG~A}e z6MOaqgZ#%hx$nMYt<LnL<wm;V-5WP?p4+rB_@$`NxHCHL@d)l{Zn7(UW}{-Az50GF z67?Hr8rHi#;^f1IA1$p5#opBDLPM@tXSGV}F?1og!j(4)K11`Vu%6|wf`|Q*&9Lj( zE;d#k@qnrAnoToR6+24(1r`3VYk>PI6Y2@3D)>7Fs>U;J!Tk}oxjf$6l}|TldL$nx zaw5b*AY=)kZsJ6a5r7mR1eK<;=^VUG_$4r79tg6zQkp2ZU(N;9t>eCafL9L%BjLW@ zz(A=#_p`ZM`kLFDJ&Km@(xylK+-91J?ksi#Uq!;*(y-xO-k9bI286MD%FF#+F*W<Z zv=fwOxO@S(%6Db6JmEQY?NX`5Ww&Q@CbwlAn%3QG+A}uJ|G=($!&Cb|-=x@@P3{lc zy#<G=-YRrkmsjxjj=Ow`=778UXmGHr37+b)<*zDV0nF_1CU&#+Y%AMPo&*D7;BU$j zfW>sdmYB{=n{MuBHdVFlVm6z)+pr7OrfzL+n!9FtYW>7uUt6}RySY1?nMykJhCC0Z zQvhHuU}uDa&AhL7kcOX4r`$XgkXSgt>Nu-2L(f=^37{5V2xM!JlXvn*AHVQk;nmJR zt%gE2Bb732p^)0;Zvfa@bf@1JwX4rRtvUFf_j12Fm7httqJ{E>r=63ArWun?O|*XP z>rZ+4*8_=Elj^<YX0O_uN<9Bi)aQV(|CZs5_&qND`99738d^1VzH+`R>}}%C?xe50 z-k0q5_aMRn9P3*CM}>=Tuvxai4zo{|y|?bp23#gsOjiz!vd%f823J+KTL;4o%>kTT zfO!fLmdvvqtYuAu$eIRG*`P>L1$W^VE^b+UR73@@X~IKM#F@H;CV1zrmFIJ@6^cSR zvS}k{2bMN2Y+C5=Ep()lY?jZOU@Ba)3>_RJ5^mu@(;iGuq?tz~$oqh?G)<8Z2_0a0 z7jXy@N|F-B#UP#Gu1HE^bSO;pQR+tnC5Kx=LHU3Qp3Cyxn{IQr+~ZHTcG?bh>cZsR zIX8g0-@$ovpk<`saO#eA{SDrYvzm9;O<Rxn^pdC5@Y+<pWoeVwY-;oC+~^7iLLU7d zLscRnuW3v7IYZ;(8%x(j6XmTgt+Uu^&cDO2yX=~7Cf|IklRLDaX1iTiyuzLnW`{C6 z7KqLEdcvAr7p`qvu0LrLyZUnjgI=!a$z)5Sv1lsQ*Vq*`(%0Oj3AYkjk2&UuoqUEp zEoI}LvWujmDp-&}T@#8vNC?P8$a=Wj*Gfb$D)_0j<>gC@q%1rSIj9hec_DGP{XZ(% z(ATZY20sS+jWZwA3h=v==+WU#exZl+TF`*N$YmuTlcLq4t&leo=Esapw)dn=GxZ)Y zjn=f`xFu}f=lG>+7!Uli=b@fo-*0f6qPfrf>Db=tpT7$l3kR>z`5wHhS-uMeCt(R4 zZU^fMV=(I^iv%Wl#0t&~fZ_>hrj*un{cY(chay}%Vs3YAhf6#oO!>ZFK45SGKCSs~ z{m|B5Z~fq5pJLEEr+9`xjdyNlJ>{YfzBHSZWQID05$3C0fJ~N%ICq0Sm935Od}BN% z6^(wNcen{y92$Tq9hBIg(hcG<db-HFco4OccjvN${R1T(k`M?l`Id$3ea*au=ZZk- z@2A2IIhQNgknuShGY$MCKi!aNboerbSk`pqe7cBTrH%_jafvSkni_-Jx)B}-r(8VS z*y3vC8COeVmb+5z{502FT%y@!!`amu7-o}e#Df1Dm6$lp(yY7O>BL+&LDv!207{Sw zP)szgs7zVJq^P@5q;72uW`bEifnu<KFlos%5IhE*tmy=V5TNui4n!GC@>ZeP?cQc+ zIjxZB4?QGo<2LcoL&@i2-nYI@ckA|M{cUfxgfXt0nsCLP7R@ZbgFVe2f<F1;Gy~mp z0R-Y+(IRUEvZlOFGqoZg>5p}qc|jHNsx<R^SJV7BbF$Cy9`1ws-B5-d1f<$UW7rKq z@~s1tgwB8$;f|C>Zcfb58B<T+)NJ^CM$=8Fwb)NnhTy6*7Iy*xfvGe<+wh-Y;AO*4 zIu(H+UEM@*3Wxy7EZn3nu3q{W%mKvOagVE{z!VsSUR)y}8f)JV6;)N%_xng3LkWIJ zRUS|j==aL{^^gNZlZMoJ0<5Ln=pyBn6GHHlzz24iGlz`@ctBavC@&Sdw+15MSi6Kh z=8tl%`f=6%Z&9C)0N}%FB<9l;@5MV*A9^QPe)%8ybK);plnt@h*X<r+fDl9waWHuZ zemu;{Iv@cTmTZt}BP+F0S=)=+07w<$?UvO>K!|dbngebiXN*zVReP$!rC5VDS1dHf z-A)$eQB8`oW(Aa77gxD{DW1l81X_lkhD4GwDFpdOat#asBo2ne&GGqClbx&S!8bfO zm{xg1GBSTUn1+-}c^$BmggY3BHUxrhoND4PGGqG>ZuItO_e|e*+w?tJkN5W1_qG;J zHgYo)nN1vwOq(~X4+a9k^*5N)kprpgB`$0RF#Z~PLWVt9c6%T^U_0?<(5q6jEn<vg z0#OPjOOTGBDC&*SRNavAa~0A6E@?qZLal|5w161Q5CQ&Md&b&IXaE7ul8IO};CH(q zzA`*x09??za#9pn#zG_<<$cWp93WZbW6%crO8sg5&ahuZwD3}|$EF$uUF>w&jCl1a zugwVT7LB6YA5MZhs6B4Zqk8qb)$i)2*Ojyz?y%oy{^mChqJtv-{SspzWA{EeG?0hZ zU8jR4)Y8PCAe`DQ2aY*b7cLq16^$eU$wqSM@s)=_J4J99$YMPLwF?VR4&Pn~rZhd8 z=l#F~OP7Qcs_XNX!V{))phq7msFoTpTawa)7%_hNj)A;gUmw-%TG&(*s-7M#mb;7P z%?j^{uJ2HfKhQX-x9Bwk{EMFtm|T6&bYmm`+o5UhxWU(G({iTJ?6ZwgZ|sh1HjcLp zwW|BUEMSf|<38Y-9%@RMAKKW}OE3d{{R?0=%>M4l-ky*GQCCBhJZg1J^a-Y`_&dgs z<)LcuN31|l(@69wVfY*@+Ixvx0MFVjQF#j?TiXk~MPrI4%_BKou#w{B;tMpb&xWQb z+OFCgG)0oGJ(J3{XM>oH`0BKPsS>CyJJyoPC|Wh2dP%qJQeb|KbNun~XlqDcmvT7c zG49xM;^5JJ&eN|rePm}CCa|iho|*Z9Ttl|2LswNk!kaQ8-j;yJ%$3dPntjWSH!h87 zZ7;v$%#cS_Zcq$+zfu|>U1wq%HtAe9$^a<%9P*Z6iCus#G{kn6?GeaUP%o?N^<iBT zm^t|7kei_>aQJZU23IRzRsn|(=RQupo}Qkbp`O9q%d;g6Kbp@3^}I9~Egf6RUK%!O z9eyAlFmeRe5^%B^@*Tj*m2yF->=B`dT4O>BsJS+B`<ywW5$^rKq1#o(=?&PYOx;j< ztTpskd}5P(?#t=Gz#v>h(*H9!KxmiAYWz_L<d&w`jP6Ij83=s%1F_ftUX0{O2Ke_& zjC+WEuI#Zx+JL_pdMg}Bb%xbxqCmwvU^;6$VW42TA@n7T)Y5}j&}tPEU-BjZY7H)y zJ6`Z5HAJkv%LC9ZKv7`m@K7e5Z7mIFY(TC+Hs=FQC00qAfZZq2j8KduIq5-?3joxX zNea?G8dgmo@J0d^|Mo9I4bY>vlt!N4H<e3-b(`*;ERLiMN3zsn^YWM(<okorSv9{F zZ^S>bVH$j{G;-$I^%=J^kn&`TW7qBsw+#EB9f%eB?f_T(Y1!?A*oAE`8rMjK1o)v8 zq7bJL`b5%Rf{tZIhCzCB6@<sjEA2qXSGJ4Fb|itD!D>}aQAxna=SsS_o@TWoNgQ8k zr9qZxNFS=VCW)K`YFPSp{aHwElhiGrqcI|HDQ^Z##eAYU8u7YW2k#(xqos<1U_HTm zfyRJ11U0}9*=&SrGa&5|H&=*J!!JN?5=@m8(vj&~dV_l6CyJs7hcXs7RL$0s9-cOg z)HPd*t#OaNA-OfDg`AF9%yf?=+(A_j4<5RE>rDH<`#6v9(YfZo=CH#y)R|q_I#)<F zwWs-qxaQj0Guc|^-pHYHH$3@LUM>F?y!T0#XV;V+$p8c^saAE8hqVXm9Z+%2k^hq* zS6(Ue)XNsiF2R}`kT;nZ9V)3?bypi`n$!_V<5K)uz>vBnM34eg<a^GxI5!S1`1#r9 zX(J(p3JAU1zOUmepj)BXzG#Lr4sX)uc<|r$lPQYQaUyQmOaUz(b=!Yc{dUfeskG$C zU$6u?*d%-GyaU8umn4J`pl6K`LQ-sK4hph*nc{XutH^4rRRxaFMm`Hq05_~@asX$9 z&?beGnjW{(3RcOk`s-9nqx1Lnj12Wm_D*)@GwCpi2l&FtXp?$3fJ0=whHS^l6wAQj zU||bz3do}L4h;6ATsqpC)v;TbIvpRK^1GnADTQe3Pi`vhxJ_4hvBcxCT-+UWM~fx9 zKGV}63^fxUwu6REPh9AG5AaZBK4*uB2J3DvUh{Nj@O7_j12uRy&b7A)P0tiZIuh=_ z>h;BmjiEreJ+v_%Pq;{XU#0I(R%U-(c8`N`HgQD@Lh-9JP;$2^LQ|GNwKee9X>C<) zzM>I`wnmT^@GZ@-{v>i%1NOBCO8-y-{UH@$Y2|eokJwdvim)JWi*)7+*<{Tf-y4u# zHw#DW+93gVf@4llOa^eNe;lfjMx-j;KM?{x0shqJfv-l?<I^`ycYFN0mUbX9&uA@- zwFCinwSBfTo$9xnoZGqLiwrvrmn$7|_H*GBZy&5)92k9iS6`FeZJ3h|#Yl8E&$JmM zUf-rd>zpm(QFl3fT}{^=jYJhaes|b8&<R*eJBxpvx!{SoqwIFU=w&?S^TOmJqHO_J zvtlx!T<@F;y;;)ls?8Y$S0mMX@shgomBrHbEIZw9ce6V_l=Vx`ux=n$L4Gg_Vkno{ zYfmdG;tkS1Q&i(p<Bd-URbO91KUJmr%}Xsg!l7+sL(6ex*&mhz*0{3akQ;uH6wE(D zBnrxa_Q3aV#XL*Wg^&<pjSfxYkD-Y|Ifz$nL9vYns|5f7S--gU2`^A3wd;i^8ycnw z4$*wzQaHSjGwTw7yzOe9txLf2)vKB8fXx`YS&8vSV7tdyR~fmn6ntVF9mnimkM1iA zuz`fK#pQxWF6N4b{Ala!(}|^!2dte-TSt>NBCaHhxjEUa@hyCd!|q5tzdz}B(bZ<S zKKQhA)FyNjz8=?4olTxF9!=2*K$QBz_}9djSQ{H<N6L-_4B4Tg(A2ubXa#y%Ru1`N zpt0j75+G7uYYPzRZVgQGrJMOQD3G?Hd_I?w4y~F+BMH*dVrt%UBS=mPD3LkKc)42m zkoN|Y+q+yQ`k9Dt+Hvc#{_O~$=<Zw=K?Tl@&?f)UD<g_st&x&n74wSe&du)F+%~?+ zkxAKs;GDPh#&%p6sJ`hc5k|mh`M2Wz;!hA=oP{2}y^$MAC)ad%t8_4CT{{5?8Kz<^ zQ3k$l!s4$9qMDLovqUXt6XT`6j`mz8*%E6A`b`~~^gVW|UDOr1nv5VuWdWsy0}|<! zPexrPc%O6u8hSvoE@&nsQ~HR_Nk!w)b5EVz{nlQ`M1Cmj;n6SrRkrWd3Edt@nc*J~ z51-jI=3X$&*?mo_U2kZJ7@XU3E`P#sBzo<R^XI;F^9;8&=5H82HsXBhXM2aXa?$7% z)!)2!b}FXXRLz_W82q;)*wAmk);{A$u*a6Z@ni()&4M9+Ts#JyyOs5`ne%NVNNYA< zkYZF^75jiXq;}MdjJ3t2dDKh{TX(S(9!h8wcCq5dep0L~cHYI4L22vOJo&IOBH2=o ztX&VxixNP^)9Rbmh+X-vU+FJtVTbDVR{td>?0&s7>(OoBQ5`p{LYU1)n`7TT!&Vkg zV9JB)^KY^R$-D>{-92JSKu>{QVmj^Oq#FEyTQ{9;H;3;{@KEf}FxPt^sNOGq>RDD| zcb5Hd+A<ILWD&L-1eB`QhTek4q*xG3s+koO0O5$G)Sz%h3(wqY3u$wOJ93Qm_vA_) zrIx0~D4dd!l1a`r%Q`@yqZ!Jk<p`E$Kg@<Sd;#zg5lSe1z2nLt#WhfR7a$o_9(iAC z+uqHi?my`0+?)9131j1Q-*mLI6pFk;>*yG642yvw<Jvi{M#L-q5Otbke)HIzOG!Mi zxqHB^ifcLlykhj{<IzyHMc4wZ@qu9w5hd?~R}ihdUeZciIfG%>m32k2+-p!dIZHIh zqjr<9pIl#>6+x5MGtfEc5w+=tsu_e{1b?@f-~)1?<kjXMe&Rx6;=TFN$+<pQ&rTTi z8qlVp{pc<Gj*U)rDmrFZMRdl-{X?69*SBtYu*L51*$iW>j8z034&!CNet9Sf$%WVl z=I5ZQ*;{J41T?pQgSidCGYy-WW)?FlWwDhXu`-h|Y4`$h8_Q;{Pce+ZdWB^(V{Jn$ z8o>htXDC0ynzy=Ttokq|KyR8fAK42;$XPj0n9|0K|MNlKJip;S@B3b9&dtnT*Lb&I zU6~pYuYUfI=O<m9=A;_rdgOt&;wcK6aNsBtJH+GQ@5jsD#t^iLKB#d)8w6xshie95 zlKW*59j+M#uoW0zfT|(KbVUOXwC7p_IktetMu)qLg;W#~M>eL7k*Sm+H&nQnB5=|q zqMVP*4B3>PN~elEm6n)lsl@~a*ta~SJ?l3e8V3ndHpt)o&j6x*3jc&OW_3T;oHl*k zmTRIh<AK-K4cym0@G^z#emzn5MTvWXxn#~ZHN(2V9Ptm*RkVSO+w*n!^aDNxwy*3- zHzJUZ8+e?=ZjE@OfFhZTiyFpEK?oHdl3F&*m34C3WkQUP@H-mzxiy6qc)Jde@GHk@ zP5ad#BUn|dIYcnNGiL}2{e2b`-m?k?F{*rObxil)U-QCUHu4pkd>AsmhpjJ<cL47- zj8n~X9qK&L9V`nX449y3>I$cV=u#AYH`Dc~zByNFO{Y7cE64K#UTM-qAfzoiC1XXB z>0mD+FI|EXJxH1KNxV*tefo(z_QERGuyzNIEpKLa_~^c+qup_l$so-~iS9ZA?M`U7 z-}(4Q`Ti%0rpCP~AIQ|xnz;9u_nQ5ETrYMh8hi`YUjvJKYPkIc&}fluE4#ubX}`sU zP*!x75ZZvY)kPpXL=O3rWe(FN<sMlsXUtX#w`Ib;mH{EHdEhSMN+f{?Eg|Hk(MYp* zj3-yodXF9y{k=3P97a_@Jt&iy>L=A7*XK^W+rmfvUi@G_rJC{lgY~nsZ+OGm+WZl2 zlGpur7@wc@Jn5IitIJZjq%oj6ebUv6bMA?uUMqH4AAsyK(cbkdoxGwu=z`_Em3Tt- z_Q&zwB-?(W5#+Zb!pS!!^T9aS<C?e#m7@dT@>EVXUD*X)0ED!cY7h@vIN#CUO#xzV zp-tH51qYYXTmqM(8Gy0R3nz6}?dc`>aohgw`?k2b-L5#CiK*reax_ah?boaSTK%mt zv!zYf%z<@^!#@}aY8)9%y1#}OpGW^oY_#m`>r9424rIfv<hHqp-Mi*EkU~bT<h4g$ zQ|Ri#SZOq+Lhr~R)J#(?QdTw$*mI3er7JTWia;O{W&q8B3Y4|P!{YP);UV30d`EO4 zhKww>4x(6*?;xKCe_LvE8+Ulr(Gj;$UQ;e}hZ6A`LfCk=tGH)(opwpy3e9W2?hS8A zZOU;|;cgq(wO5Z%RNn|+Rh@5zF~&HXD?7t(NGAl!z^H0W%ZJIZd^`NcI+{?K<=c^E zl5@K_3wRwSi}NTscrpkNu3|NL9j&28k&MOvG3c=YxwS8SQ4Yz%_viz6A-F1I2Jrn$ zO#$3Uul}<7D~L=ff0R4X&uMnF?3^BI%fy|`fFXf?hGDV!X%;Mg3Zr&y43$zC1$+x9 ztQPgk@+IXSc~i}zot)_DP9++`y)yl9rSIei=(R|=KAcr5j>7+|fTU|gO`(!hXoX@x z*2?T=m(Q^6-y~*l@ggj=Wk#}IkoL8b#{I8r;-(h~j6TD;YX<rcO?q1{U`kTg4WGCA z+b@R|CGe$c(u>qPz-E=+5$Vz$8>=7P%u$85;eYx}pIELww?d4T{3ae(Vk2c+DdMEO zjXD=_S)d_wCO<$~UegQ<K_GduuY0JoSCv^A^^yBqcrOvzT6Sg`Sw#VNh!MPW@a1_u z?6&<_Gf5?`jTqyf8*i|AOyjN-92INFE0mzCnsC8G#PvE;s|{B*oVMrxU*Q*<au2T= zA=wP$$l?7V;zR*h4+~ZtHUwOinzEEXmwEH9QYm>3`3hG8u%HsS?G_d;v}baQM9u*( zG?H~l7qaw`B$<{Om`|8{a?;i~kc_8}^MYv5^@sn+quP3_&phylF%N&v_wK2kPP->m zXfL(T_;b+sZs3bS{>bmOlxB<na`Na<<qLBY`91skXOXJWG<;OcIB9V>#z#8Xt1*WW zL{7IOGR_r7A?iA<HbDP^&y!QkuVx)!^m0b8sFGY(PHwWllm({4XF-@=SF+Np)XTGZ zQP=;ogvsxCZ|d<+M{nL)=l=Yrmf`&9x*KAx%>jw6TuXfB$tIN_KVD}<8Sn2*d#R_p zTaIIV`5n-SzX6SSj(wr*o`IEv96pLANoC0fdQLJp=T+?x@%~fw@n8<&?b(AtS-E1Q zK&Pl76pa%v+L9cDFV&LL%gTvMA7@#b6wR`b2novY=-UoOGb8!!Qoa*1^d(5^Mi`3N zw<U`xfyN-ub`3csZcwm&9nY3voKGMMw+^3XwS|XCN4HRgU$;5fXv``8=_$={m`**S z8aY$q%`=%-EEbwI=lU_^i4H41o2|)}HEcGyiaD$YLlzoUAN=_4Xh1utX^;o7SnNTw z6~XYMLl^JZHG2PSX5%)8vVaU-j{yufRgcyrx`)o(zJgzG27YxS(t1nTLxDU$<VR-& zIJT<AYLI}MSgiY1*O=f@D1DdIt+B)1gQfnSd|Nuz6gw&XPHUriQnB}NzXTw}Im9Cv z=o%bkHG`8Z8lWJ8B(aq5kHa6zxetZ?>LZ3?>b~NT-B7k&dlR8$Uk^ggzt`HOZ{9e& z*(h4-lK1vZ?o=1j5v#v-Yr0d1n?^Czx4rejH`LISe_(F`K8&x!;RASZ<jnq~$N*2L z*}3x&a4Ukpnf&)iCxM^F%Iu&Ng_=$umMIEWi0QIcl%`N?6<tYWh}WMb>zH~={h1NU zl26rZ(HqKgK~^Kd9l2fBgP1Bq$S@K5da|v_7Ua!O^Jy{>G7wb+M(Lg=2Q_hSP<Kty zh6zE6HW(I=QX2f0M<fSCoDi0d%DWG7SBHJ9x6pLGgAb3sa^$)`--_n#PHiY18dpzi zvp3#*rY*f|OTenqO#A3u`rr*dwcW3|9UlM4Et>ma|GHq*Flwr}yR~_)FT@)~_+=Z9 zpVD0gM_oy`4F_xhJx1FGUiXB+B5yWTcI2V*u*Nm4&PV>8%Xr*s*$Q*JaJqDNx8&Ia z$(67tXcA*hLvaMhCR9^=X%H&@a>#ot4Gv5xyp89ics5f?KD4>HafQ`2Hg68)6$ARA z$#wB5P=~Y$qa1Fn>Oa@<$jgyV46k9b*)Mf0;L!&_R~>BUc_>jUa@S|s6DU&lVA@wB z!?HqZ;<AD=5o7`*va$ElJyH|CkRNP^RE9tz#%(2PkWYhR6O^L0TG)gTJ`FEhs@WH$ zLUME6_(?z1A&^U<&(sj%<UCpZT~4nV7hdxp{#hOAUWokq=cX5KNvJo0(3Y3~-2R=< zH64+2gk%%(C5$V>`YuEqYxH|325BkyQu@ftl}R}t9hVwBQaoj+Wx6em!Rl}bD>E=N zlr63xL|RZw18T&nTzkD;6^mQBGolqc75^Q_RY&ygF^78m4ynn9wIBYb(;49nKNKOd zhJr@*zgGWT4VWg@T&&~62E{KL5ZE9)=o&Wp<a$4-bA_Tk@Y*PsDD$<FRdpVg2*aHl zCx#}5bn+&Gl<d&@EXV?lp!ZO=)oO_h@Yco%r{mzj>L5Xf{z#}^pgbMmbGr;jP#>Fe zI8C*8*5IzmZrvGD){W>vhxl+%=}Rdgr`o+mG3VM;v|KmgaN5+qSv|7g)$9>9D=yf* zM)fDvFE+#E(RH`^W$x-z`NoT1aKNO2+NFy#YLNVILG!8V_fq!21W!ETqQ;uX{7UuN zZv7PBKH)-R!r2Vy?*d@8iH(<S8(X8WmsjwXa=&PPDMBO-VXJ_YXhpFs;F%4@;$k~_ zT?YgGR)nmUy@3P{jJ{b!<czNvJtAmvf64oEMHS)``KAQTG?-WJnIp$wbf}u!7qWX& z4u{Lo{Nwoz?J(&Ky*%MZ$Y<#}!F@9`E=|4G6Y)EtQQB;6-fIla@j6d}Z|84$SkVQ< z9!DB)Z0FeiQIBHd!r=fhzwP%#^_)t}S>V%B&xBKPpA)ZhkHt<Is_JlHaT>t{_#^%d zFzIE(WqUE7PBv<*O7x53{FAv%G}22si~(ZA#D_`KiVPqmf!sR+1!#eEE{_O7laS#G zWS$ZSZ}2D+<3_~iIGzE8#=^Jh&bUz;P`s+`Wv}EmUtg!sG!*gbR|_HD?*$bLJ>dN4 zDC}OL<x}s|VQgW{0bO@J@!4107lf0<G;G?-@BPB(F{N@`h}nok7*~nyDmw#qjH#G} zYoxAMhAHz<s?O48m&q5_8m^TJN!+qRPQOQC9l55c$H_`cNoFIe;JPV`y-G4CRfvYm zTl*}8kXMqHYS=O^_`9pmhiopL`(U&Nm0vugnOGqsc=b^pXfR!h8iY>)Z2EWqVpWJw zenMd3j1g*%likZbrV>c#qKf_l`^j?$&OoKXw66Z{H`ds<B5!*fIn+%I{^cm#bx0A# zXaNIc0)Qt_Y?uZnl&#rhwkAx7sHyjP?yH|#;u99pVRhkVo6l!vTUxTF&u6=N-ZJ!% z&8<;NtakA$){#s&<zsL($T?_0KMeGvk@^AM48(?VC>aX+fjM0hqfTarq+fwhNpet2 zk`aGL3D(t6Um9ZSW7dlU+QLn>4kgu?_;T8i-lB^)kYQzYMHxYwF2_DXQT}P*L7erT z53G?>l#<J!hJ)rQ!DIE3<k0!q+@#FduPyDNnZ>f7R4xS*7!yh&_Q(-M43q>vpeshY zmGgX_{wT9vWcAl$s`x8S)dXo~T3dnS)EBn=kjO0m!;9r1hlrFe$wQ8*&;IEUr6CXg z>9bmF(n>>)$E-AD<gX!@<*)b;;kTS%?<%_;7}OvL9{RCH>TM84LJKluzz8&Pf@X!X zb`e2_(IHo;tOm)`S8E1aYbEJOitHC?<y+ed=7hViw|Am%B9|NN0>D;sGt)Xv=s-XD zhU!>G1X2`ZaHmUgP9PubGkOQG`xICunV)=pJhyYgfnADhKxR#B-S>q6aeuWC4My~a z>+{38&e6iuVfT$~y{_W{(TY`W#oV|<m^<tWvO+K!+1J?~d55&R&7j|xD0Fmg$ggvU z_3y0fh$Mw=ooVm(gL4Qru>3pWkoeNZK5hA7AQBZ3Lg=ck5m2;2CqVEjUcRE3Vp=fK z$#v5R3Ik)QWx7dlv)xdxtaKvFj89zN1`!2<;%dTHnVNtNtv&_;z)PA~saUy8OH(xB zaT+RoRdFj7D+kz-+*$Qg!6gTnhk}`~OrwD&jm!?deqsPi`?@-%+p04!J#n_N9UrNF zsU<fS^11?}iGn>J1Ls}wV0q2EUZ%JG;-Am7w6|QhJ&}u%9LWF=zXm)kvi5Qot{%kt zz}Mh9w^Ul0vmlu%uqZ#=IY~+$G&(CCw*`wbNHR+O9m{fPVG+C$BtuA%r=g@W-xLvJ zQ(s<FAQ^Pc+tQbhrUMSe*X#?}=hizpNEqwi=5BoE=RfjeCBCNX9a&m=5)XJH?QPBD zlWwyMEYz;dBTAd1xu!n<JLWnC>iL*OE69)M!i8vedmH9DMV1Ms`tnkk@ify!T(EVl znO-F<Yu&7saYyES%jHd=VOX;WdX(v9)I!d4{UJ~}*0vz~Je?iNSqVHDK%;K`wA5BD zUdA(X6cZdQ(F_v}@%>{n3tj!O?h_k^?NE-@`MM9jv#7>CobD}To7=h?JeuCtH@NQJ zn+I=dHSRt`8uA*SoDu)<`tj^<BMn$hMC;Iz{<i!({v)h6Pa=~JIT|Uj8E|+Fl1Aez zw)7=4pKi@(N<Fm&Ds=`x8Jn1JspGHCcQ!-D9J(LsYyQ43Z+<wYojn`%H|DRK)iumD z46kiB-uD_lrDcmv4Ke#;Kl=&16<^3Ad#-i8J6J;B?aB^CGcxy_@9hkPM^)l}kco`n zhd9p=J6HB2BNI8d<QdbjF`TYZOq#N3nxw%B7LFC(wDi{s%VH$ZL3K*Yq-l*qQy{N8 zLw+6E%vST2Cgh&ES`*B(uKVzma?6?raE|g?h!HL!*@E0Mj@DAPH9r{yc{b()P^*x% zPm0xmOt7>Z(qvZDAhjaHNs>zjfb@3wCxkcX(3{@KP2Hn*q_H?sGm+lX(TUXl=Cs}C zvnQL#X6h`!#b9gWe;D$M!btQOR*GRwSPzsuVK%ks<71X+{n*E9M&ZXl0hlVxx7;hj z{JY4Gp;eOCmA4{ZqEoP6ABh8lN^sI+|3~;yz>Kl9R0k`BFa$Ui#oWzIGdjl%Lq-o{ z>gHWLx6DmXj*lT?iVToI(ngET`hhFpUY3R_vr2PPSpgwP34t0*`;x2zY=qV=N*c*! z!!oZN#xSg~H49V08-ZQvZ_N)l``00HOV@=>u}8)m%l)^^lpw=*A2jDSyYwSF{5_|q zQf=vG-4!(2AH5+G?aGGpg~7J@=CJM@GIm|3HSoem6M75*!`38Hq!qg@TVBYgBTlv5 z1+*}`y8V&$Q-)~v4z=diA%nFkoiq#4`~U=3-$3;n%}HC-7jrseFlFT8A`ZQk@r&S1 zeQZbB+tW^qn4!S6HG!$t-Bw{RC#k(kr-64hZG<X-PBkyFRY4JrCriT}LrKdoT30eG zfB}OjF{Fk^fK&~8){2j>PVAeRl~$Kp>{O+>t-G9&mc}Fsfjp}+gyK`L+d4R5d+)oX z$VIf~-S0=*h!%)-YOj7p-GORFa{T%mh?igu3Hugua%1q+-C1@8eb81r({Zw3L6l7( zCYj<VlL_RYCHj!cUSFI9fUVYEwkd<GkRXv2q|nP<8S-t3CcHA-EW;wrS}+`xV<(b= z*M!VFY|UWlDv|JtcjdgW3+S^5rv{G(u{^-xG0nJZ4zVmqP>jA#OX5keDbS7v3%JSV zwA-B;{8I|A{%bANSv_3?2JzG7PcQeep92N~Ho#tX!2>8t^OOdUwLvSsA(<wQ?2SE` zW)Msb0N`1WxQGd@X}P8m@w7|pB{=F2!8)4!P<tD4ipXg$rHRA=2pYMbR3Y|E*)k-P ziE-2Kst<;gw!N1{c7=9lM?42NnAFsI;EjQElJmf8H;ua~75+R47j0ZxFxJV%i=m)7 z@?ZajkcM0{{?N|*e`|YP!Z4Keq88hmz%>6FbTNXQ1TQE~lzKB{lo_xqYTVn3?}52^ zSK^o!j;vHz3`hnzt-v1|TV)jFT)0pyjqV@?B?G0ugXf|6!*vS<<*Ia1k91n%3~Q~4 z6Y*bT0dv%mjJZX5T#x945v?hyWMx_<@vL*EeZuK7h6i=K^1iL}rij3E<>0$^>S1kk z-K9k0H9!3E5l6}kP6{UKGSqkT+wXROM1U!beGTyV|0oVVa3v1c!}6EL!NH%DF7W(W z*w_9I<CGb}#(LYELs)ygk_i-|v;wvp8P~+_Ddort-CU)d;x=VRW;i>X9RhPCX$L&R zqV=_mil*U8CUvzkVq6xQhW>orv7=FC-Jy*$a1+${6!6fN?`{MszHo^a?kGrg`2OqW z%$<W}<9+X{P0IV;ueGFN&8w{JiUR%zUI%6BM=?7!Ue3RRxjImG+kvSH8^{MRlXY(d zf^#+eqx5A9NOKiht#Nq`zyx(v+R(d5hzhL7v?7{V2-h*vE*HYVCufbliPrpEF7j1h z1hF=JuH^Md1++%o;O?318VEr@A<}(8X3x*p1{rB`bT|V|!!OS70SfT>1ajYW=!_1m zyjqj}Cb{{V?6<~Pz-MU8fi?bc{A)<`w8j()=K6~YX*+eD5evoqzq#$WuhaIGM}$3; ziBEX!PHzZ1<anKqXYP8L$s2z3%(JbzLdf0IJhyJp6AF0-t-cIkpCkuxI0@<Vm*rrP zmJnoG;X4H5)yelo`XHHe*jPi;0BQ&$A+<olY3S~hW#X4>TpQ3TMN{FOqqfr0xq3^| zFA)M+X-NLXtF<hrtOs3L4~Gw>pW(%%Ax6_F&f0USV!9ZQM#4T15G=`|HWAozmvAhJ z6cQmUUWM>}$_QDSH!|w@)CQ!-Sb|&&7do|&ZrgATwCGK_j(0YWW!m+|)}B}->nQBo zS7%Sx0|oSEIE{uzUh|a}jlZVhw_2<%vt`2;X<v==e+PWC$alr=EIurcWZhk`tB^sB z<aYQQpji_ZWBj#+O#rDt9DH*wm+Q~<wY3drTgiP;vlK0B$HMJetV0T@G1!h|69p_~ z5SC9-q%)5ThdR|`_nAGGPzEl;+=1d^4onx@5B}56V6dy0b$OaX&wSs<yKGK4vdG@4 z{$=$$B!Vc*WdE&3A<)eyoUfnFwdcR(_qr^e%lBhkt=L5fJGTJf@R_zo*SHsh7(HC^ zicHYJ=q#VIwaoX*I;bNM;zaHZ_4_ctxUHrnQ~i}ytD4Nhg`r@<a-XeIKKWp!bq({G zZ0l7_7|_D)($F^o<t%q9y4_|U*la0r(gLW_byK6gr4yM$2X(Ftw`)glU)5E(wEf-) zI$n=FqG8HufHxhg8l_+e6;VVWspV-R*L&UY=WKkm)YsDFak2FrdqV~DgA~$(chp*~ zYt1ZnCs}a@$O(-!%PkzNIj*l4ZRS5%pH+5hJyY5CU44#$J`+A*I0oD;gZbuoQcr0S z(`UGCPJQ-dxMR;&Yi}K0O|HML(CFko7~K81m75Xlt|dJMj#$VOj>BUF^B>`N%}|Tm zUm4cgkwK5`bo6v9@$w*S-ZNqgTgR3z1Yw5CaEoO#;^L%gK-6(~*5v#l0JR794zdH| z<S0NrDyRv7g5^3ZwF~7CBsn}X$(Cru=SJG^I=+rJaG{NJz{1G`O6q7$^P**<b!V-N zcJ`r)6f&$}Cm?~hkMYSEX2ozCUOyboqN9!U(w-rBZ_Od-Vop!C*{+%hwJSC#!+qUY zN_r|3^=M9A>F=*;r@g(Fy?5wUO<t#h9c)CVMXra<43%15bqCOsvwrwcE@BN!FMFiy z%qLt>*kRU6$wr(Lkt)eDA>Z~O!fs`iS^9j$sv`V=I|LSVJwMJ;)?_u?ePwldO%1#x zt2YuiMAWz~(-`x6uyCN4cN2<HGD`_ykv{lUAkuD5<Z_rmHs%UsEe)T)GZy0Jz|zDF z7KZ_N#ZIXQsAfmV=tmS3Op-VWDf;Au^hZ6mQPI&A{NwjYz<JF-`jpKn+#~ikzM<|z zfuawN0(g<L?5_c@4z}?^v>sn1{E@L1(0pC`lZ%1M1a@7isZFbwq%AF+ADL@i>!rqk z0`;Uj%Y}@nOU=IP;@FhlsjHcs8glXlM@IqyHm%+3b?IWPrNt3Z$0yW?!{uy6z~FHM z>C%Wd^6KBGUw6of;3Ms*WBZH6eKHOiYHL4r=PrzeVn^S^SjO2+Wjiz)Klr<(2eMdd z!N$vVaI2V!lf?I>27XD2)W2m|a-5B}4NVNz!;(Pk8vT>*g88(5iR<UGt5HdEk<_Rp zfUv)uS@GEbzfG}+^s!0k+j>JIL~3(`YDV<-4n1U7ZVM`jyxM4+F~?O$Z%mEY)H#Gc z?G0*%f8FlYt9R*G_kf6^bMdxeyQ_H5&AJtj)%k-O9410<ss1kYPqsKfW>%l!Z#t_& z!L{JSe+c-L;S;e9b~V^2^`>Uc%EZdcfg=mo7$<A4Ex_2YHYVHEgO#taO~@{hIXP}{ zFv`^dEMTCG3#dq3o`P*)yC(tHNj)a1hoqx~|FAjRW!gNM0wRibmytCMJKQ|TR@#0o zdI)?|x?AEd;b@O-;)Z>&%cs7rt?fFYL?Vh39G=EXcyGut?l8d56d<;GXg}vS-mEIR zM~4mL8A$AhN5$dPj8F5P-h&DmZ}7b>_etCzV4KRej<^q;Vg(+Ec3R36@PhWlk5N=c z7J_S%Nn0yiDAWEk1FV0zy@OWgQF<w)1qlqxD+)eYBkURsRw9$Zkn|`^oZw#xY}v_! z*LHhj8#RQy-Obrt$mX!!bdyi%=+HtAZyrG#b-<+n4YEK3zxs=+(l_f+JvV{uxyv4E zcBUJ@^L-QB_<+y)8tz!k>D*cRcn-({)TZ%bZvpJO_;uuc%v&rkM8&lLj1_{Dv1W_m z1#k!O1A<{q6?FZ}N~Q1OLjR_mjN4h;(^+QuN;ZfHk<w2B-vSAZm^(k{is(MY^eR~J zW*APL|Ku@OJQ&kH^+^rxea|)gZlT+oY&JK{B+Pj<WQghyxCq2r4J-!Aglr<PXpL(R z`wD#h^U!|^<#sI0V_4{mFbjIBAi{_U#vTkqmCH6;S!-)sx>YK1lwBZuWSJgTM3@j( zinE#nn15O46TNPCOQz8cMz71=qlCV$vmqR5w2Jt=sSjMMn2o^>JNl|(*`>QUY1+cU z4jaC2rDhWY?tZpmO>Q_bCCUZ|kG0lrSYW53)#V&3SL82Sc;S5UEA3?dsjK*OxaHG9 zUyx5?;Q-}>OExd%U5xU<QDkxXdeOr9c>c0{k~O{-so7D0gyQTp^~co0rS26h|IjtP zsYOd*sQ{euU%lL&l8igJ>Q{W`I`Xyv0M!8zT}HkImf&=q2S%^tMK}P@)iCMG6-7y( zuyz9D;4+b3+Bb`~My#(Lu8u0xQ-V9Aj!tM!T)Y<&<q4tqTRl_g8q}lLVJ!ky#nHPT z!@EC-cQ>$ZYfeDooSl*mb%M|8C2a$NBvFQ@p&3d&PzcQ};)fiN$V6K2K;M2uUf-+m zR3kz_s=ghbG0vyO1sknrdJwNiL{!skchfdKvJW%p!^7x9BjUtZaKAGC)xhvo<HT(; zPApdkLnpI*&;*1vf#T}Se;`tfgwHjhVmTkJ5+<!|#)3%*sx?v7USO}Xo9In(5pb?j zE}`Vcu+~x^7B0Uu_3eL2;u9BMjQDspE4r5-7r&1fH>`UXHWq>3nqPyd#FS#sG90mm z9=5SV?|jT%vgVMsz)AyT<a5Q`?WE<-UpRULY1ddl{6+Emw1bNRwH&;eR#yQ&9inZy zg87QqafUX-qn$kgBrBx9wt&#}LTfggB(EN)XhOKI|4~{Qg+(o9S?$P$!O^{e&2s@S zw>g9P?b*#+GTX&layA=9(J7E_vt?!@4o8Ig@gA`gUIg-64+3v!tScxCwjxnj<`+<> z<t24RqHv5gw8-H%8$ruEBfZX+Hu|>$JFQ6hsObJ9$a509S1ZAvOxw|D*p<bm`E6d^ z@aW-?=Apnc6V;N~vHVBqO9=6}feXI6|ClsMXc7c^2^_+jHP?hK7xJTRmOKG515wbQ zm5d#9C_?^S%Q%x}B&D+!d3B4{+k-?D2jUZ61G{Pp{To=n(cOjc7F^?|;cM^qI^pMa zdAL`LU|lTsRIsVts;3YRgK@*W4uo~nKtHu0_5WcJTYdxP)Q>3LkOjue)7EJ>VseUI zlFLrJEM92MWw*=OCD~WEk1Y8Yrj4P<Vbs@K{cv(fajCuWw(VxBzoqS|rbJ6~V=^t? z)yUm}!ng<jJ7c}wZcn7aLw(u^zVKhrr!e9Y<5r)LutSqcIob#i((GPRA}81%0d_<> zBl$!NZVe(~J|tBYN`|VbY1ry_RV}-$w6FUA=(%<w(ya>CP$Qilt0AVJyRrz>sOpm& zKqms5$`1L`*r}CLpsy?=T%F<1g2%m$B^lfa4w;XG8v)Fdu%Zsn%p})a<UvW?;of!N z=unvI`$*O_EYd8iGogrPw?Qo^tR%fC`T;IV140~v9`{-&Z^cgD&;%9Dd?k7>?#EtM zL;^D3Ka4en%}jqhrtof==~>rYC<O#lwKkEJlJog1tgIhwa9wQJ(UB!56|MFY@3cfN ztzbmvi>Us(`s-C6g+M%#Df5^+^6#1F@l=lezH1)kNSMLTknRwAhngiHKMZYF8i)+` z3L|JOlg{z`w2dQShsQx{m;6pg`@r<Z9oO#II6ctraAGZe!~^fu2SQIg&PT3~$&^jQ zr#=4;7qov46;d1*4X;(IzuyS}Jn(r0E+|%t^&CnR`PT+kJQSJz$=0YFGFkx~yvc+Q zALQOsma`1#63*6^_Dj0c37;*^ew^RVPgEbSKE#imx~0&6YFB@YFS18fpQ$HEow?IG z<2(7?)i+e%zWcSWdHc+kVq;<C$l0^}77D)T9eK;oh3~iNkV#wcBm(JaO;Q2#<K>ti zJ~)El4{S@MdqUD$JwRfp%nMy3dHv8a4Tm$;oC@=(UHP<4_vK4UgI(?1ZrA%~9Kx+R zx?A14?bC`~oF@Po&p+&NOX?39@8*$Rwvo>~AJ*L9dz#^Ph@%EAXF^<1d=fd+Eo=~L z{_IcA4Rt1c4Ddoep<IiQs>kZqq(d7W2<ES4SO6TEjU-<b;tr@=yZSbnL0~~LUU4e) zt@1a+HYdJr26=OYe2qLVAt~3@R-?-IzFP<JcR$`kn++o~Cj6Cj;`?D6wv&K+k<hdH zx7GhCw`d2Jf{wZA)3e!{g4mkDGF*N?7@!}j5zPQ{i*#FO#$Ww8nxYadto_?FS=t+@ zPB&iw-6SwC?n~&#a)e66i1OrW3OG@Y$kzI5#pc#5wycqkUj6gxSL#T>gFI0EMfI6g z8p2w2z@OH758=IO5AY$=dIjuA?Gjc@L3*j`<gC*?q%-8I(hWYzH$)xC<*Y;Kzg52( zSHxYX`zP)|Ep>KZ9nQMXS$*s0%;3zu){^C<?2*xE)3rCfK@88_W4E<7uF^iBseIGs zam066JZ2n(7RBC`Q|NQiARbfO4A2r`5wKm$=&*JL00PxgO;(+xq>I3cra@VhXv}*Y zxt;}g)Vm?=cS4bE3w5@x>&^{0Jc}`GavX~Ku(M>HGlAl{ZAh`ZwWQ!NI40eJQm)@2 zJeyK|a6EQkNA=)LN5E~kLxG?#ea8K#pRNJ@8z&aIZd2~YdNo%xL`ocZMr{s8*haPk zG_ZMYbX}5oMt#93IRud;4<eOpBIO1@t1%1;nU&!CTG1`Al(Y}CB)k}xwFMVEhqR3v zc}u`}_>H2cizWh#gAH-d*vQD(J=i%3kyfBdPdEG>Dx%-_j13Q?9D9Pp!vs^JJsk)m zyXt$sT!D7&wSmG3y|HyUcb6v?Z&_c)o&;H7Gn808lxw5n^4@*pRNU6)uOfrO@J^0R zq%)*&`#p~8cU)aX+l+k>G6Oh>eQ+;e?E2&DBgB(x=55^zWUMZ$!Dxxl>%Y=_TAOx& zhm1^#qBUhkdPc}R20;ESl5UJ)Z+6Jq#&_G1M^qoL=g;9W!a{J9ID#<zJtNLEc9G(m zyWqnC4nhEo@*(t54>-T!>{7)^PgByy-H~f1QXlQWdZ%1%<ZbOD{iiL%n<8$o1kD3~ zt4;S0C3em=ZfSA<>}L|Ez2@KlOliD1I=3@1P5GS2PGjQdkQv)C{;ZqEZ*9m;<DqFr zo?nf90WMgKB{?0~S&}Rg3l9v*^XfOqTP!(3L#No!8y9xk?D?$A9n)TRH#xPCUK~){ zeA|Nk8TYV~;Dxtd*FVw{8XEL%^I=26`bL;9yBlGhu%o5lz*Y)pw(M+8cignI*qu)j zJVGsUZ!?~q?hftR77Tp1yZN@Mv9XR#o01Ye>ic54b$|avV&>R@J$XGvJuqg*el0S5 z_Qi5#eHbDJEMZ^?rb}~WdE=$Yvi0X;bBI~E9<Q<&a4AL0!|AzTVFb8jBA1O}k5(-f z)1Lpg=bzJJ@}a^=QN}Ul^ls;$WwdvAm`#^mKxT%W{6Qfr3m9RAP~L^O8E==m;@SeK zDw4|q-^tPtA+KH_w}PHzP2-y$kmIEryL31tSH21Zil@pyt3NO}2!?~G6TbBVn@hpc zLVy1MvzNJGXYuX1ri5K5+g<i&u;hZ}JE9E)LhRGI5*-KiVL<~C-_2yMOE4l=;*vrM z%1}+~?rh7oG+RJ5Ul^!;SBLdmuYmR8D@v{g{j1Ffa!mj4_pSiH@x9Nqe=4+I^E{G7 z>3es2N`0XuKKprLKmEW3M(qk$Yu88ZtRIUvFtnoQ>5qdyTF;_K;3v$<?zet6vv<|b zDIHm6;G+VmbUaxrS6C}Y!jx>TV$c6C*3LD2C$QWd4mCQyH~8jSxr_Ize_cCwvzR_v zJNGh=eqZg}$5j0h^o^^u?C+iUSm%hDvY*w?1v7c1cCN6EJX<?gSsQ<Q?ObEy$QiNj z)$yIl{k3zK*e|erSU%s)`gLdR+{>Evn`-AiX6kQ({&O6W*n42!9cH)UTW?OY1bop; z(D4(9*LCA}7*;Kv_283W)9e7g8Hd^)!_^M7JdBcKI39pKkifbrI)~Nrl269>ETjD# z-nl5BwI25^V#W^Oo3rm>Z0h)ldrls{_0Z`=+fsX?x4V0|v$wmaJ28FW)Ztr?C3Y+w zK5%U5Kq0Z|*izAcdE=h`#N469V~O=ki~A28#na~S=$&}<JoYl(Azye3#{+WM2T{Ga z^T7NqI~I?f+Hv6IVH8XPEJx58HhKIA{?Fj@7+^!klNkE}^t>0NB#4a2QM}mWJ69h! zbNtxpnd2vKJ&@=vb|*#>m%X^tdfkincFp6ie)|n_U^GkA>jY-5h|fBloyPA$4F3#{ z#{v1na#S?qcgj|MWZT_v;N+>p$B!j?iaqNRr%xYTJahW^p~J^85qI_!`_SP3uzUY| zC`U;3A4NJE$SA&ioqmfzqeTq!5W5Y>yK!wz-8hE$e~O%!zUTHD3NK!Qz-!-Ez#H!Z zu&Fl*d=U|m5aHgP_`e?|b@WQGYth%EC?&#pF_a<#vjd}P3Qt|~gdG^?LA>cM+<#I& z$!c)~Es02v$#>IR&)}TM?Ig~rXY|$`AmGh7ZUs}Iwrl&g`I0Blyj&g8sBf!1yY#&Y z^y*H04uiTD**^TIx30owQND3K)L3eH8pLHs&j@W#;JgdJr!Wd)Rwqz)3bRUReq?2K zyU_C)jNpaXN8zgcBhfZ`*IjoNk1n1*blc+HMbPJX`%CeZ+C8^}%`946#=5Uyzw7Yn zLy7ASoH}sw&I9`sMDdAh7mpseoYsqW`_4m$PgxCi96xyauEmoF5-2!wc<I2gQ@Hia zvHb^5CQctZkl3+lb7Jd>1IMh!o2>?g#2QL1S`Vw;n^?Sa@$iwweMb%?WN#J|GwZh} z7Eh1Z51l@JVx+6<)Y8erCr+O#o;rMly4|&P1~B_i0s6%r_~JPHl3bVMu>4tm4Y=*q ze(pmdr9UVLdT5Zs&>ff!DC59BpDyU{9(;#}55D363&P_KcOHU5QTXBGh~YFr)+SgA zyK%H4@|I;eFpqZRT;w6gI)PAKQs(s{yS^Wp_V|tr_&0`ugzLa!#$a!k*?RExX|@3f zHw&wK6IMyj0rj?kh_@oJxgCVQ1B7rr$Yd7;&jP-GaW{OMH?c)HRKE|EAL}#Wvo)|J z3Hw#R5$fbFWDtAUN4OXJ#QS*w&Xy3iiHflIv&Y!u>;ij|J;BcN1|(9&j5Eg$cXzMv zmdD<{LEEh-7w<f<bo}T(+v3uh)ACH#^>z2!P9Hw9e{D&Bt!AKh9IPFOYRC1p<7DkP zrOhrLJ-VpvJapjnqP}_Y=)V1nV*aq$c39hS_|~I~#`PzFNym>V+YTL8ww*dmw{4i2 qnXVl-)Q&SWhtS5BmoYOnE$tg)|K*!h{FQ&}rGO9n_LKL%?|%W%ZB|eK literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_SansSerif-Bold.woff b/source/fonts/KaTeX_SansSerif-Bold.woff new file mode 100644 index 0000000000000000000000000000000000000000..8f144a8bb312fa160afff853133665554eee9065 GIT binary patch literal 19196 zcmZsCb95(7u=X#uZQHhOYh&Bl*xA^&v$1VsW81dvoA-YA&#&h^(^FMXwPsFt^_dwr z1#xiz5a1_Ce*h5v%l}mVcmDq+adB0-AKuQ74fj8oTq$)as4y@C06-Hzvc?Y##CHsR zjcpAb000n^A3f6#-XvVF<BeTi2mt`--X9Lb54b^q5TVT+%xwVx&@=!5tONjnNnJr* zzcDv-{_&Mw`QbqR9}vxLJj{OV7e8*k0D$>{p+qdBg{k3x<!k<MSbo3`hRRD|@uU3F zMg7QxKOhC`1Szzzb#Vs(fJuM!0zY{8Dg~9cu{ZwVLErpvKK?_C*(|NCq5Dt0K$Sl- z;eP-M2a2&Xv^50)#BF~1@}q+&&&5@BcCdGL0RW_a>Hw1d!E7rUevyNd>5nh8;E&%= z`v4IMQ6FROYsLm91_l75C4s~4+Yfeqtb=rYfEXsdU5yrO;dj}mx$&);Cxq%qUoR*! z7{DqMjv4TOKAz9H(L@nL$GL0Y<Fs3_f=H-}Fn|<1a1#K~Pw74Y7Xa8#{?jP{F@PE1 z_H$(mIQmcVpTE(@WMgPRazH>Cj3f)=gP_GQ1Z+r@tRO!K1PCZABV#9qf%`rBm?@;B zvz(!#fuj3&uGVf3m<Z}TPl!G=EbOP_gy3dLS~E~GB_ks+Kr;pT>8D(|cqRrBCDf7c z=kAE$Fh<toltZ>8UXN(kyEUOOP^F-SnJV$wAqvJ{r)G@lvh0c1220tS3zFw<)#9B8 z&r^KI8{b{WSrz%^d(ILcAuBobJ_Vd-H20=|+o(*HR5Gi}Q@rMwG`%UfRnU$2Cez5w zZhv$BG3jR>{QeM}3CP|pF+?mC9O-e=2l9f`#r$}?5-hop`{1b4{awI835sp;MVo;- zX|=*JqiiSdVFT;&EjVfGY0*G`4t!u<#-z6CQ%|9GF-+Z-5^->JYc0Q^jotGC#-_Dg zSZ#$)(PPw}*CzZOb|oMAqJ1R;_MOkWMA`n#7%HE}V7}rpR|-E}%b}$*Sql8D7^J<@ z;(gLmV|%oi7s}=-Mc!qO-mqnxva;YghUcW9MzO1lyt(3~9J&E+?@j*+C|^~}|KIy! zU|{BNfCVlNj`#w6z!dmO3(Mi(h!g}IM>c3MX)umBi8!q|q&QORKN~lil^&cPlpg8< zeGhxII&q(d!N_2yH{7W#Br2pV^z`}t{T<+m=I?odWrT&i>xr4Rn%0&^L2{}!)+sEc zDI_d(^r@d$Jn~KO>G$&8_x=8T{jvS2|DL<H-P%*<XZ)q}?)*AEByjwl_3nH$eJW6b zPs$(Wg-D_Z^P45yKRz0$IzApsk};nK01gF1gTn(sfx&^mK+xl#7grlrn%4TKD5){3 z5;ur9D6k-*KB7FMJ)}6LIi@<NJ0L&4F1#$gE%<M86I@VLHeXOsVPZpMMP^56Noq@M zO|GAyfue(?g{HeG=}aIcc!VGmGX=J6N|L&2N;1j}Mvwt8pz@d6=l?#-RqC(K^Wvx} z-lX!vF$qEFkD7Ik8EZ6&%8=l)kO`(38v|{>prmPr<UI*ym<P6ZdX7dLSspmP8h!0e zGX)b|LoCS)pD(XUe4Z0W6$7KXdJ%#x_*l%Ef3Y?@Gvtk<SB1>xpIm|^Q4RZHL<P>C z{_`1c9)%peG3l~T3&CiEPmd6FIZ+f3ug*KR9jn?nugOTv*}iSLhG=fA(jzS0gtu9P zr4v#UUt~m;l8)$TjHv39p25zoVY>I=L1ZkzfXT3dKyn4mm1F*8-iWWIgc*XKe#n?) z(ijxP=t5ZmdNqn>jG6Sj26XsW#&|CHl_))4gp15D^@RM@N8?7SJS&&;nJ0;Eb>&%9 z;laVJK82ybs*2D``_>inA7V)+4^RxPt5x1=erJJW%?1avrNwY<QnhH<UmO*)@3;y0 zs}k?gd`GgCe^fR1wB{Eu-2v={aa2mWI9iIIw^Rf7n+bf-Pk%hQUJ_5~%&^GaZ#a>C z6^64Q@u&v&ED~xB4rZjs&`os|)MT^oxas!k20VAyW>cpqFBSc)n9m`a$u4V6cv!0v zWQR-ablfb&11LeWZ?Epo0dsJc85--Fa>j=<wAJbJL`Y$R5T2I9k)jO9tU-BPtR=rX zgc8n|223;f;}mc`MVguem*m?mS66bE-_6yGCOo}_n0X>UhUh0#+9Z|Q?VLgg=H27k z{>Yj{UJ~x^^l7(*KGd%z(A};fYM*lT1g;%tBj&Ig`k{0%l$<4jl7}!cAkoD}MR!|f zaBJL;Nk&EW;LKFI1S_aej!99*=pYGw>N`6ZGa0wqF-T9vB%eC2w)->E^|rj$i$qd0 zY0(o+(N33<j^D{8A82;}P2e5Br^Yh2EHlYET&Je0^_Cz*p%qXp5IzD4mB!|EDXr`y z3EffymrK<j7=AX`?`YNT6;ENeG4TLmuTQFtKV-Hs(fSijt6@Mg{%lAxuD0?|nM!H? z?-6BbcI2NCa(8Y#3xc6Xb)|!(Q6UOlQ6!Ebs`NNVwL8pr4RGnv{3a#O39@!g>ARx> z0t48(AOig8iQ9b{X`R_8U(lRW0*yd;9wn}892r0C4~^}(#e;-4$XNOTKTPlXF3OA6 zvl%osE)8dk&z@4se)toOcx2-;O6r2q$w<Ym)5nbZa61IXB_{OQ+4JJIR=}s4Y&sb$ z<QH2odFP!_4RLVkqr-9&#z;ZJmJrtlR7zghyN@%Cdj^u0A>U-B$#f|FbT4pm*@Dfg z;Il_fv+|%bCEgPj!<qD$rz6G)7DKZ?NsdrWH_8Ahtl6p{JQ*wN4#uCQz;}5?;(5zd zksy*M4^-8!m8#ZwK58qH8=Df9t6=(~5AG2`1BxEzuz*S;R*naDv>9GuR+GeJ$7U;T zlZ#%$f?+#FBsOoH)xExA1MLtZ0ve;=$0y4iatl&uy#JyOn7g@ZdvS`%_onYF=;2k` z@{39x7O*iVnrahNC%{;Ds%Bl^Po9p(FHpEz(A35$^v<Z;)vtt@FkmYAri6Y`s{$?J zsI4%z>*yf=)e}lAT3%#gWgO5iM9uuxc&vNn)we<>IgsqWbTBBK?!$cBHu$#Xg6!>$ zjUSh5?M!2*=)O7`c!ky#XYlnN`@);haW>4U25hUjpcM=$-6Ltt_LkUSmMEa6k~9GX z)O;qe{HFo3;JFpuWo~N#PxDAF{$6%x%nQcQKKh@G>6pD2W5V!;%o!7O!Vr;p1f+EY z7yLPWV29?2(Y-edym$G>3g?U|`eS7o0b4PL4}y2bbon6&&OR!oA$SPk2yR=sz?|^t zDrnjm-F6k=kUSxD&Rh_%89garGd-G%H6cA>=vkcA{0JP;X>W?NlSq$946KiCKSHRu ztWRZ*`~mX-fr4E+G(?iFodA}vN|qmh#!=4rzqRdVtIvU$(ujn_SpNWgI2#uh7j_g3 z2WusZU5b&}A^<b9jSG{DkXDJEF>=!qg9QYH1cV}Pa<?(E52)YF%we^(e+3D%t}ma& zh{QQ!T$~Nj9z)`X6e%L%Bnc`hMT%&1bZBreyVm#8^BY9wTAVzOe+d->;HE`7{{Ld0 zUch_+V+2uzB@PJ4Jo~UVEbRAXnrOfU%eOugo=NB9_qv}kA_3r{84m5gFbVzt4qqSu z&<SuL2sS7zs1axy=p2|PSTWcKI3>6dcnSnPL?xs+6f{%_G&>9^j1??7>;{}9+!8!4 zd^Lg~LNlT$Vi6J~QW`QmvMcft3NcC`$^)t->IvE}v@vvg^f!z^OhL?IEMzPzYyfry z_7jc^PAkqEt{|=z9x`4vJ|uoA0Wd)&p*rCdks{F^u@!MK2`@=MDI{qt87WyYIWc)T zg)l`aB`0Ms6(>~@)dST7H8*t(^#lz(jXF&|%@Hj%tpn{09X6dmT|eCmy)b<O{ThQF zLk7bGqYmQ+lMd4oGcYqXvlH__7H*bKmKl}<mOJ;g%Px;39St7}-_++TuNpnunkOIq z_Kx<74(rRViofbDMJcr737b|j&6Qx+k+j;w?BEE)nCo!>S70bFa?p^t+SLTc!6OJz zg!Sv*tbn+HQP~^D0K|PqOjs17)FZEJubT2-2?1Q@U$5Es4Tr9aT`d(`pVhh7PBn-^ zY=34nq!5*g2p?G!8HrJn+m$%Rev{~XE#Ll%2GxHp!Tw?;K2iT;@CM7Qh@|UDjzgZb zlWm<lrtg`D5*XVDK^9eK4TmJmf%w<1ora%r_f!tkWm$YAT9F&+rZ3b(gc(NtBcD-e zgHwZgpl4FNL#?Fh7bhw_7;15?cN=Sr;f=n@UQ*dRGRI%&#M8MyF2M(>P=@>-jmRcx z{|=)1+kcA<Yo>hNT6Y7;YP@q1S4W;$dPHl_YE;t*@S&en26G1pLOw-jNZXtCGbhXn zkkI}K&S?4@2piaQU(f**6d=3hLvl|DhalVjRkya;3*-*C+2pi4EQq+;+PE}Inpl(8 z4{BEK*)M80{4^_K^6(`F!;wTFX1#`8sQ_8;SAlYys1&hW`1JK{ZLY3OoOgm@cy}3J zFcb*7+6bf>f*z;IoWa)yu`UF*PVAMS{Wa%08Sy9tl~9^y7F}7Cq#c~EOo0R+ys!>8 z5LK@PD(!eRTS+S6fk^G?cI(W%cIzyavCCa^rah;xiLuZ2mM)Ka%kQJi$J<$9`s66k z&kz-n<^6Lw^wK}hI*90u6#i0SZ^V{s4C{1xYILZu{tNC72I%^Xh#|}PSrF3T=by`h zi(4b=j0C-t-tfK@iu!{B524QG3Mo$)qr<CxA^|($C^vh{L&U!aKjO3YQV;NWm`Uns zKw;1XXggJ7%;E8%L2nRthtBnLn~qcoDmSLKcf&7v80oK9@L!A;6t5!a-FZRJ%Zh^b zk}ns$ABQ0h92QElB52$A4i5Gs5Y#j5OG(ll`h;aCHI|BAnLgn9Q0H5aI{ROxW)IqG z_HyGeW}w?)s|sJIq98~*yE7ybM4#Aj3Xzjf<aav$gt-7qp?+;Z|ANbP#Pk)2a{Y~N zwV&)QYPK8E6VXQ8EJT<oxJr6-h6&CL-A8*Y{pu7K3poe8%4Iq}$-BH0vICZzIV2A9 zZ#*!-p;Yg_B_sMSb{T$IWq=AH`F{WIE(^iBTspmh8>nB3`O3v)-K&#n73Buya7Uft z$*_DZW~m;<McNU|x8={W3|ZFghT~|R+1jB)(irtpL_4j*f~thlz)LLN1kRf0$0_Ne zGW8P}?v|2nLN$pj&NK4I7g%b%)a&MEEa=+46loB=cQQW=t8*S`hM<fE!rIa*FgR#{ zPvMBaW*CwSEK`w{EME+()Z9{hu@nRvL_Djd0(D!nv&Z?IQ3t=Ow0se{^iY*nwiq>M z+%yo7wICE3rsS??)ntqQ*zpGE35N2DaPtInQEfpRC+(KA)0+(X;h_CqEU)9y=O9h4 zuRJt38(FGKqk$s!vzWh)<<SF{Qs~2&bA1d#7r}c`RdR9^4fh(?eU@`1@%R{ei7d4K z`<r>!%lVfqJ(UN7{$;Xq+XPLl7@Th6zZNv}m1D;`jkEeUHqB(*j_+Rgf0=_*;gz#m z%=IYUqfkV~`^Uc0Ot0j>#Bff)AHrjv+k?n@WWZ2Z^uR?dwPQ*H$)NB|488-c1?6RX z(UFmnhn?N;18;f*OEnb_^}xUlK@$f+Xvk{Wq};(oFr`LJ46~NKdSXU%;A)$8@z$9< zC+jY8c-XO<X5+oltM=5;qM+H!;J}G-rHv8irQ~l>;b9V%MRcUss~l#Sd-gYk4`@>t z^ayRgpnYkwP`sf+T76k@YW-8Nj+0;f#dPR*gLv#*O0I7YVT{+BjH6233ogKo@Ryn7 zU*}m0+Y?V4qQl(Y%P(|$tfnWytv#V5G!ix6R^V$gaPOEZqe4G~5IQ8{EjUlqn!Go$ zbO^V3n^`hWFC0gW7nvS=JG>_j<I*!eKhLu?Q$gxoQ400;C{cd@sh)Z_u3%G;bY<LY zcX>XfV5{GvY+2Kj)nd<_A}y!B>>d^R>%hlGkHP^*?-(0RKa?vn4YloFy1%EVL`>=b zE<Y>SPeFXOJCi5zKz#KEJ~EAi+<n9PA~Ys9QPI}X)l*>}WWMPv-`5iOH5?CA3w*ID z^^$?(`T_}~cHp0I945TNbgNrz2iCQV*sZpj-^EZ;-u4_YOL>6y=^*LT^%Yn|iO|jX zx^fVSK&e?+|GtoVTyyGs$Y&>?`sxfz5O^&eejON)2)U0FLh<7Es@<?6Op8C4n65q` z%BpQiWbdcVU#7CRhT+^{{H}B0Q4n$MwJQXMQafMoxEcD~*?O#C&sf^uV?;y0cf7;n zmOm<=9H9Ga5}GZDE28y4Ce8nVV1LX5@gea_YLF(}T^<k(-ohXiw?`PpU<Y$L%@n+j znNqXoi0i-VFZJPCxM;Eig=Uy(MW?cIPL(x$NFDa@?36FLdI&8V5t2hGek0{=UX(Ty zy=PHb)IJ7IQWrU4SfGgEF`O$4da#OhfpDnPnk3l)-FhNTA-$4}Gwf!R;u@bM6QqHm zomVQg93}PLGK<*;bT}(&J^|G!A1Df->P6l8-HXFqj9eh$Pc<imnec=PJR~?eA~kE* z*g!7P8ZNh284T4b*n4!$1Ucr7j?sI}-AM&t0J}Mf<r8lNi{^dOd|GC@=GhwEn20yJ z_6|Lb+Vx?Ex~`pHNO!&#p3Wcft(XE_tpRKua%)&X_K)GPg1G0u1m@CP^k82N4@7eZ z5?25(c&DI-0FYlhlGzp0IZNpDQ<ot(a)u~Mw+v3hMLadqR3Z7KHSH=fpCa-^noh%e z@`!?9>8$>_S>SrCK1)(i!3xbA0g3+M=;*zZyGGwteM0#ldhYQRQbed016#CUdtO!F z{?f?0R+t-j1MmciCqYTT-6b+II}ok1l)(2dO6`dbjyDl*&@6yEf4g4E<v4<OO9Ul5 z*Y@St0l~B1dtt8ynpeI$P9HK021&Cce;p>`%AOC`$wUke$J%oD^b_s#C^LlZ>-O>O z7D;#a2<vwr28e8UTEA>sIdIS#*zkG$%LBc5HuMLv2o7uf?eeB-CED#i@rU}WfHEp# z$oK3hBKAsYH?$%G$=9#SHxREZfkJ^yYk5^<b5TLRhd;3~{X_f-HFY^>WVvgT>;>)| zco=pi*}ZqB1o1mnrz%9UL^pu^SoaWGp<>Irm9hkUFI}&Tyr=J?Iq0`Z6g=%cWvUoG znFAJ$+}WIM-L<-msCJ$qQmPeG2Wm!j=}inVY@P*x<S7e6dF&95#G!Xl!$_J$i9;Co zS5SJ<h;T_1sdb?w7wJ|Z4dx>p{DS+G1Yrwcoa$SQ9FQdsM<_GH#Xk94U{veEBBA48 z6g9Nc0PC=#j(lQ*$n|Qx2o`x;HV3P^L<CUd`NnLq<Wz-G7t3s9Tc4F0DjyJ1fwC{c zTD9<VML4aa?c0~WsbzW^OZlxL{34&P)4#i)sXyF-p7>+0cz71e0cXvRgrmFcj1Qox zWkE*!y~dWt^W6-Zs8@8z+Of|^K-oqy^6w2eIOZkx*l-6X=v6!7;X(E?oHo4nz&UY7 z5fWWyLXQRl3wF@JyFOJBL3CoKp}5L_qXzGs7pFv<8Y1^bPv*j0)`P<7XeTQHA215< zYP4PUT=Bhr98FP=G*N%ZQ`Lxh)KQe|FP^g3G3HdjPB}4QAV*XzkzyMRm<xT~-`%6< zVIR&l1RE?L^rx4|gOVO?B*4u2<{MDLq;8JYNk?yvmw=$hnB9C>MQu0V>3Wc_KBbe^ zL<u~T_2ZF}#oSH4$XoOlHMFdpMT%ARTDpabg@5A>>3FoF0_+CgZFZMBFq$*?xi~QS z7de}8OAvkO3|@jT3W5nUCr_u`Vb41hbiBruj<fAs?~gu-!raNU?kaIDl1cvFB9TkE zgHuG3@+b98A!(HTGa0#}so`a3K<K)9Qc=MV*AqgM2x7-LGE*}cfDcKZV{!(zeCY$c z%lT)oZ#(|^nU0@`ah5~VWc{5XWllI}rklX6u7-J+8$9|4C}1a?`4SToRT3}n&ZXs6 zem5$^)<QQM<Hp1s)xG*5DiA>8OCG?YzbgdzLF^@E9s&fP7!CV`qyG7p@ea=Om&lLm zJayNwgo<YC^%z%-p+b#7_w@`#@@!b^kG*T##>vKiTeiGR8%Yfl%=X!js;ZFl-_iAa z7ZOBt9ab@2NkkC(G4ytq%;^8-g{Q8^fTl6fs)t)jg9btNhWInZ%z`zA+8;wSp4vuF z9NzPo%A09Y$8uMGPAAmp2j|Rk9IT;YQJ%(tmN72|_h($68i!CIy<6JZXqhe^8eI0D zfmVR$B(#*_CLNI!o1h)2((cHuF#tsK!NK_`xlnsN9dSO*P3AXw$;qnOulv0;?A{R& zXbp3&9Df3nb>@|}qlq$oTC~l^<a^YL`_v1Bza?<N<H=RqBnD{T`TOj>m%=s*$RPMc zAkgF+q@}E!KJq9GB{5j<!H6Z6jt;snM&||pihZCfi%3;YS9;$jD_SXHp4CSgi3$h0 z7B@)DJ(g5<&bO%l{Bez(jz`k4-?d+xv?5E42<ft84U}l@iFa1(x9keDCL9)YbXee$ zw<`vvgNH<KW1<TuO_EG(oZtn5XCSBs(>#($QZAT(Z6zN4#VycPN!ga&Q4!oaf;4(X zH7-<wA6a&l9>qggr}+NX@mvY}T@m2;fjCfae+<{o&ZfS$(!ib}1AlxQT6eL=()M?z zZ|mkUJDdrnMQyqZw3926+QM97`mL|d$-=aPmr#Q?D%U#tSJHW`$3<OqOk|$w;JF|g zGqGc<X~~*k2^a3@BMFlbEKwd|F6zYAHfQLbW}E9kD1jUu4VKwh9_ubA_Z{sCUH%%z zf`QVr8QkZtAJ>#2TNJ&+VMy92!$_gs$oI)tXgxxj$=E7~A~@{|`a}9WH)Y4ARI8vr z|M<v-18XZdK#LopRkxOULw^y%!O;tCB4D;54!7Q42maAP#~w|T?EDErioD={k=(qP zyk(&|N-g3Q(G5X}#iAjZ!{+Y_ZIkX!zGj^gb><v#J(?VJ-7k<~u>v}>NqsjP+3ywg zT$nr@yl8Y^7d7YY=%_s_lo8{@R-T<0^-TC?W-Ouz)hGoX!B91YtXgZmprBlCMOXhw z@cHcWEAQ$R-;*z*8Sv?+rd`%}tvYU&1jpr$R1J(4h|m1pohNtReWyI3Pka%)hg7_0 zV9Y7fVkdw<!DRqJt)Xb~2;%fH<lTDvQpp!sWPg_!`K_FZ1;gH`RbE$D%0MA(=MMg> zrXLdIMEfJvU{NPJK22;&y*hXI5ds)Uvq1eU5ychpRJb8NfCC2x5Pgu4Jp-GG)kWQH ze8r{@C(}Zw-^9Cn%fwZqBBc&pcz+6r)5X@q8$ZT|M>B>f7I$AOYt?zpYX}HW{4nfz zce1`}d-R;!RbQavR%13UOC~ZMw!XlmtF$zXZLG%GA04-YlAwy*#&c>OHW(+K>erW` zPZDl%+n^60=u6uTj*FzRZP!QyD)3k)^&b}2cxN&PB;^bokz^jxGt(MP$IM^4mTcUX zB`BDLqyyiYi4=v17<%e;KH(<go0xfvlbJf-gkXdZrex^pk)8NjJClx>N)FB#>61NB z;PtfCC{v!KkR}YMx*KgS@V#uDziI!W!0Vl{BqFN)h|$pQvqWUlxbcT^<>maQRsq(v z&x#gJ;le98p5I*rzLx{_I36l^kTZEb6N_X6?L1m!4cUgP^MZ|b6Bim3Dn$w@0a4eb zFSkYnL26$=1SUmx9tz~wJg;Q2Q*PbF8zx?gpF};XrHrH0FjryTigr7P=er-ft(+d( zzD(H1>b%IBhg5;%+kJyDpF=4yW9#=s|I;Jh9TqZ!+ul}aPAHgNj;vMBC!UXycjFz! z8rDH3wFNjnO$nIj@ku8N(w{A+PIi(fZKOS+MV%96O379Q=9TJ;L@>K?s=Fhq2CMfP z(WT}!C+{}i{@ud<^yc4w<up1elO*jBdYuA86R{ucFi#N=qWU{k<M|T%*GfKyGyD$4 zut?KN_xQ)=c86qe{PL0>F#+i}LWXFCf8jHEt?)?g#6S7L9hG$NKn-2Ba$FH=fL*eK z7YC#=>wJ|_W9v+1ENp7zstYahO&P4*o>ZtH274ULs)2$kt^sMZ46Yd_5DT6z29;p& zYgKE|dbMJgEl6~%_ge!6LU&;?gL<(rKCaJ^z04zrS=vCZiiki~4u6yJR#$#$g+yXP zkQlKcm~qv`ohd4xit|Z{z~@kfMr}%|4wKJ$)O~|Mx0w|JITXd|*T-aqwsAfA=oxxX zpgwVc<bY$i@lZ**>bSlK^8{zK_|Awqz!^gkq$&%4FUF<BHji|MFB})G7Q6BfmI*Ap z*I+FqQ)9Rl3u|(`$Lf$tXN~>Th$B0pkuFUl0+V>_0_{B#0^trh>|W=?yYh-q&v{{V zG432$P0M=)uH(y!=IB7<wdC6(GLe-u)?6&US|hv%vL=3<-YXv+p??H3lT-{+FBKtU z`Mi+4bO1tI`WbFJw~IbFgs~r7CqHQQaS(Bdp0J#Y#t1|nvSO!f1!6})Py(s-xg`uU z?&;szWz+!dG`V0Hb$4)e$iP41V~}j*<CF1b-05NcsUexv3f1YeLVTooCFzjp)WC)! z{FF|jI;0j|&4TNl)j)+c!Dv8lR|p66U1rN!@39iY)uY~ff9ieOx^eNW!3XT)B*cqR zh~_es>9q!w(>AU_G$_s?TqkSVEROngQRrGk>HA(R%UP*!Eow8#GkOs1<${nutHK4^ zsyoF_#uQ690ZUYD&c?zB%w_Hi`A(;)?{oHKR0BW=bt`a+iTlKQ)mnpebxJX{w-UL$ ziCW%%rgr1M@CwW+29=q^<V;>t1|;mW*SW>995m;ITI=ksF#bLM?jVroaS>5TdW{iX zMAB`09$E%#FeqTE)hSq(t|zg5M0VKvGT*U9JoK2D;DW*Z+m+TfEtNB~9%myS@&<b$ zm&U{*9InX<OK>7U_WWWdF`O`Ko}px~B}UmtVPIKs;>GQ+0@2*H^&arP*p$3Dj_mec zgl{d``Tn4fzp~e#MX?Dm+l2@%cgsTc<^;`LmB<0S`)ZG5LI!@9fkeSr?0{J!2+M?- z^TZIs5VbC~-Vfur;_n24<$M9xar8tT6;qTKwppwk3*F!GA|yxf!l9KfLZB!egVl4T zj31YCreY+tQ*{psy<+gIr81QgwrqYs_PnUYX?<YSTTawnEUa8yWzVMF?POj8o+lBu zWSH*jqOv22pB?W6Ni$^w_#o7G1P-qYknlHhnos8eZ&3w>cnbVNaiBf^`x}>QrV2DV zyu<@J9!SE-ycnB|7*kNqks+8t<8G`bt)>y;w~YIvn=sF>XGuh*G}=%|FOFxZCBlVv z%DX;3)Nx#IqhC4r?mK%t*QW>jJNp!~%I1ck2YMks(r6QaDUvHprdCD+*5tn=pMp?N z1MtMd1vVOOTK|qEM29O5*)~x*EmageYKa#bbu&j^9s5ae;B#P6cqauO4=$GlRcTcy z1T9Ckb+Wq;PwKSE_lh(@OJobrIY0zS?&RF~ZkfD4M$4&<?WX{2kEqPgT@JZxrN-)b zCCr3nSCNE6iRjlkKzLOJGCb9BV}^EYA{Gb@pdM&YJ8wvO91h_o4LfVaj<J{+xbqqL z`9`H?;E2sQ@<tW^NVhzyNC^}iP2VSY27!x|_GSAl@elQAw05iAXFu~NdG7QQX)gF* zM&wPp?rJ~JW+m`F7WN2^F{azUk)Mu563u;#yqXyn<;IOqOYAamRIqZh%F~-<yg>Bc zi5RZ=4!~kTVh#MNl3PAGz3tI2`4Rz-=RQ@-AHQmkLfOIG_3nWx9r5RX>zHA>!Q~2d zuCOul_C@Nhcv25oFXl}=_-L*?r|g2sY9x?bXW3}-bU&Ziakz4pUQO7@Mc;@v+|2VY zed=$fCM9o*$f|2Ms6ICh0AbMphP_jCc;TkEMV;}?eQ0r@&m@Jqw%9Q^o~zlSs>YJt zuaT}jPR}O1o#`ont|-A#Z~aM+xfB%W@Zj&ifLPRPGm;#_crP<^jLN_8nE8nqk0F;e zm9ciY5I&|hs);JSirTO^^6k%DYUKy?f)U|Thbuzi*V<{K+Aq`yJP$70@JuU}FP0b+ zw_9shd@`dvUHL%0q6(X0SPsCi50Igz^a4kwE_Y~bnV3A=@R-PHTVP0fG&GcOCCCgL zh}PQvsTX3t+|Bz->=&Oz>LY41i&4GpSmSLam0~^Q;=bGqKl|Nih6qq}!Q?n&ZO%E; zE5M=c%NHpUDG|BL6AY&y{1#E<!JNKB7YFY9f^rV#YxCG38LkR*9p5_;rAL8U6n!_m zUiHAwTe5kO5e@o<3x+DEbxjwV(w65YSao_vpPFwm;ug0!ptpFw)@7t+a*CY4-yNEu z`Pk0jh!f%L19pR8{-(G(M^}uwbtR(@t#tNn#Br{+YUVR?Q`6n`UZ;y$Y+!qm%dbIk z+}?v<3)CEKU4T`qU`SCT^bER63fCmH&nzWOmylJZARE0%I-6{Gy^%W1R&5e=Gyz** z4jR{pywdqP1%&QoEs(SrfH&~9j82>(p{C~rTwyZr3kBEOj->%$&CNF7A{{F0x)TVG zy`U7}uN8@DLZA9f`tbKgc_s2(scjQD@tYc_&^1wB!QD0hT9RG2waLPwPl<K-{p1A{ zKVeh>n5y?)7K?9VQxPZzLw;NU<CP|k;`=hkm#X-k>vyAIg#Tf^-=+P`gO{^&;^6E) zqycW=2F8!vd+lr8-uCNraa6mQ|8Zi?=x}Cs*ortuMt++ZBO4A!hWPI1yDm($*{zr$ zH;)_Srm6}ge~mQBmo&ggb2u7qmw~jVR^NtAp;mc#R&e;2+(z8BH3Pj`SoF6{R{FK4 z-&J@?fyQ-9l|VN&pKf|)7qPnJE7)^w*6YS<(I5McNp?}OYX&t5XD6fnz4;CRiXRH% zEw*RzzFq+32$TW^bzdz8+*5)WbFkpIXTy4*rv=hSqR781wEfJf+h72z{Ks(e;<h1~ zJ;S*PI|H-G*nZcLOR6NI9s%8y>J#+$RB(O{ljw0;UiN9EJ4kc_i&}w237CiNZ}ij* z;%^p^pGl;oh!wuct00hJ9ZizbdZDFLP2FX2v_C;vJ$Qpx-+Lf_Ht9kq<JtWmD;q1_ zDK%AwxSF6a5jtds(Spy*K18AK>n|;EKLAoBNgg^QP?_iJ(_<TidgMC8;wiX&r<!2D z+9(Od=-@(Grsv(`JE6X@1vcK5yL;CZgt|Me><u6yIe?s*%jj4QLih&e2z<}Mtz$K< z686w}bVbT+ZPAx)`mFPQm5!_!2ro{^1T2fUfNM}B-GJ8o!}Mgp^!bq}_rWf>e4<pI z3)S<KOvACRQXx>YyNPki)mDG=uc}<;URRlBx3P|C>wAK>nf!1jB-&~AwfhT_jO=Y_ zHI^FV7x!?)O?0AxLIh#S_{n^UZtL}n3a_666t|%^+*X0X?o-@C4O&*q&mIiz676CC ziJB?2=x1ZAx&VDKU7I0qh&JQ8`9(+?9>w+t@^Ms|C=>o=hFQ<7AB029FI`e${dbol zf`vvcV69j&!hah!ew;8Ya**}Reb4g(+i_x9JTdj$-Sg@zef&%u!K1@@J!6?c(rv6l zW6RBovZs69UVgOP*pANc5-o)FB5|{Qgu_|WRewDVP84k@aPLakstSJ)3c20w-PVn9 zxzsMm#dfVGz10NL<W}mADy*d0^#NKCKM9lZH~7$Jf4S-Yn=#+M>(SKFCQ83qOMSX8 zIqU;c!G2Cqfp|{3TB$c0$9h#2D#C8P!?ab5dSHigcutv2kt-ODDv&p%e7g5sOjJRd zi{I9#xpqwFij4abW9A*yHjL8)(M$zW<2NhA+?ta~+AS#TtVkyHKnRxN3QED-IeSN4 z4U!5jRBl;gsP)m2rzA5fdq?<s^i!_^^16pPP4^BWazz6Sg-=2+R^e~86c5eJ%dh$g zTGnf|@7vtJ>EY2gkpfCx%)2+k1RJ02xt!hi8l#zDv3mxjJ&^Cz1#juK{QlS3=-3UM z`>eNrhLYxIgP|&h=EoF@9mlst)cOEq8$h>HTKzclnRHYaMX5ShasT4^R<Kekj2C`} zE&=~@AdP<0wL|cZ=oLbMz&XV60D|=2uCU<g*ZY+QX;1kZ8Drx-bdA0!K;(|of@00d zb#%nq;R(dcBz#WJU<><n;1zz_{#tY$qXfMKbDBJmn#-X_Eg!a(!h#&73W+%`=n)L$ zGC=Mw-eCqmZ~FCit-SzZ<wJe5Ou9)8tfN_$(L8Qys@7kgA3N_67moXH_@=5ZPJ+SV zMZwiV(Hk|4y}PM|CUraue9hda(lZPdqR#NfS!!(s{q7}$K%s~vh(%<)in2e?vH#oZ z)%F4ImsplZOC&=I-&w<^zHBYe&6b#k|2jG>uh;?Xj1|PM6N_~irLa`5i^DE`@|0#^ zL+4%+@CitFQ|%^ClQeVP^{)^uqJ|5;kKIokQX4jHEg=M`v?T$1Y&xio5^Y5cQXtyZ zdyZ}Bi8zxMBo}w5_A6zRZDG@O#y>95=d^F6o||?0C^nUqtv?Ho!pbqIXqlzRR(3?C zz`^KF*UM$Big@p(p_G!*`*G~FM`=iSbr5sUeO1xBWq7V~Up;9y^x<9zO7|2WL5D~@ zscuQJ9PlfV9~^60{%K6%uTgW9yKBmO^YI~zR&g<?Wl=4&on@=$32OHW+r{5}q>wo? zyqByDvTlPS7#K;l`P=HCaM8hbCR43*HcB-`n_dD-QEzGa)JdJU(SPC)Jh5VNKc-?Q zZ{J#UMt%H+YQemoSdKjJ?(N-u{0$4JGd|kib3A_4Kd~Xax9bgppW~Hm19_F3L6LRg zl1(>2=bGf~a<A|VEN0$3kb}PSp++YqD#fC(S*o~@NE`fiF7~)=O256_3nWAADuh$# zLlZXo*t((-njESH60-LHy716?>@9Y9CRrg+(p80KL=yYB(>MZs9n_DzM4hmso`S=C zDqYAmEP{!Jnw!4YU`8qo;7#;>b#}h?nquk{)Dx7-(T_3mb%G1mqw5{(^lrAZjhf;6 zYcuLZ?uyhM2>1TC><$rWlh9VD3M=H7bcsy4p@jwkBM9FeZ@h<0<;Pva(YJ@J$amH& z?P}n$;tm(`2Nxid=oWY9jiFM>Tt<bsrdQ08@r}9bgO>eeTvGNeD*JxDb<8ub5|u=M zjD|SN^A#FjK0Q|0JPdf+fhByeM3g?ybxmNW#9f9SS#E^BLuA=|{B!1X@ebW^3dd&( zTrhCF%~6T)nEvS~lgg3}$``Isy4&CJZ~ynrl&7+h{VpHab43DlxfU&I1g=kjPPSJR z>h$Nn{h0{7-b^TNqVMe?)mF&H*B!&b3VH(^7e32+9F%mf7t}Z17f^<1<Ov^M3p~Lh zcrb)Ft+PAM4jMW*h-kuSc)%MYC?v#bagp$s(YS$7&8cMTg@%?XY&G!1QT4J_<l~T2 z8y|i9&V@8NitZC!4h}Z&y9(L;%0_kRQuDcV6`KMo&Bvh3?cJAHHg|8UQd~QqMDDHg zIYYEKh#`7gC$lboCeEg3(EC_^#yPtH72`%_3WiI;m9t{{ah~HT(dFhfa$Pg_4OaSW ze4TBwmRp#QxhrWF*;?gU+Km!EL*vwE!ilh6$c%~^KDZ7snGo%KKB$cjh%BKL&prnH zea2GAD-Be<Q9aKlXxpq1K*N<JW%H}a5>6ENNVvmLhW6G*&&cMNQL|BU<f#ekg(Ed` z#D42)gj%<zG`t=d$dKZ<O-f)Yx^{#<J^_klMO}oy(%MJ2-}0wXJ1@aQ`-gM7k^~vK z{a9DmlOFp+gCBn~zPx@jhe{08Hnh_VTigIO_Ei!t;Tk@W?d2Dr{d8KOw`%c7vxBMq zx<v0BCn0ZP@3kE@Jo@BbhNN#qAbObOtu|@pMX81fbWXtNmP;4%<oj={BG?{d+tF~L zV6_YFj=R^~k1hm=4`yQ$GT%GWtLHzVp~^7Y8)uxn-9h+qCTtW_gZ(VuG&kH3Yxl>+ z)h`1EsXCg&10uZ(xa?X!UzBWIc#Ot)iIF}-%&~n>SlRr3PzoojyG1+BYe&w0!Az}z zBge0Es;f3TRQ0|Z#@M;J{us`tN;Ve1z-|cn`FrY_w!-AHR@g5A4zzf+&Ns$tR8O<s zwv9>H*s<;=?5g(DTW-JK%LARBsbb<F5>%x>3T0saruHM*b2ic%oiDWM@AZsqOK7R? z@?mq;!W!(F>e2UgxqF}--v>+AaarOio_gV)ldh8crbd`WrXp9CbepR##10=w5JbNr zCy%SA!*+)Bp3l+ff0K8r(W@oKr|q){e8oeA=29^U!^m6-qU5XyJu7KZZ8^8IA0bRi z^;3}Tj+~ET%%Z-zj2sW3Qi!R9L}90mCM?P&p#sq$QFOkB>ow5A@BqP%*)$K6`O+(x zN%FJTcDDR1CNjL<;eDLT5N1QIYC^EuH14RC7#V+sO=SQJEK0W^mE|zL%fHkW@*U>M zDoWTmC1-uTy!cZ|xBRCP><6gtB}qK4O4QCIW1>z$OYYzY983~<&9HHT9Tai;{g5Bx zXVXuru#e39$$<`#*wW2l?u)HI?*&={`(wX@IY}(DD&i5p=rd4CNEyyA0<?xBKW)h2 zkrxK3lUsEV8HYy<><yshoRrJ)Ma!{uMIwluAek(e-@Z1j$F<RqDhk_NX!oYAIt}Li zvsW?aFR1C(A%}QvaO!6;&VP@mLA38kNIoPVzha4VJ1`~_oCObU^UpZ3o1sxNiL;(T zGLUjd575Zn>_XJ2ExWd@Oul<3y4g*_9jZ*ADTW9*iE(o4L92<ci$Ew79c3vmF(i_> zKNw@7gLEkVV-8jfRX?*)y)!Ifz1UMaefh)C*{DWDb*-Aud%j>i>aC6!t^RAL^{ncO zLq&_uYA|aG^AGdj#60Wn$hbk~nT7rc50|WHJqjEd#GE=&!-f@^OV?+X+P}&syNn&E ziiXM4__E4$j3yy*hI;Fiv1Z)5NOhO)c6S$3HBnvV-?GTN?9N;Rr=sfUKyKTiH=ZLR zUTcwS@7u=Y?OkVH0+jD)s{}ZS+b<!L$+!ewq7N$liN2XxVoa<dS7)uj;CYL6-dP!O zd_V81Y#*w1Z`Oj30%Wk*^)8h|qG1?J5p^Mw^JS5{nUj!B<CAb9!6sDeR<}n6I=H)P zf4OIHhV_r{DDR{IY{Z{Stu~sL*1M`?4rtS;X7I3xcZ!Z&IJ2DiF^XE>doGk`vOi4( zxSki<xZj{=dSic`Y_Z^{r#Y}$=D_uT=0G>}T*s9$I(Dol?c+kX+Au~gXuIronmhO! z@7tJKxl<ZLOZ22qTp1M;(P;A{ULqVAa9VU6b&k=;Ut@=-{#G#(r%=;6I!>wkp5#H_ z=tTQsb)&xvv`G<uiA>dp2VY3{`=+61<z?H4x$@f~yUdR&m?1M-d_vzHiOj=bIk6al z!IsEqB1RZPT{s70JNF8dbv-k#y`ezf?#c?&dO45AB8E}3ow{VH$in9hq|wZZ2KT?i zp~)`3ecS=Gh`xx`l#4yuOvrJ=&`z|9qB;o+MS$h=HcWL2Wzn0qPvSm+c)^#FUL@AW zEI&8I@p5?iw%r#J<jy+l)fO3u>P9^1dCzZh*AO-PQ|rI?Xh7KOQVw9$1O@pN>>J!` z5OqJ<YVTwtS#+~!L33lC{sso~cn5Ho-pEF{MYrH;{T_oE@et21#3+%O|4YRfv#}24 z-Y}}@$gX2iM9*&agaGyBZThsNUEuQcc1crdULpwJG$snHdb=obF!Qg}e*i(Jx%kT7 zEeWA>gt!-ipR&ZcPIWs;m(l-wrQ%-x(_%Yi{~A!EH}A-UN^esYk^6Lda6X#rmN%!} z@h^&~S_g^gft!E~!b@zcVV;C#fUDxn^x6D@d)OC3d%MvM*HOU^%N}fg&Yu10rLk$$ zL7BkuEpfhQbu06+d!j8B5@e#Z@WJ3Y^SSe?MRdZRl6kJq&b7x8#+X{OP3f=MC6x)@ z{a|<QwtFU1G2gr09whpHB!1{T4sI1_m;C4J@>a#(ziol<NMR4wlN{Nq$!5O3yb@b} znez?cS)q`I9iJ~_3d9`=$Oy3h)?HKHRWhyQmn3LHL`k@*Fi6yYrWiR%=ZOkQdL*5g zBU-z<`_`B4m&7#l1vbn2|L!9(v{y&F)_CJ=26P6Ij93wr#vHgbCN=hF9sb?;`<pWL zk|TlXl_GZCQ+h`nB^j(lK*+eCH~-Rqkr+83oNvAaMeQo&y^{!k-D8wNB{$wp;P-qe zwauZ2Kr)~LWT~*&d$QB*bBO6B7>f*TuDeFQSOI<0%(VQ${%}PX0VCmOf=5ynXKi5# zsHCH`Fh_WK@;1?E)3HlB7ZI8N3#>q(8E=IBJU<=cb|abnI%dDwIcKLX)%^lG`?o3) zUL?En-=_nFiIy#$Mrh4v$!9>Xd(*)kY0$Labnkw~{7*3YZT!sBj7!iXkM*dqBX+E< zK0c6a|K3SIf3&w>TLbLrHG*;j(q|e7Jsa>~<lkZl*y5W7X}{VU9fvuFwW{zM%wbV8 zGWhB*<4;)SWI@B6)G|fUz8?aEq`OB&kF9!7m`M;BAfD0q$VPTmKAOR;(k<4DgzTL= zH|dYZPposI8*uT|>^>|OdY?A#X$in*$Zwlsy|xT9V%+EPfB}!63GddsU+BR5GHhgA zt}IE!$N1GR(^<4!9Zo{l_2qiMl<mvhYa<{@1p+myCx7)WL)NaJv+)aCujag}U0T$r zH``7_`IdHk)NoO8BO|dY2R0ga&3LP7py*=Gv=EAdz4x4BN23nAI3k^D##l&!@+yz{ zDBGpJQgX5DIrP9#?P&S5);r*u2k_1>=31!bav|G0s?ySx7Edsfg6d2CL@2Sb7lqGb z;tFx6GU1(br^+Y9EO4-yyLkdCR8B}aT3l#2aH%*;o1->KvLRPdFk^$zxCsaD*~v@Z zJ_x993ty~fj%^wAr-@LxePeuih$pHBPE;v3ELHIz%F0n5BPz=fF9Ro5%~d4zmS8-K z&yHfpP8q3LoN&K>^Gkf-wnW|d%|sW|g<g_z>gU`M7c|_K+S}rTw>Z<mGbKF?=C9jN zjt-OV7NVtyhu5D+hK{`-$8IC<`05a;mn_o7qTu0$jo0bm=`f6$RaZVNG9)^2tb|p* z3q^0#nf|xz=3PKmcDsfqLn23Vzw@Ys_p4A7v7*X2k_J8;rG}f_!M`X5G&v-d0OP?? z#%MK3Nq?bmGCuycSKqf6*xK(&YEo*0C8mYX=vWbO^6qX3c5AZg2kaT0cWGYW>ceEa z{HxPCbBgYkDNr7MNq?f{2oH<JI=GLP?fSSr^GbGRkhj&XNg;VSOO`t2Zyt*M2?^FJ zQc7r-9tO$%X(N6LI{M$*D<|{_rH?;*dve=A8=v;Cq1A5Sebm6^^WBaIrKKX^p&{3; z)|=&cJ}^)9{?%ukfZ3NYn-qe?&%6Cs%ne-eg98sWDQnRkd!-Z|L1z(_NZSrtDe&@y zz+8+P={wYLxyTT$;PS-j_uJ?NB$In>fPI4`u#OcqahV}IZ+{@Xr?I~owX(3b5(a4( zdSZV@qdGN;gedi14Nqs~`!94vG_m7&oD#h1Gd>NL2K@1x0p>KB{<%&4qc5q*fw(mv z{O_$oWPna0{|kg*E_{1sVbcgn#sWpGMI~=8r;!68CziWCvbgn<g!FzQvj4M@{|H$D z#faSGJl;~ilyY-Lq7I_FR=s|riBLRcpMYfYu-c>wE}5uvYf?fvC%N@P(CwDY4wTT= zi759K@tcDUggWk}qloA6%#7)ukbxxd;#8{N9zkz`)i>5Wg0+9oV~xEJ7m-cz!I`2; zlDXu`ig`>Asd%+IQpU`#E_HPO`NCYDSdcgdNw!KL<ib_go}7d5?aEnuE9!X7;%uDU zyqo_jW#Z%QS2(`aZJTT_#|mek4AJsUnUzjhOCA-hUFv`X5jfxOB7mSzzZq^GhkyB0 zEyG=Kxh$`M<z^;^_-+3evbg=QfDoJv5hVAafxfEdEa8}1&(WDHkjk9@Hv77aKKj@u z>ffcr7%WdF0RxMY?a{m3K<sp%Z|Dq=b7G$yTcY0VY`fkpx4)Z>3g2Cz((dgvt80?j zCj7Hg9|+zZsYNd8xq{JgZhQYkUU}-CZhZkK*4M1L&aI&A*8#;rnk+BR?dBh@gp4Dz zk1H+-*3!7EXQtZ`XlNoUrc$JDq>i2^tq(SDz|FLUIp%HV=u#h@;_L*`R2_aGM9N^@ zBrr8<$Q>BaUMu#qd=;g-m}b@;8=5+)|7|L!US-?nsZl>%NKW{AA!H_A<ez>hXGj7? zt#jmZa$pkpVTO3+(vEhqMd1J>IWbpRSeNH~TM#D4xrp#CSJ@4O#P<;{&ujOz4?k3j zeFZ(zlAy^fcwQN##Yu^qH7>{9W+TlFKa=#|UKaZ<olbfJqk`39ggknLmReZp+S3X( zoNU7;DYD~O$tC(X8q*3TCi~ne-V2K69?f7m4eP|S&SZ|o<{ynA5Dkz)rgK|7dSpIx zolvm%nY~sYTa|gG@fpn}JQArb$QMy(#{OB19s-*66i|<7yxQp&;~rsmq)a7B&n!2a ze$-PDa+<!e&bRRKipLM9J%`JJVdsg&l&$^R2&Gz-O^UH%IKK4Ht%0}iR8wSv-lWZ` z+qmJWqgc_o=AM}MFe>4+)^7LKo`Wovy)3-&({X}L^8wpk^1P&HgRM*}Kn{BOtsQqf zsu8Bta7hth0?>ivV2ws@pVGn=)w_7A5N+K`LRpbfUX?6rnT@eu^lNS(Ez|^D_nAou zZZal&8z=_|z4}5f*G_=jS2(pStFUb?vm<<_HIl1-Ck{FMJCa2Y!t~$8o&o|_9}{#M z4lZ(JA7FP7AK)0!wYWA79(pA_!XZ;W(hHV!>2;o?@R46E3-<IpHXNzhR7uiWhAcS1 z{OewJX+Qt=cC?cmB5JzS_$_B_N3xmc)weWSyE!s=cxlbM?`AG{vsJZXFFi8)#XQG< z9;1tHwZl2FIDn)vk_!Kcr|MtQj`ac2gcX}JdZ!{oJTuRhV|{ZIC6axS81v?Mf8}DR z*&sD%3f-<BM3sB8)GKz^q@?t6H^hp!OT6HDHou`2QWdIV3CR{{jsv6UB7|p;5B|)N z8BZVEh&xpn%)jyv$D547bI)@iF#N^gejqg2(Q&wDBH7>W=Co2_f%sKte}->ql!X<g zD5Vy)3ssYtMNW_KG-fE!!y9Zl_vZi$E;tP^_Jyc|=G#o&oBQpE%<~-f&y;*tm4T(X z%vN`!&i#w9$MjY<UuVtw%7C!P5PKp{?JHpSN}@q!foyS4#A{K9gzsV1ggjf?<o<vU z>f$Mu-hJm-vyy%H=?@A1m+X2U{fD-DF(S4I4Ei6kJ%0lG^5)hKOHsxZ4DeIP*kGD; z)(<Pf{`H``MOaguTd|E$)8pu+j_>T`P^eLi(upBJ(6aW|W3WhGH1c|Vbm|(FvpkkZ zG)`+|G!#y#9}xRhHf7{qb{PGeqkAF_*tW<i91YDXnF^mfid!i=40_j6kHnm?=0>}l zMxfzpJ`gSDWjgbiUXWCS*uO^urmc&?VB$397kI6%+->zYKqC0`5pRHU7#~uhyD+B) zPFtABWhRc6hcmx#P<qcTm<3zCebE9>!K1{dv$q{y;#K4(2E-Ya1w4_bVAf(e@gu7@ zH8~2J4TY!@XWoGXBu>0E?+8KwyH#`lCAJdq5z{HNZ&#-ed6Ackuj}aX{{%e>!u8aL zTg%(`U9xZca%)(3`Unnt0GfX&_~a9K=JJ?m*;EYqm3O&<{6g-aPHrQSH`DGPi~#{2 ze0tHmvv}d$Pid5V6DcSRPvtmUh`PZ?Q=o%4n=#<O;=m<ETxPAK{hQLapppytCVZm% zc=s`U>m7$j8+WWX(nk1@Bt73d6nU5V3h&2vcOU8g;lVe*=?_<SR}-T%H$VC)J}jcr zk&1l~r7|L#wlEq7!tpanqre|82L9mo4CVDzamL&_mc|=HMPKNE=k)=`RCH%9l?&mh zgFdA(qtc`ihcvd=!5S+%am)Hd!OgU%sDqs51X5mkTz3oY4=V4);dO21bFYMCH`qN{ zaqHw3g&$|C!t;EBd<w918(j|cTALcn8VKkG)=8X2$l0~Jfp%zR1T%T_MQ_$!>+Kfh z*5SO<x7nh3WkS0}?g)On^R1BPlyQ&}-lB&SINm=|+Ktk``L0dk?|yueUp5Tl7J4?H z`CdqK^^W9r|E~LA#DxkVrJ%G}HCU-+0mMR)`51mcyv`TItv)hk+E~%o{Ru2(Vug9T zLb1dTkM++wJ%KX77xyN;F$Pa;WjAXMDao&L*z%8TwEC6qv%Mo%0qpPoto!_6o{#rY z{%3Jd7<(e`f$uFAE})$VI-53u2aoCkAM!=BE|0h1ZBgCJdKCJ9yWfga^4dEai?_op zf7qiootfe6zT>adz{-8*k>#v-A|;_Q`S%_n(<}Elv_fLj8D9D=&7;TnnKott6fH`= zfwsakR~1ex>oPzKO!E*>z#j8ffPBfiO=xpXsR>bZvsWfj4tVtP<c2%y-In(`0mu#o z#|pC(<(BR_62mwZj2d~f@m%!O^K#M@b-3j$!7-vLZhy1f(1~Y9u1-8_BO!k{urlIz zEAF5_VB}A^zx<R%^lzRxf|*9|c7bb&2HmF3uy`<owxfNZ1H0DdX0zO8;DLl-3io)D zbK~<mKwy71wy5!oA3@N)y(_qQ+N4xAc(#P!k8vfL9OsOnJX3kk{LIY!Jw%Z(<$If) z;MX1!2aHco!?*(+5in2k4d?x#aTWiKQ6A;D_G+NvT%t-Ph^sn_M-DG_+!&Wi)+WnC ze7JMX(FHy{H00|>@TlV5GQXHFa)j;k=-uzQ#;e+jqixC{jlur+0Y8_*+$QxeLNWi% z5AN2=5t;JX>a#s$!rZ|eVAxIw073pboKM75ei0)}yw_1;z5RN=k^pzhsLCw@QGAm# z&b$NAy6he`;C~Pa0>OBKkj;6(@+;19iJbH#vl@1XcP{2WHX<qIvbFP}VUquHdU{9L z4JJYMc=$<u-&AJ*T4HzF{o@~7`NRMAW16@+y0$;F%=<afB=G+y;4}8Z{!4DYe=9F; zpZ+M@<_qXDi+g{oM7DS38dEO3_|nFjX6@%~8~Zg!rQ~wQ<a_VtNiEqAk33{t8fX;V z(=>xe-*H)ECLNq=8<!eGlHa}v^WM7+m4x(kLm~Ufsonbv`H`#kS0^f2PLE((+--(S z%M-!%O9TGzPNZ(!IzK<MV@Gz=y_jz1Yb<6~Zf!ZTm#>*RjL?guh*y78udMM~dS!89 zbF-}dxzZYZuKQx2+sxUYo3Rc;X84CnZaEf{U-_3;er<gyQF6TFnD_MV#h({<hlkK| z#|6TS0)BqHu6L@(jm%r!uSWf_q&Fa-B2PJlP$&}SSv`Nbxv7^xT(QKIbp|fCcY_kZ zObLIUJ=kvdZcUQtgAi%`f9fuCf*!@6C#r?54|aS-H^Au1NHoGpsP;+d1MO2}#+C1C zYDahH4+>HSEz~_WR8FT%qN=Y>)cVDT-*Ex0Z}^?4e=&ai|9|farvX>6U+`;E#oxOl zn}6@lWV0U3!hgr{=yCp!wQlrc>*{=+`H!i?2v+fR><Lg?a}A&S-+HB)!T<nx+ND(8 zN*h5GJ{x0dL$wOhLNDwTN=YEuWTQ7m5uy?r42nj?n^wln#9d8x!_Fkpi#|dxOG{s- zFVUMmL0_Za&W>orYONWv^UaxazVpqQA0m2T&5%XOuSwqxw&=O_#NZUAtv3cw&|9l- zaGK_=9|lj->(so#8JbUhG<e#oq<<MaL$5OH2G7#-%qN5AD4qEVW-I*^qi;G(j4fKA z-v*~>%6e(=1iiQ38Jwn^^~K;xTC;u{oS|H5$>8Z!J0%UCp{2|-gJ)?W^TFUbn#z2p z4GO7G7Zj0CC*+YLMmcgRkG?`>v}G!4<lxU}lLSfa8(`Ferw>bjUQhv+hQ>B!?`3vq z31|y5Tyxbh$EgjT9-?R?>|aFwiKkf3&9h3myj-l5oif`L(mx4U%k@RziUMl{uARN< z>@2Y@j|Z&g^0w%KZ41=<pgyD{h>jCV^g@g4V4ClX!=n}tWJ^Ro4C@fzg&0~7yZF{I z46uT@kFXk{*I?_4RP`$EqAy<2)x$v5!{|h?id|+^b|Y~yN%zlmw}&5S*LasgU0DZ8 z9a;fWXdMs^(1)nJuU8fC%TRkQVt433MA8of=Ge{(Q>w!UD)jsSwH-S4V*b(c9(Lpk z4>)u&&nk^{vvG_#xIH>We~xjob!*7;*uy!V=gfHVF`w)C3dlG@rdSQ5J-wQ^Ttj@@ zuv{K5M%!TM>Em^Gk>d-N#eBSla*Uw`)BzeHCeloaM;E=Tt0qm>0dQM0GObML=mwrd zMmwmE&?~=UZjLd;b-(?f*<;Ga^D?L!;_t)G=@{SGc2yg$GuCKVV};9=)w`phr%EL> z3AVTfeb^*&NzHXx?GlvNq4aOhN8#4@gXLC7qmkX?$~)!fHty$I{=PTG#GJvz6H5|T z$c}vFu{|M0G!$(X-*~pod*bF@x3k%O&zFfqE9|Hdj|79E>$@V52pt4%5i#Wn)@n4_ zPG1Cxb2D)$uxmHfPRL9w<3sLu`Ege;t%kFDZI^LX&3a1ptEG~3BfqbtE&XmRyR=hB z&Hk&<cM(4B)%^o}rGb5T+HK9pP6BZd$MNqhF1TVt1Qkn+y}N>nJ)(jQ6+5=W-xA$~ zRiog|lMmw6v-MGY91Gcl2Y<=rGnvU`(8%ZOfiVB&{-*>D7X|3J@lc3C5nhTZp_DSp z@lk=FN&*C_qM8~))KW)14K&h3GcB~zMmrsJ(nU8t^wLK^CIdfzBMdUcFi}PrWsGqq zm}H7+V$3i{oCNbMu*ee2Bw1mVHBzjz!6sX5v%@ZF_SoluLyl0Q@hL7T5MA8jkwP(~ zNW4-kB~mJ7JW09uq(b~sDFF#e6^}gg!aE<l@+Q?%BOy=j(lX7MnKvAX8s|6a?(F2s zJ~q@zE}QT2yNDS!vR3Bw?_|(%*fHuj;uv$Bah%oXm2E41>*6e{+(~60pDHbFX(>zJ zw9aki*}lHDGFO+b)P?0r-CDnA@kC<IG47c72D0o?P5=M^0RRF2{{RmF000310002Y WJ)+M50002S`7%!c0002dw|t&(^vvl1 literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_SansSerif-Bold.woff2 b/source/fonts/KaTeX_SansSerif-Bold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..329e85557fa22c84800d38d8e0d28e30bbd6543f GIT binary patch literal 16020 zcmV;FK5M~uPew8T0RR9106vre4*&oF0EDan06sDR0RR9100000000000000000000 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%0A%O=B*fWL)kJqJP%j*Fd7KVqb(bRH!iP{ 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 OUEB{h2~*r=0002H2(Xp_ literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_SansSerif-Italic.eot b/source/fonts/KaTeX_SansSerif-Italic.eot new file mode 100644 index 0000000000000000000000000000000000000000..289ae3ff8b793b05b342aa29ff2d7c0447196368 GIT binary patch literal 31320 zcmd75349#Kbtha^J>7HPConjAW-te42G`7B00JN|1PFj201^Z*fHz2hhr~-HB}$HD z$!BE7l4V;y)~6&}UO7HAG)4MKY}xTT{v5?#$KJ%7jlH(x>x-|AuT8w-;QPPs84$dr zZ1%Um-v?mO)z#JARj=OtUe(OKg0TblF~*r-*Z*+-7^j-4nO`yX&@X<@T(#?OVoYUB z+V|jV{-v%~ckS53CfNep#+KL|+t0S5e3G5TafzK_$Jk*sw6O_x4)w=zehBA-Y=?IB zEY44%waU6!J3jp=ox|^8w7nb0Q|u^OoJ2`wDRz(6D$iQ+gzU?_v+agA;uemNlRd;F zc6w}V+w|fuxBNL{_pL{5!{)6WxzXq5+tBD<oF6!JV&U}oJ->Q0#{2^6{&47?bE<gE z`5a^JpW}Mp;nPP>eB1Zm{s&|7R~WOt<H*9<)2Ii$?i;|-bmaJbhmXJN2^768jP1Gq z=+eTX{Jw!^RJ@2!@hB>kQBlUT3pj5%dg9!@KmAW3JI=q2&u@>PI<%1d){u=cPm1n2 zv2gEc{>S|7xHgA#_2j~drDuQi{Vy?g>Iue-Upam1?72_*n?A_c`J-s_jnikAPQT@i zFMbvMJ%IKXw6SCSb^r332lqP%e#e@npQ4_9<CFJ)pmwZ$d08<O#4mvsrWMq{J>r+k z3fm?96xY`q3fhzCmfFt)TFnFOUM6c*f<;-5ok#gj_D^~Ze+Pezu8Ird&rtJ5{m8$^ zy7+Y{_z+{ia<QNPLc0t9W)6=o;_2$ImL+w$m+eB|{-84UrhO8|_-En@ny9$`2fPnI zd>a4$fa4H5$$!gUC#_>UaqPwMY4LkD&I9ao{B`UoJ_7acku2;u>V|M%9>-m%Q}CIq zesVbW;xmX3mG|NECVZx~54Fd=c*Y!N>|^5H>|T5t@Yy9EWcQ1|VRK?T+acEA^KSNl z_!8TJ_B+wG9sQmYO>C!hC)<PiIq^Mq5AM;Aug5XVisHlQbD6yc_dY3=*^@Xr@Og(g z#CmvyweraF_tB5f;gjRvXKRJbCi$PSNgO9|9OpT$zcxB&zhWD?b@>VY|FS76OZ99* zYxi3=ienU?4SWaMJji1F7+b*kF8<f-xcCU*^Vf`PpG&L(@A^xEZ|!-EResIb@-U9T zv&uK|`7%B~MBNmQU?IzmIDQ|WA8F%V$I^h;d5nSJlqQ$}PCcmm7>@Vj_z@hlG$vqY z4)FS%_W3RMpzd{qJ3Nc`FX98jtbQ7R0rc}*)KIB`85n2?IH98C0ZUoSc7rXwg1wSG z!Mj9{WROgfO?q5<r}S>=ebN)s2c!>4A69*8o!a=T<>h7EtKyy^wiisOb`O&j$s)aV z)jdy3&!}ECq&EEODsKA6<sU46fBAdM|9$x%mOs0ksU)uMySn%4o)`c2#c#g&jTgWE z;@4h$;l;mt@vGlk_};$n?Q!WegBShp{cr^ksNSMc&UMs-3%Dp5WW{JQTdX#_!|8H+ zygq**7^<reH#9b}W~N4>v6grunQBdEvTf}hon5(np}W}AyQZ&yfUO-IVx@J%BkM=U z#y3oCoSd58w0UOB?AC4DckG;-#|w7-?{)ab)@N5&?AA`s-F@$U_Yk*ush>ToFP2$W zEwk-&qw}gd`6=euGFeu(?wTtX!sXQbfy3&B?Q>-jU-+~MZ0yjX*uiilQfBjIHWFL^ z2|#G%z;IicXUpn=!);}eRTtIr^D|{bV%H~9+%htHXmob>TqG6=Uzk(NGc$9Ma%n!S zmV2qxJ3p^p)Eg}<mQ$#zo~h+dy531GpP!ji(TNKSYS}U~cK|giU9(WBNTuR|@PYaH z`EZ$M=I3K&HZ!+0Ki^iCvg)W>HpCauA$eqGt}Mrf%Svn*-JdV>18rqPHimwwix=gC z!zx|TUrzsVee_USN=HyXqFzuh;Mo^D<v515W$wUCcwu&aE;f&=rLA+g6sAE{-`rM~ zvt{E*<`ZD~8fX-p#)e}6acp>@EDjzn^Fw%kSx&c=jaijCX&pKADFZu*Cg^7Az&tfM zuwLt=Df<bdm5q!Jrz0!CHfOH~zD0iu&!7t<81Vsh^g?WbCPIT03llWUY8aiY^|CC* zV+-r`S6FXzd$|R7;pUa0t-i@dI1?NGgw-OA&PBqp$b34|R<>s^3Ncz<Tv*>$c4RRC zRV~{_Hqy9Ihz-w|?Q}MaGds@O%1%7SrGZ2R1P-CwWyi<?^}+$Q>;TZ(%C79>wz-Rj z#r5+oW&2X>-nOzkJGo_Ua;sh$j-cMF)qAoRnR8_O+(oAo^S3Zuc4i1kfx5#NZS>EM ze`OxPOi1yWxr>Ck0M_sYOfS7Q9f{$#S~;v=r(1ygbafsh8At!e4`33no2uJP;6*4a zF@Sia%mzQfIoGhkn`IZ77~M8kcE*O)(XtgtX~ByR466t5`pYgCXAU+zeBr=FkCG|h zoe4()CLhM;&9s&M*^8Wx0l=A#!R$qej-l*D10CzK7iBuuXD=#r3}-JI>DZ9HXrg0d z_M(}Nty#6b%=fmH(^}!KwsJ-*oM|gJWm(yt`FHfO8GUTRvsLtwjuG^cj#2cHjxqF+ zjxFdT9pmUD9TVsy9h2xI9aHEd9kW?=KqG;+EI{KrppFojXg(KkEN2Pd+Oy@hOt}q| z)Bz+O2e#dklwu3LF=Asc*#fB4R_<Jx9v&!nq%X?cKRO3CM3d098ZtLu&SlkZt-pD+ z<D)lIG#JG#yGQjb096=2>jz`K7jxW?5fw0gboiFH8~|c3^tP3|v+cowwsP_1ngR(A zp?MFcgazViyE;z93s6p6xG)|Y2eX(1TL)VNMHe~u`|$o=aG3xI1b<qSvUw!4bfG<_ zssk7BtTopztL^$T$_6|Wt<>@XqW994xl2No)bJ&dkm~1$i3gg%P4PawF*XM3!)#tp zN}zk5(V4v%Ij|TjOCt-5U_)YLA&l~YdC=~S_bi}GV9c?xh2C%sZy3Y4aM0d@=iTBZ z=m;@O0~i2cF9V^#+HdFyp16RU<60;1ACiW++_iTBBl-viD&8(9sxXKR05tttb=d?0 zSJkoDIK7N!Yd`}T4WJ59wr#Fm9e`}49#<>zuxlV!;y9bYr4{L`Pt?uGbs$!q8T7HO zytdkdk=oQ8An|<T5NlI8n2o9J1hp|R=7IV4i|yP80vuYY#%x}zF0E8+t!uYl*JfR| z+?%Ogx$dFE+47pq1>g`N%LS0-O)ti@w3plQ{t*pagn%{Z5^}{r740Ary^rg`G{D1G zFts+`mq*3%TOr232m1(a#9sztz2V5J`Hsw2`#4I#r~!41#vdWbQx~h_SQ+v-hV0jg z6Ve`Z=xr|-K#Lo0Q$GQo%YEK*H`;8>mV0oRB&dx7uId=XS`AK9SwhG1B)~eI{RH?7 z3Y$>iRM?#T1lMY2P|#|&P@7R)nx!^W*h+1vu#MVKVLP>1hr$kOLxr8xh6;1kh6?l4 zW(0*@)P@SXsSOqOP#Y@jr8Z+I?4veR*iUV!aDduSVS(BVqi~SgP~i}@p~51yp~6zO z+_wVe!*o&}MD-D^G=$Po4WCe5!pX60xqqeg9dx3#zEdkv>*HF9nx4p(2UeP%q!X>_ zDXm0JPirM=dRMl*cBSbVI?<Y*)k@U#oK~WycV{n|4Wgzz4QI-xrLxpAb8k)Lz;yy; z{429iRQRLd%)0u0`XW<?KM~?AO@&KV6F2E4zoM0l!=E8ro|#c=8vYC`>1Bznzu3Yb z-U99N;kk>_;`)mTI{S?2A;t}*hYvx;LK7&_^Ox)<ZcBfPFTbvAcm&d7{Y80kJxQjU ze)htin`YDE68sQX_+P?0EeJo#FD(BP&R<ymoqn#}7hwAD9`;fGuqcWjNPlZk3`N5o zhM&tN`5yUQ^7Hbqm4}T6<Kw0|)2GY_Ed|Rx){WNR+s16q*nVJNbfg@wb+$X7an-xt z;`$f&Irj_hKX_(6ANTy!dx!T+zKy;w`rj8w1fCCig0BdEF_a5E9{OQjXWh}d_tkx+ z?w9pn4Br#}R>RSTuQcA#w5RFMngh)rR4r<+`s2uK<bBb>=%->$vDdc*TJCN6T)Y&2 zD&a}ok$4Wj-%du8!^s253&|g(l+-}#OzQboM{B9|c<ZCB&!?Nxv+1{|pHIJ-*^qfY zTgbjI`=#v9+fr?FZJ%m4wKuePwhzJx$N>Uh0c0d*WTwlC0dB(1Ox~S$C-d%D?(K`Y zobX@$S&l>Hf@6;HL-1!<nUAfXEJtVNN+HakU|f(p%sI(~kmi{rIi#uZZ7#W`srf6> zLQBM;gfiZqe9o^pc`Vvpl!`rtoZsk=eWSCht3J|~Oa?ai_(A_c{^_gy%p38k{Fl94 zh<yUD66|&S@A$XT7eC9e=2C+U16iDvU=j1(257TRHr3jaYi;RLlzP0Tkm22hA&$2h z9o)$s+!%`v@mtltuGi_Xn!CCLmxaZix7CHdcvB7k_8)N}wRdo%QfKY(Z}amT&e6Y} z%Y)KZ^lu-Wps%`I;zl#yI9cuj$PyNlFuEL8Ns*1pqTOkeWP<<<W%wV=X6K}Y?t3@@ zm_Ui~voGD;JT+fZ_wQ$H|MC5IEFHxA_U+lVb<5Pojosb8L`zSL&#g3O;sL+U7&9tH zB^FI4x(B&7_?7eG5Raj{(39`cE@_PlJ;nSG$E+0d0iz<ETste~b2xMIU@l0{BuF}W z(jk2Pyn3%x=W_jia#E5lc7wz>w8ZxAT{#=yuw$p)`Fz~um*vxUNj8ge-~CgQ!e;Ps z@kY+~?j4^LM!VU@rO^#Lwka0b;Msa0nfMPpk=VOeyKB#%nyqH*d*3S=tp-JT$A$@B zEz56v8#i0*#!c>w#Ug}aw<?0a=e<Ib6_>H{9WL>=zE`;IX49J==R&cWWuVE-%oAeM zCZXR#tUzMD%U==Q@H|eld3c@*rLHjMKm~T~+q+|W<9MdUBnfFF!@skH`Vtq1a39cZ zZC@%GZ!;)?OwXX`P9)obaYcZzj}u4<^8htpFwhL_bMizo5lcFGpbA8%ph_R;U=X*( za5Xu|dxC+Ww}&Rlhj!h?U?Gt-=1@P#e<;F1$&f4Uod}zNE|M_BTR?ll*56^}R@o6t zg{*QY7-|?6j^i6F28^D^Tew*+Bx51Pr&x1i_X|sB$Qt&_VqZg`gIjD;Br#_HqZ4?X zeRJRFgJFwou?D#nKU|nwOrp`z60@23iIWC*+n%s>>OQv!$~47-w{l_hyF!j0yQR}A zniPYtqb`>+2_gQrvBUUX*(m($;Sqj%`72TfVC!WuwuWtC2iRb#KLyzGjewz$7+?vn zo-FZ0Xl*pf#zV|xFqn2SlgY4K;RcgobFn_1X-}q75i`)50~<96)({&w8!W`41T()c zkk0{BaiA{{Rbd+L7YNIXJxp44r*?s+3$3-g9Z+rhIo-^I2{lsJmG2(5DUpV>DfDb4 z<nuTzcAvu$it_i$iboPxpB9SQDU0Ve<#^Y_k(Q3edW&yOEM;;99co;$u6-z?2(>LD zSskH>_-4H;IkPZ5V-@wusm9ppfwAWBP)De#!Ctrbc}aL=MO-xqqZ42?{_tRlzpAo3 zm`(LIrMLISY#@$}ouQ^RiwDQK`GJ8RM`#ZqHV&EgGw}jj4~N}x_TiHA;J$pL+p2Im zi>C<iohI;|Iws3(x6uIp>7P_E&0;s^P6WhMSm)(I?V8M)eCWo@ZMgrIm+NqMsqwlS zh2T3^?&o4N#CFNY*s;UoW9Z@f&h|`eRP~q?zdn6U9FybZO+1J{5KMP4kk@K}^O(S5 z9v6vg>8vYBvj=vSOswTJU)A{r8^VMKeF1;ahX#XON`O08YXf=QQsAGK&5hp1h&%SM zmqQG++wY&Tw6yTLb-R0|P&k?!FbRWf8ZS(3^eyZ;+M)>A+3s7D1uJoEExNk1CaJE~ zWCh&ZYwG>3lY?PnV_Y@yZlkBOwN?BTx7ydvwoL4`OFfR}&Gz{xJ;G{{GxzN1Qml5T z<PEesd(9p5?r_+@rrjHFa#&M=aO39lUgN`SxzeGw_Il0mIZFn6x-l5949v{BeRZjr z>@L~4WOo?AZ9WH?w^@^Ub)^7gj35Uq-wjn<6L(#b61<J9`&?CqaRI4j%iHThH_0$O z|LC&9e+K#tFn7s;CnKK6`LWiB08`@-)tDARaBi+j3xJis%@&V4kG>&npOvO8yP6C4 zbci2Xgnd`#$Iot>c=k@&cJAWQSAFwMYv^$T&wo9hAG+@O&0g*Kg$|x46wrv32pDQX zPtjZC*-fS?v#^Nicy2KijRve!h8NZc_}4#jhs7e<rQ;ty|0h>o)zlJkn++f5vv=S< z@8LPoi}y^he5um|{yn~?UG>Wnf++?G%o{al1P9@qkvYNxXPCiotTi)`%y=|y0Rk^a z;*EImAUHRA<OHH=1x@s!Ldozb@%Rp|I0ev?*op(d(MuYFej(<OEj*RrUPHax>36wL z7)=hJQ<-kvXH>lgqpQ&jDQJ+*2B+%usELBxAX!{)mvOvpuUQ=MHya`miQmiZ0k_>W zuy$DTIlWFL?&~w!y-{nO(QPm^L<Y=_Zm02lK(z=?*Nu_D8ZB&aeEDONQH&#u+FD95 zgJi&5LYcsTA?3E?AR%-`FxXTV@UHP{BWFHiWMvFh9U)QZi6CHrUw!-}ry`QkS^1kj zMRu61%|@re@Rqm2G1x8|n<U{f+MA3ngMr7n5;9f3XSZ2R%A?VZ9xpcs%tE~R5tGwm zvOOG`_Id~>hL&H$zQGPcg64HD<bpQI39-d)sFM!jFV|PO#nk-em|w$o^ox{6%ukGT znCLFj7?bfXyR*^h6uP=NG}sUuBtl_%_8C3}0GOFtYQ*57UhTv|BOwOLVn&&ng;`R3 z8E<#QPkL#gILs|3<Lh4M0KXLRs91;RP*{ZeY+@<B&sKW;Jf7zuy=~>p&8Oy{i*^xu zS3ByDX+1nx?HZn?EGuFsaMjJ4N@1-}EBMKdab~qJH+NHyf>DxOh+on~XyPpF2Xk)~ ziXuT_5?B9DGW@|O6iNDmFbJF3^x}|YM8Ci%<{%&9;zKOVI@vpPVc-XB5hr8JJ_&tY z;~@d`eUg0grIm}&=&!p-8o!qwsf+5>_mPCS=~5kmBXsQsXev9aPn0+bhWRUX>9#I1 z1$Yq>S67EX`}A8=Lc!t_D<VA@$Z5#fUEt}?b}2jV4oLQBYNoTt;U39!_?vpN&j*@@ zGqJ{y)g9>T_od@@@n|UB(zY=iKEMC|Qp_SU9Y+QZym|Xb+B?$!`V)PrR(Bu~8NED~ zUXS@eyq*6AU=?AH)Wjx***NkTgs@K%;TYz@FdT*&wCZqIt%38#1_ZG>1fT_xpVsQS zC*1Cu+b~69)9j7pV>{i%mAGOY;DdrRNgx2wi7Y45x{WbX74toOYR$BOo@Y{oMG8bW z_giiJ!L@6hANh!|N)O~krx(328|`unS8N?ZzWPxy!EK$k-(Y&sH`sw9iE($cS6=Z# zbAwJ+!xWuBI51_Ec~`@f>c#7AKb<PPG-RMOLGGGacvCG|gg}JY$xKv3gaT$8td#5& zAUu%$nn-{|_i5wzD@K2$I3zS&fE4;tu~W^b{4VZsg*V;1Va~#ZH6Pup+H7xWQfA`s zaf!-Z27`I{u3$^}h*R*N=X-;lEo!7$l9P8%4$Iz<XQU@N5-^+Y7MxERg(r|K?sbO) zJGVj*5`20=Ln`1i!9G^9HwLVdfvss1lA)$uH6r>ffzOg5tdWyOSQ-zzreTFw8UZpe zwW01xtC|oE-L{FQX;F+@f6K}P09&FddW@tiTh`KGPj{xZFDjGVCUAn9l2C|rE)J`L z1Q<XF5v!kQno=y<!E?oKTqVT|knJwO42gF4piGJu|6D4X-ri`0w&5^OFBu(!tsZ-b zn<hf4WC;fn!ZO`E(0`(2<PA__e1+-4W(!|y>gaIE!y+>V-rv*|$;Qo`tIg)kX5Qd% zs!3rIvx9z*knMp?x82se*x0zmyn#!y&zapaq&POaNP&g-Xgo_3A&^SMgjqbs>OrBK zFE@~d3`8X|3(z#3QDnglu+F(S2&ia|h+ADCq$@eX;cz6ZdOf)uY~wmGX%A^Rux0X) zDH%vQk}44zecY?r6q|a#+fyvg@!hWWHn)49$?UFFI5!CH+AMru4gGA4*NutFK}mqN zHqW$VH_Nim9Ovf@Tb7$KV?<}bqYU~#$lhJDc;IA6bAv)iL_>%%1qy*;(2xiuxPSq} z9*_@#;YhnNo&X#xlV!q_mu*@{KA6<)9|%6Sv-((r1YTUSc-Lf7slc#N31_@TPj{go zW)O+{7|_EBM*z{HZt^SO&15i<j-YAjgdc=1(24-3*z5SrNB$JFVO;haEHF;xOkre8 zG;(U4%e|x5>NPr*dP!aInQ|qovDxM_2E47&E!@lbeZ;}6K2yu?K)cN<r0~Is;emn8 zR?%y1FmSWS7*Vzf>z1`iPXV;*DgvYc(LTVm1+>`(`{M5}yI~I3n3oFHQ=`Tz2t$*a z9i(770<6ZvSK5J(-L4%?P!ncQxA||^ist5}TGip5AoAK{Wb{Kux=QVF8sDEUc{wW$ zcIRWw0iV^3ys0ku0H6U7M<h@~KW*aBPkitq5Wp2bF~VFi7s#(@&}960$rfI*f=Fr< zf4^yCW5c<L-eNfDjF?Q;M0;C$ecC1~LsOE=;^OsDhuh%pX`D^fzjwxM=-Q|l+8myt z_K?#YIJx`4!99=18)V5QVli%Tg|mm6C4(UcnwF!nOtvm~VqHtW$-qndxMgXuu4yuC zT;H-Ojp4p&`FCO)@IJzVWDSyB5Qm^KK}A@Tjp&w3)jcOP&IDhGX6w;_jo?Cq{9~s7 z{B<HWQ~m3=mKvm7mt*)(o4QO+{vSU?cFo~5Cu&QCAAa(|KXP(&?#G{xwky!vxT3)G z3%)rGJV^sjQjl_^?7JmvJ5Z(BEDTbOi#HK>l_dj-tQy{s)qFj++|&wKbA2nq70Oi7 zai#Xm>)Q~f+`f&5Cy|>UffU4@wU^0E)1e4kM%JzAE#$K4fRCkk>Ke8XUKGK`b+^Yg zX$suYJSPA(Aqk-n`AdpMO<cst1A<ea%j7<9<B+#Sf-_;Vp?$6;KDgB;xmxDUA~ZJM zIsDE&g<%`-O!rL=b|T%2_iSj(jJ2wPJrmjF+LX-!au$gV9oeZyTPg2!CYr}u4BXZ} zJ#ZwN5%Ep^ImMG~o&M+64sO~zmTe!(6Ft*BMa0uA$@<tcC5s*G9Co*;O;RH$MiR0_ zT(PFZR;NqXVF~(S%(y{jn8{k>>ze4I_BKs4wN<_O0qDcdDq;vteJz<cWHRxDswrr| zUKq%l-dcp~P7|TP+U_2`PIE9}GFJJgf}mFtwEVo|J>J-{UHdk5xLb^BS8PKdRtGCc zmZ#@h1A(yBJ3RIN4XNf#u)ev0JLJZAV7++y%fma~e`IGzAZu!DYs!vE3N!)3V8FYn zJ(bxrvhgFwgKFQFd?Ih;9{&UeBgk&y^~e__|NSmq;`qr3B0Io!gLX#%y2VAv&9J8D zlh<xVvC~wzm-gy^+|t!0%k*!v?$v)|Cl7@2sl2)B)fZ$7R{Ixbcj*1AXE4y=X<gMx z!*0yGu6|P|Z`T4UG}#{7?HG5pyV}i~cKykiA5jPyV*eIVh!unKhHlqPOMYYTt41bl zE%s`ufuBK^On^m8lmT3QHB_|iRYh1x)81gAQ;UEUBWf@JyosnpqYA8ToJAg$;5A-r zu-Ocizo>jsvZWp3ewXX&Yx!v*3=Ieuz`gzbdLt}qn%9rvUr0R9;z+7KtHZ4k)e_jx ziaM&9a;q#CibT9bBMo}tm4`rBYKnZ-_|X9v?aQR0W7g?9CJ;ZFfJUH6C(;uXO>J0V z<3$Q3XaOGnnM8VW!o+38U2hraNtqv*P6y%%yOK;gT&<~r&dP5z6cK~Xp$;VxhsVlL z$DPOa_o#vRcuy0z=STY2W?QblxGElW@AB`(Ux+WTB6NVyUruqOT+;#C5kw?q`}8%R zGEPn446vL@sq#;nX?)~vASGMZuU_^p=k<4$vMaBVpma&fDi^l?y45d%x>d*7@Vfpr zZJA`esUhIAAg;gwBMSt5JlB)2s^prQRh9X=@}--_;2KZ@D2kxTe~o=>sy^-m>jvlM zk8fYQMTwp0HP@HA#&>M&cz8OM-LbVk_=b)9Q?`4i1K~)s!4b%NO^0X3y~;5jjz{Vm z<6ZHw*!p$#a;#wD{-)RM{iBl;OFrw;?)kmD?q7(s9(*FCIJ~ZA?w;GS*sSh5&!^IZ z-ulD6nZejF;bH^+y;Ad0HnHi;L4dxdpZj6EKsOhZ&kH*lN}BF2xkWuWPRIk<P|y6# z7mIrpcsBFJFwc9Ncr*9M2rLoUFM@ZI5tC0Q8Vq0gPe%*ZMx%0Eh+yTXE#8Q`jX&Uf ztp3ay(PHGg`1Z;(lb=mzB#-eO#v!%8fs1K>aT$pkza-rNyit4#{ceIKJjTvXmTek= zNK7_J(7&§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 G_x*oZGDWHY literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_SansSerif-Italic.ttf b/source/fonts/KaTeX_SansSerif-Italic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..b3a2f38f22466e837cc0a1e8bfe166ab86787496 GIT binary patch literal 31072 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≷zAN|6ZY0)a?&1a*v=~=vtLd)zB{Z&lHc^6yLgN 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 Cxgl); literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_SansSerif-Italic.woff b/source/fonts/KaTeX_SansSerif-Italic.woff new file mode 100644 index 0000000000000000000000000000000000000000..bddf7ea6579bc13bd4455a14c5f380e69cbd6b50 GIT binary patch literal 18080 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 B(i;E( literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_SansSerif-Italic.woff2 b/source/fonts/KaTeX_SansSerif-Italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..5fa767bddd69dde2a3a8a009667c5555161058ef GIT binary patch literal 15152 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 literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_SansSerif-Regular.eot b/source/fonts/KaTeX_SansSerif-Regular.eot new file mode 100644 index 0000000000000000000000000000000000000000..1b38b98a180c93c0dee50f491c520265029a98e9 GIT binary patch literal 30212 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 MoTMv$@AL8h2W0f$ng9R* literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_SansSerif-Regular.ttf b/source/fonts/KaTeX_SansSerif-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..e4712f847754250be2596ca801da591b0f558416 GIT binary patch literal 29960 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 UGdg|EzW)CvCg_U)@AJ|B52O^j!~g&Q literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_SansSerif-Regular.woff b/source/fonts/KaTeX_SansSerif-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..33be368048f7e28c8b87fe4631339a801a09b871 GIT binary patch literal 16744 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 NY2**0FK(}y2LS4J6Al0X literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_SansSerif-Regular.woff2 b/source/fonts/KaTeX_SansSerif-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..4fcb2e29a05c2a1c1894982b7d63d916a755faac GIT binary patch literal 13908 zcmV-aHmk{ZPew8T0RR9105((r4*&oF0Cfle05$ah0RR9100000000000000000000 z0000#Mn+Uk90p(jgL()$36~cU2nvC)6oHsE0X7081A}x6fqVc2AO(+C2ZK=zfeITV zX9w7}Y>?mWAXa4l>uD4S8wbJLcz5>y|2eraq=ajrR<-?y6jo%J2^1|bC~`(uk<{|c zo}K$RE_qko=zKp`rt;$|av#$0Vn-ihg$~mhTv=t7p$mnEWwc;sN0JQ-iht%k;h@4G zP*}tvlMcURjk}O~wimVr9R0k+w@8Cx-3@<eBKn2czlP6o`Mfj09c9X0hv&E1`=1Iy zM6fZ2#gtNPqLuhWi%M9*)VWr-c9D7Eyt&HD@}j)-!tIt}d~^Tr%tC-R;ftKdkPnzw zLWRQCnD124_SDEaSO3e@?3w?2fF);urUOA4?;``qcvSCj4K$KJ!{Ua)r59#ue((o~ zJpXa=JNLewC)!2{W|k+qs6|#Y{oi;|++my5BCP{4L>Gdu+nkAh@BLZ1g#7R4Z-4-S z{{djtTFyRF5T<4yriBi5oe#oc`9!<;2$%oOW%X5+%)F<c%#tjHs1j~qG^D3ywgxc0 zbla=6%hr2)a@m0<NYY6IQ*5hY-(K->A^3mPJ+om1&vL^<EZy*8=@(QIH2F5n40E^X zq`2i&J!hl#1G~TC_c}{zn(CL!23^QOd$zlKb1)zg1Wy{kv8Zb|Kv~$^|6iwl?R#?Q z1A+e{)WZu{lv{35=G`aBev)A%hh&H3WWe^2><l=`%t*3l)^<F50!#1#$#&2g_)eCR zC4h>c1ujai_HVaMx#e%l1?)a#PQ@@I`MxAWQ!?15Rdiz9Mmu07K*S(Uu)F821kA46 zijU0FVx=T4Umq`W$XvC9tzK#WmJ}i=EeK(g4(JvI06+l1N9FrIO^<))$u#q;`1$EM zyMVGeYb3x|F92Avx_anF5E#5Y?f~#V4NTs|+XZ=1hk*>|*PQ=1fw#9j<p8kyHVOcG z?<fEcPcLfgNtB=q+y|&@p+so^0RV(JtG9frR5_nov&^%Hf=ULB!lTHj4YOso&#u`s z`{&RcJt-%Slk`7R>YJC7@(aK}dmtA@M6EA$aE_dW!{#LZ|Nfo*`@etx?O*@=8-E#J zeD1%xF%w>S;kl=tc-+2^z5iT!cjjA1>RcdE4dztkpTL0+ZP||N`9T<&m~kPMHrDwN zQ{IaD*azm?kMn|1@9iHP9vz>Yo}FJ@UR~eZ-r>ID5sh4-RH-#uoxZZlU^JN#i`8a# zI9+ZJ0A8@o>Rvm1H$+eGjG5E>z&iix2UhcrIEqH_i~5{l{>c9oE%x@r|Nrf+p8g?G z@h$ipAn=gpS$g^pqnoE#cb^hxdu(3HPUBb42&?}cSsz2i+E&hc@B(PF2|-w5fMAmD z0s`8Ie-TvtG;M;%`Fj55bMofh`0X*DUMElU;>6W;&DBd*YoON+o1a2K6GuChBPjGQ zlK@E{>M`DRDmT&uEO}S%0$nUG*>5!mJ!b>gX`6FELUW<4ZiMEmgw}|qQS{^t(}04> z6t7Lwc@&Um44=s`ov)EA4{D)CjKA%BJ8CZ5ROodouUvhTljRz%xl1R>wMgJPT0jGv zS0>cd!mRv!G@5|MipY1cfGK(vupt3^`CR`~k_$UbljiC`nQbO=Fxh?KJYM#S9>#^@ zJsyQ}bOS_L(R`d|Mxa_!v8T!PO!jDW(*tQ%XXNwoQ56;#gRs{w%L59aHE*NI@70s! zo%wv(2SPMaOZX+51tP#yBH$BLa*1lpgav$y!^D7rh}99%KP3gvcNh_i#vhJ}G+H3W z(|4(<a+c2$R`w&1;OXo1^lgda{MnH`aEgX8-@8qhhgrmU21HnF!5<tJgPSI#y-H1S z5tPNzw7_zcl{c7W9#;p=1HztI?gU%P&XxchGo@p^Ng5=x86-HHXlkdAfed>Mwd7sG zXw)2EBc8%Es=(}bJlV%cuHyK^Z`!K))!msK$kDKNB~YL-MI|Rt#YxoR6zXys^*9Ul zIU5Z)2Msy5#1`t{M_{){-;Nsn+^9#`qj&l67$4#ZAc0K*HUrokU<-gP0k#6z8ekj1 zy+`f^xEb1yE5xY=_VQqgFjMw??c3%6>^u9bz#*iitPr+((_&cqwZx4&0!OAP#7z!Y zO^1znib2r2tYfXDsOma_uE}~GPO%3Q1}_~tV*rJ*`3rB~J}>Xt&2|!s%Yief*HYH+ zB*1zzaE|UoAGm0yL#~^axkMAPc}|^{K)rhP<MG2%(W+8RuP{T6(?#IM(aV7=fK8Nr z(CUJ?ys{k+RO&}M8P`<-b;qbs8X<z>hrYgLbCZ6G<HL#TY2slo$7sT##yRA*v_(NN zjMfxEkMsou%f^tbn<`zfx=bp=k1c$1H3=1MVLxWn^##JdD2EY?b{-q(G{utYXsd~B z140ctBbxx^)AMS8Gw})Mz)knvavM6X6Rf`(xGmFhG=kj=0VA-Ke5WoDUeIPT?o+4U zyt@(4gpf(yie-hY#}hAaq?Fz(ScS;f7P#l`qgkXfHruvOG-LDurcPt~TD(c>bJq?+ zekJf&w$Q5_4P@&2%YFu~oS@-3xb~4LI0}(8#byE&I}SYX!n;Jxf@5uL>ebmzQaA3G zXimeT8~#NsJr6{Op+)H}ewc0D=(Bv%D@BN1=Uz8@+Y4QAwHLqfYy_q{p%30JM>@_{ zfw!RKcW4OfM>x;)_u%piwaM6=n>sB<350|C1XomO=?23`n4$+%D>iW<vkdJRf<l(V z05!AXLN*z~>?q_o43IM?F65FS%#A{x!vH1o;zB+d!m3foe;A-)HMmf%3}JOB6gUh} zupllJk|8XNT2&89?pSKrD8E%yM<bTXO;3pgEJMxy(nhHTCAU@}w}BD0*Oo~giIO`b zkh=gBsV$eLB}(p&K<)uH>BUci){oOTF&F#~oFhNplSn8EApCK$^&tS}7W{OSVSxGy zL_dLPJq^%v`_FGj7FjcL&P|zGAb8y>%JjMIC0;(v{4rnru9j;lyZm5BF8tPON|{XU zWNC>wWRk=E{LuCn$0;J$llWfo;U{N-ie=7d1yS(k)}_VNyijTl--`$Rlj<QuR$!(( zj12#oK%I9-yDXx}T+IUG!CQ3KQ_meaCu-mH;#Jo!r;}%1-obnwR$Z+gAhU`}6JIAj zZsRp8)XFG2X;#z~Jhk2ViS70G7h09?oSko@{|!HQp;Uj^2N8$7SI!@erC8!(mU`+P zQ5xhMkiJb23dzln*|hnfP!zL$=aoQB-iruz(UNbNJXQuWwrz=6lq{gMqQ9ZR(H0=W zs1I*Wx6%)ZGM=aMj9zvluzIMunYtklKUW?i%U8{WAfTRkxT6TR<j+@8ND>wi@JQ;S z%(=eadgfS!-%pzc9l{=hyyb8oKpee8)ain5IL|Ftsqda9YWoc*q<%#|$Wy4r(dHqd zst$Z2KuARYmc4}q{|V_^cqN`A+RKto+w)w>&+k&7-`~W8i!7#o>-lujAXGG(Kffx4 zmJq!{7TYbSoJ8Lc#*0Kmbb?F<fH|{EsOM|hr%qG9yC3#XwZx6CW7Sb_>iWaOY*_qD z<cg?0-QR8Ud#?*w{5!{@omWLJ$ByK8b~_b?=osn|%l4u#1}cxPS#vn|=!Ax2+^rng ze~pZC&knZG&gAv$kF-AKAyHWImSdDCCzzU*DL2_Qm1P2-XUj|-_DDGtB}Yr_{|8jW z(pZ>4J@?YoSA+eM`fh3m#duG3Q%-7APtBG7t<(0z5H;;|!E6^;f>1_~C>pS{D;W7! zrPO~pg-x2InR<CP>MA~1aM6Csyk<$>jqMYYCp?XPH|eZdlqihaE<g-=53f^y&Tx0< zC<$+f7oLs~bux8e#4j0MaLGy>2PC3Q$?NM!tYoLa3<3p8sD;grY``EAFeZ_z<|$Xy zxwo9{4nR_xEe8q`MHGoEsI7ZR<8F{sV*4ziqN5}_A%r!a?9^-FN?fLXZ1-bPOlVC# zw^RY_DobV4^=E_eE?}>J*4Wv2zu)-G%EX1~Cy1&$T_EMa;@*7#lo(wRPAlxZGUE5E zh;4?ClG;5XGo{#T)<@jukJCg?5cOJLI!I@fHTfbW4P7^gD%`Na{v#d0JuW1A^5kdS zjHWpn5`-D11V5j;gG8Ch$MB*JfwXq}7dzU3NMuO!1fe$(Q*$queh|9h&&ophCU4}m z=tp5erCiN_g4zm1wn3i^UOfl95<W)MbCt%me@YNO??7O>v9Er(GI83M7_SJZ&r=Yn z&X6mTkl%)uVj4_ZuLzp;0@-kT{IPA`nomJi?!Jb)?FCU)r?C(r?s#iSO5HLhV^%oL zVV@oJGbS~WzA2Vsl1rR%O}-uU%)}W0**zAoICR!7gf0a%ZD#rqQSOl)m+w>h;~j9p z)JH@u8vXU<l=>{TV~|S|=Mri&UsMk4mUA9DH}c~3QPj?1;6PdqgaKBugLQ98OHhjk zX0pG2UF$AmX*p0ALMQ|DpwK(>rS=FVn28$=vr>}G?DVxVX2Jt^veOdhFoWbwc@|4( zwk(q=C0`b!zhS#7#+<uQYxPidwX$xZ_P{d)=UcSL;`a9O9hKBQo*w5sUH}L|4`-+4 ztm43U<=aNf<cCfS2|=*)W4SMOaeE4N-!+8<`lSRGk)8qPt%FpKPEzi>X}qLhQ0J1w zzoiQEfZ;Uv`lR!A&BlDKQum0o;N*?Q=tXR*(u~eg28O_T4eh*6thhbg9zZckEPC5z z{Y<2aJ~a^R8Asv3piJne&2cx2kdAP#-JAR9Sg%o8<v`Notnj&VU2fFM^)e`)F85w3 z62hUt1W}v9BdhMWK4yTbyHGnhjf2tkxF&$0h^;NIyq6=WQNNXCkplSvP`8AZ+M%H* z*8YW#7%|O5d%b)S32{XL`{Feh$BKCk)`bOyIQ6YlL{)F{9%=~w${6M0-%3drdsMy! zD<Ty{$BHG4@%ro)LTQk_y>ylP&gCrbwdu$2&@-NA#@VBjSeAz@u;Un|<51UCv27Pt zmrh|kfkFS+&A8jn&}?I=Gs5)heFLZ;7#v1}`S(O|iPZTJfqpQm$A3Txepv93rz$d^ z(sWX=WC=Y_BEVDgCi<0FINn$UpoBe*9uSF&t~VYM#rIsN{)QMjld8czWQTl)`bl*} z2)(=F>@c2^yR?bc?2Bg{I+qGL2U?1-W8_k3^it`pkopT4lzMOOm`+sheLPSal9`85 zdjY3aRx;{R>}YJ;At=nZLBI<lr4xC${-BxP4`WVv<UAc{y>}zxw&KEM@nr%sK&G>V zX@uE6fqLmJ2Lh0l4m4NK-E*7z0lhn=A9m`Qz|T|aw+Aff2SA{j)F?r$N)DRUkvFO) z3x1p^gL)z7q;$mETBQJTR|~hseWl>MkOd%fPLfM{ZWOlf$kM=ysL7F0e3YBAuS&fm zT9A*<>N9nR#v<0h+;e%k>YRayM^b)3fbeib02=F4APApiF_WUwNW8CN*GnD+&nqKT z(HcQL8Ovs6JdACtm{=Bd2XBvZ9$aNT|FXZ;&w2!1YpzEYVIn^<lBQ_ZmBqhHCCbYt zHi-F>Gj&H6Tm`w2eS<LG(wYE7htQ^wnwy6RF*r3Ac|5%CdkZaM#yHz=y`O&RNovbQ zyX&Zz3o1GSy*oY0wn&D_(cZmimBZkywT8387M5AW8X#sw*3^XDZ=?#1M~f@Z<sOZp z<e{v4<V#1kJfzg;m)$`^j9452fkI;K&K2=OKc2=JIE;FFw3iUfP_l@d%jKpJ-*JT+ zic{Y<?tSkm4ZV4^-a2s7>v3ul5RzErBu&TIwpUOdtc3BaY{xZ>&T>5$9p}Vk4_5|u zw=;5U+!*uXd~AtLO<p0^CXPi+z8W>y@f#M;S)wI{M>tn0u|(NYMAeZYRfDPZsyr!g z;Ax)?#Tn1`4x0HE%nVum4jfCHce!<&R09;Vn6d3}@hjC)HtQpWNPQniXW*J;&5+_- zcYXAy9x^$6wZf*eM0BIC_vhQkf%Qof{Fj~pg=IYF;!#OSPTAe}2NDTWb?8O^hXstn z`ul3R=T#w5j-ozD-Dk*f*d8;yyh?qc(1=TKStmR^2Z3!<HytTMCHed$U-mB~+8KtN z?dz>@P)&RH4}lad7lVm2FnKhNwNFTT>W1IS*fi(q1kr1@F+{oPSHl_5iAuVPhw&AR zg?d$AMRurSze=aW(jS!2(y|ha-V5crF@IXCW8_tbW5*R9LP0yxLNzXF1WE>7R)1*k zf-FhZrLND0Yj)ASrt8X1B}nIHAW_*J+q6=lp=d;AU1(4^L|8>ylY5_BKBPQzp>0ys z7G3|+YKALqH=6f)(IO7@VMK^6%Ap1wCB!xZN?J(z<*Zu$kWzx$I$XQkNh<gEjIS(= zWiX3YcE!TR?Sdle3)sDh@%C1m`n{wl(&ZI_X9G@1%KM@|heFj2y0gRbgp>mzKZ3%L zsm6wVOrl!;2C<gr<w0a(<|PhcNoO<73M~@ukU%&r#P^-!5?<p%L1@=$BAgAnrJiG} zuO>i9u?Z(9L8C@;GwqT1DPyx{LDquwA~NnQ7H#GMsHXP(hP#Q__i*^ktqd(g2e~~H z><w0bt-E33uWrz7-AE!&pjew&Uys<r(A~`#CF=fp_pGn}>KVO*D#n{9;GCToiM&Pp zpuh0B%H63V3H13W*3RdDY=S8UXjA5Um>-l>&oqO{({&Q?N3olr5*&h|zJ|@0D@lWo z_I4PML;Rf;H#S_9a>9|-3!u)<(8ug4>5sFo-7G?S91U~SJY9}6A`g^Sl^G+b*dKmY zsLsZsB3q9rxKk8I(muw2gol~XnI|3o(I%Y7vl7096{3-K#pYg{uDIp12lOme1?p`< zT^Z^h^F`;edD7TB?<?O8Zk(n}(8QyTC?&X$)Afp<a^@jSnXcW?S|~Mzl+mmx!^{9> zu+$(?qSG#^?WuhzCJKV8Vju`+!uf|f+K+wA*A2r~XI|!&#GK?s89aRP5A)fQS!l|e zh&|r}g%;3$5TtR>%#V>Ok}r9zc(;DNwCCUvVA!_(;Ns}9%>d{>>Mkt@56%)PeTULN z{b*{C7BwviGuI~z66l*5v}59`(zZ{k#K&liEp+U9pNy1{gJSg3X$_w8H2gg%l}yHu z<!%BScMvEYIXM&TiMr<Y`1YJ!p;sCM@vNSxPrm)k5ArLY;LhWS%<C7^^^~sjSPXOI zyuO*$)3#J!`pL)V)19lv4CX#lgTyUz?vtgGSACalq026AUAe40d;KG33@$ry;q;YT z>t^~xb1)n0S^n92r+)7Jdx7g0*Id!}*SuS%v6ke27$sdZXyDDBPNACke(AiZB(hwm zTDrb=-an9kY&+QDTy0h<FUSw<CDz|55S4063Ixid<M~`JG!8{rloQ!mPjiI&FHV?i zU^?o3y$T0^hDJ$)GL(&3qQKo*Ak^}SRamNXUZ1<uY+e?&AG50@*QqO^wu3%{Z+FdZ z*f8VMzRzO!^q?_#$BMg!^J3B=d)?0kMN%Uq>sPP>R5m*$ON)ZCvj-gJmp(59XbPG{ zz^uDqasL!#N$+vxnnWY7UafVYfnfJ)vCYK)ig%z;F(m_neiv0ZgJgRu1R5+lJVK>? zet3$YvMF4sBB(M1(zr3fu5f?D8CNQqMM{MCprh6<5!;Hq<04;#LK;3g$f(rbjoivE zcJ4Os*!M06-8_{PVxe^NGH>lVsXjqJ2>gZj^qoyMX`?1<CW~AUt+%I#plF$HWgOEx zyW3{X&vq{}Zlz2YO_M{km}0}4^6*B1c!pTCMJzb8_m)sps4Ho<#tt&_CQ&Nc(UpUD zCFQTJjgwZtdA6}prm$&T3t@=HLGz+d9xJnajFKdxw@ljU!%sEcI2j|Un57=`UCdsb zBq&k@@pX8$WZ46D*BCX^B<2K($|D|+8%cqUzwO)PYSOWR>pePmf=v3R98}yt8+CsU z2&Zw;<cYasX;vu|uLtPhg|e(YYCK|6>-wFQ#9B;hvMCd{g<YqU(znna$vjw;@qNyO zMML;=pmqUq`IRr$OIe)I_JJUthN$`<6`A2<MPicL89Y`O!$edR|2&t(J~dnujWD^b za)^<URnGXjlF=}i>?Wi{=I*E_?qSPd!5_%as=fOBtQTw1%<?5+{wH6K#j}zw_Xn&- z5}&;V#NxT`Ic_>!SSTN5L#Wb&Rll&K2$+TTyH(q{vG5;Isj=i>t9NwSS`g}t5$G3l z*@x3L9ch@BR&Ih_NlS++-Q`1e+8}6Yt22VialI8Bs-pe&R*X=d@(H(;#^&d0pF6!E z{6r~=#No2(^r5_x<Jx#Jt<HfjF_s!5b}HAT<}45vshB^#2S;b&Pu;Q~3k<31X6<Tk zHJiJLC_c_?Vjo3u-J=^ffU6zRLx-uo3|3qUb<plmEB(}~8^O%By%tlJ$y#T3mt3Br z@K$RU|8Hq@j=YP!@do%tX;4m%o&wH(=g1l4$YJnDrXf?@xkSmAM=hUj_!4uVCO15F zvLSis{M??38oth$CFiKU3N{uU<p)BgzC0LJ=OXlO?+R6~)v>-)I7gc@wV6%5fl{k% zbdBo0u1+2(sAnZ$Ig>0auSjp?u%{Fj7C;U2s~mJ?r+YN~26)3<6PdsCwp;~4eK*5j zcQo%t%Bp`#-(|Kf`_+yA(bL!rw%xWksz;X^;S-eZEnCmv>4pufx+y1M<FZk|0PrZE zXEdj}tKN>+YFr7r180xNK}=MG*(zA(9$gPlD`?vwtXLlOzkbF+<^8Ao<`jn<zwMWE zRdE6tq0`h^Tr)GZD5`hev3A-WM$DaBsz#HxT;T33{3cps>E0OE;NObSzaS9#4no83 zmPpNE8$A-sj3BhY;qC6xRja^N2f3rSDq2I4w^vu<*Lq#i2ioc^z#L<)uXSB3o#Da6 z=JzMg;P-u}cF2&-e>Ouvpei!YoXN>mju5zAJ{RY|>Hnx;_aM~r?0I&_xVYTh-`RB7 zK|&}3d*NoWxwkX46Ny^OjFrKB=v8bQUA_toG<AE*?EF$|jf{0_|A^2o^zY(}0p!~1 z+_Iryxb><PSZ`T<V3CbMS1`HEX#L<Yz4lm5^o=Ak{eh31CAEHchIgwqQ{gS+Y-7rL zjAoaCTMW_aK$_63PACv7rXFHOQ_+{Pk3M;&|0?RsJ^k~-i3?mLGe3MZy%woM=FJ6x zroen_dz@GAH$4CkX1hf@6s1<(X+8yf`oMobqXg{a!_ZH*z{0Bn^K8q{H)r7+DI<Y4 zhdC#|q*THX=A-m!%R3S(^YdZ)%iY@SwruU!`;hV$Bowikm5Cuot-AmXu!OnnzECyO z7)WfKz8h~M#^WtB4%vSx$%Wkz9C8OeA`VmEe+5?soV0IGLO2lggxob$nNQ}G=jVlQ z=AN-~>l0{}vE4ZX+Hveb1WJqS5$P*j5VUl3>8Y9ZYa7-=1*WOWz*;BjtvAd0x;=M| zkg|9AyDOW)Uxz@h99i};vp#m{lbiYuf?m~R{7ZC-J<5i8#4a~TUTJw!ke^*$Jgyq# zMEp<wK4EYm4nr1mui?aLgRHe7xuq&TL!{<3z(J>QrTRY|H*RocP?~U>;hrJcdsLRH zO+)^x`Ft9F+ZJ!;q3;~Aks*OrL_@u&*QWNO8F7hd+3}>R$Ejf&4WehF^U@M%X&JRg z4M{PiUrUQljvU-z68PeZPZjkU_uKkcseYv^PCY~u0vgvp>RkiB5jT@VM=B+z0ior| zFjb^l@=7;D<uYrDZ}XwK-e*s0DpQabKlr22QdW>{tkosz<x{?iL8BOS+JaOy$B=*+ z$fXiRbpnoLsjS(Y>>c&<HvMd34yvLvOz#_5o`Z#m{6wNjk%ck*lthj}bwQ{viY17A zelQkcL`PcoyT4u6g;8Uuea0@}$WyBl>h$Dr8`+Q&!$=`JwjQpsJ%1n7$jC#-pGZNf z$b7P0#w$Ac<K3yK0eIF2`!RmZmF#oY{iGy(?)0G;Jwq&Q(KmK`yOnw+UyNx%99v{7 zEmNvZLbqpWo<2~kEnW+Wpx<S&N^C;|io?xCU+K>ZB{W%}57#Jp4GOxOp7E^~*g&_H zGKplcV(-qWFd?(c@3CkZ%IN3+RPW8^Zg6hkW)oFHXIgU1EBGN@CyAiyV#zTZ1`KES z4V|}lGQx%6&;kEWuoL}VRl4Yw7rSs!*PY80(k92(NiTRW47t94W8m2s?Zty}$nx&* zQ?qU-;-lm-P-^<O8A52DVbpah*kH7^TWpBSoqphM`s`4J?@ziZdd2Zi&oA$<9QBT> z^WPDy%V>PV&CKSt$Te5VtuwoqG$^q%s1ZA3px>L<T!FEo3v(COCPeg<yE0kWGi}IC zAg3S}3S~^IuvG{YeMtE1wM^E1S4!Ez^;%(wIbSMWY{tVgk^iIQRD_{h)(idZpXZGk zf4@TQD-_w5jNL1y%l?(xUK!30{^|uPJShp;wtjQ5cbWgcjo%yL1dLQQSia+rC7E%v z6}g6dxy~almb+??EtJb`I4iN+rrf{=eSO|*4*jB&pwS6!RAp(Ue`ev6cD?_&q!?5B zUShFQ^^Oc5Wz{7^jSbe&MUC)%A35oh4TQ(7ZRx!%l~Zdn=u%mR;y|<pesQ3LOdV~; zDGP>X81+cMy??QO@pLdfes+_bvd^I-z3G1wykY+@&3vQ^H+!r9f;Tgy<aKb^)*9TB zll#s9I4>%Fq%dlsRlr9`u7bVr{<8?>yf52E$2kZDw5samkB(&Rou)VxAa_%>#n<E9 zNui9HiXS<mY)1lGM}RQgjAhxYM|1MWKen))`{S*#`qE1N!|Z)rTqyukmLGZOsMmdc z71~}ebA7>|IrJ{4!WBOEtC4aJ%I9BceWlF=0?yfh?VdUn5)29ln@Ey)MM+mi+!_Q% z5D068M*d5uSSSATB_r_p^ZDJ`A^x=E71@!>20{C(`bEW;XMx$q>7wqf0|&c7r}e{h ziG~+n!cOPo;&@~ODZNmWn^2ioxRtK@)u_{IZgJTv854&){@R8<RkCY@?k~4oCC!>8 z<EoJH>KMVTP`SlVhhnP7RR~u$YZfUh5aXWrJ=uKcuYNt#+-y!xH`yDw1OrAawlyru z<t=g+*hLrvfm<{+fPw`p)XPqi{Cug(rf=InCGqUwH5Qo?yW`rFto7StDdhd+>@t3K zR$I|3s^k#J&x5$i&9UC^P{o1eGCkOh8;(Dv`bMc)*vaBtBRi07TR|B6fp3?mEk2`m zdjK>Efry%EM#W9sICy9r+)+R6aNs4b%_l$YCw0;F<49)1R#K43XHX+@+ZTvR;vx?x zB@g$|cfLuTO=#8JVdo$DO~0Zh(zV@9i^S#DYLaZLLoIw`u~#GuHU^0+d|jT#PEY+^ zgC$5YI##p%bvzP}X2%Dzw>HaJQ+Y5p&*d(2KTC35aDigC#!YmNutu61wT)Pb=a-5! zxO;ie3Udg#brW1Dbj8a0S)Kt)&zs+a4+r-94;QC@3?5QX&BbEmHBK|pk58JD%*s4Z z7!Xc=(DcDGAAPA4#d&ow$NPzlDYCt9U?l?u!B*6i_hw|~)m3`+MYCQ{LbV2GaU0fk z)zMZDoSF5<B)>wp_ruW_T&Xk%i^p33uzl(1gWdA^7{2CQrapseV8zO2^$~67o&}$E zQR`kF0j3q>FJe%8NMZvDLg0xj3E1h0iSLbYy4r$mpF5(OXOn6Zu|4ruCSU|Y8N>yg z(Zi=e2*?c!Hy%sDs@RE!9raD?eKkt8hk`9jb>|v$O<TUe&`9tVrp5W3ijt+f?;Xx- zIDR%4=?r@8ZEl<zL(M&VJg?#Ky>vH9Mt$zIFt5N@FkfuRH7WXtvdS1PcJlvqZoSY% zqDRuhu`Lt?G3OQ)42nJb&0drAq}qB&XTMsvkaL>1v`44GJO#fTvqyi28vyRv->V3{ zT;KbxfBG%hATeT;4Y!cog7)Aq?rYx=PEEnpgk0F@?G4N(?geF!7F@ShwKP%!H{18S zi-N64iNANcpf+tL5b8k^qYTS?)08;X=rM?O0>O$0N|6!bpu}-9vd(IOem)LTe56td zVd$kGheIk2Tn^^yW~G}<vftj|Y<A>iumiDb7M%^^AN>yh^X2#VZy(;hdinIx?OWG? zF7tes-pFTYFsxy9v%9w1)OqAnY{*{Z=Ixz=w?MA=bbmjkY7w=2znR<}T50dC0AXl4 zWWj7+X1`$G9Vq5;2c$>XOU^R(nXU;2i^<$SV!p$C9^-8v(61Zt^DUnB@zs~NZyw)n zT|a-hUuT<q({->lvM_My%SjFCFW)?Sc;)!Ga>p_{!rBPMsSYBvSLw9Xv@w!EiCJor zqr1?t=oNk$MUZ8OafgMe@+J2ngcTEM6(D!F>BiUXSRCd*?{D9PlSy2sgXcU*Qm_IT zQ`MYjVX7ibtw`HzUYJ^^fCypjTMQ9ET!Z}cG*d3-a%Dlp$FFab7!PgnX-atm&?t5> z24!jj(107jUq7^L;(d_~tcw~BT`ll9R+O~?5!{JLI^aFX7!i!Gk5Ym;W=>hn5&%Rq zrQxHtTamWc1JwxkUv1(?0Bj<`F9ArnO6yck_+|u^Lt8YRqWYo@Cagio!6m@=`xAh{ zVwDE2D;XqpvaQV#<QWUzOd#AA^kNUZ9@KO&D@gA)s@Yb`$fH}Qnsr`_lp^^CSx@O( z1hkM7$bK79yKh3_Nu9bL1h3;*Aw2@G_+~(e8c*C=S2B!aX7=Z+i0^h19;Q^sk~0Sa zKnVn?YRwvxOF$44It7Mi7L{zj&Z@U(h`W6eFOquyW<v#?iJY{V*Bs&=5ji5W-*yD7 z5v812AKOPrgfgbMb}^RX!0Qp4Ic;Sr*zHu5CYc>D;_ZtvwW$#v-k249#7C!+h zIUxDD1lrmni0e+PBl&*jMQSYYqh8xZkua>IstJO<`g=#k386NC!>me(pl}5v(y<50 zo5e13=Zx1bK_#d8(!Z2b`R?MRQC|g~+r}X!7+L1W;cxIfAjFh!<~?$RQju36F&3Ka ziOySO`V#h;c=^(Jx2+JMz-hjehhvRtF>zeN>AS2<looGLpt#ydM*fEd*}J=2DE*C+ zmxy>2UtUZiipDmc=Gv~PsQw`TqnUuD2u+YjJnyY2TpOEG_63Bb+g4&U1%0jlPRLNJ zP2?yPAsKOM1R>VN1Y1@;xlA0amx8C5R`L=bRCWz8p#;c!0D2(#+>0AGSDWigZCN-h z8_3o%ydh;CQ&`(^BP6W!goyn}Qci;^aepDEmAu4<Yhp)fAtj#f5k$w^y|yyU-V2>E znxjaf0f^OHQ*xFUk#N<U0$83y;2uZP*RWCtcgL|MVX4+ftFYN@j^8yp!oTNTw~1C5 zF$7$XAsoI(Uvk1V(DX<hfX<_93w)4i5#0+KZ_IbtZiO*K{?I+ts2^o{y!_=V&#@fe zM8*)+#!rnwxye^1ldIaIWg*iil6_}``O5Bw2wMuuLD~-lA931#eNdDtc?F}JxtlP9 z%1jd?n!DesMJC3%)izUN^VyZt>%E<=w$2iVP8@u|d#^(tlTr0$2#BGdTVQ)ib;~?J zpq<l#t2Jc({V{++ueZc9Ve12HRf~XOuJBSbbFwDtGKUmqmo@`^usv~M1EMw^aB{S| zlqPY|yTJLh0TbpqQ3$)9+UL`*T96tct;N%)%}yhW;gyZElO4HBNfBh0DK};$&yxu{ zB_q9x<y3dg5@QGsIgY%G`xR{wk*zRu$ht_AAy75g5f?W6qc=o|{*eSl+t6CWVmyC# zq&z{SdwYD1A=}k+03PrtD!O}p?DTbrU`N9nxHgAo#zqmV*5VT>u$E86!y}tcKYb{I zPjjO~Tz;<sVa9%ctq^XD7T8lnFd=J=P$zC5sUA&{Jga23n%i{kt9JCkW@|TlU_XI` z-lw2!AWORE2F|}$=l~0w-c1OB;+=&ANu`N%{V24$8n-H@DhzDUAlL076=387Myh*y zQESK^&)gmK4ng`oMbCs5ZY8OkAO>evq^APSv-w(xPO#Cv(j`1PmsnMiTYx=mQz;zk zZ^IC*E3%ogB%lwsB5RGewMX}sP!}ce*B}#H@XMXf!HEqnUujWA9w3;Wc{Vcz=1Bf~ zkDD1Z@6dNecv5}ez<9sr=~Bw|%$^FqSq}j!=p<$5lTC+6Ibe^kF(k8i6Q~M`q`zku z>U%q096-Mmj!ggI*a=n-Djq*mmyphcl*Ky#;k=qHEt=MXvuVJhDyZcg3$S@YO#Q+P ziZ92K+yy8*SOLingwz5ln|L>Gz<BY={zY4dzRglg@YDr$^o^;F*S~+pKFU!{a9UI< ziR=lrhCEuc027Eq?IK@Ypw*%NkgJ}hfOPUPHPdw3>c$~wQe5o_L)H>R%flMUZ^W=@ z_8mGOokj?}7^JZqW}&eC<odGA18+++kY~e6%II0zs4bR?rWsLfgiiXbE@pM=L0UrW zuQQd_4rwYWg@sMuCIVsl&VnlCn7qpp4PXqixUZUJVQ#vn+p55ed040&R_>d1+j1;D zkC}pLunziKQPkuKS2d=R_6Cr|i~9vnB8+-3%Ogv#-WR$-q$~&B6M|h<!&TSii7rci zxUCk(0#DLdP}FLjt!O{-bCPOzOiAI*f(yBj5eofa6^@gC$w;tt^wr>uH)72-VF8o^ zZw?@@1sf<vjUov3X>}!W5_b<k2ypE{Xj;XrjCuO~dR-zUm8sXb$*A~?59#TE$#M~7 zsXar89Kb)yz5Ix2;mQY;oW+A38KSt!a<6E(-Hq<+>w}4BdWw>FSak)kU3xKthKK?? z)>!9E$gR@A;=^<o&0Us3&jYZiT1`v57^N8k(1Dy*b~L#i6JfkwAiMRsw}xQQA4&1S zp+*M@uWB3}m#i6-p+`r=5M^`trcL(<1`NN@QFJ7kZX>=RV4%#Y#Up1zPO;AeaR#a) z1hB-WxfyzJLT9uU9#T6Gc2g{JgfxNvT;NO3*kVG~cC<#D&Ra`F>EgbJ4M0RwEE7p< zU<B5^*2-17O&4p2|LVaLBrIP>i9llP2#kc>l3Jm(Y|+n<ZVb9%{nO@TcqB0S02?#n zys}x};OU8nIC?c885x0vQ`&k`33o0|Qi~3b&LwJ)Ud+&zo-iLVpARp(=s;-Gh0b02 z%!{Z>v)Q#2N==$>Nh2N%@>TNGzIb-;<Nc3(*Hq=payzx|uR(@QW({~wun{4Ma4s1@ zr=a+22Lo8#Voj3+7$$^+fO0o)-mx;LsqVp<2B_!*UVPbVLz$Y?ROO?sgIFd)dV^c( z%&HY+_T&N`LPT$D?M0T?D`i7$ZU)1!u7ioh+jwX1Rz{Gq0o*Dd$(5*qeOM#rT<UgP ztiN_*AMTpw$b>jpEu)2w3suj_Fq*d^kDYC$==W%$2y1iSX?5pqV#bd;hC9x@&ak}2 zd|ryFdfh&{u6Zwsk&dWp)46I$_V-@A>(q)zIYWnddR-Pt<hj_I`CZ~!?%Yo>?Fb8= z-U<u}W3UqpL|Dp^i8F}ME(ov*IGt8K%_7U&PWs`DAH_6bx|>|fQ77K`jyVMb4-OR_ z+8A57T);UEgO%uR7WMdM5g1L&<EsF<ZXq2BprUMXPi*4sqPfdb6V<%JaJLKHZL86E zt+HmZKy**<mNqT}kC%#$f!3CODnt!=Eh|Ex8Kj=EL#`r$O)nU)Rva<Dq;1b5M#!Z5 z{xq4wx(b0TsimdbAx$FcVb!*{1VC`v1HOF~9W^FdiP7$6y&(l3CM*k+$e2Ag9x^cc z4VYpLCKqP~5B*Y;XDdk*E!-!B<?Eyr;LYC3QgA7Na*w11wK{td_gj*pQYFWLz2zE? z;VBZ8lCoA}SP-b@AYb}8w37>1at)--;}Q{Tr88XXg)5KbM_?@gT7xu`nj;u2JYS8Q z4~p9!uN;J+wGQVmLAdVeIz2(%T)8@M$0J=u(1r|2Nwd|f6bpuG7<zG(aZU1f`aKU^ z>&3cG;HmALo#iV8UD9?7k?59=t(?IvRVW0zF9cuE>t{Budo+1%>NSD7Y)RwLD_c~Y z4^b#+Ik52X4GKG->`a59E@N{r{Jw?Yd3;@@FO#OfIVw12+31x#dqB2Ou%_z)>enD_ zX6u9|$P?KzdoKcDeYG(NUSB3Ov5HhRcMcp&@Sf=5xlRE}!Bk-0p;zxAZHPT&3Xjlr z2J7(ul_-5^JJ*Bc#~4Et<d1w8Xny!Hu=MKjMH-A(I}n6+%S;L`L4l?)00`)gN%mY= zF3_S!lUNeV^oSJ@Tp?i0on&I`1i%eZQ#-t%<$z775S*#vjFRXsr7I>{IySwiTxg4s zOgldtUpHB9#cXRw>lKu53&5@mxRql=4>ReN4EsUpP~b*Q5D5QyvZT*vPL~8<u0<MJ z)XQ~ua$H4JlP}konmm6n*U2C#OW@M}#Z~d$;Xxal#0SR2V6g)YwF8t@0)0KlZRQ|E z-4-tMIo%x23UcrL8rRum2o)yIQe<+`XwGad;h@1d8Fp3~5!ye$cNjhTE1IJ6l((7i z%UaWQFzCK+{(NU;f08nP1NWcy?ca|1(xS}7ZUF%Q>tTf;fPcQepTBF+Klb-x?l;#{ zAOwIBr+Nwi^sFQIIU`q;a=e0ln3GtZEV4=1TcAUwL!`Hw5oyc3Yk*~$8*KCDBseiM zwJ7Iq0G8lU{MFx*bh}7`@1N>s`<3<!?m9SIykgsn#v7c8<$}|4I|?=?b4{yiP{iGF z5_mqviwp7adeq~6(++R>FyaQ1JZdyVl2kRP#pb@bFo5p3#eg;!Ji5ly==~8&ked_> zzw<v(hV<%Q|1f0H%892333YM{A91QoKTfDwG}!ntYL6RI31oqc=pbtI6aajnr2{W( z6a1yumthNb;4g4DzA8oPXjg-BIl2loq$BBBeULSi+-6>;QC{u?zYz6HitP2|bWV6c z0|@)X48UA1FaQ96%?R~@8^c+5#D?l8Z3f#iC&UEjgxSe-qO8;JM62?R6Jy-`l~`5l zos<ZV7f!0)HaKabcJFj_xV;L62LS+V;Q$*ajZ8R&C@iP+aq^wYK@K~$hy3rf9MtR# z8}4Rj<ZSuQSn>|ObrRGacAG-2&M%%-Fa##41naBsp}obGt!)x<i3PZb1AWje-aKZC z&2jhgshDc1wM{%Qhz>r}NOru(jbEaRcfY(Xj9`)`SYKV;ThtHj+A1zN*up`lmR-to z+__Z64X0S!#DgJ+vy?J!Hl-hsCHBK7%`6sZEZE#~(ZiPf<5QChn!U}V=p8Hc>J{_( z=_>k~d=y=4Ig-Y_0=Gm~YLWM!)8>(LL9_GvPV#Hy3&y%y#Xe;4FL>_EZF)51Z}2P} z<yPU^no1%EkoVF#(i1Jib}@#@05PYHB>I*QwslxjYX=a?sh8GRr}F#Au%<Q=8F!*f zKDXvapb<J8-y^C)o2`u!`AJ#ym3y2xuMH1x1(8h$3okZ5hDKHr89I`K&Nd&g47~0k z@r*P(plMCT@AA@)*#Wz+*2;;|0&NVnp_<i|?Dzu5P|ry!d+(6Vrj&N)5ngm~7OL5g z*m$0Xw`D7-Y<Tts84&9s?CTS5O?r`uTj<PN78CoiWi-*P*~)t;NV~6fWFsri{#w)5 z-^z<?kMU*T`MwjA!_mpAAu%QWQ~~>Z9VbJM0MDwQ9@_CZW#{o|#o(O-`++mWfJ?<Q zH5~jsRU9vk4VB5d&1EFd_+hAR$}XTiQtvYM5YtcJJ>sQf*U<C09Xv<4dK4i6uM}t? zThmv~kYrwj>$5kI?8io=+h17;skfa36>Kf?Rj~4M{TL}ZZDRL|L0Pz?Y{UNr^F8~w z&_B`U<8#Q8qFHPXm&X?fMT{8336i22mg5Ccl2zRR)3Q69F83>VQ}gl%g3lMBNL)}T zDJm{0Ei12($rUQKMyu0TRvC;YGh(sY><*{PEu-NkMqJ_+_7wOhGng#wIOF_oRqXJe zN5jAc{-6J2HZo<#ocB3>Jz3#@E?km2|A}<iWzSyw-i~HIU(QcwArwgnjne|t>qDLG zK|&zZ+jFJhTM+Sugr4TM@QqiztuCyVR2Nmts}*liB}N-)Zx3MXP4ztitRc`I3<qF$ zGmJE2Y|V}B0i2_&ySc5i1BEm-r`p|&vO=xVs5aH=-DyD88StLfJq$ssJa0n3Ctjp$ z7+@7A*$~LNtQjHUA^iRTCN>$TIEMltKsX}&fk2jo0;=H*XsP8M*vpr?Hwtsy4bI^Q i0EB)kA^TASD$m<gBNRMD&N&0UT6Bh9ISk_jF<}*(NZ_gf literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Script-Regular.eot b/source/fonts/KaTeX_Script-Regular.eot new file mode 100644 index 0000000000000000000000000000000000000000..7870d7f319b6efba6bba9502db33fb4b73129403 GIT binary patch literal 25104 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 literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Script-Regular.ttf b/source/fonts/KaTeX_Script-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..da4d11308aeecb950b6a4f669ef1d4b05746f887 GIT binary patch literal 24864 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 literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Script-Regular.woff b/source/fonts/KaTeX_Script-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..d6ae79f998a341c1b0fc5a9292ca8403f734d23d GIT binary patch literal 13856 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 literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Script-Regular.woff2 b/source/fonts/KaTeX_Script-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..1b43deb45a854d69d134865608f7ddf128e654c3 GIT binary patch literal 12276 zcmV<QFALCjPew8T0RR91059|a4*&oF0AU~i056vS0RR9100000000000000000000 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 OR#4h-t1!gio8|!SYu)4k literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Size1-Regular.eot b/source/fonts/KaTeX_Size1-Regular.eot new file mode 100644 index 0000000000000000000000000000000000000000..29950f95ff6a625cfe0435b01d5fbe6b6270c938 GIT binary patch literal 13408 zcmdUW3tU{+dFMIjK4#|5`w3zY++kpN%mbJK1|ft51L$obA=x0=G6ReRHUa|Z<+wkq zk(#(9j$=F7dSma#mN)&iUH_bmypbKRld4_kv9^Dkq}#YoHu5&vY?HRBlk7H|q_&3r zpL=Hz$dc?h`L(+<y7PVK-0ys^^PTTJI2vgoWFbWeC5){7Q1S`NYjzF%gpf1;@MGdC zzJHJql@Q_Z#Y>+<>uWy&vXf-Vev%_Y<W4e3Cdoa(n?dFv`+yxK$H^2Z=1|i`Zbi); znFrMjnFiZtlEAYO*aE&sKzAH)hD?BB8kkDz$O)Y)Me4yJasz4ccgO-U#p5Jrh(Koh z`}gl2e{=7b2uTg0wtUZEV=^;33<`P*<&m*t+1cRkr#?>z`*(QC#!f7#sK>|kI(}?N zW{)2GmhZp)lo0U}A=W=Qnw_8JFTrmB(0p|2^pVm3b?SSBxOWj!`uapJJ1%{=vl8## z#?v-|3i%QC9mwN8te!ZwaOy<B@>!HQ|5vAG#<Cxse&`}t{s85PW7$))<QwFF<2~0` zoz5Q11;4t-Pe?;GA*KgsXXY3F<CmX5M@aL30L|mGbGg~?e`8w*+H?B*blYKF%jYg# zywlnFb5be%2=(Nf&)xe}5ng#Ue_kpT_MvQE2?w+h_T|r$gW|`pyt;fsD%CmhCdE%m zuSt==Ad+6i1Ia~B;#Y;Y`G>J{^b`CoTVyYy{4oR4zb4IeP1v0w<R>oj<A30d_-Eiq z-#FPq)SoO1>T)|dDD0z$RYD#-Ea<QKj|%DkM3Nk(yYcf+fG?9r@q}3qNz*6E%LN!< zTgfDUI1P&}|B}VfmRxxi&$k4HQuY{`<&U6{4f>;zw17ucNjtnX1O5-8%|qy+w2(sm z$HAZD-D@Azy^JSNgzPce4m^uzw|E<AFFwU~GzOjVka2DWqSJWFxpsKtLk-8uiAa74 z*a4eGQik7p(n#(gA0)p+o?u^L-xUNk5PB%|Na&lP|61j)Dys@t)l?;_{!`c*{zmQJ zHn0Y<LH^0|@-levVbn+tt!m3wwRINSMyoD`&1n0h2BNpUg2w-2`Mb-1wfyw*gUcUZ zp1QL2O7e>RzrXdy@4j*7jm#T8Z<sDGU;f4A|8x0gmq#v_e|PBh?$@HPHM~~uGGYXR z-`|JI@I#@g9x-d81~2fk7!slpg=q1fKPI!~rnCyN-t_&=UX}*XafQ!11KNt^_W<pV zt3(=!sTw&j)HkfEJD(?xy*o8|@ZgZv64dI3M~<kA2Zl6Oll_7j!*^^fJQ@szG%~D_ zOt|*~Jd_#fiEA{bsUt_?8jGpps&;8W6C(#N)KMkVH`cfB&`>BG3N8+*+Q7h2NZT?T zRJC@FwGR)gO9oMPT&qJ>p`>a}{CyLryfiSRLW#w!swo3QBdAgNJB4Fy9BUg1jtmbE z2Q?ZU9u8|{U??{{9M^=H+NWw_O%@7CnSmiq3ioJoxCiPFYjh;8iLo&BQpcC1(H@n* zF@*D9jg0h-X+lE?^%-?hT?Fr?CaDHy?Hw8!2xj*U4~2*EcFW)pUIn>P1<7$uifN`y z^a4_y?iv}za8DR64)<g=HhM&(W00>&4ROsBQ@N7X%-HiH83hT{+%huENk)2gCC#x5 zCM(JG^)!T5oNbA%b-rS7p;4%ifyE<g-(on+J3{vq336|0Y7j~mwbX=~aJJVFVZA|f zts1S+c*V5Ujchz-!aWzPiqJO{3Wh_&4WYPZk1a9Qr;TTO<C-G|15{PBWp;48fP{O7 zH9IfuL&=U(TyuhrOLvJ14~#)=&5;>V7e`dh0jI?^S8V70p(Sy=ceq-!=fbDrnme|0 z@6gUcqcRvmy;raI#FmINb6{x6>C9*}+oL(7JV+6`JxezJW5<t11Lz5%W?*QEM=qSz zvxx5HVjDtXG%Mmk<2`SJ*ynGDVaZnLzjXwixTdRa(1A;Yc*AfpqN(cwrBsgwZ;UJv z*0+C1bB24=KFx}tRM2lDJ?aR=f8OPySkUzJERHOB<fwK$8mxkwe6Y<Mjcfkc66G)e zKXX_TTM{@djV*~Bu8S>69G1nFWDbL|B@>6`u_ZHy>tjn64(nrTLZf%YwFVveKwOLJ z$Xr~jh!M>meIGhjLdOd5R-q$@A?V0q6?Eh<3>`VFhK?N8Kt~QE(2>Jh=*VFmbmTA= zQ#<t`5Rbt%t`RkZ{u$x@nFZ8hJl+y9Egse47)gx?;;o3b>kg%Gwmr<#*i9)AN^z}e zrF&>VYiwAOsK0LrX^3}1^J>q$^K~+&w(9z(Ku7!DIiis$uB#reCjl(4@agRew=X5B z9~QO1ekgq1CL;*!Y<pa5jU`Gt<67Ihks=7kK%PdIkU))^P`C2I3s-JmT-+Moiexc_ zw2rih5#2_q-v{~a$T9&85d70gG)pF$TTFyiwQ~`?He7wJCJY{$2%ex)wGlqvx9lBy zmZ^doe3nIovf&<{1I@^$kOzt3evCf!=GvizaZjU0vS*o*@vtUjvg1fYERzia9~s8j zy|zsjDj_k4`?KxAFeLQDE&yE$_+3W`6yeEIL;`^CB?J^w`!$+?V-}5TbS3bMnTBV% ztFjOg9oz>hq)U;455k>r%|^XiGh=|OYJYeu7sh+5Q+F9Rpx{xme<-1LVs7Lb7b?N* zs>|gXl(ys5%Is@&)H{P~BwXkj=or^F6*R~cyJmz>&)1q*?8>fKSWR%R^&>HN4kwlp z)Q17Md8Hb?d9`}WO0`a1Y`TV~JEpZqi*MF2?TKj{qKk+j9xRI(mhTXZZb@hf$j|8R z;sIFnE)T9SMnwXH#L%%9Ndq~2B~pv_zI!Ncy<T9vpXlR$<N2jC+#U?A>hI8SLB~Gs zjG|Nfx&0yTd9Gr?jun%)!eqZOI5FE}9C{O43&!HM8`N({&ZR!D)(V;(F)a<SlY6ZX zepUN1trh*WE5^f7+X=Vsj$J^W0dflv%8@;>3skQe0HW9I<urYGwU5(qWRTNvWIw0j z$N^5%4dhl%!;#xK4M&DJ4M&DKO$Nw8PQ#HyoQ5N}a~h7^!D;$|9Og6}xs%gyWQ5aj zB+F@ffQ)h)j*M{{j*N2}j^tum$BLVe@PgKb>Z3Zg8Q6p#PpIC4!emU_xI%pwFX+^F z>lmk=(lJhYET(m?kWTZ0PCBDwoOD*lIOzvs+NKrKIbP67=XH#eF6bC1Jsx}3BC_J* zsVAzLbDB^+aH=@v#0kM-{A>HLP@x}3W;T}Jvr9zo!NQ`!faW#u3z$GGdQAZnNbgcL zy?-wjmG=)V3FEy>5ng)1e1=eQ%l%_mS%Cy==iwz{Yj~b6|DGm3fGMJPNgD43vo)Up zF}|HRKDnPfPA-wZq`T;!<NH&VWFzc6dx8Bxa0s^w|5o^}SSFqjpBDd8DwEF11Ezb; zJ?4ANFIvo&{gxw^Q<g=`<Cdo_uPdT5r~IAujE&jaY&&d+ZBtk@Cn5D~%#V$iiI_hx zi#S4Ril*EtcWufYPX4R$WRm%>{C$!l^2ww5r|2KzWWh`1XI%nqil$pU=~Te)Gs$jO z35Vebd-Q`JD3=vYQ{?gweDJL=)8?!!h}N&<Kb-&luUSPw&QhErQ4$8PX7KWZmz(pd z@i9}lD$?4PZgab8BegAU8)?8po9~&k+s#aQ<{5>V?RK#IYW^Ep(Ii=4qNnKTm#mUm z$mYKeD=10lpJEDlI>FOI!IQS7k^#R=OtQ|I(C?Y87CX%!5@kCe{jAV$vn#?|XDl3u z=qK_r^jZWD6L?Sp9$t6KAI9_YrAJ}E__?~bo~*k@mcqC!AB5CKNNof{O9F%`5Fv~C zLzDtBiS)Di7ZkhABAyY<PMhVeGf)|P0{N%NYXx}%*V)?&$KwfHy7Z{fQ1{l}I`K}> zO+v5Bpc{Z*jk;~{7TgqRq%Exg{HaaQ))x2=-xmI~wzTR6crw|R+(=8%Lk?<^d54)~ zCoKu^uisZv0n|?~%XUZ2XtmQ!sYtzDm5NOiZAxXA7e#7z)=qmUW1`F)vN^WPDp9#I zvdiW?ROOMVWZe}r=l@u?u1|PEPnOo+g@c&JkV6z@n_ZGbM+hog56F(%((@I*<_ek0 z4iB>>${kNUCf8L))`_y32$su_J>e)%*qCRPy|=*LI^8enB=>7cppyFhTy0%x-5_p` z&+qedt4uOth+D6J4Qw;zj)IR`xQ|#E$h0I$_7!7oJ7Q*YY=_M-w0g9<T&9A*tHLK! zDtW37Ic>LBb1Qv^MUzZT!d?nP-J$b_p_T1+!R-<3?Uh9%pA2~t>#efG4tMz~eCy;- zKPHz46RIp$HW_9nD=8D0o1d&voMF|n7WN~Ic==ho9!phXn5&ygchSu>AeNxpY9rOO zM9%+;TFlhz*&cd8paI!}0W0N~*}pmAaWSeWb)H+;ABY~iM1?scz9>7u8rWZuTJZMk ze$>O0J2I8r%=_JkNYF!<yC_`cgd`qC>FzGORNcI>MzU<oC^l=*?&#@s2iDbXtd<m` z#=$<5qH;-@NLwthRR}0bN-}v?m31Aiyvk~c`90W||NCFtzAN8i2bS}z?c-yfTla4E z<*mOZ0~y7+6|=B|g&ZmwIW&YE%D<FGFGShFD}Trzqfc<g%%W_F_|PX-eJrPWSo`^4 zc8A@3Xky^fZIWr%hb7zSZhO?ed(<YKWqT~v6HP28*6gt5&GeVH9W`PMXPG>YtmbLs zJZm63-L{!xRPZisq^<A?Z7;AIDDobmzs#EpjP6}wZ|J!JdVZ7Lh7(HUXhToku~0Rk zvos+yB5L$xqASkRi=K1n@0dk#;4}4=cA;MB?^bBkrp6_yyw(=QDV0($*emNl!?wCi zmZuJtTBRs;OI5Arix=sqY*pQ|xgl!H-%Y2?Z6V1`qms4s5Vvsyq0nbY*QdN_Bdo$u z-%OFBOEBoWXj;z$PO1-in9cJ<33_2g0jhNO7c>}HrDb2{$8;)xcTqn5)WwVD)~cfX zr&g;PYSVq5UY3PZ>`hV)|5S+ZxfCc#`9rNKu1?79T~&gY!mS~H82%AFwq1_=pF8?p zLjD+C!39^pL+EzY)teqmiFI{il+SB>@&m;})D%TETNgC?rYO4xvR&88UM&rZtS)ll zZ~rM5&IQsgE|Ahkt`=6LuLy(|dxX&y@szZ~?jOSLG-MmOxvid-RIrjTW*`WQgsS`j zQW7vxUn*Hh#VJ@WsXVplIjzM?Yg;x6^pEKu)hi_m^Z5eV&FLc*`Jde{&|Zpp^ON7Y z?7VC9>;}bN=iK1P59NmhS)k9~e)|hwpzOzNI@q;drX9EWye3A4e1=)%{9a649`&Fr z6#bJ1OjRa9WZyY<jFM%tY;_@iX7cBSw=sv7^LRG#F_J`ZkTlO2ekwD>ak!C2!W`D7 zsfivrN@<>%Z0M=K?RY#xO)eYwxjZ3Sw(D1KzDdQ9V)e*ZzHmDK;>SRK<!zgztZbtm z8xJl2jJ(L^NhxH(!I;<Ekd|D0B~shk$s(O%TPJOOSX3oS1rJt0l#M%`?8+0&=~OJC zXu2cQmFY-FL;9gMBj86rt@CTfI!!GzQLNLh%QO9Mg5EHMV#>O)Q02zD@O9RIVWUC~ z>4R;XD_~myt1LbfJE>34yM;bCCgEgTssei}V_xR-8D`;dmA()$CT!g&2#mpo@=|IR z1*_;P@!CsmZl}XlCa&AIu7WwG#;$VxwIDj(ftU~LHHXWm*h|(omsM=5usyuqS7D<9 z#U#jV7DuG%>tFiNEB;S3x-gM%N(9P{*NjSLTg&>~hhIGVbj#LwSE;?r9}J+s7`I9I zqHfbi;osjI-&_Iz{&wuD{ulQSJz4ObRdfeDjvKgE6r8S-->z#5et*B+f*BS4g1=_+ zSo<jXCQ+Vy<xhCu2>);O&Hv{;TnLYU{*m{agvW2v)`%-ThaJJ+xIcopI(zT@#7NT( z;tCrGV`9_y6J2aG?P7Y4yFqTlip$4Wp!!D3!JO2AeM2$Ld0UYEWUK`INS1uNn{L7C z%#ZijnI$nhUYiG9PC*jwG*e<WmkmlzH+Ex+nO;9HdKGiYDne$JZBC_-BY%#+iU=&W zsi}rC>8o+oOquKwWLKp1+UyyBsh$ZEt=e8%6)GJJF;S$7w6jaPem;#obc9(z8>%YO zI&KSZj`|Aem9;{yZFfte*DH(Vy}{^Kmne(DZ4dY*lVb;8*QJ+Df(7e|3d|=KzUMA6 z_Hf3`9Pm_9zDv=!yA0<Pa@JddjIxDU*9GkC{J;P!^#G}!d?5dKvi(=<+_GR6J}LM; zVm|f5zfnYYsYf_Mo9IJtUp9GG%j0XOb$q|&ZP7Okw9Ui&m7f{-uqR?hkJUzm1gnjt zOFRLGK-X=$yS>51>;X?H8yGmx9Daw@B-%bzGgyx$$4j14ulV+No}tMn?}-VXQn#r5 z%@6Y_(QTHLa{Bb-PmeRDxPCKiPCy3-Umuj{2D)8*1>2V5`V_V?Ze!8V!dm&#N}oBM zRQRYfSZQI@_S}7vg<5Rpczm?~R)sQ4WrdY7NBe=3nXV1Ht&DzK#X6~zZZV&I1}7fW zTDEQYv^jq%|B}33oubd&ZQs{%pt3yIZO?ykwQu6ktIAlnq_A0ad-X#CzMR7Z?rGKi z#Wmw!{T!k;0^QsC71w$zreWuq!yfO+1MLpR?B!fh<<^~Jb>p?;JGqhq`+*Xa@?Xq< z$v%9KogL^Hv~yJ|*UR~r@|R5a4DT#el+vBU_n7Dw+9^8_Bm7+E&#-orpx3H%nU{a@ zb>mRxG-z;^LhS{bt7j?hz%T0bgB0;2H{iohcj|OLZ=L36JMZL!y;QjMf7bmX|BCn# zoXFs?xE;<K)AxJ@efWM4+bd(2M@cq+UOz|Tdptd+X|lv;#m?QY_p?G<%FxgBxR>2` z=FEM}ZI{`H?z`_pShVi*nDXDt|24kfGkI(#8m1LyT0z4m+&G|QH~5}_jhwH(&-1pW zkZH=OPr=C!#z;#LgM2sh+9ZRaY<KG-ge@LwHRUhozi-ZeKY!U|^O$HQRq?Il*DkQ8 z7b`FZE3wP!MLz85Ojdg-@}a(;PU^j{Cp3P51Tj1x>T7x0QjAKItS3Fb@z#U5hL0*f za;qYAVfYrOIbL=AQftIUt0E6)hek#ZWFLuCRYe|Q&;8Y7mS~{vBbPjsx)0v*fLfo9 zo%r{DIq!>BRL7&eQT9rhntTu5wdb(4c6@*K;Yc_P7W>CXZ_PfOKk!FC@KCAbD-S8X z%I}X&mde(OrF+$SHC7+4YG@#cn5(umkQTBD_BprMx;MAAHYVyrUMju2ktKT0<~!+- zHxjOOhxkww+#w`+>>y}5<c7sJHS$gL%EZA>1weJoW|rsz4SaInEBTL6$M%*_4ANI= z{$tW7|MSfZ{pt(YxE{MG(OH2LUp&_F_G@%OI(=x%fI_DwuyXTb&^7kPanEQ6uJFO$ z!Cje6$@gln#PbZS<$LSe2yIJ8YWYCt{fm7YU+4$;X1fhbd0GoPKH2H1;if*IeY~4< zdmLxaojdC|n6Ef@_Ut)JAJUS&k3DJ$Z>}nq9r=Ge*SQTe^S&nE{6WXf{9>n)yHnw; zl+2Y$&e}eF9I<eGnEu>KIn!dzLjK9K8@HWPdhN(cy*v?P-Cvk{;<&_U{`}5#m9ek- zb#k7!C7m)38u>_EPgBOkAH@WZT@Fs3Ya^QgY9sG4IX+c+N-~*c&pJgqEtdwAEomy0 zxEv({O>a>Gzh>&px0Sg!bSYLz7Q9N=2GJHQwaObh1c%q_5IQ!<R^*hT4}!=km@#mU zA)7+b8u?t`8wb|W5Kr#>V9hO9to|!Ar6$G%MRD=TrU8>q$i%)Kl+1ovctUo_N`;)? zmfuF7r_amlfj9EFWc&v=<i^*YlQp-d{3$%+#^=4$8CS{1b$*2$%z1$g7Zjj;)-XQ1 z$fpZ9#T~Ha0?vqu1`D`A!u0L}E)p+&u7FFVl5r35k4(I5uz=fXLi}<8caSo<p@6%H zRlcKuyRlL^4O^+mxA2eRF>uT;<c9^E5eKyvaDnvGZ~+%dgg#inCDKJ-Dc~}RuxJ6d zv)kFx0`4F!(mxh(7YWFH1>8*>@+8UN>g_B!jVrp7xVSq}xPUu`b2ODCNfW*sNL<I7 zfvd=mIsG#4QT;OSAQ?lu9Plyx#_)c-jwgunuAG~ZZ&h6Goxl}felfTkJhJGq961Jk zNM>gC^xWjpi3PQ8tX@qvHEoC|o0^-{-rW4;(P?#XY%(`JmW!#|r^gb?wZzRW>duMm zwAwwE9nT#Dw;SA8-kIH>8@h9F@}3<2@N~`H<$bxM$EUJ5D(}~CE-&bC4o=EJ*(7c; zb9eBon%C$3j{C{|Gt&$GGjm6CYBJHJcBrdl$5&*%M_$)$`y1Z0zBM;DKRGk4HYb`l zstXH8vd0%@CMKuh{}auLRQ-*7_zpX-tJ|*^W;~GIYoPIquASJZ@oxg5lSK$mkh=g+ zp*(}YK8joD^}lgIu9b6lA#Ag2f_AmM7$ly=;NaS*dTh-ja^`TiJ%=DySE5QKw?Nlp zdQ@G%_xWH_aNnNake^@EauD_%frOLbFsE}cD5gNk2jn#94Qa=L^Px3|_FN+#!-E*C zy8!nf0dU&YI_+A+f%nJtql@cyRkO8nRcLhr&!qmp0Y>r5rC#+(R+rdK_5$)=>j19_ zzy;{jfy>K{(0&XWPolg4Jb{PvDtfsQn)kzk8>Ncab#sMU*Lm{f$;7ej!o*$KQwa>n zuKIV&AB8q|Bc)`GjAFElDJLfvCe(eo`P|%z+_=hzxOxjN?ynx)2}RjIF*$F%9Gp3_ za56iWQ&BNBIhLEAN3-M8<GDF?VIrpvZr`Qunaxcb#JdcFn7V3cCJbhUwrci7c5*5^ zI+as(O|oi#_g*!-(4kB$EX;N^HqMXDP0lXNC*~)oxXO)t`r)tl<>Z?&ynfu0Rhi(% z+0~f)30Xdiq<Xy%{_hHAO@>*^N^Hb~!MvGlA&1Eb?uoxnzKw%j{GF5HPp{NWE#%Ww zA^)0umRhNeJWlPDuSZ?fO+D00ebi3_Sdy30b+n8IX*pew%@g0~glLuN`1E8`Q+JaN zQ%y<B!sOI=Zfxe*D6hfP(`L%f&CQ%VK5Nn8_{_;^#lS|Vj?dbPD6iLBB%5_!$z(ER zl#{Imm?^;C0_-zjra+%*E|il6XtYl?wd>_n(}n`<F2EiG_8RTeeFj~+&!FpWGU~gV z48Gk>2H)<c7QJ0}QyYhU{r$Q=fVw__{qQ@*|0dA?63x5j)lKL1ZNyi8mE6P2_`fBe F`M=?@nBxEd literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Size1-Regular.ttf b/source/fonts/KaTeX_Size1-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..194466a655d38d8c0c112b39e7b04c5182670c6d GIT binary patch literal 13172 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 Nle>8x|F`6G{~Lv@cWD3s literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Size1-Regular.woff b/source/fonts/KaTeX_Size1-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..237f271edd1ca85a9cb78d12c142f22deec6788e GIT binary patch literal 6980 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 IHX(BV52p3?3IG5A literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Size1-Regular.woff2 b/source/fonts/KaTeX_Size1-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..39b6f8f746c39c8c2faa9188de664475443d6b91 GIT binary patch literal 5820 zcmV;t7DMTGPew8T0RR9102aIe4*&oF05fy|02W{X0RR9100000000000000000000 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 GdM5yznhJIR literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Size2-Regular.eot b/source/fonts/KaTeX_Size2-Regular.eot new file mode 100644 index 0000000000000000000000000000000000000000..b8b0536f96767e3e4235d7795f5bb5bb6b7d03f6 GIT binary patch literal 12648 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 XEcch!efFCS{`t%C-3;Q6{ips13`mwM literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Size2-Regular.ttf b/source/fonts/KaTeX_Size2-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..b41b66a638ff64d009950af0a9463561ba552290 GIT binary patch literal 12412 zcmdT~3s_uNoj>P3=lx(_zyNcHfq^i02ABbcBoqR}qj@zDk`&UWoe7YHga85w>Dt)X z+UlZhtdIJrZ|h_CtL`NaTiv?))z#KdcYSNsTC1zpx;|=Gcl*c;`#X0A3T>L!_S^My z;NJiLobx~D|2+S5&b^mVLWrH5B0QPy?cKF~^!Ee*LP$dzwPia7>*GE9ulgJz^aRT3 zk)xUEg&+9dKnRD6{%GX*oPv7%9IV}PVEW+E@40{c1R+A25c9hZW@e{ZBgPv7G#s3` z?tty_uTG)rVM4s0JT#UWm0r_Uj<yT9S`MMYcs;!lV>h8(b?E5aiIZRDB$OXQ`R<9S zk<8(VX$Aekp9~$%oR}sLl1I?a##bgYN5?8294sNE2JQ0c>8aVd&rR>GCZygCny%@Y zvFV?G^YRT)_$koeK$z~hg8R1Jf33ak&m_SA8a3ow_gw$cWq84L;Un^WVn50T!m(QX z&`0dQ@DZ|CYQ5mfT`%9KkCboA-y?cWgnXWedIjt0AoI8@ur~W~d<T6iYvmTW`%r#M z9@0liBVFdB6P_aE4-WF%-{}S1`VaJsl1)VU!xFD7wUWJJKYxuv$mwhNWeV`1<QWoY zWx5@=XTW7QIfpC6M@TEI`6yr#(81kF=Gnz)_+KwQo43FP7hF;-<VY*K#Jflm^;4Wm zl0q9vO06WR<5!}*>f#*aQCyA{I6|hm5wb^o3}Y0oWqPVYHe6(sNr~voUuC-82>C8* zU}aK91adE69dr_i3HNoRp6ny9B`3*;xUX;z^L(YVva~W*`K6G#=J7hNPN<Xqu(Y&< zJ_@M??NzI2xk@`|Bb8qa8ESrAM|9dOi2q~h;iVre-Mw^r>9(bbY+p8>wLZfA<e8uR z<|o5H@jSHt`=Rewen05Q`xFDeydPz8TOidvy2h($K;yE@gnX2s$IJf72ID1ZO~ic3 z_DeOooW!%-j+w)LmOOY_cdP9=GL5K;Ms^SN3@ggkdx>pet0oQZ9nzZoTJ3Q9fU>ZA zNaLzApEY25jf{l$`-4G^3~MA6>OKPtrP5tdjjEcGJ`mM7RT)*ZFZOFfc<-57YD)Et z^z6K9C>RR*7lstAzkevGZ5s9~S}Vg^hliELJW*y;t3_3zq-YJSy@64Fv42Q`5DOVa zGxZOpQKPUn6T?~<){^$8hlhv#8jTDOhcwbZG&VdO)p%9uQ8b}C1A)X;|Bxnzx-==& z1@VV9nvQCM8iHKP=%Tp4OJOZ}=IpMKbkB&!*9B3ZQWlg2jJ?<(Rzt0Up>)4LvvYVT zG>q0wgF|TYGo=cgqnfB{aw>8LsYo}Cgkq>G1QUn4G8(u4fJR5aUlZ%1nye~JNONlB zUV-cf3B=r#9%dxzZe2)&dPX*rR8Lo3aK+e0b*=GD`B7*DBBY>kTIpE`Wtby$OA$Y_ zrl$BI<g%0+UmePH=UJFvq`OvyUg*4{+Uiag7Biu)GiDRtGZgfPg2Q#esAg3cIj%<= z&2&dKn+gRKMYE)~Fuj0;x`s6?EA2$dic(awV;F~S5(O3*f!LZYl~xwgie`h+qMAe9 zx@%}r80{Xe(yU{l6H(2nZXFofI+(BY2T||R>x<MyVo&WJTD03!8qIWR_6Q47gl^ZO zh25;UY19i(@YVf8i!5?stgZ#Pm$9u2hR|&p_vhPL7sNhm9fl@-kiRbtC$4eTi#TwR z5LXB$Ml`jbp_J;;;8MvV;d*urY4%W;(xaIXlqUEs-KC_#{=CCMiH&r1Eu<HVq=<Gb z;;)36+|bPxiE18okuvCoof-70i#&tH>Y~74iMl8<SgI~c4EohYnZYu3(ZFE2x@cr@ zovOq%x-Y8L>BwuMT0}=?qFRMYG;8D)$QXc(6&PEAj0^@LBZHNYk--pTWUvY{GFS~6 z84N>425TTAgSC*6K~+`S^eGTkVH!tTNx?s9=FbeErm}d8saiCmMKP1=5yX9nwu?@s zP^LA+(%2;_5K2+4VZ}YvtJT*niqz9HgfzsQ(74(%FKmvhO0zC+0(7+Jg)<t7;-ccQ zdg48&C*<z-Q0roxdZ1Ag^oPI~?UF`dXIi6Lvl{cYMYWcfB1I66fIJD85O1{-Q~KEC zg(){LEcAu?kSvCf){z!5qgyETxWT^_S;mVAf`6SvGo~VA3$c)*v@Kw)_0KgcvHTdC zfH6U(XlXXzHw_G(<rH4=pXI`Q>2Mdzfd*t#@B_zCFJ>RSxppdH-qT1v*>kD%Xh`Ez znNg%6E|u{EPY+}6KEF=}A|Ww{dNZy55IFQgF94kj#=8g;2*Q%3fCK>BiwG#B_UB20 z5i{sqtqXxWRvMP&p5ujx*uZR{fV&tj*dWvf(`?kMH3KHNqV$IP7&GRrHr-@Qfr3TJ zuA!LHhP9DNT&Tog&zW4RMrkveR#xA<qh1(X=}^HlkTI%VR*)dI?3y%No}aJcvMbxw zkP>57>qTO28;&i;s2dZoW2GA2e6D)aO0`bC+;t62r>eC^mRr^g+NEmiBMXQj7Ay;x zmM>rox5Ts<_@{Jpu>f4QE(@*@W<?B>Brjt(k_K}4N~A99`_iG<cd@{DCDF(1#_~&B zsMQ}_<?rBdLB<|tjAf(tGW~<h@=U~n9xE#ML1j;Va$>c|JaomhCd|dlU!;CBaxQhd zv}Vw3QMDw%R%W#x*j4GpvbJoeZ7K^#Z7a;WT|GlcH;^lUP=@SK&rrRlABbKvz-W5V zw3E>=WRTG?WEZ1h$Zkf{31knWVaSz?h9N_Yh9Sd@CIw_KqhZKZjD{gsGa82MV>G=$ zu3<C`xt7r|B+Y0Tl3_GmK=v~lhKw*8hKw>AhK#A&h7~g(U<Ium)dzK~1K1%wo>09B zg>hBexI%rH6?Ez&I>x9cbc~T6RkgMi(n(g(NvCv-kxuIvBYlmkUA96x!wNd-td23# zIUQr9$JDb%fm_}@bwxD8n8sK2pIBaUqJ&^G{@_k*ROoHU%=zv2^dgbEu(7DiL&F;Q zSu7z&y{3Tiq<gW7zG(oP$~O%y@}u30VOIK_;S{05rZ<gXX9W`Morf2RrS4w3bh9Sh ziY20ZQ5@~o*P~T8FUkLHA*aZP$T{+T@*6rzAEFO&0=J7h#eI{v@Z0z^{I7*Aq9m0` z-<Az>oBS5}5&21jWGFVMhHDJB871Q#rZ&^J%@yXjx!1f4o8&lnJji))(2|Mayd+S< zHAE85gtI2$48`vljmJ4p_CMnkkxtHK=eb7VbvScMXDu9Uh)}m2iqV>Ib5pV?neckt zvLs8q<Z=6od|s|mDm(D*bxlpXzEdVyE0j+K4TkWqtl3k%bmg;m{PUwf{X9*amw3Sz zto=>y*6qiRZ_n*~3I`)fLfLuxA@HdHA1mYIYHHa?E2xig;N(zcxVa_S;%aGbs^MzF zHQ|uKYAtZG+GJ|^RoGw%eoCpZ2r~wO@%q^#pU?f<dBH$!Pti|rKYnaGo&C)^Md#HD zot^|QD|ktS@q#ua*}}9TvUG))yOrmi-s~*TgVJl3e!!bJuj%Pp-UQ20@+f3|0R3h3 zr+R;9!V|*v=ws(#FIi4JeQg4C$pRl6=!{giU8u4qOlra{iMY>8xF>xMu$ZOPZnj7~ zcWd@^u}P4AB%19e{^@l(FGqHs{7-=w&&F^y!%4Utk3Duy*qV6i>4fxQ@R|p&5a@P* zSGCRyHiMyJw4Q^x0GnXHWJ?Fv#0<%<Bn<5HxZyrovU6?^0K4q4xzEimPk?#>E2xJH zNmi@nY(T)KniJ*9ag!jJ#w%r!qg0@tt0Nl?W}Czt!ht?Js(9)<l8{W6J1c-v&fXUY z8~E%=N$8k!)_vnibFqDQf|rX8d}6n~#Qevq^>^BMx_y0#my>K(k+=KeeWpLwb=+p7 zbf~L@=cV@Jl-h3VsC&ZP7x&qD(W={KS?4X#xvCH|%&_ba@mP>OuOM{OBUP4IC^fZn z$#$A-Dbnv92xr|y`CE*i7wuMSdu+fZQn@+OY~*>PQhKGCimriJyVYuw1i>OS^_wV1 zEwRYDdb4pR>M}CpP*Z;s+63XST@<~6<Yw;^kIUW3NU<PVtfF9dckY!Rf5N*t8Ssjd z&1mEW&Nq;-&>vdkoq-CMAT;)sDbBioe^O2i_&9;b;|#j=EZ5BcmKTr>q_YMAF~G+m zyx?<7A?9CNDch)>R)$6T&@<KaPokL%1a4UWXa2v|-w+6JX6~xXcUeD4`H<02X-}o> zl?G!-w;$m~_{X^4<9U#D*5_pLnTWF)=kq4w2#<E!LA?Qr!SzUDldcl6!gz)2VZ3Au zZE)81)TmcCSi)EIU)I1&9LI}>sw>~Py}q%m`I`E*)%|Uq-0#d5dr;!aJ;f|C3`R#$ zBx;piYpZJA>_H2?;NqHzuv%|=alJ3N{u0IMg<@`GY3bGIoxS}3Qg70lYZt!Ee}+`U zFADQF^=_n|U~?kgL7hRTYgLJ5;s|XHdf*zN(shd|=P;ct<#T4bf}2Z9!by{GtLY|h z?yI|7TDBR5d$M<BKbA*F$|}tEmX=*CuPyVf0pFtM^Igq}hZL*JI_GC+8RtAV`UJR9 z`sY=pW!}pSA;Mk4y(`=q|75ORoPgdN!M|3|buH_tuY&W1^!bSZtPc8!&nr`RLSgZT zzXbA?sIcXzgJM#UnkEQFYns}4ZZEfYgH^HfwKA+zJN@;>+_!QM8|XKXpt4VVhyFw5 z-*0*QpvPUyw{6INBKvVfZ>aK?PHLiEx3ACrH|5W9Zwzd!6m9FkwcE;5bM}oACuBcP zIk~86zdtJ7btmOGnG<Si-?JHMmJUB~1wCrlW0y>2kMkFhkNwa^Ut?(8#}=0eg&I7B z4%Z+VQ&%aMY~dewa@n63$xaI=Hh<V&q!^1zYO9*QxhwZ!izK|RNO*c%QWo9!acYsL z#!ytzSl5<~QJD|ZrAiaC+l7zt8lJ|tgIBYgtr2dSO=7QZp(0m1kF_n1gr3iRNhFQJ zTxPkS<Jp}x)ig1(Pc(CatJG>sG?zv8-s1Je5`kbK(ax8b`IKg!H}Uo&kyC=f+KQ6& zDaBi@MmI$}xC*~d$@(KUo_AAg;+Y$t;)=MET{~|c@D_J9mIsyMh)v)PoQWE*+WWP) z-I@JyHg`j6dP7HdLs?M4o&-9GU(|Iti9N~OV6z*0l2@gN_}4K4=lK7(AB_9T?9Ma0 z>u++}@$TS0V!G$-+nDY7zozZ~_8dnq{O$Ps)y0aQX9matavZTTHNJn(<rUA16&Law z&IZWE2^<jgB>kefhu1f1*ipzK?D1D8A&LzemNc|T*vJKF90OK2)nNC*$=IB*z1wqn zD%P;QIu=uorcA~?b<spkf;U_=Uo~tC$6|p=knM~{6Dw(p8st(JCswJkPKzYDukcci zFQKs;j3umIuoS2ES-DlY?c20IyfHO6(A&64Qt7ETy|b&yNMD%bPUjv8Z|EHuOf_~& zYVM9Z-`Sl{cKqFeQ&)*zZ-3mk$#-SKYID9Ja?9marz>u}N|YQ2F2|eU{8}gkuoklQ z!<|2OAw}1ODb^5u2b*kRCl+>$@OgzmnY+R!<R)@Qcx#2b9DA!Tah5=tjiX=YXl}|? z;g^Kd&rS*ca<?oPMXyj&%s=x>S%1@}ue)n`;q1jmMhjaI*v47ssvljFeow$E(YMie zQG2<&jB>e+oVBdn&gCxSDgOpnpw#m0ap4_YX@yJX<!64$7nky)$Hd-TVtogn^CSkH z?Cjix{U&ys*m71-mjlkm5)^hiusju9?_8<WBZ)J3n=H3aZ^_t1?6mo^N<X&TreEB( zxp(r-1{_5Em1Wpe(&D$C;?GmZ?&JrC%Lj9(a_a@B&+8QEee?^a+rL*@dv4m4>&$fv zPOlHO56}nAUz#7!+q^@!Lj&Z?pC{TOA!5|&fP{sxb2<=xdZiw*%p3Z8iW~1}<@`m? zvb<DVdXKJ_%3QPc?MLR-z@GPSNP8eZf7-#M%5~>Dm!+a#p!YGU9Aa*LuGPGE+v&{- z(K6U^_>JX*^b~!7$;i&0OW0S4kg;&~#OBZWC=L8JfAVCnk3olXBdssc!6@w97<7i5 z4jM@4r$*_!dAf^?hbIA^M-%#RPpj-4`@*sCtRUEYA(8u8_8+D1;s}}_YZ_-zGkBIl zHjf0J$z~TjVZny7hiB&oKlOO^Fy^Pvyw5KgO%@wHTYIh7d-g1~o9t%)`~GC3|3v3{ z%tpIO&h6O$i<Xw$_FTVgw!3@i9Aw!8z1Z2^2Obvv>|Gg7Hv4Il340nnYQcktYo<*O zdiLy@vmCXV9WuS={P}yRoSk==WUA4#l-^Cx$tI_j=K6A5ZMiMEK8iynk3DdQ_-Vvw zIcXzXkmGtfVgV;bj-&eE`J*LERkDQHSf%GWBsnpRkkxB(@MLGG!U+l|?IsSh7844` zXng}#6XxDm5!-0K>F~oxw}dyn<NXg-O^43r9^Zz-J3mOTG$-o4i?>|Av0}&NfBIli zc}3A==D-K))Q`PxKKEF2ZB-&s6RbCINW|0@Klr0}d~9y|bFaOrR1}N9aYw#zb1xNq zGe_>aI{m?0um7lx<4n=|j~||z{RDMx>&u?6O>ps=+IUSl-d>BV^j$~RlRmPW*f&|W zZQi&c77bK5srXWgyPP4Y4SRdsK^hL#ID^V%G)9}*788dRr5w+2Jo=%MHm##hEC?)j zCtEIMgC{sOeC9$xq%L}UkstxMD79Wc^7`Ckx!>h}$MDgc@8)h}1?k8>Sf|7yUdkZZ zw{tauu{QVA7b+~2!_?0H5Ic7RfAWW0uYL9)SF>Cgb#m3L&7{I$9eovR>{CxVNI$;J zfPJpn)z^7hybgi!lJ*gCJkuk?gH^19Hn9v|ldsU9P$XJlH5><sj~%($<E=37jZt4E z@wkzBeBS&?{8Hv(A>*<bK5_H9E05fN|NZN3%>68vyHToDJn9ZpX|Zr4UuL93hwrCc zp|a$t^uU86&7Ev=T=%Y`wxT;;>quP6e7&%Ex=a|t=wA}buFigz3a@W#N=(gu;8s^v z==I!53z~8lmg^!Heky(SK`D1V<-(@zh(FtQQy3rHApbAt*HP^8w<oGNw#WZVb1aT| zdQvV2z*J+a6Bfh>n_Y!ud>PgcJ<Bw+XI>j=bJJgtm+8L>C3+4YpWq!nzcnByJmXZf zmz87H8TTaQfYp!3b`#^TAc5yT#Bx6RQr_<jSY>*6Pnof_)L6FXFqN$Vr=O?e6Zu@4 zUn@UDTAsfamC)ew667i4yk&w^M$0Kw4_1e3n%lT=o6yomn_CN7@KtPGWDBJn5OdAB zmI|zt1<|t$**9~?xZ_xJyiT{fZ{LZNx8HL6$rJnf-0px(soB4_lKBune4#X2cy=u2 zpB*<gCp-yUqxs*<r^|l|G^&qRSkKs47=|(OQX4XU{<n?1w}4Z8!?RStIU-Yk0q04G z9x31ganXAUxJd8}tbj|z#SIp4D~$<XF5os&D%BNm2Qf?g3b+&dp6j4174RUAyc<^@ zr+60kSOMpVjhYKMPkL#nfD0r{PZw~Jw9~H@aEXMuNCCHUS91poxQ#T4e=6V(;+1*| zxRcnVagriaWSU$@X2>`>NDh%X!oK7h!IxhOp655<Z#{|XSR-(SbdxbMtJ6-RGziLZ z)Jy`75fwF?bv%Zz$6jjWM$!cOt>BqKABA*cj0`+BMvg)rlA4;nZf5-8p*f{?WStUk zXjmVOH#9aV-D9)k2Pc)mk@2y~kug=-JUJ3GJ)gL-N!fZRGpTfrWJbr1VzjLodKZQs zBG*Fbaq@S-@w#GbX4lxzwS(h-H-^Ga)Ey+p$OLF-P#imWY$5}s7bcp7VHlhN#TbN* zW3$Q3u|ZeiVq-_2KVI+D<XrF6%)v1w9&1oGD64o!S9o1q&KHbz(Y|{i*^KTSCa*#o zA!8#RdMS{74o9mDben??hoC>xhdKJVPL+VW$)2&9+3~4Kr7_mHQJI@NkU2Itb!dDN z_CMYjOMu|j$o5jfur|zCAidl`V_LM~lS=j%L+E6n*&%Wm@C3?vkF`U;R~wLP`5Y;P zZDvi-uI8tL<2)?Qq*3%(nAQDr9QRSwEJu|>u7IpZ^{BeIh1p~>A$pnLX4mu_gnkFW zVICvQ=p*DQCP2w1<Rs|x+>QZfQ)>qOnM5px2QgW<0q#HoV6>}c+O}o{=8ua<7nAKd z$=32!Ak}eP<NA!+k2~Y~oJ}%1$4)W;$h@`zW3dD@2YEK&<v~59AA!W<D9-_p;bLPg zTe%*R_d<ggOBL!xbA?jdHa|ZfJDQn0bU1S&h6&le?xpfaq0bSdluSOO<ol_n`SH0! z%FeObv6<szqY9hi$`$x9diCUvnM}J5jnC#A2d56q&1YuD6jV%%kBm*uqT8{_(Xkn2 z?$DSrxOtnhV|r{dPrNNppen1TW-LEgp|6rTo*AFW?4KA@bV)KwZ|8uLncHAGG&eWB zp}u~0WM+JNZZ<YMKEXt;-_Z+uy&@xDYQT%f?aRxq`L&;rrJGnnzQ`|vI=o57s%6H9 zu|;?q-9a{yYe*X3`94H`h-VT4c`p^od&tMg`=~@^YM@3uZ8uX3wNiFEbWkTP!d~A^ zJ=9Bmw3wFAQu)~Actb;HgANl7apT<h#OT<_)Y1K{CLV9pTjKF}DqoIw7hq2wrV8z; z#zHw>fC(KY8d?i*eF1hBV3!V)J^A)zPrkjgAwOPcLw>x@hWvP)4NW?IXG05vJ-xlU m9DuqUfW5kXD89mG-?~#~!LMKTk#8{gm8au77{oXBAN*e_!gX>0 literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Size2-Regular.woff b/source/fonts/KaTeX_Size2-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..4a3055854ede4eaf25de2364da0fea0a05858cfc GIT binary patch literal 6684 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 Tg_Hl}z+VB4e{%Y3K;HiWz5YA{ literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Size2-Regular.woff2 b/source/fonts/KaTeX_Size2-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..3facec1ab899c8b984146e54051efafb948eb08c GIT binary patch literal 5560 zcmV;p6-VlKPew8T0RR9102R0Z4*&oF05E(202N&T0RR9100000000000000000000 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 G=(=+&a+nVQ literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Size3-Regular.eot b/source/fonts/KaTeX_Size3-Regular.eot new file mode 100644 index 0000000000000000000000000000000000000000..576b864fae6e163967a7fbe5f6da41c8076d6210 GIT binary patch literal 8596 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 IkN?L10`Xpe)&Kwi literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Size3-Regular.ttf b/source/fonts/KaTeX_Size3-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..790ddbbc55fdd3e4bf42f567e4f5f3b7aee5c86a GIT binary patch literal 8360 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 b_t#}$xcqq6w_XMyFZ`zQkbw9<{u}=bafM%{ literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Size3-Regular.woff b/source/fonts/KaTeX_Size3-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..3a6d062e660d3a9f71b0230e601dcaff83638430 GIT binary patch literal 4776 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 literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Size3-Regular.woff2 b/source/fonts/KaTeX_Size3-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..2cffafe5018f6e8a7988d6e277d2cf2177968aca GIT binary patch literal 3856 zcmV+r5AX1IPew8T0RR9101prV4*&oF03fIU01mbQ0RR9100000000000000000000 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 Sim-oV>Ot5I1I>}Z^_~IHATU(` literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Size4-Regular.eot b/source/fonts/KaTeX_Size4-Regular.eot new file mode 100644 index 0000000000000000000000000000000000000000..c2b045fc3dbebff9ecede9a4a1fcf9080633fb15 GIT binary patch literal 11520 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 literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Size4-Regular.ttf b/source/fonts/KaTeX_Size4-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..ce660aa7ff91c74b859c521bded76a3fe2150b5b GIT binary patch literal 11284 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 literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Size4-Regular.woff b/source/fonts/KaTeX_Size4-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..7826c6c97a108759a64d1fd402428ad73c795898 GIT binary patch literal 6456 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 literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Size4-Regular.woff2 b/source/fonts/KaTeX_Size4-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..c92189812d98fdf4feb8eafcc81481778f039f65 GIT binary patch literal 5172 zcmV-46wB*(Pew8T0RR9102DL;4*&oF04x*$029^#0RR9100000000000000000000 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 literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Typewriter-Regular.eot b/source/fonts/KaTeX_Typewriter-Regular.eot new file mode 100644 index 0000000000000000000000000000000000000000..4c178f484a8d7369a4142755c30ae4a0e12e8d5d GIT binary patch literal 35784 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 YDotF!T>j=)f<OPAT_gD0Pal2#57pl|r~m)} literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Typewriter-Regular.ttf b/source/fonts/KaTeX_Typewriter-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..b0427ad0a56ca0eb58c035ebadbc7bc3ebe7fae0 GIT binary patch literal 35528 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 literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Typewriter-Regular.woff b/source/fonts/KaTeX_Typewriter-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..78e990488a9b61630e28263b73157205c0aeda96 GIT binary patch literal 20712 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 literal 0 HcmV?d00001 diff --git a/source/fonts/KaTeX_Typewriter-Regular.woff2 b/source/fonts/KaTeX_Typewriter-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..618de99d480f9a5dfeabce556f3a94bd31de1a2c GIT binary patch literal 17344 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]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 literal 0 HcmV?d00001 diff --git a/source/images/favicon.ico b/source/images/favicon.ico deleted file mode 100644 index d1d026a8b7e31201ac8040dacf434c37bbe09e1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 318 zcma)0!3lss3`@ZQS|7e`UxI(<a~qfN=?L!N%N@)q!f_~EOOw*3C4ewh6)6S*y2PwB z=~;q?2+TJ=@Th_PI5CaDvToV7zO^FSh~TvpV>35b(~RBe*(}28h1|Ld`PCH<{{GfG G{Z?Kpst<<% diff --git a/source/index.html.haml b/source/index.html.haml deleted file mode 100644 index 5cb9956..0000000 --- a/source/index.html.haml +++ /dev/null @@ -1,38 +0,0 @@ ---- -pageable: true -per_page: 6 ---- - --#%header.main-header{cover} --# %nav.main-nav.overlay.clearfix --# - if blog_settings.logo.present? --# %a.blog-logo{href: home_path} --# = image_tag blog_settings.logo, alt: blog_settings.name --# - if blog_settings.navigation --# %a.menu-button.icon-menu{href: '#'} --# %span.word Menu --# .vertical --# .main-header-content.inner --# %h1.page-title= blog_settings.name --# %h2.page-description= blog_settings.description --# %a.scroll-down.icon-arrow-left{href: '#content', data: {offset: '-45'}} --# %span.hidden Scroll Down --# --#%main#content.content{role: :main} --# = partial('shared/page_articles', --# locals: { page_articles: page_articles, paginate: paginate }) - - -%header.subheader - .container - %h2.page-title - = blog_settings.name - %small= blog_settings.description -%main#content.container{role: :main} - .row - .col-md-9 - = partial('shared/page_articles', - locals: { page_articles: page_articles, paginate: paginate }) - .col-md-3 - = partial('shared/tags_nav', - locals: { blog: blog, selected_tag: 'all' }) diff --git a/source/index.html.md b/source/index.html.md new file mode 100644 index 0000000..1c3e7a4 --- /dev/null +++ b/source/index.html.md @@ -0,0 +1,8 @@ +--- +title: Home +layout: page +--- + +# intro + +Welcome Home. diff --git a/source/javascripts/ghoststa.js b/source/javascripts/ghoststa.js new file mode 100644 index 0000000..6873a64 --- /dev/null +++ b/source/javascripts/ghoststa.js @@ -0,0 +1,79 @@ +$(function() { + // Ghosthunter configuration + $('#search-field').ghostHunter({ + results: '#search-results', + before: function() { + $('#search-results-container').modal('show'); + $('#search-term').html($('#search-field').val()); + }, + onComplete: function() { + $('#loading-spinner').hide(); + }, + result_template: "<p><h3><a href='{{link}}'>{{title}}</a> <small>{{pubDate}}</small></h3><small>{{description}}</small></p><hr>", + info_template: "<div class='text-right'><small>{{amount}} posts found</small></div>" + }); + $('#search-results-container').on('hidden.bs.modal', function() { + $('#loading-spinner').show(); + $('#search-field').focus(); + }); + + + // Helper function to get url segments + function getSegment(segment) { + var segments = (window.location.pathname).split('/').filter(Boolean); + return segments[segment]; + } + + // Highlight current tags + if(getSegment(0) === 'tag') { + var tag = getSegment(1); + $('nav.tags a').each(function() { + var slug = $(this).data('slug'); + if(typeof tag != "undefined") { + if(slug == tag) { + $(this).addClass('selected'); + } + } + }); + } else { + $('nav.tags a[data-slug="all"]').addClass('selected'); + } + + // Same for current author + if(getSegment(0) === 'author') { + var author = getSegment(1); + $('nav.authors a').each(function() { + var slug = $(this).data('slug'); + if(typeof author != "undefined") { + if(slug == author) { + $(this).addClass('selected'); + } + } + }); + } + + // Highlight current link in navigation + // Since it seems like the `{{current}}` is bugged. + // Or I'm just too stupid for it. + if(typeof getSegment(0) != 'undefined' && getSegment(0) !== 'page') { + $('a[data-nav-slug=' + getSegment(0) + ']').addClass('current-item'); + } else { + $('a[data-nav-slug!=""][data-nav-slug]').first().addClass('current-item'); + } + + + // Smooth scrolling + // by http://css-tricks.com/snippets/jquery/smooth-scrolling/ + $('a[data-scroll="true"]').click(function() { + if(location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '') && location.hostname == this.hostname) { + var target = $(this.hash); + target = target.length ? target : $('[name=' + this.hash.slice(1) + ']'); + if(target.length) { + $('html,body').animate({ + scrollTop: target.offset().top - 70 + }, 1000); + return false; + } + } + }); +}); diff --git a/source/javascripts/ghoststa_vendor.js b/source/javascripts/ghoststa_vendor.js new file mode 100644 index 0000000..367e95a --- /dev/null +++ b/source/javascripts/ghoststa_vendor.js @@ -0,0 +1,9927 @@ +/*! + * jQuery JavaScript Library v2.1.4 + * http://jquery.com/ + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * + * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2015-04-28T16:01Z + */ + +(function( global, factory ) { + + if ( typeof module === "object" && typeof module.exports === "object" ) { + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Support: Firefox 18+ +// Can't be in strict mode, several libs including ASP.NET trace +// the stack via arguments.caller.callee and Firefox dies if +// you try to trace through "use strict" call chains. (#13335) +// + +var arr = []; + +var slice = arr.slice; + +var concat = arr.concat; + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var support = {}; + + + +var + // Use the correct document accordingly with window argument (sandbox) + document = window.document, + + version = "2.1.4", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }, + + // Support: Android<4.1 + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([\da-z])/gi, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }; + +jQuery.fn = jQuery.prototype = { + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // Start with an empty selector + selector: "", + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num != null ? + + // Return just the one element from the set + ( num < 0 ? this[ num + this.length ] : this[ num ] ) : + + // Return all the elements in a clean array + slice.call( this ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + ret.context = this.context; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + // (You can seed the arguments with an array of args, but this is + // only used internally.) + each: function( callback, args ) { + return jQuery.each( this, callback, args ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map(this, function( elem, i ) { + return callback.call( elem, i, elem ); + })); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(null); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction(target) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) { + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend({ + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isFunction: function( obj ) { + return jQuery.type(obj) === "function"; + }, + + isArray: Array.isArray, + + isWindow: function( obj ) { + return obj != null && obj === obj.window; + }, + + isNumeric: function( obj ) { + // parseFloat NaNs numeric-cast false positives (null|true|false|"") + // ...but misinterprets leading-number strings, particularly hex literals ("0x...") + // subtraction forces infinities to NaN + // adding 1 corrects loss of precision from parseFloat (#15100) + return !jQuery.isArray( obj ) && (obj - parseFloat( obj ) + 1) >= 0; + }, + + isPlainObject: function( obj ) { + // Not plain objects: + // - Any object or value whose internal [[Class]] property is not "[object Object]" + // - DOM nodes + // - window + if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + if ( obj.constructor && + !hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) { + return false; + } + + // If the function hasn't returned already, we're confident that + // |obj| is a plain object, created by {} or constructed with new Object + return true; + }, + + isEmptyObject: function( obj ) { + var name; + for ( name in obj ) { + return false; + } + return true; + }, + + type: function( obj ) { + if ( obj == null ) { + return obj + ""; + } + // Support: Android<4.0, iOS<6 (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call(obj) ] || "object" : + typeof obj; + }, + + // Evaluates a script in a global context + globalEval: function( code ) { + var script, + indirect = eval; + + code = jQuery.trim( code ); + + if ( code ) { + // If the code includes a valid, prologue position + // strict mode pragma, execute code by injecting a + // script tag into the document. + if ( code.indexOf("use strict") === 1 ) { + script = document.createElement("script"); + script.text = code; + document.head.appendChild( script ).parentNode.removeChild( script ); + } else { + // Otherwise, avoid the DOM node creation, insertion + // and removal by using an indirect global eval + indirect( code ); + } + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Support: IE9-11+ + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + }, + + // args is for internal usage only + each: function( obj, callback, args ) { + var value, + i = 0, + length = obj.length, + isArray = isArraylike( obj ); + + if ( args ) { + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback.apply( obj[ i ], args ); + + if ( value === false ) { + break; + } + } + } else { + for ( i in obj ) { + value = callback.apply( obj[ i ], args ); + + if ( value === false ) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback.call( obj[ i ], i, obj[ i ] ); + + if ( value === false ) { + break; + } + } + } else { + for ( i in obj ) { + value = callback.call( obj[ i ], i, obj[ i ] ); + + if ( value === false ) { + break; + } + } + } + } + + return obj; + }, + + // Support: Android<4.1 + trim: function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArraylike( Object(arr) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var value, + i = 0, + length = elems.length, + isArray = isArraylike( elems ), + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var tmp, args, proxy; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + now: Date.now, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +}); + +// Populate the class2type map +jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +}); + +function isArraylike( obj ) { + + // Support: iOS 8.2 (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = "length" in obj && obj.length, + type = jQuery.type( obj ); + + if ( type === "function" || jQuery.isWindow( obj ) ) { + return false; + } + + if ( obj.nodeType === 1 && length ) { + return true; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.2.0-pre + * http://sizzlejs.com/ + * + * Copyright 2008, 2014 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2014-12-16 + */ +(function( window ) { + +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // General-purpose constants + MAX_NEGATIVE = 1 << 31, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf as it's faster than native + // http://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + // http://www.w3.org/TR/css3-syntax/#characters + characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", + + // Loosely modeled on CSS identifier characters + // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors + // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = characterEncoding.replace( "w", "w#" ), + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + characterEncoding + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + characterEncoding + ")(?:\\((" + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + characterEncoding + ")" ), + "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), + "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + rescape = /'|\\/g, + + // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox<24 + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + // BMP codepoint + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }; + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var match, elem, m, nodeType, + // QSA vars + i, groups, old, nid, newContext, newSelector; + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + + context = context || document; + results = results || []; + nodeType = context.nodeType; + + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + if ( !seed && documentIsHTML ) { + + // Try to shortcut find operations when possible (e.g., not under DocumentFragment) + if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { + // Speed-up: Sizzle("#ID") + if ( (m = match[1]) ) { + if ( nodeType === 9 ) { + elem = context.getElementById( m ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document (jQuery #6963) + if ( elem && elem.parentNode ) { + // Handle the case where IE, Opera, and Webkit return items + // by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + } else { + // Context is not a document + if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && + contains( context, elem ) && elem.id === m ) { + results.push( elem ); + return results; + } + } + + // Speed-up: Sizzle("TAG") + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Speed-up: Sizzle(".CLASS") + } else if ( (m = match[3]) && support.getElementsByClassName ) { + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // QSA path + if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + nid = old = expando; + newContext = context; + newSelector = nodeType !== 1 && selector; + + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + groups = tokenize( selector ); + + if ( (old = context.getAttribute("id")) ) { + nid = old.replace( rescape, "\\$&" ); + } else { + context.setAttribute( "id", nid ); + } + nid = "[id='" + nid + "'] "; + + i = groups.length; + while ( i-- ) { + groups[i] = nid + toSelector( groups[i] ); + } + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context; + newSelector = groups.join(","); + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch(qsaError) { + } finally { + if ( !old ) { + context.removeAttribute("id"); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {Function(string, Object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created div and expects a boolean result + */ +function assert( fn ) { + var div = document.createElement("div"); + + try { + return !!fn( div ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( div.parentNode ) { + div.parentNode.removeChild( div ); + } + // release memory in IE + div = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = attrs.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + ( ~b.sourceIndex || MAX_NEGATIVE ) - + ( ~a.sourceIndex || MAX_NEGATIVE ); + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, parent, + doc = node ? node.ownerDocument || node : preferredDoc; + + // If no document and documentElement is available, return + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Set our document + document = doc; + docElem = doc.documentElement; + parent = doc.defaultView; + + // Support: IE>8 + // If iframe document is assigned to "document" variable and if iframe has been reloaded, + // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936 + // IE6-8 do not support the defaultView property so parent will be undefined + if ( parent && parent !== parent.top ) { + // IE11 does not have attachEvent, so all must suffer + if ( parent.addEventListener ) { + parent.addEventListener( "unload", unloadHandler, false ); + } else if ( parent.attachEvent ) { + parent.attachEvent( "onunload", unloadHandler ); + } + } + + /* Support tests + ---------------------------------------------------------------------- */ + documentIsHTML = !isXML( doc ); + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert(function( div ) { + div.className = "i"; + return !div.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( div ) { + div.appendChild( doc.createComment("") ); + return !div.getElementsByTagName("*").length; + }); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( doc.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert(function( div ) { + docElem.appendChild( div ).id = expando; + return !doc.getElementsByName || !doc.getElementsByName( expando ).length; + }); + + // ID find and filter + if ( support.getById ) { + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var m = context.getElementById( id ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + return m && m.parentNode ? [ m ] : []; + } + }; + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + } else { + // Support: IE6/7 + // getElementById is not reliable as a find shortcut + delete Expr.find["ID"]; + + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + } + + // Tag + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See http://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( div ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // http://bugs.jquery.com/ticket/12359 + docElem.appendChild( div ).innerHTML = "<a id='" + expando + "'></a>" + + "<select id='" + expando + "-\f]' msallowcapture=''>" + + "<option selected=''></option></select>"; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( div.querySelectorAll("[msallowcapture^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !div.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.2+, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.7+ + if ( !div.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push("~="); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibing-combinator selector` fails + if ( !div.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push(".#.+[+~]"); + } + }); + + assert(function( div ) { + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = doc.createElement("input"); + input.setAttribute( "type", "hidden" ); + div.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( div.querySelectorAll("[name=d]").length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":enabled").length ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + div.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( div ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( div, "div" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( div, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully does not implement inclusive descendent + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + // Choose the first element that is related to our preferred document + if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + return a === doc ? -1 : + b === doc ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return doc; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch (e) {} + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + while ( (node = elem[i++]) ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[6] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[3] ) { + match[2] = match[4] || match[5] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, outerCache, node, diff, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) { + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + // Seek `elem` from a previously-cached index + outerCache = parent[ expando ] || (parent[ expando ] = {}); + cache = outerCache[ type ] || []; + nodeIndex = cache[0] === dirruns && cache[1]; + diff = cache[0] === dirruns && cache[2]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + outerCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + // Use previously-cached element index if available + } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) { + diff = cache[1]; + + // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...) + } else { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) { + // Cache the index of each encountered element + if ( useCache ) { + (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + // Don't keep the element (issue #299) + input[0] = null; + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifier + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + // Boolean properties + "enabled": function( elem ) { + return elem.disabled === false; + }, + + "disabled": function( elem ) { + return elem.disabled === true; + }, + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( (tokens = []) ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + checkNonElements = base && dir === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + if ( (oldCache = outerCache[ dir ]) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return (newCache[ 2 ] = oldCache[ 2 ]); + } else { + // Reuse newcache so results back-propagate to previous elements + outerCache[ dir ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + len = elems.length; + + if ( outermost ) { + outermostContext = context !== document && context; + } + + // Add elements passing elementMatchers directly to results + // Keep `i` a string if there are no elements so `matchedCount` will be "00" below + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // Apply set filters to unmatched elements + matchedCount += i; + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( (selector = compiled.selector || selector) ); + + results = results || []; + + // Try to minimize operations if there is no seed and only one group + if ( match.length === 1 ) { + + // Take a shortcut and set the context if the root selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + support.getById && context.nodeType === 9 && documentIsHTML && + Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert(function( div1 ) { + // Should return 1, but returns 4 (following) + return div1.compareDocumentPosition( document.createElement("div") ) & 1; +}); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert(function( div ) { + div.innerHTML = "<a href='#'></a>"; + return div.firstChild.getAttribute("href") === "#" ; +}) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert(function( div ) { + div.innerHTML = "<input/>"; + div.firstChild.setAttribute( "value", "" ); + return div.firstChild.getAttribute( "value" ) === ""; +}) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert(function( div ) { + return div.getAttribute("disabled") == null; +}) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + null; + } + }); +} + +return Sizzle; + +})( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +jQuery.expr[":"] = jQuery.expr.pseudos; +jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; + + + +var rneedsContext = jQuery.expr.match.needsContext; + +var rsingleTag = (/^<(\w+)\s*\/?>(?:<\/\1>|)$/); + + + +var risSimple = /^.[^:#\[\.,]*$/; + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + /* jshint -W018 */ + return !!qualifier.call( elem, i, elem ) !== not; + }); + + } + + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + }); + + } + + if ( typeof qualifier === "string" ) { + if ( risSimple.test( qualifier ) ) { + return jQuery.filter( qualifier, elements, not ); + } + + qualifier = jQuery.filter( qualifier, elements ); + } + + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) >= 0 ) !== not; + }); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 && elem.nodeType === 1 ? + jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : + jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + })); +}; + +jQuery.fn.extend({ + find: function( selector ) { + var i, + len = this.length, + ret = [], + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter(function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + }) ); + } + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + // Needed because $( selector, context ) becomes $( context ).find( selector ) + ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); + ret.selector = this.selector ? this.selector + " " + selector : selector; + return ret; + }, + filter: function( selector ) { + return this.pushStack( winnow(this, selector || [], false) ); + }, + not: function( selector ) { + return this.pushStack( winnow(this, selector || [], true) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +}); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over <tag> to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, + + init = jQuery.fn.init = function( selector, context ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[0] === "<" && selector[ selector.length - 1 ] === ">" && selector.length >= 3 ) { + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && (match[1] || !context) ) { + + // HANDLE: $(html) -> $(array) + if ( match[1] ) { + context = context instanceof jQuery ? context[0] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[1], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + // Properties of context are called as methods if possible + if ( jQuery.isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[2] ); + + // Support: Blackberry 4.6 + // gEBID returns nodes no longer in the document (#6963) + if ( elem && elem.parentNode ) { + // Inject the element directly into the jQuery object + this.length = 1; + this[0] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || rootjQuery ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this.context = this[0] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return typeof rootjQuery.ready !== "undefined" ? + rootjQuery.ready( selector ) : + // Execute immediately if ready is not present + selector( jQuery ); + } + + if ( selector.selector !== undefined ) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.extend({ + dir: function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( (elem = elem[ dir ]) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; + }, + + sibling: function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; + } +}); + +jQuery.fn.extend({ + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter(function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[i] ) ) { + return true; + } + } + }); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( ; i < l; i++ ) { + for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) { + // Always skip document fragments + if ( cur.nodeType < 11 && (pos ? + pos.index(cur) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector(cur, selectors)) ) { + + matched.push( cur ); + break; + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.unique( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter(selector) + ); + } +}); + +function sibling( cur, dir ) { + while ( (cur = cur[dir]) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each({ + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return jQuery.dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return jQuery.dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return jQuery.dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return jQuery.dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return jQuery.dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return jQuery.dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return jQuery.sibling( elem.firstChild ); + }, + contents: function( elem ) { + return elem.contentDocument || jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.unique( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +}); +var rnotwhite = (/\S+/g); + + + +// String to Object options format cache +var optionsCache = {}; + +// Convert String-formatted options into Object-formatted ones and store in cache +function createOptions( options ) { + var object = optionsCache[ options ] = {}; + jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) { + object[ flag ] = true; + }); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + ( optionsCache[ options ] || createOptions( options ) ) : + jQuery.extend( {}, options ); + + var // Last fire value (for non-forgettable lists) + memory, + // Flag to know if list was already fired + fired, + // Flag to know if list is currently firing + firing, + // First callback to fire (used internally by add and fireWith) + firingStart, + // End of the loop when firing + firingLength, + // Index of currently firing callback (modified by remove if needed) + firingIndex, + // Actual callback list + list = [], + // Stack of fire calls for repeatable lists + stack = !options.once && [], + // Fire callbacks + fire = function( data ) { + memory = options.memory && data; + fired = true; + firingIndex = firingStart || 0; + firingStart = 0; + firingLength = list.length; + firing = true; + for ( ; list && firingIndex < firingLength; firingIndex++ ) { + if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) { + memory = false; // To prevent further calls using add + break; + } + } + firing = false; + if ( list ) { + if ( stack ) { + if ( stack.length ) { + fire( stack.shift() ); + } + } else if ( memory ) { + list = []; + } else { + self.disable(); + } + } + }, + // Actual Callbacks object + self = { + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + // First, we save the current length + var start = list.length; + (function add( args ) { + jQuery.each( args, function( _, arg ) { + var type = jQuery.type( arg ); + if ( type === "function" ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && type !== "string" ) { + // Inspect recursively + add( arg ); + } + }); + })( arguments ); + // Do we need to add the callbacks to the + // current firing batch? + if ( firing ) { + firingLength = list.length; + // With memory, if we're not firing then + // we should call right away + } else if ( memory ) { + firingStart = start; + fire( memory ); + } + } + return this; + }, + // Remove a callback from the list + remove: function() { + if ( list ) { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + // Handle firing indexes + if ( firing ) { + if ( index <= firingLength ) { + firingLength--; + } + if ( index <= firingIndex ) { + firingIndex--; + } + } + } + }); + } + return this; + }, + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length ); + }, + // Remove all callbacks from the list + empty: function() { + list = []; + firingLength = 0; + return this; + }, + // Have the list do nothing anymore + disable: function() { + list = stack = memory = undefined; + return this; + }, + // Is it disabled? + disabled: function() { + return !list; + }, + // Lock the list in its current state + lock: function() { + stack = undefined; + if ( !memory ) { + self.disable(); + } + return this; + }, + // Is it locked? + locked: function() { + return !stack; + }, + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( list && ( !fired || stack ) ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + if ( firing ) { + stack.push( args ); + } else { + fire( args ); + } + } + return this; + }, + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +jQuery.extend({ + + Deferred: function( func ) { + var tuples = [ + // action, add listener, listener list, final state + [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ], + [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ], + [ "notify", "progress", jQuery.Callbacks("memory") ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + then: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + return jQuery.Deferred(function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; + // deferred[ done | fail | progress ] for forwarding actions to newDefer + deferred[ tuple[1] ](function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise() + .done( newDefer.resolve ) + .fail( newDefer.reject ) + .progress( newDefer.notify ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments ); + } + }); + }); + fns = null; + }).promise(); + }, + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Keep pipe for back-compat + promise.pipe = promise.then; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 3 ]; + + // promise[ done | fail | progress ] = list.add + promise[ tuple[1] ] = list.add; + + // Handle state + if ( stateString ) { + list.add(function() { + // state = [ resolved | rejected ] + state = stateString; + + // [ reject_list | resolve_list ].disable; progress_list.lock + }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); + } + + // deferred[ resolve | reject | notify ] + deferred[ tuple[0] ] = function() { + deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments ); + return this; + }; + deferred[ tuple[0] + "With" ] = list.fireWith; + }); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( subordinate /* , ..., subordinateN */ ) { + var i = 0, + resolveValues = slice.call( arguments ), + length = resolveValues.length, + + // the count of uncompleted subordinates + remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, + + // the master Deferred. If resolveValues consist of only a single Deferred, just use that. + deferred = remaining === 1 ? subordinate : jQuery.Deferred(), + + // Update function for both resolve and progress values + updateFunc = function( i, contexts, values ) { + return function( value ) { + contexts[ i ] = this; + values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( values === progressValues ) { + deferred.notifyWith( contexts, values ); + } else if ( !( --remaining ) ) { + deferred.resolveWith( contexts, values ); + } + }; + }, + + progressValues, progressContexts, resolveContexts; + + // Add listeners to Deferred subordinates; treat others as resolved + if ( length > 1 ) { + progressValues = new Array( length ); + progressContexts = new Array( length ); + resolveContexts = new Array( length ); + for ( ; i < length; i++ ) { + if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { + resolveValues[ i ].promise() + .done( updateFunc( i, resolveContexts, resolveValues ) ) + .fail( deferred.reject ) + .progress( updateFunc( i, progressContexts, progressValues ) ); + } else { + --remaining; + } + } + } + + // If we're not waiting on anything, resolve the master + if ( !remaining ) { + deferred.resolveWith( resolveContexts, resolveValues ); + } + + return deferred.promise(); + } +}); + + +// The deferred used on DOM ready +var readyList; + +jQuery.fn.ready = function( fn ) { + // Add the callback + jQuery.ready.promise().done( fn ); + + return this; +}; + +jQuery.extend({ + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.triggerHandler ) { + jQuery( document ).triggerHandler( "ready" ); + jQuery( document ).off( "ready" ); + } + } +}); + +/** + * The ready event handler and self cleanup method + */ +function completed() { + document.removeEventListener( "DOMContentLoaded", completed, false ); + window.removeEventListener( "load", completed, false ); + jQuery.ready(); +} + +jQuery.ready.promise = function( obj ) { + if ( !readyList ) { + + readyList = jQuery.Deferred(); + + // Catch cases where $(document).ready() is called after the browser event has already occurred. + // We once tried to use readyState "interactive" here, but it caused issues like the one + // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15 + if ( document.readyState === "complete" ) { + // Handle it asynchronously to allow scripts the opportunity to delay ready + setTimeout( jQuery.ready ); + + } else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed, false ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed, false ); + } + } + return readyList.promise( obj ); +}; + +// Kick off the DOM ready check even if the user does not +jQuery.ready.promise(); + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( jQuery.type( key ) === "object" ) { + chainable = true; + for ( i in key ) { + jQuery.access( elems, fn, i, key[i], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !jQuery.isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) ); + } + } + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call( elems ) : + len ? fn( elems[0], key ) : emptyGet; +}; + + +/** + * Determines whether an object can have data + */ +jQuery.acceptData = function( owner ) { + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + /* jshint -W018 */ + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + +function Data() { + // Support: Android<4, + // Old WebKit does not have Object.preventExtensions/freeze method, + // return new empty object instead with no [[set]] accessor + Object.defineProperty( this.cache = {}, 0, { + get: function() { + return {}; + } + }); + + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; +Data.accepts = jQuery.acceptData; + +Data.prototype = { + key: function( owner ) { + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return the key for a frozen object. + if ( !Data.accepts( owner ) ) { + return 0; + } + + var descriptor = {}, + // Check if the owner object already has a cache key + unlock = owner[ this.expando ]; + + // If not, create one + if ( !unlock ) { + unlock = Data.uid++; + + // Secure it in a non-enumerable, non-writable property + try { + descriptor[ this.expando ] = { value: unlock }; + Object.defineProperties( owner, descriptor ); + + // Support: Android<4 + // Fallback to a less secure definition + } catch ( e ) { + descriptor[ this.expando ] = unlock; + jQuery.extend( owner, descriptor ); + } + } + + // Ensure the cache object + if ( !this.cache[ unlock ] ) { + this.cache[ unlock ] = {}; + } + + return unlock; + }, + set: function( owner, data, value ) { + var prop, + // There may be an unlock assigned to this node, + // if there is no entry for this "owner", create one inline + // and set the unlock as though an owner entry had always existed + unlock = this.key( owner ), + cache = this.cache[ unlock ]; + + // Handle: [ owner, key, value ] args + if ( typeof data === "string" ) { + cache[ data ] = value; + + // Handle: [ owner, { properties } ] args + } else { + // Fresh assignments by object are shallow copied + if ( jQuery.isEmptyObject( cache ) ) { + jQuery.extend( this.cache[ unlock ], data ); + // Otherwise, copy the properties one-by-one to the cache object + } else { + for ( prop in data ) { + cache[ prop ] = data[ prop ]; + } + } + } + return cache; + }, + get: function( owner, key ) { + // Either a valid cache is found, or will be created. + // New caches will be created and the unlock returned, + // allowing direct access to the newly created + // empty data object. A valid owner object must be provided. + var cache = this.cache[ this.key( owner ) ]; + + return key === undefined ? + cache : cache[ key ]; + }, + access: function( owner, key, value ) { + var stored; + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ((key && typeof key === "string") && value === undefined) ) { + + stored = this.get( owner, key ); + + return stored !== undefined ? + stored : this.get( owner, jQuery.camelCase(key) ); + } + + // [*]When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, name, camel, + unlock = this.key( owner ), + cache = this.cache[ unlock ]; + + if ( key === undefined ) { + this.cache[ unlock ] = {}; + + } else { + // Support array or space separated string of keys + if ( jQuery.isArray( key ) ) { + // If "name" is an array of keys... + // When data is initially created, via ("key", "val") signature, + // keys will be converted to camelCase. + // Since there is no way to tell _how_ a key was added, remove + // both plain key and camelCase key. #12786 + // This will only penalize the array argument path. + name = key.concat( key.map( jQuery.camelCase ) ); + } else { + camel = jQuery.camelCase( key ); + // Try the string as a key before any manipulation + if ( key in cache ) { + name = [ key, camel ]; + } else { + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + name = camel; + name = name in cache ? + [ name ] : ( name.match( rnotwhite ) || [] ); + } + } + + i = name.length; + while ( i-- ) { + delete cache[ name[ i ] ]; + } + } + }, + hasData: function( owner ) { + return !jQuery.isEmptyObject( + this.cache[ owner[ this.expando ] ] || {} + ); + }, + discard: function( owner ) { + if ( owner[ this.expando ] ) { + delete this.cache[ owner[ this.expando ] ]; + } + } +}; +var data_priv = new Data(); + +var data_user = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /([A-Z])/g; + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + // Only convert to a number if it doesn't change the string + +data + "" === data ? +data : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch( e ) {} + + // Make sure we set the data so it isn't changed later + data_user.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend({ + hasData: function( elem ) { + return data_user.hasData( elem ) || data_priv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return data_user.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + data_user.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to data_priv methods, these can be deprecated. + _data: function( elem, name, data ) { + return data_priv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + data_priv.remove( elem, name ); + } +}); + +jQuery.fn.extend({ + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = data_user.get( elem ); + + if ( elem.nodeType === 1 && !data_priv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE11+ + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.slice(5) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + data_priv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each(function() { + data_user.set( this, key ); + }); + } + + return access( this, function( value ) { + var data, + camelKey = jQuery.camelCase( key ); + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + // Attempt to get data from the cache + // with the key as-is + data = data_user.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to get data from the cache + // with the key camelized + data = data_user.get( elem, camelKey ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, camelKey, undefined ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each(function() { + // First, attempt to store a copy or reference of any + // data that might've been store with a camelCased key. + var data = data_user.get( this, camelKey ); + + // For HTML5 data-* attribute interop, we have to + // store property names with dashes in a camelCase form. + // This might not apply to all properties...* + data_user.set( this, camelKey, value ); + + // *... In the case of properties that might _actually_ + // have dashes, we need to also store a copy of that + // unchanged property. + if ( key.indexOf("-") !== -1 && data !== undefined ) { + data_user.set( this, key, value ); + } + }); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each(function() { + data_user.remove( this, key ); + }); + } +}); + + +jQuery.extend({ + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = data_priv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || jQuery.isArray( data ) ) { + queue = data_priv.access( elem, type, jQuery.makeArray(data) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return data_priv.get( elem, key ) || data_priv.access( elem, key, { + empty: jQuery.Callbacks("once memory").add(function() { + data_priv.remove( elem, [ type + "queue", key ] ); + }) + }); + } +}); + +jQuery.fn.extend({ + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[0], type ); + } + + return data === undefined ? + this : + this.each(function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[0] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + }); + }, + dequeue: function( type ) { + return this.each(function() { + jQuery.dequeue( this, type ); + }); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = data_priv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +}); +var pnum = (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source; + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var isHidden = function( elem, el ) { + // isHidden might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); + }; + +var rcheckableType = (/^(?:checkbox|radio)$/i); + + + +(function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Safari<=5.1 + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Safari<=5.1, Android<4.2 + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE<=11+ + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = "<textarea>x</textarea>"; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; +})(); +var strundefined = typeof undefined; + + + +support.focusinBubbles = "onfocusin" in window; + + +var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/, + rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)$/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = data_priv.get( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !(events = elemData.events) ) { + events = elemData.events = {}; + } + if ( !(eventHandle = elemData.handle) ) { + eventHandle = elemData.handle = function( e ) { + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== strundefined && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnotwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[t] ) || []; + type = origType = tmp[1]; + namespaces = ( tmp[2] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend({ + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join(".") + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !(handlers = events[ type ]) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle, false ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = data_priv.hasData( elem ) && data_priv.get( elem ); + + if ( !elemData || !(events = elemData.events) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnotwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[t] ) || []; + type = origType = tmp[1]; + namespaces = ( tmp[2] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + delete elemData.handle; + data_priv.remove( elem, "events" ); + } + }, + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : []; + + cur = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf(".") >= 0 ) { + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split("."); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf(":") < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join("."); + event.namespace_re = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === (elem.ownerDocument || document) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) { + + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( data_priv.get( cur, "events" ) || {} )[ event.type ] && data_priv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && jQuery.acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) && + jQuery.acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + elem[ type ](); + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + dispatch: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event ); + + var i, j, ret, matched, handleObj, + handlerQueue = [], + args = slice.call( arguments ), + handlers = ( data_priv.get( this, "events" ) || {} )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[0] = event; + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) { + + // Triggered event must either 1) have no namespace, or 2) have namespace(s) + // a subset or equal to those in the bound event (both can have no namespace). + if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) + .apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( (event.result = ret) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, matches, sel, handleObj, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + // Black-hole SVG <use> instance trees (#13180) + // Avoid non-left-click bubbling in Firefox (#3861) + if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.disabled !== true || event.type !== "click" ) { + matches = []; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matches[ sel ] === undefined ) { + matches[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) >= 0 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matches[ sel ] ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push({ elem: cur, handlers: matches }); + } + } + } + } + + // Add the remaining (directly-bound) handlers + if ( delegateCount < handlers.length ) { + handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) }); + } + + return handlerQueue; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), + + fixHooks: {}, + + keyHooks: { + props: "char charCode key keyCode".split(" "), + filter: function( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: "button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "), + filter: function( event, original ) { + var eventDoc, doc, body, + button = original.button; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + var i, prop, copy, + type = event.type, + originalEvent = event, + fixHook = this.fixHooks[ type ]; + + if ( !fixHook ) { + this.fixHooks[ type ] = fixHook = + rmouseEvent.test( type ) ? this.mouseHooks : + rkeyEvent.test( type ) ? this.keyHooks : + {}; + } + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = new jQuery.Event( originalEvent ); + + i = copy.length; + while ( i-- ) { + prop = copy[ i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Support: Cordova 2.5 (WebKit) (#13255) + // All events should have a target; Cordova deviceready doesn't + if ( !event.target ) { + event.target = document; + } + + // Support: Safari 6.0+, Chrome<28 + // Target should not be a text node (#504, #13143) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; + }, + + special: { + load: { + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + focus: { + // Fire native event if possible so blur/focus sequence is correct + trigger: function() { + if ( this !== safeActiveElement() && this.focus ) { + this.focus(); + return false; + } + }, + delegateType: "focusin" + }, + blur: { + trigger: function() { + if ( this === safeActiveElement() && this.blur ) { + this.blur(); + return false; + } + }, + delegateType: "focusout" + }, + click: { + // For checkbox, fire native event so checked state will be right + trigger: function() { + if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) { + this.click(); + return false; + } + }, + + // For cross-browser consistency, don't fire native .click() on links + _default: function( event ) { + return jQuery.nodeName( event.target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + }, + + simulate: function( type, elem, event, bubble ) { + // Piggyback on a donor event to simulate a different one. + // Fake originalEvent to avoid donor's stopPropagation, but if the + // simulated event prevents default then we do the same on the donor. + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true, + originalEvent: {} + } + ); + if ( bubble ) { + jQuery.event.trigger( e, null, elem ); + } else { + jQuery.event.dispatch.call( elem, e ); + } + if ( e.isDefaultPrevented() ) { + event.preventDefault(); + } + } +}; + +jQuery.removeEvent = function( elem, type, handle ) { + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle, false ); + } +}; + +jQuery.Event = function( src, props ) { + // Allow instantiation without the 'new' keyword + if ( !(this instanceof jQuery.Event) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + // Support: Android<4.0 + src.returnValue === false ? + returnTrue : + returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && e.preventDefault ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && e.stopPropagation ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && e.stopImmediatePropagation ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Create mouseenter/leave events using mouseover/out and event-time checks +// Support: Chrome 15+ +jQuery.each({ + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mousenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || (related !== target && !jQuery.contains( target, related )) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +}); + +// Support: Firefox, Chrome, Safari +// Create "bubbling" focus and blur events +if ( !support.focusinBubbles ) { + jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + var doc = this.ownerDocument || this, + attaches = data_priv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + data_priv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this, + attaches = data_priv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + data_priv.remove( doc, fix ); + + } else { + data_priv.access( doc, fix, attaches ); + } + } + }; + }); +} + +jQuery.fn.extend({ + + on: function( types, selector, data, fn, /*INTERNAL*/ one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + this.on( type, selector, data, types[ type ], one ); + } + return this; + } + + if ( data == null && fn == null ) { + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return this; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return this.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + }); + }, + one: function( types, selector, data, fn ) { + return this.on( types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each(function() { + jQuery.event.remove( this, types, fn, selector ); + }); + }, + + trigger: function( type, data ) { + return this.each(function() { + jQuery.event.trigger( type, data, this ); + }); + }, + triggerHandler: function( type, data ) { + var elem = this[0]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +}); + + +var + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, + rtagName = /<([\w:]+)/, + rhtml = /<|&#?\w+;/, + rnoInnerhtml = /<(?:script|style|link)/i, + // checked="checked" or checked + rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, + rscriptType = /^$|\/(?:java|ecma)script/i, + rscriptTypeMasked = /^true\/(.*)/, + rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g, + + // We have to close these tags to support XHTML (#13200) + wrapMap = { + + // Support: IE9 + option: [ 1, "<select multiple='multiple'>", "</select>" ], + + thead: [ 1, "<table>", "</table>" ], + col: [ 2, "<table><colgroup>", "</colgroup></table>" ], + tr: [ 2, "<table><tbody>", "</tbody></table>" ], + td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ], + + _default: [ 0, "", "" ] + }; + +// Support: IE9 +wrapMap.optgroup = wrapMap.option; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// Support: 1.x compatibility +// Manipulating tables requires a tbody +function manipulationTarget( elem, content ) { + return jQuery.nodeName( elem, "table" ) && + jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ? + + elem.getElementsByTagName("tbody")[0] || + elem.appendChild( elem.ownerDocument.createElement("tbody") ) : + elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = (elem.getAttribute("type") !== null) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + var match = rscriptTypeMasked.exec( elem.type ); + + if ( match ) { + elem.type = match[ 1 ]; + } else { + elem.removeAttribute("type"); + } + + return elem; +} + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + data_priv.set( + elems[ i ], "globalEval", !refElements || data_priv.get( refElements[ i ], "globalEval" ) + ); + } +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( data_priv.hasData( src ) ) { + pdataOld = data_priv.access( src ); + pdataCur = data_priv.set( dest, pdataOld ); + events = pdataOld.events; + + if ( events ) { + delete pdataCur.handle; + pdataCur.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( data_user.hasData( src ) ) { + udataOld = data_user.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + data_user.set( dest, udataCur ); + } +} + +function getAll( context, tag ) { + var ret = context.getElementsByTagName ? context.getElementsByTagName( tag || "*" ) : + context.querySelectorAll ? context.querySelectorAll( tag || "*" ) : + []; + + return tag === undefined || tag && jQuery.nodeName( context, tag ) ? + jQuery.merge( [ context ], ret ) : + ret; +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +jQuery.extend({ + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = jQuery.contains( elem.ownerDocument, elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + buildFragment: function( elems, context, scripts, selection ) { + var elem, tmp, tag, wrap, contains, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( jQuery.type( elem ) === "object" ) { + // Support: QtWebKit, PhantomJS + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement("div") ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: QtWebKit, PhantomJS + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( (elem = nodes[ i++ ]) ) { + + // #4087 - If origin and destination elements are the same, and this is + // that element, do not do anything + if ( selection && jQuery.inArray( elem, selection ) !== -1 ) { + continue; + } + + contains = jQuery.contains( elem.ownerDocument, elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( contains ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( (elem = tmp[ j++ ]) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; + }, + + cleanData: function( elems ) { + var data, elem, type, key, + special = jQuery.event.special, + i = 0; + + for ( ; (elem = elems[ i ]) !== undefined; i++ ) { + if ( jQuery.acceptData( elem ) ) { + key = elem[ data_priv.expando ]; + + if ( key && (data = data_priv.cache[ key ]) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + if ( data_priv.cache[ key ] ) { + // Discard any remaining `private` data + delete data_priv.cache[ key ]; + } + } + } + // Discard any remaining `user` data + delete data_user.cache[ elem[ data_user.expando ] ]; + } + } +}); + +jQuery.fn.extend({ + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each(function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + }); + }, null, value, arguments.length ); + }, + + append: function() { + return this.domManip( arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + }); + }, + + prepend: function() { + return this.domManip( arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + }); + }, + + before: function() { + return this.domManip( arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + }); + }, + + after: function() { + return this.domManip( arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + }); + }, + + remove: function( selector, keepData /* Internal Use Only */ ) { + var elem, + elems = selector ? jQuery.filter( selector, this ) : this, + i = 0; + + for ( ; (elem = elems[i]) != null; i++ ) { + if ( !keepData && elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem ) ); + } + + if ( elem.parentNode ) { + if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) { + setGlobalEval( getAll( elem, "script" ) ); + } + elem.parentNode.removeChild( elem ); + } + } + + return this; + }, + + empty: function() { + var elem, + i = 0; + + for ( ; (elem = this[i]) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map(function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + }); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = value.replace( rxhtmlTag, "<$1></$2>" ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var arg = arguments[ 0 ]; + + // Make the changes, replacing each context element with the new content + this.domManip( arguments, function( elem ) { + arg = this.parentNode; + + jQuery.cleanData( getAll( this ) ); + + if ( arg ) { + arg.replaceChild( elem, this ); + } + }); + + // Force removal if there was no new content (e.g., from empty arguments) + return arg && (arg.length || arg.nodeType) ? this : this.remove(); + }, + + detach: function( selector ) { + return this.remove( selector, true ); + }, + + domManip: function( args, callback ) { + + // Flatten any nested arrays + args = concat.apply( [], args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = this.length, + set = this, + iNoClone = l - 1, + value = args[ 0 ], + isFunction = jQuery.isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( isFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return this.each(function( index ) { + var self = set.eq( index ); + if ( isFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + self.domManip( args, callback ); + }); + } + + if ( l ) { + fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + if ( first ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + // Support: QtWebKit + // jQuery.merge because push.apply(_, arraylike) throws + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( this[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !data_priv.access( node, "globalEval" ) && jQuery.contains( doc, node ) ) { + + if ( node.src ) { + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl ) { + jQuery._evalUrl( node.src ); + } + } else { + jQuery.globalEval( node.textContent.replace( rcleanScript, "" ) ); + } + } + } + } + } + } + + return this; + } +}); + +jQuery.each({ + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: QtWebKit + // .get() because push.apply(_, arraylike) throws + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +}); + + +var iframe, + elemdisplay = {}; + +/** + * Retrieve the actual display of a element + * @param {String} name nodeName of the element + * @param {Object} doc Document object + */ +// Called only from within defaultDisplay +function actualDisplay( name, doc ) { + var style, + elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ), + + // getDefaultComputedStyle might be reliably used only on attached element + display = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ? + + // Use of this method is a temporary fix (more like optimization) until something better comes along, + // since it was removed from specification and supported only in FF + style.display : jQuery.css( elem[ 0 ], "display" ); + + // We don't have any data stored on the element, + // so use "detach" method as fast way to get rid of the element + elem.detach(); + + return display; +} + +/** + * Try to determine the default display value of an element + * @param {String} nodeName + */ +function defaultDisplay( nodeName ) { + var doc = document, + display = elemdisplay[ nodeName ]; + + if ( !display ) { + display = actualDisplay( nodeName, doc ); + + // If the simple way fails, read from inside an iframe + if ( display === "none" || !display ) { + + // Use the already-created iframe if possible + iframe = (iframe || jQuery( "<iframe frameborder='0' width='0' height='0'/>" )).appendTo( doc.documentElement ); + + // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse + doc = iframe[ 0 ].contentDocument; + + // Support: IE + doc.write(); + doc.close(); + + display = actualDisplay( nodeName, doc ); + iframe.detach(); + } + + // Store the correct default display + elemdisplay[ nodeName ] = display; + } + + return display; +} +var rmargin = (/^margin/); + +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + // Support: IE<=11+, Firefox<=30+ (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + if ( elem.ownerDocument.defaultView.opener ) { + return elem.ownerDocument.defaultView.getComputedStyle( elem, null ); + } + + return window.getComputedStyle( elem, null ); + }; + + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + style = elem.style; + + computed = computed || getStyles( elem ); + + // Support: IE9 + // getPropertyValue is only needed for .css('filter') (#12537) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + } + + if ( computed ) { + + if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { + ret = jQuery.style( elem, name ); + } + + // Support: iOS < 6 + // A tribute to the "awesome hack by Dean Edwards" + // iOS < 6 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels + // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values + if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + // Support: IE + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return (this.get = hookFn).apply( this, arguments ); + } + }; +} + + +(function() { + var pixelPositionVal, boxSizingReliableVal, + docElem = document.documentElement, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + if ( !div.style ) { + return; + } + + // Support: IE9-11+ + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + container.style.cssText = "border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;" + + "position:absolute"; + container.appendChild( div ); + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computePixelPositionAndBoxSizingReliable() { + div.style.cssText = + // Support: Firefox<29, Android 2.3 + // Vendor-prefix box-sizing + "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;" + + "box-sizing:border-box;display:block;margin-top:1%;top:1%;" + + "border:1px;padding:1px;width:4px;position:absolute"; + div.innerHTML = ""; + docElem.appendChild( container ); + + var divStyle = window.getComputedStyle( div, null ); + pixelPositionVal = divStyle.top !== "1%"; + boxSizingReliableVal = divStyle.width === "4px"; + + docElem.removeChild( container ); + } + + // Support: node.js jsdom + // Don't assume that getComputedStyle is a property of the global object + if ( window.getComputedStyle ) { + jQuery.extend( support, { + pixelPosition: function() { + + // This test is executed only once but we still do memoizing + // since we can use the boxSizingReliable pre-computing. + // No need to check if the test was already performed, though. + computePixelPositionAndBoxSizingReliable(); + return pixelPositionVal; + }, + boxSizingReliable: function() { + if ( boxSizingReliableVal == null ) { + computePixelPositionAndBoxSizingReliable(); + } + return boxSizingReliableVal; + }, + reliableMarginRight: function() { + + // Support: Android 2.3 + // Check if div with explicit width and no margin-right incorrectly + // gets computed margin-right based on width of container. (#3333) + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + // This support function is only executed once so no memoizing is needed. + var ret, + marginDiv = div.appendChild( document.createElement( "div" ) ); + + // Reset CSS: box-sizing; display; margin; border; padding + marginDiv.style.cssText = div.style.cssText = + // Support: Firefox<29, Android 2.3 + // Vendor-prefix box-sizing + "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" + + "box-sizing:content-box;display:block;margin:0;border:0;padding:0"; + marginDiv.style.marginRight = marginDiv.style.width = "0"; + div.style.width = "1px"; + docElem.appendChild( container ); + + ret = !parseFloat( window.getComputedStyle( marginDiv, null ).marginRight ); + + docElem.removeChild( container ); + div.removeChild( marginDiv ); + + return ret; + } + }); + } +})(); + + +// A method for quickly swapping in/out CSS properties to get correct calculations. +jQuery.swap = function( elem, options, callback, args ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.apply( elem, args || [] ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + +var + // Swappable if display is none or starts with table except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rnumsplit = new RegExp( "^(" + pnum + ")(.*)$", "i" ), + rrelNum = new RegExp( "^([+-])=(" + pnum + ")", "i" ), + + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }, + + cssPrefixes = [ "Webkit", "O", "Moz", "ms" ]; + +// Return a css property mapped to a potentially vendor prefixed property +function vendorPropName( style, name ) { + + // Shortcut for names that are not vendor prefixed + if ( name in style ) { + return name; + } + + // Check for vendor prefixed names + var capName = name[0].toUpperCase() + name.slice(1), + origName = name, + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in style ) { + return name; + } + } + + return origName; +} + +function setPositiveNumber( elem, value, subtract ) { + var matches = rnumsplit.exec( value ); + return matches ? + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) : + value; +} + +function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { + var i = extra === ( isBorderBox ? "border" : "content" ) ? + // If we already have the right measurement, avoid augmentation + 4 : + // Otherwise initialize for horizontal or vertical properties + name === "width" ? 1 : 0, + + val = 0; + + for ( ; i < 4; i += 2 ) { + // Both box models exclude margin, so add it if we want it + if ( extra === "margin" ) { + val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); + } + + if ( isBorderBox ) { + // border-box includes padding, so remove it if we want content + if ( extra === "content" ) { + val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // At this point, extra isn't border nor margin, so remove border + if ( extra !== "margin" ) { + val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } else { + // At this point, extra isn't content, so add padding + val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // At this point, extra isn't content nor padding, so add border + if ( extra !== "padding" ) { + val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + return val; +} + +function getWidthOrHeight( elem, name, extra ) { + + // Start with offset property, which is equivalent to the border-box value + var valueIsBorderBox = true, + val = name === "width" ? elem.offsetWidth : elem.offsetHeight, + styles = getStyles( elem ), + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Some non-html elements return undefined for offsetWidth, so check for null/undefined + // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285 + // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668 + if ( val <= 0 || val == null ) { + // Fall back to computed then uncomputed css if necessary + val = curCSS( elem, name, styles ); + if ( val < 0 || val == null ) { + val = elem.style[ name ]; + } + + // Computed unit is not pixels. Stop here and return. + if ( rnumnonpx.test(val) ) { + return val; + } + + // Check for style in case a browser which returns unreliable values + // for getComputedStyle silently falls back to the reliable elem.style + valueIsBorderBox = isBorderBox && + ( support.boxSizingReliable() || val === elem.style[ name ] ); + + // Normalize "", auto, and prepare for extra + val = parseFloat( val ) || 0; + } + + // Use the active box-sizing model to add/subtract irrelevant styles + return ( val + + augmentWidthOrHeight( + elem, + name, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles + ) + ) + "px"; +} + +function showHide( elements, show ) { + var display, elem, hidden, + values = [], + index = 0, + length = elements.length; + + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + values[ index ] = data_priv.get( elem, "olddisplay" ); + display = elem.style.display; + if ( show ) { + // Reset the inline display of this element to learn if it is + // being hidden by cascaded rules or not + if ( !values[ index ] && display === "none" ) { + elem.style.display = ""; + } + + // Set elements which have been overridden with display: none + // in a stylesheet to whatever the default browser style is + // for such an element + if ( elem.style.display === "" && isHidden( elem ) ) { + values[ index ] = data_priv.access( elem, "olddisplay", defaultDisplay(elem.nodeName) ); + } + } else { + hidden = isHidden( elem ); + + if ( display !== "none" || !hidden ) { + data_priv.set( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) ); + } + } + } + + // Set the display of most of the elements in a second loop + // to avoid the constant reflow + for ( index = 0; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + if ( !show || elem.style.display === "none" || elem.style.display === "" ) { + elem.style.display = show ? values[ index ] || "" : "none"; + } + } + + return elements; +} + +jQuery.extend({ + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: { + "float": "cssFloat" + }, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = jQuery.camelCase( name ), + style = elem.style; + + name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) ); + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && (ret = rrelNum.exec( value )) ) { + value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) ); + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number, add 'px' to the (except for certain CSS properties) + if ( type === "number" && !jQuery.cssNumber[ origName ] ) { + value += "px"; + } + + // Support: IE9-11+ + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) { + style[ name ] = value; + } + + } else { + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) { + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = jQuery.camelCase( name ); + + // Make sure that we're working with the right name + name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) ); + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || jQuery.isNumeric( num ) ? num || 0 : val; + } + return val; + } +}); + +jQuery.each([ "height", "width" ], function( i, name ) { + jQuery.cssHooks[ name ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && elem.offsetWidth === 0 ? + jQuery.swap( elem, cssShow, function() { + return getWidthOrHeight( elem, name, extra ); + }) : + getWidthOrHeight( elem, name, extra ); + } + }, + + set: function( elem, value, extra ) { + var styles = extra && getStyles( elem ); + return setPositiveNumber( elem, value, extra ? + augmentWidthOrHeight( + elem, + name, + extra, + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + styles + ) : 0 + ); + } + }; +}); + +// Support: Android 2.3 +jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight, + function( elem, computed ) { + if ( computed ) { + return jQuery.swap( elem, { "display": "inline-block" }, + curCSS, [ elem, "marginRight" ] ); + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each({ + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split(" ") : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( !rmargin.test( prefix ) ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +}); + +jQuery.fn.extend({ + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( jQuery.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + }, + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each(function() { + if ( isHidden( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + }); + } +}); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || "swing"; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + if ( tween.elem[ tween.prop ] != null && + (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE9 +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + } +}; + +jQuery.fx = Tween.prototype.init; + +// Back Compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, timerId, + rfxtypes = /^(?:toggle|show|hide)$/, + rfxnum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ), + rrun = /queueHooks$/, + animationPrefilters = [ defaultPrefilter ], + tweeners = { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ), + target = tween.cur(), + parts = rfxnum.exec( value ), + unit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + start = ( jQuery.cssNumber[ prop ] || unit !== "px" && +target ) && + rfxnum.exec( jQuery.css( tween.elem, prop ) ), + scale = 1, + maxIterations = 20; + + if ( start && start[ 3 ] !== unit ) { + // Trust units reported by jQuery.css + unit = unit || start[ 3 ]; + + // Make sure we update the tween properties later on + parts = parts || []; + + // Iteratively approximate from a nonzero starting point + start = +target || 1; + + do { + // If previous iteration zeroed out, double until we get *something*. + // Use string for doubling so we don't accidentally see scale as unchanged below + scale = scale || ".5"; + + // Adjust and apply + start = start / scale; + jQuery.style( tween.elem, prop, start + unit ); + + // Update scale, tolerating zero or NaN from tween.cur(), + // break the loop if scale is unchanged or perfect, or if we've just had enough + } while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations ); + } + + // Update tween properties + if ( parts ) { + start = tween.start = +start || +target || 0; + tween.unit = unit; + // If a +=/-= token was provided, we're doing a relative animation + tween.end = parts[ 1 ] ? + start + ( parts[ 1 ] + 1 ) * parts[ 2 ] : + +parts[ 2 ]; + } + + return tween; + } ] + }; + +// Animations created synchronously will run synchronously +function createFxNow() { + setTimeout(function() { + fxNow = undefined; + }); + return ( fxNow = jQuery.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4 ; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( (tween = collection[ index ].call( animation, prop, value )) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + /* jshint validthis: true */ + var prop, value, toggle, tween, hooks, oldfire, display, checkDisplay, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHidden( elem ), + dataShow = data_priv.get( elem, "fxshow" ); + + // Handle queue: false promises + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always(function() { + // Ensure the complete handler is called before this completes + anim.always(function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + }); + }); + } + + // Height/width overflow pass + if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) { + // Make sure that nothing sneaks out + // Record all 3 overflow attributes because IE9-10 do not + // change the overflow attribute when overflowX and + // overflowY are set to the same value + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Set display property to inline-block for height/width + // animations on inline elements that are having width/height animated + display = jQuery.css( elem, "display" ); + + // Test default display if display is currently "none" + checkDisplay = display === "none" ? + data_priv.get( elem, "olddisplay" ) || defaultDisplay( elem.nodeName ) : display; + + if ( checkDisplay === "inline" && jQuery.css( elem, "float" ) === "none" ) { + style.display = "inline-block"; + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always(function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + }); + } + + // show/hide pass + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.exec( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // If there is dataShow left over from a stopped hide or show and we are going to proceed with show, we should pretend to be hidden + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + + // Any non-fx value stops us from restoring the original display value + } else { + display = undefined; + } + } + + if ( !jQuery.isEmptyObject( orig ) ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = data_priv.access( elem, "fxshow", {} ); + } + + // Store state if its toggle - enables .stop().toggle() to "reverse" + if ( toggle ) { + dataShow.hidden = !hidden; + } + if ( hidden ) { + jQuery( elem ).show(); + } else { + anim.done(function() { + jQuery( elem ).hide(); + }); + } + anim.done(function() { + var prop; + + data_priv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + }); + for ( prop in orig ) { + tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = tween.start; + if ( hidden ) { + tween.end = tween.start; + tween.start = prop === "width" || prop === "height" ? 1 : 0; + } + } + } + + // If this is a noop like .hide().hide(), restore an overwritten display value + } else if ( (display === "none" ? defaultDisplay( elem.nodeName ) : display) === "inline" ) { + style.display = display; + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = jQuery.camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( jQuery.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = animationPrefilters.length, + deferred = jQuery.Deferred().always( function() { + // Don't match elem in the :animated selector + delete tick.elem; + }), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + // Support: Android 2.3 + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length ; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ]); + + if ( percent < 1 && length ) { + return remaining; + } else { + deferred.resolveWith( elem, [ animation ] ); + return false; + } + }, + animation = deferred.promise({ + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { specialEasing: {} }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length ; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + }), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length ; index++ ) { + result = animationPrefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( jQuery.isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + }) + ); + + // attach callbacks from options + return animation.progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweener: function( props, callback ) { + if ( jQuery.isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.split(" "); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length ; index++ ) { + prop = props[ index ]; + tweeners[ prop ] = tweeners[ prop ] || []; + tweeners[ prop ].unshift( callback ); + } + }, + + prefilter: function( callback, prepend ) { + if ( prepend ) { + animationPrefilters.unshift( callback ); + } else { + animationPrefilters.push( callback ); + } + } +}); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + jQuery.isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing + }; + + opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration : + opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default; + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( jQuery.isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend({ + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHidden ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate({ opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || data_priv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue && type !== false ) { + this.queue( type || "fx", [] ); + } + + return this.each(function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = data_priv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) { + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + }); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each(function() { + var index, + data = data_priv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + }); + } +}); + +jQuery.each([ "toggle", "show", "hide" ], function( i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +}); + +// Generate shortcuts for custom animations +jQuery.each({ + slideDown: genFx("show"), + slideUp: genFx("hide"), + slideToggle: genFx("toggle"), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +}); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = jQuery.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + // Checks the timer has not already been removed + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + if ( timer() ) { + jQuery.fx.start(); + } else { + jQuery.timers.pop(); + } +}; + +jQuery.fx.interval = 13; + +jQuery.fx.start = function() { + if ( !timerId ) { + timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval ); + } +}; + +jQuery.fx.stop = function() { + clearInterval( timerId ); + timerId = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = setTimeout( next, time ); + hooks.stop = function() { + clearTimeout( timeout ); + }; + }); +}; + + +(function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: iOS<=5.1, Android<=4.2+ + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE<=11+ + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: Android<=2.3 + // Options inside disabled selects are incorrectly marked as disabled + select.disabled = true; + support.optDisabled = !opt.disabled; + + // Support: IE<=11+ + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +})(); + + +var nodeHook, boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend({ + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each(function() { + jQuery.removeAttr( this, name ); + }); + } +}); + +jQuery.extend({ + attr: function( elem, name, value ) { + var hooks, ret, + nType = elem.nodeType; + + // don't get/set attributes on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === strundefined ) { + return jQuery.prop( elem, name, value ); + } + + // All attributes are lowercase + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + name = name.toLowerCase(); + hooks = jQuery.attrHooks[ name ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook ); + } + + if ( value !== undefined ) { + + if ( value === null ) { + jQuery.removeAttr( elem, name ); + + } else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + elem.setAttribute( name, value + "" ); + return value; + } + + } else if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? + undefined : + ret; + } + }, + + removeAttr: function( elem, value ) { + var name, propName, + i = 0, + attrNames = value && value.match( rnotwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( (name = attrNames[i++]) ) { + propName = jQuery.propFix[ name ] || name; + + // Boolean attributes get special treatment (#10870) + if ( jQuery.expr.match.bool.test( name ) ) { + // Set corresponding property to false + elem[ propName ] = false; + } + + elem.removeAttribute( name ); + } + } + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + jQuery.nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + } +}); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle; + if ( !isXML ) { + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ name ]; + attrHandle[ name ] = ret; + ret = getter( elem, name, isXML ) != null ? + name.toLowerCase() : + null; + attrHandle[ name ] = handle; + } + return ret; + }; +}); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i; + +jQuery.fn.extend({ + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each(function() { + delete this[ jQuery.propFix[ name ] || name ]; + }); + } +}); + +jQuery.extend({ + propFix: { + "for": "htmlFor", + "class": "className" + }, + + prop: function( elem, name, value ) { + var ret, hooks, notxml, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + if ( notxml ) { + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ? + ret : + ( elem[ name ] = value ); + + } else { + return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ? + ret : + elem[ name ]; + } + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + return elem.hasAttribute( "tabindex" ) || rfocusable.test( elem.nodeName ) || elem.href ? + elem.tabIndex : + -1; + } + } + } +}); + +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + } + }; +} + +jQuery.each([ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +}); + + + + +var rclass = /[\t\r\n\f]/g; + +jQuery.fn.extend({ + addClass: function( value ) { + var classes, elem, cur, clazz, j, finalValue, + proceed = typeof value === "string" && value, + i = 0, + len = this.length; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).addClass( value.call( this, j, this.className ) ); + }); + } + + if ( proceed ) { + // The disjunction here is for better compressibility (see removeClass) + classes = ( value || "" ).match( rnotwhite ) || []; + + for ( ; i < len; i++ ) { + elem = this[ i ]; + cur = elem.nodeType === 1 && ( elem.className ? + ( " " + elem.className + " " ).replace( rclass, " " ) : + " " + ); + + if ( cur ) { + j = 0; + while ( (clazz = classes[j++]) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // only assign if different to avoid unneeded rendering. + finalValue = jQuery.trim( cur ); + if ( elem.className !== finalValue ) { + elem.className = finalValue; + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, clazz, j, finalValue, + proceed = arguments.length === 0 || typeof value === "string" && value, + i = 0, + len = this.length; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).removeClass( value.call( this, j, this.className ) ); + }); + } + if ( proceed ) { + classes = ( value || "" ).match( rnotwhite ) || []; + + for ( ; i < len; i++ ) { + elem = this[ i ]; + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( elem.className ? + ( " " + elem.className + " " ).replace( rclass, " " ) : + "" + ); + + if ( cur ) { + j = 0; + while ( (clazz = classes[j++]) ) { + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) >= 0 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = value ? jQuery.trim( cur ) : ""; + if ( elem.className !== finalValue ) { + elem.className = finalValue; + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value; + + if ( typeof stateVal === "boolean" && type === "string" ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( jQuery.isFunction( value ) ) { + return this.each(function( i ) { + jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal ); + }); + } + + return this.each(function() { + if ( type === "string" ) { + // Toggle individual class names + var className, + i = 0, + self = jQuery( this ), + classNames = value.match( rnotwhite ) || []; + + while ( (className = classNames[ i++ ]) ) { + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( type === strundefined || type === "boolean" ) { + if ( this.className ) { + // store className if set + data_priv.set( this, "__className__", this.className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + this.className = this.className || value === false ? "" : data_priv.get( this, "__className__" ) || ""; + } + }); + }, + + hasClass: function( selector ) { + var className = " " + selector + " ", + i = 0, + l = this.length; + for ( ; i < l; i++ ) { + if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) { + return true; + } + } + + return false; + } +}); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend({ + val: function( value ) { + var hooks, ret, isFunction, + elem = this[0]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { + return ret; + } + + ret = elem.value; + + return typeof ret === "string" ? + // Handle most common string cases + ret.replace(rreturn, "") : + // Handle cases where value is null/undef or number + ret == null ? "" : ret; + } + + return; + } + + isFunction = jQuery.isFunction( value ); + + return this.each(function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( jQuery.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + }); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + }); + } +}); + +jQuery.extend({ + valHooks: { + option: { + get: function( elem ) { + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + // Support: IE10-11+ + // option.text throws exceptions (#14686, #14858) + jQuery.trim( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one" || index < 0, + values = one ? null : [], + max = one ? index + 1 : options.length, + i = index < 0 ? + max : + one ? index : 0; + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // IE6-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + // Don't return options that are disabled or in a disabled optgroup + ( support.optDisabled ? !option.disabled : option.getAttribute( "disabled" ) === null ) && + ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + if ( (option.selected = jQuery.inArray( option.value, values ) >= 0) ) { + optionSet = true; + } + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +}); + +// Radios and checkboxes getter/setter +jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( jQuery.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute("value") === null ? "on" : elem.value; + }; + } +}); + + + + +// Return jQuery for attributes-only inclusion + + +jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + return arguments.length > 0 ? + this.on( name, null, data, fn ) : + this.trigger( name ); + }; +}); + +jQuery.fn.extend({ + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + }, + + bind: function( types, data, fn ) { + return this.on( types, null, data, fn ); + }, + unbind: function( types, fn ) { + return this.off( types, null, fn ); + }, + + delegate: function( selector, types, data, fn ) { + return this.on( types, selector, data, fn ); + }, + undelegate: function( selector, types, fn ) { + // ( namespace ) or ( selector, types [, fn] ) + return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn ); + } +}); + + +var nonce = jQuery.now(); + +var rquery = (/\?/); + + + +// Support: Android 2.3 +// Workaround failure to string-cast null input +jQuery.parseJSON = function( data ) { + return JSON.parse( data + "" ); +}; + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml, tmp; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE9 + try { + tmp = new DOMParser(); + xml = tmp.parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; +}; + + +var + rhash = /#.*$/, + rts = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + rurl = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Document location + ajaxLocation = window.location.href, + + // Segment location into parts + ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || []; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || []; + + if ( jQuery.isFunction( func ) ) { + // For each dataType in the dataTypeExpression + while ( (dataType = dataTypes[i++]) ) { + // Prepend if requested + if ( dataType[0] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + (structure[ dataType ] = structure[ dataType ] || []).unshift( func ); + + // Otherwise append + } else { + (structure[ dataType ] = structure[ dataType ] || []).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + }); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader("Content-Type"); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s[ "throws" ] ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend({ + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: ajaxLocation, + type: "GET", + isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /xml/, + html: /html/, + json: /json/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": jQuery.parseJSON, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + // URL without anti-cache param + cacheURL, + // Response headers + responseHeadersString, + responseHeaders, + // timeout handle + timeoutTimer, + // Cross-domain detection vars + parts, + // To know if global events are to be dispatched + fireGlobals, + // Loop variable + i, + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + // Callbacks context + callbackContext = s.context || s, + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks("once memory"), + // Status-dependent callbacks + statusCode = s.statusCode || {}, + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + // The jqXHR state + state = 0, + // Default abort message + strAbort = "canceled", + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( state === 2 ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( (match = rheaders.exec( responseHeadersString )) ) { + responseHeaders[ match[1].toLowerCase() ] = match[ 2 ]; + } + } + match = responseHeaders[ key.toLowerCase() ]; + } + return match == null ? null : match; + }, + + // Raw string + getAllResponseHeaders: function() { + return state === 2 ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + var lname = name.toLowerCase(); + if ( !state ) { + name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( !state ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( state < 2 ) { + for ( code in map ) { + // Lazy-add the new callback in a way that preserves old ones + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } else { + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ).complete = completeDeferred.add; + jqXHR.success = jqXHR.done; + jqXHR.error = jqXHR.fail; + + // Remove hash character (#7531: and string promotion) + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" ) + .replace( rprotocol, ajaxLocParts[ 1 ] + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ]; + + // A cross-domain request is in order when we have a protocol:host:port mismatch + if ( s.crossDomain == null ) { + parts = rurl.exec( s.url.toLowerCase() ); + s.crossDomain = !!( parts && + ( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] || + ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? "80" : "443" ) ) !== + ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? "80" : "443" ) ) ) + ); + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( state === 2 ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger("ajaxStart"); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + cacheURL = s.url; + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // If data is available, append data to url + if ( s.data ) { + cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data ); + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add anti-cache in url if needed + if ( s.cache === false ) { + s.url = rts.test( cacheURL ) ? + + // If there is already a '_' parameter, set its value + cacheURL.replace( rts, "$1_=" + nonce++ ) : + + // Otherwise add one to the end + cacheURL + ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + nonce++; + } + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ? + s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) { + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + for ( i in { success: 1, error: 1, complete: 1 } ) { + jqXHR[ i ]( s[ i ] ); + } + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = setTimeout(function() { + jqXHR.abort("timeout"); + }, s.timeout ); + } + + try { + state = 1; + transport.send( requestHeaders, done ); + } catch ( e ) { + // Propagate exception as error if not done + if ( state < 2 ) { + done( -1, e ); + // Simply rethrow otherwise + } else { + throw e; + } + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Called once + if ( state === 2 ) { + return; + } + + // State is "done" now + state = 2; + + // Clear timeout if it exists + if ( timeoutTimer ) { + clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader("Last-Modified"); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader("etag"); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger("ajaxStop"); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +}); + +jQuery.each( [ "get", "post" ], function( i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + // Shift arguments if data argument was omitted + if ( jQuery.isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + return jQuery.ajax({ + url: url, + type: method, + dataType: type, + data: data, + success: callback + }); + }; +}); + + +jQuery._evalUrl = function( url ) { + return jQuery.ajax({ + url: url, + type: "GET", + dataType: "script", + async: false, + global: false, + "throws": true + }); +}; + + +jQuery.fn.extend({ + wrapAll: function( html ) { + var wrap; + + if ( jQuery.isFunction( html ) ) { + return this.each(function( i ) { + jQuery( this ).wrapAll( html.call(this, i) ); + }); + } + + if ( this[ 0 ] ) { + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map(function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + }).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( jQuery.isFunction( html ) ) { + return this.each(function( i ) { + jQuery( this ).wrapInner( html.call(this, i) ); + }); + } + + return this.each(function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + }); + }, + + wrap: function( html ) { + var isFunction = jQuery.isFunction( html ); + + return this.each(function( i ) { + jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html ); + }); + }, + + unwrap: function() { + return this.parent().each(function() { + if ( !jQuery.nodeName( this, "body" ) ) { + jQuery( this ).replaceWith( this.childNodes ); + } + }).end(); + } +}); + + +jQuery.expr.filters.hidden = function( elem ) { + // Support: Opera <= 12.12 + // Opera reports offsetWidths and offsetHeights less than zero on some elements + return elem.offsetWidth <= 0 && elem.offsetHeight <= 0; +}; +jQuery.expr.filters.visible = function( elem ) { + return !jQuery.expr.filters.hidden( elem ); +}; + + + + +var r20 = /%20/g, + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( jQuery.isArray( obj ) ) { + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + // Item is non-scalar (array or object), encode its numeric index. + buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add ); + } + }); + + } else if ( !traditional && jQuery.type( obj ) === "object" ) { + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, value ) { + // If value is a function, invoke it and return its value + value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value ); + s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value ); + }; + + // Set traditional to true for jQuery <= 1.3.2 behavior. + if ( traditional === undefined ) { + traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + }); + + } else { + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ).replace( r20, "+" ); +}; + +jQuery.fn.extend({ + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map(function() { + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + }) + .filter(function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + }) + .map(function( i, elem ) { + var val = jQuery( this ).val(); + + return val == null ? + null : + jQuery.isArray( val ) ? + jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + }) : + { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + }).get(); + } +}); + + +jQuery.ajaxSettings.xhr = function() { + try { + return new XMLHttpRequest(); + } catch( e ) {} +}; + +var xhrId = 0, + xhrCallbacks = {}, + xhrSuccessStatus = { + // file protocol always yields status code 0, assume 200 + 0: 200, + // Support: IE9 + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +// Support: IE9 +// Open requests must be manually aborted on unload (#5280) +// See https://support.microsoft.com/kb/2856746 for more info +if ( window.attachEvent ) { + window.attachEvent( "onunload", function() { + for ( var key in xhrCallbacks ) { + xhrCallbacks[ key ](); + } + }); +} + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport(function( options ) { + var callback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(), + id = ++xhrId; + + xhr.open( options.type, options.url, options.async, options.username, options.password ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers["X-Requested-With"] ) { + headers["X-Requested-With"] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + delete xhrCallbacks[ id ]; + callback = xhr.onload = xhr.onerror = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + complete( + // file: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + // Support: IE9 + // Accessing binary-data responseText throws an exception + // (#11426) + typeof xhr.responseText === "string" ? { + text: xhr.responseText + } : undefined, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + xhr.onerror = callback("error"); + + // Create the abort callback + callback = xhrCallbacks[ id ] = callback("abort"); + + try { + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +}); + + + + +// Install script dataType +jQuery.ajaxSetup({ + accepts: { + script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /(?:java|ecma)script/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +}); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +}); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + // This transport only deals with cross domain requests + if ( s.crossDomain ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery("<script>").prop({ + async: true, + charset: s.scriptCharset, + src: s.url + }).on( + "load error", + callback = function( evt ) { + script.remove(); + callback = null; + if ( evt ) { + complete( evt.type === "error" ? 404 : 200, evt.type ); + } + } + ); + document.head.appendChild( script[ 0 ] ); + }, + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +}); + + + + +var oldCallbacks = [], + rjsonp = /(=)\?(?=&|$)|\?\?/; + +// Default jsonp settings +jQuery.ajaxSetup({ + jsonp: "callback", + jsonpCallback: function() { + var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) ); + this[ callback ] = true; + return callback; + } +}); + +// Detect, normalize options and install callbacks for jsonp requests +jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { + + var callbackName, overwritten, responseContainer, + jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ? + "url" : + typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data" + ); + + // Handle iff the expected data type is "jsonp" or we have a parameter to set + if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) { + + // Get callback name, remembering preexisting value associated with it + callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ? + s.jsonpCallback() : + s.jsonpCallback; + + // Insert callback into url or form data + if ( jsonProp ) { + s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName ); + } else if ( s.jsonp !== false ) { + s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; + } + + // Use data converter to retrieve json after script execution + s.converters["script json"] = function() { + if ( !responseContainer ) { + jQuery.error( callbackName + " was not called" ); + } + return responseContainer[ 0 ]; + }; + + // force json dataType + s.dataTypes[ 0 ] = "json"; + + // Install callback + overwritten = window[ callbackName ]; + window[ callbackName ] = function() { + responseContainer = arguments; + }; + + // Clean-up function (fires after converters) + jqXHR.always(function() { + // Restore preexisting value + window[ callbackName ] = overwritten; + + // Save back as free + if ( s[ callbackName ] ) { + // make sure that re-using the options doesn't screw things around + s.jsonpCallback = originalSettings.jsonpCallback; + + // save the callback name for future use + oldCallbacks.push( callbackName ); + } + + // Call if it was a function and we have a response + if ( responseContainer && jQuery.isFunction( overwritten ) ) { + overwritten( responseContainer[ 0 ] ); + } + + responseContainer = overwritten = undefined; + }); + + // Delegate to script + return "script"; + } +}); + + + + +// data: string of html +// context (optional): If specified, the fragment will be created in this context, defaults to document +// keepScripts (optional): If true, will include scripts passed in the html string +jQuery.parseHTML = function( data, context, keepScripts ) { + if ( !data || typeof data !== "string" ) { + return null; + } + if ( typeof context === "boolean" ) { + keepScripts = context; + context = false; + } + context = context || document; + + var parsed = rsingleTag.exec( data ), + scripts = !keepScripts && []; + + // Single tag + if ( parsed ) { + return [ context.createElement( parsed[1] ) ]; + } + + parsed = jQuery.buildFragment( [ data ], context, scripts ); + + if ( scripts && scripts.length ) { + jQuery( scripts ).remove(); + } + + return jQuery.merge( [], parsed.childNodes ); +}; + + +// Keep a copy of the old load method +var _load = jQuery.fn.load; + +/** + * Load a url into a page + */ +jQuery.fn.load = function( url, params, callback ) { + if ( typeof url !== "string" && _load ) { + return _load.apply( this, arguments ); + } + + var selector, type, response, + self = this, + off = url.indexOf(" "); + + if ( off >= 0 ) { + selector = jQuery.trim( url.slice( off ) ); + url = url.slice( 0, off ); + } + + // If it's a function + if ( jQuery.isFunction( params ) ) { + + // We assume that it's the callback + callback = params; + params = undefined; + + // Otherwise, build a param string + } else if ( params && typeof params === "object" ) { + type = "POST"; + } + + // If we have elements to modify, make the request + if ( self.length > 0 ) { + jQuery.ajax({ + url: url, + + // if "type" variable is undefined, then "GET" method will be used + type: type, + dataType: "html", + data: params + }).done(function( responseText ) { + + // Save response for use in complete callback + response = arguments; + + self.html( selector ? + + // If a selector was specified, locate the right elements in a dummy div + // Exclude scripts to avoid IE 'Permission Denied' errors + jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) : + + // Otherwise use the full result + responseText ); + + }).complete( callback && function( jqXHR, status ) { + self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] ); + }); + } + + return this; +}; + + + + +// Attach a bunch of functions for handling common AJAX events +jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ) { + jQuery.fn[ type ] = function( fn ) { + return this.on( type, fn ); + }; +}); + + + + +jQuery.expr.filters.animated = function( elem ) { + return jQuery.grep(jQuery.timers, function( fn ) { + return elem === fn.elem; + }).length; +}; + + + + +var docElem = window.document.documentElement; + +/** + * Gets a window from an element + */ +function getWindow( elem ) { + return jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView; +} + +jQuery.offset = { + setOffset: function( elem, options, i ) { + var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition, + position = jQuery.css( elem, "position" ), + curElem = jQuery( elem ), + props = {}; + + // Set position first, in-case top/left are set even on static elem + if ( position === "static" ) { + elem.style.position = "relative"; + } + + curOffset = curElem.offset(); + curCSSTop = jQuery.css( elem, "top" ); + curCSSLeft = jQuery.css( elem, "left" ); + calculatePosition = ( position === "absolute" || position === "fixed" ) && + ( curCSSTop + curCSSLeft ).indexOf("auto") > -1; + + // Need to be able to calculate position if either + // top or left is auto and position is either absolute or fixed + if ( calculatePosition ) { + curPosition = curElem.position(); + curTop = curPosition.top; + curLeft = curPosition.left; + + } else { + curTop = parseFloat( curCSSTop ) || 0; + curLeft = parseFloat( curCSSLeft ) || 0; + } + + if ( jQuery.isFunction( options ) ) { + options = options.call( elem, i, curOffset ); + } + + if ( options.top != null ) { + props.top = ( options.top - curOffset.top ) + curTop; + } + if ( options.left != null ) { + props.left = ( options.left - curOffset.left ) + curLeft; + } + + if ( "using" in options ) { + options.using.call( elem, props ); + + } else { + curElem.css( props ); + } + } +}; + +jQuery.fn.extend({ + offset: function( options ) { + if ( arguments.length ) { + return options === undefined ? + this : + this.each(function( i ) { + jQuery.offset.setOffset( this, options, i ); + }); + } + + var docElem, win, + elem = this[ 0 ], + box = { top: 0, left: 0 }, + doc = elem && elem.ownerDocument; + + if ( !doc ) { + return; + } + + docElem = doc.documentElement; + + // Make sure it's not a disconnected DOM node + if ( !jQuery.contains( docElem, elem ) ) { + return box; + } + + // Support: BlackBerry 5, iOS 3 (original iPhone) + // If we don't have gBCR, just use 0,0 rather than error + if ( typeof elem.getBoundingClientRect !== strundefined ) { + box = elem.getBoundingClientRect(); + } + win = getWindow( doc ); + return { + top: box.top + win.pageYOffset - docElem.clientTop, + left: box.left + win.pageXOffset - docElem.clientLeft + }; + }, + + position: function() { + if ( !this[ 0 ] ) { + return; + } + + var offsetParent, offset, + elem = this[ 0 ], + parentOffset = { top: 0, left: 0 }; + + // Fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is its only offset parent + if ( jQuery.css( elem, "position" ) === "fixed" ) { + // Assume getBoundingClientRect is there when computed position is fixed + offset = elem.getBoundingClientRect(); + + } else { + // Get *real* offsetParent + offsetParent = this.offsetParent(); + + // Get correct offsets + offset = this.offset(); + if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) { + parentOffset = offsetParent.offset(); + } + + // Add offsetParent borders + parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ); + parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true ); + } + + // Subtract parent offsets and element margins + return { + top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ), + left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true ) + }; + }, + + offsetParent: function() { + return this.map(function() { + var offsetParent = this.offsetParent || docElem; + + while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position" ) === "static" ) ) { + offsetParent = offsetParent.offsetParent; + } + + return offsetParent || docElem; + }); + } +}); + +// Create scrollLeft and scrollTop methods +jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) { + var top = "pageYOffset" === prop; + + jQuery.fn[ method ] = function( val ) { + return access( this, function( elem, method, val ) { + var win = getWindow( elem ); + + if ( val === undefined ) { + return win ? win[ prop ] : elem[ method ]; + } + + if ( win ) { + win.scrollTo( + !top ? val : window.pageXOffset, + top ? val : window.pageYOffset + ); + + } else { + elem[ method ] = val; + } + }, method, val, arguments.length, null ); + }; +}); + +// Support: Safari<7+, Chrome<37+ +// Add the top/left cssHooks using jQuery.fn.position +// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 +// Blink bug: https://code.google.com/p/chromium/issues/detail?id=229280 +// getComputedStyle returns percent when specified for top/left/bottom/right; +// rather than make the css module depend on the offset module, just check for it here +jQuery.each( [ "top", "left" ], function( i, prop ) { + jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition, + function( elem, computed ) { + if ( computed ) { + computed = curCSS( elem, prop ); + // If curCSS returns percentage, fallback to offset + return rnumnonpx.test( computed ) ? + jQuery( elem ).position()[ prop ] + "px" : + computed; + } + } + ); +}); + + +// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods +jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { + jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) { + // Margin is only for outerHeight, outerWidth + jQuery.fn[ funcName ] = function( margin, value ) { + var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), + extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); + + return access( this, function( elem, type, value ) { + var doc; + + if ( jQuery.isWindow( elem ) ) { + // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there + // isn't a whole lot we can do. See pull request at this URL for discussion: + // https://github.com/jquery/jquery/pull/764 + return elem.document.documentElement[ "client" + name ]; + } + + // Get document width or height + if ( elem.nodeType === 9 ) { + doc = elem.documentElement; + + // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], + // whichever is greatest + return Math.max( + elem.body[ "scroll" + name ], doc[ "scroll" + name ], + elem.body[ "offset" + name ], doc[ "offset" + name ], + doc[ "client" + name ] + ); + } + + return value === undefined ? + // Get width or height on the element, requesting but not forcing parseFloat + jQuery.css( elem, type, extra ) : + + // Set width or height on the element + jQuery.style( elem, type, value, extra ); + }, type, chainable ? margin : undefined, chainable, null ); + }; + }); +}); + + +// The number of elements contained in the matched element set +jQuery.fn.size = function() { + return this.length; +}; + +jQuery.fn.andSelf = jQuery.fn.addBack; + + + + +// Register as a named AMD module, since jQuery can be concatenated with other +// files that may use define, but not via a proper concatenation script that +// understands anonymous AMD modules. A named AMD is safest and most robust +// way to register. Lowercase jquery is used because AMD module names are +// derived from file names, and jQuery is normally delivered in a lowercase +// file name. Do this after creating the global so that if an AMD module wants +// to call noConflict to hide this version of jQuery, it will work. + +// Note that for maximum portability, libraries that are not jQuery should +// declare themselves as anonymous modules, and avoid setting a global if an +// AMD loader is present. jQuery is a special case. For more information, see +// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon + +if ( typeof define === "function" && define.amd ) { + define( "jquery", [], function() { + return jQuery; + }); +} + + + + +var + // Map over jQuery in case of overwrite + _jQuery = window.jQuery, + + // Map over the $ in case of overwrite + _$ = window.$; + +jQuery.noConflict = function( deep ) { + if ( window.$ === jQuery ) { + window.$ = _$; + } + + if ( deep && window.jQuery === jQuery ) { + window.jQuery = _jQuery; + } + + return jQuery; +}; + +// Expose jQuery and $ identifiers, even in AMD +// (#7102#comment:10, https://github.com/jquery/jquery/pull/557) +// and CommonJS for browser emulators (#13566) +if ( typeof noGlobal === strundefined ) { + window.jQuery = window.$ = jQuery; +} + + + + +return jQuery; + +})); + +!function(a){!function(){var a=function(b){var c=new a.Index;return c.pipeline.add(a.trimmer,a.stopWordFilter,a.stemmer),b&&b.call(c,c),c};a.version="0.7.0",a.utils={},a.utils.warn=function(a){return function(b){a.console&&console.warn&&console.warn(b)}}(this),a.utils.asString=function(a){return void 0===a||null===a?"":a.toString()},a.EventEmitter=function(){this.events={}},a.EventEmitter.prototype.addListener=function(){var a=Array.prototype.slice.call(arguments),b=a.pop(),c=a;if("function"!=typeof b)throw new TypeError("last argument must be a function");c.forEach(function(a){this.hasHandler(a)||(this.events[a]=[]),this.events[a].push(b)},this)},a.EventEmitter.prototype.removeListener=function(a,b){if(this.hasHandler(a)){var c=this.events[a].indexOf(b);this.events[a].splice(c,1),this.events[a].length||delete this.events[a]}},a.EventEmitter.prototype.emit=function(a){if(this.hasHandler(a)){var b=Array.prototype.slice.call(arguments,1);this.events[a].forEach(function(a){a.apply(void 0,b)})}},a.EventEmitter.prototype.hasHandler=function(a){return a in this.events},a.tokenizer=function(b){return arguments.length&&null!=b&&void 0!=b?Array.isArray(b)?b.map(function(b){return a.utils.asString(b).toLowerCase()}):b.toString().trim().toLowerCase().split(a.tokenizer.seperator):[]},a.tokenizer.seperator=/[\s\-]+/,a.tokenizer.load=function(a){var b=this.registeredFunctions[a];if(!b)throw new Error("Cannot load un-registered function: "+a);return b},a.tokenizer.label="default",a.tokenizer.registeredFunctions={default:a.tokenizer},a.tokenizer.registerFunction=function(b,c){c in this.registeredFunctions&&a.utils.warn("Overwriting existing tokenizer: "+c),b.label=c,this.registeredFunctions[c]=b},a.Pipeline=function(){this._stack=[]},a.Pipeline.registeredFunctions={},a.Pipeline.registerFunction=function(b,c){c in this.registeredFunctions&&a.utils.warn("Overwriting existing registered function: "+c),b.label=c,a.Pipeline.registeredFunctions[b.label]=b},a.Pipeline.warnIfFunctionNotRegistered=function(b){var c=b.label&&b.label in this.registeredFunctions;c||a.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",b)},a.Pipeline.load=function(b){var c=new a.Pipeline;return b.forEach(function(b){var d=a.Pipeline.registeredFunctions[b];if(!d)throw new Error("Cannot load un-registered function: "+b);c.add(d)}),c},a.Pipeline.prototype.add=function(){var b=Array.prototype.slice.call(arguments);b.forEach(function(b){a.Pipeline.warnIfFunctionNotRegistered(b),this._stack.push(b)},this)},a.Pipeline.prototype.after=function(b,c){a.Pipeline.warnIfFunctionNotRegistered(c);var d=this._stack.indexOf(b);if(-1==d)throw new Error("Cannot find existingFn");d+=1,this._stack.splice(d,0,c)},a.Pipeline.prototype.before=function(b,c){a.Pipeline.warnIfFunctionNotRegistered(c);var d=this._stack.indexOf(b);if(-1==d)throw new Error("Cannot find existingFn");this._stack.splice(d,0,c)},a.Pipeline.prototype.remove=function(a){var b=this._stack.indexOf(a);-1!=b&&this._stack.splice(b,1)},a.Pipeline.prototype.run=function(a){for(var b=[],c=a.length,d=this._stack.length,e=0;c>e;e++){for(var f=a[e],g=0;d>g&&(f=this._stack[g](f,e,a),void 0!==f&&""!==f);g++);void 0!==f&&""!==f&&b.push(f)}return b},a.Pipeline.prototype.reset=function(){this._stack=[]},a.Pipeline.prototype.toJSON=function(){return this._stack.map(function(b){return a.Pipeline.warnIfFunctionNotRegistered(b),b.label})},a.Vector=function(){this._magnitude=null,this.list=void 0,this.length=0},a.Vector.Node=function(a,b,c){this.idx=a,this.val=b,this.next=c},a.Vector.prototype.insert=function(b,c){this._magnitude=void 0;var d=this.list;if(!d)return this.list=new a.Vector.Node(b,c,d),this.length++;if(b<d.idx)return this.list=new a.Vector.Node(b,c,d),this.length++;for(var e=d,f=d.next;void 0!=f;){if(b<f.idx)return e.next=new a.Vector.Node(b,c,f),this.length++;e=f,f=f.next}return e.next=new a.Vector.Node(b,c,f),this.length++},a.Vector.prototype.magnitude=function(){if(this._magnitude)return this._magnitude;for(var a,b=this.list,c=0;b;)a=b.val,c+=a*a,b=b.next;return this._magnitude=Math.sqrt(c)},a.Vector.prototype.dot=function(a){for(var b=this.list,c=a.list,d=0;b&&c;)b.idx<c.idx?b=b.next:b.idx>c.idx?c=c.next:(d+=b.val*c.val,b=b.next,c=c.next);return d},a.Vector.prototype.similarity=function(a){return this.dot(a)/(this.magnitude()*a.magnitude())},a.SortedSet=function(){this.length=0,this.elements=[]},a.SortedSet.load=function(a){var b=new this;return b.elements=a,b.length=a.length,b},a.SortedSet.prototype.add=function(){var a,b;for(a=0;a<arguments.length;a++)b=arguments[a],~this.indexOf(b)||this.elements.splice(this.locationFor(b),0,b);this.length=this.elements.length},a.SortedSet.prototype.toArray=function(){return this.elements.slice()},a.SortedSet.prototype.map=function(a,b){return this.elements.map(a,b)},a.SortedSet.prototype.forEach=function(a,b){return this.elements.forEach(a,b)},a.SortedSet.prototype.indexOf=function(a){for(var b=0,c=this.elements.length,d=c-b,e=b+Math.floor(d/2),f=this.elements[e];d>1;){if(f===a)return e;a>f&&(b=e),f>a&&(c=e),d=c-b,e=b+Math.floor(d/2),f=this.elements[e]}return f===a?e:-1},a.SortedSet.prototype.locationFor=function(a){for(var b=0,c=this.elements.length,d=c-b,e=b+Math.floor(d/2),f=this.elements[e];d>1;)a>f&&(b=e),f>a&&(c=e),d=c-b,e=b+Math.floor(d/2),f=this.elements[e];return f>a?e:a>f?e+1:void 0},a.SortedSet.prototype.intersect=function(b){for(var c=new a.SortedSet,d=0,e=0,f=this.length,g=b.length,h=this.elements,i=b.elements;!(d>f-1||e>g-1);)h[d]!==i[e]?h[d]<i[e]?d++:h[d]>i[e]&&e++:(c.add(h[d]),d++,e++);return c},a.SortedSet.prototype.clone=function(){var b=new a.SortedSet;return b.elements=this.toArray(),b.length=b.elements.length,b},a.SortedSet.prototype.union=function(a){var b,c,d;this.length>=a.length?(b=this,c=a):(b=a,c=this),d=b.clone();for(var e=0,f=c.toArray();e<f.length;e++)d.add(f[e]);return d},a.SortedSet.prototype.toJSON=function(){return this.toArray()},a.Index=function(){this._fields=[],this._ref="id",this.pipeline=new a.Pipeline,this.documentStore=new a.Store,this.tokenStore=new a.TokenStore,this.corpusTokens=new a.SortedSet,this.eventEmitter=new a.EventEmitter,this.tokenizerFn=a.tokenizer,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},a.Index.prototype.on=function(){var a=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,a)},a.Index.prototype.off=function(a,b){return this.eventEmitter.removeListener(a,b)},a.Index.load=function(b){b.version!==a.version&&a.utils.warn("version mismatch: current "+a.version+" importing "+b.version);var c=new this;return c._fields=b.fields,c._ref=b.ref,c.tokenizer=a.tokenizer.load(b.tokenizer),c.documentStore=a.Store.load(b.documentStore),c.tokenStore=a.TokenStore.load(b.tokenStore),c.corpusTokens=a.SortedSet.load(b.corpusTokens),c.pipeline=a.Pipeline.load(b.pipeline),c},a.Index.prototype.field=function(a,b){var b=b||{},c={name:a,boost:b.boost||1};return this._fields.push(c),this},a.Index.prototype.ref=function(a){return this._ref=a,this},a.Index.prototype.tokenizer=function(b){var c=b.label&&b.label in a.tokenizer.registeredFunctions;return c||a.utils.warn("Function is not a registered tokenizer. This may cause problems when serialising the index"),this.tokenizerFn=b,this},a.Index.prototype.add=function(b,c){var d={},e=new a.SortedSet,f=b[this._ref],c=void 0===c||c;this._fields.forEach(function(a){var c=this.pipeline.run(this.tokenizerFn(b[a.name]));d[a.name]=c;for(var f=0;f<c.length;f++){var g=c[f];e.add(g),this.corpusTokens.add(g)}},this),this.documentStore.set(f,e);for(var g=0;g<e.length;g++){for(var h=e.elements[g],i=0,j=0;j<this._fields.length;j++){var k=this._fields[j],l=d[k.name],m=l.length;if(m){for(var n=0,o=0;m>o;o++)l[o]===h&&n++;i+=n/m*k.boost}}this.tokenStore.add(h,{ref:f,tf:i})}c&&this.eventEmitter.emit("add",b,this)},a.Index.prototype.remove=function(a,b){var c=a[this._ref],b=void 0===b||b;if(this.documentStore.has(c)){var d=this.documentStore.get(c);this.documentStore.remove(c),d.forEach(function(a){this.tokenStore.remove(a,c)},this),b&&this.eventEmitter.emit("remove",a,this)}},a.Index.prototype.update=function(a,b){var b=void 0===b||b;this.remove(a,!1),this.add(a,!1),b&&this.eventEmitter.emit("update",a,this)},a.Index.prototype.idf=function(a){var b="@"+a;if(Object.prototype.hasOwnProperty.call(this._idfCache,b))return this._idfCache[b];var c=this.tokenStore.count(a),d=1;return c>0&&(d=1+Math.log(this.documentStore.length/c)),this._idfCache[b]=d},a.Index.prototype.search=function(b){var c=this.pipeline.run(this.tokenizerFn(b)),d=new a.Vector,e=[],f=this._fields.reduce(function(a,b){return a+b.boost},0),g=c.some(function(a){return this.tokenStore.has(a)},this);if(!g)return[];c.forEach(function(b,c,g){var h=1/g.length*this._fields.length*f,i=this,j=this.tokenStore.expand(b).reduce(function(c,e){var f=i.corpusTokens.indexOf(e),g=i.idf(e),j=1,k=new a.SortedSet;if(e!==b){var l=Math.max(3,e.length-b.length);j=1/Math.log(l)}f>-1&&d.insert(f,h*g*j);for(var m=i.tokenStore.get(e),n=Object.keys(m),o=n.length,p=0;o>p;p++)k.add(m[n[p]].ref);return c.union(k)},new a.SortedSet);e.push(j)},this);var h=e.reduce(function(a,b){return a.intersect(b)});return h.map(function(a){return{ref:a,score:d.similarity(this.documentVector(a))}},this).sort(function(a,b){return b.score-a.score})},a.Index.prototype.documentVector=function(b){for(var c=this.documentStore.get(b),d=c.length,e=new a.Vector,f=0;d>f;f++){var g=c.elements[f],h=this.tokenStore.get(g)[b].tf,i=this.idf(g);e.insert(this.corpusTokens.indexOf(g),h*i)}return e},a.Index.prototype.toJSON=function(){return{version:a.version,fields:this._fields,ref:this._ref,tokenizer:this.tokenizerFn.label,documentStore:this.documentStore.toJSON(),tokenStore:this.tokenStore.toJSON(),corpusTokens:this.corpusTokens.toJSON(),pipeline:this.pipeline.toJSON()}},a.Index.prototype.use=function(a){var b=Array.prototype.slice.call(arguments,1);b.unshift(this),a.apply(this,b)},a.Store=function(){this.store={},this.length=0},a.Store.load=function(b){var c=new this;return c.length=b.length,c.store=Object.keys(b.store).reduce(function(c,d){return c[d]=a.SortedSet.load(b.store[d]),c},{}),c},a.Store.prototype.set=function(a,b){this.has(a)||this.length++,this.store[a]=b},a.Store.prototype.get=function(a){return this.store[a]},a.Store.prototype.has=function(a){return a in this.store},a.Store.prototype.remove=function(a){this.has(a)&&(delete this.store[a],this.length--)},a.Store.prototype.toJSON=function(){return{store:this.store,length:this.length}},a.stemmer=function(){var a={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},b={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},c="[^aeiou]",d="[aeiouy]",e=c+"[^aeiouy]*",f=d+"[aeiou]*",g="^("+e+")?"+f+e,h="^("+e+")?"+f+e+"("+f+")?$",i="^("+e+")?"+f+e+f+e,j="^("+e+")?"+d,k=new RegExp(g),l=new RegExp(i),m=new RegExp(h),n=new RegExp(j),o=/^(.+?)(ss|i)es$/,p=/^(.+?)([^s])s$/,q=/^(.+?)eed$/,r=/^(.+?)(ed|ing)$/,s=/.$/,t=/(at|bl|iz)$/,u=new RegExp("([^aeiouylsz])\\1$"),v=new RegExp("^"+e+d+"[^aeiouwxy]$"),w=/^(.+?[^aeiou])y$/,x=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,y=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,z=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,A=/^(.+?)(s|t)(ion)$/,B=/^(.+?)e$/,C=/ll$/,D=new RegExp("^"+e+d+"[^aeiouwxy]$"),E=function(c){var d,e,f,g,h,i,j;if(c.length<3)return c;if(f=c.substr(0,1),"y"==f&&(c=f.toUpperCase()+c.substr(1)),g=o,h=p,g.test(c)?c=c.replace(g,"$1$2"):h.test(c)&&(c=c.replace(h,"$1$2")),g=q,h=r,g.test(c)){var E=g.exec(c);g=k,g.test(E[1])&&(g=s,c=c.replace(g,""))}else if(h.test(c)){var E=h.exec(c);d=E[1],h=n,h.test(d)&&(c=d,h=t,i=u,j=v,h.test(c)?c+="e":i.test(c)?(g=s,c=c.replace(g,"")):j.test(c)&&(c+="e"))}if(g=w,g.test(c)){var E=g.exec(c);d=E[1],c=d+"i"}if(g=x,g.test(c)){var E=g.exec(c);d=E[1],e=E[2],g=k,g.test(d)&&(c=d+a[e])}if(g=y,g.test(c)){var E=g.exec(c);d=E[1],e=E[2],g=k,g.test(d)&&(c=d+b[e])}if(g=z,h=A,g.test(c)){var E=g.exec(c);d=E[1],g=l,g.test(d)&&(c=d)}else if(h.test(c)){var E=h.exec(c);d=E[1]+E[2],h=l,h.test(d)&&(c=d)}if(g=B,g.test(c)){var E=g.exec(c);d=E[1],g=l,h=m,i=D,(g.test(d)||h.test(d)&&!i.test(d))&&(c=d)}return g=C,h=l,g.test(c)&&h.test(c)&&(g=s,c=c.replace(g,"")),"y"==f&&(c=f.toLowerCase()+c.substr(1)),c};return E}(),a.Pipeline.registerFunction(a.stemmer,"stemmer"),a.generateStopWordFilter=function(a){var b=a.reduce(function(a,b){return a[b]=b,a},{});return function(a){return a&&b[a]!==a?a:void 0}},a.stopWordFilter=a.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),a.Pipeline.registerFunction(a.stopWordFilter,"stopWordFilter"),a.trimmer=function(a){return a.replace(/^\W+/,"").replace(/\W+$/,"")},a.Pipeline.registerFunction(a.trimmer,"trimmer"),a.TokenStore=function(){this.root={docs:{}},this.length=0},a.TokenStore.load=function(a){var b=new this;return b.root=a.root,b.length=a.length,b},a.TokenStore.prototype.add=function(a,b,c){var c=c||this.root,d=a.charAt(0),e=a.slice(1);return d in c||(c[d]={docs:{}}),0===e.length?(c[d].docs[b.ref]=b,void(this.length+=1)):this.add(e,b,c[d])},a.TokenStore.prototype.has=function(a){if(!a)return!1;for(var b=this.root,c=0;c<a.length;c++){if(!b[a.charAt(c)])return!1;b=b[a.charAt(c)]}return!0},a.TokenStore.prototype.getNode=function(a){if(!a)return{};for(var b=this.root,c=0;c<a.length;c++){if(!b[a.charAt(c)])return{};b=b[a.charAt(c)]}return b},a.TokenStore.prototype.get=function(a,b){return this.getNode(a,b).docs||{}},a.TokenStore.prototype.count=function(a,b){return Object.keys(this.get(a,b)).length},a.TokenStore.prototype.remove=function(a,b){if(a){for(var c=this.root,d=0;d<a.length;d++){if(!(a.charAt(d)in c))return;c=c[a.charAt(d)]}delete c.docs[b]}},a.TokenStore.prototype.expand=function(a,b){var c=this.getNode(a),d=c.docs||{},b=b||[];return Object.keys(d).length&&b.push(a),Object.keys(c).forEach(function(c){"docs"!==c&&b.concat(this.expand(a+c,b))},this),b},a.TokenStore.prototype.toJSON=function(){return{root:this.root,length:this.length}},function(a,b){"function"==typeof define&&define.amd?define(b):"object"==typeof exports?module.exports=b():a.lunr=b()}(this,function(){return a})}(),a.fn.ghostHunter=function(b){var d=a.extend({},a.fn.ghostHunter.defaults,b);if(d.results)return c.init(this,d),c},a.fn.ghostHunter.defaults={resultsData:!1,onPageLoad:!1,onKeyUp:!1,result_template:"<a href='{{link}}'><p><h2>{{title}}</h2><h4>{{prettyPubDate}}</h4></p></a>",info_template:"<p>Number of posts found: {{amount}}</p>",displaySearchInfo:!0,zeroResultsInfo:!0,before:!1,onComplete:!1,includepages:!1,filterfields:!1};var b=function(a){var b=new Date(a),c=["January","February","March","April","May","June","July","August","September","October","November","December"];return b.getDate()+" "+c[b.getMonth()]+" "+b.getFullYear()},c={isInit:!1,init:function(a,b){var c=this;this.target=a,this.results=b.results,this.blogData={},this.result_template=b.result_template,this.info_template=b.info_template,this.zeroResultsInfo=b.zeroResultsInfo,this.displaySearchInfo=b.displaySearchInfo,this.before=b.before,this.onComplete=b.onComplete,this.includepages=b.includepages,this.filterfields=b.filterfields,this.index=lunr(function(){this.field("title",{boost:10}),this.field("description"),this.field("link"),this.field("markdown",{boost:5}),this.field("pubDate"),this.field("tag"),this.ref("id")}),b.onPageLoad?c.loadAPI():a.focus(function(){c.loadAPI()}),a.closest("form").submit(function(b){b.preventDefault(),c.find(a.val())}),b.onKeyUp&&a.keyup(function(){c.find(a.val())})},loadAPI:function(){if(this.isInit)return!1;var c=this.index,d=this.blogData;obj={limit:"all",include:"tags"},this.includepages&&(obj.filter="(page:true,page:false)"),a.get(ghost.url.api("posts",obj)).done(function(a){searchData=a.posts,searchData.forEach(function(a){var e=a.tags.map(function(a){return a.name});null==a.meta_description&&(a.meta_description="");var f=e.join(", ");f.length<1&&(f="undefined");var g={id:String(a.id),title:String(a.title),description:String(a.meta_description),markdown:String(a.markdown),pubDate:String(a.created_at),tag:f,link:String(a.url)};g.prettyPubDate=b(g.pubDate);var h=b(g.pubDate);c.add(g),d[a.id]={title:a.title,description:a.meta_description,pubDate:h,link:a.url}})}),this.isInit=!0},find:function(b){var c=this.index.search(b),d=a(this.results),e=[];d.empty(),this.before&&this.before(),(this.zeroResultsInfo||c.length>0)&&this.displaySearchInfo&&d.append(this.format(this.info_template,{amount:c.length}));for(var f=0;f<c.length;f++){var g=c[f].ref,h=this.blogData[g];d.append(this.format(this.result_template,h)),e.push(h)}this.onComplete&&this.onComplete(e)},clear:function(){a(this.results).empty(),this.target.val("")},format:function(a,b){return a.replace(/{{([^{}]*)}}/g,function(a,c){var d=b[c];return"string"==typeof d||"number"==typeof d?d:a})}}}(jQuery); +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under the MIT license + */ +if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1||b[0]>3)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){if(a(b.target).is(this))return b.handleObj.handler.apply(this,arguments)}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.7",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a("#"===f?[]:f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.7",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c).prop(c,!0)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c).prop(c,!1))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target).closest(".btn");b.call(d,"toggle"),a(c.target).is('input[type="radio"], input[type="checkbox"]')||(c.preventDefault(),d.is("input,button")?d.trigger("focus"):d.find("input:visible,button:visible").first().trigger("focus"))}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.7",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(a>this.$items.length-1||a<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){if(!this.sliding)return this.slide("next")},c.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.7",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger(a.Event("hidden.bs.dropdown",f)))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.7",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger(a.Event("shown.bs.dropdown",h))}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",c).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f,g.prototype.keydown).on("keydown.bs.dropdown.data-api",".dropdown-menu",g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.3.7",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){d.$element.one("mouseup.dismiss.bs.modal",function(b){a(b.target).is(d.$element)&&(d.ignoreBackdropClick=!0)})}),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),d.adjustDialog(),e&&d.$element[0].offsetWidth,d.$element.addClass("in"),d.enforceFocus();var f=a.Event("shown.bs.modal",{relatedTarget:b});e?d.$dialog.one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){document===a.target||this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},c.prototype.resize=function(){this.isShown?a(window).on("resize.bs.modal",a.proxy(this.handleUpdate,this)):a(window).off("resize.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("modal-open"),a.resetAdjustments(),a.resetScrollbar(),a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a(document.createElement("div")).addClass("modal-backdrop "+e).appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){return this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;f?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.handleUpdate=function(){this.adjustDialog()},c.prototype.adjustDialog=function(){var a=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth<a,this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init("tooltip",a,b)};c.VERSION="3.3.7",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);if(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),!c.isInStateTrue())return clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-m<o.top?"bottom":"right"==h&&k.right+l>o.width?"left":"left"==h&&k.left-l<o.left?"right":h,f.removeClass(n).addClass(h)}var p=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(p,h);var q=function(){var a=e.hoverState;e.$element.trigger("shown.bs."+e.type),e.hoverState=null,"out"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",q).emulateTransitionEnd(c.TRANSITION_DURATION):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top+=g,b.left+=h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?"left":"top",50*(1-a/b)+"%").css(c?"top":"left","")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(b){function d(){"in"!=e.hoverState&&f.detach(),e.$element&&e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),b&&b()}var e=this,f=a(this.$tip),g=a.Event("hide.bs."+this.type);if(this.$element.trigger(g),!g.isDefaultPrevented())return f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=window.SVGElement&&c instanceof window.SVGElement,g=d?{top:0,left:0}:f?null:b.offset(),h={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},i=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,h,i,g)},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null,a.$element=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.7",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.7",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return this.activeTarget=null,this.clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(void 0===e[a+1]||b<e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){ +this.activeTarget=b,this.clear();var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.3.7",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]})})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.7",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return e<c&&"top";if("bottom"==this.affixed)return null!=c?!(e+this.unpin<=f.top)&&"bottom":!(e+g<=a-d)&&"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&e<=c?"top":null!=d&&i+j>=a-d&&"bottom"},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); + +/* ********************************************** + Begin prism-core.js +********************************************** */ + +var _self = (typeof window !== 'undefined') + ? window // if in browser + : ( + (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope) + ? self // if in worker + : {} // if in node js + ); + +/** + * Prism: Lightweight, robust, elegant syntax highlighting + * MIT license http://www.opensource.org/licenses/mit-license.php/ + * @author Lea Verou http://lea.verou.me + */ + +var Prism = (function(){ + +// Private helper vars +var lang = /\blang(?:uage)?-(?!\*)(\w+)\b/i; + +var _ = _self.Prism = { + util: { + encode: function (tokens) { + if (tokens instanceof Token) { + return new Token(tokens.type, _.util.encode(tokens.content), tokens.alias); + } else if (_.util.type(tokens) === 'Array') { + return tokens.map(_.util.encode); + } else { + return tokens.replace(/&/g, '&').replace(/</g, '<').replace(/\u00a0/g, ' '); + } + }, + + type: function (o) { + return Object.prototype.toString.call(o).match(/\[object (\w+)\]/)[1]; + }, + + // Deep clone a language definition (e.g. to extend it) + clone: function (o) { + var type = _.util.type(o); + + switch (type) { + case 'Object': + var clone = {}; + + for (var key in o) { + if (o.hasOwnProperty(key)) { + clone[key] = _.util.clone(o[key]); + } + } + + return clone; + + case 'Array': + // Check for existence for IE8 + return o.map && o.map(function(v) { return _.util.clone(v); }); + } + + return o; + } + }, + + languages: { + extend: function (id, redef) { + var lang = _.util.clone(_.languages[id]); + + for (var key in redef) { + lang[key] = redef[key]; + } + + return lang; + }, + + /** + * Insert a token before another token in a language literal + * As this needs to recreate the object (we cannot actually insert before keys in object literals), + * we cannot just provide an object, we need anobject and a key. + * @param inside The key (or language id) of the parent + * @param before The key to insert before. If not provided, the function appends instead. + * @param insert Object with the key/value pairs to insert + * @param root The object that contains `inside`. If equal to Prism.languages, it can be omitted. + */ + insertBefore: function (inside, before, insert, root) { + root = root || _.languages; + var grammar = root[inside]; + + if (arguments.length == 2) { + insert = arguments[1]; + + for (var newToken in insert) { + if (insert.hasOwnProperty(newToken)) { + grammar[newToken] = insert[newToken]; + } + } + + return grammar; + } + + var ret = {}; + + for (var token in grammar) { + + if (grammar.hasOwnProperty(token)) { + + if (token == before) { + + for (var newToken in insert) { + + if (insert.hasOwnProperty(newToken)) { + ret[newToken] = insert[newToken]; + } + } + } + + ret[token] = grammar[token]; + } + } + + // Update references in other language definitions + _.languages.DFS(_.languages, function(key, value) { + if (value === root[inside] && key != inside) { + this[key] = ret; + } + }); + + return root[inside] = ret; + }, + + // Traverse a language definition with Depth First Search + DFS: function(o, callback, type) { + for (var i in o) { + if (o.hasOwnProperty(i)) { + callback.call(o, i, o[i], type || i); + + if (_.util.type(o[i]) === 'Object') { + _.languages.DFS(o[i], callback); + } + else if (_.util.type(o[i]) === 'Array') { + _.languages.DFS(o[i], callback, i); + } + } + } + } + }, + plugins: {}, + + highlightAll: function(async, callback) { + var elements = document.querySelectorAll('code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'); + + for (var i=0, element; element = elements[i++];) { + _.highlightElement(element, async === true, callback); + } + }, + + highlightElement: function(element, async, callback) { + // Find language + var language, grammar, parent = element; + + while (parent && !lang.test(parent.className)) { + parent = parent.parentNode; + } + + if (parent) { + language = (parent.className.match(lang) || [,''])[1]; + grammar = _.languages[language]; + } + + // Set language on the element, if not present + element.className = element.className.replace(lang, '').replace(/\s+/g, ' ') + ' language-' + language; + + // Set language on the parent, for styling + parent = element.parentNode; + + if (/pre/i.test(parent.nodeName)) { + parent.className = parent.className.replace(lang, '').replace(/\s+/g, ' ') + ' language-' + language; + } + + var code = element.textContent; + + var env = { + element: element, + language: language, + grammar: grammar, + code: code + }; + + if (!code || !grammar) { + _.hooks.run('complete', env); + return; + } + + _.hooks.run('before-highlight', env); + + if (async && _self.Worker) { + var worker = new Worker(_.filename); + + worker.onmessage = function(evt) { + env.highlightedCode = evt.data; + + _.hooks.run('before-insert', env); + + env.element.innerHTML = env.highlightedCode; + + callback && callback.call(env.element); + _.hooks.run('after-highlight', env); + _.hooks.run('complete', env); + }; + + worker.postMessage(JSON.stringify({ + language: env.language, + code: env.code, + immediateClose: true + })); + } + else { + env.highlightedCode = _.highlight(env.code, env.grammar, env.language); + + _.hooks.run('before-insert', env); + + env.element.innerHTML = env.highlightedCode; + + callback && callback.call(element); + + _.hooks.run('after-highlight', env); + _.hooks.run('complete', env); + } + }, + + highlight: function (text, grammar, language) { + var tokens = _.tokenize(text, grammar); + return Token.stringify(_.util.encode(tokens), language); + }, + + tokenize: function(text, grammar, language) { + var Token = _.Token; + + var strarr = [text]; + + var rest = grammar.rest; + + if (rest) { + for (var token in rest) { + grammar[token] = rest[token]; + } + + delete grammar.rest; + } + + tokenloop: for (var token in grammar) { + if(!grammar.hasOwnProperty(token) || !grammar[token]) { + continue; + } + + var patterns = grammar[token]; + patterns = (_.util.type(patterns) === "Array") ? patterns : [patterns]; + + for (var j = 0; j < patterns.length; ++j) { + var pattern = patterns[j], + inside = pattern.inside, + lookbehind = !!pattern.lookbehind, + lookbehindLength = 0, + alias = pattern.alias; + + pattern = pattern.pattern || pattern; + + for (var i=0; i<strarr.length; i++) { // Don’t cache length as it changes during the loop + + var str = strarr[i]; + + if (strarr.length > text.length) { + // Something went terribly wrong, ABORT, ABORT! + break tokenloop; + } + + if (str instanceof Token) { + continue; + } + + pattern.lastIndex = 0; + + var match = pattern.exec(str); + + if (match) { + if(lookbehind) { + lookbehindLength = match[1].length; + } + + var from = match.index - 1 + lookbehindLength, + match = match[0].slice(lookbehindLength), + len = match.length, + to = from + len, + before = str.slice(0, from + 1), + after = str.slice(to + 1); + + var args = [i, 1]; + + if (before) { + args.push(before); + } + + var wrapped = new Token(token, inside? _.tokenize(match, inside) : match, alias); + + args.push(wrapped); + + if (after) { + args.push(after); + } + + Array.prototype.splice.apply(strarr, args); + } + } + } + } + + return strarr; + }, + + hooks: { + all: {}, + + add: function (name, callback) { + var hooks = _.hooks.all; + + hooks[name] = hooks[name] || []; + + hooks[name].push(callback); + }, + + run: function (name, env) { + var callbacks = _.hooks.all[name]; + + if (!callbacks || !callbacks.length) { + return; + } + + for (var i=0, callback; callback = callbacks[i++];) { + callback(env); + } + } + } +}; + +var Token = _.Token = function(type, content, alias) { + this.type = type; + this.content = content; + this.alias = alias; +}; + +Token.stringify = function(o, language, parent) { + if (typeof o == 'string') { + return o; + } + + if (_.util.type(o) === 'Array') { + return o.map(function(element) { + return Token.stringify(element, language, o); + }).join(''); + } + + var env = { + type: o.type, + content: Token.stringify(o.content, language, parent), + tag: 'span', + classes: ['token', o.type], + attributes: {}, + language: language, + parent: parent + }; + + if (env.type == 'comment') { + env.attributes['spellcheck'] = 'true'; + } + + if (o.alias) { + var aliases = _.util.type(o.alias) === 'Array' ? o.alias : [o.alias]; + Array.prototype.push.apply(env.classes, aliases); + } + + _.hooks.run('wrap', env); + + var attributes = ''; + + for (var name in env.attributes) { + attributes += (attributes ? ' ' : '') + name + '="' + (env.attributes[name] || '') + '"'; + } + + return '<' + env.tag + ' class="' + env.classes.join(' ') + '" ' + attributes + '>' + env.content + '</' + env.tag + '>'; + +}; + +if (!_self.document) { + if (!_self.addEventListener) { + // in Node.js + return _self.Prism; + } + // In worker + _self.addEventListener('message', function(evt) { + var message = JSON.parse(evt.data), + lang = message.language, + code = message.code, + immediateClose = message.immediateClose; + + _self.postMessage(_.highlight(code, _.languages[lang], lang)); + if (immediateClose) { + _self.close(); + } + }, false); + + return _self.Prism; +} + +// Get current script and highlight +var script = document.getElementsByTagName('script'); + +script = script[script.length - 1]; + +if (script) { + _.filename = script.src; + + if (document.addEventListener && !script.hasAttribute('data-manual')) { + document.addEventListener('DOMContentLoaded', _.highlightAll); + } +} + +return _self.Prism; + +})(); + +if (typeof module !== 'undefined' && module.exports) { + module.exports = Prism; +} + +// hack for components to work correctly in node.js +if (typeof global !== 'undefined') { + global.Prism = Prism; +} + + +/* ********************************************** + Begin prism-markup.js +********************************************** */ + +Prism.languages.markup = { + 'comment': /<!--[\w\W]*?-->/, + 'prolog': /<\?[\w\W]+?\?>/, + 'doctype': /<!DOCTYPE[\w\W]+?>/, + 'cdata': /<!\[CDATA\[[\w\W]*?]]>/i, + 'tag': { + pattern: /<\/?(?!\d)[^\s>\/=.$<]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\\1|\\?(?!\1)[\w\W])*\1|[^\s'">=]+))?)*\s*\/?>/i, + inside: { + 'tag': { + pattern: /^<\/?[^\s>\/]+/i, + inside: { + 'punctuation': /^<\/?/, + 'namespace': /^[^\s>\/:]+:/ + } + }, + 'attr-value': { + pattern: /=(?:('|")[\w\W]*?(\1)|[^\s>]+)/i, + inside: { + 'punctuation': /[=>"']/ + } + }, + 'punctuation': /\/?>/, + 'attr-name': { + pattern: /[^\s>\/]+/, + inside: { + 'namespace': /^[^\s>\/:]+:/ + } + } + + } + }, + 'entity': /&#?[\da-z]{1,8};/i +}; + +// Plugin to make entity title show the real entity, idea by Roman Komarov +Prism.hooks.add('wrap', function(env) { + + if (env.type === 'entity') { + env.attributes['title'] = env.content.replace(/&/, '&'); + } +}); + +Prism.languages.xml = Prism.languages.markup; +Prism.languages.html = Prism.languages.markup; +Prism.languages.mathml = Prism.languages.markup; +Prism.languages.svg = Prism.languages.markup; + + +/* ********************************************** + Begin prism-css.js +********************************************** */ + +Prism.languages.css = { + 'comment': /\/\*[\w\W]*?\*\//, + 'atrule': { + pattern: /@[\w-]+?.*?(;|(?=\s*\{))/i, + inside: { + 'rule': /@[\w-]+/ + // See rest below + } + }, + 'url': /url\((?:(["'])(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1|.*?)\)/i, + 'selector': /[^\{\}\s][^\{\};]*?(?=\s*\{)/, + 'string': /("|')(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1/, + 'property': /(\b|\B)[\w-]+(?=\s*:)/i, + 'important': /\B!important\b/i, + 'function': /[-a-z0-9]+(?=\()/i, + 'punctuation': /[(){};:]/ +}; + +Prism.languages.css['atrule'].inside.rest = Prism.util.clone(Prism.languages.css); + +if (Prism.languages.markup) { + Prism.languages.insertBefore('markup', 'tag', { + 'style': { + pattern: /(<style[\w\W]*?>)[\w\W]*?(?=<\/style>)/i, + lookbehind: true, + inside: Prism.languages.css, + alias: 'language-css' + } + }); + + Prism.languages.insertBefore('inside', 'attr-value', { + 'style-attr': { + pattern: /\s*style=("|').*?\1/i, + inside: { + 'attr-name': { + pattern: /^\s*style/i, + inside: Prism.languages.markup.tag.inside + }, + 'punctuation': /^\s*=\s*['"]|['"]\s*$/, + 'attr-value': { + pattern: /.+/i, + inside: Prism.languages.css + } + }, + alias: 'language-css' + } + }, Prism.languages.markup.tag); +} + +/* ********************************************** + Begin prism-clike.js +********************************************** */ + +Prism.languages.clike = { + 'comment': [ + { + pattern: /(^|[^\\])\/\*[\w\W]*?\*\//, + lookbehind: true + }, + { + pattern: /(^|[^\\:])\/\/.*/, + lookbehind: true + } + ], + 'string': /(["'])(\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/, + 'class-name': { + pattern: /((?:\b(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[a-z0-9_\.\\]+/i, + lookbehind: true, + inside: { + punctuation: /(\.|\\)/ + } + }, + 'keyword': /\b(if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/, + 'boolean': /\b(true|false)\b/, + 'function': /[a-z0-9_]+(?=\()/i, + 'number': /\b-?(?:0x[\da-f]+|\d*\.?\d+(?:e[+-]?\d+)?)\b/i, + 'operator': /--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*|\/|~|\^|%/, + 'punctuation': /[{}[\];(),.:]/ +}; + + +/* ********************************************** + Begin prism-javascript.js +********************************************** */ + +Prism.languages.javascript = Prism.languages.extend('clike', { + 'keyword': /\b(as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|var|void|while|with|yield)\b/, + 'number': /\b-?(0x[\dA-Fa-f]+|0b[01]+|0o[0-7]+|\d*\.?\d+([Ee][+-]?\d+)?|NaN|Infinity)\b/, + // Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444) + 'function': /[_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*(?=\()/i +}); + +Prism.languages.insertBefore('javascript', 'keyword', { + 'regex': { + pattern: /(^|[^/])\/(?!\/)(\[.+?]|\\.|[^/\\\r\n])+\/[gimyu]{0,5}(?=\s*($|[\r\n,.;})]))/, + lookbehind: true + } +}); + +Prism.languages.insertBefore('javascript', 'class-name', { + 'template-string': { + pattern: /`(?:\\`|\\?[^`])*`/, + inside: { + 'interpolation': { + pattern: /\$\{[^}]+\}/, + inside: { + 'interpolation-punctuation': { + pattern: /^\$\{|\}$/, + alias: 'punctuation' + }, + rest: Prism.languages.javascript + } + }, + 'string': /[\s\S]+/ + } + } +}); + +if (Prism.languages.markup) { + Prism.languages.insertBefore('markup', 'tag', { + 'script': { + pattern: /(<script[\w\W]*?>)[\w\W]*?(?=<\/script>)/i, + lookbehind: true, + inside: Prism.languages.javascript, + alias: 'language-javascript' + } + }); +} + +Prism.languages.js = Prism.languages.javascript; + +/* ********************************************** + Begin prism-file-highlight.js +********************************************** */ + +(function () { + if (typeof self === 'undefined' || !self.Prism || !self.document || !document.querySelector) { + return; + } + + self.Prism.fileHighlight = function() { + + var Extensions = { + 'js': 'javascript', + 'html': 'markup', + 'svg': 'markup', + 'xml': 'markup', + 'py': 'python', + 'rb': 'ruby', + 'ps1': 'powershell', + 'psm1': 'powershell' + }; + + if(Array.prototype.forEach) { // Check to prevent error in IE8 + Array.prototype.slice.call(document.querySelectorAll('pre[data-src]')).forEach(function (pre) { + var src = pre.getAttribute('data-src'); + + var language, parent = pre; + var lang = /\blang(?:uage)?-(?!\*)(\w+)\b/i; + while (parent && !lang.test(parent.className)) { + parent = parent.parentNode; + } + + if (parent) { + language = (pre.className.match(lang) || [, ''])[1]; + } + + if (!language) { + var extension = (src.match(/\.(\w+)$/) || [, ''])[1]; + language = Extensions[extension] || extension; + } + + var code = document.createElement('code'); + code.className = 'language-' + language; + + pre.textContent = ''; + + code.textContent = 'Loading…'; + + pre.appendChild(code); + + var xhr = new XMLHttpRequest(); + + xhr.open('GET', src, true); + + xhr.onreadystatechange = function () { + if (xhr.readyState == 4) { + + if (xhr.status < 400 && xhr.responseText) { + code.textContent = xhr.responseText; + + Prism.highlightElement(code); + } + else if (xhr.status >= 400) { + code.textContent = '✖ Error ' + xhr.status + ' while fetching file: ' + xhr.statusText; + } + else { + code.textContent = '✖ Error: File does not exist or is empty'; + } + } + }; + + xhr.send(null); + }); + } + + }; + + self.Prism.fileHighlight(); + +})(); diff --git a/source/javascripts/ie/backgroundsize.min.htc b/source/javascripts/ie/backgroundsize.min.htc new file mode 100644 index 0000000..9b2592e --- /dev/null +++ b/source/javascripts/ie/backgroundsize.min.htc @@ -0,0 +1,7 @@ +<component lightWeight="true"> +<attach event="onpropertychange" onevent="handlePropertychange()" /> +<attach event="ondetach" onevent="restore()" /> +<attach event="onresize" for="window" onevent="handleResize()" /> +<script type="text/javascript"> +var rsrc=/url\(["']?(.*?)["']?\)/,positions={top:0,left:0,bottom:1,right:1,center:0.5},doc=element.document;init(); function init(){var b=doc.createElement("div"),a=doc.createElement("img"),c,d;b.style.position="absolute";b.style.zIndex=-1;b.style.top=0;b.style.right=0;b.style.left=0;b.style.bottom=0;b.style.overflow="hidden";a.style.position="absolute";a.style.width=a.style.width="auto";b.appendChild(a);element.insertBefore(b,element.firstChild);d=[element.currentStyle.backgroundPositionX,element.currentStyle.backgroundPositionY];element.bgsExpando=c={wrapper:b,img:a,backgroundSize:element.currentStyle["background-size"], backgroundPositionX:positions[d[0]]||parseFloat(d[0])/100,backgroundPositionY:positions[d[1]]||parseFloat(d[1])/100};"auto"==element.currentStyle.zIndex&&(element.style.zIndex=0);"static"==element.currentStyle.position&&(element.style.position="relative");refreshDisplay(element,c)&&(refreshDimensions(element,c),refreshBackgroundImage(element,c,function(){updateBackground(element,c)}))} function refreshDisplay(b,a){var c=b.currentStyle.display;c!=a.display&&(a.display=c,a.somethingChanged=!0);return"none"!=c}function refreshDimensions(b,a){var c=b.offsetWidth-(parseFloat(b.currentStyle.borderLeftWidth)||0)-(parseFloat(b.currentStyle.borderRightWidth)||0),d=b.offsetHeight-(parseFloat(b.currentStyle.borderTopWidth)||0)-(parseFloat(b.currentStyle.borderBottomWidth)||0);if(c!=a.innerWidth||d!=a.innerHeight)a.innerWidth=c,a.innerHeight=d,a.somethingChanged=!0} function refreshBackgroundImage(b,a,c){var d=a.img,e=(rsrc.exec(b.currentStyle.backgroundImage)||[])[1];if(e&&e!=a.backgroundSrc){a.backgroundSrc=e;a.somethingChanged=!0;d.onload=function(){var b=d.width,e=d.height;1==b&&1==e||(a.imgWidth=b,a.imgHeight=e,a.constrain=!1,c(),d.style.visibility="visible",d.onload=null)};d.style.visibility="hidden";d.src=a.backgroundSrc;if(d.readyState||d.complete)d.src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==",d.src=a.backgroundSrc;a.ignoreNextPropertyChange= !0;b.style.backgroundImage="none"}else c()} function updateBackground(b,a){if(a.somethingChanged){var c=a.img,d=a.innerWidth/a.innerHeight,e=a.imgWidth/a.imgHeight,f=a.constrain;"contain"==a.backgroundSize?e>d?(a.constrain=d="width",e=Math.floor((a.innerHeight-a.innerWidth/e)*a.backgroundPositionY),c.style.top=e+"px",d!=f&&(c.style.width="100%",c.style.height="auto",c.style.left=0)):(a.constrain=d="height",e=Math.floor((a.innerWidth-a.innerHeight*e)*a.backgroundPositionX),c.style.left=e+"px",d!=f&&(c.style.width="auto",c.style.height="100%", c.style.top=0)):"cover"==a.backgroundSize&&(e>d?(a.constrain=d="height",e=Math.floor((a.innerHeight*e-a.innerWidth)*a.backgroundPositionX),c.style.left=-e+"px",d!=f&&(c.style.width="auto",c.style.height="100%",c.style.top=0)):(a.constrain=d="width",e=Math.floor((a.innerWidth/e-a.innerHeight)*a.backgroundPositionY),c.style.top=-e+"px",d!=f&&(c.style.width="100%",c.style.height="auto",c.style.left=0)));a.somethingChanged=!1}} function handlePropertychange(){var b=element.bgsExpando;b.ignoreNextPropertyChange?b.ignoreNextPropertyChange=!1:refreshDisplay(element,b)&&(refreshDimensions(element,b),refreshBackgroundImage(element,b,function(){updateBackground(element,b)}))}function handleResize(){var b=element.bgsExpando;"none"!=b.display&&(refreshDimensions(element,b),updateBackground(element,b))} function restore(){var b=element.bgsExpando;try{element.style.backgroundImage="url('"+b.backgroundSrc+"')",element.removeChild(b.wrapper),element.bgsExpando=null}catch(a){}}; +</script> \ No newline at end of file diff --git a/source/javascripts/ie/html5.js b/source/javascripts/ie/html5.js new file mode 100644 index 0000000..a788916 --- /dev/null +++ b/source/javascripts/ie/html5.js @@ -0,0 +1,7 @@ +/*! HTML5 Shiv v3.6 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed */ +/* Source: https://github.com/aFarkas/html5shiv */ +(function(l,f){function m(){var a=e.elements;return"string"==typeof a?a.split(" "):a}function i(a){var b=n[a[o]];b||(b={},h++,a[o]=h,n[h]=b);return b}function p(a,b,c){b||(b=f);if(g)return b.createElement(a);c||(c=i(b));b=c.cache[a]?c.cache[a].cloneNode():r.test(a)?(c.cache[a]=c.createElem(a)).cloneNode():c.createElem(a);return b.canHaveChildren&&!s.test(a)?c.frag.appendChild(b):b}function t(a,b){if(!b.cache)b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag(); +a.createElement=function(c){return!e.shivMethods?b.createElem(c):p(c,a,b)};a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+m().join().replace(/\w+/g,function(a){b.createElem(a);b.frag.createElement(a);return'c("'+a+'")'})+");return n}")(e,b.frag)}function q(a){a||(a=f);var b=i(a);if(e.shivCSS&&!j&&!b.hasCSS){var c,d=a;c=d.createElement("p");d=d.getElementsByTagName("head")[0]||d.documentElement;c.innerHTML="x<style>article,aside,figcaption,figure,footer,header,hgroup,nav,section{display:block}mark{background:#FF0;color:#000}</style>"; +c=d.insertBefore(c.lastChild,d.firstChild);b.hasCSS=!!c}g||t(a,b);return a}var k=l.html5||{},s=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,r=/^<|^(?:a|b|button|code|div|fieldset|form|h1|h2|h3|h4|h5|h6|i|iframe|img|input|label|li|link|ol|option|p|param|q|script|select|span|strong|style|table|tbody|td|textarea|tfoot|th|thead|tr|ul)$/i,j,o="_html5shiv",h=0,n={},g;(function(){try{var a=f.createElement("a");a.innerHTML="<xyz></xyz>";j="hidden"in a;var b;if(!(b=1==a.childNodes.length)){f.createElement("a"); +var c=f.createDocumentFragment();b="undefined"==typeof c.cloneNode||"undefined"==typeof c.createDocumentFragment||"undefined"==typeof c.createElement}g=b}catch(d){g=j=!0}})();var e={elements:k.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",shivCSS:!1!==k.shivCSS,supportsUnknownElements:g,shivMethods:!1!==k.shivMethods,type:"default",shivDocument:q,createElement:p,createDocumentFragment:function(a, +b){a||(a=f);if(g)return a.createDocumentFragment();for(var b=b||i(a),c=b.frag.cloneNode(),d=0,e=m(),h=e.length;d<h;d++)c.createElement(e[d]);return c}};l.html5=e;q(f)})(this,document); \ No newline at end of file diff --git a/source/javascripts/ie/html5shiv.js b/source/javascripts/ie/html5shiv.js new file mode 100644 index 0000000..dcf351c --- /dev/null +++ b/source/javascripts/ie/html5shiv.js @@ -0,0 +1,8 @@ +/* + HTML5 Shiv v3.6.2 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed +*/ +(function(l,f){function m(){var a=e.elements;return"string"==typeof a?a.split(" "):a}function i(a){var b=n[a[o]];b||(b={},h++,a[o]=h,n[h]=b);return b}function p(a,b,c){b||(b=f);if(g)return b.createElement(a);c||(c=i(b));b=c.cache[a]?c.cache[a].cloneNode():r.test(a)?(c.cache[a]=c.createElem(a)).cloneNode():c.createElem(a);return b.canHaveChildren&&!s.test(a)?c.frag.appendChild(b):b}function t(a,b){if(!b.cache)b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag(); +a.createElement=function(c){return!e.shivMethods?b.createElem(c):p(c,a,b)};a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+m().join().replace(/\w+/g,function(a){b.createElem(a);b.frag.createElement(a);return'c("'+a+'")'})+");return n}")(e,b.frag)}function q(a){a||(a=f);var b=i(a);if(e.shivCSS&&!j&&!b.hasCSS){var c,d=a;c=d.createElement("p");d=d.getElementsByTagName("head")[0]||d.documentElement;c.innerHTML="x<style>article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}</style>"; +c=d.insertBefore(c.lastChild,d.firstChild);b.hasCSS=!!c}g||t(a,b);return a}var k=l.html5||{},s=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,r=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,j,o="_html5shiv",h=0,n={},g;(function(){try{var a=f.createElement("a");a.innerHTML="<xyz></xyz>";j="hidden"in a;var b;if(!(b=1==a.childNodes.length)){f.createElement("a");var c=f.createDocumentFragment();b="undefined"==typeof c.cloneNode|| +"undefined"==typeof c.createDocumentFragment||"undefined"==typeof c.createElement}g=b}catch(d){g=j=!0}})();var e={elements:k.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup main mark meter nav output progress section summary time video",version:"3.6.2",shivCSS:!1!==k.shivCSS,supportsUnknownElements:g,shivMethods:!1!==k.shivMethods,type:"default",shivDocument:q,createElement:p,createDocumentFragment:function(a,b){a||(a=f);if(g)return a.createDocumentFragment(); +for(var b=b||i(a),c=b.frag.cloneNode(),d=0,e=m(),h=e.length;d<h;d++)c.createElement(e[d]);return c}};l.html5=e;q(f)})(this,document); diff --git a/source/javascripts/ie/respond.min.js b/source/javascripts/ie/respond.min.js new file mode 100644 index 0000000..e8d6207 --- /dev/null +++ b/source/javascripts/ie/respond.min.js @@ -0,0 +1,6 @@ +/*! Respond.js v1.4.2: min/max-width media query polyfill + * Copyright 2014 Scott Jehl + * Licensed under MIT + * http://j.mp/respondjs */ + +!function(a){"use strict";a.matchMedia=a.matchMedia||function(a){var b,c=a.documentElement,d=c.firstElementChild||c.firstChild,e=a.createElement("body"),f=a.createElement("div");return f.id="mq-test-1",f.style.cssText="position:absolute;top:-100em",e.style.background="none",e.appendChild(f),function(a){return f.innerHTML='­<style media="'+a+'"> #mq-test-1 { width: 42px; }</style>',c.insertBefore(e,d),b=42===f.offsetWidth,c.removeChild(e),{matches:b,media:a}}}(a.document)}(this),function(a){"use strict";function b(){v(!0)}var c={};a.respond=c,c.update=function(){};var d=[],e=function(){var b=!1;try{b=new a.XMLHttpRequest}catch(c){b=new a.ActiveXObject("Microsoft.XMLHTTP")}return function(){return b}}(),f=function(a,b){var c=e();c&&(c.open("GET",a,!0),c.onreadystatechange=function(){4!==c.readyState||200!==c.status&&304!==c.status||b(c.responseText)},4!==c.readyState&&c.send(null))},g=function(a){return a.replace(c.regex.minmaxwh,"").match(c.regex.other)};if(c.ajax=f,c.queue=d,c.unsupportedmq=g,c.regex={media:/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi,keyframes:/@(?:\-(?:o|moz|webkit)\-)?keyframes[^\{]+\{(?:[^\{\}]*\{[^\}\{]*\})+[^\}]*\}/gi,comments:/\/\*[^*]*\*+([^/][^*]*\*+)*\//gi,urls:/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,findStyles:/@media *([^\{]+)\{([\S\s]+?)$/,only:/(only\s+)?([a-zA-Z]+)\s?/,minw:/\(\s*min\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/,maxw:/\(\s*max\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/,minmaxwh:/\(\s*m(in|ax)\-(height|width)\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/gi,other:/\([^\)]*\)/g},c.mediaQueriesSupported=a.matchMedia&&null!==a.matchMedia("only all")&&a.matchMedia("only all").matches,!c.mediaQueriesSupported){var h,i,j,k=a.document,l=k.documentElement,m=[],n=[],o=[],p={},q=30,r=k.getElementsByTagName("head")[0]||l,s=k.getElementsByTagName("base")[0],t=r.getElementsByTagName("link"),u=function(){var a,b=k.createElement("div"),c=k.body,d=l.style.fontSize,e=c&&c.style.fontSize,f=!1;return b.style.cssText="position:absolute;font-size:1em;width:1em",c||(c=f=k.createElement("body"),c.style.background="none"),l.style.fontSize="100%",c.style.fontSize="100%",c.appendChild(b),f&&l.insertBefore(c,l.firstChild),a=b.offsetWidth,f?l.removeChild(c):c.removeChild(b),l.style.fontSize=d,e&&(c.style.fontSize=e),a=j=parseFloat(a)},v=function(b){var c="clientWidth",d=l[c],e="CSS1Compat"===k.compatMode&&d||k.body[c]||d,f={},g=t[t.length-1],p=(new Date).getTime();if(b&&h&&q>p-h)return a.clearTimeout(i),i=a.setTimeout(v,q),void 0;h=p;for(var s in m)if(m.hasOwnProperty(s)){var w=m[s],x=w.minw,y=w.maxw,z=null===x,A=null===y,B="em";x&&(x=parseFloat(x)*(x.indexOf(B)>-1?j||u():1)),y&&(y=parseFloat(y)*(y.indexOf(B)>-1?j||u():1)),w.hasquery&&(z&&A||!(z||e>=x)||!(A||y>=e))||(f[w.media]||(f[w.media]=[]),f[w.media].push(n[w.rules]))}for(var C in o)o.hasOwnProperty(C)&&o[C]&&o[C].parentNode===r&&r.removeChild(o[C]);o.length=0;for(var D in f)if(f.hasOwnProperty(D)){var E=k.createElement("style"),F=f[D].join("\n");E.type="text/css",E.media=D,r.insertBefore(E,g.nextSibling),E.styleSheet?E.styleSheet.cssText=F:E.appendChild(k.createTextNode(F)),o.push(E)}},w=function(a,b,d){var e=a.replace(c.regex.comments,"").replace(c.regex.keyframes,"").match(c.regex.media),f=e&&e.length||0;b=b.substring(0,b.lastIndexOf("/"));var h=function(a){return a.replace(c.regex.urls,"$1"+b+"$2$3")},i=!f&&d;b.length&&(b+="/"),i&&(f=1);for(var j=0;f>j;j++){var k,l,o,p;i?(k=d,n.push(h(a))):(k=e[j].match(c.regex.findStyles)&&RegExp.$1,n.push(RegExp.$2&&h(RegExp.$2))),o=k.split(","),p=o.length;for(var q=0;p>q;q++)l=o[q],g(l)||m.push({media:l.split("(")[0].match(c.regex.only)&&RegExp.$2||"all",rules:n.length-1,hasquery:l.indexOf("(")>-1,minw:l.match(c.regex.minw)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:l.match(c.regex.maxw)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}v()},x=function(){if(d.length){var b=d.shift();f(b.href,function(c){w(c,b.href,b.media),p[b.href]=!0,a.setTimeout(function(){x()},0)})}},y=function(){for(var b=0;b<t.length;b++){var c=t[b],e=c.href,f=c.media,g=c.rel&&"stylesheet"===c.rel.toLowerCase();e&&g&&!p[e]&&(c.styleSheet&&c.styleSheet.rawCssText?(w(c.styleSheet.rawCssText,e,f),p[e]=!0):(!/^([a-zA-Z:]*\/\/)/.test(e)&&!s||e.replace(RegExp.$1,"").split("/")[0]===a.location.host)&&("//"===e.substring(0,2)&&(e=a.location.protocol+e),d.push({href:e,media:f})))}x()};y(),c.update=y,c.getEmValue=u,a.addEventListener?a.addEventListener("resize",b,!1):a.attachEvent&&a.attachEvent("onresize",b)}}(this); \ No newline at end of file diff --git a/source/javascripts/jquery.min.js b/source/javascripts/jquery.min.js new file mode 100644 index 0000000..0f60b7b --- /dev/null +++ b/source/javascripts/jquery.min.js @@ -0,0 +1,5 @@ +/*! jQuery v1.11.3 | (c) 2005, 2015 jQuery Foundation, Inc. | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.3",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b="length"in a&&a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,aa=/[+~]/,ba=/'|\\/g,ca=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),da=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ea=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fa){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(ba,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+ra(o[l]);w=aa.test(a)&&pa(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",ea,!1):e.attachEvent&&e.attachEvent("onunload",ea)),p=!f(g),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\f]' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?la(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ca,da),a[3]=(a[3]||a[4]||a[5]||"").replace(ca,da),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ca,da).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(ca,da),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return W.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(ca,da).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:oa(function(){return[0]}),last:oa(function(a,b){return[b-1]}),eq:oa(function(a,b,c){return[0>c?c+b:c]}),even:oa(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:oa(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:oa(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:oa(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function qa(){}qa.prototype=d.filters=d.pseudos,d.setFilters=new qa,g=ga.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?ga.error(a):z(a,i).slice(0)};function ra(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function sa(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function ta(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ua(a,b,c){for(var d=0,e=b.length;e>d;d++)ga(a,b[d],c);return c}function va(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wa(a,b,c,d,e,f){return d&&!d[u]&&(d=wa(d)),e&&!e[u]&&(e=wa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ua(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:va(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=va(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=va(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sa(function(a){return a===b},h,!0),l=sa(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sa(ta(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wa(i>1&&ta(m),i>1&&ra(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xa(a.slice(i,e)),f>e&&xa(a=a.slice(e)),f>e&&ra(a))}m.push(c)}return ta(m)}function ya(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=va(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&ga.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,ya(e,d)),f.selector=a}return f},i=ga.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ca,da),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ca,da),aa.test(j[0].type)&&pa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&ra(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,aa.test(a)&&pa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ja(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1; + +return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?m.queue(this[0],a):void 0===b?this:this.each(function(){var c=m.queue(this,a,b);m._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&m.dequeue(this,a)})},dequeue:function(a){return this.each(function(){m.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=m.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=m._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var S=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=["Top","Right","Bottom","Left"],U=function(a,b){return a=b||a,"none"===m.css(a,"display")||!m.contains(a.ownerDocument,a)},V=m.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===m.type(c)){e=!0;for(h in c)m.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,m.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(m(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav></:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="<input type='radio' checked='checked' name='t'/>",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function aa(){return!0}function ba(){return!1}function ca(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[m.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=Z.test(e)?this.mouseHooks:Y.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new m.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=f.srcElement||y),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,g.filter?g.filter(a,f):a},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button,g=b.fromElement;return null==a.pageX&&null!=b.clientX&&(d=a.target.ownerDocument||y,e=d.documentElement,c=d.body,a.pageX=b.clientX+(e&&e.scrollLeft||c&&c.scrollLeft||0)-(e&&e.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(e&&e.scrollTop||c&&c.scrollTop||0)-(e&&e.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&g&&(a.relatedTarget=g===a.target?b.toElement:g),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==ca()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===ca()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return m.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return m.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=m.extend(new m.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?m.event.trigger(e,null,b):m.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},m.removeEvent=y.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]===K&&(a[d]=null),a.detachEvent(d,c))},m.Event=function(a,b){return this instanceof m.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?aa:ba):this.type=a,b&&m.extend(this,b),this.timeStamp=a&&a.timeStamp||m.now(),void(this[m.expando]=!0)):new m.Event(a,b)},m.Event.prototype={isDefaultPrevented:ba,isPropagationStopped:ba,isImmediatePropagationStopped:ba,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=aa,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=aa,a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=aa,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},m.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){m.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!m.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.submitBubbles||(m.event.special.submit={setup:function(){return m.nodeName(this,"form")?!1:void m.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=m.nodeName(b,"input")||m.nodeName(b,"button")?b.form:void 0;c&&!m._data(c,"submitBubbles")&&(m.event.add(c,"submit._submit",function(a){a._submit_bubble=!0}),m._data(c,"submitBubbles",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&m.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){return m.nodeName(this,"form")?!1:void m.event.remove(this,"._submit")}}),k.changeBubbles||(m.event.special.change={setup:function(){return X.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(m.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._just_changed=!0)}),m.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),m.event.simulate("change",this,a,!0)})),!1):void m.event.add(this,"beforeactivate._change",function(a){var b=a.target;X.test(b.nodeName)&&!m._data(b,"changeBubbles")&&(m.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||m.event.simulate("change",this.parentNode,a,!0)}),m._data(b,"changeBubbles",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return m.event.remove(this,"._change"),!X.test(this.nodeName)}}),k.focusinBubbles||m.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){m.event.simulate(b,a.target,m.event.fix(a),!0)};m.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=m._data(d,b);e||d.addEventListener(a,c,!0),m._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=m._data(d,b)-1;e?m._data(d,b,e):(d.removeEventListener(a,c,!0),m._removeData(d,b))}}}),m.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(f in a)this.on(f,b,c,a[f],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=ba;else if(!d)return this;return 1===e&&(g=d,d=function(a){return m().off(a),g.apply(this,arguments)},d.guid=g.guid||(g.guid=m.guid++)),this.each(function(){m.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,m(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=ba),this.each(function(){m.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){m.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?m.event.trigger(a,b,c,!0):void 0}});function da(a){var b=ea.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}var ea="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",fa=/ jQuery\d+="(?:null|\d+)"/g,ga=new RegExp("<(?:"+ea+")[\\s/>]","i"),ha=/^\s+/,ia=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ja=/<([\w:]+)/,ka=/<tbody/i,la=/<|&#?\w+;/,ma=/<(?:script|style|link)/i,na=/checked\s*(?:[^=]|=\s*.checked.)/i,oa=/^$|\/(?:java|ecma)script/i,pa=/^true\/(.*)/,qa=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ra={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:k.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},sa=da(y),ta=sa.appendChild(y.createElement("div"));ra.optgroup=ra.option,ra.tbody=ra.tfoot=ra.colgroup=ra.caption=ra.thead,ra.th=ra.td;function ua(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ua(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function va(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wa(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xa(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function ya(a){var b=pa.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function za(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Aa(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Ba(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xa(b).text=a.text,ya(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!ga.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(ta.innerHTML=a.outerHTML,ta.removeChild(f=ta.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ua(f),h=ua(a),g=0;null!=(e=h[g]);++g)d[g]&&Ba(e,d[g]);if(b)if(c)for(h=h||ua(a),d=d||ua(f),g=0;null!=(e=h[g]);g++)Aa(e,d[g]);else Aa(a,f);return d=ua(f,"script"),d.length>0&&za(d,!i&&ua(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=da(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(la.test(f)){h=h||o.appendChild(b.createElement("div")),i=(ja.exec(f)||["",""])[1].toLowerCase(),l=ra[i]||ra._default,h.innerHTML=l[1]+f.replace(ia,"<$1></$2>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&ha.test(f)&&p.push(b.createTextNode(ha.exec(f)[0])),!k.tbody){f="table"!==i||ka.test(f)?"<table>"!==l[1]||ka.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ua(p,"input"),va),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ua(o.appendChild(f),"script"),g&&za(h),c)){e=0;while(f=h[e++])oa.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ua(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&za(ua(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ua(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fa,""):void 0;if(!("string"!=typeof a||ma.test(a)||!k.htmlSerialize&&ga.test(a)||!k.leadingWhitespace&&ha.test(a)||ra[(ja.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ia,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ua(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ua(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&na.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ua(i,"script"),xa),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ua(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,ya),j=0;f>j;j++)d=g[j],oa.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qa,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Ca,Da={};function Ea(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fa(a){var b=y,c=Da[a];return c||(c=Ea(a,b),"none"!==c&&c||(Ca=(Ca||m("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Ca[0].contentWindow||Ca[0].contentDocument).document,b.write(),b.close(),c=Ea(a,b),Ca.detach()),Da[a]=c),c}!function(){var a;k.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,d;return c=y.getElementsByTagName("body")[0],c&&c.style?(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(y.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(d),a):void 0}}();var Ga=/^margin/,Ha=new RegExp("^("+S+")(?!px)[a-z%]+$","i"),Ia,Ja,Ka=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ia=function(b){return b.ownerDocument.defaultView.opener?b.ownerDocument.defaultView.getComputedStyle(b,null):a.getComputedStyle(b,null)},Ja=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ia(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||m.contains(a.ownerDocument,a)||(g=m.style(a,b)),Ha.test(g)&&Ga.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+""}):y.documentElement.currentStyle&&(Ia=function(a){return a.currentStyle},Ja=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ia(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Ha.test(g)&&!Ka.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function La(a,b){return{get:function(){var c=a();if(null!=c)return c?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d,e,f,g,h;if(b=y.createElement("div"),b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=d&&d.style){c.cssText="float:left;opacity:.5",k.opacity="0.5"===c.opacity,k.cssFloat=!!c.cssFloat,b.style.backgroundClip="content-box",b.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===b.style.backgroundClip,k.boxSizing=""===c.boxSizing||""===c.MozBoxSizing||""===c.WebkitBoxSizing,m.extend(k,{reliableHiddenOffsets:function(){return null==g&&i(),g},boxSizingReliable:function(){return null==f&&i(),f},pixelPosition:function(){return null==e&&i(),e},reliableMarginRight:function(){return null==h&&i(),h}});function i(){var b,c,d,i;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),b.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",e=f=!1,h=!0,a.getComputedStyle&&(e="1%"!==(a.getComputedStyle(b,null)||{}).top,f="4px"===(a.getComputedStyle(b,null)||{width:"4px"}).width,i=b.appendChild(y.createElement("div")),i.style.cssText=b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",i.style.marginRight=i.style.width="0",b.style.width="1px",h=!parseFloat((a.getComputedStyle(i,null)||{}).marginRight),b.removeChild(i)),b.innerHTML="<table><tr><td></td><td>t</td></tr></table>",i=b.getElementsByTagName("td"),i[0].style.cssText="margin:0;border:0;padding:0;display:none",g=0===i[0].offsetHeight,g&&(i[0].style.display="",i[1].style.display="none",g=0===i[0].offsetHeight),c.removeChild(d))}}}(),m.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Ma=/alpha\([^)]*\)/i,Na=/opacity\s*=\s*([^)]*)/,Oa=/^(none|table(?!-c[ea]).+)/,Pa=new RegExp("^("+S+")(.*)$","i"),Qa=new RegExp("^([+-])=("+S+")","i"),Ra={position:"absolute",visibility:"hidden",display:"block"},Sa={letterSpacing:"0",fontWeight:"400"},Ta=["Webkit","O","Moz","ms"];function Ua(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=Ta.length;while(e--)if(b=Ta[e]+c,b in a)return b;return d}function Va(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=m._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&U(d)&&(f[g]=m._data(d,"olddisplay",Fa(d.nodeName)))):(e=U(d),(c&&"none"!==c||!e)&&m._data(d,"olddisplay",e?c:m.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function Wa(a,b,c){var d=Pa.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Xa(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=m.css(a,c+T[f],!0,e)),d?("content"===c&&(g-=m.css(a,"padding"+T[f],!0,e)),"margin"!==c&&(g-=m.css(a,"border"+T[f]+"Width",!0,e))):(g+=m.css(a,"padding"+T[f],!0,e),"padding"!==c&&(g+=m.css(a,"border"+T[f]+"Width",!0,e)));return g}function Ya(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ia(a),g=k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Ja(a,b,f),(0>e||null==e)&&(e=a.style[b]),Ha.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Xa(a,b,c||(g?"border":"content"),d,f)+"px"}m.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Ja(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":k.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=m.camelCase(b),i=a.style;if(b=m.cssProps[h]||(m.cssProps[h]=Ua(i,h)),g=m.cssHooks[b]||m.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=Qa.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(m.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||m.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=m.camelCase(b);return b=m.cssProps[h]||(m.cssProps[h]=Ua(a.style,h)),g=m.cssHooks[b]||m.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Ja(a,b,d)),"normal"===f&&b in Sa&&(f=Sa[b]),""===c||c?(e=parseFloat(f),c===!0||m.isNumeric(e)?e||0:f):f}}),m.each(["height","width"],function(a,b){m.cssHooks[b]={get:function(a,c,d){return c?Oa.test(m.css(a,"display"))&&0===a.offsetWidth?m.swap(a,Ra,function(){return Ya(a,b,d)}):Ya(a,b,d):void 0},set:function(a,c,d){var e=d&&Ia(a);return Wa(a,c,d?Xa(a,b,d,k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,e),e):0)}}}),k.opacity||(m.cssHooks.opacity={get:function(a,b){return Na.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=m.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===m.trim(f.replace(Ma,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Ma.test(f)?f.replace(Ma,e):f+" "+e)}}),m.cssHooks.marginRight=La(k.reliableMarginRight,function(a,b){return b?m.swap(a,{display:"inline-block"},Ja,[a,"marginRight"]):void 0}),m.each({margin:"",padding:"",border:"Width"},function(a,b){m.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+T[d]+b]=f[d]||f[d-2]||f[0];return e}},Ga.test(a)||(m.cssHooks[a+b].set=Wa)}),m.fn.extend({css:function(a,b){return V(this,function(a,b,c){var d,e,f={},g=0;if(m.isArray(b)){for(d=Ia(a),e=b.length;e>g;g++)f[b[g]]=m.css(a,b[g],!1,d);return f}return void 0!==c?m.style(a,b,c):m.css(a,b)},a,b,arguments.length>1)},show:function(){return Va(this,!0)},hide:function(){return Va(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){U(this)?m(this).show():m(this).hide()})}});function Za(a,b,c,d,e){ +return new Za.prototype.init(a,b,c,d,e)}m.Tween=Za,Za.prototype={constructor:Za,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(m.cssNumber[c]?"":"px")},cur:function(){var a=Za.propHooks[this.prop];return a&&a.get?a.get(this):Za.propHooks._default.get(this)},run:function(a){var b,c=Za.propHooks[this.prop];return this.options.duration?this.pos=b=m.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Za.propHooks._default.set(this),this}},Za.prototype.init.prototype=Za.prototype,Za.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=m.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){m.fx.step[a.prop]?m.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[m.cssProps[a.prop]]||m.cssHooks[a.prop])?m.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Za.propHooks.scrollTop=Za.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},m.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},m.fx=Za.prototype.init,m.fx.step={};var $a,_a,ab=/^(?:toggle|show|hide)$/,bb=new RegExp("^(?:([+-])=|)("+S+")([a-z%]*)$","i"),cb=/queueHooks$/,db=[ib],eb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=bb.exec(b),f=e&&e[3]||(m.cssNumber[a]?"":"px"),g=(m.cssNumber[a]||"px"!==f&&+d)&&bb.exec(m.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,m.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function fb(){return setTimeout(function(){$a=void 0}),$a=m.now()}function gb(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=T[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function hb(a,b,c){for(var d,e=(eb[b]||[]).concat(eb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ib(a,b,c){var d,e,f,g,h,i,j,l,n=this,o={},p=a.style,q=a.nodeType&&U(a),r=m._data(a,"fxshow");c.queue||(h=m._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,n.always(function(){n.always(function(){h.unqueued--,m.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=m.css(a,"display"),l="none"===j?m._data(a,"olddisplay")||Fa(a.nodeName):j,"inline"===l&&"none"===m.css(a,"float")&&(k.inlineBlockNeedsLayout&&"inline"!==Fa(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",k.shrinkWrapBlocks()||n.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],ab.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||m.style(a,d)}else j=void 0;if(m.isEmptyObject(o))"inline"===("none"===j?Fa(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=m._data(a,"fxshow",{}),f&&(r.hidden=!q),q?m(a).show():n.done(function(){m(a).hide()}),n.done(function(){var b;m._removeData(a,"fxshow");for(b in o)m.style(a,b,o[b])});for(d in o)g=hb(q?r[d]:0,d,n),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function jb(a,b){var c,d,e,f,g;for(c in a)if(d=m.camelCase(c),e=b[d],f=a[c],m.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=m.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kb(a,b,c){var d,e,f=0,g=db.length,h=m.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=$a||fb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:m.extend({},b),opts:m.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:$a||fb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=m.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jb(k,j.opts.specialEasing);g>f;f++)if(d=db[f].call(j,a,k,j.opts))return d;return m.map(k,hb,j),m.isFunction(j.opts.start)&&j.opts.start.call(a,j),m.fx.timer(m.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}m.Animation=m.extend(kb,{tweener:function(a,b){m.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],eb[c]=eb[c]||[],eb[c].unshift(b)},prefilter:function(a,b){b?db.unshift(a):db.push(a)}}),m.speed=function(a,b,c){var d=a&&"object"==typeof a?m.extend({},a):{complete:c||!c&&b||m.isFunction(a)&&a,duration:a,easing:c&&b||b&&!m.isFunction(b)&&b};return d.duration=m.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in m.fx.speeds?m.fx.speeds[d.duration]:m.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){m.isFunction(d.old)&&d.old.call(this),d.queue&&m.dequeue(this,d.queue)},d},m.fn.extend({fadeTo:function(a,b,c,d){return this.filter(U).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=m.isEmptyObject(a),f=m.speed(b,c,d),g=function(){var b=kb(this,m.extend({},a),f);(e||m._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=m.timers,g=m._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&cb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&m.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=m._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=m.timers,g=d?d.length:0;for(c.finish=!0,m.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),m.each(["toggle","show","hide"],function(a,b){var c=m.fn[b];m.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gb(b,!0),a,d,e)}}),m.each({slideDown:gb("show"),slideUp:gb("hide"),slideToggle:gb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){m.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),m.timers=[],m.fx.tick=function(){var a,b=m.timers,c=0;for($a=m.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||m.fx.stop(),$a=void 0},m.fx.timer=function(a){m.timers.push(a),a()?m.fx.start():m.timers.pop()},m.fx.interval=13,m.fx.start=function(){_a||(_a=setInterval(m.fx.tick,m.fx.interval))},m.fx.stop=function(){clearInterval(_a),_a=null},m.fx.speeds={slow:600,fast:200,_default:400},m.fn.delay=function(a,b){return a=m.fx?m.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a,b,c,d,e;b=y.createElement("div"),b.setAttribute("className","t"),b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=y.createElement("select"),e=c.appendChild(y.createElement("option")),a=b.getElementsByTagName("input")[0],d.style.cssText="top:1px",k.getSetAttribute="t"!==b.className,k.style=/top/.test(d.getAttribute("style")),k.hrefNormalized="/a"===d.getAttribute("href"),k.checkOn=!!a.value,k.optSelected=e.selected,k.enctype=!!y.createElement("form").enctype,c.disabled=!0,k.optDisabled=!e.disabled,a=y.createElement("input"),a.setAttribute("value",""),k.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),k.radioValue="t"===a.value}();var lb=/\r/g;m.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=m.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,m(this).val()):a,null==e?e="":"number"==typeof e?e+="":m.isArray(e)&&(e=m.map(e,function(a){return null==a?"":a+""})),b=m.valHooks[this.type]||m.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=m.valHooks[e.type]||m.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(lb,""):null==c?"":c)}}}),m.extend({valHooks:{option:{get:function(a){var b=m.find.attr(a,"value");return null!=b?b:m.trim(m.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&m.nodeName(c.parentNode,"optgroup"))){if(b=m(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=m.makeArray(b),g=e.length;while(g--)if(d=e[g],m.inArray(m.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),m.each(["radio","checkbox"],function(){m.valHooks[this]={set:function(a,b){return m.isArray(b)?a.checked=m.inArray(m(a).val(),b)>=0:void 0}},k.checkOn||(m.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var mb,nb,ob=m.expr.attrHandle,pb=/^(?:checked|selected)$/i,qb=k.getSetAttribute,rb=k.input;m.fn.extend({attr:function(a,b){return V(this,m.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){m.removeAttr(this,a)})}}),m.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===K?m.prop(a,b,c):(1===f&&m.isXMLDoc(a)||(b=b.toLowerCase(),d=m.attrHooks[b]||(m.expr.match.bool.test(b)?nb:mb)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=m.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void m.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=m.propFix[c]||c,m.expr.match.bool.test(c)?rb&&qb||!pb.test(c)?a[d]=!1:a[m.camelCase("default-"+c)]=a[d]=!1:m.attr(a,c,""),a.removeAttribute(qb?c:d)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&m.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),nb={set:function(a,b,c){return b===!1?m.removeAttr(a,c):rb&&qb||!pb.test(c)?a.setAttribute(!qb&&m.propFix[c]||c,c):a[m.camelCase("default-"+c)]=a[c]=!0,c}},m.each(m.expr.match.bool.source.match(/\w+/g),function(a,b){var c=ob[b]||m.find.attr;ob[b]=rb&&qb||!pb.test(b)?function(a,b,d){var e,f;return d||(f=ob[b],ob[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,ob[b]=f),e}:function(a,b,c){return c?void 0:a[m.camelCase("default-"+b)]?b.toLowerCase():null}}),rb&&qb||(m.attrHooks.value={set:function(a,b,c){return m.nodeName(a,"input")?void(a.defaultValue=b):mb&&mb.set(a,b,c)}}),qb||(mb={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},ob.id=ob.name=ob.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},m.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:mb.set},m.attrHooks.contenteditable={set:function(a,b,c){mb.set(a,""===b?!1:b,c)}},m.each(["width","height"],function(a,b){m.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),k.style||(m.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var sb=/^(?:input|select|textarea|button|object)$/i,tb=/^(?:a|area)$/i;m.fn.extend({prop:function(a,b){return V(this,m.prop,a,b,arguments.length>1)},removeProp:function(a){return a=m.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),m.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!m.isXMLDoc(a),f&&(b=m.propFix[b]||b,e=m.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=m.find.attr(a,"tabindex");return b?parseInt(b,10):sb.test(a.nodeName)||tb.test(a.nodeName)&&a.href?0:-1}}}}),k.hrefNormalized||m.each(["href","src"],function(a,b){m.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),k.optSelected||(m.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),m.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){m.propFix[this.toLowerCase()]=this}),k.enctype||(m.propFix.enctype="encoding");var ub=/[\t\r\n\f]/g;m.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ub," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=m.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ub," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?m.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(m.isFunction(a)?function(c){m(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=m(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===K||"boolean"===c)&&(this.className&&m._data(this,"__className__",this.className),this.className=this.className||a===!1?"":m._data(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ub," ").indexOf(b)>=0)return!0;return!1}}),m.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){m.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),m.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var vb=m.now(),wb=/\?/,xb=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;m.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=m.trim(b+"");return e&&!m.trim(e.replace(xb,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():m.error("Invalid JSON: "+b)},m.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||m.error("Invalid XML: "+b),c};var yb,zb,Ab=/#.*$/,Bb=/([?&])_=[^&]*/,Cb=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Db=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Eb=/^(?:GET|HEAD)$/,Fb=/^\/\//,Gb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Hb={},Ib={},Jb="*/".concat("*");try{zb=location.href}catch(Kb){zb=y.createElement("a"),zb.href="",zb=zb.href}yb=Gb.exec(zb.toLowerCase())||[];function Lb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(m.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Mb(a,b,c,d){var e={},f=a===Ib;function g(h){var i;return e[h]=!0,m.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Nb(a,b){var c,d,e=m.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&m.extend(!0,a,c),a}function Ob(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Pb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}m.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:zb,type:"GET",isLocal:Db.test(yb[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Jb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":m.parseJSON,"text xml":m.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Nb(Nb(a,m.ajaxSettings),b):Nb(m.ajaxSettings,a)},ajaxPrefilter:Lb(Hb),ajaxTransport:Lb(Ib),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=m.ajaxSetup({},b),l=k.context||k,n=k.context&&(l.nodeType||l.jquery)?m(l):m.event,o=m.Deferred(),p=m.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!j){j={};while(b=Cb.exec(f))j[b[1].toLowerCase()]=b[2]}b=j[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return i&&i.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||zb)+"").replace(Ab,"").replace(Fb,yb[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=m.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(c=Gb.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===yb[1]&&c[2]===yb[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(yb[3]||("http:"===yb[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=m.param(k.data,k.traditional)),Mb(Hb,k,b,v),2===t)return v;h=m.event&&k.global,h&&0===m.active++&&m.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Eb.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(wb.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Bb.test(e)?e.replace(Bb,"$1_="+vb++):e+(wb.test(e)?"&":"?")+"_="+vb++)),k.ifModified&&(m.lastModified[e]&&v.setRequestHeader("If-Modified-Since",m.lastModified[e]),m.etag[e]&&v.setRequestHeader("If-None-Match",m.etag[e])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+Jb+"; q=0.01":""):k.accepts["*"]);for(d in k.headers)v.setRequestHeader(d,k.headers[d]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(d in{success:1,error:1,complete:1})v[d](k[d]);if(i=Mb(Ib,k,b,v)){v.readyState=1,h&&n.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,i.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=void 0,f=d||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,c&&(u=Ob(k,v,c)),u=Pb(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(m.lastModified[e]=w),w=v.getResponseHeader("etag"),w&&(m.etag[e]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,h&&n.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),h&&(n.trigger("ajaxComplete",[v,k]),--m.active||m.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return m.get(a,b,c,"json")},getScript:function(a,b){return m.get(a,void 0,b,"script")}}),m.each(["get","post"],function(a,b){m[b]=function(a,c,d,e){return m.isFunction(c)&&(e=e||d,d=c,c=void 0),m.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),m._evalUrl=function(a){return m.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},m.fn.extend({wrapAll:function(a){if(m.isFunction(a))return this.each(function(b){m(this).wrapAll(a.call(this,b))});if(this[0]){var b=m(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(m.isFunction(a)?function(b){m(this).wrapInner(a.call(this,b))}:function(){var b=m(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=m.isFunction(a);return this.each(function(c){m(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){m.nodeName(this,"body")||m(this).replaceWith(this.childNodes)}).end()}}),m.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!k.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||m.css(a,"display"))},m.expr.filters.visible=function(a){return!m.expr.filters.hidden(a)};var Qb=/%20/g,Rb=/\[\]$/,Sb=/\r?\n/g,Tb=/^(?:submit|button|image|reset|file)$/i,Ub=/^(?:input|select|textarea|keygen)/i;function Vb(a,b,c,d){var e;if(m.isArray(b))m.each(b,function(b,e){c||Rb.test(a)?d(a,e):Vb(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==m.type(b))d(a,b);else for(e in b)Vb(a+"["+e+"]",b[e],c,d)}m.param=function(a,b){var c,d=[],e=function(a,b){b=m.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=m.ajaxSettings&&m.ajaxSettings.traditional),m.isArray(a)||a.jquery&&!m.isPlainObject(a))m.each(a,function(){e(this.name,this.value)});else for(c in a)Vb(c,a[c],b,e);return d.join("&").replace(Qb,"+")},m.fn.extend({serialize:function(){return m.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=m.prop(this,"elements");return a?m.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!m(this).is(":disabled")&&Ub.test(this.nodeName)&&!Tb.test(a)&&(this.checked||!W.test(a))}).map(function(a,b){var c=m(this).val();return null==c?null:m.isArray(c)?m.map(c,function(a){return{name:b.name,value:a.replace(Sb,"\r\n")}}):{name:b.name,value:c.replace(Sb,"\r\n")}}).get()}}),m.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&Zb()||$b()}:Zb;var Wb=0,Xb={},Yb=m.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in Xb)Xb[a](void 0,!0)}),k.cors=!!Yb&&"withCredentials"in Yb,Yb=k.ajax=!!Yb,Yb&&m.ajaxTransport(function(a){if(!a.crossDomain||k.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Wb;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete Xb[g],b=void 0,f.onreadystatechange=m.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=""}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=Xb[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});function Zb(){try{return new a.XMLHttpRequest}catch(b){}}function $b(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}m.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return m.globalEval(a),a}}}),m.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),m.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=y.head||m("head")[0]||y.documentElement;return{send:function(d,e){b=y.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var _b=[],ac=/(=)\?(?=&|$)|\?\?/;m.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=_b.pop()||m.expando+"_"+vb++;return this[a]=!0,a}}),m.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(ac.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&ac.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=m.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(ac,"$1"+e):b.jsonp!==!1&&(b.url+=(wb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||m.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,_b.push(e)),g&&m.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),m.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||y;var d=u.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=m.buildFragment([a],b,e),e&&e.length&&m(e).remove(),m.merge([],d.childNodes))};var bc=m.fn.load;m.fn.load=function(a,b,c){if("string"!=typeof a&&bc)return bc.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=m.trim(a.slice(h,a.length)),a=a.slice(0,h)),m.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&m.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?m("<div>").append(m.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},m.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){m.fn[b]=function(a){return this.on(b,a)}}),m.expr.filters.animated=function(a){return m.grep(m.timers,function(b){return a===b.elem}).length};var cc=a.document.documentElement;function dc(a){return m.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}m.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=m.css(a,"position"),l=m(a),n={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=m.css(a,"top"),i=m.css(a,"left"),j=("absolute"===k||"fixed"===k)&&m.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),m.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(n.top=b.top-h.top+g),null!=b.left&&(n.left=b.left-h.left+e),"using"in b?b.using.call(a,n):l.css(n)}},m.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){m.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,m.contains(b,e)?(typeof e.getBoundingClientRect!==K&&(d=e.getBoundingClientRect()),c=dc(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===m.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),m.nodeName(a[0],"html")||(c=a.offset()),c.top+=m.css(a[0],"borderTopWidth",!0),c.left+=m.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-m.css(d,"marginTop",!0),left:b.left-c.left-m.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||cc;while(a&&!m.nodeName(a,"html")&&"static"===m.css(a,"position"))a=a.offsetParent;return a||cc})}}),m.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);m.fn[a]=function(d){return V(this,function(a,d,e){var f=dc(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?m(f).scrollLeft():e,c?e:m(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),m.each(["top","left"],function(a,b){m.cssHooks[b]=La(k.pixelPosition,function(a,c){return c?(c=Ja(a,b),Ha.test(c)?m(a).position()[b]+"px":c):void 0})}),m.each({Height:"height",Width:"width"},function(a,b){m.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){m.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return V(this,function(b,c,d){var e;return m.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?m.css(b,c,g):m.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),m.fn.size=function(){return this.length},m.fn.andSelf=m.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return m});var ec=a.jQuery,fc=a.$;return m.noConflict=function(b){return a.$===m&&(a.$=fc),b&&a.jQuery===m&&(a.jQuery=ec),m},typeof b===K&&(a.jQuery=a.$=m),m}); diff --git a/source/javascripts/jquery.scrollex.min.js b/source/javascripts/jquery.scrollex.min.js new file mode 100644 index 0000000..ac907cc --- /dev/null +++ b/source/javascripts/jquery.scrollex.min.js @@ -0,0 +1,2 @@ +/* jquery.scrollex v0.2.1 | (c) n33 | n33.co @n33co | MIT */ +!function(t){function e(t,e,n){return"string"==typeof t&&("%"==t.slice(-1)?t=parseInt(t.substring(0,t.length-1))/100*e:"vh"==t.slice(-2)?t=parseInt(t.substring(0,t.length-2))/100*n:"px"==t.slice(-2)&&(t=parseInt(t.substring(0,t.length-2)))),t}var n=t(window),i=1,o={};n.on("scroll",function(){var e=n.scrollTop();t.map(o,function(t){window.clearTimeout(t.timeoutId),t.timeoutId=window.setTimeout(function(){t.handler(e)},t.options.delay)})}).on("load",function(){n.trigger("scroll")}),jQuery.fn.scrollex=function(l){var s=t(this);if(0==this.length)return s;if(this.length>1){for(var r=0;r<this.length;r++)t(this[r]).scrollex(l);return s}if(s.data("_scrollexId"))return s;var a,u,h,c,p;switch(a=i++,u=jQuery.extend({top:0,bottom:0,delay:0,mode:"default",enter:null,leave:null,initialize:null,terminate:null,scroll:null},l),u.mode){case"top":h=function(t,e,n,i,o){return t>=i&&o>=t};break;case"bottom":h=function(t,e,n,i,o){return n>=i&&o>=n};break;case"middle":h=function(t,e,n,i,o){return e>=i&&o>=e};break;case"top-only":h=function(t,e,n,i,o){return i>=t&&n>=i};break;case"bottom-only":h=function(t,e,n,i,o){return n>=o&&o>=t};break;default:case"default":h=function(t,e,n,i,o){return n>=i&&o>=t}}return c=function(t){var i,o,l,s,r,a,u=this.state,h=!1,c=this.$element.offset();i=n.height(),o=t+i/2,l=t+i,s=this.$element.outerHeight(),r=c.top+e(this.options.top,s,i),a=c.top+s-e(this.options.bottom,s,i),h=this.test(t,o,l,r,a),h!=u&&(this.state=h,h?this.options.enter&&this.options.enter.apply(this.element):this.options.leave&&this.options.leave.apply(this.element)),this.options.scroll&&this.options.scroll.apply(this.element,[(o-r)/(a-r)])},p={id:a,options:u,test:h,handler:c,state:null,element:this,$element:s,timeoutId:null},o[a]=p,s.data("_scrollexId",p.id),p.options.initialize&&p.options.initialize.apply(this),s},jQuery.fn.unscrollex=function(){var e=t(this);if(0==this.length)return e;if(this.length>1){for(var n=0;n<this.length;n++)t(this[n]).unscrollex();return e}var i,l;return(i=e.data("_scrollexId"))?(l=o[i],window.clearTimeout(l.timeoutId),delete o[i],e.removeData("_scrollexId"),l.options.terminate&&l.options.terminate.apply(this),e):e}}(jQuery); \ No newline at end of file diff --git a/source/javascripts/jquery.scrolly.min.js b/source/javascripts/jquery.scrolly.min.js new file mode 100644 index 0000000..bcb08ff --- /dev/null +++ b/source/javascripts/jquery.scrolly.min.js @@ -0,0 +1,2 @@ +/* jquery.scrolly v1.0.0-dev | (c) n33 | n33.co @n33co | MIT */ +(function(e){function u(s,o){var u,a,f;if((u=e(s))[t]==0)return n;a=u[i]()[r];switch(o.anchor){case"middle":f=a-(e(window).height()-u.outerHeight())/2;break;default:case r:f=Math.max(a,0)}return typeof o[i]=="function"?f-=o[i]():f-=o[i],f}var t="length",n=null,r="top",i="offset",s="click.scrolly",o=e(window);e.fn.scrolly=function(i){var o,a,f,l,c=e(this);if(this[t]==0)return c;if(this[t]>1){for(o=0;o<this[t];o++)e(this[o]).scrolly(i);return c}l=n,f=c.attr("href");if(f.charAt(0)!="#"||f[t]<2)return c;a=jQuery.extend({anchor:r,easing:"swing",offset:0,parent:e("body,html"),pollOnce:!1,speed:1e3},i),a.pollOnce&&(l=u(f,a)),c.off(s).on(s,function(e){var t=l!==n?l:u(f,a);t!==n&&(e.preventDefault(),a.parent.stop().animate({scrollTop:t},a.speed,a.easing))})}})(jQuery); \ No newline at end of file diff --git a/source/javascripts/katex.js b/source/javascripts/katex.js new file mode 100644 index 0000000..e104be9 --- /dev/null +++ b/source/javascripts/katex.js @@ -0,0 +1,9075 @@ +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.katex = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ +/* eslint no-console:0 */ +/** + * This is the main entry point for KaTeX. Here, we expose functions for + * rendering expressions either to DOM nodes or to markup strings. + * + * We also expose the ParseError class to check if errors thrown from KaTeX are + * errors in the expression, or errors in javascript handling. + */ + +var ParseError = require("./src/ParseError"); +var Settings = require("./src/Settings"); + +var buildTree = require("./src/buildTree"); +var parseTree = require("./src/parseTree"); +var utils = require("./src/utils"); + +/** + * Parse and build an expression, and place that expression in the DOM node + * given. + */ +var render = function(expression, baseNode, options) { + utils.clearNode(baseNode); + + var settings = new Settings(options); + + var tree = parseTree(expression, settings); + var node = buildTree(tree, expression, settings).toNode(); + + baseNode.appendChild(node); +}; + +// KaTeX's styles don't work properly in quirks mode. Print out an error, and +// disable rendering. +if (typeof document !== "undefined") { + if (document.compatMode !== "CSS1Compat") { + typeof console !== "undefined" && console.warn( + "Warning: KaTeX doesn't work in quirks mode. Make sure your " + + "website has a suitable doctype."); + + render = function() { + throw new ParseError("KaTeX doesn't work in quirks mode."); + }; + } +} + +/** + * Parse and build an expression, and return the markup for that. + */ +var renderToString = function(expression, options) { + var settings = new Settings(options); + + var tree = parseTree(expression, settings); + return buildTree(tree, expression, settings).toMarkup(); +}; + +/** + * Parse an expression and return the parse tree. + */ +var generateParseTree = function(expression, options) { + var settings = new Settings(options); + return parseTree(expression, settings); +}; + +module.exports = { + render: render, + renderToString: renderToString, + /** + * NOTE: This method is not currently recommended for public use. + * The internal tree representation is unstable and is very likely + * to change. Use at your own risk. + */ + __parse: generateParseTree, + ParseError: ParseError +}; + +},{"./src/ParseError":6,"./src/Settings":8,"./src/buildTree":13,"./src/parseTree":22,"./src/utils":25}],2:[function(require,module,exports){ +/** @flow */ + +"use strict"; + +function getRelocatable(re) { + // In the future, this could use a WeakMap instead of an expando. + if (!re.__matchAtRelocatable) { + // Disjunctions are the lowest-precedence operator, so we can make any + // pattern match the empty string by appending `|()` to it: + // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-patterns + var source = re.source + "|()"; + + // We always make the new regex global. + var flags = "g" + (re.ignoreCase ? "i" : "") + (re.multiline ? "m" : "") + (re.unicode ? "u" : "") + // sticky (/.../y) doesn't make sense in conjunction with our relocation + // logic, so we ignore it here. + ; + + re.__matchAtRelocatable = new RegExp(source, flags); + } + return re.__matchAtRelocatable; +} + +function matchAt(re, str, pos) { + if (re.global || re.sticky) { + throw new Error("matchAt(...): Only non-global regexes are supported"); + } + var reloc = getRelocatable(re); + reloc.lastIndex = pos; + var match = reloc.exec(str); + // Last capturing group is our sentinel that indicates whether the regex + // matched at the given location. + if (match[match.length - 1] == null) { + // Original regex matched. + match.length = match.length - 1; + return match; + } else { + return null; + } +} + +module.exports = matchAt; +},{}],3:[function(require,module,exports){ +/** + * The Lexer class handles tokenizing the input in various ways. Since our + * parser expects us to be able to backtrack, the lexer allows lexing from any + * given starting point. + * + * Its main exposed function is the `lex` function, which takes a position to + * lex from and a type of token to lex. It defers to the appropriate `_innerLex` + * function. + * + * The various `_innerLex` functions perform the actual lexing of different + * kinds. + */ + +var matchAt = require("match-at"); + +var ParseError = require("./ParseError"); + +// The main lexer class +function Lexer(input) { + this.input = input; + this.pos = 0; +} + +/** + * The resulting token returned from `lex`. + * + * It consists of the token text plus some position information. + * The position information is essentially a range in an input string, + * but instead of referencing the bare input string, we refer to the lexer. + * That way it is possible to attach extra metadata to the input string, + * like for example a file name or similar. + * + * The position information (all three parameters) is optional, + * so it is OK to construct synthetic tokens if appropriate. + * Not providing available position information may lead to + * degraded error reporting, though. + * + * @param {string} text the text of this token + * @param {number=} start the start offset, zero-based inclusive + * @param {number=} end the end offset, zero-based exclusive + * @param {Lexer=} lexer the lexer which in turn holds the input string + */ +function Token(text, start, end, lexer) { + this.text = text; + this.start = start; + this.end = end; + this.lexer = lexer; +} + +/** + * Given a pair of tokens (this and endToken), compute a “Token†encompassing + * the whole input range enclosed by these two. + * + * @param {Token} endToken last token of the range, inclusive + * @param {string} text the text of the newly constructed token + */ +Token.prototype.range = function(endToken, text) { + if (endToken.lexer !== this.lexer) { + return new Token(text); // sorry, no position information available + } + return new Token(text, this.start, endToken.end, this.lexer); +}; + +/* The following tokenRegex + * - matches typical whitespace (but not NBSP etc.) using its first group + * - does not match any control character \x00-\x1f except whitespace + * - does not match a bare backslash + * - matches any ASCII character except those just mentioned + * - does not match the BMP private use area \uE000-\uF8FF + * - does not match bare surrogate code units + * - matches any BMP character except for those just described + * - matches any valid Unicode surrogate pair + * - matches a backslash followed by one or more letters + * - matches a backslash followed by any BMP character, including newline + * Just because the Lexer matches something doesn't mean it's valid input: + * If there is no matching function or symbol definition, the Parser will + * still reject the input. + */ +var tokenRegex = new RegExp( + "([ \r\n\t]+)|" + // whitespace + "([!-\\[\\]-\u2027\u202A-\uD7FF\uF900-\uFFFF]" + // single codepoint + "|[\uD800-\uDBFF][\uDC00-\uDFFF]" + // surrogate pair + "|\\\\(?:[a-zA-Z]+|[^\uD800-\uDFFF])" + // function name + ")" +); + +/** + * This function lexes a single token. + */ +Lexer.prototype.lex = function() { + var input = this.input; + var pos = this.pos; + if (pos === input.length) { + return new Token("EOF", pos, pos, this); + } + var match = matchAt(tokenRegex, input, pos); + if (match === null) { + throw new ParseError( + "Unexpected character: '" + input[pos] + "'", + new Token(input[pos], pos, pos + 1, this)); + } + var text = match[2] || " "; + var start = this.pos; + this.pos += match[0].length; + var end = this.pos; + return new Token(text, start, end, this); +}; + +module.exports = Lexer; + +},{"./ParseError":6,"match-at":2}],4:[function(require,module,exports){ +/** + * This file contains the “gullet†where macros are expanded + * until only non-macro tokens remain. + */ + +var Lexer = require("./Lexer"); + +function MacroExpander(input, macros) { + this.lexer = new Lexer(input); + this.macros = macros; + this.stack = []; // contains tokens in REVERSE order + this.discardedWhiteSpace = []; +} + +/** + * Recursively expand first token, then return first non-expandable token. + */ +MacroExpander.prototype.nextToken = function() { + for (;;) { + if (this.stack.length === 0) { + this.stack.push(this.lexer.lex()); + } + var topToken = this.stack.pop(); + var name = topToken.text; + if (!(name.charAt(0) === "\\" && this.macros.hasOwnProperty(name))) { + return topToken; + } + var expansion = this.macros[name]; + if (typeof expansion === "string") { + var bodyLexer = new Lexer(expansion); + expansion = []; + var tok = bodyLexer.lex(); + while (tok.text !== "EOF") { + expansion.push(tok); + tok = bodyLexer.lex(); + } + expansion.reverse(); // to fit in with stack using push and pop + this.macros[name] = expansion; + } + this.stack = this.stack.concat(expansion); + } +}; + +MacroExpander.prototype.get = function(ignoreSpace) { + this.discardedWhiteSpace = []; + var token = this.nextToken(); + if (ignoreSpace) { + while (token.text === " ") { + this.discardedWhiteSpace.push(token); + token = this.nextToken(); + } + } + return token; +}; + +/** + * Undo the effect of the preceding call to the get method. + * A call to this method MUST be immediately preceded and immediately followed + * by a call to get. Only used during mode switching, i.e. after one token + * was got in the old mode but should get got again in a new mode + * with possibly different whitespace handling. + */ +MacroExpander.prototype.unget = function(token) { + this.stack.push(token); + while (this.discardedWhiteSpace.length !== 0) { + this.stack.push(this.discardedWhiteSpace.pop()); + } +}; + +module.exports = MacroExpander; + +},{"./Lexer":3}],5:[function(require,module,exports){ +/** + * This file contains information about the options that the Parser carries + * around with it while parsing. Data is held in an `Options` object, and when + * recursing, a new `Options` object can be created with the `.with*` and + * `.reset` functions. + */ + +/** + * This is the main options class. It contains the style, size, color, and font + * of the current parse level. It also contains the style and size of the parent + * parse level, so size changes can be handled efficiently. + * + * Each of the `.with*` and `.reset` functions passes its current style and size + * as the parentStyle and parentSize of the new options class, so parent + * handling is taken care of automatically. + */ +function Options(data) { + this.style = data.style; + this.color = data.color; + this.size = data.size; + this.phantom = data.phantom; + this.font = data.font; + + if (data.parentStyle === undefined) { + this.parentStyle = data.style; + } else { + this.parentStyle = data.parentStyle; + } + + if (data.parentSize === undefined) { + this.parentSize = data.size; + } else { + this.parentSize = data.parentSize; + } +} + +/** + * Returns a new options object with the same properties as "this". Properties + * from "extension" will be copied to the new options object. + */ +Options.prototype.extend = function(extension) { + var data = { + style: this.style, + size: this.size, + color: this.color, + parentStyle: this.style, + parentSize: this.size, + phantom: this.phantom, + font: this.font + }; + + for (var key in extension) { + if (extension.hasOwnProperty(key)) { + data[key] = extension[key]; + } + } + + return new Options(data); +}; + +/** + * Create a new options object with the given style. + */ +Options.prototype.withStyle = function(style) { + return this.extend({ + style: style + }); +}; + +/** + * Create a new options object with the given size. + */ +Options.prototype.withSize = function(size) { + return this.extend({ + size: size + }); +}; + +/** + * Create a new options object with the given color. + */ +Options.prototype.withColor = function(color) { + return this.extend({ + color: color + }); +}; + +/** + * Create a new options object with "phantom" set to true. + */ +Options.prototype.withPhantom = function() { + return this.extend({ + phantom: true + }); +}; + +/** + * Create a new options objects with the give font. + */ +Options.prototype.withFont = function(font) { + return this.extend({ + font: font || this.font + }); +}; + +/** + * Create a new options object with the same style, size, and color. This is + * used so that parent style and size changes are handled correctly. + */ +Options.prototype.reset = function() { + return this.extend({}); +}; + +/** + * A map of color names to CSS colors. + * TODO(emily): Remove this when we have real macros + */ +var colorMap = { + "katex-blue": "#6495ed", + "katex-orange": "#ffa500", + "katex-pink": "#ff00af", + "katex-red": "#df0030", + "katex-green": "#28ae7b", + "katex-gray": "gray", + "katex-purple": "#9d38bd", + "katex-blueA": "#ccfaff", + "katex-blueB": "#80f6ff", + "katex-blueC": "#63d9ea", + "katex-blueD": "#11accd", + "katex-blueE": "#0c7f99", + "katex-tealA": "#94fff5", + "katex-tealB": "#26edd5", + "katex-tealC": "#01d1c1", + "katex-tealD": "#01a995", + "katex-tealE": "#208170", + "katex-greenA": "#b6ffb0", + "katex-greenB": "#8af281", + "katex-greenC": "#74cf70", + "katex-greenD": "#1fab54", + "katex-greenE": "#0d923f", + "katex-goldA": "#ffd0a9", + "katex-goldB": "#ffbb71", + "katex-goldC": "#ff9c39", + "katex-goldD": "#e07d10", + "katex-goldE": "#a75a05", + "katex-redA": "#fca9a9", + "katex-redB": "#ff8482", + "katex-redC": "#f9685d", + "katex-redD": "#e84d39", + "katex-redE": "#bc2612", + "katex-maroonA": "#ffbde0", + "katex-maroonB": "#ff92c6", + "katex-maroonC": "#ed5fa6", + "katex-maroonD": "#ca337c", + "katex-maroonE": "#9e034e", + "katex-purpleA": "#ddd7ff", + "katex-purpleB": "#c6b9fc", + "katex-purpleC": "#aa87ff", + "katex-purpleD": "#7854ab", + "katex-purpleE": "#543b78", + "katex-mintA": "#f5f9e8", + "katex-mintB": "#edf2df", + "katex-mintC": "#e0e5cc", + "katex-grayA": "#f6f7f7", + "katex-grayB": "#f0f1f2", + "katex-grayC": "#e3e5e6", + "katex-grayD": "#d6d8da", + "katex-grayE": "#babec2", + "katex-grayF": "#888d93", + "katex-grayG": "#626569", + "katex-grayH": "#3b3e40", + "katex-grayI": "#21242c", + "katex-kaBlue": "#314453", + "katex-kaGreen": "#71B307" +}; + +/** + * Gets the CSS color of the current options object, accounting for the + * `colorMap`. + */ +Options.prototype.getColor = function() { + if (this.phantom) { + return "transparent"; + } else { + return colorMap[this.color] || this.color; + } +}; + +module.exports = Options; + +},{}],6:[function(require,module,exports){ +/** + * This is the ParseError class, which is the main error thrown by KaTeX + * functions when something has gone wrong. This is used to distinguish internal + * errors from errors in the expression that the user provided. + * + * If possible, a caller should provide a Token or ParseNode with information + * about where in the source string the problem occurred. + * + * @param {string} message The error message + * @param {(Token|ParseNode)=} token An object providing position information + */ +function ParseError(message, token) { + var error = "KaTeX parse error: " + message; + var start; + var end; + + if (token && token.lexer && token.start <= token.end) { + // If we have the input and a position, make the error a bit fancier + + // Get the input + var input = token.lexer.input; + + // Prepend some information + start = token.start; + end = token.end; + if (start === input.length) { + error += " at end of input: "; + } else { + error += " at position " + (start + 1) + ": "; + } + + // Underline token in question using combining underscores + var underlined = input.slice(start, end).replace(/[^]/g, "$&\u0332"); + + // Extract some context from the input and add it to the error + var left; + if (start > 15) { + left = "…" + input.slice(start - 15, start); + } else { + left = input.slice(0, start); + } + var right; + if (end + 15 < input.length) { + right = input.slice(end, end + 15) + "…"; + } else { + right = input.slice(end); + } + error += left + underlined + right; + } + + // Some hackery to make ParseError a prototype of Error + // See http://stackoverflow.com/a/8460753 + var self = new Error(error); + self.name = "ParseError"; + self.__proto__ = ParseError.prototype; + + self.position = start; + return self; +} + +// More hackery +ParseError.prototype.__proto__ = Error.prototype; + +module.exports = ParseError; + +},{}],7:[function(require,module,exports){ +/* eslint no-constant-condition:0 */ +var functions = require("./functions"); +var environments = require("./environments"); +var MacroExpander = require("./MacroExpander"); +var symbols = require("./symbols"); +var utils = require("./utils"); +var cjkRegex = require("./unicodeRegexes").cjkRegex; + +var parseData = require("./parseData"); +var ParseError = require("./ParseError"); + +/** + * This file contains the parser used to parse out a TeX expression from the + * input. Since TeX isn't context-free, standard parsers don't work particularly + * well. + * + * The strategy of this parser is as such: + * + * The main functions (the `.parse...` ones) take a position in the current + * parse string to parse tokens from. The lexer (found in Lexer.js, stored at + * this.lexer) also supports pulling out tokens at arbitrary places. When + * individual tokens are needed at a position, the lexer is called to pull out a + * token, which is then used. + * + * The parser has a property called "mode" indicating the mode that + * the parser is currently in. Currently it has to be one of "math" or + * "text", which denotes whether the current environment is a math-y + * one or a text-y one (e.g. inside \text). Currently, this serves to + * limit the functions which can be used in text mode. + * + * The main functions then return an object which contains the useful data that + * was parsed at its given point, and a new position at the end of the parsed + * data. The main functions can call each other and continue the parsing by + * using the returned position as a new starting point. + * + * There are also extra `.handle...` functions, which pull out some reused + * functionality into self-contained functions. + * + * The earlier functions return ParseNodes. + * The later functions (which are called deeper in the parse) sometimes return + * ParseFuncOrArgument, which contain a ParseNode as well as some data about + * whether the parsed object is a function which is missing some arguments, or a + * standalone object which can be used as an argument to another function. + */ + +/** + * Main Parser class + */ +function Parser(input, settings) { + // Create a new macro expander (gullet) and (indirectly via that) also a + // new lexer (mouth) for this parser (stomach, in the language of TeX) + this.gullet = new MacroExpander(input, settings.macros); + // Store the settings for use in parsing + this.settings = settings; + // Count leftright depth (for \middle errors) + this.leftrightDepth = 0; +} + +var ParseNode = parseData.ParseNode; + +/** + * An initial function (without its arguments), or an argument to a function. + * The `result` argument should be a ParseNode. + */ +function ParseFuncOrArgument(result, isFunction, token) { + this.result = result; + // Is this a function (i.e. is it something defined in functions.js)? + this.isFunction = isFunction; + this.token = token; +} + +/** + * Checks a result to make sure it has the right type, and throws an + * appropriate error otherwise. + * + * @param {boolean=} consume whether to consume the expected token, + * defaults to true + */ +Parser.prototype.expect = function(text, consume) { + if (this.nextToken.text !== text) { + throw new ParseError( + "Expected '" + text + "', got '" + this.nextToken.text + "'", + this.nextToken + ); + } + if (consume !== false) { + this.consume(); + } +}; + +/** + * Considers the current look ahead token as consumed, + * and fetches the one after that as the new look ahead. + */ +Parser.prototype.consume = function() { + this.nextToken = this.gullet.get(this.mode === "math"); +}; + +Parser.prototype.switchMode = function(newMode) { + this.gullet.unget(this.nextToken); + this.mode = newMode; + this.consume(); +}; + +/** + * Main parsing function, which parses an entire input. + * + * @return {?Array.<ParseNode>} + */ +Parser.prototype.parse = function() { + // Try to parse the input + this.mode = "math"; + this.consume(); + var parse = this.parseInput(); + return parse; +}; + +/** + * Parses an entire input tree. + */ +Parser.prototype.parseInput = function() { + // Parse an expression + var expression = this.parseExpression(false); + // If we succeeded, make sure there's an EOF at the end + this.expect("EOF", false); + return expression; +}; + +var endOfExpression = ["}", "\\end", "\\right", "&", "\\\\", "\\cr"]; + +/** + * Parses an "expression", which is a list of atoms. + * + * @param {boolean} breakOnInfix Should the parsing stop when we hit infix + * nodes? This happens when functions have higher precendence + * than infix nodes in implicit parses. + * + * @param {?string} breakOnTokenText The text of the token that the expression + * should end with, or `null` if something else should end the + * expression. + * + * @return {ParseNode} + */ +Parser.prototype.parseExpression = function(breakOnInfix, breakOnTokenText) { + var body = []; + // Keep adding atoms to the body until we can't parse any more atoms (either + // we reached the end, a }, or a \right) + while (true) { + var lex = this.nextToken; + if (endOfExpression.indexOf(lex.text) !== -1) { + break; + } + if (breakOnTokenText && lex.text === breakOnTokenText) { + break; + } + if (breakOnInfix && functions[lex.text] && functions[lex.text].infix) { + break; + } + var atom = this.parseAtom(); + if (!atom) { + if (!this.settings.throwOnError && lex.text[0] === "\\") { + var errorNode = this.handleUnsupportedCmd(); + body.push(errorNode); + continue; + } + + break; + } + body.push(atom); + } + return this.handleInfixNodes(body); +}; + +/** + * Rewrites infix operators such as \over with corresponding commands such + * as \frac. + * + * There can only be one infix operator per group. If there's more than one + * then the expression is ambiguous. This can be resolved by adding {}. + * + * @returns {Array} + */ +Parser.prototype.handleInfixNodes = function(body) { + var overIndex = -1; + var funcName; + + for (var i = 0; i < body.length; i++) { + var node = body[i]; + if (node.type === "infix") { + if (overIndex !== -1) { + throw new ParseError( + "only one infix operator per group", + node.value.token); + } + overIndex = i; + funcName = node.value.replaceWith; + } + } + + if (overIndex !== -1) { + var numerNode; + var denomNode; + + var numerBody = body.slice(0, overIndex); + var denomBody = body.slice(overIndex + 1); + + if (numerBody.length === 1 && numerBody[0].type === "ordgroup") { + numerNode = numerBody[0]; + } else { + numerNode = new ParseNode("ordgroup", numerBody, this.mode); + } + + if (denomBody.length === 1 && denomBody[0].type === "ordgroup") { + denomNode = denomBody[0]; + } else { + denomNode = new ParseNode("ordgroup", denomBody, this.mode); + } + + var value = this.callFunction( + funcName, [numerNode, denomNode], null); + return [new ParseNode(value.type, value, this.mode)]; + } else { + return body; + } +}; + +// The greediness of a superscript or subscript +var SUPSUB_GREEDINESS = 1; + +/** + * Handle a subscript or superscript with nice errors. + */ +Parser.prototype.handleSupSubscript = function(name) { + var symbolToken = this.nextToken; + var symbol = symbolToken.text; + this.consume(); + var group = this.parseGroup(); + + if (!group) { + if (!this.settings.throwOnError && this.nextToken.text[0] === "\\") { + return this.handleUnsupportedCmd(); + } else { + throw new ParseError( + "Expected group after '" + symbol + "'", + symbolToken + ); + } + } else if (group.isFunction) { + // ^ and _ have a greediness, so handle interactions with functions' + // greediness + var funcGreediness = functions[group.result].greediness; + if (funcGreediness > SUPSUB_GREEDINESS) { + return this.parseFunction(group); + } else { + throw new ParseError( + "Got function '" + group.result + "' with no arguments " + + "as " + name, symbolToken); + } + } else { + return group.result; + } +}; + +/** + * Converts the textual input of an unsupported command into a text node + * contained within a color node whose color is determined by errorColor + */ +Parser.prototype.handleUnsupportedCmd = function() { + var text = this.nextToken.text; + var textordArray = []; + + for (var i = 0; i < text.length; i++) { + textordArray.push(new ParseNode("textord", text[i], "text")); + } + + var textNode = new ParseNode( + "text", + { + body: textordArray, + type: "text" + }, + this.mode); + + var colorNode = new ParseNode( + "color", + { + color: this.settings.errorColor, + value: [textNode], + type: "color" + }, + this.mode); + + this.consume(); + return colorNode; +}; + +/** + * Parses a group with optional super/subscripts. + * + * @return {?ParseNode} + */ +Parser.prototype.parseAtom = function() { + // The body of an atom is an implicit group, so that things like + // \left(x\right)^2 work correctly. + var base = this.parseImplicitGroup(); + + // In text mode, we don't have superscripts or subscripts + if (this.mode === "text") { + return base; + } + + // Note that base may be empty (i.e. null) at this point. + + var superscript; + var subscript; + while (true) { + // Lex the first token + var lex = this.nextToken; + + if (lex.text === "\\limits" || lex.text === "\\nolimits") { + // We got a limit control + if (!base || base.type !== "op") { + throw new ParseError( + "Limit controls must follow a math operator", + lex); + } else { + var limits = lex.text === "\\limits"; + base.value.limits = limits; + base.value.alwaysHandleSupSub = true; + } + this.consume(); + } else if (lex.text === "^") { + // We got a superscript start + if (superscript) { + throw new ParseError("Double superscript", lex); + } + superscript = this.handleSupSubscript("superscript"); + } else if (lex.text === "_") { + // We got a subscript start + if (subscript) { + throw new ParseError("Double subscript", lex); + } + subscript = this.handleSupSubscript("subscript"); + } else if (lex.text === "'") { + // We got a prime + var prime = new ParseNode("textord", "\\prime", this.mode); + + // Many primes can be grouped together, so we handle this here + var primes = [prime]; + this.consume(); + // Keep lexing tokens until we get something that's not a prime + while (this.nextToken.text === "'") { + // For each one, add another prime to the list + primes.push(prime); + this.consume(); + } + // Put them into an ordgroup as the superscript + superscript = new ParseNode("ordgroup", primes, this.mode); + } else { + // If it wasn't ^, _, or ', stop parsing super/subscripts + break; + } + } + + if (superscript || subscript) { + // If we got either a superscript or subscript, create a supsub + return new ParseNode("supsub", { + base: base, + sup: superscript, + sub: subscript + }, this.mode); + } else { + // Otherwise return the original body + return base; + } +}; + +// A list of the size-changing functions, for use in parseImplicitGroup +var sizeFuncs = [ + "\\tiny", "\\scriptsize", "\\footnotesize", "\\small", "\\normalsize", + "\\large", "\\Large", "\\LARGE", "\\huge", "\\Huge" +]; + +// A list of the style-changing functions, for use in parseImplicitGroup +var styleFuncs = [ + "\\displaystyle", "\\textstyle", "\\scriptstyle", "\\scriptscriptstyle" +]; + +/** + * Parses an implicit group, which is a group that starts at the end of a + * specified, and ends right before a higher explicit group ends, or at EOL. It + * is used for functions that appear to affect the current style, like \Large or + * \textrm, where instead of keeping a style we just pretend that there is an + * implicit grouping after it until the end of the group. E.g. + * small text {\Large large text} small text again + * It is also used for \left and \right to get the correct grouping. + * + * @return {?ParseNode} + */ +Parser.prototype.parseImplicitGroup = function() { + var start = this.parseSymbol(); + + if (start == null) { + // If we didn't get anything we handle, fall back to parseFunction + return this.parseFunction(); + } + + var func = start.result; + var body; + + if (func === "\\left") { + // If we see a left: + // Parse the entire left function (including the delimiter) + var left = this.parseFunction(start); + // Parse out the implicit body + ++this.leftrightDepth; + body = this.parseExpression(false); + --this.leftrightDepth; + // Check the next token + this.expect("\\right", false); + var right = this.parseFunction(); + return new ParseNode("leftright", { + body: body, + left: left.value.value, + right: right.value.value + }, this.mode); + } else if (func === "\\begin") { + // begin...end is similar to left...right + var begin = this.parseFunction(start); + var envName = begin.value.name; + if (!environments.hasOwnProperty(envName)) { + throw new ParseError( + "No such environment: " + envName, begin.value.nameGroup); + } + // Build the environment object. Arguments and other information will + // be made available to the begin and end methods using properties. + var env = environments[envName]; + var args = this.parseArguments("\\begin{" + envName + "}", env); + var context = { + mode: this.mode, + envName: envName, + parser: this, + positions: args.pop() + }; + var result = env.handler(context, args); + this.expect("\\end", false); + var endNameToken = this.nextToken; + var end = this.parseFunction(); + if (end.value.name !== envName) { + throw new ParseError( + "Mismatch: \\begin{" + envName + "} matched " + + "by \\end{" + end.value.name + "}", + endNameToken); + } + result.position = end.position; + return result; + } else if (utils.contains(sizeFuncs, func)) { + // If we see a sizing function, parse out the implict body + body = this.parseExpression(false); + return new ParseNode("sizing", { + // Figure out what size to use based on the list of functions above + size: "size" + (utils.indexOf(sizeFuncs, func) + 1), + value: body + }, this.mode); + } else if (utils.contains(styleFuncs, func)) { + // If we see a styling function, parse out the implict body + body = this.parseExpression(true); + return new ParseNode("styling", { + // Figure out what style to use by pulling out the style from + // the function name + style: func.slice(1, func.length - 5), + value: body + }, this.mode); + } else { + // Defer to parseFunction if it's not a function we handle + return this.parseFunction(start); + } +}; + +/** + * Parses an entire function, including its base and all of its arguments. + * The base might either have been parsed already, in which case + * it is provided as an argument, or it's the next group in the input. + * + * @param {ParseFuncOrArgument=} baseGroup optional as described above + * @return {?ParseNode} + */ +Parser.prototype.parseFunction = function(baseGroup) { + if (!baseGroup) { + baseGroup = this.parseGroup(); + } + + if (baseGroup) { + if (baseGroup.isFunction) { + var func = baseGroup.result; + var funcData = functions[func]; + if (this.mode === "text" && !funcData.allowedInText) { + throw new ParseError( + "Can't use function '" + func + "' in text mode", + baseGroup.token); + } + + var args = this.parseArguments(func, funcData); + var token = baseGroup.token; + var result = this.callFunction(func, args, args.pop(), token); + return new ParseNode(result.type, result, this.mode); + } else { + return baseGroup.result; + } + } else { + return null; + } +}; + +/** + * Call a function handler with a suitable context and arguments. + */ +Parser.prototype.callFunction = function(name, args, positions, token) { + var context = { + funcName: name, + parser: this, + positions: positions, + token: token + }; + return functions[name].handler(context, args); +}; + +/** + * Parses the arguments of a function or environment + * + * @param {string} func "\name" or "\begin{name}" + * @param {{numArgs:number,numOptionalArgs:number|undefined}} funcData + * @return the array of arguments, with the list of positions as last element + */ +Parser.prototype.parseArguments = function(func, funcData) { + var totalArgs = funcData.numArgs + funcData.numOptionalArgs; + if (totalArgs === 0) { + return [[this.pos]]; + } + + var baseGreediness = funcData.greediness; + var positions = [this.pos]; + var args = []; + + for (var i = 0; i < totalArgs; i++) { + var nextToken = this.nextToken; + var argType = funcData.argTypes && funcData.argTypes[i]; + var arg; + if (i < funcData.numOptionalArgs) { + if (argType) { + arg = this.parseGroupOfType(argType, true); + } else { + arg = this.parseGroup(true); + } + if (!arg) { + args.push(null); + positions.push(this.pos); + continue; + } + } else { + if (argType) { + arg = this.parseGroupOfType(argType); + } else { + arg = this.parseGroup(); + } + if (!arg) { + if (!this.settings.throwOnError && + this.nextToken.text[0] === "\\") { + arg = new ParseFuncOrArgument( + this.handleUnsupportedCmd(this.nextToken.text), + false); + } else { + throw new ParseError( + "Expected group after '" + func + "'", nextToken); + } + } + } + var argNode; + if (arg.isFunction) { + var argGreediness = + functions[arg.result].greediness; + if (argGreediness > baseGreediness) { + argNode = this.parseFunction(arg); + } else { + throw new ParseError( + "Got function '" + arg.result + "' as " + + "argument to '" + func + "'", nextToken); + } + } else { + argNode = arg.result; + } + args.push(argNode); + positions.push(this.pos); + } + + args.push(positions); + + return args; +}; + + +/** + * Parses a group when the mode is changing. + * + * @return {?ParseFuncOrArgument} + */ +Parser.prototype.parseGroupOfType = function(innerMode, optional) { + var outerMode = this.mode; + // Handle `original` argTypes + if (innerMode === "original") { + innerMode = outerMode; + } + + if (innerMode === "color") { + return this.parseColorGroup(optional); + } + if (innerMode === "size") { + return this.parseSizeGroup(optional); + } + + this.switchMode(innerMode); + if (innerMode === "text") { + // text mode is special because it should ignore the whitespace before + // it + while (this.nextToken.text === " ") { + this.consume(); + } + } + // By the time we get here, innerMode is one of "text" or "math". + // We switch the mode of the parser, recurse, then restore the old mode. + var res = this.parseGroup(optional); + this.switchMode(outerMode); + return res; +}; + +/** + * Parses a group, essentially returning the string formed by the + * brace-enclosed tokens plus some position information. + * + * @param {string} modeName Used to describe the mode in error messages + * @param {boolean=} optional Whether the group is optional or required + */ +Parser.prototype.parseStringGroup = function(modeName, optional) { + if (optional && this.nextToken.text !== "[") { + return null; + } + var outerMode = this.mode; + this.mode = "text"; + this.expect(optional ? "[" : "{"); + var str = ""; + var firstToken = this.nextToken; + var lastToken = firstToken; + while (this.nextToken.text !== (optional ? "]" : "}")) { + if (this.nextToken.text === "EOF") { + throw new ParseError( + "Unexpected end of input in " + modeName, + firstToken.range(this.nextToken, str)); + } + lastToken = this.nextToken; + str += lastToken.text; + this.consume(); + } + this.mode = outerMode; + this.expect(optional ? "]" : "}"); + return firstToken.range(lastToken, str); +}; + +/** + * Parses a regex-delimited group: the largest sequence of tokens + * whose concatenated strings match `regex`. Returns the string + * formed by the tokens plus some position information. + * + * @param {RegExp} regex + * @param {string} modeName Used to describe the mode in error messages + */ +Parser.prototype.parseRegexGroup = function(regex, modeName) { + var outerMode = this.mode; + this.mode = "text"; + var firstToken = this.nextToken; + var lastToken = firstToken; + var str = ""; + while (this.nextToken.text !== "EOF" + && regex.test(str + this.nextToken.text)) { + lastToken = this.nextToken; + str += lastToken.text; + this.consume(); + } + if (str === "") { + throw new ParseError( + "Invalid " + modeName + ": '" + firstToken.text + "'", + firstToken); + } + this.mode = outerMode; + return firstToken.range(lastToken, str); +}; + +/** + * Parses a color description. + */ +Parser.prototype.parseColorGroup = function(optional) { + var res = this.parseStringGroup("color", optional); + if (!res) { + return null; + } + var match = (/^(#[a-z0-9]+|[a-z]+)$/i).exec(res.text); + if (!match) { + throw new ParseError("Invalid color: '" + res.text + "'", res); + } + return new ParseFuncOrArgument( + new ParseNode("color", match[0], this.mode), + false); +}; + +/** + * Parses a size specification, consisting of magnitude and unit. + */ +Parser.prototype.parseSizeGroup = function(optional) { + var res; + if (!optional && this.nextToken.text !== "{") { + res = this.parseRegexGroup( + /^[-+]? *(?:$|\d+|\d+\.\d*|\.\d*) *[a-z]{0,2}$/, "size"); + } else { + res = this.parseStringGroup("size", optional); + } + if (!res) { + return null; + } + var match = (/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/).exec(res.text); + if (!match) { + throw new ParseError("Invalid size: '" + res.text + "'", res); + } + var data = { + number: +(match[1] + match[2]), // sign + magnitude, cast to number + unit: match[3] + }; + if (data.unit !== "em" && data.unit !== "ex" && data.unit !== "mu") { + throw new ParseError("Invalid unit: '" + data.unit + "'", res); + } + return new ParseFuncOrArgument( + new ParseNode("color", data, this.mode), + false); +}; + +/** + * If the argument is false or absent, this parses an ordinary group, + * which is either a single nucleus (like "x") or an expression + * in braces (like "{x+y}"). + * If the argument is true, it parses either a bracket-delimited expression + * (like "[x+y]") or returns null to indicate the absence of a + * bracket-enclosed group. + * + * @param {boolean=} optional Whether the group is optional or required + * @return {?ParseFuncOrArgument} + */ +Parser.prototype.parseGroup = function(optional) { + var firstToken = this.nextToken; + // Try to parse an open brace + if (this.nextToken.text === (optional ? "[" : "{")) { + // If we get a brace, parse an expression + this.consume(); + var expression = this.parseExpression(false, optional ? "]" : null); + var lastToken = this.nextToken; + // Make sure we get a close brace + this.expect(optional ? "]" : "}"); + if (this.mode === "text") { + this.formLigatures(expression); + } + return new ParseFuncOrArgument( + new ParseNode("ordgroup", expression, this.mode, + firstToken, lastToken), + false); + } else { + // Otherwise, just return a nucleus, or nothing for an optional group + return optional ? null : this.parseSymbol(); + } +}; + +/** + * Form ligature-like combinations of characters for text mode. + * This includes inputs like "--", "---", "``" and "''". + * The result will simply replace multiple textord nodes with a single + * character in each value by a single textord node having multiple + * characters in its value. The representation is still ASCII source. + * + * @param {Array.<ParseNode>} group the nodes of this group, + * list will be moified in place + */ +Parser.prototype.formLigatures = function(group) { + var i; + var n = group.length - 1; + for (i = 0; i < n; ++i) { + var a = group[i]; + var v = a.value; + if (v === "-" && group[i + 1].value === "-") { + if (i + 1 < n && group[i + 2].value === "-") { + group.splice(i, 3, new ParseNode( + "textord", "---", "text", a, group[i + 2])); + n -= 2; + } else { + group.splice(i, 2, new ParseNode( + "textord", "--", "text", a, group[i + 1])); + n -= 1; + } + } + if ((v === "'" || v === "`") && group[i + 1].value === v) { + group.splice(i, 2, new ParseNode( + "textord", v + v, "text", a, group[i + 1])); + n -= 1; + } + } +}; + +/** + * Parse a single symbol out of the string. Here, we handle both the functions + * we have defined, as well as the single character symbols + * + * @return {?ParseFuncOrArgument} + */ +Parser.prototype.parseSymbol = function() { + var nucleus = this.nextToken; + + if (functions[nucleus.text]) { + this.consume(); + // If there exists a function with this name, we return the function and + // say that it is a function. + return new ParseFuncOrArgument( + nucleus.text, + true, nucleus); + } else if (symbols[this.mode][nucleus.text]) { + this.consume(); + // Otherwise if this is a no-argument function, find the type it + // corresponds to in the symbols map + return new ParseFuncOrArgument( + new ParseNode(symbols[this.mode][nucleus.text].group, + nucleus.text, this.mode, nucleus), + false, nucleus); + } else if (this.mode === "text" && cjkRegex.test(nucleus.text)) { + this.consume(); + return new ParseFuncOrArgument( + new ParseNode("textord", nucleus.text, this.mode, nucleus), + false, nucleus); + } else { + return null; + } +}; + +Parser.prototype.ParseNode = ParseNode; + +module.exports = Parser; + +},{"./MacroExpander":4,"./ParseError":6,"./environments":16,"./functions":19,"./parseData":21,"./symbols":23,"./unicodeRegexes":24,"./utils":25}],8:[function(require,module,exports){ +/** + * This is a module for storing settings passed into KaTeX. It correctly handles + * default settings. + */ + +/** + * Helper function for getting a default value if the value is undefined + */ +function get(option, defaultValue) { + return option === undefined ? defaultValue : option; +} + +/** + * The main Settings object + * + * The current options stored are: + * - displayMode: Whether the expression should be typeset by default in + * textstyle or displaystyle (default false) + */ +function Settings(options) { + // allow null options + options = options || {}; + this.displayMode = get(options.displayMode, false); + this.throwOnError = get(options.throwOnError, true); + this.errorColor = get(options.errorColor, "#cc0000"); + this.macros = options.macros || {}; +} + +module.exports = Settings; + +},{}],9:[function(require,module,exports){ +/** + * This file contains information and classes for the various kinds of styles + * used in TeX. It provides a generic `Style` class, which holds information + * about a specific style. It then provides instances of all the different kinds + * of styles possible, and provides functions to move between them and get + * information about them. + */ + +var sigmas = require("./fontMetrics.js").sigmas; + +var metrics = [{}, {}, {}]; +var i; +for (var key in sigmas) { + if (sigmas.hasOwnProperty(key)) { + for (i = 0; i < 3; i++) { + metrics[i][key] = sigmas[key][i]; + } + } +} +for (i = 0; i < 3; i++) { + metrics[i].emPerEx = sigmas.xHeight[i] / sigmas.quad[i]; +} + +/** + * The main style class. Contains a unique id for the style, a size (which is + * the same for cramped and uncramped version of a style), a cramped flag, and a + * size multiplier, which gives the size difference between a style and + * textstyle. + */ +function Style(id, size, multiplier, cramped) { + this.id = id; + this.size = size; + this.cramped = cramped; + this.sizeMultiplier = multiplier; + this.metrics = metrics[size > 0 ? size - 1 : 0]; +} + +/** + * Get the style of a superscript given a base in the current style. + */ +Style.prototype.sup = function() { + return styles[sup[this.id]]; +}; + +/** + * Get the style of a subscript given a base in the current style. + */ +Style.prototype.sub = function() { + return styles[sub[this.id]]; +}; + +/** + * Get the style of a fraction numerator given the fraction in the current + * style. + */ +Style.prototype.fracNum = function() { + return styles[fracNum[this.id]]; +}; + +/** + * Get the style of a fraction denominator given the fraction in the current + * style. + */ +Style.prototype.fracDen = function() { + return styles[fracDen[this.id]]; +}; + +/** + * Get the cramped version of a style (in particular, cramping a cramped style + * doesn't change the style). + */ +Style.prototype.cramp = function() { + return styles[cramp[this.id]]; +}; + +/** + * HTML class name, like "displaystyle cramped" + */ +Style.prototype.cls = function() { + return sizeNames[this.size] + (this.cramped ? " cramped" : " uncramped"); +}; + +/** + * HTML Reset class name, like "reset-textstyle" + */ +Style.prototype.reset = function() { + return resetNames[this.size]; +}; + +/** + * Return if this style is tightly spaced (scriptstyle/scriptscriptstyle) + */ +Style.prototype.isTight = function() { + return this.size >= 2; +}; + +// IDs of the different styles +var D = 0; +var Dc = 1; +var T = 2; +var Tc = 3; +var S = 4; +var Sc = 5; +var SS = 6; +var SSc = 7; + +// String names for the different sizes +var sizeNames = [ + "displaystyle textstyle", + "textstyle", + "scriptstyle", + "scriptscriptstyle" +]; + +// Reset names for the different sizes +var resetNames = [ + "reset-textstyle", + "reset-textstyle", + "reset-scriptstyle", + "reset-scriptscriptstyle" +]; + +// Instances of the different styles +var styles = [ + new Style(D, 0, 1.0, false), + new Style(Dc, 0, 1.0, true), + new Style(T, 1, 1.0, false), + new Style(Tc, 1, 1.0, true), + new Style(S, 2, 0.7, false), + new Style(Sc, 2, 0.7, true), + new Style(SS, 3, 0.5, false), + new Style(SSc, 3, 0.5, true) +]; + +// Lookup tables for switching from one style to another +var sup = [S, Sc, S, Sc, SS, SSc, SS, SSc]; +var sub = [Sc, Sc, Sc, Sc, SSc, SSc, SSc, SSc]; +var fracNum = [T, Tc, S, Sc, SS, SSc, SS, SSc]; +var fracDen = [Tc, Tc, Sc, Sc, SSc, SSc, SSc, SSc]; +var cramp = [Dc, Dc, Tc, Tc, Sc, Sc, SSc, SSc]; + +// We only export some of the styles. Also, we don't export the `Style` class so +// no more styles can be generated. +module.exports = { + DISPLAY: styles[D], + TEXT: styles[T], + SCRIPT: styles[S], + SCRIPTSCRIPT: styles[SS] +}; + +},{"./fontMetrics.js":17}],10:[function(require,module,exports){ +/* eslint no-console:0 */ +/** + * This module contains general functions that can be used for building + * different kinds of domTree nodes in a consistent manner. + */ + +var domTree = require("./domTree"); +var fontMetrics = require("./fontMetrics"); +var symbols = require("./symbols"); +var utils = require("./utils"); + +var greekCapitals = [ + "\\Gamma", + "\\Delta", + "\\Theta", + "\\Lambda", + "\\Xi", + "\\Pi", + "\\Sigma", + "\\Upsilon", + "\\Phi", + "\\Psi", + "\\Omega" +]; + +// The following have to be loaded from Main-Italic font, using class mainit +var mainitLetters = [ + "\u0131", // dotless i, \imath + "\u0237", // dotless j, \jmath + "\u00a3" // \pounds +]; + +/** + * Makes a symbolNode after translation via the list of symbols in symbols.js. + * Correctly pulls out metrics for the character, and optionally takes a list of + * classes to be attached to the node. + * + * TODO: make argument order closer to makeSpan + * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which + * should if present come first in `classes`. + */ +var makeSymbol = function(value, fontFamily, mode, options, classes) { + // Replace the value with its replaced value from symbol.js + if (symbols[mode][value] && symbols[mode][value].replace) { + value = symbols[mode][value].replace; + } + + var metrics = fontMetrics.getCharacterMetrics(value, fontFamily); + + var symbolNode; + if (metrics) { + var italic = metrics.italic; + if (mode === "text") { + italic = 0; + } + symbolNode = new domTree.symbolNode( + value, metrics.height, metrics.depth, italic, metrics.skew, + classes); + } else { + // TODO(emily): Figure out a good way to only print this in development + typeof console !== "undefined" && console.warn( + "No character metrics for '" + value + "' in style '" + + fontFamily + "'"); + symbolNode = new domTree.symbolNode(value, 0, 0, 0, 0, classes); + } + + if (options) { + if (options.style.isTight()) { + symbolNode.classes.push("mtight"); + } + if (options.getColor()) { + symbolNode.style.color = options.getColor(); + } + } + + return symbolNode; +}; + +/** + * Makes a symbol in Main-Regular or AMS-Regular. + * Used for rel, bin, open, close, inner, and punct. + */ +var mathsym = function(value, mode, options, classes) { + // Decide what font to render the symbol in by its entry in the symbols + // table. + // Have a special case for when the value = \ because the \ is used as a + // textord in unsupported command errors but cannot be parsed as a regular + // text ordinal and is therefore not present as a symbol in the symbols + // table for text + if (value === "\\" || symbols[mode][value].font === "main") { + return makeSymbol(value, "Main-Regular", mode, options, classes); + } else { + return makeSymbol( + value, "AMS-Regular", mode, options, classes.concat(["amsrm"])); + } +}; + +/** + * Makes a symbol in the default font for mathords and textords. + */ +var mathDefault = function(value, mode, options, classes, type) { + if (type === "mathord") { + return mathit(value, mode, options, classes); + } else if (type === "textord") { + return makeSymbol( + value, "Main-Regular", mode, options, classes.concat(["mathrm"])); + } else { + throw new Error("unexpected type: " + type + " in mathDefault"); + } +}; + +/** + * Makes a symbol in the italic math font. + */ +var mathit = function(value, mode, options, classes) { + if (/[0-9]/.test(value.charAt(0)) || + // glyphs for \imath and \jmath do not exist in Math-Italic so we + // need to use Main-Italic instead + utils.contains(mainitLetters, value) || + utils.contains(greekCapitals, value)) { + return makeSymbol( + value, "Main-Italic", mode, options, classes.concat(["mainit"])); + } else { + return makeSymbol( + value, "Math-Italic", mode, options, classes.concat(["mathit"])); + } +}; + +/** + * Makes either a mathord or textord in the correct font and color. + */ +var makeOrd = function(group, options, type) { + var mode = group.mode; + var value = group.value; + if (symbols[mode][value] && symbols[mode][value].replace) { + value = symbols[mode][value].replace; + } + + var classes = ["mord"]; + + var font = options.font; + if (font) { + if (font === "mathit" || utils.contains(mainitLetters, value)) { + return mathit(value, mode, options, classes); + } else { + var fontName = fontMap[font].fontName; + if (fontMetrics.getCharacterMetrics(value, fontName)) { + return makeSymbol( + value, fontName, mode, options, classes.concat([font])); + } else { + return mathDefault(value, mode, options, classes, type); + } + } + } else { + return mathDefault(value, mode, options, classes, type); + } +}; + +/** + * Calculate the height, depth, and maxFontSize of an element based on its + * children. + */ +var sizeElementFromChildren = function(elem) { + var height = 0; + var depth = 0; + var maxFontSize = 0; + + if (elem.children) { + for (var i = 0; i < elem.children.length; i++) { + if (elem.children[i].height > height) { + height = elem.children[i].height; + } + if (elem.children[i].depth > depth) { + depth = elem.children[i].depth; + } + if (elem.children[i].maxFontSize > maxFontSize) { + maxFontSize = elem.children[i].maxFontSize; + } + } + } + + elem.height = height; + elem.depth = depth; + elem.maxFontSize = maxFontSize; +}; + +/** + * Makes a span with the given list of classes, list of children, and options. + * + * TODO: Ensure that `options` is always provided (currently some call sites + * don't pass it). + * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which + * should if present come first in `classes`. + */ +var makeSpan = function(classes, children, options) { + var span = new domTree.span(classes, children, options); + + sizeElementFromChildren(span); + + return span; +}; + +/** + * Prepends the given children to the given span, updating height, depth, and + * maxFontSize. + */ +var prependChildren = function(span, children) { + span.children = children.concat(span.children); + + sizeElementFromChildren(span); +}; + +/** + * Makes a document fragment with the given list of children. + */ +var makeFragment = function(children) { + var fragment = new domTree.documentFragment(children); + + sizeElementFromChildren(fragment); + + return fragment; +}; + +/** + * Makes an element placed in each of the vlist elements to ensure that each + * element has the same max font size. To do this, we create a zero-width space + * with the correct font size. + */ +var makeFontSizer = function(options, fontSize) { + var fontSizeInner = makeSpan([], [new domTree.symbolNode("\u200b")]); + fontSizeInner.style.fontSize = + (fontSize / options.style.sizeMultiplier) + "em"; + + var fontSizer = makeSpan( + ["fontsize-ensurer", "reset-" + options.size, "size5"], + [fontSizeInner]); + + return fontSizer; +}; + +/** + * Makes a vertical list by stacking elements and kerns on top of each other. + * Allows for many different ways of specifying the positioning method. + * + * Arguments: + * - children: A list of child or kern nodes to be stacked on top of each other + * (i.e. the first element will be at the bottom, and the last at + * the top). Element nodes are specified as + * {type: "elem", elem: node} + * while kern nodes are specified as + * {type: "kern", size: size} + * - positionType: The method by which the vlist should be positioned. Valid + * values are: + * - "individualShift": The children list only contains elem + * nodes, and each node contains an extra + * "shift" value of how much it should be + * shifted (note that shifting is always + * moving downwards). positionData is + * ignored. + * - "top": The positionData specifies the topmost point of + * the vlist (note this is expected to be a height, + * so positive values move up) + * - "bottom": The positionData specifies the bottommost point + * of the vlist (note this is expected to be a + * depth, so positive values move down + * - "shift": The vlist will be positioned such that its + * baseline is positionData away from the baseline + * of the first child. Positive values move + * downwards. + * - "firstBaseline": The vlist will be positioned such that + * its baseline is aligned with the + * baseline of the first child. + * positionData is ignored. (this is + * equivalent to "shift" with + * positionData=0) + * - positionData: Data used in different ways depending on positionType + * - options: An Options object + * + */ +var makeVList = function(children, positionType, positionData, options) { + var depth; + var currPos; + var i; + if (positionType === "individualShift") { + var oldChildren = children; + children = [oldChildren[0]]; + + // Add in kerns to the list of children to get each element to be + // shifted to the correct specified shift + depth = -oldChildren[0].shift - oldChildren[0].elem.depth; + currPos = depth; + for (i = 1; i < oldChildren.length; i++) { + var diff = -oldChildren[i].shift - currPos - + oldChildren[i].elem.depth; + var size = diff - + (oldChildren[i - 1].elem.height + + oldChildren[i - 1].elem.depth); + + currPos = currPos + diff; + + children.push({type: "kern", size: size}); + children.push(oldChildren[i]); + } + } else if (positionType === "top") { + // We always start at the bottom, so calculate the bottom by adding up + // all the sizes + var bottom = positionData; + for (i = 0; i < children.length; i++) { + if (children[i].type === "kern") { + bottom -= children[i].size; + } else { + bottom -= children[i].elem.height + children[i].elem.depth; + } + } + depth = bottom; + } else if (positionType === "bottom") { + depth = -positionData; + } else if (positionType === "shift") { + depth = -children[0].elem.depth - positionData; + } else if (positionType === "firstBaseline") { + depth = -children[0].elem.depth; + } else { + depth = 0; + } + + // Make the fontSizer + var maxFontSize = 0; + for (i = 0; i < children.length; i++) { + if (children[i].type === "elem") { + maxFontSize = Math.max(maxFontSize, children[i].elem.maxFontSize); + } + } + var fontSizer = makeFontSizer(options, maxFontSize); + + // Create a new list of actual children at the correct offsets + var realChildren = []; + currPos = depth; + for (i = 0; i < children.length; i++) { + if (children[i].type === "kern") { + currPos += children[i].size; + } else { + var child = children[i].elem; + + var shift = -child.depth - currPos; + currPos += child.height + child.depth; + + var childWrap = makeSpan([], [fontSizer, child]); + childWrap.height -= shift; + childWrap.depth += shift; + childWrap.style.top = shift + "em"; + + realChildren.push(childWrap); + } + } + + // Add in an element at the end with no offset to fix the calculation of + // baselines in some browsers (namely IE, sometimes safari) + var baselineFix = makeSpan( + ["baseline-fix"], [fontSizer, new domTree.symbolNode("\u200b")]); + realChildren.push(baselineFix); + + var vlist = makeSpan(["vlist"], realChildren); + // Fix the final height and depth, in case there were kerns at the ends + // since the makeSpan calculation won't take that in to account. + vlist.height = Math.max(currPos, vlist.height); + vlist.depth = Math.max(-depth, vlist.depth); + return vlist; +}; + +// A table of size -> font size for the different sizing functions +var sizingMultiplier = { + size1: 0.5, + size2: 0.7, + size3: 0.8, + size4: 0.9, + size5: 1.0, + size6: 1.2, + size7: 1.44, + size8: 1.73, + size9: 2.07, + size10: 2.49 +}; + +// A map of spacing functions to their attributes, like size and corresponding +// CSS class +var spacingFunctions = { + "\\qquad": { + size: "2em", + className: "qquad" + }, + "\\quad": { + size: "1em", + className: "quad" + }, + "\\enspace": { + size: "0.5em", + className: "enspace" + }, + "\\;": { + size: "0.277778em", + className: "thickspace" + }, + "\\:": { + size: "0.22222em", + className: "mediumspace" + }, + "\\,": { + size: "0.16667em", + className: "thinspace" + }, + "\\!": { + size: "-0.16667em", + className: "negativethinspace" + } +}; + +/** + * Maps TeX font commands to objects containing: + * - variant: string used for "mathvariant" attribute in buildMathML.js + * - fontName: the "style" parameter to fontMetrics.getCharacterMetrics + */ +// A map between tex font commands an MathML mathvariant attribute values +var fontMap = { + // styles + "mathbf": { + variant: "bold", + fontName: "Main-Bold" + }, + "mathrm": { + variant: "normal", + fontName: "Main-Regular" + }, + "textit": { + variant: "italic", + fontName: "Main-Italic" + }, + + // "mathit" is missing because it requires the use of two fonts: Main-Italic + // and Math-Italic. This is handled by a special case in makeOrd which ends + // up calling mathit. + + // families + "mathbb": { + variant: "double-struck", + fontName: "AMS-Regular" + }, + "mathcal": { + variant: "script", + fontName: "Caligraphic-Regular" + }, + "mathfrak": { + variant: "fraktur", + fontName: "Fraktur-Regular" + }, + "mathscr": { + variant: "script", + fontName: "Script-Regular" + }, + "mathsf": { + variant: "sans-serif", + fontName: "SansSerif-Regular" + }, + "mathtt": { + variant: "monospace", + fontName: "Typewriter-Regular" + } +}; + +module.exports = { + fontMap: fontMap, + makeSymbol: makeSymbol, + mathsym: mathsym, + makeSpan: makeSpan, + makeFragment: makeFragment, + makeVList: makeVList, + makeOrd: makeOrd, + prependChildren: prependChildren, + sizingMultiplier: sizingMultiplier, + spacingFunctions: spacingFunctions +}; + +},{"./domTree":15,"./fontMetrics":17,"./symbols":23,"./utils":25}],11:[function(require,module,exports){ +/* eslint no-console:0 */ +/** + * This file does the main work of building a domTree structure from a parse + * tree. The entry point is the `buildHTML` function, which takes a parse tree. + * Then, the buildExpression, buildGroup, and various groupTypes functions are + * called, to produce a final HTML tree. + */ + +var ParseError = require("./ParseError"); +var Style = require("./Style"); + +var buildCommon = require("./buildCommon"); +var delimiter = require("./delimiter"); +var domTree = require("./domTree"); +var fontMetrics = require("./fontMetrics"); +var utils = require("./utils"); + +var makeSpan = buildCommon.makeSpan; + +var isSpace = function(node) { + return node instanceof domTree.span && node.classes[0] === "mspace"; +}; + +// Binary atoms (first class `mbin`) change into ordinary atoms (`mord`) +// depending on their surroundings. See TeXbook pg. 442-446, Rules 5 and 6, +// and the text before Rule 19. + +var isBin = function(node) { + return node && node.classes[0] === "mbin"; +}; + +var isBinLeftCanceller = function(node, isRealGroup) { + // TODO: This code assumes that a node's math class is the first element + // of its `classes` array. A later cleanup should ensure this, for + // instance by changing the signature of `makeSpan`. + if (node) { + return utils.contains(["mbin", "mopen", "mrel", "mop", "mpunct"], + node.classes[0]); + } else { + return isRealGroup; + } +}; + +var isBinRightCanceller = function(node, isRealGroup) { + if (node) { + return utils.contains(["mrel", "mclose", "mpunct"], node.classes[0]); + } else { + return isRealGroup; + } +}; + +/** + * Take a list of nodes, build them in order, and return a list of the built + * nodes. documentFragments are flattened into their contents, so the + * returned list contains no fragments. `isRealGroup` is true if `expression` + * is a real group (no atoms will be added on either side), as opposed to + * a partial group (e.g. one created by \color). + */ +var buildExpression = function(expression, options, isRealGroup) { + // Parse expressions into `groups`. + var groups = []; + for (var i = 0; i < expression.length; i++) { + var group = expression[i]; + var output = buildGroup(group, options); + if (output instanceof domTree.documentFragment) { + Array.prototype.push.apply(groups, output.children); + } else { + groups.push(output); + } + } + // At this point `groups` consists entirely of `symbolNode`s and `span`s. + + // Explicit spaces (e.g., \;, \,) should be ignored with respect to atom + // spacing (e.g., "add thick space between mord and mrel"). Since CSS + // adjacency rules implement atom spacing, spaces should be invisible to + // CSS. So we splice them out of `groups` and into the atoms themselves. + var spaces = null; + for (i = 0; i < groups.length; i++) { + if (isSpace(groups[i])) { + spaces = spaces || []; + spaces.push(groups[i]); + groups.splice(i, 1); + i--; + } else if (spaces) { + if (groups[i] instanceof domTree.symbolNode) { + groups[i] = makeSpan([].concat(groups[i].classes), [groups[i]]); + } + buildCommon.prependChildren(groups[i], spaces); + spaces = null; + } + } + if (spaces) { + Array.prototype.push.apply(groups, spaces); + } + + // Binary operators change to ordinary symbols in some contexts. + for (i = 0; i < groups.length; i++) { + if (isBin(groups[i]) + && (isBinLeftCanceller(groups[i - 1], isRealGroup) + || isBinRightCanceller(groups[i + 1], isRealGroup))) { + groups[i].classes[0] = "mord"; + } + } + + return groups; +}; + +// Return math atom class (mclass) of a domTree. +var getTypeOfDomTree = function(node) { + if (node instanceof domTree.documentFragment) { + if (node.children.length) { + return getTypeOfDomTree( + node.children[node.children.length - 1]); + } + } else { + if (utils.contains(["mord", "mop", "mbin", "mrel", "mopen", "mclose", + "mpunct", "minner"], node.classes[0])) { + return node.classes[0]; + } + } + return null; +}; + +/** + * Sometimes, groups perform special rules when they have superscripts or + * subscripts attached to them. This function lets the `supsub` group know that + * its inner element should handle the superscripts and subscripts instead of + * handling them itself. + */ +var shouldHandleSupSub = function(group, options) { + if (!group) { + return false; + } else if (group.type === "op") { + // Operators handle supsubs differently when they have limits + // (e.g. `\displaystyle\sum_2^3`) + return group.value.limits && + (options.style.size === Style.DISPLAY.size || + group.value.alwaysHandleSupSub); + } else if (group.type === "accent") { + return isCharacterBox(group.value.base); + } else { + return null; + } +}; + +/** + * Sometimes we want to pull out the innermost element of a group. In most + * cases, this will just be the group itself, but when ordgroups and colors have + * a single element, we want to pull that out. + */ +var getBaseElem = function(group) { + if (!group) { + return false; + } else if (group.type === "ordgroup") { + if (group.value.length === 1) { + return getBaseElem(group.value[0]); + } else { + return group; + } + } else if (group.type === "color") { + if (group.value.value.length === 1) { + return getBaseElem(group.value.value[0]); + } else { + return group; + } + } else if (group.type === "font") { + return getBaseElem(group.value.body); + } else { + return group; + } +}; + +/** + * TeXbook algorithms often reference "character boxes", which are simply groups + * with a single character in them. To decide if something is a character box, + * we find its innermost group, and see if it is a single character. + */ +var isCharacterBox = function(group) { + var baseElem = getBaseElem(group); + + // These are all they types of groups which hold single characters + return baseElem.type === "mathord" || + baseElem.type === "textord" || + baseElem.type === "bin" || + baseElem.type === "rel" || + baseElem.type === "inner" || + baseElem.type === "open" || + baseElem.type === "close" || + baseElem.type === "punct"; +}; + +var makeNullDelimiter = function(options, classes) { + return makeSpan(classes.concat([ + "sizing", "reset-" + options.size, "size5", + options.style.reset(), Style.TEXT.cls(), + "nulldelimiter"])); +}; + +/** + * This is a map of group types to the function used to handle that type. + * Simpler types come at the beginning, while complicated types come afterwards. + */ +var groupTypes = {}; + +groupTypes.mathord = function(group, options) { + return buildCommon.makeOrd(group, options, "mathord"); +}; + +groupTypes.textord = function(group, options) { + return buildCommon.makeOrd(group, options, "textord"); +}; + +groupTypes.bin = function(group, options) { + return buildCommon.mathsym( + group.value, group.mode, options, ["mbin"]); +}; + +groupTypes.rel = function(group, options) { + return buildCommon.mathsym( + group.value, group.mode, options, ["mrel"]); +}; + +groupTypes.open = function(group, options) { + return buildCommon.mathsym( + group.value, group.mode, options, ["mopen"]); +}; + +groupTypes.close = function(group, options) { + return buildCommon.mathsym( + group.value, group.mode, options, ["mclose"]); +}; + +groupTypes.inner = function(group, options) { + return buildCommon.mathsym( + group.value, group.mode, options, ["minner"]); +}; + +groupTypes.punct = function(group, options) { + return buildCommon.mathsym( + group.value, group.mode, options, ["mpunct"]); +}; + +groupTypes.ordgroup = function(group, options) { + return makeSpan( + ["mord", options.style.cls()], + buildExpression(group.value, options.reset(), true), + options + ); +}; + +groupTypes.text = function(group, options) { + var newOptions = options.withFont(group.value.style); + var inner = buildExpression(group.value.body, newOptions, true); + for (var i = 0; i < inner.length - 1; i++) { + if (inner[i].tryCombine(inner[i + 1])) { + inner.splice(i + 1, 1); + i--; + } + } + return makeSpan(["mord", "text", newOptions.style.cls()], + inner, newOptions); +}; + +groupTypes.color = function(group, options) { + var elements = buildExpression( + group.value.value, + options.withColor(group.value.color), + false + ); + + // \color isn't supposed to affect the type of the elements it contains. + // To accomplish this, we wrap the results in a fragment, so the inner + // elements will be able to directly interact with their neighbors. For + // example, `\color{red}{2 +} 3` has the same spacing as `2 + 3` + return new buildCommon.makeFragment(elements); +}; + +groupTypes.supsub = function(group, options) { + // Superscript and subscripts are handled in the TeXbook on page + // 445-446, rules 18(a-f). + + // Here is where we defer to the inner group if it should handle + // superscripts and subscripts itself. + if (shouldHandleSupSub(group.value.base, options)) { + return groupTypes[group.value.base.type](group, options); + } + + var base = buildGroup(group.value.base, options.reset()); + var supmid; + var submid; + var sup; + var sub; + + var style = options.style; + var newOptions; + + if (group.value.sup) { + newOptions = options.withStyle(style.sup()); + sup = buildGroup(group.value.sup, newOptions); + supmid = makeSpan([style.reset(), style.sup().cls()], + [sup], newOptions); + } + + if (group.value.sub) { + newOptions = options.withStyle(style.sub()); + sub = buildGroup(group.value.sub, newOptions); + submid = makeSpan([style.reset(), style.sub().cls()], + [sub], newOptions); + } + + // Rule 18a + var supShift; + var subShift; + if (isCharacterBox(group.value.base)) { + supShift = 0; + subShift = 0; + } else { + supShift = base.height - style.metrics.supDrop; + subShift = base.depth + style.metrics.subDrop; + } + + // Rule 18c + var minSupShift; + if (style === Style.DISPLAY) { + minSupShift = style.metrics.sup1; + } else if (style.cramped) { + minSupShift = style.metrics.sup3; + } else { + minSupShift = style.metrics.sup2; + } + + // scriptspace is a font-size-independent size, so scale it + // appropriately + var multiplier = Style.TEXT.sizeMultiplier * + style.sizeMultiplier; + var scriptspace = + (0.5 / fontMetrics.metrics.ptPerEm) / multiplier + "em"; + + var supsub; + if (!group.value.sup) { + // Rule 18b + subShift = Math.max( + subShift, style.metrics.sub1, + sub.height - 0.8 * style.metrics.xHeight); + + supsub = buildCommon.makeVList([ + {type: "elem", elem: submid} + ], "shift", subShift, options); + + supsub.children[0].style.marginRight = scriptspace; + + // Subscripts shouldn't be shifted by the base's italic correction. + // Account for that by shifting the subscript back the appropriate + // amount. Note we only do this when the base is a single symbol. + if (base instanceof domTree.symbolNode) { + supsub.children[0].style.marginLeft = -base.italic + "em"; + } + } else if (!group.value.sub) { + // Rule 18c, d + supShift = Math.max(supShift, minSupShift, + sup.depth + 0.25 * style.metrics.xHeight); + + supsub = buildCommon.makeVList([ + {type: "elem", elem: supmid} + ], "shift", -supShift, options); + + supsub.children[0].style.marginRight = scriptspace; + } else { + supShift = Math.max( + supShift, minSupShift, sup.depth + 0.25 * style.metrics.xHeight); + subShift = Math.max(subShift, style.metrics.sub2); + + var ruleWidth = fontMetrics.metrics.defaultRuleThickness; + + // Rule 18e + if ((supShift - sup.depth) - (sub.height - subShift) < + 4 * ruleWidth) { + subShift = 4 * ruleWidth - (supShift - sup.depth) + sub.height; + var psi = 0.8 * style.metrics.xHeight - (supShift - sup.depth); + if (psi > 0) { + supShift += psi; + subShift -= psi; + } + } + + supsub = buildCommon.makeVList([ + {type: "elem", elem: submid, shift: subShift}, + {type: "elem", elem: supmid, shift: -supShift} + ], "individualShift", null, options); + + // See comment above about subscripts not being shifted + if (base instanceof domTree.symbolNode) { + supsub.children[0].style.marginLeft = -base.italic + "em"; + } + + supsub.children[0].style.marginRight = scriptspace; + supsub.children[1].style.marginRight = scriptspace; + } + + // We ensure to wrap the supsub vlist in a span.msupsub to reset text-align + var mclass = getTypeOfDomTree(base) || "mord"; + return makeSpan([mclass], + [base, makeSpan(["msupsub"], [supsub])], + options); +}; + +groupTypes.genfrac = function(group, options) { + // Fractions are handled in the TeXbook on pages 444-445, rules 15(a-e). + // Figure out what style this fraction should be in based on the + // function used + var style = options.style; + if (group.value.size === "display") { + style = Style.DISPLAY; + } else if (group.value.size === "text") { + style = Style.TEXT; + } + + var nstyle = style.fracNum(); + var dstyle = style.fracDen(); + var newOptions; + + newOptions = options.withStyle(nstyle); + var numer = buildGroup(group.value.numer, newOptions); + var numerreset = makeSpan([style.reset(), nstyle.cls()], + [numer], newOptions); + + newOptions = options.withStyle(dstyle); + var denom = buildGroup(group.value.denom, newOptions); + var denomreset = makeSpan([style.reset(), dstyle.cls()], + [denom], newOptions); + + var ruleWidth; + if (group.value.hasBarLine) { + ruleWidth = fontMetrics.metrics.defaultRuleThickness / + options.style.sizeMultiplier; + } else { + ruleWidth = 0; + } + + // Rule 15b + var numShift; + var clearance; + var denomShift; + if (style.size === Style.DISPLAY.size) { + numShift = style.metrics.num1; + if (ruleWidth > 0) { + clearance = 3 * ruleWidth; + } else { + clearance = 7 * fontMetrics.metrics.defaultRuleThickness; + } + denomShift = style.metrics.denom1; + } else { + if (ruleWidth > 0) { + numShift = style.metrics.num2; + clearance = ruleWidth; + } else { + numShift = style.metrics.num3; + clearance = 3 * fontMetrics.metrics.defaultRuleThickness; + } + denomShift = style.metrics.denom2; + } + + var frac; + if (ruleWidth === 0) { + // Rule 15c + var candidateClearance = + (numShift - numer.depth) - (denom.height - denomShift); + if (candidateClearance < clearance) { + numShift += 0.5 * (clearance - candidateClearance); + denomShift += 0.5 * (clearance - candidateClearance); + } + + frac = buildCommon.makeVList([ + {type: "elem", elem: denomreset, shift: denomShift}, + {type: "elem", elem: numerreset, shift: -numShift} + ], "individualShift", null, options); + } else { + // Rule 15d + var axisHeight = style.metrics.axisHeight; + + if ((numShift - numer.depth) - (axisHeight + 0.5 * ruleWidth) < + clearance) { + numShift += + clearance - ((numShift - numer.depth) - + (axisHeight + 0.5 * ruleWidth)); + } + + if ((axisHeight - 0.5 * ruleWidth) - (denom.height - denomShift) < + clearance) { + denomShift += + clearance - ((axisHeight - 0.5 * ruleWidth) - + (denom.height - denomShift)); + } + + var mid = makeSpan( + [options.style.reset(), Style.TEXT.cls(), "frac-line"]); + // Manually set the height of the line because its height is + // created in CSS + mid.height = ruleWidth; + + var midShift = -(axisHeight - 0.5 * ruleWidth); + + frac = buildCommon.makeVList([ + {type: "elem", elem: denomreset, shift: denomShift}, + {type: "elem", elem: mid, shift: midShift}, + {type: "elem", elem: numerreset, shift: -numShift} + ], "individualShift", null, options); + } + + // Since we manually change the style sometimes (with \dfrac or \tfrac), + // account for the possible size change here. + frac.height *= style.sizeMultiplier / options.style.sizeMultiplier; + frac.depth *= style.sizeMultiplier / options.style.sizeMultiplier; + + // Rule 15e + var delimSize; + if (style.size === Style.DISPLAY.size) { + delimSize = style.metrics.delim1; + } else { + delimSize = style.metrics.delim2; + } + + var leftDelim; + var rightDelim; + if (group.value.leftDelim == null) { + leftDelim = makeNullDelimiter(options, ["mopen"]); + } else { + leftDelim = delimiter.customSizedDelim( + group.value.leftDelim, delimSize, true, + options.withStyle(style), group.mode, ["mopen"]); + } + if (group.value.rightDelim == null) { + rightDelim = makeNullDelimiter(options, ["mclose"]); + } else { + rightDelim = delimiter.customSizedDelim( + group.value.rightDelim, delimSize, true, + options.withStyle(style), group.mode, ["mclose"]); + } + + return makeSpan( + ["mord", options.style.reset(), style.cls()], + [leftDelim, makeSpan(["mfrac"], [frac]), rightDelim], + options); +}; + +var calculateSize = function(sizeValue, style) { + var x = sizeValue.number; + if (sizeValue.unit === "ex") { + x *= style.metrics.emPerEx; + } else if (sizeValue.unit === "mu") { + x /= 18; + } + return x; +}; + +groupTypes.array = function(group, options) { + var r; + var c; + var nr = group.value.body.length; + var nc = 0; + var body = new Array(nr); + + var style = options.style; + + // Horizontal spacing + var pt = 1 / fontMetrics.metrics.ptPerEm; + var arraycolsep = 5 * pt; // \arraycolsep in article.cls + + // Vertical spacing + var baselineskip = 12 * pt; // see size10.clo + // Default \arraystretch from lttab.dtx + // TODO(gagern): may get redefined once we have user-defined macros + var arraystretch = utils.deflt(group.value.arraystretch, 1); + var arrayskip = arraystretch * baselineskip; + var arstrutHeight = 0.7 * arrayskip; // \strutbox in ltfsstrc.dtx and + var arstrutDepth = 0.3 * arrayskip; // \@arstrutbox in lttab.dtx + + var totalHeight = 0; + for (r = 0; r < group.value.body.length; ++r) { + var inrow = group.value.body[r]; + var height = arstrutHeight; // \@array adds an \@arstrut + var depth = arstrutDepth; // to each tow (via the template) + + if (nc < inrow.length) { + nc = inrow.length; + } + + var outrow = new Array(inrow.length); + for (c = 0; c < inrow.length; ++c) { + var elt = buildGroup(inrow[c], options); + if (depth < elt.depth) { + depth = elt.depth; + } + if (height < elt.height) { + height = elt.height; + } + outrow[c] = elt; + } + + var gap = 0; + if (group.value.rowGaps[r]) { + gap = calculateSize(group.value.rowGaps[r].value, style); + if (gap > 0) { // \@argarraycr + gap += arstrutDepth; + if (depth < gap) { + depth = gap; // \@xargarraycr + } + gap = 0; + } + } + + outrow.height = height; + outrow.depth = depth; + totalHeight += height; + outrow.pos = totalHeight; + totalHeight += depth + gap; // \@yargarraycr + body[r] = outrow; + } + + var offset = totalHeight / 2 + style.metrics.axisHeight; + var colDescriptions = group.value.cols || []; + var cols = []; + var colSep; + var colDescrNum; + for (c = 0, colDescrNum = 0; + // Continue while either there are more columns or more column + // descriptions, so trailing separators don't get lost. + c < nc || colDescrNum < colDescriptions.length; + ++c, ++colDescrNum) { + + var colDescr = colDescriptions[colDescrNum] || {}; + + var firstSeparator = true; + while (colDescr.type === "separator") { + // If there is more than one separator in a row, add a space + // between them. + if (!firstSeparator) { + colSep = makeSpan(["arraycolsep"], []); + colSep.style.width = + fontMetrics.metrics.doubleRuleSep + "em"; + cols.push(colSep); + } + + if (colDescr.separator === "|") { + var separator = makeSpan( + ["vertical-separator"], + []); + separator.style.height = totalHeight + "em"; + separator.style.verticalAlign = + -(totalHeight - offset) + "em"; + + cols.push(separator); + } else { + throw new ParseError( + "Invalid separator type: " + colDescr.separator); + } + + colDescrNum++; + colDescr = colDescriptions[colDescrNum] || {}; + firstSeparator = false; + } + + if (c >= nc) { + continue; + } + + var sepwidth; + if (c > 0 || group.value.hskipBeforeAndAfter) { + sepwidth = utils.deflt(colDescr.pregap, arraycolsep); + if (sepwidth !== 0) { + colSep = makeSpan(["arraycolsep"], []); + colSep.style.width = sepwidth + "em"; + cols.push(colSep); + } + } + + var col = []; + for (r = 0; r < nr; ++r) { + var row = body[r]; + var elem = row[c]; + if (!elem) { + continue; + } + var shift = row.pos - offset; + elem.depth = row.depth; + elem.height = row.height; + col.push({type: "elem", elem: elem, shift: shift}); + } + + col = buildCommon.makeVList(col, "individualShift", null, options); + col = makeSpan( + ["col-align-" + (colDescr.align || "c")], + [col]); + cols.push(col); + + if (c < nc - 1 || group.value.hskipBeforeAndAfter) { + sepwidth = utils.deflt(colDescr.postgap, arraycolsep); + if (sepwidth !== 0) { + colSep = makeSpan(["arraycolsep"], []); + colSep.style.width = sepwidth + "em"; + cols.push(colSep); + } + } + } + body = makeSpan(["mtable"], cols); + return makeSpan(["mord"], [body], options); +}; + +groupTypes.spacing = function(group, options) { + if (group.value === "\\ " || group.value === "\\space" || + group.value === " " || group.value === "~") { + // Spaces are generated by adding an actual space. Each of these + // things has an entry in the symbols table, so these will be turned + // into appropriate outputs. + if (group.mode === "text") { + return buildCommon.makeOrd(group, options, "textord"); + } else { + return makeSpan(["mspace"], + [buildCommon.mathsym(group.value, group.mode, options)], + options); + } + } else { + // Other kinds of spaces are of arbitrary width. We use CSS to + // generate these. + return makeSpan( + ["mspace", + buildCommon.spacingFunctions[group.value].className], + [], options); + } +}; + +groupTypes.llap = function(group, options) { + var inner = makeSpan( + ["inner"], [buildGroup(group.value.body, options.reset())]); + var fix = makeSpan(["fix"], []); + return makeSpan( + ["mord", "llap", options.style.cls()], [inner, fix], options); +}; + +groupTypes.rlap = function(group, options) { + var inner = makeSpan( + ["inner"], [buildGroup(group.value.body, options.reset())]); + var fix = makeSpan(["fix"], []); + return makeSpan( + ["mord", "rlap", options.style.cls()], [inner, fix], options); +}; + +groupTypes.op = function(group, options) { + // Operators are handled in the TeXbook pg. 443-444, rule 13(a). + var supGroup; + var subGroup; + var hasLimits = false; + if (group.type === "supsub") { + // If we have limits, supsub will pass us its group to handle. Pull + // out the superscript and subscript and set the group to the op in + // its base. + supGroup = group.value.sup; + subGroup = group.value.sub; + group = group.value.base; + hasLimits = true; + } + + var style = options.style; + + // Most operators have a large successor symbol, but these don't. + var noSuccessor = [ + "\\smallint" + ]; + + var large = false; + if (style.size === Style.DISPLAY.size && + group.value.symbol && + !utils.contains(noSuccessor, group.value.body)) { + + // Most symbol operators get larger in displaystyle (rule 13) + large = true; + } + + var base; + var baseShift = 0; + var slant = 0; + if (group.value.symbol) { + // If this is a symbol, create the symbol. + var fontName = large ? "Size2-Regular" : "Size1-Regular"; + base = buildCommon.makeSymbol( + group.value.body, fontName, "math", options, + ["mop", "op-symbol", large ? "large-op" : "small-op"]); + + // Shift the symbol so its center lies on the axis (rule 13). It + // appears that our fonts have the centers of the symbols already + // almost on the axis, so these numbers are very small. Note we + // don't actually apply this here, but instead it is used either in + // the vlist creation or separately when there are no limits. + baseShift = (base.height - base.depth) / 2 - + style.metrics.axisHeight * style.sizeMultiplier; + + // The slant of the symbol is just its italic correction. + slant = base.italic; + } else if (group.value.value) { + // If this is a list, compose that list. + var inner = buildExpression(group.value.value, options, true); + + base = makeSpan(["mop"], inner, options); + } else { + // Otherwise, this is a text operator. Build the text from the + // operator's name. + // TODO(emily): Add a space in the middle of some of these + // operators, like \limsup + var output = []; + for (var i = 1; i < group.value.body.length; i++) { + output.push(buildCommon.mathsym(group.value.body[i], group.mode)); + } + base = makeSpan(["mop"], output, options); + } + + if (hasLimits) { + // IE 8 clips \int if it is in a display: inline-block. We wrap it + // in a new span so it is an inline, and works. + base = makeSpan([], [base]); + + var supmid; + var supKern; + var submid; + var subKern; + var newOptions; + // We manually have to handle the superscripts and subscripts. This, + // aside from the kern calculations, is copied from supsub. + if (supGroup) { + newOptions = options.withStyle(style.sup()); + var sup = buildGroup(supGroup, newOptions); + supmid = makeSpan([style.reset(), style.sup().cls()], + [sup], newOptions); + + supKern = Math.max( + fontMetrics.metrics.bigOpSpacing1, + fontMetrics.metrics.bigOpSpacing3 - sup.depth); + } + + if (subGroup) { + newOptions = options.withStyle(style.sub()); + var sub = buildGroup(subGroup, newOptions); + submid = makeSpan([style.reset(), style.sub().cls()], + [sub], newOptions); + + subKern = Math.max( + fontMetrics.metrics.bigOpSpacing2, + fontMetrics.metrics.bigOpSpacing4 - sub.height); + } + + // Build the final group as a vlist of the possible subscript, base, + // and possible superscript. + var finalGroup; + var top; + var bottom; + if (!supGroup) { + top = base.height - baseShift; + + finalGroup = buildCommon.makeVList([ + {type: "kern", size: fontMetrics.metrics.bigOpSpacing5}, + {type: "elem", elem: submid}, + {type: "kern", size: subKern}, + {type: "elem", elem: base} + ], "top", top, options); + + // Here, we shift the limits by the slant of the symbol. Note + // that we are supposed to shift the limits by 1/2 of the slant, + // but since we are centering the limits adding a full slant of + // margin will shift by 1/2 that. + finalGroup.children[0].style.marginLeft = -slant + "em"; + } else if (!subGroup) { + bottom = base.depth + baseShift; + + finalGroup = buildCommon.makeVList([ + {type: "elem", elem: base}, + {type: "kern", size: supKern}, + {type: "elem", elem: supmid}, + {type: "kern", size: fontMetrics.metrics.bigOpSpacing5} + ], "bottom", bottom, options); + + // See comment above about slants + finalGroup.children[1].style.marginLeft = slant + "em"; + } else if (!supGroup && !subGroup) { + // This case probably shouldn't occur (this would mean the + // supsub was sending us a group with no superscript or + // subscript) but be safe. + return base; + } else { + bottom = fontMetrics.metrics.bigOpSpacing5 + + submid.height + submid.depth + + subKern + + base.depth + baseShift; + + finalGroup = buildCommon.makeVList([ + {type: "kern", size: fontMetrics.metrics.bigOpSpacing5}, + {type: "elem", elem: submid}, + {type: "kern", size: subKern}, + {type: "elem", elem: base}, + {type: "kern", size: supKern}, + {type: "elem", elem: supmid}, + {type: "kern", size: fontMetrics.metrics.bigOpSpacing5} + ], "bottom", bottom, options); + + // See comment above about slants + finalGroup.children[0].style.marginLeft = -slant + "em"; + finalGroup.children[2].style.marginLeft = slant + "em"; + } + + return makeSpan(["mop", "op-limits"], [finalGroup], options); + } else { + if (group.value.symbol) { + base.style.top = baseShift + "em"; + } + + return base; + } +}; + +groupTypes.mod = function(group, options) { + var inner = []; + + if (group.value.modType === "bmod") { + // “\nonscript\mskip-\medmuskip\mkern5mu†+ if (!options.style.isTight()) { + inner.push(makeSpan( + ["mspace", "negativemediumspace"], [], options)); + } + inner.push(makeSpan(["mspace", "thickspace"], [], options)); + } else if (options.style.size === Style.DISPLAY.size) { + inner.push(makeSpan(["mspace", "quad"], [], options)); + } else if (group.value.modType === "mod") { + inner.push(makeSpan(["mspace", "twelvemuspace"], [], options)); + } else { + inner.push(makeSpan(["mspace", "eightmuspace"], [], options)); + } + + if (group.value.modType === "pod" || group.value.modType === "pmod") { + inner.push(buildCommon.mathsym("(", group.mode)); + } + + if (group.value.modType !== "pod") { + var modInner = [ + buildCommon.mathsym("m", group.mode), + buildCommon.mathsym("o", group.mode), + buildCommon.mathsym("d", group.mode)]; + if (group.value.modType === "bmod") { + inner.push(makeSpan(["mbin"], modInner, options)); + // “\mkern5mu\nonscript\mskip-\medmuskip†+ inner.push(makeSpan(["mspace", "thickspace"], [], options)); + if (!options.style.isTight()) { + inner.push(makeSpan( + ["mspace", "negativemediumspace"], [], options)); + } + } else { + Array.prototype.push.apply(inner, modInner); + inner.push(makeSpan(["mspace", "sixmuspace"], [], options)); + } + } + + if (group.value.value) { + Array.prototype.push.apply(inner, + buildExpression(group.value.value, options, false)); + } + + if (group.value.modType === "pod" || group.value.modType === "pmod") { + inner.push(buildCommon.mathsym(")", group.mode)); + } + + return buildCommon.makeFragment(inner); +}; + +groupTypes.katex = function(group, options) { + // The KaTeX logo. The offsets for the K and a were chosen to look + // good, but the offsets for the T, E, and X were taken from the + // definition of \TeX in TeX (see TeXbook pg. 356) + var k = makeSpan( + ["k"], [buildCommon.mathsym("K", group.mode)], options); + var a = makeSpan( + ["a"], [buildCommon.mathsym("A", group.mode)], options); + + a.height = (a.height + 0.2) * 0.75; + a.depth = (a.height - 0.2) * 0.75; + + var t = makeSpan( + ["t"], [buildCommon.mathsym("T", group.mode)], options); + var e = makeSpan( + ["e"], [buildCommon.mathsym("E", group.mode)], options); + + e.height = (e.height - 0.2155); + e.depth = (e.depth + 0.2155); + + var x = makeSpan( + ["x"], [buildCommon.mathsym("X", group.mode)], options); + + return makeSpan( + ["mord", "katex-logo"], [k, a, t, e, x], options); +}; + +groupTypes.overline = function(group, options) { + // Overlines are handled in the TeXbook pg 443, Rule 9. + var style = options.style; + + // Build the inner group in the cramped style. + var innerGroup = buildGroup(group.value.body, + options.withStyle(style.cramp())); + + var ruleWidth = fontMetrics.metrics.defaultRuleThickness / + style.sizeMultiplier; + + // Create the line above the body + var line = makeSpan( + [style.reset(), Style.TEXT.cls(), "overline-line"]); + line.height = ruleWidth; + line.maxFontSize = 1.0; + + // Generate the vlist, with the appropriate kerns + var vlist = buildCommon.makeVList([ + {type: "elem", elem: innerGroup}, + {type: "kern", size: 3 * ruleWidth}, + {type: "elem", elem: line}, + {type: "kern", size: ruleWidth} + ], "firstBaseline", null, options); + + return makeSpan(["mord", "overline"], [vlist], options); +}; + +groupTypes.underline = function(group, options) { + // Underlines are handled in the TeXbook pg 443, Rule 10. + var style = options.style; + + // Build the inner group. + var innerGroup = buildGroup(group.value.body, options); + + var ruleWidth = fontMetrics.metrics.defaultRuleThickness / + style.sizeMultiplier; + + // Create the line above the body + var line = makeSpan([style.reset(), Style.TEXT.cls(), "underline-line"]); + line.height = ruleWidth; + line.maxFontSize = 1.0; + + // Generate the vlist, with the appropriate kerns + var vlist = buildCommon.makeVList([ + {type: "kern", size: ruleWidth}, + {type: "elem", elem: line}, + {type: "kern", size: 3 * ruleWidth}, + {type: "elem", elem: innerGroup} + ], "top", innerGroup.height, options); + + return makeSpan(["mord", "underline"], [vlist], options); +}; + +groupTypes.sqrt = function(group, options) { + // Square roots are handled in the TeXbook pg. 443, Rule 11. + var style = options.style; + + // First, we do the same steps as in overline to build the inner group + // and line + var inner = buildGroup(group.value.body, options.withStyle(style.cramp())); + + var ruleWidth = fontMetrics.metrics.defaultRuleThickness / + style.sizeMultiplier; + + var line = makeSpan( + [style.reset(), Style.TEXT.cls(), "sqrt-line"], [], + options); + line.height = ruleWidth; + line.maxFontSize = 1.0; + + var phi = ruleWidth; + if (style.id < Style.TEXT.id) { + phi = style.metrics.xHeight; + } + + // Calculate the clearance between the body and line + var lineClearance = ruleWidth + phi / 4; + + var innerHeight = (inner.height + inner.depth) * style.sizeMultiplier; + var minDelimiterHeight = innerHeight + lineClearance + ruleWidth; + + // Create a \surd delimiter of the required minimum size + var delim = makeSpan(["sqrt-sign"], [ + delimiter.customSizedDelim("\\surd", minDelimiterHeight, + false, options, group.mode)], + options); + + var delimDepth = (delim.height + delim.depth) - ruleWidth; + + // Adjust the clearance based on the delimiter size + if (delimDepth > inner.height + inner.depth + lineClearance) { + lineClearance = + (lineClearance + delimDepth - inner.height - inner.depth) / 2; + } + + // Shift the delimiter so that its top lines up with the top of the line + var delimShift = -(inner.height + lineClearance + ruleWidth) + delim.height; + delim.style.top = delimShift + "em"; + delim.height -= delimShift; + delim.depth += delimShift; + + // We add a special case here, because even when `inner` is empty, we + // still get a line. So, we use a simple heuristic to decide if we + // should omit the body entirely. (note this doesn't work for something + // like `\sqrt{\rlap{x}}`, but if someone is doing that they deserve for + // it not to work. + var body; + if (inner.height === 0 && inner.depth === 0) { + body = makeSpan(); + } else { + body = buildCommon.makeVList([ + {type: "elem", elem: inner}, + {type: "kern", size: lineClearance}, + {type: "elem", elem: line}, + {type: "kern", size: ruleWidth} + ], "firstBaseline", null, options); + } + + if (!group.value.index) { + return makeSpan(["mord", "sqrt"], [delim, body], options); + } else { + // Handle the optional root index + + // The index is always in scriptscript style + var newOptions = options.withStyle(Style.SCRIPTSCRIPT); + var root = buildGroup(group.value.index, newOptions); + var rootWrap = makeSpan( + [style.reset(), Style.SCRIPTSCRIPT.cls()], + [root], + newOptions); + + // Figure out the height and depth of the inner part + var innerRootHeight = Math.max(delim.height, body.height); + var innerRootDepth = Math.max(delim.depth, body.depth); + + // The amount the index is shifted by. This is taken from the TeX + // source, in the definition of `\r@@t`. + var toShift = 0.6 * (innerRootHeight - innerRootDepth); + + // Build a VList with the superscript shifted up correctly + var rootVList = buildCommon.makeVList( + [{type: "elem", elem: rootWrap}], + "shift", -toShift, options); + // Add a class surrounding it so we can add on the appropriate + // kerning + var rootVListWrap = makeSpan(["root"], [rootVList]); + + return makeSpan(["mord", "sqrt"], + [rootVListWrap, delim, body], options); + } +}; + +groupTypes.sizing = function(group, options) { + // Handle sizing operators like \Huge. Real TeX doesn't actually allow + // these functions inside of math expressions, so we do some special + // handling. + var inner = buildExpression(group.value.value, + options.withSize(group.value.size), false); + + // Compute the correct maxFontSize. + var style = options.style; + var fontSize = buildCommon.sizingMultiplier[group.value.size]; + fontSize = fontSize * style.sizeMultiplier; + + // Add size-resetting classes to the inner list and set maxFontSize + // manually. Handle nested size changes. + for (var i = 0; i < inner.length; i++) { + var pos = utils.indexOf(inner[i].classes, "sizing"); + if (pos < 0) { + inner[i].classes.push("sizing", "reset-" + options.size, + group.value.size, style.cls()); + inner[i].maxFontSize = fontSize; + } else if (inner[i].classes[pos + 1] === "reset-" + group.value.size) { + // This is a nested size change: e.g., inner[i] is the "b" in + // `\Huge a \small b`. Override the old size (the `reset-` class) + // but not the new size. + inner[i].classes[pos + 1] = "reset-" + options.size; + } + } + + return buildCommon.makeFragment(inner); +}; + +groupTypes.styling = function(group, options) { + // Style changes are handled in the TeXbook on pg. 442, Rule 3. + + // Figure out what style we're changing to. + var styleMap = { + "display": Style.DISPLAY, + "text": Style.TEXT, + "script": Style.SCRIPT, + "scriptscript": Style.SCRIPTSCRIPT + }; + + var newStyle = styleMap[group.value.style]; + var newOptions = options.withStyle(newStyle); + + // Build the inner expression in the new style. + var inner = buildExpression( + group.value.value, newOptions, false); + + // Add style-resetting classes to the inner list. Handle nested changes. + for (var i = 0; i < inner.length; i++) { + var pos = utils.indexOf(inner[i].classes, newStyle.reset()); + if (pos < 0) { + inner[i].classes.push(options.style.reset(), newStyle.cls()); + } else { + // This is a nested style change, as `\textstyle a\scriptstyle b`. + // Only override the old style (the reset class). + inner[i].classes[pos] = options.style.reset(); + } + } + + return new buildCommon.makeFragment(inner); +}; + +groupTypes.font = function(group, options) { + var font = group.value.font; + return buildGroup(group.value.body, options.withFont(font)); +}; + +groupTypes.delimsizing = function(group, options) { + var delim = group.value.value; + + if (delim === ".") { + // Empty delimiters still count as elements, even though they don't + // show anything. + return makeSpan([group.value.mclass]); + } + + // Use delimiter.sizedDelim to generate the delimiter. + return delimiter.sizedDelim( + delim, group.value.size, options, group.mode, + [group.value.mclass]); +}; + +groupTypes.leftright = function(group, options) { + // Build the inner expression + var inner = buildExpression(group.value.body, options.reset(), true); + + var innerHeight = 0; + var innerDepth = 0; + var hadMiddle = false; + + // Calculate its height and depth + for (var i = 0; i < inner.length; i++) { + if (inner[i].isMiddle) { + hadMiddle = true; + } else { + innerHeight = Math.max(inner[i].height, innerHeight); + innerDepth = Math.max(inner[i].depth, innerDepth); + } + } + + var style = options.style; + + // The size of delimiters is the same, regardless of what style we are + // in. Thus, to correctly calculate the size of delimiter we need around + // a group, we scale down the inner size based on the size. + innerHeight *= style.sizeMultiplier; + innerDepth *= style.sizeMultiplier; + + var leftDelim; + if (group.value.left === ".") { + // Empty delimiters in \left and \right make null delimiter spaces. + leftDelim = makeNullDelimiter(options, ["mopen"]); + } else { + // Otherwise, use leftRightDelim to generate the correct sized + // delimiter. + leftDelim = delimiter.leftRightDelim( + group.value.left, innerHeight, innerDepth, options, + group.mode, ["mopen"]); + } + // Add it to the beginning of the expression + inner.unshift(leftDelim); + + // Handle middle delimiters + if (hadMiddle) { + for (i = 1; i < inner.length; i++) { + if (inner[i].isMiddle) { + // Apply the options that were active when \middle was called + inner[i] = delimiter.leftRightDelim( + inner[i].isMiddle.value, innerHeight, innerDepth, + inner[i].isMiddle.options, group.mode, []); + } + } + } + + var rightDelim; + // Same for the right delimiter + if (group.value.right === ".") { + rightDelim = makeNullDelimiter(options, ["mclose"]); + } else { + rightDelim = delimiter.leftRightDelim( + group.value.right, innerHeight, innerDepth, options, + group.mode, ["mclose"]); + } + // Add it to the end of the expression. + inner.push(rightDelim); + + return makeSpan( + ["minner", style.cls()], inner, options); +}; + +groupTypes.middle = function(group, options) { + var middleDelim; + if (group.value.value === ".") { + middleDelim = makeNullDelimiter(options, []); + } else { + middleDelim = delimiter.sizedDelim( + group.value.value, 1, options, + group.mode, []); + middleDelim.isMiddle = {value: group.value.value, options: options}; + } + return middleDelim; +}; + +groupTypes.rule = function(group, options) { + // Make an empty span for the rule + var rule = makeSpan(["mord", "rule"], [], options); + var style = options.style; + + // Calculate the shift, width, and height of the rule, and account for units + var shift = 0; + if (group.value.shift) { + shift = calculateSize(group.value.shift, style); + } + + var width = calculateSize(group.value.width, style); + var height = calculateSize(group.value.height, style); + + // The sizes of rules are absolute, so make it larger if we are in a + // smaller style. + shift /= style.sizeMultiplier; + width /= style.sizeMultiplier; + height /= style.sizeMultiplier; + + // Style the rule to the right size + rule.style.borderRightWidth = width + "em"; + rule.style.borderTopWidth = height + "em"; + rule.style.bottom = shift + "em"; + + // Record the height and width + rule.width = width; + rule.height = height + shift; + rule.depth = -shift; + + return rule; +}; + +groupTypes.kern = function(group, options) { + // Make an empty span for the rule + var rule = makeSpan(["mord", "rule"], [], options); + var style = options.style; + + var dimension = 0; + if (group.value.dimension) { + dimension = calculateSize(group.value.dimension, style); + } + + dimension /= style.sizeMultiplier; + + rule.style.marginLeft = dimension + "em"; + + return rule; +}; + +groupTypes.accent = function(group, options) { + // Accents are handled in the TeXbook pg. 443, rule 12. + var base = group.value.base; + var style = options.style; + + var supsubGroup; + if (group.type === "supsub") { + // If our base is a character box, and we have superscripts and + // subscripts, the supsub will defer to us. In particular, we want + // to attach the superscripts and subscripts to the inner body (so + // that the position of the superscripts and subscripts won't be + // affected by the height of the accent). We accomplish this by + // sticking the base of the accent into the base of the supsub, and + // rendering that, while keeping track of where the accent is. + + // The supsub group is the group that was passed in + var supsub = group; + // The real accent group is the base of the supsub group + group = supsub.value.base; + // The character box is the base of the accent group + base = group.value.base; + // Stick the character box into the base of the supsub group + supsub.value.base = base; + + // Rerender the supsub group with its new base, and store that + // result. + supsubGroup = buildGroup( + supsub, options.reset()); + } + + // Build the base group + var body = buildGroup( + base, options.withStyle(style.cramp())); + + // Calculate the skew of the accent. This is based on the line "If the + // nucleus is not a single character, let s = 0; otherwise set s to the + // kern amount for the nucleus followed by the \skewchar of its font." + // Note that our skew metrics are just the kern between each character + // and the skewchar. + var skew; + if (isCharacterBox(base)) { + // If the base is a character box, then we want the skew of the + // innermost character. To do that, we find the innermost character: + var baseChar = getBaseElem(base); + // Then, we render its group to get the symbol inside it + var baseGroup = buildGroup( + baseChar, options.withStyle(style.cramp())); + // Finally, we pull the skew off of the symbol. + skew = baseGroup.skew; + // Note that we now throw away baseGroup, because the layers we + // removed with getBaseElem might contain things like \color which + // we can't get rid of. + // TODO(emily): Find a better way to get the skew + } else { + skew = 0; + } + + // calculate the amount of space between the body and the accent + var clearance = Math.min( + body.height, + style.metrics.xHeight); + + // Build the accent + var accent = buildCommon.makeSymbol( + group.value.accent, "Main-Regular", "math", options); + // Remove the italic correction of the accent, because it only serves to + // shift the accent over to a place we don't want. + accent.italic = 0; + + // The \vec character that the fonts use is a combining character, and + // thus shows up much too far to the left. To account for this, we add a + // specific class which shifts the accent over to where we want it. + // TODO(emily): Fix this in a better way, like by changing the font + var vecClass = group.value.accent === "\\vec" ? "accent-vec" : null; + + var accentBody = makeSpan(["accent-body", vecClass], [ + makeSpan([], [accent])]); + + accentBody = buildCommon.makeVList([ + {type: "elem", elem: body}, + {type: "kern", size: -clearance}, + {type: "elem", elem: accentBody} + ], "firstBaseline", null, options); + + // Shift the accent over by the skew. Note we shift by twice the skew + // because we are centering the accent, so by adding 2*skew to the left, + // we shift it to the right by 1*skew. + accentBody.children[1].style.marginLeft = 2 * skew + "em"; + + var accentWrap = makeSpan(["mord", "accent"], [accentBody], options); + + if (supsubGroup) { + // Here, we replace the "base" child of the supsub with our newly + // generated accent. + supsubGroup.children[0] = accentWrap; + + // Since we don't rerun the height calculation after replacing the + // accent, we manually recalculate height. + supsubGroup.height = Math.max(accentWrap.height, supsubGroup.height); + + // Accents should always be ords, even when their innards are not. + supsubGroup.classes[0] = "mord"; + + return supsubGroup; + } else { + return accentWrap; + } +}; + +groupTypes.phantom = function(group, options) { + var elements = buildExpression( + group.value.value, + options.withPhantom(), + false + ); + + // \phantom isn't supposed to affect the elements it contains. + // See "color" for more details. + return new buildCommon.makeFragment(elements); +}; + +groupTypes.mclass = function(group, options) { + var elements = buildExpression(group.value.value, options, true); + + return makeSpan([group.value.mclass], elements, options); +}; + +/** + * buildGroup is the function that takes a group and calls the correct groupType + * function for it. It also handles the interaction of size and style changes + * between parents and children. + */ +var buildGroup = function(group, options) { + if (!group) { + return makeSpan(); + } + + if (groupTypes[group.type]) { + // Call the groupTypes function + var groupNode = groupTypes[group.type](group, options); + var multiplier; + + // If the style changed between the parent and the current group, + // account for the size difference + if (options.style !== options.parentStyle) { + multiplier = options.style.sizeMultiplier / + options.parentStyle.sizeMultiplier; + + groupNode.height *= multiplier; + groupNode.depth *= multiplier; + } + + // If the size changed between the parent and the current group, account + // for that size difference. + if (options.size !== options.parentSize) { + multiplier = buildCommon.sizingMultiplier[options.size] / + buildCommon.sizingMultiplier[options.parentSize]; + + groupNode.height *= multiplier; + groupNode.depth *= multiplier; + } + + return groupNode; + } else { + throw new ParseError( + "Got group of unknown type: '" + group.type + "'"); + } +}; + +/** + * Take an entire parse tree, and build it into an appropriate set of HTML + * nodes. + */ +var buildHTML = function(tree, options) { + // buildExpression is destructive, so we need to make a clone + // of the incoming tree so that it isn't accidentally changed + tree = JSON.parse(JSON.stringify(tree)); + + // Build the expression contained in the tree + var expression = buildExpression(tree, options, true); + var body = makeSpan(["base", options.style.cls()], expression, options); + + // Add struts, which ensure that the top of the HTML element falls at the + // height of the expression, and the bottom of the HTML element falls at the + // depth of the expression. + var topStrut = makeSpan(["strut"]); + var bottomStrut = makeSpan(["strut", "bottom"]); + + topStrut.style.height = body.height + "em"; + bottomStrut.style.height = (body.height + body.depth) + "em"; + // We'd like to use `vertical-align: top` but in IE 9 this lowers the + // baseline of the box to the bottom of this strut (instead staying in the + // normal place) so we use an absolute value for vertical-align instead + bottomStrut.style.verticalAlign = -body.depth + "em"; + + // Wrap the struts and body together + var htmlNode = makeSpan(["katex-html"], [topStrut, bottomStrut, body]); + + htmlNode.setAttribute("aria-hidden", "true"); + + return htmlNode; +}; + +module.exports = buildHTML; + +},{"./ParseError":6,"./Style":9,"./buildCommon":10,"./delimiter":14,"./domTree":15,"./fontMetrics":17,"./utils":25}],12:[function(require,module,exports){ +/** + * This file converts a parse tree into a cooresponding MathML tree. The main + * entry point is the `buildMathML` function, which takes a parse tree from the + * parser. + */ + +var buildCommon = require("./buildCommon"); +var fontMetrics = require("./fontMetrics"); +var mathMLTree = require("./mathMLTree"); +var ParseError = require("./ParseError"); +var symbols = require("./symbols"); +var utils = require("./utils"); + +var makeSpan = buildCommon.makeSpan; +var fontMap = buildCommon.fontMap; + +/** + * Takes a symbol and converts it into a MathML text node after performing + * optional replacement from symbols.js. + */ +var makeText = function(text, mode) { + if (symbols[mode][text] && symbols[mode][text].replace) { + text = symbols[mode][text].replace; + } + + return new mathMLTree.TextNode(text); +}; + +/** + * Returns the math variant as a string or null if none is required. + */ +var getVariant = function(group, options) { + var font = options.font; + if (!font) { + return null; + } + + var mode = group.mode; + if (font === "mathit") { + return "italic"; + } + + var value = group.value; + if (utils.contains(["\\imath", "\\jmath"], value)) { + return null; + } + + if (symbols[mode][value] && symbols[mode][value].replace) { + value = symbols[mode][value].replace; + } + + var fontName = fontMap[font].fontName; + if (fontMetrics.getCharacterMetrics(value, fontName)) { + return fontMap[options.font].variant; + } + + return null; +}; + +/** + * Functions for handling the different types of groups found in the parse + * tree. Each function should take a parse group and return a MathML node. + */ +var groupTypes = {}; + +groupTypes.mathord = function(group, options) { + var node = new mathMLTree.MathNode( + "mi", + [makeText(group.value, group.mode)]); + + var variant = getVariant(group, options); + if (variant) { + node.setAttribute("mathvariant", variant); + } + return node; +}; + +groupTypes.textord = function(group, options) { + var text = makeText(group.value, group.mode); + + var variant = getVariant(group, options) || "normal"; + + var node; + if (/[0-9]/.test(group.value)) { + // TODO(kevinb) merge adjacent <mn> nodes + // do it as a post processing step + node = new mathMLTree.MathNode("mn", [text]); + if (options.font) { + node.setAttribute("mathvariant", variant); + } + } else { + node = new mathMLTree.MathNode("mi", [text]); + node.setAttribute("mathvariant", variant); + } + + return node; +}; + +groupTypes.bin = function(group) { + var node = new mathMLTree.MathNode( + "mo", [makeText(group.value, group.mode)]); + + return node; +}; + +groupTypes.rel = function(group) { + var node = new mathMLTree.MathNode( + "mo", [makeText(group.value, group.mode)]); + + return node; +}; + +groupTypes.open = function(group) { + var node = new mathMLTree.MathNode( + "mo", [makeText(group.value, group.mode)]); + + return node; +}; + +groupTypes.close = function(group) { + var node = new mathMLTree.MathNode( + "mo", [makeText(group.value, group.mode)]); + + return node; +}; + +groupTypes.inner = function(group) { + var node = new mathMLTree.MathNode( + "mo", [makeText(group.value, group.mode)]); + + return node; +}; + +groupTypes.punct = function(group) { + var node = new mathMLTree.MathNode( + "mo", [makeText(group.value, group.mode)]); + + node.setAttribute("separator", "true"); + + return node; +}; + +groupTypes.ordgroup = function(group, options) { + var inner = buildExpression(group.value, options); + + var node = new mathMLTree.MathNode("mrow", inner); + + return node; +}; + +groupTypes.text = function(group, options) { + var inner = buildExpression(group.value.body, options); + + var node = new mathMLTree.MathNode("mtext", inner); + + return node; +}; + +groupTypes.color = function(group, options) { + var inner = buildExpression(group.value.value, options); + + var node = new mathMLTree.MathNode("mstyle", inner); + + node.setAttribute("mathcolor", group.value.color); + + return node; +}; + +groupTypes.supsub = function(group, options) { + var children = [buildGroup(group.value.base, options)]; + + if (group.value.sub) { + children.push(buildGroup(group.value.sub, options)); + } + + if (group.value.sup) { + children.push(buildGroup(group.value.sup, options)); + } + + var nodeType; + if (!group.value.sub) { + nodeType = "msup"; + } else if (!group.value.sup) { + nodeType = "msub"; + } else { + nodeType = "msubsup"; + } + + var node = new mathMLTree.MathNode(nodeType, children); + + return node; +}; + +groupTypes.genfrac = function(group, options) { + var node = new mathMLTree.MathNode( + "mfrac", + [buildGroup(group.value.numer, options), + buildGroup(group.value.denom, options)]); + + if (!group.value.hasBarLine) { + node.setAttribute("linethickness", "0px"); + } + + if (group.value.leftDelim != null || group.value.rightDelim != null) { + var withDelims = []; + + if (group.value.leftDelim != null) { + var leftOp = new mathMLTree.MathNode( + "mo", [new mathMLTree.TextNode(group.value.leftDelim)]); + + leftOp.setAttribute("fence", "true"); + + withDelims.push(leftOp); + } + + withDelims.push(node); + + if (group.value.rightDelim != null) { + var rightOp = new mathMLTree.MathNode( + "mo", [new mathMLTree.TextNode(group.value.rightDelim)]); + + rightOp.setAttribute("fence", "true"); + + withDelims.push(rightOp); + } + + var outerNode = new mathMLTree.MathNode("mrow", withDelims); + + return outerNode; + } + + return node; +}; + +groupTypes.array = function(group, options) { + return new mathMLTree.MathNode( + "mtable", group.value.body.map(function(row) { + return new mathMLTree.MathNode( + "mtr", row.map(function(cell) { + return new mathMLTree.MathNode( + "mtd", [buildGroup(cell, options)]); + })); + })); +}; + +groupTypes.sqrt = function(group, options) { + var node; + if (group.value.index) { + node = new mathMLTree.MathNode( + "mroot", [ + buildGroup(group.value.body, options), + buildGroup(group.value.index, options) + ]); + } else { + node = new mathMLTree.MathNode( + "msqrt", [buildGroup(group.value.body, options)]); + } + + return node; +}; + +groupTypes.leftright = function(group, options) { + var inner = buildExpression(group.value.body, options); + + if (group.value.left !== ".") { + var leftNode = new mathMLTree.MathNode( + "mo", [makeText(group.value.left, group.mode)]); + + leftNode.setAttribute("fence", "true"); + + inner.unshift(leftNode); + } + + if (group.value.right !== ".") { + var rightNode = new mathMLTree.MathNode( + "mo", [makeText(group.value.right, group.mode)]); + + rightNode.setAttribute("fence", "true"); + + inner.push(rightNode); + } + + var outerNode = new mathMLTree.MathNode("mrow", inner); + + return outerNode; +}; + +groupTypes.middle = function(group, options) { + var middleNode = new mathMLTree.MathNode( + "mo", [makeText(group.value.middle, group.mode)]); + middleNode.setAttribute("fence", "true"); + return middleNode; +}; + +groupTypes.accent = function(group, options) { + var accentNode = new mathMLTree.MathNode( + "mo", [makeText(group.value.accent, group.mode)]); + + var node = new mathMLTree.MathNode( + "mover", + [buildGroup(group.value.base, options), + accentNode]); + + node.setAttribute("accent", "true"); + + return node; +}; + +groupTypes.spacing = function(group) { + var node; + + if (group.value === "\\ " || group.value === "\\space" || + group.value === " " || group.value === "~") { + node = new mathMLTree.MathNode( + "mtext", [new mathMLTree.TextNode("\u00a0")]); + } else { + node = new mathMLTree.MathNode("mspace"); + + node.setAttribute( + "width", buildCommon.spacingFunctions[group.value].size); + } + + return node; +}; + +groupTypes.op = function(group, options) { + var node; + + // TODO(emily): handle big operators using the `largeop` attribute + + if (group.value.symbol) { + // This is a symbol. Just add the symbol. + node = new mathMLTree.MathNode( + "mo", [makeText(group.value.body, group.mode)]); + } else if (group.value.value) { + // This is an operator with children. Add them. + node = new mathMLTree.MathNode( + "mo", buildExpression(group.value.value, options)); + } else { + // This is a text operator. Add all of the characters from the + // operator's name. + // TODO(emily): Add a space in the middle of some of these + // operators, like \limsup. + node = new mathMLTree.MathNode( + "mi", [new mathMLTree.TextNode(group.value.body.slice(1))]); + } + + return node; +}; + +groupTypes.mod = function(group, options) { + var inner = []; + + if (group.value.modType === "pod" || group.value.modType === "pmod") { + inner.push(new mathMLTree.MathNode( + "mo", [makeText("(", group.mode)])); + } + if (group.value.modType !== "pod") { + inner.push(new mathMLTree.MathNode( + "mo", [makeText("mod", group.mode)])); + } + if (group.value.value) { + var space = new mathMLTree.MathNode("mspace"); + space.setAttribute("width", "0.333333em"); + inner.push(space); + inner = inner.concat(buildExpression(group.value.value, options)); + } + if (group.value.modType === "pod" || group.value.modType === "pmod") { + inner.push(new mathMLTree.MathNode( + "mo", [makeText(")", group.mode)])); + } + + return new mathMLTree.MathNode("mo", inner); +}; + +groupTypes.katex = function(group) { + var node = new mathMLTree.MathNode( + "mtext", [new mathMLTree.TextNode("KaTeX")]); + + return node; +}; + +groupTypes.font = function(group, options) { + var font = group.value.font; + return buildGroup(group.value.body, options.withFont(font)); +}; + +groupTypes.delimsizing = function(group) { + var children = []; + + if (group.value.value !== ".") { + children.push(makeText(group.value.value, group.mode)); + } + + var node = new mathMLTree.MathNode("mo", children); + + if (group.value.mclass === "mopen" || + group.value.mclass === "mclose") { + // Only some of the delimsizing functions act as fences, and they + // return "mopen" or "mclose" mclass. + node.setAttribute("fence", "true"); + } else { + // Explicitly disable fencing if it's not a fence, to override the + // defaults. + node.setAttribute("fence", "false"); + } + + return node; +}; + +groupTypes.styling = function(group, options) { + var inner = buildExpression(group.value.value, options); + + var node = new mathMLTree.MathNode("mstyle", inner); + + var styleAttributes = { + "display": ["0", "true"], + "text": ["0", "false"], + "script": ["1", "false"], + "scriptscript": ["2", "false"] + }; + + var attr = styleAttributes[group.value.style]; + + node.setAttribute("scriptlevel", attr[0]); + node.setAttribute("displaystyle", attr[1]); + + return node; +}; + +groupTypes.sizing = function(group, options) { + var inner = buildExpression(group.value.value, options); + + var node = new mathMLTree.MathNode("mstyle", inner); + + // TODO(emily): This doesn't produce the correct size for nested size + // changes, because we don't keep state of what style we're currently + // in, so we can't reset the size to normal before changing it. Now + // that we're passing an options parameter we should be able to fix + // this. + node.setAttribute( + "mathsize", buildCommon.sizingMultiplier[group.value.size] + "em"); + + return node; +}; + +groupTypes.overline = function(group, options) { + var operator = new mathMLTree.MathNode( + "mo", [new mathMLTree.TextNode("\u203e")]); + operator.setAttribute("stretchy", "true"); + + var node = new mathMLTree.MathNode( + "mover", + [buildGroup(group.value.body, options), + operator]); + node.setAttribute("accent", "true"); + + return node; +}; + +groupTypes.underline = function(group, options) { + var operator = new mathMLTree.MathNode( + "mo", [new mathMLTree.TextNode("\u203e")]); + operator.setAttribute("stretchy", "true"); + + var node = new mathMLTree.MathNode( + "munder", + [buildGroup(group.value.body, options), + operator]); + node.setAttribute("accentunder", "true"); + + return node; +}; + +groupTypes.rule = function(group) { + // TODO(emily): Figure out if there's an actual way to draw black boxes + // in MathML. + var node = new mathMLTree.MathNode("mrow"); + + return node; +}; + +groupTypes.kern = function(group) { + // TODO(kevin): Figure out if there's a way to add space in MathML + var node = new mathMLTree.MathNode("mrow"); + + return node; +}; + +groupTypes.llap = function(group, options) { + var node = new mathMLTree.MathNode( + "mpadded", [buildGroup(group.value.body, options)]); + + node.setAttribute("lspace", "-1width"); + node.setAttribute("width", "0px"); + + return node; +}; + +groupTypes.rlap = function(group, options) { + var node = new mathMLTree.MathNode( + "mpadded", [buildGroup(group.value.body, options)]); + + node.setAttribute("width", "0px"); + + return node; +}; + +groupTypes.phantom = function(group, options) { + var inner = buildExpression(group.value.value, options); + return new mathMLTree.MathNode("mphantom", inner); +}; + +groupTypes.mclass = function(group, options) { + var inner = buildExpression(group.value.value, options); + return new mathMLTree.MathNode("mstyle", inner); +}; + +/** + * Takes a list of nodes, builds them, and returns a list of the generated + * MathML nodes. A little simpler than the HTML version because we don't do any + * previous-node handling. + */ +var buildExpression = function(expression, options) { + var groups = []; + for (var i = 0; i < expression.length; i++) { + var group = expression[i]; + groups.push(buildGroup(group, options)); + } + return groups; +}; + +/** + * Takes a group from the parser and calls the appropriate groupTypes function + * on it to produce a MathML node. + */ +var buildGroup = function(group, options) { + if (!group) { + return new mathMLTree.MathNode("mrow"); + } + + if (groupTypes[group.type]) { + // Call the groupTypes function + return groupTypes[group.type](group, options); + } else { + throw new ParseError( + "Got group of unknown type: '" + group.type + "'"); + } +}; + +/** + * Takes a full parse tree and settings and builds a MathML representation of + * it. In particular, we put the elements from building the parse tree into a + * <semantics> tag so we can also include that TeX source as an annotation. + * + * Note that we actually return a domTree element with a `<math>` inside it so + * we can do appropriate styling. + */ +var buildMathML = function(tree, texExpression, options) { + var expression = buildExpression(tree, options); + + // Wrap up the expression in an mrow so it is presented in the semantics + // tag correctly. + var wrapper = new mathMLTree.MathNode("mrow", expression); + + // Build a TeX annotation of the source + var annotation = new mathMLTree.MathNode( + "annotation", [new mathMLTree.TextNode(texExpression)]); + + annotation.setAttribute("encoding", "application/x-tex"); + + var semantics = new mathMLTree.MathNode( + "semantics", [wrapper, annotation]); + + var math = new mathMLTree.MathNode("math", [semantics]); + + // You can't style <math> nodes, so we wrap the node in a span. + return makeSpan(["katex-mathml"], [math]); +}; + +module.exports = buildMathML; + +},{"./ParseError":6,"./buildCommon":10,"./fontMetrics":17,"./mathMLTree":20,"./symbols":23,"./utils":25}],13:[function(require,module,exports){ +var buildHTML = require("./buildHTML"); +var buildMathML = require("./buildMathML"); +var buildCommon = require("./buildCommon"); +var Options = require("./Options"); +var Settings = require("./Settings"); +var Style = require("./Style"); + +var makeSpan = buildCommon.makeSpan; + +var buildTree = function(tree, expression, settings) { + settings = settings || new Settings({}); + + var startStyle = Style.TEXT; + if (settings.displayMode) { + startStyle = Style.DISPLAY; + } + + // Setup the default options + var options = new Options({ + style: startStyle, + size: "size5" + }); + + // `buildHTML` sometimes messes with the parse tree (like turning bins -> + // ords), so we build the MathML version first. + var mathMLNode = buildMathML(tree, expression, options); + var htmlNode = buildHTML(tree, options); + + var katexNode = makeSpan(["katex"], [ + mathMLNode, htmlNode + ]); + + if (settings.displayMode) { + return makeSpan(["katex-display"], [katexNode]); + } else { + return katexNode; + } +}; + +module.exports = buildTree; + +},{"./Options":5,"./Settings":8,"./Style":9,"./buildCommon":10,"./buildHTML":11,"./buildMathML":12}],14:[function(require,module,exports){ +/** + * This file deals with creating delimiters of various sizes. The TeXbook + * discusses these routines on page 441-442, in the "Another subroutine sets box + * x to a specified variable delimiter" paragraph. + * + * There are three main routines here. `makeSmallDelim` makes a delimiter in the + * normal font, but in either text, script, or scriptscript style. + * `makeLargeDelim` makes a delimiter in textstyle, but in one of the Size1, + * Size2, Size3, or Size4 fonts. `makeStackedDelim` makes a delimiter out of + * smaller pieces that are stacked on top of one another. + * + * The functions take a parameter `center`, which determines if the delimiter + * should be centered around the axis. + * + * Then, there are three exposed functions. `sizedDelim` makes a delimiter in + * one of the given sizes. This is used for things like `\bigl`. + * `customSizedDelim` makes a delimiter with a given total height+depth. It is + * called in places like `\sqrt`. `leftRightDelim` makes an appropriate + * delimiter which surrounds an expression of a given height an depth. It is + * used in `\left` and `\right`. + */ + +var ParseError = require("./ParseError"); +var Style = require("./Style"); + +var buildCommon = require("./buildCommon"); +var fontMetrics = require("./fontMetrics"); +var symbols = require("./symbols"); +var utils = require("./utils"); + +var makeSpan = buildCommon.makeSpan; + +/** + * Get the metrics for a given symbol and font, after transformation (i.e. + * after following replacement from symbols.js) + */ +var getMetrics = function(symbol, font) { + if (symbols.math[symbol] && symbols.math[symbol].replace) { + return fontMetrics.getCharacterMetrics( + symbols.math[symbol].replace, font); + } else { + return fontMetrics.getCharacterMetrics( + symbol, font); + } +}; + +/** + * Builds a symbol in the given font size (note size is an integer) + */ +var mathrmSize = function(value, size, mode, options) { + return buildCommon.makeSymbol(value, "Size" + size + "-Regular", + mode, options); +}; + +/** + * Puts a delimiter span in a given style, and adds appropriate height, depth, + * and maxFontSizes. + */ +var styleWrap = function(delim, toStyle, options, classes) { + classes = classes || []; + var span = makeSpan( + classes.concat(["style-wrap", options.style.reset(), toStyle.cls()]), + [delim], options); + + var multiplier = toStyle.sizeMultiplier / options.style.sizeMultiplier; + + span.height *= multiplier; + span.depth *= multiplier; + span.maxFontSize = toStyle.sizeMultiplier; + + return span; +}; + +/** + * Makes a small delimiter. This is a delimiter that comes in the Main-Regular + * font, but is restyled to either be in textstyle, scriptstyle, or + * scriptscriptstyle. + */ +var makeSmallDelim = function(delim, style, center, options, mode, classes) { + var text = buildCommon.makeSymbol(delim, "Main-Regular", mode, options); + + var span = styleWrap(text, style, options, classes); + + if (center) { + var shift = + (1 - options.style.sizeMultiplier / style.sizeMultiplier) * + options.style.metrics.axisHeight; + + span.style.top = shift + "em"; + span.height -= shift; + span.depth += shift; + } + + return span; +}; + +/** + * Makes a large delimiter. This is a delimiter that comes in the Size1, Size2, + * Size3, or Size4 fonts. It is always rendered in textstyle. + */ +var makeLargeDelim = function(delim, size, center, options, mode, classes) { + var inner = mathrmSize(delim, size, mode, options); + + var span = styleWrap( + makeSpan(["delimsizing", "size" + size], [inner], options), + Style.TEXT, options, classes); + + if (center) { + var shift = (1 - options.style.sizeMultiplier) * + options.style.metrics.axisHeight; + + span.style.top = shift + "em"; + span.height -= shift; + span.depth += shift; + } + + return span; +}; + +/** + * Make an inner span with the given offset and in the given font. This is used + * in `makeStackedDelim` to make the stacking pieces for the delimiter. + */ +var makeInner = function(symbol, font, mode) { + var sizeClass; + // Apply the correct CSS class to choose the right font. + if (font === "Size1-Regular") { + sizeClass = "delim-size1"; + } else if (font === "Size4-Regular") { + sizeClass = "delim-size4"; + } + + var inner = makeSpan( + ["delimsizinginner", sizeClass], + [makeSpan([], [buildCommon.makeSymbol(symbol, font, mode)])]); + + // Since this will be passed into `makeVList` in the end, wrap the element + // in the appropriate tag that VList uses. + return {type: "elem", elem: inner}; +}; + +/** + * Make a stacked delimiter out of a given delimiter, with the total height at + * least `heightTotal`. This routine is mentioned on page 442 of the TeXbook. + */ +var makeStackedDelim = function(delim, heightTotal, center, options, mode, + classes) { + // There are four parts, the top, an optional middle, a repeated part, and a + // bottom. + var top; + var middle; + var repeat; + var bottom; + top = repeat = bottom = delim; + middle = null; + // Also keep track of what font the delimiters are in + var font = "Size1-Regular"; + + // We set the parts and font based on the symbol. Note that we use + // '\u23d0' instead of '|' and '\u2016' instead of '\\|' for the + // repeats of the arrows + if (delim === "\\uparrow") { + repeat = bottom = "\u23d0"; + } else if (delim === "\\Uparrow") { + repeat = bottom = "\u2016"; + } else if (delim === "\\downarrow") { + top = repeat = "\u23d0"; + } else if (delim === "\\Downarrow") { + top = repeat = "\u2016"; + } else if (delim === "\\updownarrow") { + top = "\\uparrow"; + repeat = "\u23d0"; + bottom = "\\downarrow"; + } else if (delim === "\\Updownarrow") { + top = "\\Uparrow"; + repeat = "\u2016"; + bottom = "\\Downarrow"; + } else if (delim === "[" || delim === "\\lbrack") { + top = "\u23a1"; + repeat = "\u23a2"; + bottom = "\u23a3"; + font = "Size4-Regular"; + } else if (delim === "]" || delim === "\\rbrack") { + top = "\u23a4"; + repeat = "\u23a5"; + bottom = "\u23a6"; + font = "Size4-Regular"; + } else if (delim === "\\lfloor") { + repeat = top = "\u23a2"; + bottom = "\u23a3"; + font = "Size4-Regular"; + } else if (delim === "\\lceil") { + top = "\u23a1"; + repeat = bottom = "\u23a2"; + font = "Size4-Regular"; + } else if (delim === "\\rfloor") { + repeat = top = "\u23a5"; + bottom = "\u23a6"; + font = "Size4-Regular"; + } else if (delim === "\\rceil") { + top = "\u23a4"; + repeat = bottom = "\u23a5"; + font = "Size4-Regular"; + } else if (delim === "(") { + top = "\u239b"; + repeat = "\u239c"; + bottom = "\u239d"; + font = "Size4-Regular"; + } else if (delim === ")") { + top = "\u239e"; + repeat = "\u239f"; + bottom = "\u23a0"; + font = "Size4-Regular"; + } else if (delim === "\\{" || delim === "\\lbrace") { + top = "\u23a7"; + middle = "\u23a8"; + bottom = "\u23a9"; + repeat = "\u23aa"; + font = "Size4-Regular"; + } else if (delim === "\\}" || delim === "\\rbrace") { + top = "\u23ab"; + middle = "\u23ac"; + bottom = "\u23ad"; + repeat = "\u23aa"; + font = "Size4-Regular"; + } else if (delim === "\\lgroup") { + top = "\u23a7"; + bottom = "\u23a9"; + repeat = "\u23aa"; + font = "Size4-Regular"; + } else if (delim === "\\rgroup") { + top = "\u23ab"; + bottom = "\u23ad"; + repeat = "\u23aa"; + font = "Size4-Regular"; + } else if (delim === "\\lmoustache") { + top = "\u23a7"; + bottom = "\u23ad"; + repeat = "\u23aa"; + font = "Size4-Regular"; + } else if (delim === "\\rmoustache") { + top = "\u23ab"; + bottom = "\u23a9"; + repeat = "\u23aa"; + font = "Size4-Regular"; + } else if (delim === "\\surd") { + top = "\ue001"; + bottom = "\u23b7"; + repeat = "\ue000"; + font = "Size4-Regular"; + } + + // Get the metrics of the four sections + var topMetrics = getMetrics(top, font); + var topHeightTotal = topMetrics.height + topMetrics.depth; + var repeatMetrics = getMetrics(repeat, font); + var repeatHeightTotal = repeatMetrics.height + repeatMetrics.depth; + var bottomMetrics = getMetrics(bottom, font); + var bottomHeightTotal = bottomMetrics.height + bottomMetrics.depth; + var middleHeightTotal = 0; + var middleFactor = 1; + if (middle !== null) { + var middleMetrics = getMetrics(middle, font); + middleHeightTotal = middleMetrics.height + middleMetrics.depth; + middleFactor = 2; // repeat symmetrically above and below middle + } + + // Calcuate the minimal height that the delimiter can have. + // It is at least the size of the top, bottom, and optional middle combined. + var minHeight = topHeightTotal + bottomHeightTotal + middleHeightTotal; + + // Compute the number of copies of the repeat symbol we will need + var repeatCount = Math.ceil( + (heightTotal - minHeight) / (middleFactor * repeatHeightTotal)); + + // Compute the total height of the delimiter including all the symbols + var realHeightTotal = + minHeight + repeatCount * middleFactor * repeatHeightTotal; + + // The center of the delimiter is placed at the center of the axis. Note + // that in this context, "center" means that the delimiter should be + // centered around the axis in the current style, while normally it is + // centered around the axis in textstyle. + var axisHeight = options.style.metrics.axisHeight; + if (center) { + axisHeight *= options.style.sizeMultiplier; + } + // Calculate the depth + var depth = realHeightTotal / 2 - axisHeight; + + // Now, we start building the pieces that will go into the vlist + + // Keep a list of the inner pieces + var inners = []; + + // Add the bottom symbol + inners.push(makeInner(bottom, font, mode)); + + var i; + if (middle === null) { + // Add that many symbols + for (i = 0; i < repeatCount; i++) { + inners.push(makeInner(repeat, font, mode)); + } + } else { + // When there is a middle bit, we need the middle part and two repeated + // sections + for (i = 0; i < repeatCount; i++) { + inners.push(makeInner(repeat, font, mode)); + } + inners.push(makeInner(middle, font, mode)); + for (i = 0; i < repeatCount; i++) { + inners.push(makeInner(repeat, font, mode)); + } + } + + // Add the top symbol + inners.push(makeInner(top, font, mode)); + + // Finally, build the vlist + var inner = buildCommon.makeVList(inners, "bottom", depth, options); + + return styleWrap( + makeSpan(["delimsizing", "mult"], [inner], options), + Style.TEXT, options, classes); +}; + +// There are three kinds of delimiters, delimiters that stack when they become +// too large +var stackLargeDelimiters = [ + "(", ")", "[", "\\lbrack", "]", "\\rbrack", + "\\{", "\\lbrace", "\\}", "\\rbrace", + "\\lfloor", "\\rfloor", "\\lceil", "\\rceil", + "\\surd" +]; + +// delimiters that always stack +var stackAlwaysDelimiters = [ + "\\uparrow", "\\downarrow", "\\updownarrow", + "\\Uparrow", "\\Downarrow", "\\Updownarrow", + "|", "\\|", "\\vert", "\\Vert", + "\\lvert", "\\rvert", "\\lVert", "\\rVert", + "\\lgroup", "\\rgroup", "\\lmoustache", "\\rmoustache" +]; + +// and delimiters that never stack +var stackNeverDelimiters = [ + "<", ">", "\\langle", "\\rangle", "/", "\\backslash", "\\lt", "\\gt" +]; + +// Metrics of the different sizes. Found by looking at TeX's output of +// $\bigl| // \Bigl| \biggl| \Biggl| \showlists$ +// Used to create stacked delimiters of appropriate sizes in makeSizedDelim. +var sizeToMaxHeight = [0, 1.2, 1.8, 2.4, 3.0]; + +/** + * Used to create a delimiter of a specific size, where `size` is 1, 2, 3, or 4. + */ +var makeSizedDelim = function(delim, size, options, mode, classes) { + // < and > turn into \langle and \rangle in delimiters + if (delim === "<" || delim === "\\lt") { + delim = "\\langle"; + } else if (delim === ">" || delim === "\\gt") { + delim = "\\rangle"; + } + + // Sized delimiters are never centered. + if (utils.contains(stackLargeDelimiters, delim) || + utils.contains(stackNeverDelimiters, delim)) { + return makeLargeDelim(delim, size, false, options, mode, classes); + } else if (utils.contains(stackAlwaysDelimiters, delim)) { + return makeStackedDelim( + delim, sizeToMaxHeight[size], false, options, mode, classes); + } else { + throw new ParseError("Illegal delimiter: '" + delim + "'"); + } +}; + +/** + * There are three different sequences of delimiter sizes that the delimiters + * follow depending on the kind of delimiter. This is used when creating custom + * sized delimiters to decide whether to create a small, large, or stacked + * delimiter. + * + * In real TeX, these sequences aren't explicitly defined, but are instead + * defined inside the font metrics. Since there are only three sequences that + * are possible for the delimiters that TeX defines, it is easier to just encode + * them explicitly here. + */ + +// Delimiters that never stack try small delimiters and large delimiters only +var stackNeverDelimiterSequence = [ + {type: "small", style: Style.SCRIPTSCRIPT}, + {type: "small", style: Style.SCRIPT}, + {type: "small", style: Style.TEXT}, + {type: "large", size: 1}, + {type: "large", size: 2}, + {type: "large", size: 3}, + {type: "large", size: 4} +]; + +// Delimiters that always stack try the small delimiters first, then stack +var stackAlwaysDelimiterSequence = [ + {type: "small", style: Style.SCRIPTSCRIPT}, + {type: "small", style: Style.SCRIPT}, + {type: "small", style: Style.TEXT}, + {type: "stack"} +]; + +// Delimiters that stack when large try the small and then large delimiters, and +// stack afterwards +var stackLargeDelimiterSequence = [ + {type: "small", style: Style.SCRIPTSCRIPT}, + {type: "small", style: Style.SCRIPT}, + {type: "small", style: Style.TEXT}, + {type: "large", size: 1}, + {type: "large", size: 2}, + {type: "large", size: 3}, + {type: "large", size: 4}, + {type: "stack"} +]; + +/** + * Get the font used in a delimiter based on what kind of delimiter it is. + */ +var delimTypeToFont = function(type) { + if (type.type === "small") { + return "Main-Regular"; + } else if (type.type === "large") { + return "Size" + type.size + "-Regular"; + } else if (type.type === "stack") { + return "Size4-Regular"; + } +}; + +/** + * Traverse a sequence of types of delimiters to decide what kind of delimiter + * should be used to create a delimiter of the given height+depth. + */ +var traverseSequence = function(delim, height, sequence, options) { + // Here, we choose the index we should start at in the sequences. In smaller + // sizes (which correspond to larger numbers in style.size) we start earlier + // in the sequence. Thus, scriptscript starts at index 3-3=0, script starts + // at index 3-2=1, text starts at 3-1=2, and display starts at min(2,3-0)=2 + var start = Math.min(2, 3 - options.style.size); + for (var i = start; i < sequence.length; i++) { + if (sequence[i].type === "stack") { + // This is always the last delimiter, so we just break the loop now. + break; + } + + var metrics = getMetrics(delim, delimTypeToFont(sequence[i])); + var heightDepth = metrics.height + metrics.depth; + + // Small delimiters are scaled down versions of the same font, so we + // account for the style change size. + + if (sequence[i].type === "small") { + heightDepth *= sequence[i].style.sizeMultiplier; + } + + // Check if the delimiter at this size works for the given height. + if (heightDepth > height) { + return sequence[i]; + } + } + + // If we reached the end of the sequence, return the last sequence element. + return sequence[sequence.length - 1]; +}; + +/** + * Make a delimiter of a given height+depth, with optional centering. Here, we + * traverse the sequences, and create a delimiter that the sequence tells us to. + */ +var makeCustomSizedDelim = function(delim, height, center, options, mode, + classes) { + if (delim === "<" || delim === "\\lt") { + delim = "\\langle"; + } else if (delim === ">" || delim === "\\gt") { + delim = "\\rangle"; + } + + // Decide what sequence to use + var sequence; + if (utils.contains(stackNeverDelimiters, delim)) { + sequence = stackNeverDelimiterSequence; + } else if (utils.contains(stackLargeDelimiters, delim)) { + sequence = stackLargeDelimiterSequence; + } else { + sequence = stackAlwaysDelimiterSequence; + } + + // Look through the sequence + var delimType = traverseSequence(delim, height, sequence, options); + + // Depending on the sequence element we decided on, call the appropriate + // function. + if (delimType.type === "small") { + return makeSmallDelim(delim, delimType.style, center, options, mode, + classes); + } else if (delimType.type === "large") { + return makeLargeDelim(delim, delimType.size, center, options, mode, + classes); + } else if (delimType.type === "stack") { + return makeStackedDelim(delim, height, center, options, mode, classes); + } +}; + +/** + * Make a delimiter for use with `\left` and `\right`, given a height and depth + * of an expression that the delimiters surround. + */ +var makeLeftRightDelim = function(delim, height, depth, options, mode, + classes) { + // We always center \left/\right delimiters, so the axis is always shifted + var axisHeight = + options.style.metrics.axisHeight * options.style.sizeMultiplier; + + // Taken from TeX source, tex.web, function make_left_right + var delimiterFactor = 901; + var delimiterExtend = 5.0 / fontMetrics.metrics.ptPerEm; + + var maxDistFromAxis = Math.max( + height - axisHeight, depth + axisHeight); + + var totalHeight = Math.max( + // In real TeX, calculations are done using integral values which are + // 65536 per pt, or 655360 per em. So, the division here truncates in + // TeX but doesn't here, producing different results. If we wanted to + // exactly match TeX's calculation, we could do + // Math.floor(655360 * maxDistFromAxis / 500) * + // delimiterFactor / 655360 + // (To see the difference, compare + // x^{x^{\left(\rule{0.1em}{0.68em}\right)}} + // in TeX and KaTeX) + maxDistFromAxis / 500 * delimiterFactor, + 2 * maxDistFromAxis - delimiterExtend); + + // Finally, we defer to `makeCustomSizedDelim` with our calculated total + // height + return makeCustomSizedDelim(delim, totalHeight, true, options, mode, + classes); +}; + +module.exports = { + sizedDelim: makeSizedDelim, + customSizedDelim: makeCustomSizedDelim, + leftRightDelim: makeLeftRightDelim +}; + +},{"./ParseError":6,"./Style":9,"./buildCommon":10,"./fontMetrics":17,"./symbols":23,"./utils":25}],15:[function(require,module,exports){ +/** + * These objects store the data about the DOM nodes we create, as well as some + * extra data. They can then be transformed into real DOM nodes with the + * `toNode` function or HTML markup using `toMarkup`. They are useful for both + * storing extra properties on the nodes, as well as providing a way to easily + * work with the DOM. + * + * Similar functions for working with MathML nodes exist in mathMLTree.js. + */ +var unicodeRegexes = require("./unicodeRegexes"); +var utils = require("./utils"); + +/** + * Create an HTML className based on a list of classes. In addition to joining + * with spaces, we also remove null or empty classes. + */ +var createClass = function(classes) { + classes = classes.slice(); + for (var i = classes.length - 1; i >= 0; i--) { + if (!classes[i]) { + classes.splice(i, 1); + } + } + + return classes.join(" "); +}; + +/** + * This node represents a span node, with a className, a list of children, and + * an inline style. It also contains information about its height, depth, and + * maxFontSize. + */ +function span(classes, children, options) { + this.classes = classes || []; + this.children = children || []; + this.height = 0; + this.depth = 0; + this.maxFontSize = 0; + this.style = {}; + this.attributes = {}; + if (options) { + if (options.style.isTight()) { + this.classes.push("mtight"); + } + if (options.getColor()) { + this.style.color = options.getColor(); + } + } +} + +/** + * Sets an arbitrary attribute on the span. Warning: use this wisely. Not all + * browsers support attributes the same, and having too many custom attributes + * is probably bad. + */ +span.prototype.setAttribute = function(attribute, value) { + this.attributes[attribute] = value; +}; + +span.prototype.tryCombine = function(sibling) { + return false; +}; + +/** + * Convert the span into an HTML node + */ +span.prototype.toNode = function() { + var span = document.createElement("span"); + + // Apply the class + span.className = createClass(this.classes); + + // Apply inline styles + for (var style in this.style) { + if (Object.prototype.hasOwnProperty.call(this.style, style)) { + span.style[style] = this.style[style]; + } + } + + // Apply attributes + for (var attr in this.attributes) { + if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { + span.setAttribute(attr, this.attributes[attr]); + } + } + + // Append the children, also as HTML nodes + for (var i = 0; i < this.children.length; i++) { + span.appendChild(this.children[i].toNode()); + } + + return span; +}; + +/** + * Convert the span into an HTML markup string + */ +span.prototype.toMarkup = function() { + var markup = "<span"; + + // Add the class + if (this.classes.length) { + markup += " class=\""; + markup += utils.escape(createClass(this.classes)); + markup += "\""; + } + + var styles = ""; + + // Add the styles, after hyphenation + for (var style in this.style) { + if (this.style.hasOwnProperty(style)) { + styles += utils.hyphenate(style) + ":" + this.style[style] + ";"; + } + } + + if (styles) { + markup += " style=\"" + utils.escape(styles) + "\""; + } + + // Add the attributes + for (var attr in this.attributes) { + if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { + markup += " " + attr + "=\""; + markup += utils.escape(this.attributes[attr]); + markup += "\""; + } + } + + markup += ">"; + + // Add the markup of the children, also as markup + for (var i = 0; i < this.children.length; i++) { + markup += this.children[i].toMarkup(); + } + + markup += "</span>"; + + return markup; +}; + +/** + * This node represents a document fragment, which contains elements, but when + * placed into the DOM doesn't have any representation itself. Thus, it only + * contains children and doesn't have any HTML properties. It also keeps track + * of a height, depth, and maxFontSize. + */ +function documentFragment(children) { + this.children = children || []; + this.height = 0; + this.depth = 0; + this.maxFontSize = 0; +} + +/** + * Convert the fragment into a node + */ +documentFragment.prototype.toNode = function() { + // Create a fragment + var frag = document.createDocumentFragment(); + + // Append the children + for (var i = 0; i < this.children.length; i++) { + frag.appendChild(this.children[i].toNode()); + } + + return frag; +}; + +/** + * Convert the fragment into HTML markup + */ +documentFragment.prototype.toMarkup = function() { + var markup = ""; + + // Simply concatenate the markup for the children together + for (var i = 0; i < this.children.length; i++) { + markup += this.children[i].toMarkup(); + } + + return markup; +}; + +var iCombinations = { + 'î': '\u0131\u0302', + 'ï': '\u0131\u0308', + 'Ã': '\u0131\u0301', + // 'Ä«': '\u0131\u0304', // enable when we add Extended Latin + 'ì': '\u0131\u0300' +}; + +/** + * A symbol node contains information about a single symbol. It either renders + * to a single text node, or a span with a single text node in it, depending on + * whether it has CSS classes, styles, or needs italic correction. + */ +function symbolNode(value, height, depth, italic, skew, classes, style) { + this.value = value || ""; + this.height = height || 0; + this.depth = depth || 0; + this.italic = italic || 0; + this.skew = skew || 0; + this.classes = classes || []; + this.style = style || {}; + this.maxFontSize = 0; + + // Mark CJK characters with specific classes so that we can specify which + // fonts to use. This allows us to render these characters with a serif + // font in situations where the browser would either default to a sans serif + // or render a placeholder character. + if (unicodeRegexes.cjkRegex.test(value)) { + // I couldn't find any fonts that contained Hangul as well as all of + // the other characters we wanted to test there for it gets its own + // CSS class. + if (unicodeRegexes.hangulRegex.test(value)) { + this.classes.push('hangul_fallback'); + } else { + this.classes.push('cjk_fallback'); + } + } + + if (/[îïÃì]/.test(this.value)) { // add Ä« when we add Extended Latin + this.value = iCombinations[this.value]; + } +} + +symbolNode.prototype.tryCombine = function(sibling) { + if (!sibling + || !(sibling instanceof symbolNode) + || this.italic > 0 + || createClass(this.classes) !== createClass(sibling.classes) + || this.skew !== sibling.skew + || this.maxFontSize !== sibling.maxFontSize) { + return false; + } + for (var style in this.style) { + if (this.style.hasOwnProperty(style) + && this.style[style] !== sibling.style[style]) { + return false; + } + } + for (style in sibling.style) { + if (sibling.style.hasOwnProperty(style) + && this.style[style] !== sibling.style[style]) { + return false; + } + } + this.value += sibling.value; + this.height = Math.max(this.height, sibling.height); + this.depth = Math.max(this.depth, sibling.depth); + this.italic = sibling.italic; + return true; +}; + +/** + * Creates a text node or span from a symbol node. Note that a span is only + * created if it is needed. + */ +symbolNode.prototype.toNode = function() { + var node = document.createTextNode(this.value); + var span = null; + + if (this.italic > 0) { + span = document.createElement("span"); + span.style.marginRight = this.italic + "em"; + } + + if (this.classes.length > 0) { + span = span || document.createElement("span"); + span.className = createClass(this.classes); + } + + for (var style in this.style) { + if (this.style.hasOwnProperty(style)) { + span = span || document.createElement("span"); + span.style[style] = this.style[style]; + } + } + + if (span) { + span.appendChild(node); + return span; + } else { + return node; + } +}; + +/** + * Creates markup for a symbol node. + */ +symbolNode.prototype.toMarkup = function() { + // TODO(alpert): More duplication than I'd like from + // span.prototype.toMarkup and symbolNode.prototype.toNode... + var needsSpan = false; + + var markup = "<span"; + + if (this.classes.length) { + needsSpan = true; + markup += " class=\""; + markup += utils.escape(createClass(this.classes)); + markup += "\""; + } + + var styles = ""; + + if (this.italic > 0) { + styles += "margin-right:" + this.italic + "em;"; + } + for (var style in this.style) { + if (this.style.hasOwnProperty(style)) { + styles += utils.hyphenate(style) + ":" + this.style[style] + ";"; + } + } + + if (styles) { + needsSpan = true; + markup += " style=\"" + utils.escape(styles) + "\""; + } + + var escaped = utils.escape(this.value); + if (needsSpan) { + markup += ">"; + markup += escaped; + markup += "</span>"; + return markup; + } else { + return escaped; + } +}; + +module.exports = { + span: span, + documentFragment: documentFragment, + symbolNode: symbolNode +}; + +},{"./unicodeRegexes":24,"./utils":25}],16:[function(require,module,exports){ +/* eslint no-constant-condition:0 */ +var parseData = require("./parseData"); +var ParseError = require("./ParseError"); +var Style = require("./Style"); + +var ParseNode = parseData.ParseNode; + +/** + * Parse the body of the environment, with rows delimited by \\ and + * columns delimited by &, and create a nested list in row-major order + * with one group per cell. + */ +function parseArray(parser, result) { + var row = []; + var body = [row]; + var rowGaps = []; + while (true) { + var cell = parser.parseExpression(false, null); + row.push(new ParseNode("ordgroup", cell, parser.mode)); + var next = parser.nextToken.text; + if (next === "&") { + parser.consume(); + } else if (next === "\\end") { + break; + } else if (next === "\\\\" || next === "\\cr") { + var cr = parser.parseFunction(); + rowGaps.push(cr.value.size); + row = []; + body.push(row); + } else { + throw new ParseError("Expected & or \\\\ or \\end", + parser.nextToken); + } + } + result.body = body; + result.rowGaps = rowGaps; + return new ParseNode(result.type, result, parser.mode); +} + +/* + * An environment definition is very similar to a function definition: + * it is declared with a name or a list of names, a set of properties + * and a handler containing the actual implementation. + * + * The properties include: + * - numArgs: The number of arguments after the \begin{name} function. + * - argTypes: (optional) Just like for a function + * - allowedInText: (optional) Whether or not the environment is allowed inside + * text mode (default false) (not enforced yet) + * - numOptionalArgs: (optional) Just like for a function + * A bare number instead of that object indicates the numArgs value. + * + * The handler function will receive two arguments + * - context: information and references provided by the parser + * - args: an array of arguments passed to \begin{name} + * The context contains the following properties: + * - envName: the name of the environment, one of the listed names. + * - parser: the parser object + * - lexer: the lexer object + * - positions: the positions associated with these arguments from args. + * The handler must return a ParseResult. + */ + +function defineEnvironment(names, props, handler) { + if (typeof names === "string") { + names = [names]; + } + if (typeof props === "number") { + props = { numArgs: props }; + } + // Set default values of environments + var data = { + numArgs: props.numArgs || 0, + argTypes: props.argTypes, + greediness: 1, + allowedInText: !!props.allowedInText, + numOptionalArgs: props.numOptionalArgs || 0, + handler: handler + }; + for (var i = 0; i < names.length; ++i) { + module.exports[names[i]] = data; + } +} + +// Arrays are part of LaTeX, defined in lttab.dtx so its documentation +// is part of the source2e.pdf file of LaTeX2e source documentation. +defineEnvironment("array", { + numArgs: 1 +}, function(context, args) { + var colalign = args[0]; + colalign = colalign.value.map ? colalign.value : [colalign]; + var cols = colalign.map(function(node) { + var ca = node.value; + if ("lcr".indexOf(ca) !== -1) { + return { + type: "align", + align: ca + }; + } else if (ca === "|") { + return { + type: "separator", + separator: "|" + }; + } + throw new ParseError( + "Unknown column alignment: " + node.value, + node); + }); + var res = { + type: "array", + cols: cols, + hskipBeforeAndAfter: true // \@preamble in lttab.dtx + }; + res = parseArray(context.parser, res); + return res; +}); + +// The matrix environments of amsmath builds on the array environment +// of LaTeX, which is discussed above. +defineEnvironment([ + "matrix", + "pmatrix", + "bmatrix", + "Bmatrix", + "vmatrix", + "Vmatrix" +], { +}, function(context) { + var delimiters = { + "matrix": null, + "pmatrix": ["(", ")"], + "bmatrix": ["[", "]"], + "Bmatrix": ["\\{", "\\}"], + "vmatrix": ["|", "|"], + "Vmatrix": ["\\Vert", "\\Vert"] + }[context.envName]; + var res = { + type: "array", + hskipBeforeAndAfter: false // \hskip -\arraycolsep in amsmath + }; + res = parseArray(context.parser, res); + if (delimiters) { + res = new ParseNode("leftright", { + body: [res], + left: delimiters[0], + right: delimiters[1] + }, context.mode); + } + return res; +}); + +// A cases environment (in amsmath.sty) is almost equivalent to +// \def\arraystretch{1.2}% +// \left\{\begin{array}{@{}l@{\quad}l@{}} … \end{array}\right. +defineEnvironment("cases", { +}, function(context) { + var res = { + type: "array", + arraystretch: 1.2, + cols: [{ + type: "align", + align: "l", + pregap: 0, + // TODO(kevinb) get the current style. + // For now we use the metrics for TEXT style which is what we were + // doing before. Before attempting to get the current style we + // should look at TeX's behavior especially for \over and matrices. + postgap: Style.TEXT.metrics.quad + }, { + type: "align", + align: "l", + pregap: 0, + postgap: 0 + }] + }; + res = parseArray(context.parser, res); + res = new ParseNode("leftright", { + body: [res], + left: "\\{", + right: "." + }, context.mode); + return res; +}); + +// An aligned environment is like the align* environment +// except it operates within math mode. +// Note that we assume \nomallineskiplimit to be zero, +// so that \strut@ is the same as \strut. +defineEnvironment("aligned", { +}, function(context) { + var res = { + type: "array", + cols: [] + }; + res = parseArray(context.parser, res); + var emptyGroup = new ParseNode("ordgroup", [], context.mode); + var numCols = 0; + res.value.body.forEach(function(row) { + var i; + for (i = 1; i < row.length; i += 2) { + row[i].value.unshift(emptyGroup); + } + if (numCols < row.length) { + numCols = row.length; + } + }); + for (var i = 0; i < numCols; ++i) { + var align = "r"; + var pregap = 0; + if (i % 2 === 1) { + align = "l"; + } else if (i > 0) { + pregap = 2; // one \qquad between columns + } + res.value.cols[i] = { + type: "align", + align: align, + pregap: pregap, + postgap: 0 + }; + } + return res; +}); + +},{"./ParseError":6,"./Style":9,"./parseData":21}],17:[function(require,module,exports){ +/* eslint no-unused-vars:0 */ + +var Style = require("./Style"); +var cjkRegex = require("./unicodeRegexes").cjkRegex; + +/** + * This file contains metrics regarding fonts and individual symbols. The sigma + * and xi variables, as well as the metricMap map contain data extracted from + * TeX, TeX font metrics, and the TTF files. These data are then exposed via the + * `metrics` variable and the getCharacterMetrics function. + */ + +// In TeX, there are actually three sets of dimensions, one for each of +// textstyle, scriptstyle, and scriptscriptstyle. These are provided in the +// the arrays below, in that order. +// +// The font metrics are stored in fonts cmsy10, cmsy7, and cmsy5 respsectively. +// This was determined by running the folllowing script: +// +// latex -interaction=nonstopmode \ +// '\documentclass{article}\usepackage{amsmath}\begin{document}' \ +// '$a$ \expandafter\show\the\textfont2' \ +// '\expandafter\show\the\scriptfont2' \ +// '\expandafter\show\the\scriptscriptfont2' \ +// '\stop' +// +// The metrics themselves were retreived using the following commands: +// +// tftopl cmsy10 +// tftopl cmsy7 +// tftopl cmsy5 +// +// The output of each of these commands is quite lengthy. The only part we +// care about is the FONTDIMEN section. Each value is measured in EMs. +var sigmas = { + slant: [0.250, 0.250, 0.250], // sigma1 + space: [0.000, 0.000, 0.000], // sigma2 + stretch: [0.000, 0.000, 0.000], // sigma3 + shrink: [0.000, 0.000, 0.000], // sigma4 + xHeight: [0.431, 0.431, 0.431], // sigma5 + quad: [1.000, 1.171, 1.472], // sigma6 + extraSpace: [0.000, 0.000, 0.000], // sigma7 + num1: [0.677, 0.732, 0.925], // sigma8 + num2: [0.394, 0.384, 0.387], // sigma9 + num3: [0.444, 0.471, 0.504], // sigma10 + denom1: [0.686, 0.752, 1.025], // sigma11 + denom2: [0.345, 0.344, 0.532], // sigma12 + sup1: [0.413, 0.503, 0.504], // sigma13 + sup2: [0.363, 0.431, 0.404], // sigma14 + sup3: [0.289, 0.286, 0.294], // sigma15 + sub1: [0.150, 0.143, 0.200], // sigma16 + sub2: [0.247, 0.286, 0.400], // sigma17 + supDrop: [0.386, 0.353, 0.494], // sigma18 + subDrop: [0.050, 0.071, 0.100], // sigma19 + delim1: [2.390, 1.700, 1.980], // sigma20 + delim2: [1.010, 1.157, 1.420], // sigma21 + axisHeight: [0.250, 0.250, 0.250] // sigma22 +}; + +// These font metrics are extracted from TeX by using +// \font\a=cmex10 +// \showthe\fontdimenX\a +// where X is the corresponding variable number. These correspond to the font +// parameters of the extension fonts (family 3). See the TeXbook, page 441. +var xi1 = 0; +var xi2 = 0; +var xi3 = 0; +var xi4 = 0; +var xi5 = 0.431; +var xi6 = 1; +var xi7 = 0; +var xi8 = 0.04; +var xi9 = 0.111; +var xi10 = 0.166; +var xi11 = 0.2; +var xi12 = 0.6; +var xi13 = 0.1; + +// This value determines how large a pt is, for metrics which are defined in +// terms of pts. +// This value is also used in katex.less; if you change it make sure the values +// match. +var ptPerEm = 10.0; + +// The space between adjacent `|` columns in an array definition. From +// `\showthe\doublerulesep` in LaTeX. +var doubleRuleSep = 2.0 / ptPerEm; + +/** + * This is just a mapping from common names to real metrics + */ +var metrics = { + defaultRuleThickness: xi8, + bigOpSpacing1: xi9, + bigOpSpacing2: xi10, + bigOpSpacing3: xi11, + bigOpSpacing4: xi12, + bigOpSpacing5: xi13, + ptPerEm: ptPerEm, + doubleRuleSep: doubleRuleSep +}; + +// This map contains a mapping from font name and character code to character +// metrics, including height, depth, italic correction, and skew (kern from the +// character to the corresponding \skewchar) +// This map is generated via `make metrics`. It should not be changed manually. +var metricMap = require("./fontMetricsData"); + +// These are very rough approximations. We default to Times New Roman which +// should have Latin-1 and Cyrillic characters, but may not depending on the +// operating system. The metrics do not account for extra height from the +// accents. In the case of Cyrillic characters which have both ascenders and +// descenders we prefer approximations with ascenders, primarily to prevent +// the fraction bar or root line from intersecting the glyph. +// TODO(kevinb) allow union of multiple glyph metrics for better accuracy. +var extraCharacterMap = { + // Latin-1 + 'À': 'A', + 'Ã': 'A', + 'Â': 'A', + 'Ã': 'A', + 'Ä': 'A', + 'Ã…': 'A', + 'Æ': 'A', + 'Ç': 'C', + 'È': 'E', + 'É': 'E', + 'Ê': 'E', + 'Ë': 'E', + 'ÃŒ': 'I', + 'Ã': 'I', + 'ÃŽ': 'I', + 'Ã': 'I', + 'Ã': 'D', + 'Ñ': 'N', + 'Ã’': 'O', + 'Ó': 'O', + 'Ô': 'O', + 'Õ': 'O', + 'Ö': 'O', + 'Ø': 'O', + 'Ù': 'U', + 'Ú': 'U', + 'Û': 'U', + 'Ü': 'U', + 'Ã': 'Y', + 'Þ': 'o', + 'ß': 'B', + 'à ': 'a', + 'á': 'a', + 'â': 'a', + 'ã': 'a', + 'ä': 'a', + 'Ã¥': 'a', + 'æ': 'a', + 'ç': 'c', + 'è': 'e', + 'é': 'e', + 'ê': 'e', + 'ë': 'e', + 'ì': 'i', + 'Ã': 'i', + 'î': 'i', + 'ï': 'i', + 'ð': 'd', + 'ñ': 'n', + 'ò': 'o', + 'ó': 'o', + 'ô': 'o', + 'õ': 'o', + 'ö': 'o', + 'ø': 'o', + 'ù': 'u', + 'ú': 'u', + 'û': 'u', + 'ü': 'u', + 'ý': 'y', + 'þ': 'o', + 'ÿ': 'y', + + // Cyrillic + 'Ð': 'A', + 'Б': 'B', + 'Ð’': 'B', + 'Г': 'F', + 'Д': 'A', + 'Е': 'E', + 'Ж': 'K', + 'З': '3', + 'И': 'N', + 'Й': 'N', + 'К': 'K', + 'Л': 'N', + 'М': 'M', + 'Ð': 'H', + 'О': 'O', + 'П': 'N', + 'Ð ': 'P', + 'С': 'C', + 'Т': 'T', + 'У': 'y', + 'Ф': 'O', + 'Ð¥': 'X', + 'Ц': 'U', + 'Ч': 'h', + 'Ш': 'W', + 'Щ': 'W', + 'Ъ': 'B', + 'Ы': 'X', + 'Ь': 'B', + 'Ð': '3', + 'Ю': 'X', + 'Я': 'R', + 'а': 'a', + 'б': 'b', + 'в': 'a', + 'г': 'r', + 'д': 'y', + 'е': 'e', + 'ж': 'm', + 'з': 'e', + 'и': 'n', + 'й': 'n', + 'к': 'n', + 'л': 'n', + 'м': 'm', + 'н': 'n', + 'о': 'o', + 'п': 'n', + 'Ñ€': 'p', + 'Ñ': 'c', + 'Ñ‚': 'o', + 'у': 'y', + 'Ñ„': 'b', + 'Ñ…': 'x', + 'ц': 'n', + 'ч': 'n', + 'ш': 'w', + 'щ': 'w', + 'ÑŠ': 'a', + 'Ñ‹': 'm', + 'ÑŒ': 'a', + 'Ñ': 'e', + 'ÑŽ': 'm', + 'Ñ': 'r' +}; + +/** + * This function is a convenience function for looking up information in the + * metricMap table. It takes a character as a string, and a style. + * + * Note: the `width` property may be undefined if fontMetricsData.js wasn't + * built using `Make extended_metrics`. + */ +var getCharacterMetrics = function(character, style) { + var ch = character.charCodeAt(0); + if (character[0] in extraCharacterMap) { + ch = extraCharacterMap[character[0]].charCodeAt(0); + } else if (cjkRegex.test(character[0])) { + ch = 'M'.charCodeAt(0); + } + var metrics = metricMap[style][ch]; + if (metrics) { + return { + depth: metrics[0], + height: metrics[1], + italic: metrics[2], + skew: metrics[3], + width: metrics[4] + }; + } +}; + +module.exports = { + metrics: metrics, + sigmas: sigmas, + getCharacterMetrics: getCharacterMetrics +}; + +},{"./Style":9,"./fontMetricsData":18,"./unicodeRegexes":24}],18:[function(require,module,exports){ +module.exports = { + "AMS-Regular": { + "65": [0, 0.68889, 0, 0], + "66": [0, 0.68889, 0, 0], + "67": [0, 0.68889, 0, 0], + "68": [0, 0.68889, 0, 0], + "69": [0, 0.68889, 0, 0], + "70": [0, 0.68889, 0, 0], + "71": [0, 0.68889, 0, 0], + "72": [0, 0.68889, 0, 0], + "73": [0, 0.68889, 0, 0], + "74": [0.16667, 0.68889, 0, 0], + "75": [0, 0.68889, 0, 0], + "76": [0, 0.68889, 0, 0], + "77": [0, 0.68889, 0, 0], + "78": [0, 0.68889, 0, 0], + "79": [0.16667, 0.68889, 0, 0], + "80": [0, 0.68889, 0, 0], + "81": [0.16667, 0.68889, 0, 0], + "82": [0, 0.68889, 0, 0], + "83": [0, 0.68889, 0, 0], + "84": [0, 0.68889, 0, 0], + "85": [0, 0.68889, 0, 0], + "86": [0, 0.68889, 0, 0], + "87": [0, 0.68889, 0, 0], + "88": [0, 0.68889, 0, 0], + "89": [0, 0.68889, 0, 0], + "90": [0, 0.68889, 0, 0], + "107": [0, 0.68889, 0, 0], + "165": [0, 0.675, 0.025, 0], + "174": [0.15559, 0.69224, 0, 0], + "240": [0, 0.68889, 0, 0], + "295": [0, 0.68889, 0, 0], + "710": [0, 0.825, 0, 0], + "732": [0, 0.9, 0, 0], + "770": [0, 0.825, 0, 0], + "771": [0, 0.9, 0, 0], + "989": [0.08167, 0.58167, 0, 0], + "1008": [0, 0.43056, 0.04028, 0], + "8245": [0, 0.54986, 0, 0], + "8463": [0, 0.68889, 0, 0], + "8487": [0, 0.68889, 0, 0], + "8498": [0, 0.68889, 0, 0], + "8502": [0, 0.68889, 0, 0], + "8503": [0, 0.68889, 0, 0], + "8504": [0, 0.68889, 0, 0], + "8513": [0, 0.68889, 0, 0], + "8592": [-0.03598, 0.46402, 0, 0], + "8594": [-0.03598, 0.46402, 0, 0], + "8602": [-0.13313, 0.36687, 0, 0], + "8603": [-0.13313, 0.36687, 0, 0], + "8606": [0.01354, 0.52239, 0, 0], + "8608": [0.01354, 0.52239, 0, 0], + "8610": [0.01354, 0.52239, 0, 0], + "8611": [0.01354, 0.52239, 0, 0], + "8619": [0, 0.54986, 0, 0], + "8620": [0, 0.54986, 0, 0], + "8621": [-0.13313, 0.37788, 0, 0], + "8622": [-0.13313, 0.36687, 0, 0], + "8624": [0, 0.69224, 0, 0], + "8625": [0, 0.69224, 0, 0], + "8630": [0, 0.43056, 0, 0], + "8631": [0, 0.43056, 0, 0], + "8634": [0.08198, 0.58198, 0, 0], + "8635": [0.08198, 0.58198, 0, 0], + "8638": [0.19444, 0.69224, 0, 0], + "8639": [0.19444, 0.69224, 0, 0], + "8642": [0.19444, 0.69224, 0, 0], + "8643": [0.19444, 0.69224, 0, 0], + "8644": [0.1808, 0.675, 0, 0], + "8646": [0.1808, 0.675, 0, 0], + "8647": [0.1808, 0.675, 0, 0], + "8648": [0.19444, 0.69224, 0, 0], + "8649": [0.1808, 0.675, 0, 0], + "8650": [0.19444, 0.69224, 0, 0], + "8651": [0.01354, 0.52239, 0, 0], + "8652": [0.01354, 0.52239, 0, 0], + "8653": [-0.13313, 0.36687, 0, 0], + "8654": [-0.13313, 0.36687, 0, 0], + "8655": [-0.13313, 0.36687, 0, 0], + "8666": [0.13667, 0.63667, 0, 0], + "8667": [0.13667, 0.63667, 0, 0], + "8669": [-0.13313, 0.37788, 0, 0], + "8672": [-0.064, 0.437, 0, 0], + "8674": [-0.064, 0.437, 0, 0], + "8705": [0, 0.825, 0, 0], + "8708": [0, 0.68889, 0, 0], + "8709": [0.08167, 0.58167, 0, 0], + "8717": [0, 0.43056, 0, 0], + "8722": [-0.03598, 0.46402, 0, 0], + "8724": [0.08198, 0.69224, 0, 0], + "8726": [0.08167, 0.58167, 0, 0], + "8733": [0, 0.69224, 0, 0], + "8736": [0, 0.69224, 0, 0], + "8737": [0, 0.69224, 0, 0], + "8738": [0.03517, 0.52239, 0, 0], + "8739": [0.08167, 0.58167, 0, 0], + "8740": [0.25142, 0.74111, 0, 0], + "8741": [0.08167, 0.58167, 0, 0], + "8742": [0.25142, 0.74111, 0, 0], + "8756": [0, 0.69224, 0, 0], + "8757": [0, 0.69224, 0, 0], + "8764": [-0.13313, 0.36687, 0, 0], + "8765": [-0.13313, 0.37788, 0, 0], + "8769": [-0.13313, 0.36687, 0, 0], + "8770": [-0.03625, 0.46375, 0, 0], + "8774": [0.30274, 0.79383, 0, 0], + "8776": [-0.01688, 0.48312, 0, 0], + "8778": [0.08167, 0.58167, 0, 0], + "8782": [0.06062, 0.54986, 0, 0], + "8783": [0.06062, 0.54986, 0, 0], + "8785": [0.08198, 0.58198, 0, 0], + "8786": [0.08198, 0.58198, 0, 0], + "8787": [0.08198, 0.58198, 0, 0], + "8790": [0, 0.69224, 0, 0], + "8791": [0.22958, 0.72958, 0, 0], + "8796": [0.08198, 0.91667, 0, 0], + "8806": [0.25583, 0.75583, 0, 0], + "8807": [0.25583, 0.75583, 0, 0], + "8808": [0.25142, 0.75726, 0, 0], + "8809": [0.25142, 0.75726, 0, 0], + "8812": [0.25583, 0.75583, 0, 0], + "8814": [0.20576, 0.70576, 0, 0], + "8815": [0.20576, 0.70576, 0, 0], + "8816": [0.30274, 0.79383, 0, 0], + "8817": [0.30274, 0.79383, 0, 0], + "8818": [0.22958, 0.72958, 0, 0], + "8819": [0.22958, 0.72958, 0, 0], + "8822": [0.1808, 0.675, 0, 0], + "8823": [0.1808, 0.675, 0, 0], + "8828": [0.13667, 0.63667, 0, 0], + "8829": [0.13667, 0.63667, 0, 0], + "8830": [0.22958, 0.72958, 0, 0], + "8831": [0.22958, 0.72958, 0, 0], + "8832": [0.20576, 0.70576, 0, 0], + "8833": [0.20576, 0.70576, 0, 0], + "8840": [0.30274, 0.79383, 0, 0], + "8841": [0.30274, 0.79383, 0, 0], + "8842": [0.13597, 0.63597, 0, 0], + "8843": [0.13597, 0.63597, 0, 0], + "8847": [0.03517, 0.54986, 0, 0], + "8848": [0.03517, 0.54986, 0, 0], + "8858": [0.08198, 0.58198, 0, 0], + "8859": [0.08198, 0.58198, 0, 0], + "8861": [0.08198, 0.58198, 0, 0], + "8862": [0, 0.675, 0, 0], + "8863": [0, 0.675, 0, 0], + "8864": [0, 0.675, 0, 0], + "8865": [0, 0.675, 0, 0], + "8872": [0, 0.69224, 0, 0], + "8873": [0, 0.69224, 0, 0], + "8874": [0, 0.69224, 0, 0], + "8876": [0, 0.68889, 0, 0], + "8877": [0, 0.68889, 0, 0], + "8878": [0, 0.68889, 0, 0], + "8879": [0, 0.68889, 0, 0], + "8882": [0.03517, 0.54986, 0, 0], + "8883": [0.03517, 0.54986, 0, 0], + "8884": [0.13667, 0.63667, 0, 0], + "8885": [0.13667, 0.63667, 0, 0], + "8888": [0, 0.54986, 0, 0], + "8890": [0.19444, 0.43056, 0, 0], + "8891": [0.19444, 0.69224, 0, 0], + "8892": [0.19444, 0.69224, 0, 0], + "8901": [0, 0.54986, 0, 0], + "8903": [0.08167, 0.58167, 0, 0], + "8905": [0.08167, 0.58167, 0, 0], + "8906": [0.08167, 0.58167, 0, 0], + "8907": [0, 0.69224, 0, 0], + "8908": [0, 0.69224, 0, 0], + "8909": [-0.03598, 0.46402, 0, 0], + "8910": [0, 0.54986, 0, 0], + "8911": [0, 0.54986, 0, 0], + "8912": [0.03517, 0.54986, 0, 0], + "8913": [0.03517, 0.54986, 0, 0], + "8914": [0, 0.54986, 0, 0], + "8915": [0, 0.54986, 0, 0], + "8916": [0, 0.69224, 0, 0], + "8918": [0.0391, 0.5391, 0, 0], + "8919": [0.0391, 0.5391, 0, 0], + "8920": [0.03517, 0.54986, 0, 0], + "8921": [0.03517, 0.54986, 0, 0], + "8922": [0.38569, 0.88569, 0, 0], + "8923": [0.38569, 0.88569, 0, 0], + "8926": [0.13667, 0.63667, 0, 0], + "8927": [0.13667, 0.63667, 0, 0], + "8928": [0.30274, 0.79383, 0, 0], + "8929": [0.30274, 0.79383, 0, 0], + "8934": [0.23222, 0.74111, 0, 0], + "8935": [0.23222, 0.74111, 0, 0], + "8936": [0.23222, 0.74111, 0, 0], + "8937": [0.23222, 0.74111, 0, 0], + "8938": [0.20576, 0.70576, 0, 0], + "8939": [0.20576, 0.70576, 0, 0], + "8940": [0.30274, 0.79383, 0, 0], + "8941": [0.30274, 0.79383, 0, 0], + "8994": [0.19444, 0.69224, 0, 0], + "8995": [0.19444, 0.69224, 0, 0], + "9416": [0.15559, 0.69224, 0, 0], + "9484": [0, 0.69224, 0, 0], + "9488": [0, 0.69224, 0, 0], + "9492": [0, 0.37788, 0, 0], + "9496": [0, 0.37788, 0, 0], + "9585": [0.19444, 0.68889, 0, 0], + "9586": [0.19444, 0.74111, 0, 0], + "9632": [0, 0.675, 0, 0], + "9633": [0, 0.675, 0, 0], + "9650": [0, 0.54986, 0, 0], + "9651": [0, 0.54986, 0, 0], + "9654": [0.03517, 0.54986, 0, 0], + "9660": [0, 0.54986, 0, 0], + "9661": [0, 0.54986, 0, 0], + "9664": [0.03517, 0.54986, 0, 0], + "9674": [0.11111, 0.69224, 0, 0], + "9733": [0.19444, 0.69224, 0, 0], + "10003": [0, 0.69224, 0, 0], + "10016": [0, 0.69224, 0, 0], + "10731": [0.11111, 0.69224, 0, 0], + "10846": [0.19444, 0.75583, 0, 0], + "10877": [0.13667, 0.63667, 0, 0], + "10878": [0.13667, 0.63667, 0, 0], + "10885": [0.25583, 0.75583, 0, 0], + "10886": [0.25583, 0.75583, 0, 0], + "10887": [0.13597, 0.63597, 0, 0], + "10888": [0.13597, 0.63597, 0, 0], + "10889": [0.26167, 0.75726, 0, 0], + "10890": [0.26167, 0.75726, 0, 0], + "10891": [0.48256, 0.98256, 0, 0], + "10892": [0.48256, 0.98256, 0, 0], + "10901": [0.13667, 0.63667, 0, 0], + "10902": [0.13667, 0.63667, 0, 0], + "10933": [0.25142, 0.75726, 0, 0], + "10934": [0.25142, 0.75726, 0, 0], + "10935": [0.26167, 0.75726, 0, 0], + "10936": [0.26167, 0.75726, 0, 0], + "10937": [0.26167, 0.75726, 0, 0], + "10938": [0.26167, 0.75726, 0, 0], + "10949": [0.25583, 0.75583, 0, 0], + "10950": [0.25583, 0.75583, 0, 0], + "10955": [0.28481, 0.79383, 0, 0], + "10956": [0.28481, 0.79383, 0, 0], + "57350": [0.08167, 0.58167, 0, 0], + "57351": [0.08167, 0.58167, 0, 0], + "57352": [0.08167, 0.58167, 0, 0], + "57353": [0, 0.43056, 0.04028, 0], + "57356": [0.25142, 0.75726, 0, 0], + "57357": [0.25142, 0.75726, 0, 0], + "57358": [0.41951, 0.91951, 0, 0], + "57359": [0.30274, 0.79383, 0, 0], + "57360": [0.30274, 0.79383, 0, 0], + "57361": [0.41951, 0.91951, 0, 0], + "57366": [0.25142, 0.75726, 0, 0], + "57367": [0.25142, 0.75726, 0, 0], + "57368": [0.25142, 0.75726, 0, 0], + "57369": [0.25142, 0.75726, 0, 0], + "57370": [0.13597, 0.63597, 0, 0], + "57371": [0.13597, 0.63597, 0, 0] + }, + "Caligraphic-Regular": { + "48": [0, 0.43056, 0, 0], + "49": [0, 0.43056, 0, 0], + "50": [0, 0.43056, 0, 0], + "51": [0.19444, 0.43056, 0, 0], + "52": [0.19444, 0.43056, 0, 0], + "53": [0.19444, 0.43056, 0, 0], + "54": [0, 0.64444, 0, 0], + "55": [0.19444, 0.43056, 0, 0], + "56": [0, 0.64444, 0, 0], + "57": [0.19444, 0.43056, 0, 0], + "65": [0, 0.68333, 0, 0.19445], + "66": [0, 0.68333, 0.03041, 0.13889], + "67": [0, 0.68333, 0.05834, 0.13889], + "68": [0, 0.68333, 0.02778, 0.08334], + "69": [0, 0.68333, 0.08944, 0.11111], + "70": [0, 0.68333, 0.09931, 0.11111], + "71": [0.09722, 0.68333, 0.0593, 0.11111], + "72": [0, 0.68333, 0.00965, 0.11111], + "73": [0, 0.68333, 0.07382, 0], + "74": [0.09722, 0.68333, 0.18472, 0.16667], + "75": [0, 0.68333, 0.01445, 0.05556], + "76": [0, 0.68333, 0, 0.13889], + "77": [0, 0.68333, 0, 0.13889], + "78": [0, 0.68333, 0.14736, 0.08334], + "79": [0, 0.68333, 0.02778, 0.11111], + "80": [0, 0.68333, 0.08222, 0.08334], + "81": [0.09722, 0.68333, 0, 0.11111], + "82": [0, 0.68333, 0, 0.08334], + "83": [0, 0.68333, 0.075, 0.13889], + "84": [0, 0.68333, 0.25417, 0], + "85": [0, 0.68333, 0.09931, 0.08334], + "86": [0, 0.68333, 0.08222, 0], + "87": [0, 0.68333, 0.08222, 0.08334], + "88": [0, 0.68333, 0.14643, 0.13889], + "89": [0.09722, 0.68333, 0.08222, 0.08334], + "90": [0, 0.68333, 0.07944, 0.13889] + }, + "Fraktur-Regular": { + "33": [0, 0.69141, 0, 0], + "34": [0, 0.69141, 0, 0], + "38": [0, 0.69141, 0, 0], + "39": [0, 0.69141, 0, 0], + "40": [0.24982, 0.74947, 0, 0], + "41": [0.24982, 0.74947, 0, 0], + "42": [0, 0.62119, 0, 0], + "43": [0.08319, 0.58283, 0, 0], + "44": [0, 0.10803, 0, 0], + "45": [0.08319, 0.58283, 0, 0], + "46": [0, 0.10803, 0, 0], + "47": [0.24982, 0.74947, 0, 0], + "48": [0, 0.47534, 0, 0], + "49": [0, 0.47534, 0, 0], + "50": [0, 0.47534, 0, 0], + "51": [0.18906, 0.47534, 0, 0], + "52": [0.18906, 0.47534, 0, 0], + "53": [0.18906, 0.47534, 0, 0], + "54": [0, 0.69141, 0, 0], + "55": [0.18906, 0.47534, 0, 0], + "56": [0, 0.69141, 0, 0], + "57": [0.18906, 0.47534, 0, 0], + "58": [0, 0.47534, 0, 0], + "59": [0.12604, 0.47534, 0, 0], + "61": [-0.13099, 0.36866, 0, 0], + "63": [0, 0.69141, 0, 0], + "65": [0, 0.69141, 0, 0], + "66": [0, 0.69141, 0, 0], + "67": [0, 0.69141, 0, 0], + "68": [0, 0.69141, 0, 0], + "69": [0, 0.69141, 0, 0], + "70": [0.12604, 0.69141, 0, 0], + "71": [0, 0.69141, 0, 0], + "72": [0.06302, 0.69141, 0, 0], + "73": [0, 0.69141, 0, 0], + "74": [0.12604, 0.69141, 0, 0], + "75": [0, 0.69141, 0, 0], + "76": [0, 0.69141, 0, 0], + "77": [0, 0.69141, 0, 0], + "78": [0, 0.69141, 0, 0], + "79": [0, 0.69141, 0, 0], + "80": [0.18906, 0.69141, 0, 0], + "81": [0.03781, 0.69141, 0, 0], + "82": [0, 0.69141, 0, 0], + "83": [0, 0.69141, 0, 0], + "84": [0, 0.69141, 0, 0], + "85": [0, 0.69141, 0, 0], + "86": [0, 0.69141, 0, 0], + "87": [0, 0.69141, 0, 0], + "88": [0, 0.69141, 0, 0], + "89": [0.18906, 0.69141, 0, 0], + "90": [0.12604, 0.69141, 0, 0], + "91": [0.24982, 0.74947, 0, 0], + "93": [0.24982, 0.74947, 0, 0], + "94": [0, 0.69141, 0, 0], + "97": [0, 0.47534, 0, 0], + "98": [0, 0.69141, 0, 0], + "99": [0, 0.47534, 0, 0], + "100": [0, 0.62119, 0, 0], + "101": [0, 0.47534, 0, 0], + "102": [0.18906, 0.69141, 0, 0], + "103": [0.18906, 0.47534, 0, 0], + "104": [0.18906, 0.69141, 0, 0], + "105": [0, 0.69141, 0, 0], + "106": [0, 0.69141, 0, 0], + "107": [0, 0.69141, 0, 0], + "108": [0, 0.69141, 0, 0], + "109": [0, 0.47534, 0, 0], + "110": [0, 0.47534, 0, 0], + "111": [0, 0.47534, 0, 0], + "112": [0.18906, 0.52396, 0, 0], + "113": [0.18906, 0.47534, 0, 0], + "114": [0, 0.47534, 0, 0], + "115": [0, 0.47534, 0, 0], + "116": [0, 0.62119, 0, 0], + "117": [0, 0.47534, 0, 0], + "118": [0, 0.52396, 0, 0], + "119": [0, 0.52396, 0, 0], + "120": [0.18906, 0.47534, 0, 0], + "121": [0.18906, 0.47534, 0, 0], + "122": [0.18906, 0.47534, 0, 0], + "8216": [0, 0.69141, 0, 0], + "8217": [0, 0.69141, 0, 0], + "58112": [0, 0.62119, 0, 0], + "58113": [0, 0.62119, 0, 0], + "58114": [0.18906, 0.69141, 0, 0], + "58115": [0.18906, 0.69141, 0, 0], + "58116": [0.18906, 0.47534, 0, 0], + "58117": [0, 0.69141, 0, 0], + "58118": [0, 0.62119, 0, 0], + "58119": [0, 0.47534, 0, 0] + }, + "Main-Bold": { + "33": [0, 0.69444, 0, 0], + "34": [0, 0.69444, 0, 0], + "35": [0.19444, 0.69444, 0, 0], + "36": [0.05556, 0.75, 0, 0], + "37": [0.05556, 0.75, 0, 0], + "38": [0, 0.69444, 0, 0], + "39": [0, 0.69444, 0, 0], + "40": [0.25, 0.75, 0, 0], + "41": [0.25, 0.75, 0, 0], + "42": [0, 0.75, 0, 0], + "43": [0.13333, 0.63333, 0, 0], + "44": [0.19444, 0.15556, 0, 0], + "45": [0, 0.44444, 0, 0], + "46": [0, 0.15556, 0, 0], + "47": [0.25, 0.75, 0, 0], + "48": [0, 0.64444, 0, 0], + "49": [0, 0.64444, 0, 0], + "50": [0, 0.64444, 0, 0], + "51": [0, 0.64444, 0, 0], + "52": [0, 0.64444, 0, 0], + "53": [0, 0.64444, 0, 0], + "54": [0, 0.64444, 0, 0], + "55": [0, 0.64444, 0, 0], + "56": [0, 0.64444, 0, 0], + "57": [0, 0.64444, 0, 0], + "58": [0, 0.44444, 0, 0], + "59": [0.19444, 0.44444, 0, 0], + "60": [0.08556, 0.58556, 0, 0], + "61": [-0.10889, 0.39111, 0, 0], + "62": [0.08556, 0.58556, 0, 0], + "63": [0, 0.69444, 0, 0], + "64": [0, 0.69444, 0, 0], + "65": [0, 0.68611, 0, 0], + "66": [0, 0.68611, 0, 0], + "67": [0, 0.68611, 0, 0], + "68": [0, 0.68611, 0, 0], + "69": [0, 0.68611, 0, 0], + "70": [0, 0.68611, 0, 0], + "71": [0, 0.68611, 0, 0], + "72": [0, 0.68611, 0, 0], + "73": [0, 0.68611, 0, 0], + "74": [0, 0.68611, 0, 0], + "75": [0, 0.68611, 0, 0], + "76": [0, 0.68611, 0, 0], + "77": [0, 0.68611, 0, 0], + "78": [0, 0.68611, 0, 0], + "79": [0, 0.68611, 0, 0], + "80": [0, 0.68611, 0, 0], + "81": [0.19444, 0.68611, 0, 0], + "82": [0, 0.68611, 0, 0], + "83": [0, 0.68611, 0, 0], + "84": [0, 0.68611, 0, 0], + "85": [0, 0.68611, 0, 0], + "86": [0, 0.68611, 0.01597, 0], + "87": [0, 0.68611, 0.01597, 0], + "88": [0, 0.68611, 0, 0], + "89": [0, 0.68611, 0.02875, 0], + "90": [0, 0.68611, 0, 0], + "91": [0.25, 0.75, 0, 0], + "92": [0.25, 0.75, 0, 0], + "93": [0.25, 0.75, 0, 0], + "94": [0, 0.69444, 0, 0], + "95": [0.31, 0.13444, 0.03194, 0], + "96": [0, 0.69444, 0, 0], + "97": [0, 0.44444, 0, 0], + "98": [0, 0.69444, 0, 0], + "99": [0, 0.44444, 0, 0], + "100": [0, 0.69444, 0, 0], + "101": [0, 0.44444, 0, 0], + "102": [0, 0.69444, 0.10903, 0], + "103": [0.19444, 0.44444, 0.01597, 0], + "104": [0, 0.69444, 0, 0], + "105": [0, 0.69444, 0, 0], + "106": [0.19444, 0.69444, 0, 0], + "107": [0, 0.69444, 0, 0], + "108": [0, 0.69444, 0, 0], + "109": [0, 0.44444, 0, 0], + "110": [0, 0.44444, 0, 0], + "111": [0, 0.44444, 0, 0], + "112": [0.19444, 0.44444, 0, 0], + "113": [0.19444, 0.44444, 0, 0], + "114": [0, 0.44444, 0, 0], + "115": [0, 0.44444, 0, 0], + "116": [0, 0.63492, 0, 0], + "117": [0, 0.44444, 0, 0], + "118": [0, 0.44444, 0.01597, 0], + "119": [0, 0.44444, 0.01597, 0], + "120": [0, 0.44444, 0, 0], + "121": [0.19444, 0.44444, 0.01597, 0], + "122": [0, 0.44444, 0, 0], + "123": [0.25, 0.75, 0, 0], + "124": [0.25, 0.75, 0, 0], + "125": [0.25, 0.75, 0, 0], + "126": [0.35, 0.34444, 0, 0], + "168": [0, 0.69444, 0, 0], + "172": [0, 0.44444, 0, 0], + "175": [0, 0.59611, 0, 0], + "176": [0, 0.69444, 0, 0], + "177": [0.13333, 0.63333, 0, 0], + "180": [0, 0.69444, 0, 0], + "215": [0.13333, 0.63333, 0, 0], + "247": [0.13333, 0.63333, 0, 0], + "305": [0, 0.44444, 0, 0], + "567": [0.19444, 0.44444, 0, 0], + "710": [0, 0.69444, 0, 0], + "711": [0, 0.63194, 0, 0], + "713": [0, 0.59611, 0, 0], + "714": [0, 0.69444, 0, 0], + "715": [0, 0.69444, 0, 0], + "728": [0, 0.69444, 0, 0], + "729": [0, 0.69444, 0, 0], + "730": [0, 0.69444, 0, 0], + "732": [0, 0.69444, 0, 0], + "768": [0, 0.69444, 0, 0], + "769": [0, 0.69444, 0, 0], + "770": [0, 0.69444, 0, 0], + "771": [0, 0.69444, 0, 0], + "772": [0, 0.59611, 0, 0], + "774": [0, 0.69444, 0, 0], + "775": [0, 0.69444, 0, 0], + "776": [0, 0.69444, 0, 0], + "778": [0, 0.69444, 0, 0], + "779": [0, 0.69444, 0, 0], + "780": [0, 0.63194, 0, 0], + "824": [0.19444, 0.69444, 0, 0], + "915": [0, 0.68611, 0, 0], + "916": [0, 0.68611, 0, 0], + "920": [0, 0.68611, 0, 0], + "923": [0, 0.68611, 0, 0], + "926": [0, 0.68611, 0, 0], + "928": [0, 0.68611, 0, 0], + "931": [0, 0.68611, 0, 0], + "933": [0, 0.68611, 0, 0], + "934": [0, 0.68611, 0, 0], + "936": [0, 0.68611, 0, 0], + "937": [0, 0.68611, 0, 0], + "8211": [0, 0.44444, 0.03194, 0], + "8212": [0, 0.44444, 0.03194, 0], + "8216": [0, 0.69444, 0, 0], + "8217": [0, 0.69444, 0, 0], + "8220": [0, 0.69444, 0, 0], + "8221": [0, 0.69444, 0, 0], + "8224": [0.19444, 0.69444, 0, 0], + "8225": [0.19444, 0.69444, 0, 0], + "8242": [0, 0.55556, 0, 0], + "8407": [0, 0.72444, 0.15486, 0], + "8463": [0, 0.69444, 0, 0], + "8465": [0, 0.69444, 0, 0], + "8467": [0, 0.69444, 0, 0], + "8472": [0.19444, 0.44444, 0, 0], + "8476": [0, 0.69444, 0, 0], + "8501": [0, 0.69444, 0, 0], + "8592": [-0.10889, 0.39111, 0, 0], + "8593": [0.19444, 0.69444, 0, 0], + "8594": [-0.10889, 0.39111, 0, 0], + "8595": [0.19444, 0.69444, 0, 0], + "8596": [-0.10889, 0.39111, 0, 0], + "8597": [0.25, 0.75, 0, 0], + "8598": [0.19444, 0.69444, 0, 0], + "8599": [0.19444, 0.69444, 0, 0], + "8600": [0.19444, 0.69444, 0, 0], + "8601": [0.19444, 0.69444, 0, 0], + "8636": [-0.10889, 0.39111, 0, 0], + "8637": [-0.10889, 0.39111, 0, 0], + "8640": [-0.10889, 0.39111, 0, 0], + "8641": [-0.10889, 0.39111, 0, 0], + "8656": [-0.10889, 0.39111, 0, 0], + "8657": [0.19444, 0.69444, 0, 0], + "8658": [-0.10889, 0.39111, 0, 0], + "8659": [0.19444, 0.69444, 0, 0], + "8660": [-0.10889, 0.39111, 0, 0], + "8661": [0.25, 0.75, 0, 0], + "8704": [0, 0.69444, 0, 0], + "8706": [0, 0.69444, 0.06389, 0], + "8707": [0, 0.69444, 0, 0], + "8709": [0.05556, 0.75, 0, 0], + "8711": [0, 0.68611, 0, 0], + "8712": [0.08556, 0.58556, 0, 0], + "8715": [0.08556, 0.58556, 0, 0], + "8722": [0.13333, 0.63333, 0, 0], + "8723": [0.13333, 0.63333, 0, 0], + "8725": [0.25, 0.75, 0, 0], + "8726": [0.25, 0.75, 0, 0], + "8727": [-0.02778, 0.47222, 0, 0], + "8728": [-0.02639, 0.47361, 0, 0], + "8729": [-0.02639, 0.47361, 0, 0], + "8730": [0.18, 0.82, 0, 0], + "8733": [0, 0.44444, 0, 0], + "8734": [0, 0.44444, 0, 0], + "8736": [0, 0.69224, 0, 0], + "8739": [0.25, 0.75, 0, 0], + "8741": [0.25, 0.75, 0, 0], + "8743": [0, 0.55556, 0, 0], + "8744": [0, 0.55556, 0, 0], + "8745": [0, 0.55556, 0, 0], + "8746": [0, 0.55556, 0, 0], + "8747": [0.19444, 0.69444, 0.12778, 0], + "8764": [-0.10889, 0.39111, 0, 0], + "8768": [0.19444, 0.69444, 0, 0], + "8771": [0.00222, 0.50222, 0, 0], + "8776": [0.02444, 0.52444, 0, 0], + "8781": [0.00222, 0.50222, 0, 0], + "8801": [0.00222, 0.50222, 0, 0], + "8804": [0.19667, 0.69667, 0, 0], + "8805": [0.19667, 0.69667, 0, 0], + "8810": [0.08556, 0.58556, 0, 0], + "8811": [0.08556, 0.58556, 0, 0], + "8826": [0.08556, 0.58556, 0, 0], + "8827": [0.08556, 0.58556, 0, 0], + "8834": [0.08556, 0.58556, 0, 0], + "8835": [0.08556, 0.58556, 0, 0], + "8838": [0.19667, 0.69667, 0, 0], + "8839": [0.19667, 0.69667, 0, 0], + "8846": [0, 0.55556, 0, 0], + "8849": [0.19667, 0.69667, 0, 0], + "8850": [0.19667, 0.69667, 0, 0], + "8851": [0, 0.55556, 0, 0], + "8852": [0, 0.55556, 0, 0], + "8853": [0.13333, 0.63333, 0, 0], + "8854": [0.13333, 0.63333, 0, 0], + "8855": [0.13333, 0.63333, 0, 0], + "8856": [0.13333, 0.63333, 0, 0], + "8857": [0.13333, 0.63333, 0, 0], + "8866": [0, 0.69444, 0, 0], + "8867": [0, 0.69444, 0, 0], + "8868": [0, 0.69444, 0, 0], + "8869": [0, 0.69444, 0, 0], + "8900": [-0.02639, 0.47361, 0, 0], + "8901": [-0.02639, 0.47361, 0, 0], + "8902": [-0.02778, 0.47222, 0, 0], + "8968": [0.25, 0.75, 0, 0], + "8969": [0.25, 0.75, 0, 0], + "8970": [0.25, 0.75, 0, 0], + "8971": [0.25, 0.75, 0, 0], + "8994": [-0.13889, 0.36111, 0, 0], + "8995": [-0.13889, 0.36111, 0, 0], + "9651": [0.19444, 0.69444, 0, 0], + "9657": [-0.02778, 0.47222, 0, 0], + "9661": [0.19444, 0.69444, 0, 0], + "9667": [-0.02778, 0.47222, 0, 0], + "9711": [0.19444, 0.69444, 0, 0], + "9824": [0.12963, 0.69444, 0, 0], + "9825": [0.12963, 0.69444, 0, 0], + "9826": [0.12963, 0.69444, 0, 0], + "9827": [0.12963, 0.69444, 0, 0], + "9837": [0, 0.75, 0, 0], + "9838": [0.19444, 0.69444, 0, 0], + "9839": [0.19444, 0.69444, 0, 0], + "10216": [0.25, 0.75, 0, 0], + "10217": [0.25, 0.75, 0, 0], + "10815": [0, 0.68611, 0, 0], + "10927": [0.19667, 0.69667, 0, 0], + "10928": [0.19667, 0.69667, 0, 0] + }, + "Main-Italic": { + "33": [0, 0.69444, 0.12417, 0], + "34": [0, 0.69444, 0.06961, 0], + "35": [0.19444, 0.69444, 0.06616, 0], + "37": [0.05556, 0.75, 0.13639, 0], + "38": [0, 0.69444, 0.09694, 0], + "39": [0, 0.69444, 0.12417, 0], + "40": [0.25, 0.75, 0.16194, 0], + "41": [0.25, 0.75, 0.03694, 0], + "42": [0, 0.75, 0.14917, 0], + "43": [0.05667, 0.56167, 0.03694, 0], + "44": [0.19444, 0.10556, 0, 0], + "45": [0, 0.43056, 0.02826, 0], + "46": [0, 0.10556, 0, 0], + "47": [0.25, 0.75, 0.16194, 0], + "48": [0, 0.64444, 0.13556, 0], + "49": [0, 0.64444, 0.13556, 0], + "50": [0, 0.64444, 0.13556, 0], + "51": [0, 0.64444, 0.13556, 0], + "52": [0.19444, 0.64444, 0.13556, 0], + "53": [0, 0.64444, 0.13556, 0], + "54": [0, 0.64444, 0.13556, 0], + "55": [0.19444, 0.64444, 0.13556, 0], + "56": [0, 0.64444, 0.13556, 0], + "57": [0, 0.64444, 0.13556, 0], + "58": [0, 0.43056, 0.0582, 0], + "59": [0.19444, 0.43056, 0.0582, 0], + "61": [-0.13313, 0.36687, 0.06616, 0], + "63": [0, 0.69444, 0.1225, 0], + "64": [0, 0.69444, 0.09597, 0], + "65": [0, 0.68333, 0, 0], + "66": [0, 0.68333, 0.10257, 0], + "67": [0, 0.68333, 0.14528, 0], + "68": [0, 0.68333, 0.09403, 0], + "69": [0, 0.68333, 0.12028, 0], + "70": [0, 0.68333, 0.13305, 0], + "71": [0, 0.68333, 0.08722, 0], + "72": [0, 0.68333, 0.16389, 0], + "73": [0, 0.68333, 0.15806, 0], + "74": [0, 0.68333, 0.14028, 0], + "75": [0, 0.68333, 0.14528, 0], + "76": [0, 0.68333, 0, 0], + "77": [0, 0.68333, 0.16389, 0], + "78": [0, 0.68333, 0.16389, 0], + "79": [0, 0.68333, 0.09403, 0], + "80": [0, 0.68333, 0.10257, 0], + "81": [0.19444, 0.68333, 0.09403, 0], + "82": [0, 0.68333, 0.03868, 0], + "83": [0, 0.68333, 0.11972, 0], + "84": [0, 0.68333, 0.13305, 0], + "85": [0, 0.68333, 0.16389, 0], + "86": [0, 0.68333, 0.18361, 0], + "87": [0, 0.68333, 0.18361, 0], + "88": [0, 0.68333, 0.15806, 0], + "89": [0, 0.68333, 0.19383, 0], + "90": [0, 0.68333, 0.14528, 0], + "91": [0.25, 0.75, 0.1875, 0], + "93": [0.25, 0.75, 0.10528, 0], + "94": [0, 0.69444, 0.06646, 0], + "95": [0.31, 0.12056, 0.09208, 0], + "97": [0, 0.43056, 0.07671, 0], + "98": [0, 0.69444, 0.06312, 0], + "99": [0, 0.43056, 0.05653, 0], + "100": [0, 0.69444, 0.10333, 0], + "101": [0, 0.43056, 0.07514, 0], + "102": [0.19444, 0.69444, 0.21194, 0], + "103": [0.19444, 0.43056, 0.08847, 0], + "104": [0, 0.69444, 0.07671, 0], + "105": [0, 0.65536, 0.1019, 0], + "106": [0.19444, 0.65536, 0.14467, 0], + "107": [0, 0.69444, 0.10764, 0], + "108": [0, 0.69444, 0.10333, 0], + "109": [0, 0.43056, 0.07671, 0], + "110": [0, 0.43056, 0.07671, 0], + "111": [0, 0.43056, 0.06312, 0], + "112": [0.19444, 0.43056, 0.06312, 0], + "113": [0.19444, 0.43056, 0.08847, 0], + "114": [0, 0.43056, 0.10764, 0], + "115": [0, 0.43056, 0.08208, 0], + "116": [0, 0.61508, 0.09486, 0], + "117": [0, 0.43056, 0.07671, 0], + "118": [0, 0.43056, 0.10764, 0], + "119": [0, 0.43056, 0.10764, 0], + "120": [0, 0.43056, 0.12042, 0], + "121": [0.19444, 0.43056, 0.08847, 0], + "122": [0, 0.43056, 0.12292, 0], + "126": [0.35, 0.31786, 0.11585, 0], + "163": [0, 0.69444, 0, 0], + "305": [0, 0.43056, 0, 0.02778], + "567": [0.19444, 0.43056, 0, 0.08334], + "768": [0, 0.69444, 0, 0], + "769": [0, 0.69444, 0.09694, 0], + "770": [0, 0.69444, 0.06646, 0], + "771": [0, 0.66786, 0.11585, 0], + "772": [0, 0.56167, 0.10333, 0], + "774": [0, 0.69444, 0.10806, 0], + "775": [0, 0.66786, 0.11752, 0], + "776": [0, 0.66786, 0.10474, 0], + "778": [0, 0.69444, 0, 0], + "779": [0, 0.69444, 0.1225, 0], + "780": [0, 0.62847, 0.08295, 0], + "915": [0, 0.68333, 0.13305, 0], + "916": [0, 0.68333, 0, 0], + "920": [0, 0.68333, 0.09403, 0], + "923": [0, 0.68333, 0, 0], + "926": [0, 0.68333, 0.15294, 0], + "928": [0, 0.68333, 0.16389, 0], + "931": [0, 0.68333, 0.12028, 0], + "933": [0, 0.68333, 0.11111, 0], + "934": [0, 0.68333, 0.05986, 0], + "936": [0, 0.68333, 0.11111, 0], + "937": [0, 0.68333, 0.10257, 0], + "8211": [0, 0.43056, 0.09208, 0], + "8212": [0, 0.43056, 0.09208, 0], + "8216": [0, 0.69444, 0.12417, 0], + "8217": [0, 0.69444, 0.12417, 0], + "8220": [0, 0.69444, 0.1685, 0], + "8221": [0, 0.69444, 0.06961, 0], + "8463": [0, 0.68889, 0, 0] + }, + "Main-Regular": { + "32": [0, 0, 0, 0], + "33": [0, 0.69444, 0, 0], + "34": [0, 0.69444, 0, 0], + "35": [0.19444, 0.69444, 0, 0], + "36": [0.05556, 0.75, 0, 0], + "37": [0.05556, 0.75, 0, 0], + "38": [0, 0.69444, 0, 0], + "39": [0, 0.69444, 0, 0], + "40": [0.25, 0.75, 0, 0], + "41": [0.25, 0.75, 0, 0], + "42": [0, 0.75, 0, 0], + "43": [0.08333, 0.58333, 0, 0], + "44": [0.19444, 0.10556, 0, 0], + "45": [0, 0.43056, 0, 0], + "46": [0, 0.10556, 0, 0], + "47": [0.25, 0.75, 0, 0], + "48": [0, 0.64444, 0, 0], + "49": [0, 0.64444, 0, 0], + "50": [0, 0.64444, 0, 0], + "51": [0, 0.64444, 0, 0], + "52": [0, 0.64444, 0, 0], + "53": [0, 0.64444, 0, 0], + "54": [0, 0.64444, 0, 0], + "55": [0, 0.64444, 0, 0], + "56": [0, 0.64444, 0, 0], + "57": [0, 0.64444, 0, 0], + "58": [0, 0.43056, 0, 0], + "59": [0.19444, 0.43056, 0, 0], + "60": [0.0391, 0.5391, 0, 0], + "61": [-0.13313, 0.36687, 0, 0], + "62": [0.0391, 0.5391, 0, 0], + "63": [0, 0.69444, 0, 0], + "64": [0, 0.69444, 0, 0], + "65": [0, 0.68333, 0, 0], + "66": [0, 0.68333, 0, 0], + "67": [0, 0.68333, 0, 0], + "68": [0, 0.68333, 0, 0], + "69": [0, 0.68333, 0, 0], + "70": [0, 0.68333, 0, 0], + "71": [0, 0.68333, 0, 0], + "72": [0, 0.68333, 0, 0], + "73": [0, 0.68333, 0, 0], + "74": [0, 0.68333, 0, 0], + "75": [0, 0.68333, 0, 0], + "76": [0, 0.68333, 0, 0], + "77": [0, 0.68333, 0, 0], + "78": [0, 0.68333, 0, 0], + "79": [0, 0.68333, 0, 0], + "80": [0, 0.68333, 0, 0], + "81": [0.19444, 0.68333, 0, 0], + "82": [0, 0.68333, 0, 0], + "83": [0, 0.68333, 0, 0], + "84": [0, 0.68333, 0, 0], + "85": [0, 0.68333, 0, 0], + "86": [0, 0.68333, 0.01389, 0], + "87": [0, 0.68333, 0.01389, 0], + "88": [0, 0.68333, 0, 0], + "89": [0, 0.68333, 0.025, 0], + "90": [0, 0.68333, 0, 0], + "91": [0.25, 0.75, 0, 0], + "92": [0.25, 0.75, 0, 0], + "93": [0.25, 0.75, 0, 0], + "94": [0, 0.69444, 0, 0], + "95": [0.31, 0.12056, 0.02778, 0], + "96": [0, 0.69444, 0, 0], + "97": [0, 0.43056, 0, 0], + "98": [0, 0.69444, 0, 0], + "99": [0, 0.43056, 0, 0], + "100": [0, 0.69444, 0, 0], + "101": [0, 0.43056, 0, 0], + "102": [0, 0.69444, 0.07778, 0], + "103": [0.19444, 0.43056, 0.01389, 0], + "104": [0, 0.69444, 0, 0], + "105": [0, 0.66786, 0, 0], + "106": [0.19444, 0.66786, 0, 0], + "107": [0, 0.69444, 0, 0], + "108": [0, 0.69444, 0, 0], + "109": [0, 0.43056, 0, 0], + "110": [0, 0.43056, 0, 0], + "111": [0, 0.43056, 0, 0], + "112": [0.19444, 0.43056, 0, 0], + "113": [0.19444, 0.43056, 0, 0], + "114": [0, 0.43056, 0, 0], + "115": [0, 0.43056, 0, 0], + "116": [0, 0.61508, 0, 0], + "117": [0, 0.43056, 0, 0], + "118": [0, 0.43056, 0.01389, 0], + "119": [0, 0.43056, 0.01389, 0], + "120": [0, 0.43056, 0, 0], + "121": [0.19444, 0.43056, 0.01389, 0], + "122": [0, 0.43056, 0, 0], + "123": [0.25, 0.75, 0, 0], + "124": [0.25, 0.75, 0, 0], + "125": [0.25, 0.75, 0, 0], + "126": [0.35, 0.31786, 0, 0], + "160": [0, 0, 0, 0], + "168": [0, 0.66786, 0, 0], + "172": [0, 0.43056, 0, 0], + "175": [0, 0.56778, 0, 0], + "176": [0, 0.69444, 0, 0], + "177": [0.08333, 0.58333, 0, 0], + "180": [0, 0.69444, 0, 0], + "215": [0.08333, 0.58333, 0, 0], + "247": [0.08333, 0.58333, 0, 0], + "305": [0, 0.43056, 0, 0], + "567": [0.19444, 0.43056, 0, 0], + "710": [0, 0.69444, 0, 0], + "711": [0, 0.62847, 0, 0], + "713": [0, 0.56778, 0, 0], + "714": [0, 0.69444, 0, 0], + "715": [0, 0.69444, 0, 0], + "728": [0, 0.69444, 0, 0], + "729": [0, 0.66786, 0, 0], + "730": [0, 0.69444, 0, 0], + "732": [0, 0.66786, 0, 0], + "768": [0, 0.69444, 0, 0], + "769": [0, 0.69444, 0, 0], + "770": [0, 0.69444, 0, 0], + "771": [0, 0.66786, 0, 0], + "772": [0, 0.56778, 0, 0], + "774": [0, 0.69444, 0, 0], + "775": [0, 0.66786, 0, 0], + "776": [0, 0.66786, 0, 0], + "778": [0, 0.69444, 0, 0], + "779": [0, 0.69444, 0, 0], + "780": [0, 0.62847, 0, 0], + "824": [0.19444, 0.69444, 0, 0], + "915": [0, 0.68333, 0, 0], + "916": [0, 0.68333, 0, 0], + "920": [0, 0.68333, 0, 0], + "923": [0, 0.68333, 0, 0], + "926": [0, 0.68333, 0, 0], + "928": [0, 0.68333, 0, 0], + "931": [0, 0.68333, 0, 0], + "933": [0, 0.68333, 0, 0], + "934": [0, 0.68333, 0, 0], + "936": [0, 0.68333, 0, 0], + "937": [0, 0.68333, 0, 0], + "8211": [0, 0.43056, 0.02778, 0], + "8212": [0, 0.43056, 0.02778, 0], + "8216": [0, 0.69444, 0, 0], + "8217": [0, 0.69444, 0, 0], + "8220": [0, 0.69444, 0, 0], + "8221": [0, 0.69444, 0, 0], + "8224": [0.19444, 0.69444, 0, 0], + "8225": [0.19444, 0.69444, 0, 0], + "8230": [0, 0.12, 0, 0], + "8242": [0, 0.55556, 0, 0], + "8407": [0, 0.71444, 0.15382, 0], + "8463": [0, 0.68889, 0, 0], + "8465": [0, 0.69444, 0, 0], + "8467": [0, 0.69444, 0, 0.11111], + "8472": [0.19444, 0.43056, 0, 0.11111], + "8476": [0, 0.69444, 0, 0], + "8501": [0, 0.69444, 0, 0], + "8592": [-0.13313, 0.36687, 0, 0], + "8593": [0.19444, 0.69444, 0, 0], + "8594": [-0.13313, 0.36687, 0, 0], + "8595": [0.19444, 0.69444, 0, 0], + "8596": [-0.13313, 0.36687, 0, 0], + "8597": [0.25, 0.75, 0, 0], + "8598": [0.19444, 0.69444, 0, 0], + "8599": [0.19444, 0.69444, 0, 0], + "8600": [0.19444, 0.69444, 0, 0], + "8601": [0.19444, 0.69444, 0, 0], + "8614": [0.011, 0.511, 0, 0], + "8617": [0.011, 0.511, 0, 0], + "8618": [0.011, 0.511, 0, 0], + "8636": [-0.13313, 0.36687, 0, 0], + "8637": [-0.13313, 0.36687, 0, 0], + "8640": [-0.13313, 0.36687, 0, 0], + "8641": [-0.13313, 0.36687, 0, 0], + "8652": [0.011, 0.671, 0, 0], + "8656": [-0.13313, 0.36687, 0, 0], + "8657": [0.19444, 0.69444, 0, 0], + "8658": [-0.13313, 0.36687, 0, 0], + "8659": [0.19444, 0.69444, 0, 0], + "8660": [-0.13313, 0.36687, 0, 0], + "8661": [0.25, 0.75, 0, 0], + "8704": [0, 0.69444, 0, 0], + "8706": [0, 0.69444, 0.05556, 0.08334], + "8707": [0, 0.69444, 0, 0], + "8709": [0.05556, 0.75, 0, 0], + "8711": [0, 0.68333, 0, 0], + "8712": [0.0391, 0.5391, 0, 0], + "8715": [0.0391, 0.5391, 0, 0], + "8722": [0.08333, 0.58333, 0, 0], + "8723": [0.08333, 0.58333, 0, 0], + "8725": [0.25, 0.75, 0, 0], + "8726": [0.25, 0.75, 0, 0], + "8727": [-0.03472, 0.46528, 0, 0], + "8728": [-0.05555, 0.44445, 0, 0], + "8729": [-0.05555, 0.44445, 0, 0], + "8730": [0.2, 0.8, 0, 0], + "8733": [0, 0.43056, 0, 0], + "8734": [0, 0.43056, 0, 0], + "8736": [0, 0.69224, 0, 0], + "8739": [0.25, 0.75, 0, 0], + "8741": [0.25, 0.75, 0, 0], + "8743": [0, 0.55556, 0, 0], + "8744": [0, 0.55556, 0, 0], + "8745": [0, 0.55556, 0, 0], + "8746": [0, 0.55556, 0, 0], + "8747": [0.19444, 0.69444, 0.11111, 0], + "8764": [-0.13313, 0.36687, 0, 0], + "8768": [0.19444, 0.69444, 0, 0], + "8771": [-0.03625, 0.46375, 0, 0], + "8773": [-0.022, 0.589, 0, 0], + "8776": [-0.01688, 0.48312, 0, 0], + "8781": [-0.03625, 0.46375, 0, 0], + "8784": [-0.133, 0.67, 0, 0], + "8800": [0.215, 0.716, 0, 0], + "8801": [-0.03625, 0.46375, 0, 0], + "8804": [0.13597, 0.63597, 0, 0], + "8805": [0.13597, 0.63597, 0, 0], + "8810": [0.0391, 0.5391, 0, 0], + "8811": [0.0391, 0.5391, 0, 0], + "8826": [0.0391, 0.5391, 0, 0], + "8827": [0.0391, 0.5391, 0, 0], + "8834": [0.0391, 0.5391, 0, 0], + "8835": [0.0391, 0.5391, 0, 0], + "8838": [0.13597, 0.63597, 0, 0], + "8839": [0.13597, 0.63597, 0, 0], + "8846": [0, 0.55556, 0, 0], + "8849": [0.13597, 0.63597, 0, 0], + "8850": [0.13597, 0.63597, 0, 0], + "8851": [0, 0.55556, 0, 0], + "8852": [0, 0.55556, 0, 0], + "8853": [0.08333, 0.58333, 0, 0], + "8854": [0.08333, 0.58333, 0, 0], + "8855": [0.08333, 0.58333, 0, 0], + "8856": [0.08333, 0.58333, 0, 0], + "8857": [0.08333, 0.58333, 0, 0], + "8866": [0, 0.69444, 0, 0], + "8867": [0, 0.69444, 0, 0], + "8868": [0, 0.69444, 0, 0], + "8869": [0, 0.69444, 0, 0], + "8872": [0.249, 0.75, 0, 0], + "8900": [-0.05555, 0.44445, 0, 0], + "8901": [-0.05555, 0.44445, 0, 0], + "8902": [-0.03472, 0.46528, 0, 0], + "8904": [0.005, 0.505, 0, 0], + "8942": [0.03, 0.9, 0, 0], + "8943": [-0.19, 0.31, 0, 0], + "8945": [-0.1, 0.82, 0, 0], + "8968": [0.25, 0.75, 0, 0], + "8969": [0.25, 0.75, 0, 0], + "8970": [0.25, 0.75, 0, 0], + "8971": [0.25, 0.75, 0, 0], + "8994": [-0.14236, 0.35764, 0, 0], + "8995": [-0.14236, 0.35764, 0, 0], + "9136": [0.244, 0.744, 0, 0], + "9137": [0.244, 0.744, 0, 0], + "9651": [0.19444, 0.69444, 0, 0], + "9657": [-0.03472, 0.46528, 0, 0], + "9661": [0.19444, 0.69444, 0, 0], + "9667": [-0.03472, 0.46528, 0, 0], + "9711": [0.19444, 0.69444, 0, 0], + "9824": [0.12963, 0.69444, 0, 0], + "9825": [0.12963, 0.69444, 0, 0], + "9826": [0.12963, 0.69444, 0, 0], + "9827": [0.12963, 0.69444, 0, 0], + "9837": [0, 0.75, 0, 0], + "9838": [0.19444, 0.69444, 0, 0], + "9839": [0.19444, 0.69444, 0, 0], + "10216": [0.25, 0.75, 0, 0], + "10217": [0.25, 0.75, 0, 0], + "10222": [0.244, 0.744, 0, 0], + "10223": [0.244, 0.744, 0, 0], + "10229": [0.011, 0.511, 0, 0], + "10230": [0.011, 0.511, 0, 0], + "10231": [0.011, 0.511, 0, 0], + "10232": [0.024, 0.525, 0, 0], + "10233": [0.024, 0.525, 0, 0], + "10234": [0.024, 0.525, 0, 0], + "10236": [0.011, 0.511, 0, 0], + "10815": [0, 0.68333, 0, 0], + "10927": [0.13597, 0.63597, 0, 0], + "10928": [0.13597, 0.63597, 0, 0] + }, + "Math-BoldItalic": { + "47": [0.19444, 0.69444, 0, 0], + "65": [0, 0.68611, 0, 0], + "66": [0, 0.68611, 0.04835, 0], + "67": [0, 0.68611, 0.06979, 0], + "68": [0, 0.68611, 0.03194, 0], + "69": [0, 0.68611, 0.05451, 0], + "70": [0, 0.68611, 0.15972, 0], + "71": [0, 0.68611, 0, 0], + "72": [0, 0.68611, 0.08229, 0], + "73": [0, 0.68611, 0.07778, 0], + "74": [0, 0.68611, 0.10069, 0], + "75": [0, 0.68611, 0.06979, 0], + "76": [0, 0.68611, 0, 0], + "77": [0, 0.68611, 0.11424, 0], + "78": [0, 0.68611, 0.11424, 0], + "79": [0, 0.68611, 0.03194, 0], + "80": [0, 0.68611, 0.15972, 0], + "81": [0.19444, 0.68611, 0, 0], + "82": [0, 0.68611, 0.00421, 0], + "83": [0, 0.68611, 0.05382, 0], + "84": [0, 0.68611, 0.15972, 0], + "85": [0, 0.68611, 0.11424, 0], + "86": [0, 0.68611, 0.25555, 0], + "87": [0, 0.68611, 0.15972, 0], + "88": [0, 0.68611, 0.07778, 0], + "89": [0, 0.68611, 0.25555, 0], + "90": [0, 0.68611, 0.06979, 0], + "97": [0, 0.44444, 0, 0], + "98": [0, 0.69444, 0, 0], + "99": [0, 0.44444, 0, 0], + "100": [0, 0.69444, 0, 0], + "101": [0, 0.44444, 0, 0], + "102": [0.19444, 0.69444, 0.11042, 0], + "103": [0.19444, 0.44444, 0.03704, 0], + "104": [0, 0.69444, 0, 0], + "105": [0, 0.69326, 0, 0], + "106": [0.19444, 0.69326, 0.0622, 0], + "107": [0, 0.69444, 0.01852, 0], + "108": [0, 0.69444, 0.0088, 0], + "109": [0, 0.44444, 0, 0], + "110": [0, 0.44444, 0, 0], + "111": [0, 0.44444, 0, 0], + "112": [0.19444, 0.44444, 0, 0], + "113": [0.19444, 0.44444, 0.03704, 0], + "114": [0, 0.44444, 0.03194, 0], + "115": [0, 0.44444, 0, 0], + "116": [0, 0.63492, 0, 0], + "117": [0, 0.44444, 0, 0], + "118": [0, 0.44444, 0.03704, 0], + "119": [0, 0.44444, 0.02778, 0], + "120": [0, 0.44444, 0, 0], + "121": [0.19444, 0.44444, 0.03704, 0], + "122": [0, 0.44444, 0.04213, 0], + "915": [0, 0.68611, 0.15972, 0], + "916": [0, 0.68611, 0, 0], + "920": [0, 0.68611, 0.03194, 0], + "923": [0, 0.68611, 0, 0], + "926": [0, 0.68611, 0.07458, 0], + "928": [0, 0.68611, 0.08229, 0], + "931": [0, 0.68611, 0.05451, 0], + "933": [0, 0.68611, 0.15972, 0], + "934": [0, 0.68611, 0, 0], + "936": [0, 0.68611, 0.11653, 0], + "937": [0, 0.68611, 0.04835, 0], + "945": [0, 0.44444, 0, 0], + "946": [0.19444, 0.69444, 0.03403, 0], + "947": [0.19444, 0.44444, 0.06389, 0], + "948": [0, 0.69444, 0.03819, 0], + "949": [0, 0.44444, 0, 0], + "950": [0.19444, 0.69444, 0.06215, 0], + "951": [0.19444, 0.44444, 0.03704, 0], + "952": [0, 0.69444, 0.03194, 0], + "953": [0, 0.44444, 0, 0], + "954": [0, 0.44444, 0, 0], + "955": [0, 0.69444, 0, 0], + "956": [0.19444, 0.44444, 0, 0], + "957": [0, 0.44444, 0.06898, 0], + "958": [0.19444, 0.69444, 0.03021, 0], + "959": [0, 0.44444, 0, 0], + "960": [0, 0.44444, 0.03704, 0], + "961": [0.19444, 0.44444, 0, 0], + "962": [0.09722, 0.44444, 0.07917, 0], + "963": [0, 0.44444, 0.03704, 0], + "964": [0, 0.44444, 0.13472, 0], + "965": [0, 0.44444, 0.03704, 0], + "966": [0.19444, 0.44444, 0, 0], + "967": [0.19444, 0.44444, 0, 0], + "968": [0.19444, 0.69444, 0.03704, 0], + "969": [0, 0.44444, 0.03704, 0], + "977": [0, 0.69444, 0, 0], + "981": [0.19444, 0.69444, 0, 0], + "982": [0, 0.44444, 0.03194, 0], + "1009": [0.19444, 0.44444, 0, 0], + "1013": [0, 0.44444, 0, 0] + }, + "Math-Italic": { + "47": [0.19444, 0.69444, 0, 0], + "65": [0, 0.68333, 0, 0.13889], + "66": [0, 0.68333, 0.05017, 0.08334], + "67": [0, 0.68333, 0.07153, 0.08334], + "68": [0, 0.68333, 0.02778, 0.05556], + "69": [0, 0.68333, 0.05764, 0.08334], + "70": [0, 0.68333, 0.13889, 0.08334], + "71": [0, 0.68333, 0, 0.08334], + "72": [0, 0.68333, 0.08125, 0.05556], + "73": [0, 0.68333, 0.07847, 0.11111], + "74": [0, 0.68333, 0.09618, 0.16667], + "75": [0, 0.68333, 0.07153, 0.05556], + "76": [0, 0.68333, 0, 0.02778], + "77": [0, 0.68333, 0.10903, 0.08334], + "78": [0, 0.68333, 0.10903, 0.08334], + "79": [0, 0.68333, 0.02778, 0.08334], + "80": [0, 0.68333, 0.13889, 0.08334], + "81": [0.19444, 0.68333, 0, 0.08334], + "82": [0, 0.68333, 0.00773, 0.08334], + "83": [0, 0.68333, 0.05764, 0.08334], + "84": [0, 0.68333, 0.13889, 0.08334], + "85": [0, 0.68333, 0.10903, 0.02778], + "86": [0, 0.68333, 0.22222, 0], + "87": [0, 0.68333, 0.13889, 0], + "88": [0, 0.68333, 0.07847, 0.08334], + "89": [0, 0.68333, 0.22222, 0], + "90": [0, 0.68333, 0.07153, 0.08334], + "97": [0, 0.43056, 0, 0], + "98": [0, 0.69444, 0, 0], + "99": [0, 0.43056, 0, 0.05556], + "100": [0, 0.69444, 0, 0.16667], + "101": [0, 0.43056, 0, 0.05556], + "102": [0.19444, 0.69444, 0.10764, 0.16667], + "103": [0.19444, 0.43056, 0.03588, 0.02778], + "104": [0, 0.69444, 0, 0], + "105": [0, 0.65952, 0, 0], + "106": [0.19444, 0.65952, 0.05724, 0], + "107": [0, 0.69444, 0.03148, 0], + "108": [0, 0.69444, 0.01968, 0.08334], + "109": [0, 0.43056, 0, 0], + "110": [0, 0.43056, 0, 0], + "111": [0, 0.43056, 0, 0.05556], + "112": [0.19444, 0.43056, 0, 0.08334], + "113": [0.19444, 0.43056, 0.03588, 0.08334], + "114": [0, 0.43056, 0.02778, 0.05556], + "115": [0, 0.43056, 0, 0.05556], + "116": [0, 0.61508, 0, 0.08334], + "117": [0, 0.43056, 0, 0.02778], + "118": [0, 0.43056, 0.03588, 0.02778], + "119": [0, 0.43056, 0.02691, 0.08334], + "120": [0, 0.43056, 0, 0.02778], + "121": [0.19444, 0.43056, 0.03588, 0.05556], + "122": [0, 0.43056, 0.04398, 0.05556], + "915": [0, 0.68333, 0.13889, 0.08334], + "916": [0, 0.68333, 0, 0.16667], + "920": [0, 0.68333, 0.02778, 0.08334], + "923": [0, 0.68333, 0, 0.16667], + "926": [0, 0.68333, 0.07569, 0.08334], + "928": [0, 0.68333, 0.08125, 0.05556], + "931": [0, 0.68333, 0.05764, 0.08334], + "933": [0, 0.68333, 0.13889, 0.05556], + "934": [0, 0.68333, 0, 0.08334], + "936": [0, 0.68333, 0.11, 0.05556], + "937": [0, 0.68333, 0.05017, 0.08334], + "945": [0, 0.43056, 0.0037, 0.02778], + "946": [0.19444, 0.69444, 0.05278, 0.08334], + "947": [0.19444, 0.43056, 0.05556, 0], + "948": [0, 0.69444, 0.03785, 0.05556], + "949": [0, 0.43056, 0, 0.08334], + "950": [0.19444, 0.69444, 0.07378, 0.08334], + "951": [0.19444, 0.43056, 0.03588, 0.05556], + "952": [0, 0.69444, 0.02778, 0.08334], + "953": [0, 0.43056, 0, 0.05556], + "954": [0, 0.43056, 0, 0], + "955": [0, 0.69444, 0, 0], + "956": [0.19444, 0.43056, 0, 0.02778], + "957": [0, 0.43056, 0.06366, 0.02778], + "958": [0.19444, 0.69444, 0.04601, 0.11111], + "959": [0, 0.43056, 0, 0.05556], + "960": [0, 0.43056, 0.03588, 0], + "961": [0.19444, 0.43056, 0, 0.08334], + "962": [0.09722, 0.43056, 0.07986, 0.08334], + "963": [0, 0.43056, 0.03588, 0], + "964": [0, 0.43056, 0.1132, 0.02778], + "965": [0, 0.43056, 0.03588, 0.02778], + "966": [0.19444, 0.43056, 0, 0.08334], + "967": [0.19444, 0.43056, 0, 0.05556], + "968": [0.19444, 0.69444, 0.03588, 0.11111], + "969": [0, 0.43056, 0.03588, 0], + "977": [0, 0.69444, 0, 0.08334], + "981": [0.19444, 0.69444, 0, 0.08334], + "982": [0, 0.43056, 0.02778, 0], + "1009": [0.19444, 0.43056, 0, 0.08334], + "1013": [0, 0.43056, 0, 0.05556] + }, + "Math-Regular": { + "65": [0, 0.68333, 0, 0.13889], + "66": [0, 0.68333, 0.05017, 0.08334], + "67": [0, 0.68333, 0.07153, 0.08334], + "68": [0, 0.68333, 0.02778, 0.05556], + "69": [0, 0.68333, 0.05764, 0.08334], + "70": [0, 0.68333, 0.13889, 0.08334], + "71": [0, 0.68333, 0, 0.08334], + "72": [0, 0.68333, 0.08125, 0.05556], + "73": [0, 0.68333, 0.07847, 0.11111], + "74": [0, 0.68333, 0.09618, 0.16667], + "75": [0, 0.68333, 0.07153, 0.05556], + "76": [0, 0.68333, 0, 0.02778], + "77": [0, 0.68333, 0.10903, 0.08334], + "78": [0, 0.68333, 0.10903, 0.08334], + "79": [0, 0.68333, 0.02778, 0.08334], + "80": [0, 0.68333, 0.13889, 0.08334], + "81": [0.19444, 0.68333, 0, 0.08334], + "82": [0, 0.68333, 0.00773, 0.08334], + "83": [0, 0.68333, 0.05764, 0.08334], + "84": [0, 0.68333, 0.13889, 0.08334], + "85": [0, 0.68333, 0.10903, 0.02778], + "86": [0, 0.68333, 0.22222, 0], + "87": [0, 0.68333, 0.13889, 0], + "88": [0, 0.68333, 0.07847, 0.08334], + "89": [0, 0.68333, 0.22222, 0], + "90": [0, 0.68333, 0.07153, 0.08334], + "97": [0, 0.43056, 0, 0], + "98": [0, 0.69444, 0, 0], + "99": [0, 0.43056, 0, 0.05556], + "100": [0, 0.69444, 0, 0.16667], + "101": [0, 0.43056, 0, 0.05556], + "102": [0.19444, 0.69444, 0.10764, 0.16667], + "103": [0.19444, 0.43056, 0.03588, 0.02778], + "104": [0, 0.69444, 0, 0], + "105": [0, 0.65952, 0, 0], + "106": [0.19444, 0.65952, 0.05724, 0], + "107": [0, 0.69444, 0.03148, 0], + "108": [0, 0.69444, 0.01968, 0.08334], + "109": [0, 0.43056, 0, 0], + "110": [0, 0.43056, 0, 0], + "111": [0, 0.43056, 0, 0.05556], + "112": [0.19444, 0.43056, 0, 0.08334], + "113": [0.19444, 0.43056, 0.03588, 0.08334], + "114": [0, 0.43056, 0.02778, 0.05556], + "115": [0, 0.43056, 0, 0.05556], + "116": [0, 0.61508, 0, 0.08334], + "117": [0, 0.43056, 0, 0.02778], + "118": [0, 0.43056, 0.03588, 0.02778], + "119": [0, 0.43056, 0.02691, 0.08334], + "120": [0, 0.43056, 0, 0.02778], + "121": [0.19444, 0.43056, 0.03588, 0.05556], + "122": [0, 0.43056, 0.04398, 0.05556], + "915": [0, 0.68333, 0.13889, 0.08334], + "916": [0, 0.68333, 0, 0.16667], + "920": [0, 0.68333, 0.02778, 0.08334], + "923": [0, 0.68333, 0, 0.16667], + "926": [0, 0.68333, 0.07569, 0.08334], + "928": [0, 0.68333, 0.08125, 0.05556], + "931": [0, 0.68333, 0.05764, 0.08334], + "933": [0, 0.68333, 0.13889, 0.05556], + "934": [0, 0.68333, 0, 0.08334], + "936": [0, 0.68333, 0.11, 0.05556], + "937": [0, 0.68333, 0.05017, 0.08334], + "945": [0, 0.43056, 0.0037, 0.02778], + "946": [0.19444, 0.69444, 0.05278, 0.08334], + "947": [0.19444, 0.43056, 0.05556, 0], + "948": [0, 0.69444, 0.03785, 0.05556], + "949": [0, 0.43056, 0, 0.08334], + "950": [0.19444, 0.69444, 0.07378, 0.08334], + "951": [0.19444, 0.43056, 0.03588, 0.05556], + "952": [0, 0.69444, 0.02778, 0.08334], + "953": [0, 0.43056, 0, 0.05556], + "954": [0, 0.43056, 0, 0], + "955": [0, 0.69444, 0, 0], + "956": [0.19444, 0.43056, 0, 0.02778], + "957": [0, 0.43056, 0.06366, 0.02778], + "958": [0.19444, 0.69444, 0.04601, 0.11111], + "959": [0, 0.43056, 0, 0.05556], + "960": [0, 0.43056, 0.03588, 0], + "961": [0.19444, 0.43056, 0, 0.08334], + "962": [0.09722, 0.43056, 0.07986, 0.08334], + "963": [0, 0.43056, 0.03588, 0], + "964": [0, 0.43056, 0.1132, 0.02778], + "965": [0, 0.43056, 0.03588, 0.02778], + "966": [0.19444, 0.43056, 0, 0.08334], + "967": [0.19444, 0.43056, 0, 0.05556], + "968": [0.19444, 0.69444, 0.03588, 0.11111], + "969": [0, 0.43056, 0.03588, 0], + "977": [0, 0.69444, 0, 0.08334], + "981": [0.19444, 0.69444, 0, 0.08334], + "982": [0, 0.43056, 0.02778, 0], + "1009": [0.19444, 0.43056, 0, 0.08334], + "1013": [0, 0.43056, 0, 0.05556] + }, + "SansSerif-Regular": { + "33": [0, 0.69444, 0, 0], + "34": [0, 0.69444, 0, 0], + "35": [0.19444, 0.69444, 0, 0], + "36": [0.05556, 0.75, 0, 0], + "37": [0.05556, 0.75, 0, 0], + "38": [0, 0.69444, 0, 0], + "39": [0, 0.69444, 0, 0], + "40": [0.25, 0.75, 0, 0], + "41": [0.25, 0.75, 0, 0], + "42": [0, 0.75, 0, 0], + "43": [0.08333, 0.58333, 0, 0], + "44": [0.125, 0.08333, 0, 0], + "45": [0, 0.44444, 0, 0], + "46": [0, 0.08333, 0, 0], + "47": [0.25, 0.75, 0, 0], + "48": [0, 0.65556, 0, 0], + "49": [0, 0.65556, 0, 0], + "50": [0, 0.65556, 0, 0], + "51": [0, 0.65556, 0, 0], + "52": [0, 0.65556, 0, 0], + "53": [0, 0.65556, 0, 0], + "54": [0, 0.65556, 0, 0], + "55": [0, 0.65556, 0, 0], + "56": [0, 0.65556, 0, 0], + "57": [0, 0.65556, 0, 0], + "58": [0, 0.44444, 0, 0], + "59": [0.125, 0.44444, 0, 0], + "61": [-0.13, 0.37, 0, 0], + "63": [0, 0.69444, 0, 0], + "64": [0, 0.69444, 0, 0], + "65": [0, 0.69444, 0, 0], + "66": [0, 0.69444, 0, 0], + "67": [0, 0.69444, 0, 0], + "68": [0, 0.69444, 0, 0], + "69": [0, 0.69444, 0, 0], + "70": [0, 0.69444, 0, 0], + "71": [0, 0.69444, 0, 0], + "72": [0, 0.69444, 0, 0], + "73": [0, 0.69444, 0, 0], + "74": [0, 0.69444, 0, 0], + "75": [0, 0.69444, 0, 0], + "76": [0, 0.69444, 0, 0], + "77": [0, 0.69444, 0, 0], + "78": [0, 0.69444, 0, 0], + "79": [0, 0.69444, 0, 0], + "80": [0, 0.69444, 0, 0], + "81": [0.125, 0.69444, 0, 0], + "82": [0, 0.69444, 0, 0], + "83": [0, 0.69444, 0, 0], + "84": [0, 0.69444, 0, 0], + "85": [0, 0.69444, 0, 0], + "86": [0, 0.69444, 0.01389, 0], + "87": [0, 0.69444, 0.01389, 0], + "88": [0, 0.69444, 0, 0], + "89": [0, 0.69444, 0.025, 0], + "90": [0, 0.69444, 0, 0], + "91": [0.25, 0.75, 0, 0], + "93": [0.25, 0.75, 0, 0], + "94": [0, 0.69444, 0, 0], + "95": [0.35, 0.09444, 0.02778, 0], + "97": [0, 0.44444, 0, 0], + "98": [0, 0.69444, 0, 0], + "99": [0, 0.44444, 0, 0], + "100": [0, 0.69444, 0, 0], + "101": [0, 0.44444, 0, 0], + "102": [0, 0.69444, 0.06944, 0], + "103": [0.19444, 0.44444, 0.01389, 0], + "104": [0, 0.69444, 0, 0], + "105": [0, 0.67937, 0, 0], + "106": [0.19444, 0.67937, 0, 0], + "107": [0, 0.69444, 0, 0], + "108": [0, 0.69444, 0, 0], + "109": [0, 0.44444, 0, 0], + "110": [0, 0.44444, 0, 0], + "111": [0, 0.44444, 0, 0], + "112": [0.19444, 0.44444, 0, 0], + "113": [0.19444, 0.44444, 0, 0], + "114": [0, 0.44444, 0.01389, 0], + "115": [0, 0.44444, 0, 0], + "116": [0, 0.57143, 0, 0], + "117": [0, 0.44444, 0, 0], + "118": [0, 0.44444, 0.01389, 0], + "119": [0, 0.44444, 0.01389, 0], + "120": [0, 0.44444, 0, 0], + "121": [0.19444, 0.44444, 0.01389, 0], + "122": [0, 0.44444, 0, 0], + "126": [0.35, 0.32659, 0, 0], + "305": [0, 0.44444, 0, 0], + "567": [0.19444, 0.44444, 0, 0], + "768": [0, 0.69444, 0, 0], + "769": [0, 0.69444, 0, 0], + "770": [0, 0.69444, 0, 0], + "771": [0, 0.67659, 0, 0], + "772": [0, 0.60889, 0, 0], + "774": [0, 0.69444, 0, 0], + "775": [0, 0.67937, 0, 0], + "776": [0, 0.67937, 0, 0], + "778": [0, 0.69444, 0, 0], + "779": [0, 0.69444, 0, 0], + "780": [0, 0.63194, 0, 0], + "915": [0, 0.69444, 0, 0], + "916": [0, 0.69444, 0, 0], + "920": [0, 0.69444, 0, 0], + "923": [0, 0.69444, 0, 0], + "926": [0, 0.69444, 0, 0], + "928": [0, 0.69444, 0, 0], + "931": [0, 0.69444, 0, 0], + "933": [0, 0.69444, 0, 0], + "934": [0, 0.69444, 0, 0], + "936": [0, 0.69444, 0, 0], + "937": [0, 0.69444, 0, 0], + "8211": [0, 0.44444, 0.02778, 0], + "8212": [0, 0.44444, 0.02778, 0], + "8216": [0, 0.69444, 0, 0], + "8217": [0, 0.69444, 0, 0], + "8220": [0, 0.69444, 0, 0], + "8221": [0, 0.69444, 0, 0] + }, + "Script-Regular": { + "65": [0, 0.7, 0.22925, 0], + "66": [0, 0.7, 0.04087, 0], + "67": [0, 0.7, 0.1689, 0], + "68": [0, 0.7, 0.09371, 0], + "69": [0, 0.7, 0.18583, 0], + "70": [0, 0.7, 0.13634, 0], + "71": [0, 0.7, 0.17322, 0], + "72": [0, 0.7, 0.29694, 0], + "73": [0, 0.7, 0.19189, 0], + "74": [0.27778, 0.7, 0.19189, 0], + "75": [0, 0.7, 0.31259, 0], + "76": [0, 0.7, 0.19189, 0], + "77": [0, 0.7, 0.15981, 0], + "78": [0, 0.7, 0.3525, 0], + "79": [0, 0.7, 0.08078, 0], + "80": [0, 0.7, 0.08078, 0], + "81": [0, 0.7, 0.03305, 0], + "82": [0, 0.7, 0.06259, 0], + "83": [0, 0.7, 0.19189, 0], + "84": [0, 0.7, 0.29087, 0], + "85": [0, 0.7, 0.25815, 0], + "86": [0, 0.7, 0.27523, 0], + "87": [0, 0.7, 0.27523, 0], + "88": [0, 0.7, 0.26006, 0], + "89": [0, 0.7, 0.2939, 0], + "90": [0, 0.7, 0.24037, 0] + }, + "Size1-Regular": { + "40": [0.35001, 0.85, 0, 0], + "41": [0.35001, 0.85, 0, 0], + "47": [0.35001, 0.85, 0, 0], + "91": [0.35001, 0.85, 0, 0], + "92": [0.35001, 0.85, 0, 0], + "93": [0.35001, 0.85, 0, 0], + "123": [0.35001, 0.85, 0, 0], + "125": [0.35001, 0.85, 0, 0], + "710": [0, 0.72222, 0, 0], + "732": [0, 0.72222, 0, 0], + "770": [0, 0.72222, 0, 0], + "771": [0, 0.72222, 0, 0], + "8214": [-0.00099, 0.601, 0, 0], + "8593": [1e-05, 0.6, 0, 0], + "8595": [1e-05, 0.6, 0, 0], + "8657": [1e-05, 0.6, 0, 0], + "8659": [1e-05, 0.6, 0, 0], + "8719": [0.25001, 0.75, 0, 0], + "8720": [0.25001, 0.75, 0, 0], + "8721": [0.25001, 0.75, 0, 0], + "8730": [0.35001, 0.85, 0, 0], + "8739": [-0.00599, 0.606, 0, 0], + "8741": [-0.00599, 0.606, 0, 0], + "8747": [0.30612, 0.805, 0.19445, 0], + "8748": [0.306, 0.805, 0.19445, 0], + "8749": [0.306, 0.805, 0.19445, 0], + "8750": [0.30612, 0.805, 0.19445, 0], + "8896": [0.25001, 0.75, 0, 0], + "8897": [0.25001, 0.75, 0, 0], + "8898": [0.25001, 0.75, 0, 0], + "8899": [0.25001, 0.75, 0, 0], + "8968": [0.35001, 0.85, 0, 0], + "8969": [0.35001, 0.85, 0, 0], + "8970": [0.35001, 0.85, 0, 0], + "8971": [0.35001, 0.85, 0, 0], + "9168": [-0.00099, 0.601, 0, 0], + "10216": [0.35001, 0.85, 0, 0], + "10217": [0.35001, 0.85, 0, 0], + "10752": [0.25001, 0.75, 0, 0], + "10753": [0.25001, 0.75, 0, 0], + "10754": [0.25001, 0.75, 0, 0], + "10756": [0.25001, 0.75, 0, 0], + "10758": [0.25001, 0.75, 0, 0] + }, + "Size2-Regular": { + "40": [0.65002, 1.15, 0, 0], + "41": [0.65002, 1.15, 0, 0], + "47": [0.65002, 1.15, 0, 0], + "91": [0.65002, 1.15, 0, 0], + "92": [0.65002, 1.15, 0, 0], + "93": [0.65002, 1.15, 0, 0], + "123": [0.65002, 1.15, 0, 0], + "125": [0.65002, 1.15, 0, 0], + "710": [0, 0.75, 0, 0], + "732": [0, 0.75, 0, 0], + "770": [0, 0.75, 0, 0], + "771": [0, 0.75, 0, 0], + "8719": [0.55001, 1.05, 0, 0], + "8720": [0.55001, 1.05, 0, 0], + "8721": [0.55001, 1.05, 0, 0], + "8730": [0.65002, 1.15, 0, 0], + "8747": [0.86225, 1.36, 0.44445, 0], + "8748": [0.862, 1.36, 0.44445, 0], + "8749": [0.862, 1.36, 0.44445, 0], + "8750": [0.86225, 1.36, 0.44445, 0], + "8896": [0.55001, 1.05, 0, 0], + "8897": [0.55001, 1.05, 0, 0], + "8898": [0.55001, 1.05, 0, 0], + "8899": [0.55001, 1.05, 0, 0], + "8968": [0.65002, 1.15, 0, 0], + "8969": [0.65002, 1.15, 0, 0], + "8970": [0.65002, 1.15, 0, 0], + "8971": [0.65002, 1.15, 0, 0], + "10216": [0.65002, 1.15, 0, 0], + "10217": [0.65002, 1.15, 0, 0], + "10752": [0.55001, 1.05, 0, 0], + "10753": [0.55001, 1.05, 0, 0], + "10754": [0.55001, 1.05, 0, 0], + "10756": [0.55001, 1.05, 0, 0], + "10758": [0.55001, 1.05, 0, 0] + }, + "Size3-Regular": { + "40": [0.95003, 1.45, 0, 0], + "41": [0.95003, 1.45, 0, 0], + "47": [0.95003, 1.45, 0, 0], + "91": [0.95003, 1.45, 0, 0], + "92": [0.95003, 1.45, 0, 0], + "93": [0.95003, 1.45, 0, 0], + "123": [0.95003, 1.45, 0, 0], + "125": [0.95003, 1.45, 0, 0], + "710": [0, 0.75, 0, 0], + "732": [0, 0.75, 0, 0], + "770": [0, 0.75, 0, 0], + "771": [0, 0.75, 0, 0], + "8730": [0.95003, 1.45, 0, 0], + "8968": [0.95003, 1.45, 0, 0], + "8969": [0.95003, 1.45, 0, 0], + "8970": [0.95003, 1.45, 0, 0], + "8971": [0.95003, 1.45, 0, 0], + "10216": [0.95003, 1.45, 0, 0], + "10217": [0.95003, 1.45, 0, 0] + }, + "Size4-Regular": { + "40": [1.25003, 1.75, 0, 0], + "41": [1.25003, 1.75, 0, 0], + "47": [1.25003, 1.75, 0, 0], + "91": [1.25003, 1.75, 0, 0], + "92": [1.25003, 1.75, 0, 0], + "93": [1.25003, 1.75, 0, 0], + "123": [1.25003, 1.75, 0, 0], + "125": [1.25003, 1.75, 0, 0], + "710": [0, 0.825, 0, 0], + "732": [0, 0.825, 0, 0], + "770": [0, 0.825, 0, 0], + "771": [0, 0.825, 0, 0], + "8730": [1.25003, 1.75, 0, 0], + "8968": [1.25003, 1.75, 0, 0], + "8969": [1.25003, 1.75, 0, 0], + "8970": [1.25003, 1.75, 0, 0], + "8971": [1.25003, 1.75, 0, 0], + "9115": [0.64502, 1.155, 0, 0], + "9116": [1e-05, 0.6, 0, 0], + "9117": [0.64502, 1.155, 0, 0], + "9118": [0.64502, 1.155, 0, 0], + "9119": [1e-05, 0.6, 0, 0], + "9120": [0.64502, 1.155, 0, 0], + "9121": [0.64502, 1.155, 0, 0], + "9122": [-0.00099, 0.601, 0, 0], + "9123": [0.64502, 1.155, 0, 0], + "9124": [0.64502, 1.155, 0, 0], + "9125": [-0.00099, 0.601, 0, 0], + "9126": [0.64502, 1.155, 0, 0], + "9127": [1e-05, 0.9, 0, 0], + "9128": [0.65002, 1.15, 0, 0], + "9129": [0.90001, 0, 0, 0], + "9130": [0, 0.3, 0, 0], + "9131": [1e-05, 0.9, 0, 0], + "9132": [0.65002, 1.15, 0, 0], + "9133": [0.90001, 0, 0, 0], + "9143": [0.88502, 0.915, 0, 0], + "10216": [1.25003, 1.75, 0, 0], + "10217": [1.25003, 1.75, 0, 0], + "57344": [-0.00499, 0.605, 0, 0], + "57345": [-0.00499, 0.605, 0, 0], + "57680": [0, 0.12, 0, 0], + "57681": [0, 0.12, 0, 0], + "57682": [0, 0.12, 0, 0], + "57683": [0, 0.12, 0, 0] + }, + "Typewriter-Regular": { + "33": [0, 0.61111, 0, 0], + "34": [0, 0.61111, 0, 0], + "35": [0, 0.61111, 0, 0], + "36": [0.08333, 0.69444, 0, 0], + "37": [0.08333, 0.69444, 0, 0], + "38": [0, 0.61111, 0, 0], + "39": [0, 0.61111, 0, 0], + "40": [0.08333, 0.69444, 0, 0], + "41": [0.08333, 0.69444, 0, 0], + "42": [0, 0.52083, 0, 0], + "43": [-0.08056, 0.53055, 0, 0], + "44": [0.13889, 0.125, 0, 0], + "45": [-0.08056, 0.53055, 0, 0], + "46": [0, 0.125, 0, 0], + "47": [0.08333, 0.69444, 0, 0], + "48": [0, 0.61111, 0, 0], + "49": [0, 0.61111, 0, 0], + "50": [0, 0.61111, 0, 0], + "51": [0, 0.61111, 0, 0], + "52": [0, 0.61111, 0, 0], + "53": [0, 0.61111, 0, 0], + "54": [0, 0.61111, 0, 0], + "55": [0, 0.61111, 0, 0], + "56": [0, 0.61111, 0, 0], + "57": [0, 0.61111, 0, 0], + "58": [0, 0.43056, 0, 0], + "59": [0.13889, 0.43056, 0, 0], + "60": [-0.05556, 0.55556, 0, 0], + "61": [-0.19549, 0.41562, 0, 0], + "62": [-0.05556, 0.55556, 0, 0], + "63": [0, 0.61111, 0, 0], + "64": [0, 0.61111, 0, 0], + "65": [0, 0.61111, 0, 0], + "66": [0, 0.61111, 0, 0], + "67": [0, 0.61111, 0, 0], + "68": [0, 0.61111, 0, 0], + "69": [0, 0.61111, 0, 0], + "70": [0, 0.61111, 0, 0], + "71": [0, 0.61111, 0, 0], + "72": [0, 0.61111, 0, 0], + "73": [0, 0.61111, 0, 0], + "74": [0, 0.61111, 0, 0], + "75": [0, 0.61111, 0, 0], + "76": [0, 0.61111, 0, 0], + "77": [0, 0.61111, 0, 0], + "78": [0, 0.61111, 0, 0], + "79": [0, 0.61111, 0, 0], + "80": [0, 0.61111, 0, 0], + "81": [0.13889, 0.61111, 0, 0], + "82": [0, 0.61111, 0, 0], + "83": [0, 0.61111, 0, 0], + "84": [0, 0.61111, 0, 0], + "85": [0, 0.61111, 0, 0], + "86": [0, 0.61111, 0, 0], + "87": [0, 0.61111, 0, 0], + "88": [0, 0.61111, 0, 0], + "89": [0, 0.61111, 0, 0], + "90": [0, 0.61111, 0, 0], + "91": [0.08333, 0.69444, 0, 0], + "92": [0.08333, 0.69444, 0, 0], + "93": [0.08333, 0.69444, 0, 0], + "94": [0, 0.61111, 0, 0], + "95": [0.09514, 0, 0, 0], + "96": [0, 0.61111, 0, 0], + "97": [0, 0.43056, 0, 0], + "98": [0, 0.61111, 0, 0], + "99": [0, 0.43056, 0, 0], + "100": [0, 0.61111, 0, 0], + "101": [0, 0.43056, 0, 0], + "102": [0, 0.61111, 0, 0], + "103": [0.22222, 0.43056, 0, 0], + "104": [0, 0.61111, 0, 0], + "105": [0, 0.61111, 0, 0], + "106": [0.22222, 0.61111, 0, 0], + "107": [0, 0.61111, 0, 0], + "108": [0, 0.61111, 0, 0], + "109": [0, 0.43056, 0, 0], + "110": [0, 0.43056, 0, 0], + "111": [0, 0.43056, 0, 0], + "112": [0.22222, 0.43056, 0, 0], + "113": [0.22222, 0.43056, 0, 0], + "114": [0, 0.43056, 0, 0], + "115": [0, 0.43056, 0, 0], + "116": [0, 0.55358, 0, 0], + "117": [0, 0.43056, 0, 0], + "118": [0, 0.43056, 0, 0], + "119": [0, 0.43056, 0, 0], + "120": [0, 0.43056, 0, 0], + "121": [0.22222, 0.43056, 0, 0], + "122": [0, 0.43056, 0, 0], + "123": [0.08333, 0.69444, 0, 0], + "124": [0.08333, 0.69444, 0, 0], + "125": [0.08333, 0.69444, 0, 0], + "126": [0, 0.61111, 0, 0], + "127": [0, 0.61111, 0, 0], + "305": [0, 0.43056, 0, 0], + "567": [0.22222, 0.43056, 0, 0], + "768": [0, 0.61111, 0, 0], + "769": [0, 0.61111, 0, 0], + "770": [0, 0.61111, 0, 0], + "771": [0, 0.61111, 0, 0], + "772": [0, 0.56555, 0, 0], + "774": [0, 0.61111, 0, 0], + "776": [0, 0.61111, 0, 0], + "778": [0, 0.61111, 0, 0], + "780": [0, 0.56597, 0, 0], + "915": [0, 0.61111, 0, 0], + "916": [0, 0.61111, 0, 0], + "920": [0, 0.61111, 0, 0], + "923": [0, 0.61111, 0, 0], + "926": [0, 0.61111, 0, 0], + "928": [0, 0.61111, 0, 0], + "931": [0, 0.61111, 0, 0], + "933": [0, 0.61111, 0, 0], + "934": [0, 0.61111, 0, 0], + "936": [0, 0.61111, 0, 0], + "937": [0, 0.61111, 0, 0], + "2018": [0, 0.61111, 0, 0], + "2019": [0, 0.61111, 0, 0], + "8242": [0, 0.61111, 0, 0] + } +}; + +},{}],19:[function(require,module,exports){ +var utils = require("./utils"); +var ParseError = require("./ParseError"); +var parseData = require("./parseData"); +var ParseNode = parseData.ParseNode; + +/* This file contains a list of functions that we parse, identified by + * the calls to defineFunction. + * + * The first argument to defineFunction is a single name or a list of names. + * All functions named in such a list will share a single implementation. + * + * Each declared function can have associated properties, which + * include the following: + * + * - numArgs: The number of arguments the function takes. + * If this is the only property, it can be passed as a number + * instead of an element of a properties object. + * - argTypes: (optional) An array corresponding to each argument of the + * function, giving the type of argument that should be parsed. Its + * length should be equal to `numArgs + numOptionalArgs`. Valid + * types: + * - "size": A size-like thing, such as "1em" or "5ex" + * - "color": An html color, like "#abc" or "blue" + * - "original": The same type as the environment that the + * function being parsed is in (e.g. used for the + * bodies of functions like \color where the first + * argument is special and the second argument is + * parsed normally) + * Other possible types (probably shouldn't be used) + * - "text": Text-like (e.g. \text) + * - "math": Normal math + * If undefined, this will be treated as an appropriate length + * array of "original" strings + * - greediness: (optional) The greediness of the function to use ungrouped + * arguments. + * + * E.g. if you have an expression + * \sqrt \frac 1 2 + * since \frac has greediness=2 vs \sqrt's greediness=1, \frac + * will use the two arguments '1' and '2' as its two arguments, + * then that whole function will be used as the argument to + * \sqrt. On the other hand, the expressions + * \frac \frac 1 2 3 + * and + * \frac \sqrt 1 2 + * will fail because \frac and \frac have equal greediness + * and \sqrt has a lower greediness than \frac respectively. To + * make these parse, we would have to change them to: + * \frac {\frac 1 2} 3 + * and + * \frac {\sqrt 1} 2 + * + * The default value is `1` + * - allowedInText: (optional) Whether or not the function is allowed inside + * text mode (default false) + * - numOptionalArgs: (optional) The number of optional arguments the function + * should parse. If the optional arguments aren't found, + * `null` will be passed to the handler in their place. + * (default 0) + * - infix: (optional) Must be true if the function is an infix operator. + * + * The last argument is that implementation, the handler for the function(s). + * It is called to handle these functions and their arguments. + * It receives two arguments: + * - context contains information and references provided by the parser + * - args is an array of arguments obtained from TeX input + * The context contains the following properties: + * - funcName: the text (i.e. name) of the function, including \ + * - parser: the parser object + * - lexer: the lexer object + * - positions: the positions in the overall string of the function + * and the arguments. + * The latter three should only be used to produce error messages. + * + * The function should return an object with the following keys: + * - type: The type of element that this is. This is then used in + * buildHTML/buildMathML to determine which function + * should be called to build this node into a DOM node + * Any other data can be added to the object, which will be passed + * in to the function in buildHTML/buildMathML as `group.value`. + */ + +function defineFunction(names, props, handler) { + if (typeof names === "string") { + names = [names]; + } + if (typeof props === "number") { + props = { numArgs: props }; + } + // Set default values of functions + var data = { + numArgs: props.numArgs, + argTypes: props.argTypes, + greediness: (props.greediness === undefined) ? 1 : props.greediness, + allowedInText: !!props.allowedInText, + numOptionalArgs: props.numOptionalArgs || 0, + infix: !!props.infix, + handler: handler + }; + for (var i = 0; i < names.length; ++i) { + module.exports[names[i]] = data; + } +} + +// Since the corresponding buildHTML/buildMathML function expects a +// list of elements, we normalize for different kinds of arguments +var ordargument = function(arg) { + if (arg.type === "ordgroup") { + return arg.value; + } else { + return [arg]; + } +}; + +// A normal square root +defineFunction("\\sqrt", { + numArgs: 1, + numOptionalArgs: 1 +}, function(context, args) { + var index = args[0]; + var body = args[1]; + return { + type: "sqrt", + body: body, + index: index + }; +}); + +// Non-mathy text, possibly in a font +var textFunctionStyles = { + "\\text": undefined, "\\textrm": "mathrm", "\\textsf": "mathsf", + "\\texttt": "mathtt", "\\textnormal": "mathrm", "\\textbf": "mathbf", + "\\textit": "textit" +}; + +defineFunction([ + "\\text", "\\textrm", "\\textsf", "\\texttt", "\\textnormal", + "\\textbf", "\\textit" +], { + numArgs: 1, + argTypes: ["text"], + greediness: 2, + allowedInText: true +}, function(context, args) { + var body = args[0]; + return { + type: "text", + body: ordargument(body), + style: textFunctionStyles[context.funcName] + }; +}); + +// A two-argument custom color +defineFunction("\\color", { + numArgs: 2, + allowedInText: true, + greediness: 3, + argTypes: ["color", "original"] +}, function(context, args) { + var color = args[0]; + var body = args[1]; + return { + type: "color", + color: color.value, + value: ordargument(body) + }; +}); + +// An overline +defineFunction("\\overline", { + numArgs: 1 +}, function(context, args) { + var body = args[0]; + return { + type: "overline", + body: body + }; +}); + +// An underline +defineFunction("\\underline", { + numArgs: 1 +}, function(context, args) { + var body = args[0]; + return { + type: "underline", + body: body + }; +}); + +// A box of the width and height +defineFunction("\\rule", { + numArgs: 2, + numOptionalArgs: 1, + argTypes: ["size", "size", "size"] +}, function(context, args) { + var shift = args[0]; + var width = args[1]; + var height = args[2]; + return { + type: "rule", + shift: shift && shift.value, + width: width.value, + height: height.value + }; +}); + +// TODO: In TeX, \mkern only accepts mu-units, and \kern does not accept +// mu-units. In current KaTeX we relax this; both commands accept any unit. +defineFunction(["\\kern", "\\mkern"], { + numArgs: 1, + argTypes: ["size"] +}, function(context, args) { + return { + type: "kern", + dimension: args[0].value + }; +}); + +// A KaTeX logo +defineFunction("\\KaTeX", { + numArgs: 0 +}, function(context) { + return { + type: "katex" + }; +}); + +defineFunction("\\phantom", { + numArgs: 1 +}, function(context, args) { + var body = args[0]; + return { + type: "phantom", + value: ordargument(body) + }; +}); + +// Math class commands except \mathop +defineFunction([ + "\\mathord", "\\mathbin", "\\mathrel", "\\mathopen", + "\\mathclose", "\\mathpunct", "\\mathinner" +], { + numArgs: 1 +}, function(context, args) { + var body = args[0]; + return { + type: "mclass", + mclass: "m" + context.funcName.substr(5), + value: ordargument(body) + }; +}); + +// Build a relation by placing one symbol on top of another +defineFunction("\\stackrel", { + numArgs: 2 +}, function(context, args) { + var top = args[0]; + var bottom = args[1]; + + var bottomop = new ParseNode("op", { + type: "op", + limits: true, + alwaysHandleSupSub: true, + symbol: false, + value: ordargument(bottom) + }, bottom.mode); + + var supsub = new ParseNode("supsub", { + base: bottomop, + sup: top, + sub: null + }, top.mode); + + return { + type: "mclass", + mclass: "mrel", + value: [supsub] + }; +}); + +// \mod-type functions +defineFunction("\\bmod", { + numArgs: 0 +}, function(context, args) { + return { + type: "mod", + modType: "bmod", + value: null + }; +}); + +defineFunction(["\\pod", "\\pmod", "\\mod"], { + numArgs: 1 +}, function(context, args) { + var body = args[0]; + return { + type: "mod", + modType: context.funcName.substr(1), + value: ordargument(body) + }; +}); + +// Extra data needed for the delimiter handler down below +var delimiterSizes = { + "\\bigl" : {mclass: "mopen", size: 1}, + "\\Bigl" : {mclass: "mopen", size: 2}, + "\\biggl": {mclass: "mopen", size: 3}, + "\\Biggl": {mclass: "mopen", size: 4}, + "\\bigr" : {mclass: "mclose", size: 1}, + "\\Bigr" : {mclass: "mclose", size: 2}, + "\\biggr": {mclass: "mclose", size: 3}, + "\\Biggr": {mclass: "mclose", size: 4}, + "\\bigm" : {mclass: "mrel", size: 1}, + "\\Bigm" : {mclass: "mrel", size: 2}, + "\\biggm": {mclass: "mrel", size: 3}, + "\\Biggm": {mclass: "mrel", size: 4}, + "\\big" : {mclass: "mord", size: 1}, + "\\Big" : {mclass: "mord", size: 2}, + "\\bigg" : {mclass: "mord", size: 3}, + "\\Bigg" : {mclass: "mord", size: 4} +}; + +var delimiters = [ + "(", ")", "[", "\\lbrack", "]", "\\rbrack", + "\\{", "\\lbrace", "\\}", "\\rbrace", + "\\lfloor", "\\rfloor", "\\lceil", "\\rceil", + "<", ">", "\\langle", "\\rangle", "\\lt", "\\gt", + "\\lvert", "\\rvert", "\\lVert", "\\rVert", + "\\lgroup", "\\rgroup", "\\lmoustache", "\\rmoustache", + "/", "\\backslash", + "|", "\\vert", "\\|", "\\Vert", + "\\uparrow", "\\Uparrow", + "\\downarrow", "\\Downarrow", + "\\updownarrow", "\\Updownarrow", + "." +]; + +var fontAliases = { + "\\Bbb": "\\mathbb", + "\\bold": "\\mathbf", + "\\frak": "\\mathfrak" +}; + +// Single-argument color functions +defineFunction([ + "\\blue", "\\orange", "\\pink", "\\red", + "\\green", "\\gray", "\\purple", + "\\blueA", "\\blueB", "\\blueC", "\\blueD", "\\blueE", + "\\tealA", "\\tealB", "\\tealC", "\\tealD", "\\tealE", + "\\greenA", "\\greenB", "\\greenC", "\\greenD", "\\greenE", + "\\goldA", "\\goldB", "\\goldC", "\\goldD", "\\goldE", + "\\redA", "\\redB", "\\redC", "\\redD", "\\redE", + "\\maroonA", "\\maroonB", "\\maroonC", "\\maroonD", "\\maroonE", + "\\purpleA", "\\purpleB", "\\purpleC", "\\purpleD", "\\purpleE", + "\\mintA", "\\mintB", "\\mintC", + "\\grayA", "\\grayB", "\\grayC", "\\grayD", "\\grayE", + "\\grayF", "\\grayG", "\\grayH", "\\grayI", + "\\kaBlue", "\\kaGreen" +], { + numArgs: 1, + allowedInText: true, + greediness: 3 +}, function(context, args) { + var body = args[0]; + return { + type: "color", + color: "katex-" + context.funcName.slice(1), + value: ordargument(body) + }; +}); + +// There are 2 flags for operators; whether they produce limits in +// displaystyle, and whether they are symbols and should grow in +// displaystyle. These four groups cover the four possible choices. + +// No limits, not symbols +defineFunction([ + "\\arcsin", "\\arccos", "\\arctan", "\\arg", "\\cos", "\\cosh", + "\\cot", "\\coth", "\\csc", "\\deg", "\\dim", "\\exp", "\\hom", + "\\ker", "\\lg", "\\ln", "\\log", "\\sec", "\\sin", "\\sinh", + "\\tan", "\\tanh" +], { + numArgs: 0 +}, function(context) { + return { + type: "op", + limits: false, + symbol: false, + body: context.funcName + }; +}); + +// Limits, not symbols +defineFunction([ + "\\det", "\\gcd", "\\inf", "\\lim", "\\liminf", "\\limsup", "\\max", + "\\min", "\\Pr", "\\sup" +], { + numArgs: 0 +}, function(context) { + return { + type: "op", + limits: true, + symbol: false, + body: context.funcName + }; +}); + +// No limits, symbols +defineFunction([ + "\\int", "\\iint", "\\iiint", "\\oint" +], { + numArgs: 0 +}, function(context) { + return { + type: "op", + limits: false, + symbol: true, + body: context.funcName + }; +}); + +// Limits, symbols +defineFunction([ + "\\coprod", "\\bigvee", "\\bigwedge", "\\biguplus", "\\bigcap", + "\\bigcup", "\\intop", "\\prod", "\\sum", "\\bigotimes", + "\\bigoplus", "\\bigodot", "\\bigsqcup", "\\smallint" +], { + numArgs: 0 +}, function(context) { + return { + type: "op", + limits: true, + symbol: true, + body: context.funcName + }; +}); + +// \mathop class command +defineFunction("\\mathop", { + numArgs: 1 +}, function(context, args) { + var body = args[0]; + return { + type: "op", + limits: false, + symbol: false, + value: ordargument(body) + }; +}); + +// Fractions +defineFunction([ + "\\dfrac", "\\frac", "\\tfrac", + "\\dbinom", "\\binom", "\\tbinom", + "\\\\atopfrac" // can’t be entered directly +], { + numArgs: 2, + greediness: 2 +}, function(context, args) { + var numer = args[0]; + var denom = args[1]; + var hasBarLine; + var leftDelim = null; + var rightDelim = null; + var size = "auto"; + + switch (context.funcName) { + case "\\dfrac": + case "\\frac": + case "\\tfrac": + hasBarLine = true; + break; + case "\\\\atopfrac": + hasBarLine = false; + break; + case "\\dbinom": + case "\\binom": + case "\\tbinom": + hasBarLine = false; + leftDelim = "("; + rightDelim = ")"; + break; + default: + throw new Error("Unrecognized genfrac command"); + } + + switch (context.funcName) { + case "\\dfrac": + case "\\dbinom": + size = "display"; + break; + case "\\tfrac": + case "\\tbinom": + size = "text"; + break; + } + + return { + type: "genfrac", + numer: numer, + denom: denom, + hasBarLine: hasBarLine, + leftDelim: leftDelim, + rightDelim: rightDelim, + size: size + }; +}); + +// Left and right overlap functions +defineFunction(["\\llap", "\\rlap"], { + numArgs: 1, + allowedInText: true +}, function(context, args) { + var body = args[0]; + return { + type: context.funcName.slice(1), + body: body + }; +}); + +// Delimiter functions +var checkDelimiter = function(delim, context) { + if (utils.contains(delimiters, delim.value)) { + return delim; + } else { + throw new ParseError( + "Invalid delimiter: '" + delim.value + "' after '" + + context.funcName + "'", delim); + } +}; + +defineFunction([ + "\\bigl", "\\Bigl", "\\biggl", "\\Biggl", + "\\bigr", "\\Bigr", "\\biggr", "\\Biggr", + "\\bigm", "\\Bigm", "\\biggm", "\\Biggm", + "\\big", "\\Big", "\\bigg", "\\Bigg" +], { + numArgs: 1 +}, function(context, args) { + var delim = checkDelimiter(args[0], context); + + return { + type: "delimsizing", + size: delimiterSizes[context.funcName].size, + mclass: delimiterSizes[context.funcName].mclass, + value: delim.value + }; +}); + +defineFunction([ + "\\left", "\\right" +], { + numArgs: 1 +}, function(context, args) { + var delim = checkDelimiter(args[0], context); + + // \left and \right are caught somewhere in Parser.js, which is + // why this data doesn't match what is in buildHTML. + return { + type: "leftright", + value: delim.value + }; +}); + +defineFunction("\\middle", { + numArgs: 1 +}, function(context, args) { + var delim = checkDelimiter(args[0], context); + if (!context.parser.leftrightDepth) { + throw new ParseError("\\middle without preceding \\left", delim); + } + + return { + type: "middle", + value: delim.value + }; +}); + +// Sizing functions (handled in Parser.js explicitly, hence no handler) +defineFunction([ + "\\tiny", "\\scriptsize", "\\footnotesize", "\\small", + "\\normalsize", "\\large", "\\Large", "\\LARGE", "\\huge", "\\Huge" +], 0, null); + +// Style changing functions (handled in Parser.js explicitly, hence no +// handler) +defineFunction([ + "\\displaystyle", "\\textstyle", "\\scriptstyle", + "\\scriptscriptstyle" +], 0, null); + +defineFunction([ + // styles + "\\mathrm", "\\mathit", "\\mathbf", + + // families + "\\mathbb", "\\mathcal", "\\mathfrak", "\\mathscr", "\\mathsf", + "\\mathtt", + + // aliases + "\\Bbb", "\\bold", "\\frak" +], { + numArgs: 1, + greediness: 2 +}, function(context, args) { + var body = args[0]; + var func = context.funcName; + if (func in fontAliases) { + func = fontAliases[func]; + } + return { + type: "font", + font: func.slice(1), + body: body + }; +}); + +// Accents +defineFunction([ + "\\acute", "\\grave", "\\ddot", "\\tilde", "\\bar", "\\breve", + "\\check", "\\hat", "\\vec", "\\dot" + // We don't support expanding accents yet + // "\\widetilde", "\\widehat" +], { + numArgs: 1 +}, function(context, args) { + var base = args[0]; + return { + type: "accent", + accent: context.funcName, + base: base + }; +}); + +// Infix generalized fractions +defineFunction(["\\over", "\\choose", "\\atop"], { + numArgs: 0, + infix: true +}, function(context) { + var replaceWith; + switch (context.funcName) { + case "\\over": + replaceWith = "\\frac"; + break; + case "\\choose": + replaceWith = "\\binom"; + break; + case "\\atop": + replaceWith = "\\\\atopfrac"; + break; + default: + throw new Error("Unrecognized infix genfrac command"); + } + return { + type: "infix", + replaceWith: replaceWith, + token: context.token + }; +}); + +// Row breaks for aligned data +defineFunction(["\\\\", "\\cr"], { + numArgs: 0, + numOptionalArgs: 1, + argTypes: ["size"] +}, function(context, args) { + var size = args[0]; + return { + type: "cr", + size: size + }; +}); + +// Environment delimiters +defineFunction(["\\begin", "\\end"], { + numArgs: 1, + argTypes: ["text"] +}, function(context, args) { + var nameGroup = args[0]; + if (nameGroup.type !== "ordgroup") { + throw new ParseError("Invalid environment name", nameGroup); + } + var name = ""; + for (var i = 0; i < nameGroup.value.length; ++i) { + name += nameGroup.value[i].value; + } + return { + type: "environment", + name: name, + nameGroup: nameGroup + }; +}); + +},{"./ParseError":6,"./parseData":21,"./utils":25}],20:[function(require,module,exports){ +/** + * These objects store data about MathML nodes. This is the MathML equivalent + * of the types in domTree.js. Since MathML handles its own rendering, and + * since we're mainly using MathML to improve accessibility, we don't manage + * any of the styling state that the plain DOM nodes do. + * + * The `toNode` and `toMarkup` functions work simlarly to how they do in + * domTree.js, creating namespaced DOM nodes and HTML text markup respectively. + */ + +var utils = require("./utils"); + +/** + * This node represents a general purpose MathML node of any type. The + * constructor requires the type of node to create (for example, `"mo"` or + * `"mspace"`, corresponding to `<mo>` and `<mspace>` tags). + */ +function MathNode(type, children) { + this.type = type; + this.attributes = {}; + this.children = children || []; +} + +/** + * Sets an attribute on a MathML node. MathML depends on attributes to convey a + * semantic content, so this is used heavily. + */ +MathNode.prototype.setAttribute = function(name, value) { + this.attributes[name] = value; +}; + +/** + * Converts the math node into a MathML-namespaced DOM element. + */ +MathNode.prototype.toNode = function() { + var node = document.createElementNS( + "http://www.w3.org/1998/Math/MathML", this.type); + + for (var attr in this.attributes) { + if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { + node.setAttribute(attr, this.attributes[attr]); + } + } + + for (var i = 0; i < this.children.length; i++) { + node.appendChild(this.children[i].toNode()); + } + + return node; +}; + +/** + * Converts the math node into an HTML markup string. + */ +MathNode.prototype.toMarkup = function() { + var markup = "<" + this.type; + + // Add the attributes + for (var attr in this.attributes) { + if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { + markup += " " + attr + "=\""; + markup += utils.escape(this.attributes[attr]); + markup += "\""; + } + } + + markup += ">"; + + for (var i = 0; i < this.children.length; i++) { + markup += this.children[i].toMarkup(); + } + + markup += "</" + this.type + ">"; + + return markup; +}; + +/** + * This node represents a piece of text. + */ +function TextNode(text) { + this.text = text; +} + +/** + * Converts the text node into a DOM text node. + */ +TextNode.prototype.toNode = function() { + return document.createTextNode(this.text); +}; + +/** + * Converts the text node into HTML markup (which is just the text itself). + */ +TextNode.prototype.toMarkup = function() { + return utils.escape(this.text); +}; + +module.exports = { + MathNode: MathNode, + TextNode: TextNode +}; + +},{"./utils":25}],21:[function(require,module,exports){ +/** + * The resulting parse tree nodes of the parse tree. + * + * It is possible to provide position information, so that a ParseNode can + * fulfil a role similar to a Token in error reporting. + * For details on the corresponding properties see Token constructor. + * Providing such information can lead to better error reporting. + * + * @param {string} type type of node, like e.g. "ordgroup" + * @param {?object} value type-specific representation of the node + * @param {string} mode parse mode in action for this node, + * "math" or "text" + * @param {Token=} firstToken first token of the input for this node, + * will omit position information if unset + * @param {Token=} lastToken last token of the input for this node, + * will default to firstToken if unset + */ +function ParseNode(type, value, mode, firstToken, lastToken) { + this.type = type; + this.value = value; + this.mode = mode; + if (firstToken && (!lastToken || lastToken.lexer === firstToken.lexer)) { + this.lexer = firstToken.lexer; + this.start = firstToken.start; + this.end = (lastToken || firstToken).end; + } +} + +module.exports = { + ParseNode: ParseNode +}; + + +},{}],22:[function(require,module,exports){ +/** + * Provides a single function for parsing an expression using a Parser + * TODO(emily): Remove this + */ + +var Parser = require("./Parser"); + +/** + * Parses an expression using a Parser, then returns the parsed result. + */ +var parseTree = function(toParse, settings) { + if (!(typeof toParse === 'string' || toParse instanceof String)) { + throw new TypeError('KaTeX can only parse string typed expression'); + } + var parser = new Parser(toParse, settings); + + return parser.parse(); +}; + +module.exports = parseTree; + +},{"./Parser":7}],23:[function(require,module,exports){ +/** + * This file holds a list of all no-argument functions and single-character + * symbols (like 'a' or ';'). + * + * For each of the symbols, there are three properties they can have: + * - font (required): the font to be used for this symbol. Either "main" (the + normal font), or "ams" (the ams fonts). + * - group (required): the ParseNode group type the symbol should have (i.e. + "textord", "mathord", etc). + See https://github.com/Khan/KaTeX/wiki/Examining-TeX#group-types + * - replace: the character that this symbol or function should be + * replaced with (i.e. "\phi" has a replace value of "\u03d5", the phi + * character in the main font). + * + * The outermost map in the table indicates what mode the symbols should be + * accepted in (e.g. "math" or "text"). + */ + +module.exports = { + math: {}, + text: {} +}; + +function defineSymbol(mode, font, group, replace, name) { + module.exports[mode][name] = { + font: font, + group: group, + replace: replace + }; +} + +// Some abbreviations for commonly used strings. +// This helps minify the code, and also spotting typos using jshint. + +// modes: +var math = "math"; +var text = "text"; + +// fonts: +var main = "main"; +var ams = "ams"; + +// groups: +var accent = "accent"; +var bin = "bin"; +var close = "close"; +var inner = "inner"; +var mathord = "mathord"; +var op = "op"; +var open = "open"; +var punct = "punct"; +var rel = "rel"; +var spacing = "spacing"; +var textord = "textord"; + +// Now comes the symbol table + +// Relation Symbols +defineSymbol(math, main, rel, "\u2261", "\\equiv"); +defineSymbol(math, main, rel, "\u227a", "\\prec"); +defineSymbol(math, main, rel, "\u227b", "\\succ"); +defineSymbol(math, main, rel, "\u223c", "\\sim"); +defineSymbol(math, main, rel, "\u22a5", "\\perp"); +defineSymbol(math, main, rel, "\u2aaf", "\\preceq"); +defineSymbol(math, main, rel, "\u2ab0", "\\succeq"); +defineSymbol(math, main, rel, "\u2243", "\\simeq"); +defineSymbol(math, main, rel, "\u2223", "\\mid"); +defineSymbol(math, main, rel, "\u226a", "\\ll"); +defineSymbol(math, main, rel, "\u226b", "\\gg"); +defineSymbol(math, main, rel, "\u224d", "\\asymp"); +defineSymbol(math, main, rel, "\u2225", "\\parallel"); +defineSymbol(math, main, rel, "\u22c8", "\\bowtie"); +defineSymbol(math, main, rel, "\u2323", "\\smile"); +defineSymbol(math, main, rel, "\u2291", "\\sqsubseteq"); +defineSymbol(math, main, rel, "\u2292", "\\sqsupseteq"); +defineSymbol(math, main, rel, "\u2250", "\\doteq"); +defineSymbol(math, main, rel, "\u2322", "\\frown"); +defineSymbol(math, main, rel, "\u220b", "\\ni"); +defineSymbol(math, main, rel, "\u221d", "\\propto"); +defineSymbol(math, main, rel, "\u22a2", "\\vdash"); +defineSymbol(math, main, rel, "\u22a3", "\\dashv"); +defineSymbol(math, main, rel, "\u220b", "\\owns"); + +// Punctuation +defineSymbol(math, main, punct, "\u002e", "\\ldotp"); +defineSymbol(math, main, punct, "\u22c5", "\\cdotp"); + +// Misc Symbols +defineSymbol(math, main, textord, "\u0023", "\\#"); +defineSymbol(text, main, textord, "\u0023", "\\#"); +defineSymbol(math, main, textord, "\u0026", "\\&"); +defineSymbol(text, main, textord, "\u0026", "\\&"); +defineSymbol(math, main, textord, "\u2135", "\\aleph"); +defineSymbol(math, main, textord, "\u2200", "\\forall"); +defineSymbol(math, main, textord, "\u210f", "\\hbar"); +defineSymbol(math, main, textord, "\u2203", "\\exists"); +defineSymbol(math, main, textord, "\u2207", "\\nabla"); +defineSymbol(math, main, textord, "\u266d", "\\flat"); +defineSymbol(math, main, textord, "\u2113", "\\ell"); +defineSymbol(math, main, textord, "\u266e", "\\natural"); +defineSymbol(math, main, textord, "\u2663", "\\clubsuit"); +defineSymbol(math, main, textord, "\u2118", "\\wp"); +defineSymbol(math, main, textord, "\u266f", "\\sharp"); +defineSymbol(math, main, textord, "\u2662", "\\diamondsuit"); +defineSymbol(math, main, textord, "\u211c", "\\Re"); +defineSymbol(math, main, textord, "\u2661", "\\heartsuit"); +defineSymbol(math, main, textord, "\u2111", "\\Im"); +defineSymbol(math, main, textord, "\u2660", "\\spadesuit"); + +// Math and Text +defineSymbol(math, main, textord, "\u2020", "\\dag"); +defineSymbol(math, main, textord, "\u2021", "\\ddag"); + +// Large Delimiters +defineSymbol(math, main, close, "\u23b1", "\\rmoustache"); +defineSymbol(math, main, open, "\u23b0", "\\lmoustache"); +defineSymbol(math, main, close, "\u27ef", "\\rgroup"); +defineSymbol(math, main, open, "\u27ee", "\\lgroup"); + +// Binary Operators +defineSymbol(math, main, bin, "\u2213", "\\mp"); +defineSymbol(math, main, bin, "\u2296", "\\ominus"); +defineSymbol(math, main, bin, "\u228e", "\\uplus"); +defineSymbol(math, main, bin, "\u2293", "\\sqcap"); +defineSymbol(math, main, bin, "\u2217", "\\ast"); +defineSymbol(math, main, bin, "\u2294", "\\sqcup"); +defineSymbol(math, main, bin, "\u25ef", "\\bigcirc"); +defineSymbol(math, main, bin, "\u2219", "\\bullet"); +defineSymbol(math, main, bin, "\u2021", "\\ddagger"); +defineSymbol(math, main, bin, "\u2240", "\\wr"); +defineSymbol(math, main, bin, "\u2a3f", "\\amalg"); + +// Arrow Symbols +defineSymbol(math, main, rel, "\u27f5", "\\longleftarrow"); +defineSymbol(math, main, rel, "\u21d0", "\\Leftarrow"); +defineSymbol(math, main, rel, "\u27f8", "\\Longleftarrow"); +defineSymbol(math, main, rel, "\u27f6", "\\longrightarrow"); +defineSymbol(math, main, rel, "\u21d2", "\\Rightarrow"); +defineSymbol(math, main, rel, "\u27f9", "\\Longrightarrow"); +defineSymbol(math, main, rel, "\u2194", "\\leftrightarrow"); +defineSymbol(math, main, rel, "\u27f7", "\\longleftrightarrow"); +defineSymbol(math, main, rel, "\u21d4", "\\Leftrightarrow"); +defineSymbol(math, main, rel, "\u27fa", "\\Longleftrightarrow"); +defineSymbol(math, main, rel, "\u21a6", "\\mapsto"); +defineSymbol(math, main, rel, "\u27fc", "\\longmapsto"); +defineSymbol(math, main, rel, "\u2197", "\\nearrow"); +defineSymbol(math, main, rel, "\u21a9", "\\hookleftarrow"); +defineSymbol(math, main, rel, "\u21aa", "\\hookrightarrow"); +defineSymbol(math, main, rel, "\u2198", "\\searrow"); +defineSymbol(math, main, rel, "\u21bc", "\\leftharpoonup"); +defineSymbol(math, main, rel, "\u21c0", "\\rightharpoonup"); +defineSymbol(math, main, rel, "\u2199", "\\swarrow"); +defineSymbol(math, main, rel, "\u21bd", "\\leftharpoondown"); +defineSymbol(math, main, rel, "\u21c1", "\\rightharpoondown"); +defineSymbol(math, main, rel, "\u2196", "\\nwarrow"); +defineSymbol(math, main, rel, "\u21cc", "\\rightleftharpoons"); + +// AMS Negated Binary Relations +defineSymbol(math, ams, rel, "\u226e", "\\nless"); +defineSymbol(math, ams, rel, "\ue010", "\\nleqslant"); +defineSymbol(math, ams, rel, "\ue011", "\\nleqq"); +defineSymbol(math, ams, rel, "\u2a87", "\\lneq"); +defineSymbol(math, ams, rel, "\u2268", "\\lneqq"); +defineSymbol(math, ams, rel, "\ue00c", "\\lvertneqq"); +defineSymbol(math, ams, rel, "\u22e6", "\\lnsim"); +defineSymbol(math, ams, rel, "\u2a89", "\\lnapprox"); +defineSymbol(math, ams, rel, "\u2280", "\\nprec"); +defineSymbol(math, ams, rel, "\u22e0", "\\npreceq"); +defineSymbol(math, ams, rel, "\u22e8", "\\precnsim"); +defineSymbol(math, ams, rel, "\u2ab9", "\\precnapprox"); +defineSymbol(math, ams, rel, "\u2241", "\\nsim"); +defineSymbol(math, ams, rel, "\ue006", "\\nshortmid"); +defineSymbol(math, ams, rel, "\u2224", "\\nmid"); +defineSymbol(math, ams, rel, "\u22ac", "\\nvdash"); +defineSymbol(math, ams, rel, "\u22ad", "\\nvDash"); +defineSymbol(math, ams, rel, "\u22ea", "\\ntriangleleft"); +defineSymbol(math, ams, rel, "\u22ec", "\\ntrianglelefteq"); +defineSymbol(math, ams, rel, "\u228a", "\\subsetneq"); +defineSymbol(math, ams, rel, "\ue01a", "\\varsubsetneq"); +defineSymbol(math, ams, rel, "\u2acb", "\\subsetneqq"); +defineSymbol(math, ams, rel, "\ue017", "\\varsubsetneqq"); +defineSymbol(math, ams, rel, "\u226f", "\\ngtr"); +defineSymbol(math, ams, rel, "\ue00f", "\\ngeqslant"); +defineSymbol(math, ams, rel, "\ue00e", "\\ngeqq"); +defineSymbol(math, ams, rel, "\u2a88", "\\gneq"); +defineSymbol(math, ams, rel, "\u2269", "\\gneqq"); +defineSymbol(math, ams, rel, "\ue00d", "\\gvertneqq"); +defineSymbol(math, ams, rel, "\u22e7", "\\gnsim"); +defineSymbol(math, ams, rel, "\u2a8a", "\\gnapprox"); +defineSymbol(math, ams, rel, "\u2281", "\\nsucc"); +defineSymbol(math, ams, rel, "\u22e1", "\\nsucceq"); +defineSymbol(math, ams, rel, "\u22e9", "\\succnsim"); +defineSymbol(math, ams, rel, "\u2aba", "\\succnapprox"); +defineSymbol(math, ams, rel, "\u2246", "\\ncong"); +defineSymbol(math, ams, rel, "\ue007", "\\nshortparallel"); +defineSymbol(math, ams, rel, "\u2226", "\\nparallel"); +defineSymbol(math, ams, rel, "\u22af", "\\nVDash"); +defineSymbol(math, ams, rel, "\u22eb", "\\ntriangleright"); +defineSymbol(math, ams, rel, "\u22ed", "\\ntrianglerighteq"); +defineSymbol(math, ams, rel, "\ue018", "\\nsupseteqq"); +defineSymbol(math, ams, rel, "\u228b", "\\supsetneq"); +defineSymbol(math, ams, rel, "\ue01b", "\\varsupsetneq"); +defineSymbol(math, ams, rel, "\u2acc", "\\supsetneqq"); +defineSymbol(math, ams, rel, "\ue019", "\\varsupsetneqq"); +defineSymbol(math, ams, rel, "\u22ae", "\\nVdash"); +defineSymbol(math, ams, rel, "\u2ab5", "\\precneqq"); +defineSymbol(math, ams, rel, "\u2ab6", "\\succneqq"); +defineSymbol(math, ams, rel, "\ue016", "\\nsubseteqq"); +defineSymbol(math, ams, bin, "\u22b4", "\\unlhd"); +defineSymbol(math, ams, bin, "\u22b5", "\\unrhd"); + +// AMS Negated Arrows +defineSymbol(math, ams, rel, "\u219a", "\\nleftarrow"); +defineSymbol(math, ams, rel, "\u219b", "\\nrightarrow"); +defineSymbol(math, ams, rel, "\u21cd", "\\nLeftarrow"); +defineSymbol(math, ams, rel, "\u21cf", "\\nRightarrow"); +defineSymbol(math, ams, rel, "\u21ae", "\\nleftrightarrow"); +defineSymbol(math, ams, rel, "\u21ce", "\\nLeftrightarrow"); + +// AMS Misc +defineSymbol(math, ams, rel, "\u25b3", "\\vartriangle"); +defineSymbol(math, ams, textord, "\u210f", "\\hslash"); +defineSymbol(math, ams, textord, "\u25bd", "\\triangledown"); +defineSymbol(math, ams, textord, "\u25ca", "\\lozenge"); +defineSymbol(math, ams, textord, "\u24c8", "\\circledS"); +defineSymbol(math, ams, textord, "\u00ae", "\\circledR"); +defineSymbol(math, ams, textord, "\u2221", "\\measuredangle"); +defineSymbol(math, ams, textord, "\u2204", "\\nexists"); +defineSymbol(math, ams, textord, "\u2127", "\\mho"); +defineSymbol(math, ams, textord, "\u2132", "\\Finv"); +defineSymbol(math, ams, textord, "\u2141", "\\Game"); +defineSymbol(math, ams, textord, "\u006b", "\\Bbbk"); +defineSymbol(math, ams, textord, "\u2035", "\\backprime"); +defineSymbol(math, ams, textord, "\u25b2", "\\blacktriangle"); +defineSymbol(math, ams, textord, "\u25bc", "\\blacktriangledown"); +defineSymbol(math, ams, textord, "\u25a0", "\\blacksquare"); +defineSymbol(math, ams, textord, "\u29eb", "\\blacklozenge"); +defineSymbol(math, ams, textord, "\u2605", "\\bigstar"); +defineSymbol(math, ams, textord, "\u2222", "\\sphericalangle"); +defineSymbol(math, ams, textord, "\u2201", "\\complement"); +defineSymbol(math, ams, textord, "\u00f0", "\\eth"); +defineSymbol(math, ams, textord, "\u2571", "\\diagup"); +defineSymbol(math, ams, textord, "\u2572", "\\diagdown"); +defineSymbol(math, ams, textord, "\u25a1", "\\square"); +defineSymbol(math, ams, textord, "\u25a1", "\\Box"); +defineSymbol(math, ams, textord, "\u25ca", "\\Diamond"); +defineSymbol(math, ams, textord, "\u00a5", "\\yen"); +defineSymbol(math, ams, textord, "\u2713", "\\checkmark"); + +// AMS Hebrew +defineSymbol(math, ams, textord, "\u2136", "\\beth"); +defineSymbol(math, ams, textord, "\u2138", "\\daleth"); +defineSymbol(math, ams, textord, "\u2137", "\\gimel"); + +// AMS Greek +defineSymbol(math, ams, textord, "\u03dd", "\\digamma"); +defineSymbol(math, ams, textord, "\u03f0", "\\varkappa"); + +// AMS Delimiters +defineSymbol(math, ams, open, "\u250c", "\\ulcorner"); +defineSymbol(math, ams, close, "\u2510", "\\urcorner"); +defineSymbol(math, ams, open, "\u2514", "\\llcorner"); +defineSymbol(math, ams, close, "\u2518", "\\lrcorner"); + +// AMS Binary Relations +defineSymbol(math, ams, rel, "\u2266", "\\leqq"); +defineSymbol(math, ams, rel, "\u2a7d", "\\leqslant"); +defineSymbol(math, ams, rel, "\u2a95", "\\eqslantless"); +defineSymbol(math, ams, rel, "\u2272", "\\lesssim"); +defineSymbol(math, ams, rel, "\u2a85", "\\lessapprox"); +defineSymbol(math, ams, rel, "\u224a", "\\approxeq"); +defineSymbol(math, ams, bin, "\u22d6", "\\lessdot"); +defineSymbol(math, ams, rel, "\u22d8", "\\lll"); +defineSymbol(math, ams, rel, "\u2276", "\\lessgtr"); +defineSymbol(math, ams, rel, "\u22da", "\\lesseqgtr"); +defineSymbol(math, ams, rel, "\u2a8b", "\\lesseqqgtr"); +defineSymbol(math, ams, rel, "\u2251", "\\doteqdot"); +defineSymbol(math, ams, rel, "\u2253", "\\risingdotseq"); +defineSymbol(math, ams, rel, "\u2252", "\\fallingdotseq"); +defineSymbol(math, ams, rel, "\u223d", "\\backsim"); +defineSymbol(math, ams, rel, "\u22cd", "\\backsimeq"); +defineSymbol(math, ams, rel, "\u2ac5", "\\subseteqq"); +defineSymbol(math, ams, rel, "\u22d0", "\\Subset"); +defineSymbol(math, ams, rel, "\u228f", "\\sqsubset"); +defineSymbol(math, ams, rel, "\u227c", "\\preccurlyeq"); +defineSymbol(math, ams, rel, "\u22de", "\\curlyeqprec"); +defineSymbol(math, ams, rel, "\u227e", "\\precsim"); +defineSymbol(math, ams, rel, "\u2ab7", "\\precapprox"); +defineSymbol(math, ams, rel, "\u22b2", "\\vartriangleleft"); +defineSymbol(math, ams, rel, "\u22b4", "\\trianglelefteq"); +defineSymbol(math, ams, rel, "\u22a8", "\\vDash"); +defineSymbol(math, ams, rel, "\u22aa", "\\Vvdash"); +defineSymbol(math, ams, rel, "\u2323", "\\smallsmile"); +defineSymbol(math, ams, rel, "\u2322", "\\smallfrown"); +defineSymbol(math, ams, rel, "\u224f", "\\bumpeq"); +defineSymbol(math, ams, rel, "\u224e", "\\Bumpeq"); +defineSymbol(math, ams, rel, "\u2267", "\\geqq"); +defineSymbol(math, ams, rel, "\u2a7e", "\\geqslant"); +defineSymbol(math, ams, rel, "\u2a96", "\\eqslantgtr"); +defineSymbol(math, ams, rel, "\u2273", "\\gtrsim"); +defineSymbol(math, ams, rel, "\u2a86", "\\gtrapprox"); +defineSymbol(math, ams, bin, "\u22d7", "\\gtrdot"); +defineSymbol(math, ams, rel, "\u22d9", "\\ggg"); +defineSymbol(math, ams, rel, "\u2277", "\\gtrless"); +defineSymbol(math, ams, rel, "\u22db", "\\gtreqless"); +defineSymbol(math, ams, rel, "\u2a8c", "\\gtreqqless"); +defineSymbol(math, ams, rel, "\u2256", "\\eqcirc"); +defineSymbol(math, ams, rel, "\u2257", "\\circeq"); +defineSymbol(math, ams, rel, "\u225c", "\\triangleq"); +defineSymbol(math, ams, rel, "\u223c", "\\thicksim"); +defineSymbol(math, ams, rel, "\u2248", "\\thickapprox"); +defineSymbol(math, ams, rel, "\u2ac6", "\\supseteqq"); +defineSymbol(math, ams, rel, "\u22d1", "\\Supset"); +defineSymbol(math, ams, rel, "\u2290", "\\sqsupset"); +defineSymbol(math, ams, rel, "\u227d", "\\succcurlyeq"); +defineSymbol(math, ams, rel, "\u22df", "\\curlyeqsucc"); +defineSymbol(math, ams, rel, "\u227f", "\\succsim"); +defineSymbol(math, ams, rel, "\u2ab8", "\\succapprox"); +defineSymbol(math, ams, rel, "\u22b3", "\\vartriangleright"); +defineSymbol(math, ams, rel, "\u22b5", "\\trianglerighteq"); +defineSymbol(math, ams, rel, "\u22a9", "\\Vdash"); +defineSymbol(math, ams, rel, "\u2223", "\\shortmid"); +defineSymbol(math, ams, rel, "\u2225", "\\shortparallel"); +defineSymbol(math, ams, rel, "\u226c", "\\between"); +defineSymbol(math, ams, rel, "\u22d4", "\\pitchfork"); +defineSymbol(math, ams, rel, "\u221d", "\\varpropto"); +defineSymbol(math, ams, rel, "\u25c0", "\\blacktriangleleft"); +defineSymbol(math, ams, rel, "\u2234", "\\therefore"); +defineSymbol(math, ams, rel, "\u220d", "\\backepsilon"); +defineSymbol(math, ams, rel, "\u25b6", "\\blacktriangleright"); +defineSymbol(math, ams, rel, "\u2235", "\\because"); +defineSymbol(math, ams, rel, "\u22d8", "\\llless"); +defineSymbol(math, ams, rel, "\u22d9", "\\gggtr"); +defineSymbol(math, ams, bin, "\u22b2", "\\lhd"); +defineSymbol(math, ams, bin, "\u22b3", "\\rhd"); +defineSymbol(math, ams, rel, "\u2242", "\\eqsim"); +defineSymbol(math, main, rel, "\u22c8", "\\Join"); +defineSymbol(math, ams, rel, "\u2251", "\\Doteq"); + +// AMS Binary Operators +defineSymbol(math, ams, bin, "\u2214", "\\dotplus"); +defineSymbol(math, ams, bin, "\u2216", "\\smallsetminus"); +defineSymbol(math, ams, bin, "\u22d2", "\\Cap"); +defineSymbol(math, ams, bin, "\u22d3", "\\Cup"); +defineSymbol(math, ams, bin, "\u2a5e", "\\doublebarwedge"); +defineSymbol(math, ams, bin, "\u229f", "\\boxminus"); +defineSymbol(math, ams, bin, "\u229e", "\\boxplus"); +defineSymbol(math, ams, bin, "\u22c7", "\\divideontimes"); +defineSymbol(math, ams, bin, "\u22c9", "\\ltimes"); +defineSymbol(math, ams, bin, "\u22ca", "\\rtimes"); +defineSymbol(math, ams, bin, "\u22cb", "\\leftthreetimes"); +defineSymbol(math, ams, bin, "\u22cc", "\\rightthreetimes"); +defineSymbol(math, ams, bin, "\u22cf", "\\curlywedge"); +defineSymbol(math, ams, bin, "\u22ce", "\\curlyvee"); +defineSymbol(math, ams, bin, "\u229d", "\\circleddash"); +defineSymbol(math, ams, bin, "\u229b", "\\circledast"); +defineSymbol(math, ams, bin, "\u22c5", "\\centerdot"); +defineSymbol(math, ams, bin, "\u22ba", "\\intercal"); +defineSymbol(math, ams, bin, "\u22d2", "\\doublecap"); +defineSymbol(math, ams, bin, "\u22d3", "\\doublecup"); +defineSymbol(math, ams, bin, "\u22a0", "\\boxtimes"); + +// AMS Arrows +defineSymbol(math, ams, rel, "\u21e2", "\\dashrightarrow"); +defineSymbol(math, ams, rel, "\u21e0", "\\dashleftarrow"); +defineSymbol(math, ams, rel, "\u21c7", "\\leftleftarrows"); +defineSymbol(math, ams, rel, "\u21c6", "\\leftrightarrows"); +defineSymbol(math, ams, rel, "\u21da", "\\Lleftarrow"); +defineSymbol(math, ams, rel, "\u219e", "\\twoheadleftarrow"); +defineSymbol(math, ams, rel, "\u21a2", "\\leftarrowtail"); +defineSymbol(math, ams, rel, "\u21ab", "\\looparrowleft"); +defineSymbol(math, ams, rel, "\u21cb", "\\leftrightharpoons"); +defineSymbol(math, ams, rel, "\u21b6", "\\curvearrowleft"); +defineSymbol(math, ams, rel, "\u21ba", "\\circlearrowleft"); +defineSymbol(math, ams, rel, "\u21b0", "\\Lsh"); +defineSymbol(math, ams, rel, "\u21c8", "\\upuparrows"); +defineSymbol(math, ams, rel, "\u21bf", "\\upharpoonleft"); +defineSymbol(math, ams, rel, "\u21c3", "\\downharpoonleft"); +defineSymbol(math, ams, rel, "\u22b8", "\\multimap"); +defineSymbol(math, ams, rel, "\u21ad", "\\leftrightsquigarrow"); +defineSymbol(math, ams, rel, "\u21c9", "\\rightrightarrows"); +defineSymbol(math, ams, rel, "\u21c4", "\\rightleftarrows"); +defineSymbol(math, ams, rel, "\u21a0", "\\twoheadrightarrow"); +defineSymbol(math, ams, rel, "\u21a3", "\\rightarrowtail"); +defineSymbol(math, ams, rel, "\u21ac", "\\looparrowright"); +defineSymbol(math, ams, rel, "\u21b7", "\\curvearrowright"); +defineSymbol(math, ams, rel, "\u21bb", "\\circlearrowright"); +defineSymbol(math, ams, rel, "\u21b1", "\\Rsh"); +defineSymbol(math, ams, rel, "\u21ca", "\\downdownarrows"); +defineSymbol(math, ams, rel, "\u21be", "\\upharpoonright"); +defineSymbol(math, ams, rel, "\u21c2", "\\downharpoonright"); +defineSymbol(math, ams, rel, "\u21dd", "\\rightsquigarrow"); +defineSymbol(math, ams, rel, "\u21dd", "\\leadsto"); +defineSymbol(math, ams, rel, "\u21db", "\\Rrightarrow"); +defineSymbol(math, ams, rel, "\u21be", "\\restriction"); + +defineSymbol(math, main, textord, "\u2018", "`"); +defineSymbol(math, main, textord, "$", "\\$"); +defineSymbol(text, main, textord, "$", "\\$"); +defineSymbol(math, main, textord, "%", "\\%"); +defineSymbol(text, main, textord, "%", "\\%"); +defineSymbol(math, main, textord, "_", "\\_"); +defineSymbol(text, main, textord, "_", "\\_"); +defineSymbol(math, main, textord, "\u2220", "\\angle"); +defineSymbol(math, main, textord, "\u221e", "\\infty"); +defineSymbol(math, main, textord, "\u2032", "\\prime"); +defineSymbol(math, main, textord, "\u25b3", "\\triangle"); +defineSymbol(math, main, textord, "\u0393", "\\Gamma"); +defineSymbol(math, main, textord, "\u0394", "\\Delta"); +defineSymbol(math, main, textord, "\u0398", "\\Theta"); +defineSymbol(math, main, textord, "\u039b", "\\Lambda"); +defineSymbol(math, main, textord, "\u039e", "\\Xi"); +defineSymbol(math, main, textord, "\u03a0", "\\Pi"); +defineSymbol(math, main, textord, "\u03a3", "\\Sigma"); +defineSymbol(math, main, textord, "\u03a5", "\\Upsilon"); +defineSymbol(math, main, textord, "\u03a6", "\\Phi"); +defineSymbol(math, main, textord, "\u03a8", "\\Psi"); +defineSymbol(math, main, textord, "\u03a9", "\\Omega"); +defineSymbol(math, main, textord, "\u00ac", "\\neg"); +defineSymbol(math, main, textord, "\u00ac", "\\lnot"); +defineSymbol(math, main, textord, "\u22a4", "\\top"); +defineSymbol(math, main, textord, "\u22a5", "\\bot"); +defineSymbol(math, main, textord, "\u2205", "\\emptyset"); +defineSymbol(math, ams, textord, "\u2205", "\\varnothing"); +defineSymbol(math, main, mathord, "\u03b1", "\\alpha"); +defineSymbol(math, main, mathord, "\u03b2", "\\beta"); +defineSymbol(math, main, mathord, "\u03b3", "\\gamma"); +defineSymbol(math, main, mathord, "\u03b4", "\\delta"); +defineSymbol(math, main, mathord, "\u03f5", "\\epsilon"); +defineSymbol(math, main, mathord, "\u03b6", "\\zeta"); +defineSymbol(math, main, mathord, "\u03b7", "\\eta"); +defineSymbol(math, main, mathord, "\u03b8", "\\theta"); +defineSymbol(math, main, mathord, "\u03b9", "\\iota"); +defineSymbol(math, main, mathord, "\u03ba", "\\kappa"); +defineSymbol(math, main, mathord, "\u03bb", "\\lambda"); +defineSymbol(math, main, mathord, "\u03bc", "\\mu"); +defineSymbol(math, main, mathord, "\u03bd", "\\nu"); +defineSymbol(math, main, mathord, "\u03be", "\\xi"); +defineSymbol(math, main, mathord, "o", "\\omicron"); +defineSymbol(math, main, mathord, "\u03c0", "\\pi"); +defineSymbol(math, main, mathord, "\u03c1", "\\rho"); +defineSymbol(math, main, mathord, "\u03c3", "\\sigma"); +defineSymbol(math, main, mathord, "\u03c4", "\\tau"); +defineSymbol(math, main, mathord, "\u03c5", "\\upsilon"); +defineSymbol(math, main, mathord, "\u03d5", "\\phi"); +defineSymbol(math, main, mathord, "\u03c7", "\\chi"); +defineSymbol(math, main, mathord, "\u03c8", "\\psi"); +defineSymbol(math, main, mathord, "\u03c9", "\\omega"); +defineSymbol(math, main, mathord, "\u03b5", "\\varepsilon"); +defineSymbol(math, main, mathord, "\u03d1", "\\vartheta"); +defineSymbol(math, main, mathord, "\u03d6", "\\varpi"); +defineSymbol(math, main, mathord, "\u03f1", "\\varrho"); +defineSymbol(math, main, mathord, "\u03c2", "\\varsigma"); +defineSymbol(math, main, mathord, "\u03c6", "\\varphi"); +defineSymbol(math, main, bin, "\u2217", "*"); +defineSymbol(math, main, bin, "+", "+"); +defineSymbol(math, main, bin, "\u2212", "-"); +defineSymbol(math, main, bin, "\u22c5", "\\cdot"); +defineSymbol(math, main, bin, "\u2218", "\\circ"); +defineSymbol(math, main, bin, "\u00f7", "\\div"); +defineSymbol(math, main, bin, "\u00b1", "\\pm"); +defineSymbol(math, main, bin, "\u00d7", "\\times"); +defineSymbol(math, main, bin, "\u2229", "\\cap"); +defineSymbol(math, main, bin, "\u222a", "\\cup"); +defineSymbol(math, main, bin, "\u2216", "\\setminus"); +defineSymbol(math, main, bin, "\u2227", "\\land"); +defineSymbol(math, main, bin, "\u2228", "\\lor"); +defineSymbol(math, main, bin, "\u2227", "\\wedge"); +defineSymbol(math, main, bin, "\u2228", "\\vee"); +defineSymbol(math, main, textord, "\u221a", "\\surd"); +defineSymbol(math, main, open, "(", "("); +defineSymbol(math, main, open, "[", "["); +defineSymbol(math, main, open, "\u27e8", "\\langle"); +defineSymbol(math, main, open, "\u2223", "\\lvert"); +defineSymbol(math, main, open, "\u2225", "\\lVert"); +defineSymbol(math, main, close, ")", ")"); +defineSymbol(math, main, close, "]", "]"); +defineSymbol(math, main, close, "?", "?"); +defineSymbol(math, main, close, "!", "!"); +defineSymbol(math, main, close, "\u27e9", "\\rangle"); +defineSymbol(math, main, close, "\u2223", "\\rvert"); +defineSymbol(math, main, close, "\u2225", "\\rVert"); +defineSymbol(math, main, rel, "=", "="); +defineSymbol(math, main, rel, "<", "<"); +defineSymbol(math, main, rel, ">", ">"); +defineSymbol(math, main, rel, ":", ":"); +defineSymbol(math, main, rel, "\u2248", "\\approx"); +defineSymbol(math, main, rel, "\u2245", "\\cong"); +defineSymbol(math, main, rel, "\u2265", "\\ge"); +defineSymbol(math, main, rel, "\u2265", "\\geq"); +defineSymbol(math, main, rel, "\u2190", "\\gets"); +defineSymbol(math, main, rel, ">", "\\gt"); +defineSymbol(math, main, rel, "\u2208", "\\in"); +defineSymbol(math, main, rel, "\u2209", "\\notin"); +defineSymbol(math, main, rel, "\u2282", "\\subset"); +defineSymbol(math, main, rel, "\u2283", "\\supset"); +defineSymbol(math, main, rel, "\u2286", "\\subseteq"); +defineSymbol(math, main, rel, "\u2287", "\\supseteq"); +defineSymbol(math, ams, rel, "\u2288", "\\nsubseteq"); +defineSymbol(math, ams, rel, "\u2289", "\\nsupseteq"); +defineSymbol(math, main, rel, "\u22a8", "\\models"); +defineSymbol(math, main, rel, "\u2190", "\\leftarrow"); +defineSymbol(math, main, rel, "\u2264", "\\le"); +defineSymbol(math, main, rel, "\u2264", "\\leq"); +defineSymbol(math, main, rel, "<", "\\lt"); +defineSymbol(math, main, rel, "\u2260", "\\ne"); +defineSymbol(math, main, rel, "\u2260", "\\neq"); +defineSymbol(math, main, rel, "\u2192", "\\rightarrow"); +defineSymbol(math, main, rel, "\u2192", "\\to"); +defineSymbol(math, ams, rel, "\u2271", "\\ngeq"); +defineSymbol(math, ams, rel, "\u2270", "\\nleq"); +defineSymbol(math, main, spacing, null, "\\!"); +defineSymbol(math, main, spacing, "\u00a0", "\\ "); +defineSymbol(math, main, spacing, "\u00a0", "~"); +defineSymbol(math, main, spacing, null, "\\,"); +defineSymbol(math, main, spacing, null, "\\:"); +defineSymbol(math, main, spacing, null, "\\;"); +defineSymbol(math, main, spacing, null, "\\enspace"); +defineSymbol(math, main, spacing, null, "\\qquad"); +defineSymbol(math, main, spacing, null, "\\quad"); +defineSymbol(math, main, spacing, "\u00a0", "\\space"); +defineSymbol(math, main, punct, ",", ","); +defineSymbol(math, main, punct, ";", ";"); +defineSymbol(math, main, punct, ":", "\\colon"); +defineSymbol(math, ams, bin, "\u22bc", "\\barwedge"); +defineSymbol(math, ams, bin, "\u22bb", "\\veebar"); +defineSymbol(math, main, bin, "\u2299", "\\odot"); +defineSymbol(math, main, bin, "\u2295", "\\oplus"); +defineSymbol(math, main, bin, "\u2297", "\\otimes"); +defineSymbol(math, main, textord, "\u2202", "\\partial"); +defineSymbol(math, main, bin, "\u2298", "\\oslash"); +defineSymbol(math, ams, bin, "\u229a", "\\circledcirc"); +defineSymbol(math, ams, bin, "\u22a1", "\\boxdot"); +defineSymbol(math, main, bin, "\u25b3", "\\bigtriangleup"); +defineSymbol(math, main, bin, "\u25bd", "\\bigtriangledown"); +defineSymbol(math, main, bin, "\u2020", "\\dagger"); +defineSymbol(math, main, bin, "\u22c4", "\\diamond"); +defineSymbol(math, main, bin, "\u22c6", "\\star"); +defineSymbol(math, main, bin, "\u25c3", "\\triangleleft"); +defineSymbol(math, main, bin, "\u25b9", "\\triangleright"); +defineSymbol(math, main, open, "{", "\\{"); +defineSymbol(text, main, textord, "{", "\\{"); +defineSymbol(math, main, close, "}", "\\}"); +defineSymbol(text, main, textord, "}", "\\}"); +defineSymbol(math, main, open, "{", "\\lbrace"); +defineSymbol(math, main, close, "}", "\\rbrace"); +defineSymbol(math, main, open, "[", "\\lbrack"); +defineSymbol(math, main, close, "]", "\\rbrack"); +defineSymbol(math, main, open, "\u230a", "\\lfloor"); +defineSymbol(math, main, close, "\u230b", "\\rfloor"); +defineSymbol(math, main, open, "\u2308", "\\lceil"); +defineSymbol(math, main, close, "\u2309", "\\rceil"); +defineSymbol(math, main, textord, "\\", "\\backslash"); +defineSymbol(math, main, textord, "\u2223", "|"); +defineSymbol(math, main, textord, "\u2223", "\\vert"); +defineSymbol(math, main, textord, "\u2225", "\\|"); +defineSymbol(math, main, textord, "\u2225", "\\Vert"); +defineSymbol(math, main, rel, "\u2191", "\\uparrow"); +defineSymbol(math, main, rel, "\u21d1", "\\Uparrow"); +defineSymbol(math, main, rel, "\u2193", "\\downarrow"); +defineSymbol(math, main, rel, "\u21d3", "\\Downarrow"); +defineSymbol(math, main, rel, "\u2195", "\\updownarrow"); +defineSymbol(math, main, rel, "\u21d5", "\\Updownarrow"); +defineSymbol(math, math, op, "\u2210", "\\coprod"); +defineSymbol(math, math, op, "\u22c1", "\\bigvee"); +defineSymbol(math, math, op, "\u22c0", "\\bigwedge"); +defineSymbol(math, math, op, "\u2a04", "\\biguplus"); +defineSymbol(math, math, op, "\u22c2", "\\bigcap"); +defineSymbol(math, math, op, "\u22c3", "\\bigcup"); +defineSymbol(math, math, op, "\u222b", "\\int"); +defineSymbol(math, math, op, "\u222b", "\\intop"); +defineSymbol(math, math, op, "\u222c", "\\iint"); +defineSymbol(math, math, op, "\u222d", "\\iiint"); +defineSymbol(math, math, op, "\u220f", "\\prod"); +defineSymbol(math, math, op, "\u2211", "\\sum"); +defineSymbol(math, math, op, "\u2a02", "\\bigotimes"); +defineSymbol(math, math, op, "\u2a01", "\\bigoplus"); +defineSymbol(math, math, op, "\u2a00", "\\bigodot"); +defineSymbol(math, math, op, "\u222e", "\\oint"); +defineSymbol(math, math, op, "\u2a06", "\\bigsqcup"); +defineSymbol(math, math, op, "\u222b", "\\smallint"); +defineSymbol(text, main, inner, "\u2026", "\\textellipsis"); +defineSymbol(math, main, inner, "\u2026", "\\mathellipsis"); +defineSymbol(text, main, inner, "\u2026", "\\ldots"); +defineSymbol(math, main, inner, "\u2026", "\\ldots"); +defineSymbol(math, main, inner, "\u22ef", "\\cdots"); +defineSymbol(math, main, inner, "\u22f1", "\\ddots"); +defineSymbol(math, main, textord, "\u22ee", "\\vdots"); +defineSymbol(math, main, accent, "\u00b4", "\\acute"); +defineSymbol(math, main, accent, "\u0060", "\\grave"); +defineSymbol(math, main, accent, "\u00a8", "\\ddot"); +defineSymbol(math, main, accent, "\u007e", "\\tilde"); +defineSymbol(math, main, accent, "\u00af", "\\bar"); +defineSymbol(math, main, accent, "\u02d8", "\\breve"); +defineSymbol(math, main, accent, "\u02c7", "\\check"); +defineSymbol(math, main, accent, "\u005e", "\\hat"); +defineSymbol(math, main, accent, "\u20d7", "\\vec"); +defineSymbol(math, main, accent, "\u02d9", "\\dot"); +defineSymbol(math, main, mathord, "\u0131", "\\imath"); +defineSymbol(math, main, mathord, "\u0237", "\\jmath"); + +defineSymbol(text, main, textord, "\u2013", "--"); +defineSymbol(text, main, textord, "\u2014", "---"); +defineSymbol(text, main, textord, "\u2018", "`"); +defineSymbol(text, main, textord, "\u2019", "'"); +defineSymbol(text, main, textord, "\u201c", "``"); +defineSymbol(text, main, textord, "\u201d", "''"); +defineSymbol(math, main, textord, "\u00b0", "\\degree"); +defineSymbol(text, main, textord, "\u00b0", "\\degree"); +defineSymbol(math, main, mathord, "\u00a3", "\\pounds"); +defineSymbol(math, ams, textord, "\u2720", "\\maltese"); +defineSymbol(text, ams, textord, "\u2720", "\\maltese"); + +defineSymbol(text, main, spacing, "\u00a0", "\\ "); +defineSymbol(text, main, spacing, "\u00a0", " "); +defineSymbol(text, main, spacing, "\u00a0", "~"); + +// There are lots of symbols which are the same, so we add them in afterwards. +var i; +var ch; + +// All of these are textords in math mode +var mathTextSymbols = "0123456789/@.\""; +for (i = 0; i < mathTextSymbols.length; i++) { + ch = mathTextSymbols.charAt(i); + defineSymbol(math, main, textord, ch, ch); +} + +// All of these are textords in text mode +var textSymbols = "0123456789!@*()-=+[]\";:?/.,"; +for (i = 0; i < textSymbols.length; i++) { + ch = textSymbols.charAt(i); + defineSymbol(text, main, textord, ch, ch); +} + +// All of these are textords in text mode, and mathords in math mode +var letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; +for (i = 0; i < letters.length; i++) { + ch = letters.charAt(i); + defineSymbol(math, main, mathord, ch, ch); + defineSymbol(text, main, textord, ch, ch); +} + +// Latin-1 letters +for (i = 0x00C0; i <= 0x00D6; i++) { + ch = String.fromCharCode(i); + defineSymbol(text, main, textord, ch, ch); +} + +for (i = 0x00D8; i <= 0x00F6; i++) { + ch = String.fromCharCode(i); + defineSymbol(text, main, textord, ch, ch); +} + +for (i = 0x00F8; i <= 0x00FF; i++) { + ch = String.fromCharCode(i); + defineSymbol(text, main, textord, ch, ch); +} + +// Cyrillic +for (i = 0x0410; i <= 0x044F; i++) { + ch = String.fromCharCode(i); + defineSymbol(text, main, textord, ch, ch); +} + +// Unicode versions of existing characters +defineSymbol(text, main, textord, "\u2013", "–"); +defineSymbol(text, main, textord, "\u2014", "—"); +defineSymbol(text, main, textord, "\u2018", "‘"); +defineSymbol(text, main, textord, "\u2019", "’"); +defineSymbol(text, main, textord, "\u201c", "“"); +defineSymbol(text, main, textord, "\u201d", "â€"); + +},{}],24:[function(require,module,exports){ +var hangulRegex = /[\uAC00-\uD7AF]/; + +// This regex combines +// - Hiragana: [\u3040-\u309F] +// - Katakana: [\u30A0-\u30FF] +// - CJK ideograms: [\u4E00-\u9FAF] +// - Hangul syllables: [\uAC00-\uD7AF] +// Notably missing are halfwidth Katakana and Romanji glyphs. +var cjkRegex = + /[\u3040-\u309F]|[\u30A0-\u30FF]|[\u4E00-\u9FAF]|[\uAC00-\uD7AF]/; + +module.exports = { + cjkRegex: cjkRegex, + hangulRegex: hangulRegex +}; + +},{}],25:[function(require,module,exports){ +/** + * This file contains a list of utility functions which are useful in other + * files. + */ + +/** + * Provide an `indexOf` function which works in IE8, but defers to native if + * possible. + */ +var nativeIndexOf = Array.prototype.indexOf; +var indexOf = function(list, elem) { + if (list == null) { + return -1; + } + if (nativeIndexOf && list.indexOf === nativeIndexOf) { + return list.indexOf(elem); + } + var i = 0; + var l = list.length; + for (; i < l; i++) { + if (list[i] === elem) { + return i; + } + } + return -1; +}; + +/** + * Return whether an element is contained in a list + */ +var contains = function(list, elem) { + return indexOf(list, elem) !== -1; +}; + +/** + * Provide a default value if a setting is undefined + */ +var deflt = function(setting, defaultIfUndefined) { + return setting === undefined ? defaultIfUndefined : setting; +}; + +// hyphenate and escape adapted from Facebook's React under Apache 2 license + +var uppercase = /([A-Z])/g; +var hyphenate = function(str) { + return str.replace(uppercase, "-$1").toLowerCase(); +}; + +var ESCAPE_LOOKUP = { + "&": "&", + ">": ">", + "<": "<", + "\"": """, + "'": "'" +}; + +var ESCAPE_REGEX = /[&><"']/g; + +function escaper(match) { + return ESCAPE_LOOKUP[match]; +} + +/** + * Escapes text to prevent scripting attacks. + * + * @param {*} text Text value to escape. + * @return {string} An escaped string. + */ +function escape(text) { + return ("" + text).replace(ESCAPE_REGEX, escaper); +} + +/** + * A function to set the text content of a DOM element in all supported + * browsers. Note that we don't define this if there is no document. + */ +var setTextContent; +if (typeof document !== "undefined") { + var testNode = document.createElement("span"); + if ("textContent" in testNode) { + setTextContent = function(node, text) { + node.textContent = text; + }; + } else { + setTextContent = function(node, text) { + node.innerText = text; + }; + } +} + +/** + * A function to clear a node. + */ +function clearNode(node) { + setTextContent(node, ""); +} + +module.exports = { + contains: contains, + deflt: deflt, + escape: escape, + hyphenate: hyphenate, + indexOf: indexOf, + setTextContent: setTextContent, + clearNode: clearNode +}; + +},{}]},{},[1])(1) +}); \ No newline at end of file diff --git a/source/javascripts/main.js b/source/javascripts/main.js new file mode 100644 index 0000000..483f0c9 --- /dev/null +++ b/source/javascripts/main.js @@ -0,0 +1,100 @@ +/* + Spectral by HTML5 UP + html5up.net | @n33co + Free for personal and commercial use under the CCA 3.0 license (html5up.net/license) +*/ + +(function($) { + + skel + .breakpoints({ + xlarge: '(max-width: 1680px)', + large: '(max-width: 1280px)', + medium: '(max-width: 980px)', + small: '(max-width: 736px)', + xsmall: '(max-width: 480px)' + }); + + $(function() { + + var $window = $(window), + $body = $('body'), + $wrapper = $('#page-wrapper'), + $banner = $('#banner'), + $header = $('#header'); + + // Disable animations/transitions until the page has loaded. + $body.addClass('is-loading'); + + $window.on('load', function() { + window.setTimeout(function() { + $body.removeClass('is-loading'); + }, 100); + }); + + // Mobile? + if (skel.vars.mobile) + $body.addClass('is-mobile'); + else + skel + .on('-medium !medium', function() { + $body.removeClass('is-mobile'); + }) + .on('+medium', function() { + $body.addClass('is-mobile'); + }); + + // Fix: Placeholder polyfill. + $('form').placeholder(); + + // Prioritize "important" elements on medium. + skel.on('+medium -medium', function() { + $.prioritize( + '.important\\28 medium\\29', + skel.breakpoint('medium').active + ); + }); + + // Scrolly. + $('.scrolly') + .scrolly({ + speed: 1500, + offset: $header.outerHeight() + }); + + // Menu. + $('#menu') + .append('<a href="#menu" class="close"></a>') + .appendTo($body) + .panel({ + delay: 500, + hideOnClick: true, + hideOnSwipe: true, + resetScroll: true, + resetForms: true, + side: 'right', + target: $body, + visibleClass: 'is-menu-visible' + }); + + // Header. + if (skel.vars.IEVersion < 9) + $header.removeClass('alt'); + + if ($banner.length > 0 + && $header.hasClass('alt')) { + + $window.on('resize', function() { $window.trigger('scroll'); }); + + $banner.scrollex({ + bottom: $header.outerHeight() + 1, + terminate: function() { $header.removeClass('alt'); }, + enter: function() { $header.addClass('alt'); }, + leave: function() { $header.removeClass('alt'); } + }); + + } + + }); + +})(jQuery); diff --git a/source/javascripts/navigation.js b/source/javascripts/navigation.js new file mode 100644 index 0000000..915e25a --- /dev/null +++ b/source/javascripts/navigation.js @@ -0,0 +1,33 @@ +/** + * navigation.js + * + * Handles toggling the navigation menu for small screens. + */ +( function() { + var nav = document.getElementById( 'site-navigation' ), button, menu; + if ( ! nav ) + return; + button = nav.getElementsByTagName( 'h3' )[0]; + menu = nav.getElementsByTagName( 'ul' )[0]; + if ( ! button ) + return; + + // Hide button if menu is missing or empty. + if ( ! menu || ! menu.childNodes.length ) { + button.style.display = 'none'; + return; + } + + button.onclick = function() { + if ( -1 == menu.className.indexOf( 'nav-menu' ) ) + menu.className = 'nav-menu'; + + if ( -1 != button.className.indexOf( 'toggled-on' ) ) { + button.className = button.className.replace( ' toggled-on', '' ); + menu.className = menu.className.replace( ' toggled-on', '' ); + } else { + button.className += ' toggled-on'; + menu.className += ' toggled-on'; + } + }; +} )(); \ No newline at end of file diff --git a/source/javascripts/pseudocode.js b/source/javascripts/pseudocode.js new file mode 100644 index 0000000..f614f96 --- /dev/null +++ b/source/javascripts/pseudocode.js @@ -0,0 +1,4 @@ +(function(e){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=e()}else if(typeof define==="function"&&define.amd){define([],e)}else{var t;if(typeof window!=="undefined"){t=window}else if(typeof global!=="undefined"){t=global}else if(typeof self!=="undefined"){t=self}else{t=this}t.pseudocode=e()}})(function(){var e,t,i;return function h(e,t,i){function a(r,l){if(!t[r]){if(!e[r]){var p=typeof require=="function"&&require;if(!l&&p)return p(r,!0);if(s)return s(r,!0);var n=new Error("Cannot find module '"+r+"'");throw n.code="MODULE_NOT_FOUND",n}var c=t[r]={exports:{}};e[r][0].call(c.exports,function(t){var i=e[r][1][t];return a(i?i:t)},c,c.exports,h,e,t,i)}return t[r].exports}var s=typeof require=="function"&&require;for(var r=0;r<i.length;r++)a(i[r]);return a}({1:[function(e,t,i){var h=e("./src/ParseError");var a=e("./src/buildTree");var s=e("./src/parseTree");var r=e("./src/utils");var l=function(e,t){r.clearNode(t);var i=s(e);var h=a(i).toNode();t.appendChild(h)};if(typeof document!=="undefined"){if(document.compatMode!=="CSS1Compat"){typeof console!=="undefined"&&console.warn("Warning: KaTeX doesn't work in quirks mode. Make sure your "+"website has a suitable doctype.");l=function(){throw new h("KaTeX doesn't work in quirks mode.")}}}var p=function(e){var t=s(e);return a(t).toMarkup()};t.exports={render:l,renderToString:p,ParseError:h}},{"./src/ParseError":4,"./src/buildTree":8,"./src/parseTree":13,"./src/utils":15}],2:[function(e,t,i){var h=e("./ParseError");function a(e){this._input=e}function s(e,t,i){this.text=e;this.data=t;this.position=i}var r=[/^[/|@.""`0-9a-zA-Z]/,/^[*+-]/,/^[=<>:]/,/^[,;]/,/^['\^_{}]/,/^[(\[]/,/^[)\]?!]/,/^~/];var l=[/^[a-zA-Z0-9`!@*()-=+\[\]'";:?\/.,]/,/^[{}]/,/^~/];var p=/^\s*/;var n=/^( +|\\ +)/;var c=/^\\(?:[a-zA-Z]+|.)/;a.prototype._innerLex=function(e,t,i){var a=this._input.slice(e);var r;if(i){r=a.match(p)[0];e+=r.length;a=a.slice(r.length)}else{r=a.match(n);if(r!==null){return new s(" ",null,e+r[0].length)}}if(a.length===0){return new s("EOF",null,e)}var l;if(l=a.match(c)){return new s(l[0],null,e+l[0].length)}else{for(var o=0;o<t.length;o++){var d=t[o];if(l=a.match(d)){return new s(l[0],null,e+l[0].length)}}}throw new h("Unexpected character: '"+a[0]+"'",this,e)};var o=/^(#[a-z0-9]+|[a-z]+)/i;a.prototype._innerLexColor=function(e){var t=this._input.slice(e);var i=t.match(p)[0];e+=i.length;t=t.slice(i.length);var a;if(a=t.match(o)){return new s(a[0],null,e+a[0].length)}else{throw new h("Invalid color",this,e)}};var d=/^(-?)\s*(\d+(?:\.\d*)?|\.\d+)\s*([a-z]{2})/;a.prototype._innerLexSize=function(e){var t=this._input.slice(e);var i=t.match(p)[0];e+=i.length;t=t.slice(i.length);var a;if(a=t.match(d)){var r=a[3];if(r!=="em"&&r!=="ex"){throw new h("Invalid unit: '"+r+"'",this,e)}return new s(a[0],{number:+(a[1]+a[2]),unit:r},e+a[0].length)}throw new h("Invalid size",this,e)};a.prototype._innerLexWhitespace=function(e){var t=this._input.slice(e);var i=t.match(p)[0];e+=i.length;return new s(i,null,e)};a.prototype.lex=function(e,t){if(t==="math"){return this._innerLex(e,r,true)}else if(t==="text"){return this._innerLex(e,l,false)}else if(t==="color"){return this._innerLexColor(e)}else if(t==="size"){return this._innerLexSize(e)}else if(t==="whitespace"){return this._innerLexWhitespace(e)}};t.exports=a},{"./ParseError":4}],3:[function(e,t,i){function h(e,t,i,h,a){this.style=e;this.color=i;this.size=t;if(h===undefined){h=e}this.parentStyle=h;if(a===undefined){a=t}this.parentSize=a}h.prototype.withStyle=function(e){return new h(e,this.size,this.color,this.style,this.size)};h.prototype.withSize=function(e){return new h(this.style,e,this.color,this.style,this.size)};h.prototype.withColor=function(e){return new h(this.style,this.size,e,this.style,this.size)};h.prototype.reset=function(){return new h(this.style,this.size,this.color,this.style,this.size)};var a={"katex-blue":"#6495ed","katex-orange":"#ffa500","katex-pink":"#ff00af","katex-red":"#df0030","katex-green":"#28ae7b","katex-gray":"gray","katex-purple":"#9d38bd"};h.prototype.getColor=function(){return a[this.color]||this.color};t.exports=h},{}],4:[function(e,t,i){function h(e,t,i){var a="KaTeX parse error: "+e;if(t!==undefined&&i!==undefined){a+=" at position "+i+": ";var s=t._input;s=s.slice(0,i)+"̲"+s.slice(i);var r=Math.max(0,i-15);var l=i+15;a+=s.slice(r,l)}var p=new Error(a);p.name="ParseError";p.__proto__=h.prototype;p.position=i;return p}h.prototype.__proto__=Error.prototype;t.exports=h},{}],5:[function(e,t,i){var h=e("./functions");var a=e("./Lexer");var s=e("./symbols");var r=e("./utils");var l=e("./ParseError");function p(e){this.lexer=new a(e)}function n(e,t,i){this.type=e;this.value=t;this.mode=i}function c(e,t){this.result=e;this.position=t}function o(e,t,i,h,a,s){this.result=e;this.isFunction=t;this.allowedInText=i;this.numArgs=h;this.numOptionalArgs=a;this.argTypes=s}p.prototype.expect=function(e,t){if(e.text!==t){throw new l("Expected '"+t+"', got '"+e.text+"'",this.lexer,e.position)}};p.prototype.parse=function(e){var t=this.parseInput(0,"math");return t.result};p.prototype.parseInput=function(e,t){var i=this.parseExpression(e,t,false,null);var h=this.lexer.lex(i.position,t);this.expect(h,"EOF");return i};p.prototype.parseExpression=function(e,t,i,h){var a=[];while(true){var s=this.lexer.lex(e,t);if(h!=null&&s.text===h){break}var r=this.parseAtom(e,t);if(!r){break}if(i&&r.result.type==="infix"){break}a.push(r.result);e=r.position}return new c(this.handleInfixNodes(a,t),e)};p.prototype.handleInfixNodes=function(e,t){var i=-1;var a;var s;for(var r=0;r<e.length;r++){var p=e[r];if(p.type==="infix"){if(i!==-1){throw new l("only one infix operator per group",this.lexer,-1)}i=r;s=p.value.replaceWith;a=h.funcs[s]}}if(i!==-1){var c,o;var d=e.slice(0,i);var g=e.slice(i+1);if(d.length===1&&d[0].type==="ordgroup"){c=d[0]}else{c=new n("ordgroup",d,t)}if(g.length===1&&g[0].type==="ordgroup"){o=g[0]}else{o=new n("ordgroup",g,t)}var u=a.handler(s,c,o);return[new n(u.type,u,t)]}else{return e}};var d=1;p.prototype.handleSupSubscript=function(e,t,i,a){var s=this.parseGroup(e,t);if(!s){throw new l("Expected group after '"+i+"'",this.lexer,e)}else if(s.numArgs>0){var r=h.getGreediness(s.result.result);if(r>d){return this.parseFunction(e,t)}else{throw new l("Got function '"+s.result.result+"' with no arguments "+"as "+a,this.lexer,e)}}else{return s.result}};p.prototype.parseAtom=function(e,t){var i=this.parseImplicitGroup(e,t);if(t==="text"){return i}var h;if(!i){h=e;i=undefined}else{h=i.position}var a;var s;var r;while(true){var p=this.lexer.lex(h,t);if(p.text==="^"){if(a){throw new l("Double superscript",this.lexer,h)}r=this.handleSupSubscript(p.position,t,p.text,"superscript");h=r.position;a=r.result}else if(p.text==="_"){if(s){throw new l("Double subscript",this.lexer,h)}r=this.handleSupSubscript(p.position,t,p.text,"subscript");h=r.position;s=r.result}else if(p.text==="'"){var o=new n("textord","\\prime",t);var d=[o];h=p.position;while((p=this.lexer.lex(h,t)).text==="'"){d.push(o);h=p.position}a=new n("ordgroup",d,t)}else{break}}if(a||s){return new c(new n("supsub",{base:i&&i.result,sup:a,sub:s},t),h)}else{return i}};var g=["\\tiny","\\scriptsize","\\footnotesize","\\small","\\normalsize","\\large","\\Large","\\LARGE","\\huge","\\Huge"];var u=["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"];p.prototype.parseImplicitGroup=function(e,t){var i=this.parseSymbol(e,t);if(!i||!i.result){return this.parseFunction(e,t)}var h=i.result.result;var a;if(h==="\\left"){var s=this.parseFunction(e,t);a=this.parseExpression(s.position,t,false,"}");var p=this.parseSymbol(a.position,t);if(p&&p.result.result==="\\right"){var o=this.parseFunction(a.position,t);return new c(new n("leftright",{body:a.result,left:s.result.value.value,right:o.result.value.value},t),o.position)}else{throw new l("Missing \\right",this.lexer,a.position)}}else if(h==="\\right"){return null}else if(r.contains(g,h)){a=this.parseExpression(i.result.position,t,false,"}");return new c(new n("sizing",{size:"size"+(r.indexOf(g,h)+1),value:a.result},t),a.position)}else if(r.contains(u,h)){a=this.parseExpression(i.result.position,t,true,"}");return new c(new n("styling",{style:h.slice(1,h.length-5),value:a.result},t),a.position)}else{return this.parseFunction(e,t)}};p.prototype.parseFunction=function(e,t){var i=this.parseGroup(e,t);if(i){if(i.isFunction){var a=i.result.result;if(t==="text"&&!i.allowedInText){throw new l("Can't use function '"+a+"' in text mode",this.lexer,i.position)}var s=i.result.position;var r;var p=i.numArgs+i.numOptionalArgs;if(p>0){var o=h.getGreediness(a);var d=[a];var g=[s];for(var u=0;u<p;u++){var w=i.argTypes&&i.argTypes[u];var k;if(u<i.numOptionalArgs){if(w){k=this.parseSpecialGroup(s,w,t,true)}else{k=this.parseOptionalGroup(s,t)}if(!k){d.push(null);g.push(s);continue}}else{if(w){k=this.parseSpecialGroup(s,w,t)}else{k=this.parseGroup(s,t)}if(!k){throw new l("Expected group after '"+i.result.result+"'",this.lexer,s)}}var f;if(k.numArgs>0){var m=h.getGreediness(k.result.result);if(m>o){f=this.parseFunction(s,t)}else{throw new l("Got function '"+k.result.result+"' as "+"argument to function '"+i.result.result+"'",this.lexer,k.result.position-1)}}else{f=k.result}d.push(f.result);g.push(f.position);s=f.position}d.push(g);r=h.funcs[a].handler.apply(this,d)}else{r=h.funcs[a].handler.apply(this,[a])}return new c(new n(r.type,r,t),s)}else{return i.result}}else{return null}};p.prototype.parseSpecialGroup=function(e,t,i,h){if(t==="color"||t==="size"){var a=this.lexer.lex(e,i);if(h&&a.text!=="["){return null}this.expect(a,h?"[":"{");var s=this.lexer.lex(a.position,t);var r;if(t==="color"){r=s.text}else{r=s.data}var l=this.lexer.lex(s.position,i);this.expect(l,h?"]":"}");return new o(new c(new n(t,r,i),l.position),false)}else if(t==="text"){var p=this.lexer.lex(e,"whitespace");e=p.position}if(h){return this.parseOptionalGroup(e,t)}else{return this.parseGroup(e,t)}};p.prototype.parseGroup=function(e,t){var i=this.lexer.lex(e,t);if(i.text==="{"){var h=this.parseExpression(i.position,t,false,"}");var a=this.lexer.lex(h.position,t);this.expect(a,"}");return new o(new c(new n("ordgroup",h.result,t),a.position),false)}else{return this.parseSymbol(e,t)}};p.prototype.parseOptionalGroup=function(e,t){var i=this.lexer.lex(e,t);if(i.text==="["){var h=this.parseExpression(i.position,t,false,"]");var a=this.lexer.lex(h.position,t);this.expect(a,"]");return new o(new c(new n("ordgroup",h.result,t),a.position),false)}else{return null}};p.prototype.parseSymbol=function(e,t){var i=this.lexer.lex(e,t);if(h.funcs[i.text]){var a=h.funcs[i.text];var r=a.argTypes;if(r){r=r.slice();for(var l=0;l<r.length;l++){if(r[l]==="original"){r[l]=t}}}return new o(new c(i.text,i.position),true,a.allowedInText,a.numArgs,a.numOptionalArgs,r)}else if(s[t][i.text]){return new o(new c(new n(s[t][i.text].group,i.text,t),i.position),false)}else{return null}};t.exports=p},{"./Lexer":2,"./ParseError":4,"./functions":12,"./symbols":14,"./utils":15}],6:[function(e,t,i){function h(e,t,i,h){this.id=e;this.size=t;this.cramped=h;this.sizeMultiplier=i}h.prototype.sup=function(){return u[w[this.id]]};h.prototype.sub=function(){return u[k[this.id]]};h.prototype.fracNum=function(){return u[f[this.id]]};h.prototype.fracDen=function(){return u[m[this.id]]};h.prototype.cramp=function(){return u[v[this.id]]};h.prototype.cls=function(){return d[this.size]+(this.cramped?" cramped":" uncramped")};h.prototype.reset=function(){return g[this.size]};var a=0;var s=1;var r=2;var l=3;var p=4;var n=5;var c=6;var o=7;var d=["displaystyle textstyle","textstyle","scriptstyle","scriptscriptstyle"];var g=["reset-textstyle","reset-textstyle","reset-scriptstyle","reset-scriptscriptstyle"];var u=[new h(a,0,1,false),new h(s,0,1,true),new h(r,1,1,false),new h(l,1,1,true),new h(p,2,.7,false),new h(n,2,.7,true),new h(c,3,.5,false),new h(o,3,.5,true)];var w=[p,n,p,n,c,o,c,o];var k=[n,n,n,n,o,o,o,o];var f=[r,l,p,n,c,o,c,o];var m=[l,l,n,n,o,o,o,o];var v=[s,s,l,l,n,n,o,o];t.exports={DISPLAY:u[a],TEXT:u[r],SCRIPT:u[p],SCRIPTSCRIPT:u[c]}},{}],7:[function(e,t,i){var h=e("./domTree");var a=e("./fontMetrics");var s=e("./symbols");var r=function(e,t,i,r,l){if(s[i][e]&&s[i][e].replace){e=s[i][e].replace}var p=a.getCharacterMetrics(e,t);var n;if(p){n=new h.symbolNode(e,p.height,p.depth,p.italic,p.skew,l)}else{typeof console!=="undefined"&&console.warn("No character metrics for '"+e+"' in style '"+t+"'");n=new h.symbolNode(e,0,0,0,0,l)}if(r){n.style.color=r}return n};var l=function(e,t,i,h){return r(e,"Math-Italic",t,i,h.concat(["mathit"]))};var p=function(e,t,i,h){if(s[t][e].font==="main"){return r(e,"Main-Regular",t,i,h)}else{return r(e,"AMS-Regular",t,i,h.concat(["amsrm"]))}};var n=function(e){var t=0;var i=0;var h=0;if(e.children){for(var a=0;a<e.children.length;a++){if(e.children[a].height>t){t=e.children[a].height}if(e.children[a].depth>i){i=e.children[a].depth}if(e.children[a].maxFontSize>h){h=e.children[a].maxFontSize}}}e.height=t;e.depth=i;e.maxFontSize=h};var c=function(e,t,i){var a=new h.span(e,t);n(a);if(i){a.style.color=i}return a};var o=function(e){var t=new h.documentFragment(e);n(t);return t};var d=function(e,t){var i=c([],[new h.symbolNode("​")]);i.style.fontSize=t/e.style.sizeMultiplier+"em";var a=c(["fontsize-ensurer","reset-"+e.size,"size5"],[i]);return a};var g=function(e,t,i,a){var s;var r;var l;if(t==="individualShift"){var p=e;e=[p[0]];s=-p[0].shift-p[0].elem.depth;r=s;for(l=1;l<p.length;l++){var n=-p[l].shift-r-p[l].elem.depth;var o=n-(p[l-1].elem.height+p[l-1].elem.depth);r=r+n;e.push({type:"kern",size:o});e.push(p[l])}}else if(t==="top"){var g=i;for(l=0;l<e.length;l++){if(e[l].type==="kern"){g-=e[l].size}else{g-=e[l].elem.height+e[l].elem.depth}}s=g}else if(t==="bottom"){s=-i}else if(t==="shift"){s=-e[0].elem.depth-i}else if(t==="firstBaseline"){s=-e[0].elem.depth}else{s=0}var u=0;for(l=0;l<e.length;l++){if(e[l].type==="elem"){u=Math.max(u,e[l].elem.maxFontSize)}}var w=d(a,u);var k=[];r=s;for(l=0;l<e.length;l++){if(e[l].type==="kern"){r+=e[l].size}else{var f=e[l].elem;var m=-f.depth-r;r+=f.height+f.depth;var v=c([],[w,f]);v.height-=m;v.depth+=m;v.style.top=m+"em";k.push(v)}}var y=c(["baseline-fix"],[w,new h.symbolNode("​")]);k.push(y);var x=c(["vlist"],k);x.height=Math.max(r,x.height);x.depth=Math.max(-s,x.depth);return x};t.exports={makeSymbol:r,mathit:l,mathrm:p,makeSpan:c,makeFragment:o,makeVList:g}},{"./domTree":10,"./fontMetrics":11,"./symbols":14}],8:[function(e,t,i){var h=e("./Options");var a=e("./ParseError");var s=e("./Style");var r=e("./buildCommon");var l=e("./delimiter");var p=e("./domTree");var n=e("./fontMetrics");var c=e("./utils");var o=r.makeSpan;var d=function(e,t,i){var h=[];for(var a=0;a<e.length;a++){var s=e[a];h.push(y(s,t,i));i=s}return h};var g={mathord:"mord",textord:"mord",bin:"mbin",rel:"mrel",text:"mord",open:"mopen",close:"mclose",inner:"minner",frac:"minner",spacing:"mord",punct:"mpunct",ordgroup:"mord",op:"mop",katex:"mord",overline:"mord",rule:"mord",leftright:"minner",sqrt:"mord",accent:"mord"};var u=function(e){if(e==null){return g.mathord}else if(e.type==="supsub"){return u(e.value.base)}else if(e.type==="llap"||e.type==="rlap"){return u(e.value)}else if(e.type==="color"){return u(e.value.value)}else if(e.type==="sizing"){return u(e.value.value)}else if(e.type==="styling"){return u(e.value.value)}else if(e.type==="delimsizing"){return g[e.value.delimType]}else{return g[e.type]}};var w=function(e,t){if(!e){return false}else if(e.type==="op"){return e.value.limits&&t.style.size===s.DISPLAY.size}else if(e.type==="accent"){return f(e.value.base)}else{return null}};var k=function(e){if(!e){return false}else if(e.type==="ordgroup"){if(e.value.length===1){return k(e.value[0])}else{return e}}else if(e.type==="color"){if(e.value.value.length===1){return k(e.value.value[0])}else{return e}}else{return e}};var f=function(e){var t=k(e);return t.type==="mathord"||t.type==="textord"||t.type==="bin"||t.type==="rel"||t.type==="inner"||t.type==="open"||t.type==="close"||t.type==="punct"};var m={mathord:function(e,t,i){return r.mathit(e.value,e.mode,t.getColor(),["mord"])},textord:function(e,t,i){return r.mathrm(e.value,e.mode,t.getColor(),["mord"])},bin:function(e,t,i){var h="mbin";var a=i;while(a&&a.type=="color"){var s=a.value.value;a=s[s.length-1]}if(!i||c.contains(["mbin","mopen","mrel","mop","mpunct"],u(a))){e.type="textord";h="mord"}return r.mathrm(e.value,e.mode,t.getColor(),[h])},rel:function(e,t,i){return r.mathrm(e.value,e.mode,t.getColor(),["mrel"])},open:function(e,t,i){return r.mathrm(e.value,e.mode,t.getColor(),["mopen"])},close:function(e,t,i){return r.mathrm(e.value,e.mode,t.getColor(),["mclose"])},inner:function(e,t,i){return r.mathrm(e.value,e.mode,t.getColor(),["minner"])},punct:function(e,t,i){return r.mathrm(e.value,e.mode,t.getColor(),["mpunct"])},ordgroup:function(e,t,i){return o(["mord",t.style.cls()],d(e.value,t.reset()))},text:function(e,t,i){return o(["text","mord",t.style.cls()],d(e.value.body,t.reset()))},color:function(e,t,i){var h=d(e.value.value,t.withColor(e.value.color),i);return new r.makeFragment(h)},supsub:function(e,t,i){if(w(e.value.base,t)){return m[e.value.base.type](e,t,i)}var h=y(e.value.base,t.reset());var a,l,c,d;if(e.value.sup){c=y(e.value.sup,t.withStyle(t.style.sup()));a=o([t.style.reset(),t.style.sup().cls()],[c])}if(e.value.sub){d=y(e.value.sub,t.withStyle(t.style.sub()));l=o([t.style.reset(),t.style.sub().cls()],[d])}var g,k;if(f(e.value.base)){g=0;k=0}else{g=h.height-n.metrics.supDrop;k=h.depth+n.metrics.subDrop}var v;if(t.style===s.DISPLAY){v=n.metrics.sup1}else if(t.style.cramped){v=n.metrics.sup3}else{v=n.metrics.sup2}var x=s.TEXT.sizeMultiplier*t.style.sizeMultiplier;var b=.5/n.metrics.ptPerEm/x+"em";var _;if(!e.value.sup){k=Math.max(k,n.metrics.sub1,d.height-.8*n.metrics.xHeight);_=r.makeVList([{type:"elem",elem:l}],"shift",k,t);_.children[0].style.marginRight=b;if(h instanceof p.symbolNode){_.children[0].style.marginLeft=-h.italic+"em"}}else if(!e.value.sub){g=Math.max(g,v,c.depth+.25*n.metrics.xHeight);_=r.makeVList([{type:"elem",elem:a}],"shift",-g,t);_.children[0].style.marginRight=b}else{g=Math.max(g,v,c.depth+.25*n.metrics.xHeight);k=Math.max(k,n.metrics.sub2);var z=n.metrics.defaultRuleThickness;if(g-c.depth-(d.height-k)<4*z){k=4*z-(g-c.depth)+d.height;var S=.8*n.metrics.xHeight-(g-c.depth);if(S>0){g+=S;k-=S}}_=r.makeVList([{type:"elem",elem:l,shift:k},{type:"elem",elem:a,shift:-g}],"individualShift",null,t);if(h instanceof p.symbolNode){_.children[0].style.marginLeft=-h.italic+"em"}_.children[0].style.marginRight=b;_.children[1].style.marginRight=b}return o([u(e.value.base)],[h,_])},genfrac:function(e,t,i){var h=t.style;if(e.value.size==="display"){h=s.DISPLAY}else if(e.value.size==="text"){h=s.TEXT}var a=h.fracNum();var p=h.fracDen();var c=y(e.value.numer,t.withStyle(a));var d=o([h.reset(),a.cls()],[c]);var g=y(e.value.denom,t.withStyle(p));var u=o([h.reset(),p.cls()],[g]);var w;if(e.value.hasBarLine){w=n.metrics.defaultRuleThickness/t.style.sizeMultiplier}else{w=0}var k;var f;var m;if(h.size===s.DISPLAY.size){k=n.metrics.num1;if(w>0){f=3*w}else{f=7*n.metrics.defaultRuleThickness}m=n.metrics.denom1}else{if(w>0){k=n.metrics.num2;f=w}else{k=n.metrics.num3;f=3*n.metrics.defaultRuleThickness}m=n.metrics.denom2}var v;if(w===0){var x=k-c.depth-(g.height-m);if(x<f){k+=.5*(f-x);m+=.5*(f-x)}v=r.makeVList([{type:"elem",elem:u,shift:m},{type:"elem",elem:d,shift:-k}],"individualShift",null,t)}else{var b=n.metrics.axisHeight;if(k-c.depth-(b+.5*w)<f){k+=f-(k-c.depth-(b+.5*w))}if(b-.5*w-(g.height-m)<f){m+=f-(b-.5*w-(g.height-m))}var _=o([t.style.reset(),s.TEXT.cls(),"frac-line"]);_.height=w;var z=-(b-.5*w);v=r.makeVList([{type:"elem",elem:u,shift:m},{type:"elem",elem:_,shift:z},{type:"elem",elem:d,shift:-k}],"individualShift",null,t)}v.height*=h.sizeMultiplier/t.style.sizeMultiplier;v.depth*=h.sizeMultiplier/t.style.sizeMultiplier;var S=[o(["mfrac"],[v])];var T;if(h.size===s.DISPLAY.size){T=n.metrics.delim1}else{T=n.metrics.getDelim2(h)}if(e.value.leftDelim!=null){S.unshift(l.customSizedDelim(e.value.leftDelim,T,true,t.withStyle(h),e.mode))}if(e.value.rightDelim!=null){S.push(l.customSizedDelim(e.value.rightDelim,T,true,t.withStyle(h),e.mode))}return o(["minner",t.style.reset(),h.cls()],S,t.getColor())},spacing:function(e,t,i){if(e.value==="\\ "||e.value==="\\space"||e.value===" "||e.value==="~"){return o(["mord","mspace"],[r.mathrm(e.value,e.mode)])}else{var h={"\\qquad":"qquad","\\quad":"quad","\\enspace":"enspace","\\;":"thickspace","\\:":"mediumspace","\\,":"thinspace","\\!":"negativethinspace"};return o(["mord","mspace",h[e.value]])}},llap:function(e,t,i){var h=o(["inner"],[y(e.value.body,t.reset())]);var a=o(["fix"],[]);return o(["llap",t.style.cls()],[h,a])},rlap:function(e,t,i){var h=o(["inner"],[y(e.value.body,t.reset())]);var a=o(["fix"],[]);return o(["rlap",t.style.cls()],[h,a])},op:function(e,t,i){var h;var a;var l=false;if(e.type==="supsub"){h=e.value.sup;a=e.value.sub;e=e.value.base;l=true}var p=["\\smallint"];var d=false;if(t.style.size===s.DISPLAY.size&&e.value.symbol&&!c.contains(p,e.value.body)){d=true}var g;var u=0;var w=0;if(e.value.symbol){var k=d?"Size2-Regular":"Size1-Regular";g=r.makeSymbol(e.value.body,k,"math",t.getColor(),["op-symbol",d?"large-op":"small-op","mop"]);u=(g.height-g.depth)/2-n.metrics.axisHeight*t.style.sizeMultiplier;w=g.italic}else{var f=[];for(var m=1;m<e.value.body.length;m++){f.push(r.mathrm(e.value.body[m],e.mode))}g=o(["mop"],f,t.getColor())}if(l){g=o([],[g]);var v,x,b,_;if(h){var z=y(h,t.withStyle(t.style.sup()));v=o([t.style.reset(),t.style.sup().cls()],[z]);x=Math.max(n.metrics.bigOpSpacing1,n.metrics.bigOpSpacing3-z.depth)}if(a){var S=y(a,t.withStyle(t.style.sub()));b=o([t.style.reset(),t.style.sub().cls()],[S]);_=Math.max(n.metrics.bigOpSpacing2,n.metrics.bigOpSpacing4-S.height)}var T,C,M;if(!h){C=g.height-u;T=r.makeVList([{type:"kern",size:n.metrics.bigOpSpacing5},{type:"elem",elem:b},{type:"kern",size:_},{type:"elem",elem:g}],"top",C,t);T.children[0].style.marginLeft=-w+"em"}else if(!a){M=g.depth+u;T=r.makeVList([{type:"elem",elem:g},{type:"kern",size:x},{type:"elem",elem:v},{type:"kern",size:n.metrics.bigOpSpacing5}],"bottom",M,t);T.children[1].style.marginLeft=w+"em"}else if(!h&&!a){return g}else{M=n.metrics.bigOpSpacing5+b.height+b.depth+_+g.depth+u;T=r.makeVList([{type:"kern",size:n.metrics.bigOpSpacing5},{type:"elem",elem:b},{type:"kern",size:_},{type:"elem",elem:g},{type:"kern",size:x},{type:"elem",elem:v},{type:"kern",size:n.metrics.bigOpSpacing5}],"bottom",M,t);T.children[0].style.marginLeft=-w+"em";T.children[2].style.marginLeft=w+"em"}return o(["mop","op-limits"],[T])}else{if(e.value.symbol){g.style.top=u+"em"}return g}},katex:function(e,t,i){var h=o(["k"],[r.mathrm("K",e.mode)]);var a=o(["a"],[r.mathrm("A",e.mode)]);a.height=(a.height+.2)*.75;a.depth=(a.height-.2)*.75;var s=o(["t"],[r.mathrm("T",e.mode)]);var l=o(["e"],[r.mathrm("E",e.mode)]);l.height=l.height-.2155;l.depth=l.depth+.2155;var p=o(["x"],[r.mathrm("X",e.mode)]);return o(["katex-logo"],[h,a,s,l,p],t.getColor())},overline:function(e,t,i){var h=y(e.value.body,t.withStyle(t.style.cramp()));var a=n.metrics.defaultRuleThickness/t.style.sizeMultiplier;var l=o([t.style.reset(),s.TEXT.cls(),"overline-line"]);l.height=a;l.maxFontSize=1;var p=r.makeVList([{type:"elem",elem:h},{type:"kern",size:3*a},{type:"elem",elem:l},{type:"kern",size:a}],"firstBaseline",null,t);return o(["overline","mord"],[p],t.getColor())},sqrt:function(e,t,i){var h=y(e.value.body,t.withStyle(t.style.cramp()));var a=n.metrics.defaultRuleThickness/t.style.sizeMultiplier;var p=o([t.style.reset(),s.TEXT.cls(),"sqrt-line"],[],t.getColor());p.height=a;p.maxFontSize=1;var c=a;if(t.style.id<s.TEXT.id){c=n.metrics.xHeight}var d=a+c/4;var g=(h.height+h.depth)*t.style.sizeMultiplier;var u=g+d+a;var w=o(["sqrt-sign"],[l.customSizedDelim("\\surd",u,false,t,e.mode)],t.getColor());var k=w.height+w.depth-a;if(k>h.height+h.depth+d){d=(d+k-h.height-h.depth)/2}var f=-(h.height+d+a)+w.height;w.style.top=f+"em";w.height-=f;w.depth+=f;var m;if(h.height===0&&h.depth===0){m=o()}else{m=r.makeVList([{type:"elem",elem:h},{type:"kern",size:d},{type:"elem",elem:p},{type:"kern",size:a}],"firstBaseline",null,t)}return o(["sqrt","mord"],[w,m])},sizing:function(e,t,i){var h=d(e.value.value,t.withSize(e.value.size),i);var a=o(["mord"],[o(["sizing","reset-"+t.size,e.value.size,t.style.cls()],h)]);var s=v[e.value.size];a.maxFontSize=s*t.style.sizeMultiplier;return a},styling:function(e,t,i){var h={display:s.DISPLAY,text:s.TEXT,script:s.SCRIPT,scriptscript:s.SCRIPTSCRIPT};var a=h[e.value.style];var r=d(e.value.value,t.withStyle(a),i);return o([t.style.reset(),a.cls()],r)},delimsizing:function(e,t,i){var h=e.value.value;if(h==="."){return o([g[e.value.delimType]])}return o([g[e.value.delimType]],[l.sizedDelim(h,e.value.size,t,e.mode)])},leftright:function(e,t,i){var h=d(e.value.body,t.reset());var a=0;var s=0;for(var r=0;r<h.length;r++){a=Math.max(h[r].height,a);s=Math.max(h[r].depth,s)}a*=t.style.sizeMultiplier;s*=t.style.sizeMultiplier;var p;if(e.value.left==="."){p=o(["nulldelimiter"])}else{p=l.leftRightDelim(e.value.left,a,s,t,e.mode)}h.unshift(p);var n;if(e.value.right==="."){n=o(["nulldelimiter"])}else{n=l.leftRightDelim(e.value.right,a,s,t,e.mode)}h.push(n);return o(["minner",t.style.cls()],h,t.getColor())},rule:function(e,t,i){var h=o(["mord","rule"],[],t.getColor());var a=0;if(e.value.shift){a=e.value.shift.number;if(e.value.shift.unit==="ex"){a*=n.metrics.xHeight}}var s=e.value.width.number;if(e.value.width.unit==="ex"){s*=n.metrics.xHeight}var r=e.value.height.number;if(e.value.height.unit==="ex"){r*=n.metrics.xHeight}a/=t.style.sizeMultiplier;s/=t.style.sizeMultiplier;r/=t.style.sizeMultiplier;h.style.borderRightWidth=s+"em";h.style.borderTopWidth=r+"em";h.style.bottom=a+"em";h.width=s;h.height=r+a;h.depth=-a;return h},accent:function(e,t,i){var h=e.value.base;var a;if(e.type==="supsub"){var s=e;e=s.value.base;h=e.value.base;s.value.base=h;a=y(s,t.reset(),i)}var l=y(h,t.withStyle(t.style.cramp()));var p;if(f(h)){var c=k(h);var d=y(c,t.withStyle(t.style.cramp()));p=d.skew}else{p=0}var g=Math.min(l.height,n.metrics.xHeight);var u=r.makeSymbol(e.value.accent,"Main-Regular","math",t.getColor());u.italic=0;var w=e.value.accent==="\\vec"?"accent-vec":null;var m=o(["accent-body",w],[o([],[u])]);m=r.makeVList([{type:"elem",elem:l},{type:"kern",size:-g},{type:"elem",elem:m}],"firstBaseline",null,t);m.children[1].style.marginLeft=2*p+"em";var v=o(["mord","accent"],[m]);if(a){a.children[0]=v;a.height=Math.max(v.height,a.height);a.classes[0]="mord";return a}else{return v}}};var v={size1:.5,size2:.7,size3:.8,size4:.9,size5:1,size6:1.2,size7:1.44,size8:1.73,size9:2.07,size10:2.49};var y=function(e,t,i){if(!e){return o()}if(m[e.type]){var h=m[e.type](e,t,i);var s;if(t.style!==t.parentStyle){s=t.style.sizeMultiplier/t.parentStyle.sizeMultiplier;h.height*=s;h.depth*=s}if(t.size!==t.parentSize){s=v[t.size]/v[t.parentSize];h.height*=s;h.depth*=s}return h}else{throw new a("Got group of unknown type: '"+e.type+"'")}};var x=function(e){var t=new h(s.TEXT,"size5","");var i=d(e,t);var a=o(["base",t.style.cls()],i);var r=o(["strut"]);var l=o(["strut","bottom"]);r.style.height=a.height+"em";l.style.height=a.height+a.depth+"em";l.style.verticalAlign=-a.depth+"em";var p=o(["katex"],[o(["katex-inner"],[r,l,a])]);return p};t.exports=x},{"./Options":3,"./ParseError":4,"./Style":6,"./buildCommon":7,"./delimiter":9,"./domTree":10,"./fontMetrics":11,"./utils":15}],9:[function(e,t,i){var h=e("./ParseError");var a=e("./Style");var s=e("./buildCommon");var r=e("./fontMetrics");var l=e("./symbols");var p=e("./utils");var n=s.makeSpan;var c=function(e,t){if(l.math[e]&&l.math[e].replace){return r.getCharacterMetrics(l.math[e].replace,t)}else{return r.getCharacterMetrics(e,t)}};var o=function(e,t,i){return s.makeSymbol(e,"Size"+t+"-Regular",i)};var d=function(e,t,i){var h=n(["style-wrap",i.style.reset(),t.cls()],[e]);var a=t.sizeMultiplier/i.style.sizeMultiplier;h.height*=a;h.depth*=a;h.maxFontSize=t.sizeMultiplier;return h};var g=function(e,t,i,h,a){var l=s.makeSymbol(e,"Main-Regular",a);var p=d(l,t,h);if(i){var n=(1-h.style.sizeMultiplier/t.sizeMultiplier)*r.metrics.axisHeight;p.style.top=n+"em";p.height-=n;p.depth+=n}return p};var u=function(e,t,i,h,s){var l=o(e,t,s);var p=d(n(["delimsizing","size"+t],[l],h.getColor()),a.TEXT,h);if(i){var c=(1-h.style.sizeMultiplier)*r.metrics.axisHeight;p.style.top=c+"em";p.height-=c;p.depth+=c}return p};var w=function(e,t,i){var h;if(t==="Size1-Regular"){h="delim-size1"}else if(t==="Size4-Regular"){h="delim-size4"}var a=n(["delimsizinginner",h],[n([],[s.makeSymbol(e,t,i)])]);return{type:"elem",elem:a}};var k=function(e,t,i,h,l){var p,o,g,u;p=g=u=e;o=null;var k="Size1-Regular";if(e==="\\uparrow"){g=u="â"}else if(e==="\\Uparrow"){g=u="‖"}else if(e==="\\downarrow"){p=g="â"}else if(e==="\\Downarrow"){p=g="‖"}else if(e==="\\updownarrow"){p="\\uparrow";g="â";u="\\downarrow"}else if(e==="\\Updownarrow"){p="\\Uparrow";g="‖";u="\\Downarrow"}else if(e==="["||e==="\\lbrack"){p="⎡";g="⎢";u="⎣";k="Size4-Regular"}else if(e==="]"||e==="\\rbrack"){p="⎤";g="⎥";u="⎦";k="Size4-Regular"}else if(e==="\\lfloor"){g=p="⎢";u="⎣";k="Size4-Regular"}else if(e==="\\lceil"){p="⎡";g=u="⎢";k="Size4-Regular"}else if(e==="\\rfloor"){g=p="⎥";u="⎦";k="Size4-Regular"}else if(e==="\\rceil"){p="⎤";g=u="⎥";k="Size4-Regular"}else if(e==="("){p="⎛";g="⎜";u="âŽ";k="Size4-Regular"}else if(e===")"){p="⎞";g="⎟";u="⎠";k="Size4-Regular"}else if(e==="\\{"||e==="\\lbrace"){p="⎧";o="⎨";u="⎩";g="⎪";k="Size4-Regular"}else if(e==="\\}"||e==="\\rbrace"){p="⎫";o="⎬";u="âŽ";g="⎪";k="Size4-Regular"}else if(e==="\\surd"){p="î€";u="⎷";g="";k="Size4-Regular"}var f=c(p,k);var m=f.height+f.depth;var v=c(g,k);var y=v.height+v.depth;var x=c(u,k);var b=x.height+x.depth;var _,z;if(o!==null){_=c(o,k);z=_.height+_.depth}var S=m+b;if(o!==null){S+=z}while(S<t){S+=y;if(o!==null){S+=y}}var T=r.metrics.axisHeight;if(i){T*=h.style.sizeMultiplier}var C=S/2-T;var M=[];M.push(w(u,k,l));var L;if(o===null){var E=S-m-b;var A=Math.ceil(E/y);for(L=0;L<A;L++){M.push(w(g,k,l))}}else{var P=S/2-m-z/2;var R=Math.ceil(P/y);var O=S/2-m-z/2;var I=Math.ceil(O/y);for(L=0;L<R;L++){M.push(w(g,k,l))}M.push(w(o,k,l));for(L=0;L<I;L++){M.push(w(g,k,l))}}M.push(w(p,k,l));var F=s.makeVList(M,"bottom",C,h);return d(n(["delimsizing","mult"],[F],h.getColor()),a.TEXT,h)};var f=["(",")","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\\lceil","\\rceil","\\surd"];var m=["\\uparrow","\\downarrow","\\updownarrow","\\Uparrow","\\Downarrow","\\Updownarrow","|","\\|","\\vert","\\Vert"];var v=["<",">","\\langle","\\rangle","/","\\backslash"];var y=[0,1.2,1.8,2.4,3];var x=function(e,t,i,a){if(e==="<"){e="\\langle"}else if(e===">"){e="\\rangle"}if(p.contains(f,e)||p.contains(v,e)){return u(e,t,false,i,a)}else if(p.contains(m,e)){return k(e,y[t],false,i,a)}else{throw new h("Illegal delimiter: '"+e+"'")}};var b=[{type:"small",style:a.SCRIPTSCRIPT},{type:"small",style:a.SCRIPT},{type:"small",style:a.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4}];var _=[{type:"small",style:a.SCRIPTSCRIPT},{type:"small",style:a.SCRIPT},{type:"small",style:a.TEXT},{type:"stack"}];var z=[{type:"small",style:a.SCRIPTSCRIPT},{type:"small",style:a.SCRIPT},{type:"small",style:a.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4},{type:"stack"}];var S=function(e){if(e.type==="small"){return"Main-Regular"}else if(e.type==="large"){return"Size"+e.size+"-Regular"}else if(e.type==="stack"){return"Size4-Regular"}};var T=function(e,t,i,h){var a=Math.min(2,3-h.style.size);for(var s=a;s<i.length;s++){if(i[s].type==="stack"){break}var r=c(e,S(i[s]));var l=r.height+r.depth;if(i[s].type==="small"){l*=i[s].style.sizeMultiplier}if(l>t){return i[s]}}return i[i.length-1]};var C=function(e,t,i,h,a){if(e==="<"){e="\\langle"}else if(e===">"){e="\\rangle"}var s;if(p.contains(v,e)){s=b +}else if(p.contains(f,e)){s=z}else{s=_}var r=T(e,t,s,h);if(r.type==="small"){return g(e,r.style,i,h,a)}else if(r.type==="large"){return u(e,r.size,i,h,a)}else if(r.type==="stack"){return k(e,t,i,h,a)}};var M=function(e,t,i,h,a){var s=r.metrics.axisHeight*h.style.sizeMultiplier;var l=901;var p=5/r.metrics.ptPerEm;var n=Math.max(t-s,i+s);var c=Math.max(n/500*l,2*n-p);return C(e,c,true,h,a)};t.exports={sizedDelim:x,customSizedDelim:C,leftRightDelim:M}},{"./ParseError":4,"./Style":6,"./buildCommon":7,"./fontMetrics":11,"./symbols":14,"./utils":15}],10:[function(e,t,i){var h=e("./utils");var a=function(e){e=e.slice();for(var t=e.length-1;t>=0;t--){if(!e[t]){e.splice(t,1)}}return e.join(" ")};function s(e,t,i,h,a,s){this.classes=e||[];this.children=t||[];this.height=i||0;this.depth=h||0;this.maxFontSize=a||0;this.style=s||{}}s.prototype.toNode=function(){var e=document.createElement("span");e.className=a(this.classes);for(var t in this.style){if(this.style.hasOwnProperty(t)){e.style[t]=this.style[t]}}for(var i=0;i<this.children.length;i++){e.appendChild(this.children[i].toNode())}return e};s.prototype.toMarkup=function(){var e="<span";if(this.classes.length){e+=' class="';e+=h.escape(a(this.classes));e+='"'}var t="";for(var i in this.style){if(this.style.hasOwnProperty(i)){t+=h.hyphenate(i)+":"+this.style[i]+";"}}if(t){e+=' style="'+h.escape(t)+'"'}e+=">";for(var s=0;s<this.children.length;s++){e+=this.children[s].toMarkup()}e+="</span>";return e};function r(e,t,i,h){this.children=e||[];this.height=t||0;this.depth=i||0;this.maxFontSize=h||0}r.prototype.toNode=function(){var e=document.createDocumentFragment();for(var t=0;t<this.children.length;t++){e.appendChild(this.children[t].toNode())}return e};r.prototype.toMarkup=function(){var e="";for(var t=0;t<this.children.length;t++){e+=this.children[t].toMarkup()}return e};function l(e,t,i,h,a,s,r){this.value=e||"";this.height=t||0;this.depth=i||0;this.italic=h||0;this.skew=a||0;this.classes=s||[];this.style=r||{};this.maxFontSize=0}l.prototype.toNode=function(){var e=document.createTextNode(this.value);var t=null;if(this.italic>0){t=document.createElement("span");t.style.marginRight=this.italic+"em"}if(this.classes.length>0){t=t||document.createElement("span");t.className=a(this.classes)}for(var i in this.style){if(this.style.hasOwnProperty(i)){t=t||document.createElement("span");t.style[i]=this.style[i]}}if(t){t.appendChild(e);return t}else{return e}};l.prototype.toMarkup=function(){var e=false;var t="<span";if(this.classes.length){e=true;t+=' class="';t+=h.escape(a(this.classes));t+='"'}var i="";if(this.italic>0){i+="margin-right:"+this.italic+"em;"}for(var s in this.style){if(this.style.hasOwnProperty(s)){i+=h.hyphenate(s)+":"+this.style[s]+";"}}if(i){e=true;t+=' style="'+h.escape(i)+'"'}var r=h.escape(this.value);if(e){t+=">";t+=r;t+="</span>";return t}else{return r}};t.exports={span:s,documentFragment:r,symbolNode:l}},{"./utils":15}],11:[function(e,t,i){var h=e("./Style");var a=.025;var s=0;var r=0;var l=0;var p=.431;var n=1;var c=0;var o=.677;var d=.394;var g=.444;var u=.686;var w=.345;var k=.413;var f=.363;var m=.289;var v=.15;var y=.247;var x=.386;var b=.05;var _=2.39;var z=1.01;var S=.81;var T=.71;var C=.25;var M=0;var L=0;var E=0;var A=0;var P=.431;var R=1;var O=0;var I=.04;var F=.111;var D=.166;var B=.2;var q=.6;var N=.1;var G=10;var H={xHeight:p,quad:n,num1:o,num2:d,num3:g,denom1:u,denom2:w,sup1:k,sup2:f,sup3:m,sub1:v,sub2:y,supDrop:x,subDrop:b,axisHeight:C,defaultRuleThickness:I,bigOpSpacing1:F,bigOpSpacing2:D,bigOpSpacing3:B,bigOpSpacing4:q,bigOpSpacing5:N,ptPerEm:G,delim1:_,getDelim2:function(e){if(e.size===h.TEXT.size){return z}else if(e.size===h.SCRIPT.size){return S}else if(e.size===h.SCRIPTSCRIPT.size){return T}throw new Error("Unexpected style size: "+e.size)}};var X={"AMS-Regular":{10003:{depth:0,height:.69224,italic:0,skew:0},10016:{depth:0,height:.69224,italic:0,skew:0},1008:{depth:0,height:.43056,italic:.04028,skew:0},107:{depth:0,height:.68889,italic:0,skew:0},10731:{depth:.11111,height:.69224,italic:0,skew:0},10846:{depth:.19444,height:.75583,italic:0,skew:0},10877:{depth:.13667,height:.63667,italic:0,skew:0},10878:{depth:.13667,height:.63667,italic:0,skew:0},10885:{depth:.25583,height:.75583,italic:0,skew:0},10886:{depth:.25583,height:.75583,italic:0,skew:0},10887:{depth:.13597,height:.63597,italic:0,skew:0},10888:{depth:.13597,height:.63597,italic:0,skew:0},10889:{depth:.26167,height:.75726,italic:0,skew:0},10890:{depth:.26167,height:.75726,italic:0,skew:0},10891:{depth:.48256,height:.98256,italic:0,skew:0},10892:{depth:.48256,height:.98256,italic:0,skew:0},10901:{depth:.13667,height:.63667,italic:0,skew:0},10902:{depth:.13667,height:.63667,italic:0,skew:0},10933:{depth:.25142,height:.75726,italic:0,skew:0},10934:{depth:.25142,height:.75726,italic:0,skew:0},10935:{depth:.26167,height:.75726,italic:0,skew:0},10936:{depth:.26167,height:.75726,italic:0,skew:0},10937:{depth:.26167,height:.75726,italic:0,skew:0},10938:{depth:.26167,height:.75726,italic:0,skew:0},10949:{depth:.25583,height:.75583,italic:0,skew:0},10950:{depth:.25583,height:.75583,italic:0,skew:0},10955:{depth:.28481,height:.79383,italic:0,skew:0},10956:{depth:.28481,height:.79383,italic:0,skew:0},165:{depth:0,height:.675,italic:.025,skew:0},174:{depth:.15559,height:.69224,italic:0,skew:0},240:{depth:0,height:.68889,italic:0,skew:0},295:{depth:0,height:.68889,italic:0,skew:0},57350:{depth:.08167,height:.58167,italic:0,skew:0},57351:{depth:.08167,height:.58167,italic:0,skew:0},57352:{depth:.08167,height:.58167,italic:0,skew:0},57353:{depth:0,height:.43056,italic:.04028,skew:0},57356:{depth:.25142,height:.75726,italic:0,skew:0},57357:{depth:.25142,height:.75726,italic:0,skew:0},57358:{depth:.41951,height:.91951,italic:0,skew:0},57359:{depth:.30274,height:.79383,italic:0,skew:0},57360:{depth:.30274,height:.79383,italic:0,skew:0},57361:{depth:.41951,height:.91951,italic:0,skew:0},57366:{depth:.25142,height:.75726,italic:0,skew:0},57367:{depth:.25142,height:.75726,italic:0,skew:0},57368:{depth:.25142,height:.75726,italic:0,skew:0},57369:{depth:.25142,height:.75726,italic:0,skew:0},57370:{depth:.13597,height:.63597,italic:0,skew:0},57371:{depth:.13597,height:.63597,italic:0,skew:0},65:{depth:0,height:.68889,italic:0,skew:0},66:{depth:0,height:.68889,italic:0,skew:0},67:{depth:0,height:.68889,italic:0,skew:0},68:{depth:0,height:.68889,italic:0,skew:0},69:{depth:0,height:.68889,italic:0,skew:0},70:{depth:0,height:.68889,italic:0,skew:0},71:{depth:0,height:.68889,italic:0,skew:0},710:{depth:0,height:.825,italic:0,skew:0},72:{depth:0,height:.68889,italic:0,skew:0},73:{depth:0,height:.68889,italic:0,skew:0},732:{depth:0,height:.9,italic:0,skew:0},74:{depth:.16667,height:.68889,italic:0,skew:0},75:{depth:0,height:.68889,italic:0,skew:0},76:{depth:0,height:.68889,italic:0,skew:0},77:{depth:0,height:.68889,italic:0,skew:0},770:{depth:0,height:.825,italic:0,skew:0},771:{depth:0,height:.9,italic:0,skew:0},78:{depth:0,height:.68889,italic:0,skew:0},79:{depth:.16667,height:.68889,italic:0,skew:0},80:{depth:0,height:.68889,italic:0,skew:0},81:{depth:.16667,height:.68889,italic:0,skew:0},82:{depth:0,height:.68889,italic:0,skew:0},8245:{depth:0,height:.54986,italic:0,skew:0},83:{depth:0,height:.68889,italic:0,skew:0},84:{depth:0,height:.68889,italic:0,skew:0},8463:{depth:0,height:.68889,italic:0,skew:0},8487:{depth:0,height:.68889,italic:0,skew:0},8498:{depth:0,height:.68889,italic:0,skew:0},85:{depth:0,height:.68889,italic:0,skew:0},8502:{depth:0,height:.68889,italic:0,skew:0},8503:{depth:0,height:.68889,italic:0,skew:0},8504:{depth:0,height:.68889,italic:0,skew:0},8513:{depth:0,height:.68889,italic:0,skew:0},8592:{depth:-.03598,height:.46402,italic:0,skew:0},8594:{depth:-.03598,height:.46402,italic:0,skew:0},86:{depth:0,height:.68889,italic:0,skew:0},8602:{depth:-.13313,height:.36687,italic:0,skew:0},8603:{depth:-.13313,height:.36687,italic:0,skew:0},8606:{depth:.01354,height:.52239,italic:0,skew:0},8608:{depth:.01354,height:.52239,italic:0,skew:0},8610:{depth:.01354,height:.52239,italic:0,skew:0},8611:{depth:.01354,height:.52239,italic:0,skew:0},8619:{depth:0,height:.54986,italic:0,skew:0},8620:{depth:0,height:.54986,italic:0,skew:0},8621:{depth:-.13313,height:.37788,italic:0,skew:0},8622:{depth:-.13313,height:.36687,italic:0,skew:0},8624:{depth:0,height:.69224,italic:0,skew:0},8625:{depth:0,height:.69224,italic:0,skew:0},8630:{depth:0,height:.43056,italic:0,skew:0},8631:{depth:0,height:.43056,italic:0,skew:0},8634:{depth:.08198,height:.58198,italic:0,skew:0},8635:{depth:.08198,height:.58198,italic:0,skew:0},8638:{depth:.19444,height:.69224,italic:0,skew:0},8639:{depth:.19444,height:.69224,italic:0,skew:0},8642:{depth:.19444,height:.69224,italic:0,skew:0},8643:{depth:.19444,height:.69224,italic:0,skew:0},8644:{depth:.1808,height:.675,italic:0,skew:0},8646:{depth:.1808,height:.675,italic:0,skew:0},8647:{depth:.1808,height:.675,italic:0,skew:0},8648:{depth:.19444,height:.69224,italic:0,skew:0},8649:{depth:.1808,height:.675,italic:0,skew:0},8650:{depth:.19444,height:.69224,italic:0,skew:0},8651:{depth:.01354,height:.52239,italic:0,skew:0},8652:{depth:.01354,height:.52239,italic:0,skew:0},8653:{depth:-.13313,height:.36687,italic:0,skew:0},8654:{depth:-.13313,height:.36687,italic:0,skew:0},8655:{depth:-.13313,height:.36687,italic:0,skew:0},8666:{depth:.13667,height:.63667,italic:0,skew:0},8667:{depth:.13667,height:.63667,italic:0,skew:0},8669:{depth:-.13313,height:.37788,italic:0,skew:0},87:{depth:0,height:.68889,italic:0,skew:0},8705:{depth:0,height:.825,italic:0,skew:0},8708:{depth:0,height:.68889,italic:0,skew:0},8709:{depth:.08167,height:.58167,italic:0,skew:0},8717:{depth:0,height:.43056,italic:0,skew:0},8722:{depth:-.03598,height:.46402,italic:0,skew:0},8724:{depth:.08198,height:.69224,italic:0,skew:0},8726:{depth:.08167,height:.58167,italic:0,skew:0},8733:{depth:0,height:.69224,italic:0,skew:0},8736:{depth:0,height:.69224,italic:0,skew:0},8737:{depth:0,height:.69224,italic:0,skew:0},8738:{depth:.03517,height:.52239,italic:0,skew:0},8739:{depth:.08167,height:.58167,italic:0,skew:0},8740:{depth:.25142,height:.74111,italic:0,skew:0},8741:{depth:.08167,height:.58167,italic:0,skew:0},8742:{depth:.25142,height:.74111,italic:0,skew:0},8756:{depth:0,height:.69224,italic:0,skew:0},8757:{depth:0,height:.69224,italic:0,skew:0},8764:{depth:-.13313,height:.36687,italic:0,skew:0},8765:{depth:-.13313,height:.37788,italic:0,skew:0},8769:{depth:-.13313,height:.36687,italic:0,skew:0},8770:{depth:-.03625,height:.46375,italic:0,skew:0},8774:{depth:.30274,height:.79383,italic:0,skew:0},8776:{depth:-.01688,height:.48312,italic:0,skew:0},8778:{depth:.08167,height:.58167,italic:0,skew:0},8782:{depth:.06062,height:.54986,italic:0,skew:0},8783:{depth:.06062,height:.54986,italic:0,skew:0},8785:{depth:.08198,height:.58198,italic:0,skew:0},8786:{depth:.08198,height:.58198,italic:0,skew:0},8787:{depth:.08198,height:.58198,italic:0,skew:0},8790:{depth:0,height:.69224,italic:0,skew:0},8791:{depth:.22958,height:.72958,italic:0,skew:0},8796:{depth:.08198,height:.91667,italic:0,skew:0},88:{depth:0,height:.68889,italic:0,skew:0},8806:{depth:.25583,height:.75583,italic:0,skew:0},8807:{depth:.25583,height:.75583,italic:0,skew:0},8808:{depth:.25142,height:.75726,italic:0,skew:0},8809:{depth:.25142,height:.75726,italic:0,skew:0},8812:{depth:.25583,height:.75583,italic:0,skew:0},8814:{depth:.20576,height:.70576,italic:0,skew:0},8815:{depth:.20576,height:.70576,italic:0,skew:0},8816:{depth:.30274,height:.79383,italic:0,skew:0},8817:{depth:.30274,height:.79383,italic:0,skew:0},8818:{depth:.22958,height:.72958,italic:0,skew:0},8819:{depth:.22958,height:.72958,italic:0,skew:0},8822:{depth:.1808,height:.675,italic:0,skew:0},8823:{depth:.1808,height:.675,italic:0,skew:0},8828:{depth:.13667,height:.63667,italic:0,skew:0},8829:{depth:.13667,height:.63667,italic:0,skew:0},8830:{depth:.22958,height:.72958,italic:0,skew:0},8831:{depth:.22958,height:.72958,italic:0,skew:0},8832:{depth:.20576,height:.70576,italic:0,skew:0},8833:{depth:.20576,height:.70576,italic:0,skew:0},8840:{depth:.30274,height:.79383,italic:0,skew:0},8841:{depth:.30274,height:.79383,italic:0,skew:0},8842:{depth:.13597,height:.63597,italic:0,skew:0},8843:{depth:.13597,height:.63597,italic:0,skew:0},8847:{depth:.03517,height:.54986,italic:0,skew:0},8848:{depth:.03517,height:.54986,italic:0,skew:0},8858:{depth:.08198,height:.58198,italic:0,skew:0},8859:{depth:.08198,height:.58198,italic:0,skew:0},8861:{depth:.08198,height:.58198,italic:0,skew:0},8862:{depth:0,height:.675,italic:0,skew:0},8863:{depth:0,height:.675,italic:0,skew:0},8864:{depth:0,height:.675,italic:0,skew:0},8865:{depth:0,height:.675,italic:0,skew:0},8872:{depth:0,height:.69224,italic:0,skew:0},8873:{depth:0,height:.69224,italic:0,skew:0},8874:{depth:0,height:.69224,italic:0,skew:0},8876:{depth:0,height:.68889,italic:0,skew:0},8877:{depth:0,height:.68889,italic:0,skew:0},8878:{depth:0,height:.68889,italic:0,skew:0},8879:{depth:0,height:.68889,italic:0,skew:0},8882:{depth:.03517,height:.54986,italic:0,skew:0},8883:{depth:.03517,height:.54986,italic:0,skew:0},8884:{depth:.13667,height:.63667,italic:0,skew:0},8885:{depth:.13667,height:.63667,italic:0,skew:0},8888:{depth:0,height:.54986,italic:0,skew:0},8890:{depth:.19444,height:.43056,italic:0,skew:0},8891:{depth:.19444,height:.69224,italic:0,skew:0},8892:{depth:.19444,height:.69224,italic:0,skew:0},89:{depth:0,height:.68889,italic:0,skew:0},8901:{depth:0,height:.54986,italic:0,skew:0},8903:{depth:.08167,height:.58167,italic:0,skew:0},8905:{depth:.08167,height:.58167,italic:0,skew:0},8906:{depth:.08167,height:.58167,italic:0,skew:0},8907:{depth:0,height:.69224,italic:0,skew:0},8908:{depth:0,height:.69224,italic:0,skew:0},8909:{depth:-.03598,height:.46402,italic:0,skew:0},8910:{depth:0,height:.54986,italic:0,skew:0},8911:{depth:0,height:.54986,italic:0,skew:0},8912:{depth:.03517,height:.54986,italic:0,skew:0},8913:{depth:.03517,height:.54986,italic:0,skew:0},8914:{depth:0,height:.54986,italic:0,skew:0},8915:{depth:0,height:.54986,italic:0,skew:0},8916:{depth:0,height:.69224,italic:0,skew:0},8918:{depth:.0391,height:.5391,italic:0,skew:0},8919:{depth:.0391,height:.5391,italic:0,skew:0},8920:{depth:.03517,height:.54986,italic:0,skew:0},8921:{depth:.03517,height:.54986,italic:0,skew:0},8922:{depth:.38569,height:.88569,italic:0,skew:0},8923:{depth:.38569,height:.88569,italic:0,skew:0},8926:{depth:.13667,height:.63667,italic:0,skew:0},8927:{depth:.13667,height:.63667,italic:0,skew:0},8928:{depth:.30274,height:.79383,italic:0,skew:0},8929:{depth:.30274,height:.79383,italic:0,skew:0},8934:{depth:.23222,height:.74111,italic:0,skew:0},8935:{depth:.23222,height:.74111,italic:0,skew:0},8936:{depth:.23222,height:.74111,italic:0,skew:0},8937:{depth:.23222,height:.74111,italic:0,skew:0},8938:{depth:.20576,height:.70576,italic:0,skew:0},8939:{depth:.20576,height:.70576,italic:0,skew:0},8940:{depth:.30274,height:.79383,italic:0,skew:0},8941:{depth:.30274,height:.79383,italic:0,skew:0},8994:{depth:.19444,height:.69224,italic:0,skew:0},8995:{depth:.19444,height:.69224,italic:0,skew:0},90:{depth:0,height:.68889,italic:0,skew:0},9416:{depth:.15559,height:.69224,italic:0,skew:0},9484:{depth:0,height:.69224,italic:0,skew:0},9488:{depth:0,height:.69224,italic:0,skew:0},9492:{depth:0,height:.37788,italic:0,skew:0},9496:{depth:0,height:.37788,italic:0,skew:0},9585:{depth:.19444,height:.68889,italic:0,skew:0},9586:{depth:.19444,height:.74111,italic:0,skew:0},9632:{depth:0,height:.675,italic:0,skew:0},9633:{depth:0,height:.675,italic:0,skew:0},9650:{depth:0,height:.54986,italic:0,skew:0},9651:{depth:0,height:.54986,italic:0,skew:0},9654:{depth:.03517,height:.54986,italic:0,skew:0},9660:{depth:0,height:.54986,italic:0,skew:0},9661:{depth:0,height:.54986,italic:0,skew:0},9664:{depth:.03517,height:.54986,italic:0,skew:0},9674:{depth:.11111,height:.69224,italic:0,skew:0},9733:{depth:.19444,height:.69224,italic:0,skew:0},989:{depth:.08167,height:.58167,italic:0,skew:0}},"Main-Bold":{100:{depth:0,height:.69444,italic:0,skew:0},101:{depth:0,height:.44444,italic:0,skew:0},102:{depth:0,height:.69444,italic:.10903,skew:0},10216:{depth:.25,height:.75,italic:0,skew:0},10217:{depth:.25,height:.75,italic:0,skew:0},103:{depth:.19444,height:.44444,italic:.01597,skew:0},104:{depth:0,height:.69444,italic:0,skew:0},105:{depth:0,height:.69444,italic:0,skew:0},106:{depth:.19444,height:.69444,italic:0,skew:0},107:{depth:0,height:.69444,italic:0,skew:0},108:{depth:0,height:.69444,italic:0,skew:0},10815:{depth:0,height:.68611,italic:0,skew:0},109:{depth:0,height:.44444,italic:0,skew:0},10927:{depth:.19667,height:.69667,italic:0,skew:0},10928:{depth:.19667,height:.69667,italic:0,skew:0},110:{depth:0,height:.44444,italic:0,skew:0},111:{depth:0,height:.44444,italic:0,skew:0},112:{depth:.19444,height:.44444,italic:0,skew:0},113:{depth:.19444,height:.44444,italic:0,skew:0},114:{depth:0,height:.44444,italic:0,skew:0},115:{depth:0,height:.44444,italic:0,skew:0},116:{depth:0,height:.63492,italic:0,skew:0},117:{depth:0,height:.44444,italic:0,skew:0},118:{depth:0,height:.44444,italic:.01597,skew:0},119:{depth:0,height:.44444,italic:.01597,skew:0},120:{depth:0,height:.44444,italic:0,skew:0},121:{depth:.19444,height:.44444,italic:.01597,skew:0},122:{depth:0,height:.44444,italic:0,skew:0},123:{depth:.25,height:.75,italic:0,skew:0},124:{depth:.25,height:.75,italic:0,skew:0},125:{depth:.25,height:.75,italic:0,skew:0},126:{depth:.35,height:.34444,italic:0,skew:0},168:{depth:0,height:.69444,italic:0,skew:0},172:{depth:0,height:.44444,italic:0,skew:0},175:{depth:0,height:.59611,italic:0,skew:0},176:{depth:0,height:.69444,italic:0,skew:0},177:{depth:.13333,height:.63333,italic:0,skew:0},180:{depth:0,height:.69444,italic:0,skew:0},215:{depth:.13333,height:.63333,italic:0,skew:0},247:{depth:.13333,height:.63333,italic:0,skew:0},305:{depth:0,height:.44444,italic:0,skew:0},33:{depth:0,height:.69444,italic:0,skew:0},34:{depth:0,height:.69444,italic:0,skew:0},35:{depth:.19444,height:.69444,italic:0,skew:0},36:{depth:.05556,height:.75,italic:0,skew:0},37:{depth:.05556,height:.75,italic:0,skew:0},38:{depth:0,height:.69444,italic:0,skew:0},39:{depth:0,height:.69444,italic:0,skew:0},40:{depth:.25,height:.75,italic:0,skew:0},41:{depth:.25,height:.75,italic:0,skew:0},42:{depth:0,height:.75,italic:0,skew:0},43:{depth:.13333,height:.63333,italic:0,skew:0},44:{depth:.19444,height:.15556,italic:0,skew:0},45:{depth:0,height:.44444,italic:0,skew:0},46:{depth:0,height:.15556,italic:0,skew:0},47:{depth:.25,height:.75,italic:0,skew:0},48:{depth:0,height:.64444,italic:0,skew:0},49:{depth:0,height:.64444,italic:0,skew:0},50:{depth:0,height:.64444,italic:0,skew:0},51:{depth:0,height:.64444,italic:0,skew:0},52:{depth:0,height:.64444,italic:0,skew:0},53:{depth:0,height:.64444,italic:0,skew:0},54:{depth:0,height:.64444,italic:0,skew:0},55:{depth:0,height:.64444,italic:0,skew:0},56:{depth:0,height:.64444,italic:0,skew:0},567:{depth:.19444,height:.44444,italic:0,skew:0},57:{depth:0,height:.64444,italic:0,skew:0},58:{depth:0,height:.44444,italic:0,skew:0},59:{depth:.19444,height:.44444,italic:0,skew:0},60:{depth:.08556,height:.58556,italic:0,skew:0},61:{depth:-.10889,height:.39111,italic:0,skew:0},62:{depth:.08556,height:.58556,italic:0,skew:0},63:{depth:0,height:.69444,italic:0,skew:0},64:{depth:0,height:.69444,italic:0,skew:0},65:{depth:0,height:.68611,italic:0,skew:0},66:{depth:0,height:.68611,italic:0,skew:0},67:{depth:0,height:.68611,italic:0,skew:0},68:{depth:0,height:.68611,italic:0,skew:0},69:{depth:0,height:.68611,italic:0,skew:0},70:{depth:0,height:.68611,italic:0,skew:0},71:{depth:0,height:.68611,italic:0,skew:0},710:{depth:0,height:.69444,italic:0,skew:0},711:{depth:0,height:.63194,italic:0,skew:0},713:{depth:0,height:.59611,italic:0,skew:0},714:{depth:0,height:.69444,italic:0,skew:0},715:{depth:0,height:.69444,italic:0,skew:0},72:{depth:0,height:.68611,italic:0,skew:0},728:{depth:0,height:.69444,italic:0,skew:0},729:{depth:0,height:.69444,italic:0,skew:0},73:{depth:0,height:.68611,italic:0,skew:0},730:{depth:0,height:.69444,italic:0,skew:0},732:{depth:0,height:.69444,italic:0,skew:0},74:{depth:0,height:.68611,italic:0,skew:0},75:{depth:0,height:.68611,italic:0,skew:0},76:{depth:0,height:.68611,italic:0,skew:0},768:{depth:0,height:.69444,italic:0,skew:0},769:{depth:0,height:.69444,italic:0,skew:0},77:{depth:0,height:.68611,italic:0,skew:0},770:{depth:0,height:.69444,italic:0,skew:0},771:{depth:0,height:.69444,italic:0,skew:0},772:{depth:0,height:.59611,italic:0,skew:0},774:{depth:0,height:.69444,italic:0,skew:0},775:{depth:0,height:.69444,italic:0,skew:0},776:{depth:0,height:.69444,italic:0,skew:0},778:{depth:0,height:.69444,italic:0,skew:0},779:{depth:0,height:.69444,italic:0,skew:0},78:{depth:0,height:.68611,italic:0,skew:0},780:{depth:0,height:.63194,italic:0,skew:0},79:{depth:0,height:.68611,italic:0,skew:0},80:{depth:0,height:.68611,italic:0,skew:0},81:{depth:.19444,height:.68611,italic:0,skew:0},82:{depth:0,height:.68611,italic:0,skew:0},8211:{depth:0,height:.44444,italic:.03194,skew:0},8212:{depth:0,height:.44444,italic:.03194,skew:0},8216:{depth:0,height:.69444,italic:0,skew:0},8217:{depth:0,height:.69444,italic:0,skew:0},8220:{depth:0,height:.69444,italic:0,skew:0},8221:{depth:0,height:.69444,italic:0,skew:0},8224:{depth:.19444,height:.69444,italic:0,skew:0},8225:{depth:.19444,height:.69444,italic:0,skew:0},824:{depth:.19444,height:.69444,italic:0,skew:0},8242:{depth:0,height:.55556,italic:0,skew:0},83:{depth:0,height:.68611,italic:0,skew:0},84:{depth:0,height:.68611,italic:0,skew:0},8407:{depth:0,height:.72444,italic:.15486,skew:0},8463:{depth:0,height:.69444,italic:0,skew:0},8465:{depth:0,height:.69444,italic:0,skew:0},8467:{depth:0,height:.69444,italic:0,skew:0},8472:{depth:.19444,height:.44444,italic:0,skew:0},8476:{depth:0,height:.69444,italic:0,skew:0},85:{depth:0,height:.68611,italic:0,skew:0},8501:{depth:0,height:.69444,italic:0,skew:0},8592:{depth:-.10889,height:.39111,italic:0,skew:0},8593:{depth:.19444,height:.69444,italic:0,skew:0},8594:{depth:-.10889,height:.39111,italic:0,skew:0},8595:{depth:.19444,height:.69444,italic:0,skew:0},8596:{depth:-.10889,height:.39111,italic:0,skew:0},8597:{depth:.25,height:.75,italic:0,skew:0},8598:{depth:.19444,height:.69444,italic:0,skew:0},8599:{depth:.19444,height:.69444,italic:0,skew:0},86:{depth:0,height:.68611,italic:.01597,skew:0},8600:{depth:.19444,height:.69444,italic:0,skew:0},8601:{depth:.19444,height:.69444,italic:0,skew:0},8636:{depth:-.10889,height:.39111,italic:0,skew:0},8637:{depth:-.10889,height:.39111,italic:0,skew:0},8640:{depth:-.10889,height:.39111,italic:0,skew:0},8641:{depth:-.10889,height:.39111,italic:0,skew:0},8656:{depth:-.10889,height:.39111,italic:0,skew:0},8657:{depth:.19444,height:.69444,italic:0,skew:0},8658:{depth:-.10889,height:.39111,italic:0,skew:0},8659:{depth:.19444,height:.69444,italic:0,skew:0},8660:{depth:-.10889,height:.39111,italic:0,skew:0},8661:{depth:.25,height:.75,italic:0,skew:0},87:{depth:0,height:.68611,italic:.01597,skew:0},8704:{depth:0,height:.69444,italic:0,skew:0},8706:{depth:0,height:.69444,italic:.06389,skew:0},8707:{depth:0,height:.69444,italic:0,skew:0},8709:{depth:.05556,height:.75,italic:0,skew:0},8711:{depth:0,height:.68611,italic:0,skew:0},8712:{depth:.08556,height:.58556,italic:0,skew:0},8715:{depth:.08556,height:.58556,italic:0,skew:0},8722:{depth:.13333,height:.63333,italic:0,skew:0},8723:{depth:.13333,height:.63333,italic:0,skew:0},8725:{depth:.25,height:.75,italic:0,skew:0},8726:{depth:.25,height:.75,italic:0,skew:0},8727:{depth:-.02778,height:.47222,italic:0,skew:0},8728:{depth:-.02639,height:.47361,italic:0,skew:0},8729:{depth:-.02639,height:.47361,italic:0,skew:0},8730:{depth:.18,height:.82,italic:0,skew:0},8733:{depth:0,height:.44444,italic:0,skew:0},8734:{depth:0,height:.44444,italic:0,skew:0},8736:{depth:0,height:.69224,italic:0,skew:0},8739:{depth:.25,height:.75,italic:0,skew:0},8741:{depth:.25,height:.75,italic:0,skew:0},8743:{depth:0,height:.55556,italic:0,skew:0},8744:{depth:0,height:.55556,italic:0,skew:0},8745:{depth:0,height:.55556,italic:0,skew:0},8746:{depth:0,height:.55556,italic:0,skew:0},8747:{depth:.19444,height:.69444,italic:.12778,skew:0},8764:{depth:-.10889,height:.39111,italic:0,skew:0},8768:{depth:.19444,height:.69444,italic:0,skew:0},8771:{depth:.00222,height:.50222,italic:0,skew:0},8776:{depth:.02444,height:.52444,italic:0,skew:0},8781:{depth:.00222,height:.50222,italic:0,skew:0},88:{depth:0,height:.68611,italic:0,skew:0},8801:{depth:.00222,height:.50222,italic:0,skew:0},8804:{depth:.19667,height:.69667,italic:0,skew:0},8805:{depth:.19667,height:.69667,italic:0,skew:0},8810:{depth:.08556,height:.58556,italic:0,skew:0},8811:{depth:.08556,height:.58556,italic:0,skew:0},8826:{depth:.08556,height:.58556,italic:0,skew:0},8827:{depth:.08556,height:.58556,italic:0,skew:0},8834:{depth:.08556,height:.58556,italic:0,skew:0},8835:{depth:.08556,height:.58556,italic:0,skew:0},8838:{depth:.19667,height:.69667,italic:0,skew:0},8839:{depth:.19667,height:.69667,italic:0,skew:0},8846:{depth:0,height:.55556,italic:0,skew:0},8849:{depth:.19667,height:.69667,italic:0,skew:0},8850:{depth:.19667,height:.69667,italic:0,skew:0},8851:{depth:0,height:.55556,italic:0,skew:0},8852:{depth:0,height:.55556,italic:0,skew:0},8853:{depth:.13333,height:.63333,italic:0,skew:0},8854:{depth:.13333,height:.63333,italic:0,skew:0},8855:{depth:.13333,height:.63333,italic:0,skew:0},8856:{depth:.13333,height:.63333,italic:0,skew:0},8857:{depth:.13333,height:.63333,italic:0,skew:0},8866:{depth:0,height:.69444,italic:0,skew:0},8867:{depth:0,height:.69444,italic:0,skew:0},8868:{depth:0,height:.69444,italic:0,skew:0},8869:{depth:0,height:.69444,italic:0,skew:0},89:{depth:0,height:.68611,italic:.02875,skew:0},8900:{depth:-.02639,height:.47361,italic:0,skew:0},8901:{depth:-.02639,height:.47361,italic:0,skew:0},8902:{depth:-.02778,height:.47222,italic:0,skew:0},8968:{depth:.25,height:.75,italic:0,skew:0},8969:{depth:.25,height:.75,italic:0,skew:0},8970:{depth:.25,height:.75,italic:0,skew:0},8971:{depth:.25,height:.75,italic:0,skew:0},8994:{depth:-.13889,height:.36111,italic:0,skew:0},8995:{depth:-.13889,height:.36111,italic:0,skew:0},90:{depth:0,height:.68611,italic:0,skew:0},91:{depth:.25,height:.75,italic:0,skew:0},915:{depth:0,height:.68611,italic:0,skew:0},916:{depth:0,height:.68611,italic:0,skew:0},92:{depth:.25,height:.75,italic:0,skew:0},920:{depth:0,height:.68611,italic:0,skew:0},923:{depth:0,height:.68611,italic:0,skew:0},926:{depth:0,height:.68611,italic:0,skew:0},928:{depth:0,height:.68611,italic:0,skew:0},93:{depth:.25,height:.75,italic:0,skew:0},931:{depth:0,height:.68611,italic:0,skew:0},933:{depth:0,height:.68611,italic:0,skew:0},934:{depth:0,height:.68611,italic:0,skew:0},936:{depth:0,height:.68611,italic:0,skew:0},937:{depth:0,height:.68611,italic:0,skew:0},94:{depth:0,height:.69444,italic:0,skew:0},95:{depth:.31,height:.13444,italic:.03194,skew:0},96:{depth:0,height:.69444,italic:0,skew:0},9651:{depth:.19444,height:.69444,italic:0,skew:0},9657:{depth:-.02778,height:.47222,italic:0,skew:0},9661:{depth:.19444,height:.69444,italic:0,skew:0},9667:{depth:-.02778,height:.47222,italic:0,skew:0},97:{depth:0,height:.44444,italic:0,skew:0},9711:{depth:.19444,height:.69444,italic:0,skew:0},98:{depth:0,height:.69444,italic:0,skew:0},9824:{depth:.12963,height:.69444,italic:0,skew:0},9825:{depth:.12963,height:.69444,italic:0,skew:0},9826:{depth:.12963,height:.69444,italic:0,skew:0},9827:{depth:.12963,height:.69444,italic:0,skew:0},9837:{depth:0,height:.75,italic:0,skew:0},9838:{depth:.19444,height:.69444,italic:0,skew:0},9839:{depth:.19444,height:.69444,italic:0,skew:0},99:{depth:0,height:.44444,italic:0,skew:0}},"Main-Italic":{100:{depth:0,height:.69444,italic:.10333,skew:0},101:{depth:0,height:.43056,italic:.07514,skew:0},102:{depth:.19444,height:.69444,italic:.21194,skew:0},103:{depth:.19444,height:.43056,italic:.08847,skew:0},104:{depth:0,height:.69444,italic:.07671,skew:0},105:{depth:0,height:.65536,italic:.1019,skew:0},106:{depth:.19444,height:.65536,italic:.14467,skew:0},107:{depth:0,height:.69444,italic:.10764,skew:0},108:{depth:0,height:.69444,italic:.10333,skew:0},109:{depth:0,height:.43056,italic:.07671,skew:0},110:{depth:0,height:.43056,italic:.07671,skew:0},111:{depth:0,height:.43056,italic:.06312,skew:0},112:{depth:.19444,height:.43056,italic:.06312,skew:0},113:{depth:.19444,height:.43056,italic:.08847,skew:0},114:{depth:0,height:.43056,italic:.10764,skew:0},115:{depth:0,height:.43056,italic:.08208,skew:0},116:{depth:0,height:.61508,italic:.09486,skew:0},117:{depth:0,height:.43056,italic:.07671,skew:0},118:{depth:0,height:.43056,italic:.10764,skew:0},119:{depth:0,height:.43056,italic:.10764,skew:0},120:{depth:0,height:.43056,italic:.12042,skew:0},121:{depth:.19444,height:.43056,italic:.08847,skew:0},122:{depth:0,height:.43056,italic:.12292,skew:0},126:{depth:.35,height:.31786,italic:.11585,skew:0},163:{depth:0,height:.69444,italic:0,skew:0},305:{depth:0,height:.43056,italic:.07671,skew:0},33:{depth:0,height:.69444,italic:.12417,skew:0},34:{depth:0,height:.69444,italic:.06961,skew:0},35:{depth:.19444,height:.69444,italic:.06616,skew:0},37:{depth:.05556,height:.75,italic:.13639,skew:0},38:{depth:0,height:.69444,italic:.09694,skew:0},39:{depth:0,height:.69444,italic:.12417,skew:0},40:{depth:.25,height:.75,italic:.16194,skew:0},41:{depth:.25,height:.75,italic:.03694,skew:0},42:{depth:0,height:.75,italic:.14917,skew:0},43:{depth:.05667,height:.56167,italic:.03694,skew:0},44:{depth:.19444,height:.10556,italic:0,skew:0},45:{depth:0,height:.43056,italic:.02826,skew:0},46:{depth:0,height:.10556,italic:0,skew:0},47:{depth:.25,height:.75,italic:.16194,skew:0},48:{depth:0,height:.64444,italic:.13556,skew:0},49:{depth:0,height:.64444,italic:.13556,skew:0},50:{depth:0,height:.64444,italic:.13556,skew:0},51:{depth:0,height:.64444,italic:.13556,skew:0},52:{depth:.19444,height:.64444,italic:.13556,skew:0},53:{depth:0,height:.64444,italic:.13556,skew:0},54:{depth:0,height:.64444,italic:.13556,skew:0},55:{depth:.19444,height:.64444,italic:.13556,skew:0},56:{depth:0,height:.64444,italic:.13556,skew:0},567:{depth:.19444,height:.43056,italic:.03736,skew:0},57:{depth:0,height:.64444,italic:.13556,skew:0},58:{depth:0,height:.43056,italic:.0582,skew:0},59:{depth:.19444,height:.43056,italic:.0582,skew:0},61:{depth:-.13313,height:.36687,italic:.06616,skew:0},63:{depth:0,height:.69444,italic:.1225,skew:0},64:{depth:0,height:.69444,italic:.09597,skew:0},65:{depth:0,height:.68333,italic:0,skew:0},66:{depth:0,height:.68333,italic:.10257,skew:0},67:{depth:0,height:.68333,italic:.14528,skew:0},68:{depth:0,height:.68333,italic:.09403,skew:0},69:{depth:0,height:.68333,italic:.12028,skew:0},70:{depth:0,height:.68333,italic:.13305,skew:0},71:{depth:0,height:.68333,italic:.08722,skew:0},72:{depth:0,height:.68333,italic:.16389,skew:0},73:{depth:0,height:.68333,italic:.15806,skew:0},74:{depth:0,height:.68333,italic:.14028,skew:0},75:{depth:0,height:.68333,italic:.14528,skew:0},76:{depth:0,height:.68333,italic:0,skew:0},768:{depth:0,height:.69444,italic:0,skew:0},769:{depth:0,height:.69444,italic:.09694,skew:0},77:{depth:0,height:.68333,italic:.16389,skew:0},770:{depth:0,height:.69444,italic:.06646,skew:0},771:{depth:0,height:.66786,italic:.11585,skew:0},772:{depth:0,height:.56167,italic:.10333,skew:0},774:{depth:0,height:.69444,italic:.10806,skew:0},775:{depth:0,height:.66786,italic:.11752,skew:0},776:{depth:0,height:.66786,italic:.10474,skew:0},778:{depth:0,height:.69444,italic:0,skew:0},779:{depth:0,height:.69444,italic:.1225,skew:0},78:{depth:0,height:.68333,italic:.16389,skew:0},780:{depth:0,height:.62847,italic:.08295,skew:0},79:{depth:0,height:.68333,italic:.09403,skew:0},80:{depth:0,height:.68333,italic:.10257,skew:0},81:{depth:.19444,height:.68333,italic:.09403,skew:0},82:{depth:0,height:.68333,italic:.03868,skew:0},8211:{depth:0,height:.43056,italic:.09208,skew:0},8212:{depth:0,height:.43056,italic:.09208,skew:0},8216:{depth:0,height:.69444,italic:.12417,skew:0},8217:{depth:0,height:.69444,italic:.12417,skew:0},8220:{depth:0,height:.69444,italic:.1685,skew:0},8221:{depth:0,height:.69444,italic:.06961,skew:0},83:{depth:0,height:.68333,italic:.11972,skew:0},84:{depth:0,height:.68333,italic:.13305,skew:0},8463:{depth:0,height:.68889,italic:0,skew:0},85:{depth:0,height:.68333,italic:.16389,skew:0},86:{depth:0,height:.68333,italic:.18361,skew:0},87:{depth:0,height:.68333,italic:.18361,skew:0},88:{depth:0,height:.68333,italic:.15806,skew:0},89:{depth:0,height:.68333,italic:.19383,skew:0},90:{depth:0,height:.68333,italic:.14528,skew:0},91:{depth:.25,height:.75,italic:.1875,skew:0},915:{depth:0,height:.68333,italic:.13305,skew:0},916:{depth:0,height:.68333,italic:0,skew:0},920:{depth:0,height:.68333,italic:.09403,skew:0},923:{depth:0,height:.68333,italic:0,skew:0},926:{depth:0,height:.68333,italic:.15294,skew:0},928:{depth:0,height:.68333,italic:.16389,skew:0},93:{depth:.25,height:.75,italic:.10528,skew:0},931:{depth:0,height:.68333,italic:.12028,skew:0},933:{depth:0,height:.68333,italic:.11111,skew:0},934:{depth:0,height:.68333,italic:.05986,skew:0},936:{depth:0,height:.68333,italic:.11111,skew:0},937:{depth:0,height:.68333,italic:.10257,skew:0},94:{depth:0,height:.69444,italic:.06646,skew:0},95:{depth:.31,height:.12056,italic:.09208,skew:0},97:{depth:0,height:.43056,italic:.07671,skew:0},98:{depth:0,height:.69444,italic:.06312,skew:0},99:{depth:0,height:.43056,italic:.05653,skew:0}},"Main-Regular":{32:{depth:-0,height:0,italic:0,skew:0},160:{depth:-0,height:0,italic:0,skew:0},8230:{depth:-0,height:.12,italic:0,skew:0},8773:{depth:-.022,height:.589,italic:0,skew:0},8800:{depth:.215,height:.716,italic:0,skew:0},8942:{depth:.03,height:.9,italic:0,skew:0},8943:{depth:-.19,height:.31,italic:0,skew:0},8945:{depth:-.1,height:.82,italic:0,skew:0},100:{depth:0,height:.69444,italic:0,skew:0},101:{depth:0,height:.43056,italic:0,skew:0},102:{depth:0,height:.69444,italic:.07778,skew:0},10216:{depth:.25,height:.75,italic:0,skew:0},10217:{depth:.25,height:.75,italic:0,skew:0},103:{depth:.19444,height:.43056,italic:.01389,skew:0},104:{depth:0,height:.69444,italic:0,skew:0},105:{depth:0,height:.66786,italic:0,skew:0},106:{depth:.19444,height:.66786,italic:0,skew:0},107:{depth:0,height:.69444,italic:0,skew:0},108:{depth:0,height:.69444,italic:0,skew:0},10815:{depth:0,height:.68333,italic:0,skew:0},109:{depth:0,height:.43056,italic:0,skew:0},10927:{depth:.13597,height:.63597,italic:0,skew:0},10928:{depth:.13597,height:.63597,italic:0,skew:0},110:{depth:0,height:.43056,italic:0,skew:0},111:{depth:0,height:.43056,italic:0,skew:0},112:{depth:.19444,height:.43056,italic:0,skew:0},113:{depth:.19444,height:.43056,italic:0,skew:0},114:{depth:0,height:.43056,italic:0,skew:0},115:{depth:0,height:.43056,italic:0,skew:0},116:{depth:0,height:.61508,italic:0,skew:0},117:{depth:0,height:.43056,italic:0,skew:0},118:{depth:0,height:.43056,italic:.01389,skew:0},119:{depth:0,height:.43056,italic:.01389,skew:0},120:{depth:0,height:.43056,italic:0,skew:0},121:{depth:.19444,height:.43056,italic:.01389,skew:0},122:{depth:0,height:.43056,italic:0,skew:0},123:{depth:.25,height:.75,italic:0,skew:0},124:{depth:.25,height:.75,italic:0,skew:0},125:{depth:.25,height:.75,italic:0,skew:0},126:{depth:.35,height:.31786,italic:0,skew:0},168:{depth:0,height:.66786,italic:0,skew:0},172:{depth:0,height:.43056,italic:0,skew:0},175:{depth:0,height:.56778,italic:0,skew:0},176:{depth:0,height:.69444,italic:0,skew:0},177:{depth:.08333,height:.58333,italic:0,skew:0},180:{depth:0,height:.69444,italic:0,skew:0},215:{depth:.08333,height:.58333,italic:0,skew:0},247:{depth:.08333,height:.58333,italic:0,skew:0},305:{depth:0,height:.43056,italic:0,skew:0},33:{depth:0,height:.69444,italic:0,skew:0},34:{depth:0,height:.69444,italic:0,skew:0},35:{depth:.19444,height:.69444,italic:0,skew:0},36:{depth:.05556,height:.75,italic:0,skew:0},37:{depth:.05556,height:.75,italic:0,skew:0},38:{depth:0,height:.69444,italic:0,skew:0},39:{depth:0,height:.69444,italic:0,skew:0},40:{depth:.25,height:.75,italic:0,skew:0},41:{depth:.25,height:.75,italic:0,skew:0},42:{depth:0,height:.75,italic:0,skew:0},43:{depth:.08333,height:.58333,italic:0,skew:0},44:{depth:.19444,height:.10556,italic:0,skew:0},45:{depth:0,height:.43056,italic:0,skew:0},46:{depth:0,height:.10556,italic:0,skew:0},47:{depth:.25,height:.75,italic:0,skew:0},48:{depth:0,height:.64444,italic:0,skew:0},49:{depth:0,height:.64444,italic:0,skew:0},50:{depth:0,height:.64444,italic:0,skew:0},51:{depth:0,height:.64444,italic:0,skew:0},52:{depth:0,height:.64444,italic:0,skew:0},53:{depth:0,height:.64444,italic:0,skew:0},54:{depth:0,height:.64444,italic:0,skew:0},55:{depth:0,height:.64444,italic:0,skew:0},56:{depth:0,height:.64444,italic:0,skew:0},567:{depth:.19444,height:.43056,italic:0,skew:0},57:{depth:0,height:.64444,italic:0,skew:0},58:{depth:0,height:.43056,italic:0,skew:0},59:{depth:.19444,height:.43056,italic:0,skew:0},60:{depth:.0391,height:.5391,italic:0,skew:0},61:{depth:-.13313,height:.36687,italic:0,skew:0},62:{depth:.0391,height:.5391,italic:0,skew:0},63:{depth:0,height:.69444,italic:0,skew:0},64:{depth:0,height:.69444,italic:0,skew:0},65:{depth:0,height:.68333,italic:0,skew:0},66:{depth:0,height:.68333,italic:0,skew:0},67:{depth:0,height:.68333,italic:0,skew:0},68:{depth:0,height:.68333,italic:0,skew:0},69:{depth:0,height:.68333,italic:0,skew:0},70:{depth:0,height:.68333,italic:0,skew:0},71:{depth:0,height:.68333,italic:0,skew:0},710:{depth:0,height:.69444,italic:0,skew:0},711:{depth:0,height:.62847,italic:0,skew:0},713:{depth:0,height:.56778,italic:0,skew:0},714:{depth:0,height:.69444,italic:0,skew:0},715:{depth:0,height:.69444,italic:0,skew:0},72:{depth:0,height:.68333,italic:0,skew:0},728:{depth:0,height:.69444,italic:0,skew:0},729:{depth:0,height:.66786,italic:0,skew:0},73:{depth:0,height:.68333,italic:0,skew:0},730:{depth:0,height:.69444,italic:0,skew:0},732:{depth:0,height:.66786,italic:0,skew:0},74:{depth:0,height:.68333,italic:0,skew:0},75:{depth:0,height:.68333,italic:0,skew:0},76:{depth:0,height:.68333,italic:0,skew:0},768:{depth:0,height:.69444,italic:0,skew:0},769:{depth:0,height:.69444,italic:0,skew:0},77:{depth:0,height:.68333,italic:0,skew:0},770:{depth:0,height:.69444,italic:0,skew:0},771:{depth:0,height:.66786,italic:0,skew:0},772:{depth:0,height:.56778,italic:0,skew:0},774:{depth:0,height:.69444,italic:0,skew:0},775:{depth:0,height:.66786,italic:0,skew:0},776:{depth:0,height:.66786,italic:0,skew:0},778:{depth:0,height:.69444,italic:0,skew:0},779:{depth:0,height:.69444,italic:0,skew:0},78:{depth:0,height:.68333,italic:0,skew:0},780:{depth:0,height:.62847,italic:0,skew:0},79:{depth:0,height:.68333,italic:0,skew:0},80:{depth:0,height:.68333,italic:0,skew:0},81:{depth:.19444,height:.68333,italic:0,skew:0},82:{depth:0,height:.68333,italic:0,skew:0},8211:{depth:0,height:.43056,italic:.02778,skew:0},8212:{depth:0,height:.43056,italic:.02778,skew:0},8216:{depth:0,height:.69444,italic:0,skew:0},8217:{depth:0,height:.69444,italic:0,skew:0},8220:{depth:0,height:.69444,italic:0,skew:0},8221:{depth:0,height:.69444,italic:0,skew:0},8224:{depth:.19444,height:.69444,italic:0,skew:0},8225:{depth:.19444,height:.69444,italic:0,skew:0},824:{depth:.19444,height:.69444,italic:0,skew:0},8242:{depth:0,height:.55556,italic:0,skew:0},83:{depth:0,height:.68333,italic:0,skew:0},84:{depth:0,height:.68333,italic:0,skew:0},8407:{depth:0,height:.71444,italic:.15382,skew:0},8463:{depth:0,height:.68889,italic:0,skew:0},8465:{depth:0,height:.69444,italic:0,skew:0},8467:{depth:0,height:.69444,italic:0,skew:.11111},8472:{depth:.19444,height:.43056,italic:0,skew:.11111},8476:{depth:0,height:.69444,italic:0,skew:0},85:{depth:0,height:.68333,italic:0,skew:0},8501:{depth:0,height:.69444,italic:0,skew:0},8592:{depth:-.13313,height:.36687,italic:0,skew:0},8593:{depth:.19444,height:.69444,italic:0,skew:0},8594:{depth:-.13313,height:.36687,italic:0,skew:0},8595:{depth:.19444,height:.69444,italic:0,skew:0},8596:{depth:-.13313,height:.36687,italic:0,skew:0},8597:{depth:.25,height:.75,italic:0,skew:0},8598:{depth:.19444,height:.69444,italic:0,skew:0},8599:{depth:.19444,height:.69444,italic:0,skew:0},86:{depth:0,height:.68333,italic:.01389,skew:0},8600:{depth:.19444,height:.69444,italic:0,skew:0},8601:{depth:.19444,height:.69444,italic:0,skew:0},8636:{depth:-.13313,height:.36687,italic:0,skew:0},8637:{depth:-.13313,height:.36687,italic:0,skew:0},8640:{depth:-.13313,height:.36687,italic:0,skew:0},8641:{depth:-.13313,height:.36687,italic:0,skew:0},8656:{depth:-.13313,height:.36687,italic:0,skew:0},8657:{depth:.19444,height:.69444,italic:0,skew:0},8658:{depth:-.13313,height:.36687,italic:0,skew:0},8659:{depth:.19444,height:.69444,italic:0,skew:0},8660:{depth:-.13313,height:.36687,italic:0,skew:0},8661:{depth:.25,height:.75,italic:0,skew:0},87:{depth:0,height:.68333,italic:.01389,skew:0},8704:{depth:0,height:.69444,italic:0,skew:0},8706:{depth:0,height:.69444,italic:.05556,skew:.08334},8707:{depth:0,height:.69444,italic:0,skew:0},8709:{depth:.05556,height:.75,italic:0,skew:0},8711:{depth:0,height:.68333,italic:0,skew:0},8712:{depth:.0391,height:.5391,italic:0,skew:0},8715:{depth:.0391,height:.5391,italic:0,skew:0},8722:{depth:.08333,height:.58333,italic:0,skew:0},8723:{depth:.08333,height:.58333,italic:0,skew:0},8725:{depth:.25,height:.75,italic:0,skew:0},8726:{depth:.25,height:.75,italic:0,skew:0},8727:{depth:-.03472,height:.46528,italic:0,skew:0},8728:{depth:-.05555,height:.44445,italic:0,skew:0},8729:{depth:-.05555,height:.44445,italic:0,skew:0},8730:{depth:.2,height:.8,italic:0,skew:0},8733:{depth:0,height:.43056,italic:0,skew:0},8734:{depth:0,height:.43056,italic:0,skew:0},8736:{depth:0,height:.69224,italic:0,skew:0},8739:{depth:.25,height:.75,italic:0,skew:0},8741:{depth:.25,height:.75,italic:0,skew:0},8743:{depth:0,height:.55556,italic:0,skew:0},8744:{depth:0,height:.55556,italic:0,skew:0},8745:{depth:0,height:.55556,italic:0,skew:0},8746:{depth:0,height:.55556,italic:0,skew:0},8747:{depth:.19444,height:.69444,italic:.11111,skew:0},8764:{depth:-.13313,height:.36687,italic:0,skew:0},8768:{depth:.19444,height:.69444,italic:0,skew:0},8771:{depth:-.03625,height:.46375,italic:0,skew:0},8776:{depth:-.01688,height:.48312,italic:0,skew:0},8781:{depth:-.03625,height:.46375,italic:0,skew:0},88:{depth:0,height:.68333,italic:0,skew:0},8801:{depth:-.03625,height:.46375,italic:0,skew:0},8804:{depth:.13597,height:.63597,italic:0,skew:0},8805:{depth:.13597,height:.63597,italic:0,skew:0},8810:{depth:.0391,height:.5391,italic:0,skew:0},8811:{depth:.0391,height:.5391,italic:0,skew:0},8826:{depth:.0391,height:.5391,italic:0,skew:0},8827:{depth:.0391,height:.5391,italic:0,skew:0},8834:{depth:.0391,height:.5391,italic:0,skew:0},8835:{depth:.0391,height:.5391,italic:0,skew:0},8838:{depth:.13597,height:.63597,italic:0,skew:0},8839:{depth:.13597,height:.63597,italic:0,skew:0},8846:{depth:0,height:.55556,italic:0,skew:0},8849:{depth:.13597,height:.63597,italic:0,skew:0},8850:{depth:.13597,height:.63597,italic:0,skew:0},8851:{depth:0,height:.55556,italic:0,skew:0},8852:{depth:0,height:.55556,italic:0,skew:0},8853:{depth:.08333,height:.58333,italic:0,skew:0},8854:{depth:.08333,height:.58333,italic:0,skew:0},8855:{depth:.08333,height:.58333,italic:0,skew:0},8856:{depth:.08333,height:.58333,italic:0,skew:0},8857:{depth:.08333,height:.58333,italic:0,skew:0},8866:{depth:0,height:.69444,italic:0,skew:0},8867:{depth:0,height:.69444,italic:0,skew:0},8868:{depth:0,height:.69444,italic:0,skew:0},8869:{depth:0,height:.69444,italic:0,skew:0},89:{depth:0,height:.68333,italic:.025,skew:0},8900:{depth:-.05555,height:.44445,italic:0,skew:0},8901:{depth:-.05555,height:.44445,italic:0,skew:0},8902:{depth:-.03472,height:.46528,italic:0,skew:0},8968:{depth:.25,height:.75,italic:0,skew:0},8969:{depth:.25,height:.75,italic:0,skew:0},8970:{depth:.25,height:.75,italic:0,skew:0},8971:{depth:.25,height:.75,italic:0,skew:0},8994:{depth:-.14236,height:.35764,italic:0,skew:0},8995:{depth:-.14236,height:.35764,italic:0,skew:0},90:{depth:0,height:.68333,italic:0,skew:0},91:{depth:.25,height:.75,italic:0,skew:0},915:{depth:0,height:.68333,italic:0,skew:0},916:{depth:0,height:.68333,italic:0,skew:0},92:{depth:.25,height:.75,italic:0,skew:0},920:{depth:0,height:.68333,italic:0,skew:0},923:{depth:0,height:.68333,italic:0,skew:0},926:{depth:0,height:.68333,italic:0,skew:0},928:{depth:0,height:.68333,italic:0,skew:0},93:{depth:.25,height:.75,italic:0,skew:0},931:{depth:0,height:.68333,italic:0,skew:0},933:{depth:0,height:.68333,italic:0,skew:0},934:{depth:0,height:.68333,italic:0,skew:0},936:{depth:0,height:.68333,italic:0,skew:0},937:{depth:0,height:.68333,italic:0,skew:0},94:{depth:0,height:.69444,italic:0,skew:0},95:{depth:.31,height:.12056,italic:.02778,skew:0},96:{depth:0,height:.69444,italic:0,skew:0},9651:{depth:.19444,height:.69444,italic:0,skew:0},9657:{depth:-.03472,height:.46528,italic:0,skew:0},9661:{depth:.19444,height:.69444,italic:0,skew:0},9667:{depth:-.03472,height:.46528,italic:0,skew:0},97:{depth:0,height:.43056,italic:0,skew:0},9711:{depth:.19444,height:.69444,italic:0,skew:0},98:{depth:0,height:.69444,italic:0,skew:0},9824:{depth:.12963,height:.69444,italic:0,skew:0},9825:{depth:.12963,height:.69444,italic:0,skew:0},9826:{depth:.12963,height:.69444,italic:0,skew:0},9827:{depth:.12963,height:.69444,italic:0,skew:0},9837:{depth:0,height:.75,italic:0,skew:0},9838:{depth:.19444,height:.69444,italic:0,skew:0},9839:{depth:.19444,height:.69444,italic:0,skew:0},99:{depth:0,height:.43056,italic:0,skew:0}},"Math-BoldItalic":{100:{depth:0,height:.69444,italic:0,skew:0},1009:{depth:.19444,height:.44444,italic:0,skew:0},101:{depth:0,height:.44444,italic:0,skew:0},1013:{depth:0,height:.44444,italic:0,skew:0},102:{depth:.19444,height:.69444,italic:.11042,skew:0},103:{depth:.19444,height:.44444,italic:.03704,skew:0},104:{depth:0,height:.69444,italic:0,skew:0},105:{depth:0,height:.69326,italic:0,skew:0},106:{depth:.19444,height:.69326,italic:.0622,skew:0},107:{depth:0,height:.69444,italic:.01852,skew:0},108:{depth:0,height:.69444,italic:.0088,skew:0},109:{depth:0,height:.44444,italic:0,skew:0},110:{depth:0,height:.44444,italic:0,skew:0},111:{depth:0,height:.44444,italic:0,skew:0},112:{depth:.19444,height:.44444,italic:0,skew:0},113:{depth:.19444,height:.44444,italic:.03704,skew:0},114:{depth:0,height:.44444,italic:.03194,skew:0},115:{depth:0,height:.44444,italic:0,skew:0},116:{depth:0,height:.63492,italic:0,skew:0},117:{depth:0,height:.44444,italic:0,skew:0},118:{depth:0,height:.44444,italic:.03704,skew:0},119:{depth:0,height:.44444,italic:.02778,skew:0},120:{depth:0,height:.44444,italic:0,skew:0},121:{depth:.19444,height:.44444,italic:.03704,skew:0},122:{depth:0,height:.44444,italic:.04213,skew:0},47:{depth:.19444,height:.69444,italic:0,skew:0},65:{depth:0,height:.68611,italic:0,skew:0},66:{depth:0,height:.68611,italic:.04835,skew:0},67:{depth:0,height:.68611,italic:.06979,skew:0},68:{depth:0,height:.68611,italic:.03194,skew:0},69:{depth:0,height:.68611,italic:.05451,skew:0},70:{depth:0,height:.68611,italic:.15972,skew:0},71:{depth:0,height:.68611,italic:0,skew:0},72:{depth:0,height:.68611,italic:.08229,skew:0},73:{depth:0,height:.68611,italic:.07778,skew:0},74:{depth:0,height:.68611,italic:.10069,skew:0},75:{depth:0,height:.68611,italic:.06979,skew:0},76:{depth:0,height:.68611,italic:0,skew:0},77:{depth:0,height:.68611,italic:.11424,skew:0},78:{depth:0,height:.68611,italic:.11424,skew:0},79:{depth:0,height:.68611,italic:.03194,skew:0},80:{depth:0,height:.68611,italic:.15972,skew:0},81:{depth:.19444,height:.68611,italic:0,skew:0},82:{depth:0,height:.68611,italic:.00421,skew:0},83:{depth:0,height:.68611,italic:.05382,skew:0},84:{depth:0,height:.68611,italic:.15972,skew:0},85:{depth:0,height:.68611,italic:.11424,skew:0},86:{depth:0,height:.68611,italic:.25555,skew:0},87:{depth:0,height:.68611,italic:.15972,skew:0},88:{depth:0,height:.68611,italic:.07778,skew:0},89:{depth:0,height:.68611,italic:.25555,skew:0},90:{depth:0,height:.68611,italic:.06979,skew:0},915:{depth:0,height:.68611,italic:.15972,skew:0},916:{depth:0,height:.68611,italic:0,skew:0},920:{depth:0,height:.68611,italic:.03194,skew:0},923:{depth:0,height:.68611,italic:0,skew:0},926:{depth:0,height:.68611,italic:.07458,skew:0},928:{depth:0,height:.68611,italic:.08229,skew:0},931:{depth:0,height:.68611,italic:.05451,skew:0},933:{depth:0,height:.68611,italic:.15972,skew:0},934:{depth:0,height:.68611,italic:0,skew:0},936:{depth:0,height:.68611,italic:.11653,skew:0},937:{depth:0,height:.68611,italic:.04835,skew:0},945:{depth:0,height:.44444,italic:0,skew:0},946:{depth:.19444,height:.69444,italic:.03403,skew:0},947:{depth:.19444,height:.44444,italic:.06389,skew:0},948:{depth:0,height:.69444,italic:.03819,skew:0},949:{depth:0,height:.44444,italic:0,skew:0},950:{depth:.19444,height:.69444,italic:.06215,skew:0},951:{depth:.19444,height:.44444,italic:.03704,skew:0},952:{depth:0,height:.69444,italic:.03194,skew:0},953:{depth:0,height:.44444,italic:0,skew:0},954:{depth:0,height:.44444,italic:0,skew:0},955:{depth:0,height:.69444,italic:0,skew:0},956:{depth:.19444,height:.44444,italic:0,skew:0},957:{depth:0,height:.44444,italic:.06898,skew:0},958:{depth:.19444,height:.69444,italic:.03021,skew:0},959:{depth:0,height:.44444,italic:0,skew:0},960:{depth:0,height:.44444,italic:.03704,skew:0},961:{depth:.19444,height:.44444,italic:0,skew:0},962:{depth:.09722,height:.44444,italic:.07917,skew:0},963:{depth:0,height:.44444,italic:.03704,skew:0},964:{depth:0,height:.44444,italic:.13472,skew:0},965:{depth:0,height:.44444,italic:.03704,skew:0},966:{depth:.19444,height:.44444,italic:0,skew:0},967:{depth:.19444,height:.44444,italic:0,skew:0},968:{depth:.19444,height:.69444,italic:.03704,skew:0},969:{depth:0,height:.44444,italic:.03704,skew:0},97:{depth:0,height:.44444,italic:0,skew:0},977:{depth:0,height:.69444,italic:0,skew:0},98:{depth:0,height:.69444,italic:0,skew:0},981:{depth:.19444,height:.69444,italic:0,skew:0},982:{depth:0,height:.44444,italic:.03194,skew:0},99:{depth:0,height:.44444,italic:0,skew:0}},"Math-Italic":{100:{depth:0,height:.69444,italic:0,skew:.16667},1009:{depth:.19444,height:.43056,italic:0,skew:.08334},101:{depth:0,height:.43056,italic:0,skew:.05556},1013:{depth:0,height:.43056,italic:0,skew:.05556},102:{depth:.19444,height:.69444,italic:.10764,skew:.16667},103:{depth:.19444,height:.43056,italic:.03588,skew:.02778},104:{depth:0,height:.69444,italic:0,skew:0},105:{depth:0,height:.65952,italic:0,skew:0},106:{depth:.19444,height:.65952,italic:.05724,skew:0},107:{depth:0,height:.69444,italic:.03148,skew:0},108:{depth:0,height:.69444,italic:.01968,skew:.08334},109:{depth:0,height:.43056,italic:0,skew:0},110:{depth:0,height:.43056,italic:0,skew:0},111:{depth:0,height:.43056,italic:0,skew:.05556},112:{depth:.19444,height:.43056,italic:0,skew:.08334},113:{depth:.19444,height:.43056,italic:.03588,skew:.08334},114:{depth:0,height:.43056,italic:.02778,skew:.05556},115:{depth:0,height:.43056,italic:0,skew:.05556},116:{depth:0,height:.61508,italic:0,skew:.08334},117:{depth:0,height:.43056,italic:0,skew:.02778},118:{depth:0,height:.43056,italic:.03588,skew:.02778},119:{depth:0,height:.43056,italic:.02691,skew:.08334},120:{depth:0,height:.43056,italic:0,skew:.02778},121:{depth:.19444,height:.43056,italic:.03588,skew:.05556},122:{depth:0,height:.43056,italic:.04398,skew:.05556},47:{depth:.19444,height:.69444,italic:0,skew:0},65:{depth:0,height:.68333,italic:0,skew:.13889},66:{depth:0,height:.68333,italic:.05017,skew:.08334},67:{depth:0,height:.68333,italic:.07153,skew:.08334},68:{depth:0,height:.68333,italic:.02778,skew:.05556},69:{depth:0,height:.68333,italic:.05764,skew:.08334},70:{depth:0,height:.68333,italic:.13889,skew:.08334},71:{depth:0,height:.68333,italic:0,skew:.08334},72:{depth:0,height:.68333,italic:.08125,skew:.05556},73:{depth:0,height:.68333,italic:.07847,skew:.11111},74:{depth:0,height:.68333,italic:.09618,skew:.16667},75:{depth:0,height:.68333,italic:.07153,skew:.05556},76:{depth:0,height:.68333,italic:0,skew:.02778},77:{depth:0,height:.68333,italic:.10903,skew:.08334},78:{depth:0,height:.68333,italic:.10903,skew:.08334},79:{depth:0,height:.68333,italic:.02778,skew:.08334},80:{depth:0,height:.68333,italic:.13889,skew:.08334},81:{depth:.19444,height:.68333,italic:0,skew:.08334},82:{depth:0,height:.68333,italic:.00773,skew:.08334},83:{depth:0,height:.68333,italic:.05764,skew:.08334},84:{depth:0,height:.68333,italic:.13889,skew:.08334},85:{depth:0,height:.68333,italic:.10903,skew:.02778},86:{depth:0,height:.68333,italic:.22222,skew:0},87:{depth:0,height:.68333,italic:.13889,skew:0},88:{depth:0,height:.68333,italic:.07847,skew:.08334},89:{depth:0,height:.68333,italic:.22222,skew:0},90:{depth:0,height:.68333,italic:.07153,skew:.08334},915:{depth:0,height:.68333,italic:.13889,skew:.08334},916:{depth:0,height:.68333,italic:0,skew:.16667},920:{depth:0,height:.68333,italic:.02778,skew:.08334},923:{depth:0,height:.68333,italic:0,skew:.16667},926:{depth:0,height:.68333,italic:.07569,skew:.08334},928:{depth:0,height:.68333,italic:.08125,skew:.05556},931:{depth:0,height:.68333,italic:.05764,skew:.08334},933:{depth:0,height:.68333,italic:.13889,skew:.05556},934:{depth:0,height:.68333,italic:0,skew:.08334},936:{depth:0,height:.68333,italic:.11,skew:.05556},937:{depth:0,height:.68333,italic:.05017,skew:.08334},945:{depth:0,height:.43056,italic:.0037,skew:.02778},946:{depth:.19444,height:.69444,italic:.05278,skew:.08334},947:{depth:.19444,height:.43056,italic:.05556,skew:0},948:{depth:0,height:.69444,italic:.03785,skew:.05556},949:{depth:0,height:.43056,italic:0,skew:.08334},950:{depth:.19444,height:.69444,italic:.07378,skew:.08334},951:{depth:.19444,height:.43056,italic:.03588,skew:.05556},952:{depth:0,height:.69444,italic:.02778,skew:.08334},953:{depth:0,height:.43056,italic:0,skew:.05556},954:{depth:0,height:.43056,italic:0,skew:0},955:{depth:0,height:.69444,italic:0,skew:0},956:{depth:.19444,height:.43056,italic:0,skew:.02778},957:{depth:0,height:.43056,italic:.06366,skew:.02778},958:{depth:.19444,height:.69444,italic:.04601,skew:.11111},959:{depth:0,height:.43056,italic:0,skew:.05556},960:{depth:0,height:.43056,italic:.03588,skew:0},961:{depth:.19444,height:.43056,italic:0,skew:.08334},962:{depth:.09722,height:.43056,italic:.07986,skew:.08334},963:{depth:0,height:.43056,italic:.03588,skew:0},964:{depth:0,height:.43056,italic:.1132,skew:.02778},965:{depth:0,height:.43056,italic:.03588,skew:.02778},966:{depth:.19444,height:.43056,italic:0,skew:.08334},967:{depth:.19444,height:.43056,italic:0,skew:.05556},968:{depth:.19444,height:.69444,italic:.03588,skew:.11111},969:{depth:0,height:.43056,italic:.03588,skew:0},97:{depth:0,height:.43056,italic:0,skew:0},977:{depth:0,height:.69444,italic:0,skew:.08334},98:{depth:0,height:.69444,italic:0,skew:0},981:{depth:.19444,height:.69444,italic:0,skew:.08334},982:{depth:0,height:.43056,italic:.02778,skew:0},99:{depth:0,height:.43056,italic:0,skew:.05556}},"Math-Regular":{100:{depth:0,height:.69444,italic:0,skew:.16667},1009:{depth:.19444,height:.43056,italic:0,skew:.08334},101:{depth:0,height:.43056,italic:0,skew:.05556},1013:{depth:0,height:.43056,italic:0,skew:.05556},102:{depth:.19444,height:.69444,italic:.10764,skew:.16667},103:{depth:.19444,height:.43056,italic:.03588,skew:.02778},104:{depth:0,height:.69444,italic:0,skew:0},105:{depth:0,height:.65952,italic:0,skew:0},106:{depth:.19444,height:.65952,italic:.05724,skew:0},107:{depth:0,height:.69444,italic:.03148,skew:0},108:{depth:0,height:.69444,italic:.01968,skew:.08334},109:{depth:0,height:.43056,italic:0,skew:0},110:{depth:0,height:.43056,italic:0,skew:0},111:{depth:0,height:.43056,italic:0,skew:.05556},112:{depth:.19444,height:.43056,italic:0,skew:.08334},113:{depth:.19444,height:.43056,italic:.03588,skew:.08334},114:{depth:0,height:.43056,italic:.02778,skew:.05556},115:{depth:0,height:.43056,italic:0,skew:.05556},116:{depth:0,height:.61508,italic:0,skew:.08334},117:{depth:0,height:.43056,italic:0,skew:.02778},118:{depth:0,height:.43056,italic:.03588,skew:.02778},119:{depth:0,height:.43056,italic:.02691,skew:.08334},120:{depth:0,height:.43056,italic:0,skew:.02778},121:{depth:.19444,height:.43056,italic:.03588,skew:.05556},122:{depth:0,height:.43056,italic:.04398,skew:.05556},65:{depth:0,height:.68333,italic:0,skew:.13889},66:{depth:0,height:.68333,italic:.05017,skew:.08334},67:{depth:0,height:.68333,italic:.07153,skew:.08334},68:{depth:0,height:.68333,italic:.02778,skew:.05556},69:{depth:0,height:.68333,italic:.05764,skew:.08334},70:{depth:0,height:.68333,italic:.13889,skew:.08334},71:{depth:0,height:.68333,italic:0,skew:.08334},72:{depth:0,height:.68333,italic:.08125,skew:.05556},73:{depth:0,height:.68333,italic:.07847,skew:.11111},74:{depth:0,height:.68333,italic:.09618,skew:.16667},75:{depth:0,height:.68333,italic:.07153,skew:.05556},76:{depth:0,height:.68333,italic:0,skew:.02778},77:{depth:0,height:.68333,italic:.10903,skew:.08334},78:{depth:0,height:.68333,italic:.10903,skew:.08334},79:{depth:0,height:.68333,italic:.02778,skew:.08334},80:{depth:0,height:.68333,italic:.13889,skew:.08334},81:{depth:.19444,height:.68333,italic:0,skew:.08334},82:{depth:0,height:.68333,italic:.00773,skew:.08334},83:{depth:0,height:.68333,italic:.05764,skew:.08334},84:{depth:0,height:.68333,italic:.13889,skew:.08334},85:{depth:0,height:.68333,italic:.10903,skew:.02778},86:{depth:0,height:.68333,italic:.22222,skew:0},87:{depth:0,height:.68333,italic:.13889,skew:0},88:{depth:0,height:.68333,italic:.07847,skew:.08334},89:{depth:0,height:.68333,italic:.22222,skew:0},90:{depth:0,height:.68333,italic:.07153,skew:.08334},915:{depth:0,height:.68333,italic:.13889,skew:.08334},916:{depth:0,height:.68333,italic:0,skew:.16667},920:{depth:0,height:.68333,italic:.02778,skew:.08334},923:{depth:0,height:.68333,italic:0,skew:.16667},926:{depth:0,height:.68333,italic:.07569,skew:.08334},928:{depth:0,height:.68333,italic:.08125,skew:.05556},931:{depth:0,height:.68333,italic:.05764,skew:.08334},933:{depth:0,height:.68333,italic:.13889,skew:.05556},934:{depth:0,height:.68333,italic:0,skew:.08334},936:{depth:0,height:.68333,italic:.11,skew:.05556},937:{depth:0,height:.68333,italic:.05017,skew:.08334},945:{depth:0,height:.43056,italic:.0037,skew:.02778},946:{depth:.19444,height:.69444,italic:.05278,skew:.08334},947:{depth:.19444,height:.43056,italic:.05556,skew:0},948:{depth:0,height:.69444,italic:.03785,skew:.05556},949:{depth:0,height:.43056,italic:0,skew:.08334},950:{depth:.19444,height:.69444,italic:.07378,skew:.08334},951:{depth:.19444,height:.43056,italic:.03588,skew:.05556},952:{depth:0,height:.69444,italic:.02778,skew:.08334},953:{depth:0,height:.43056,italic:0,skew:.05556},954:{depth:0,height:.43056,italic:0,skew:0},955:{depth:0,height:.69444,italic:0,skew:0},956:{depth:.19444,height:.43056,italic:0,skew:.02778},957:{depth:0,height:.43056,italic:.06366,skew:.02778},958:{depth:.19444,height:.69444,italic:.04601,skew:.11111},959:{depth:0,height:.43056,italic:0,skew:.05556},960:{depth:0,height:.43056,italic:.03588,skew:0},961:{depth:.19444,height:.43056,italic:0,skew:.08334},962:{depth:.09722,height:.43056,italic:.07986,skew:.08334},963:{depth:0,height:.43056,italic:.03588,skew:0},964:{depth:0,height:.43056,italic:.1132,skew:.02778},965:{depth:0,height:.43056,italic:.03588,skew:.02778},966:{depth:.19444,height:.43056,italic:0,skew:.08334},967:{depth:.19444,height:.43056,italic:0,skew:.05556},968:{depth:.19444,height:.69444,italic:.03588,skew:.11111},969:{depth:0,height:.43056,italic:.03588,skew:0},97:{depth:0,height:.43056,italic:0,skew:0},977:{depth:0,height:.69444,italic:0,skew:.08334},98:{depth:0,height:.69444,italic:0,skew:0},981:{depth:.19444,height:.69444,italic:0,skew:.08334},982:{depth:0,height:.43056,italic:.02778,skew:0},99:{depth:0,height:.43056,italic:0,skew:.05556}},"Size1-Regular":{8748:{depth:.306,height:.805,italic:.19445,skew:0},8749:{depth:.306,height:.805,italic:.19445,skew:0},10216:{depth:.35001,height:.85,italic:0,skew:0},10217:{depth:.35001,height:.85,italic:0,skew:0},10752:{depth:.25001,height:.75,italic:0,skew:0},10753:{depth:.25001,height:.75,italic:0,skew:0},10754:{depth:.25001,height:.75,italic:0,skew:0},10756:{depth:.25001,height:.75,italic:0,skew:0},10758:{depth:.25001,height:.75,italic:0,skew:0},123:{depth:.35001,height:.85,italic:0,skew:0},125:{depth:.35001,height:.85,italic:0,skew:0},40:{depth:.35001,height:.85,italic:0,skew:0},41:{depth:.35001,height:.85,italic:0,skew:0},47:{depth:.35001,height:.85,italic:0,skew:0},710:{depth:0,height:.72222,italic:0,skew:0},732:{depth:0,height:.72222,italic:0,skew:0},770:{depth:0,height:.72222,italic:0,skew:0},771:{depth:0,height:.72222,italic:0,skew:0},8214:{depth:-99e-5,height:.601,italic:0,skew:0},8593:{depth:1e-5,height:.6,italic:0,skew:0},8595:{depth:1e-5,height:.6,italic:0,skew:0},8657:{depth:1e-5,height:.6,italic:0,skew:0},8659:{depth:1e-5,height:.6,italic:0,skew:0},8719:{depth:.25001,height:.75,italic:0,skew:0},8720:{depth:.25001,height:.75,italic:0,skew:0},8721:{depth:.25001,height:.75,italic:0,skew:0},8730:{depth:.35001,height:.85,italic:0,skew:0},8739:{depth:-.00599,height:.606,italic:0,skew:0},8741:{depth:-.00599,height:.606,italic:0,skew:0},8747:{depth:.30612,height:.805,italic:.19445,skew:0},8750:{depth:.30612,height:.805,italic:.19445,skew:0},8896:{depth:.25001,height:.75,italic:0,skew:0},8897:{depth:.25001,height:.75,italic:0,skew:0},8898:{depth:.25001,height:.75,italic:0,skew:0},8899:{depth:.25001,height:.75,italic:0,skew:0},8968:{depth:.35001,height:.85,italic:0,skew:0},8969:{depth:.35001,height:.85,italic:0,skew:0},8970:{depth:.35001,height:.85,italic:0,skew:0},8971:{depth:.35001,height:.85,italic:0,skew:0},91:{depth:.35001,height:.85,italic:0,skew:0},9168:{depth:-99e-5,height:.601,italic:0,skew:0},92:{depth:.35001,height:.85,italic:0,skew:0},93:{depth:.35001,height:.85,italic:0,skew:0}},"Size2-Regular":{8748:{depth:.862,height:1.36,italic:.44445,skew:0},8749:{depth:.862,height:1.36,italic:.44445,skew:0},10216:{depth:.65002,height:1.15,italic:0,skew:0},10217:{depth:.65002,height:1.15,italic:0,skew:0},10752:{depth:.55001,height:1.05,italic:0,skew:0},10753:{depth:.55001,height:1.05,italic:0,skew:0},10754:{depth:.55001,height:1.05,italic:0,skew:0},10756:{depth:.55001,height:1.05,italic:0,skew:0},10758:{depth:.55001,height:1.05,italic:0,skew:0},123:{depth:.65002,height:1.15,italic:0,skew:0},125:{depth:.65002,height:1.15,italic:0,skew:0},40:{depth:.65002,height:1.15,italic:0,skew:0},41:{depth:.65002,height:1.15,italic:0,skew:0},47:{depth:.65002,height:1.15,italic:0,skew:0},710:{depth:0,height:.75,italic:0,skew:0},732:{depth:0,height:.75,italic:0,skew:0},770:{depth:0,height:.75,italic:0,skew:0},771:{depth:0,height:.75,italic:0,skew:0},8719:{depth:.55001,height:1.05,italic:0,skew:0},8720:{depth:.55001,height:1.05,italic:0,skew:0},8721:{depth:.55001,height:1.05,italic:0,skew:0},8730:{depth:.65002,height:1.15,italic:0,skew:0},8747:{depth:.86225,height:1.36,italic:.44445,skew:0},8750:{depth:.86225,height:1.36,italic:.44445,skew:0},8896:{depth:.55001,height:1.05,italic:0,skew:0},8897:{depth:.55001,height:1.05,italic:0,skew:0},8898:{depth:.55001,height:1.05,italic:0,skew:0},8899:{depth:.55001,height:1.05,italic:0,skew:0},8968:{depth:.65002,height:1.15,italic:0,skew:0},8969:{depth:.65002,height:1.15,italic:0,skew:0},8970:{depth:.65002,height:1.15,italic:0,skew:0},8971:{depth:.65002,height:1.15,italic:0,skew:0},91:{depth:.65002,height:1.15,italic:0,skew:0},92:{depth:.65002,height:1.15,italic:0,skew:0},93:{depth:.65002,height:1.15,italic:0,skew:0}},"Size3-Regular":{10216:{depth:.95003,height:1.45,italic:0,skew:0},10217:{depth:.95003,height:1.45,italic:0,skew:0},123:{depth:.95003,height:1.45,italic:0,skew:0},125:{depth:.95003,height:1.45,italic:0,skew:0},40:{depth:.95003,height:1.45,italic:0,skew:0},41:{depth:.95003,height:1.45,italic:0,skew:0},47:{depth:.95003,height:1.45,italic:0,skew:0},710:{depth:0,height:.75,italic:0,skew:0},732:{depth:0,height:.75,italic:0,skew:0},770:{depth:0,height:.75,italic:0,skew:0},771:{depth:0,height:.75,italic:0,skew:0},8730:{depth:.95003,height:1.45,italic:0,skew:0},8968:{depth:.95003,height:1.45,italic:0,skew:0},8969:{depth:.95003,height:1.45,italic:0,skew:0},8970:{depth:.95003,height:1.45,italic:0,skew:0},8971:{depth:.95003,height:1.45,italic:0,skew:0},91:{depth:.95003,height:1.45,italic:0,skew:0},92:{depth:.95003,height:1.45,italic:0,skew:0},93:{depth:.95003,height:1.45,italic:0,skew:0}},"Size4-Regular":{10216:{depth:1.25003,height:1.75,italic:0,skew:0},10217:{depth:1.25003,height:1.75,italic:0,skew:0},123:{depth:1.25003,height:1.75,italic:0,skew:0},125:{depth:1.25003,height:1.75,italic:0,skew:0},40:{depth:1.25003,height:1.75,italic:0,skew:0},41:{depth:1.25003,height:1.75,italic:0,skew:0},47:{depth:1.25003,height:1.75,italic:0,skew:0},57344:{depth:-.00499,height:.605,italic:0,skew:0},57345:{depth:-.00499,height:.605,italic:0,skew:0},57680:{depth:0,height:.12,italic:0,skew:0},57681:{depth:0,height:.12,italic:0,skew:0},57682:{depth:0,height:.12,italic:0,skew:0},57683:{depth:0,height:.12,italic:0,skew:0},710:{depth:0,height:.825,italic:0,skew:0},732:{depth:0,height:.825,italic:0,skew:0},770:{depth:0,height:.825,italic:0,skew:0},771:{depth:0,height:.825,italic:0,skew:0},8730:{depth:1.25003,height:1.75,italic:0,skew:0},8968:{depth:1.25003,height:1.75,italic:0,skew:0},8969:{depth:1.25003,height:1.75,italic:0,skew:0},8970:{depth:1.25003,height:1.75,italic:0,skew:0},8971:{depth:1.25003,height:1.75,italic:0,skew:0},91:{depth:1.25003,height:1.75,italic:0,skew:0},9115:{depth:.64502,height:1.155,italic:0,skew:0},9116:{depth:1e-5,height:.6,italic:0,skew:0},9117:{depth:.64502,height:1.155,italic:0,skew:0},9118:{depth:.64502,height:1.155,italic:0,skew:0},9119:{depth:1e-5,height:.6,italic:0,skew:0},9120:{depth:.64502,height:1.155,italic:0,skew:0},9121:{depth:.64502,height:1.155,italic:0,skew:0},9122:{depth:-99e-5,height:.601,italic:0,skew:0},9123:{depth:.64502,height:1.155,italic:0,skew:0},9124:{depth:.64502,height:1.155,italic:0,skew:0},9125:{depth:-99e-5,height:.601,italic:0,skew:0},9126:{depth:.64502,height:1.155,italic:0,skew:0},9127:{depth:1e-5,height:.9,italic:0,skew:0},9128:{depth:.65002,height:1.15,italic:0,skew:0},9129:{depth:.90001,height:0,italic:0,skew:0},9130:{depth:0,height:.3,italic:0,skew:0},9131:{depth:1e-5,height:.9,italic:0,skew:0},9132:{depth:.65002,height:1.15,italic:0,skew:0},9133:{depth:.90001,height:0,italic:0,skew:0},9143:{depth:.88502,height:.915,italic:0,skew:0},92:{depth:1.25003,height:1.75,italic:0,skew:0},93:{depth:1.25003,height:1.75,italic:0,skew:0}}}; +var K=function(e,t){return X[t][e.charCodeAt(0)]};t.exports={metrics:H,getCharacterMetrics:K}},{"./Style":6}],12:[function(e,t,i){var h=e("./utils");var a=e("./ParseError");var s={"\\sqrt":{numArgs:1,numOptionalArgs:1,handler:function(e,t,i,h){if(t!=null){throw new a("Optional arguments to \\sqrt aren't supported yet",this.lexer,h[1]-1)}return{type:"sqrt",body:i}}},"\\text":{numArgs:1,argTypes:["text"],greediness:2,handler:function(e,t){var i;if(t.type==="ordgroup"){i=t.value}else{i=[t]}return{type:"text",body:i}}},"\\color":{numArgs:2,allowedInText:true,argTypes:["color","original"],handler:function(e,t,i){var h;if(i.type==="ordgroup"){h=i.value}else{h=[i]}return{type:"color",color:t.value,value:h}}},"\\overline":{numArgs:1,handler:function(e,t){return{type:"overline",body:t}}},"\\rule":{numArgs:2,numOptionalArgs:1,argTypes:["size","size","size"],handler:function(e,t,i,h){return{type:"rule",shift:t&&t.value,width:i.value,height:h.value}}},"\\KaTeX":{numArgs:0,handler:function(e){return{type:"katex"}}}};var r={"\\bigl":{type:"open",size:1},"\\Bigl":{type:"open",size:2},"\\biggl":{type:"open",size:3},"\\Biggl":{type:"open",size:4},"\\bigr":{type:"close",size:1},"\\Bigr":{type:"close",size:2},"\\biggr":{type:"close",size:3},"\\Biggr":{type:"close",size:4},"\\bigm":{type:"rel",size:1},"\\Bigm":{type:"rel",size:2},"\\biggm":{type:"rel",size:3},"\\Biggm":{type:"rel",size:4},"\\big":{type:"textord",size:1},"\\Big":{type:"textord",size:2},"\\bigg":{type:"textord",size:3},"\\Bigg":{type:"textord",size:4}};var l=["(",")","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\\lceil","\\rceil","<",">","\\langle","\\rangle","/","\\backslash","|","\\vert","\\|","\\Vert","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."];var p=[{funcs:["\\blue","\\orange","\\pink","\\red","\\green","\\gray","\\purple"],data:{numArgs:1,allowedInText:true,handler:function(e,t){var i;if(t.type==="ordgroup"){i=t.value}else{i=[t]}return{type:"color",color:"katex-"+e.slice(1),value:i}}}},{funcs:["\\arcsin","\\arccos","\\arctan","\\arg","\\cos","\\cosh","\\cot","\\coth","\\csc","\\deg","\\dim","\\exp","\\hom","\\ker","\\lg","\\ln","\\log","\\sec","\\sin","\\sinh","\\tan","\\tanh"],data:{numArgs:0,handler:function(e){return{type:"op",limits:false,symbol:false,body:e}}}},{funcs:["\\det","\\gcd","\\inf","\\lim","\\liminf","\\limsup","\\max","\\min","\\Pr","\\sup"],data:{numArgs:0,handler:function(e){return{type:"op",limits:true,symbol:false,body:e}}}},{funcs:["\\int","\\iint","\\iiint","\\oint"],data:{numArgs:0,handler:function(e){return{type:"op",limits:false,symbol:true,body:e}}}},{funcs:["\\coprod","\\bigvee","\\bigwedge","\\biguplus","\\bigcap","\\bigcup","\\intop","\\prod","\\sum","\\bigotimes","\\bigoplus","\\bigodot","\\bigsqcup","\\smallint"],data:{numArgs:0,handler:function(e){return{type:"op",limits:true,symbol:true,body:e}}}},{funcs:["\\dfrac","\\frac","\\tfrac","\\dbinom","\\binom","\\tbinom"],data:{numArgs:2,greediness:2,handler:function(e,t,i){var h;var a=null;var s=null;var r="auto";switch(e){case"\\dfrac":case"\\frac":case"\\tfrac":h=true;break;case"\\dbinom":case"\\binom":case"\\tbinom":h=false;a="(";s=")";break;default:throw new Error("Unrecognized genfrac command")}switch(e){case"\\dfrac":case"\\dbinom":r="display";break;case"\\tfrac":case"\\tbinom":r="text";break}return{type:"genfrac",numer:t,denom:i,hasBarLine:h,leftDelim:a,rightDelim:s,size:r}}}},{funcs:["\\llap","\\rlap"],data:{numArgs:1,allowedInText:true,handler:function(e,t){return{type:e.slice(1),body:t}}}},{funcs:["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg","\\left","\\right"],data:{numArgs:1,handler:function(e,t,i){if(!h.contains(l,t.value)){throw new a("Invalid delimiter: '"+t.value+"' after '"+e+"'",this.lexer,i[1])}if(e==="\\left"||e==="\\right"){return{type:"leftright",value:t.value}}else{return{type:"delimsizing",size:r[e].size,delimType:r[e].type,value:t.value}}}}},{funcs:["\\tiny","\\scriptsize","\\footnotesize","\\small","\\normalsize","\\large","\\Large","\\LARGE","\\huge","\\Huge"],data:{numArgs:0}},{funcs:["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],data:{numArgs:0}},{funcs:["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot"],data:{numArgs:1,handler:function(e,t){return{type:"accent",accent:e,base:t}}}},{funcs:["\\over","\\choose"],data:{numArgs:0,handler:function(e){var t;switch(e){case"\\over":t="\\frac";break;case"\\choose":t="\\binom";break;default:throw new Error("Unrecognized infix genfrac command")}return{type:"infix",replaceWith:t}}}}];var n=function(e,t){for(var i=0;i<e.length;i++){s[e[i]]=t}};for(var c=0;c<p.length;c++){n(p[c].funcs,p[c].data)}var o=function(e){if(s[e].greediness===undefined){return 1}else{return s[e].greediness}};for(var d in s){if(s.hasOwnProperty(d)){var g=s[d];s[d]={numArgs:g.numArgs,argTypes:g.argTypes,greediness:g.greediness===undefined?1:g.greediness,allowedInText:g.allowedInText?g.allowedInText:false,numOptionalArgs:g.numOptionalArgs===undefined?0:g.numOptionalArgs,handler:g.handler}}}t.exports={funcs:s,getGreediness:o}},{"./ParseError":4,"./utils":15}],13:[function(e,t,i){var h=e("./Parser");var a=function(e){var t=new h(e);return t.parse()};t.exports=a},{"./Parser":5}],14:[function(e,t,i){var h={math:{"`":{font:"main",group:"textord",replace:"‘"},"\\$":{font:"main",group:"textord",replace:"$"},"\\%":{font:"main",group:"textord",replace:"%"},"\\_":{font:"main",group:"textord",replace:"_"},"\\angle":{font:"main",group:"textord",replace:"∠"},"\\infty":{font:"main",group:"textord",replace:"∞"},"\\prime":{font:"main",group:"textord",replace:"′"},"\\triangle":{font:"main",group:"textord",replace:"â–³"},"\\Gamma":{font:"main",group:"textord",replace:"Γ"},"\\Delta":{font:"main",group:"textord",replace:"Δ"},"\\Theta":{font:"main",group:"textord",replace:"Θ"},"\\Lambda":{font:"main",group:"textord",replace:"Λ"},"\\Xi":{font:"main",group:"textord",replace:"Ξ"},"\\Pi":{font:"main",group:"textord",replace:"Î "},"\\Sigma":{font:"main",group:"textord",replace:"Σ"},"\\Upsilon":{font:"main",group:"textord",replace:"Î¥"},"\\Phi":{font:"main",group:"textord",replace:"Φ"},"\\Psi":{font:"main",group:"textord",replace:"Ψ"},"\\Omega":{font:"main",group:"textord",replace:"Ω"},"\\neg":{font:"main",group:"textord",replace:"¬"},"\\lnot":{font:"main",group:"textord",replace:"¬"},"\\top":{font:"main",group:"textord",replace:"⊤"},"\\bot":{font:"main",group:"textord",replace:"⊥"},"\\emptyset":{font:"main",group:"textord",replace:"∅"},"\\varnothing":{font:"ams",group:"textord",replace:"∅"},"\\alpha":{font:"main",group:"mathord",replace:"α"},"\\beta":{font:"main",group:"mathord",replace:"β"},"\\gamma":{font:"main",group:"mathord",replace:"γ"},"\\delta":{font:"main",group:"mathord",replace:"δ"},"\\epsilon":{font:"main",group:"mathord",replace:"ϵ"},"\\zeta":{font:"main",group:"mathord",replace:"ζ"},"\\eta":{font:"main",group:"mathord",replace:"η"},"\\theta":{font:"main",group:"mathord",replace:"θ"},"\\iota":{font:"main",group:"mathord",replace:"ι"},"\\kappa":{font:"main",group:"mathord",replace:"κ"},"\\lambda":{font:"main",group:"mathord",replace:"λ"},"\\mu":{font:"main",group:"mathord",replace:"μ"},"\\nu":{font:"main",group:"mathord",replace:"ν"},"\\xi":{font:"main",group:"mathord",replace:"ξ"},"\\omicron":{font:"main",group:"mathord",replace:"o"},"\\pi":{font:"main",group:"mathord",replace:"Ï€"},"\\rho":{font:"main",group:"mathord",replace:"Ï"},"\\sigma":{font:"main",group:"mathord",replace:"σ"},"\\tau":{font:"main",group:"mathord",replace:"Ï„"},"\\upsilon":{font:"main",group:"mathord",replace:"Ï…"},"\\phi":{font:"main",group:"mathord",replace:"Ï•"},"\\chi":{font:"main",group:"mathord",replace:"χ"},"\\psi":{font:"main",group:"mathord",replace:"ψ"},"\\omega":{font:"main",group:"mathord",replace:"ω"},"\\varepsilon":{font:"main",group:"mathord",replace:"ε"},"\\vartheta":{font:"main",group:"mathord",replace:"Ï‘"},"\\varpi":{font:"main",group:"mathord",replace:"Ï–"},"\\varrho":{font:"main",group:"mathord",replace:"ϱ"},"\\varsigma":{font:"main",group:"mathord",replace:"Ï‚"},"\\varphi":{font:"main",group:"mathord",replace:"φ"},"*":{font:"main",group:"bin",replace:"∗"},"+":{font:"main",group:"bin"},"-":{font:"main",group:"bin",replace:"−"},"\\cdot":{font:"main",group:"bin",replace:"â‹…"},"\\circ":{font:"main",group:"bin",replace:"∘"},"\\div":{font:"main",group:"bin",replace:"÷"},"\\pm":{font:"main",group:"bin",replace:"±"},"\\times":{font:"main",group:"bin",replace:"×"},"\\cap":{font:"main",group:"bin",replace:"∩"},"\\cup":{font:"main",group:"bin",replace:"∪"},"\\setminus":{font:"main",group:"bin",replace:"∖"},"\\land":{font:"main",group:"bin",replace:"∧"},"\\lor":{font:"main",group:"bin",replace:"∨"},"\\wedge":{font:"main",group:"bin",replace:"∧"},"\\vee":{font:"main",group:"bin",replace:"∨"},"\\surd":{font:"main",group:"textord",replace:"√"},"(":{font:"main",group:"open"},"[":{font:"main",group:"open"},"\\langle":{font:"main",group:"open",replace:"⟨"},"\\lvert":{font:"main",group:"open",replace:"∣"},")":{font:"main",group:"close"},"]":{font:"main",group:"close"},"?":{font:"main",group:"close"},"!":{font:"main",group:"close"},"\\rangle":{font:"main",group:"close",replace:"⟩"},"\\rvert":{font:"main",group:"close",replace:"∣"},"=":{font:"main",group:"rel"},"<":{font:"main",group:"rel"},">":{font:"main",group:"rel"},":":{font:"main",group:"rel"},"\\approx":{font:"main",group:"rel",replace:"≈"},"\\cong":{font:"main",group:"rel",replace:"≅"},"\\ge":{font:"main",group:"rel",replace:"≥"},"\\geq":{font:"main",group:"rel",replace:"≥"},"\\gets":{font:"main",group:"rel",replace:"â†"},"\\in":{font:"main",group:"rel",replace:"∈"},"\\notin":{font:"main",group:"rel",replace:"∉"},"\\subset":{font:"main",group:"rel",replace:"⊂"},"\\supset":{font:"main",group:"rel",replace:"⊃"},"\\subseteq":{font:"main",group:"rel",replace:"⊆"},"\\supseteq":{font:"main",group:"rel",replace:"⊇"},"\\nsubseteq":{font:"ams",group:"rel",replace:"⊈"},"\\nsupseteq":{font:"ams",group:"rel",replace:"⊉"},"\\models":{font:"main",group:"rel",replace:"⊨"},"\\leftarrow":{font:"main",group:"rel",replace:"â†"},"\\le":{font:"main",group:"rel",replace:"≤"},"\\leq":{font:"main",group:"rel",replace:"≤"},"\\ne":{font:"main",group:"rel",replace:"≠"},"\\neq":{font:"main",group:"rel",replace:"≠"},"\\rightarrow":{font:"main",group:"rel",replace:"→"},"\\to":{font:"main",group:"rel",replace:"→"},"\\ngeq":{font:"ams",group:"rel",replace:"≱"},"\\nleq":{font:"ams",group:"rel",replace:"≰"},"\\!":{font:"main",group:"spacing"},"\\ ":{font:"main",group:"spacing",replace:" "},"~":{font:"main",group:"spacing",replace:" "},"\\,":{font:"main",group:"spacing"},"\\:":{font:"main",group:"spacing"},"\\;":{font:"main",group:"spacing"},"\\enspace":{font:"main",group:"spacing"},"\\qquad":{font:"main",group:"spacing"},"\\quad":{font:"main",group:"spacing"},"\\space":{font:"main",group:"spacing",replace:" "},",":{font:"main",group:"punct"},";":{font:"main",group:"punct"},"\\colon":{font:"main",group:"punct",replace:":"},"\\barwedge":{font:"ams",group:"textord",replace:"⊼"},"\\veebar":{font:"ams",group:"textord",replace:"⊻"},"\\odot":{font:"main",group:"textord",replace:"⊙"},"\\oplus":{font:"main",group:"textord",replace:"⊕"},"\\otimes":{font:"main",group:"textord",replace:"⊗"},"\\partial":{font:"main",group:"textord",replace:"∂"},"\\oslash":{font:"main",group:"textord",replace:"⊘"},"\\circledcirc":{font:"ams",group:"textord",replace:"⊚"},"\\boxdot":{font:"ams",group:"textord",replace:"⊡"},"\\bigtriangleup":{font:"main",group:"textord",replace:"â–³"},"\\bigtriangledown":{font:"main",group:"textord",replace:"â–½"},"\\dagger":{font:"main",group:"textord",replace:"†"},"\\diamond":{font:"main",group:"textord",replace:"â‹„"},"\\star":{font:"main",group:"textord",replace:"⋆"},"\\triangleleft":{font:"main",group:"textord",replace:"â—ƒ"},"\\triangleright":{font:"main",group:"textord",replace:"â–¹"},"\\{":{font:"main",group:"open",replace:"{"},"\\}":{font:"main",group:"close",replace:"}"},"\\lbrace":{font:"main",group:"open",replace:"{"},"\\rbrace":{font:"main",group:"close",replace:"}"},"\\lbrack":{font:"main",group:"open",replace:"["},"\\rbrack":{font:"main",group:"close",replace:"]"},"\\lfloor":{font:"main",group:"open",replace:"⌊"},"\\rfloor":{font:"main",group:"close",replace:"⌋"},"\\lceil":{font:"main",group:"open",replace:"⌈"},"\\rceil":{font:"main",group:"close",replace:"⌉"},"\\backslash":{font:"main",group:"textord",replace:"\\"},"|":{font:"main",group:"textord",replace:"∣"},"\\vert":{font:"main",group:"textord",replace:"∣"},"\\|":{font:"main",group:"textord",replace:"∥"},"\\Vert":{font:"main",group:"textord",replace:"∥"},"\\uparrow":{font:"main",group:"textord",replace:"↑"},"\\Uparrow":{font:"main",group:"textord",replace:"⇑"},"\\downarrow":{font:"main",group:"textord",replace:"↓"},"\\Downarrow":{font:"main",group:"textord",replace:"⇓"},"\\updownarrow":{font:"main",group:"textord",replace:"↕"},"\\Updownarrow":{font:"main",group:"textord",replace:"⇕"},"\\coprod":{font:"math",group:"op",replace:"âˆ"},"\\bigvee":{font:"math",group:"op",replace:"â‹"},"\\bigwedge":{font:"math",group:"op",replace:"â‹€"},"\\biguplus":{font:"math",group:"op",replace:"⨄"},"\\bigcap":{font:"math",group:"op",replace:"â‹‚"},"\\bigcup":{font:"math",group:"op",replace:"⋃"},"\\int":{font:"math",group:"op",replace:"∫"},"\\intop":{font:"math",group:"op",replace:"∫"},"\\iint":{font:"math",group:"op",replace:"∬"},"\\iiint":{font:"math",group:"op",replace:"âˆ"},"\\prod":{font:"math",group:"op",replace:"âˆ"},"\\sum":{font:"math",group:"op",replace:"∑"},"\\bigotimes":{font:"math",group:"op",replace:"⨂"},"\\bigoplus":{font:"math",group:"op",replace:"â¨"},"\\bigodot":{font:"math",group:"op",replace:"⨀"},"\\oint":{font:"math",group:"op",replace:"∮"},"\\bigsqcup":{font:"math",group:"op",replace:"⨆"},"\\smallint":{font:"math",group:"op",replace:"∫"},"\\ldots":{font:"main",group:"punct",replace:"…"},"\\cdots":{font:"main",group:"inner",replace:"⋯"},"\\ddots":{font:"main",group:"inner",replace:"⋱"},"\\vdots":{font:"main",group:"textord",replace:"â‹®"},"\\acute":{font:"main",group:"accent",replace:"´"},"\\grave":{font:"main",group:"accent",replace:"`"},"\\ddot":{font:"main",group:"accent",replace:"¨"},"\\tilde":{font:"main",group:"accent",replace:"~"},"\\bar":{font:"main",group:"accent",replace:"¯"},"\\breve":{font:"main",group:"accent",replace:"˘"},"\\check":{font:"main",group:"accent",replace:"ˇ"},"\\hat":{font:"main",group:"accent",replace:"^"},"\\vec":{font:"main",group:"accent",replace:"⃗"},"\\dot":{font:"main",group:"accent",replace:"Ë™"}},text:{"\\ ":{font:"main",group:"spacing",replace:" "}," ":{font:"main",group:"spacing",replace:" "},"~":{font:"main",group:"spacing",replace:" "}}};var a='0123456789/@."';for(var s=0;s<a.length;s++){var r=a.charAt(s);h.math[r]={font:"main",group:"textord"}}var l="0123456789`!@*()-=+[]'\";:?/.,";for(var s=0;s<l.length;s++){var r=l.charAt(s);h.text[r]={font:"main",group:"textord"}}var p="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";for(var s=0;s<p.length;s++){var r=p.charAt(s);h.math[r]={font:"main",group:"mathord"};h.text[r]={font:"main",group:"textord"}}t.exports=h},{}],15:[function(e,t,i){var h=Array.prototype.indexOf;var a=function(e,t){if(e==null){return-1}if(h&&e.indexOf===h){return e.indexOf(t)}var i=0,a=e.length;for(;i<a;i++){if(e[i]===t){return i}}return-1};var s=function(e,t){return a(e,t)!==-1};var r=/([A-Z])/g;var l=function(e){return e.replace(r,"-$1").toLowerCase()};var p={"&":"&",">":">","<":"<",'"':""","'":"'"};var n=/[&><"']/g;function c(e){return p[e]}function o(e){return(""+e).replace(n,c)}var d;if(typeof document!=="undefined"){var g=document.createElement("span");if("textContent"in g){d=function(e,t){e.textContent=t}}else{d=function(e,t){e.innerText=t}}}function u(e){d(e,"")}t.exports={contains:s,escape:o,hyphenate:l,indexOf:a,setTextContent:d,clearNode:u}},{}],16:[function(e,t,i){var h=e("./src/ParseError");var a=e("./src/Lexer");var s=e("./src/Parser");var r=e("./src/Renderer");t.exports={ParseError:h,renderToString:function(e,t){if(e===null||e===undefined)throw"input cannot be empty";var i=new a(e);var h=new s(i);var l=new r(h,t);return l.toMarkup()},render:function(e,t,i){if(e===null||e===undefined)throw"input cannot be empty";var h=new a(e);var l=new s(h);var p=new r(l,i);var n=p.toDOM();if(t)t.appendChild(n);return n}}},{"./src/Lexer":17,"./src/ParseError":18,"./src/Parser":19,"./src/Renderer":20}],17:[function(e,t,i){var h=e("./utils");var a=e("./ParseError");var s=function(e){this._input=e;this._remain=e;this._pos=0;this._nextAtom=this._currentAtom=null;this._next()};s.prototype.accept=function(e,t){if(this._nextAtom.type===e&&this._matchText(t)){this._next();return this._currentAtom.text}return null};s.prototype.expect=function(e,t){var i=this._nextAtom;if(i.type!==e)throw new a("Expect an atom of "+e+" but received "+i.type,this._pos,this._input);if(!this._matchText(t))throw new a("Expect `"+t+"` but received `"+i.text+"`",this._pos,this._input);this._next();return this._currentAtom.text};s.prototype.get=function(){return this._currentAtom};var r={exec:function(e){var t=[{start:"$",end:"$"},{start:"\\(",end:"\\)"}];var i=e.length;for(var h=0;h<t.length;h++){var s=t[h].start;if(e.indexOf(s)!==0)continue;var r=t[h].end;var l=s.length;var p=e.slice(l);while(l<i){var n=p.indexOf(r);if(n<0)throw new a("Math environment is not closed",this._pos,this._input);if(n>0&&p[n-1]==="\\"){var c=n+r.length;p=p.slice(c);l+=c;continue}var o=[e.slice(0,l+n+r.length),e.slice(s.length,l+n)];return o}}return null}};var l={special:/^(\\\\|\\{|\\}|\\\$|\\&|\\#|\\%|\\_)/,math:r,func:/^\\([a-zA-Z]+)/,open:/^\{/,close:/^\}/,quote:/^(`|``|'|'')/,ordinary:/^[^\\{}$&#%_\s]+/};var p=/^%.*/;var n=/^\s+/;s.prototype._skip=function(e){this._pos+=e;this._remain=this._remain.slice(e)};s.prototype._next=function(){var e=false;while(1){var t=n.exec(this._remain);if(t){e=true;var i=t[0].length;this._skip(i)}var h=p.exec(this._remain);if(!h)break;var s=h[0].length;this._skip(s)}this._currentAtom=this._nextAtom;if(this._remain===""){this._nextAtom={type:"EOF",text:null,whitespace:false};return false}for(var r in l){var c=l[r];var o=c.exec(this._remain);if(!o)continue;var d=o[0];var g=o[1]?o[1]:d;this._nextAtom={type:r,text:g,whitespace:e};this._pos+=d.length;this._remain=this._remain.slice(o[0].length);return true}throw new a("Unrecoganizable atom",this._pos,this._input)};s.prototype._matchText=function(e){if(e===null||e===undefined)return true;if(h.isString(e))return e.toLowerCase()===this._nextAtom.text.toLowerCase();else{e=e.map(function(e){return e.toLowerCase()});return e.indexOf(this._nextAtom.text.toLowerCase())>=0}};t.exports=s},{"./ParseError":18,"./utils":21}],18:[function(e,t,i){function h(e,t,i){var h="Error: "+e;if(t!==undefined&&i!==undefined){h+=" at position "+t+": `";i=i.slice(0,t)+"↱"+i.slice(t);var a=Math.max(0,t-15);var s=t+15;h+=i.slice(a,s)+"`"}this.message=h}h.prototype=Object.create(Error.prototype);h.prototype.constructor=h;t.exports=h},{}],19:[function(e,t,i){var h=e("./utils");var a=function(e,t){this.type=e;this.value=t;this.children=[]};a.prototype.toString=function(e){if(!e)e=0;var t="";for(var i=0;i<e;i++)t+=" ";var a=t+"<"+this.type+">";if(this.value)a+=" ("+h.toString(this.value)+")";a+="\n";if(this.children){for(var s=0;s<this.children.length;s++){var r=this.children[s];a+=r.toString(e+1)}}return a};a.prototype.addChild=function(e){if(!e)throw"argument cannot be null";this.children.push(e)};var s=function(e,t,i){this.type=e;this.value=t;this.children=null;this.whitespace=!!i};s.prototype=a.prototype;var r=function(e){this._lexer=e};r.prototype.parse=function(){var e=new a("root");while(true){var t=this._acceptEnvironment();if(t===null)break;var i;if(t==="algorithm")i=this._parseAlgorithmInner();else if(t==="algorithmic")i=this._parseAlgorithmicInner();else throw new ParseError("Unexpected environment "+t);this._closeEnvironment(t);e.addChild(i)}this._lexer.expect("EOF");return e};r.prototype._acceptEnvironment=function(){var e=this._lexer;if(!e.accept("func","begin"))return null;e.expect("open");var t=e.expect("ordinary");e.expect("close");return t};r.prototype._closeEnvironment=function(e){var t=this._lexer;t.expect("func","end");t.expect("open");t.expect("ordinary",e);t.expect("close")};r.prototype._parseAlgorithmInner=function(){var e=new a("algorithm");while(true){var t=this._acceptEnvironment();if(t!==null){if(t!=="algorithmic")throw new ParseError("Unexpected environment "+t);var i=this._parseAlgorithmicInner();this._closeEnvironment();e.addChild(i);continue}var h=this._parseCaption();if(h){e.addChild(h);continue}break}return e};r.prototype._parseAlgorithmicInner=function(){var e=new a("algorithmic");var t;while(true){t=this._parseCommand(l);if(t){e.addChild(t);continue}t=this._parseBlock();if(t.children.length>0){e.addChild(t);continue}break}return e};r.prototype._parseCaption=function(){var e=this._lexer;if(!e.accept("func","caption"))return null;var t=new a("caption");e.expect("open");t.addChild(this._parseCloseText());e.expect("close");return t};r.prototype._parseBlock=function(){var e=new a("block");while(true){var t=this._parseControl();if(t){e.addChild(t);continue}var i=this._parseFunction();if(i){e.addChild(i);continue}var h=this._parseCommand(p);if(h){e.addChild(h);continue}var s=this._parseComment();if(s){e.addChild(s);continue}break}return e};r.prototype._parseControl=function(){var e;if(e=this._parseIf())return e;if(e=this._parseLoop())return e};r.prototype._parseFunction=function(){var e=this._lexer;if(!e.accept("func",["function","procedure"]))return null;var t=this._lexer.get().text;e.expect("open");var i=e.expect("ordinary");e.expect("close");e.expect("open");var h=this._parseCloseText();e.expect("close");var s=this._parseBlock();e.expect("func","end"+t);var r=new a("function",{type:t,name:i});r.addChild(h);r.addChild(s);return r};r.prototype._parseIf=function(){if(!this._lexer.accept("func","if"))return null;var e=new a("if");this._lexer.expect("open");e.addChild(this._parseCond());this._lexer.expect("close");e.addChild(this._parseBlock());var t=0;while(this._lexer.accept("func",["elif","elsif","elseif"])){this._lexer.expect("open");e.addChild(this._parseCond());this._lexer.expect("close");e.addChild(this._parseBlock());t++}var i=false;if(this._lexer.accept("func","else")){i=true;e.addChild(this._parseBlock())}this._lexer.expect("func","endif");e.value={numElif:t,hasElse:i};return e};r.prototype._parseLoop=function(){if(!this._lexer.accept("func",["FOR","FORALL","WHILE"]))return null;var e=this._lexer.get().text.toLowerCase();var t=new a("loop",e);this._lexer.expect("open");t.addChild(this._parseCond());this._lexer.expect("close");t.addChild(this._parseBlock());var i=e!=="forall"?"end"+e:"endfor";this._lexer.expect("func",i);return t};var l=["ensure","require"];var p=["state","print","return"];r.prototype._parseCommand=function(e){if(!this._lexer.accept("func",e))return null;var t=this._lexer.get().text.toLowerCase();var i=new a("command",t);i.addChild(this._parseOpenText());return i};r.prototype._parseComment=function(){if(!this._lexer.accept("func","comment"))return null;var e=new a("comment");this._lexer.expect("open");e.addChild(this._parseCloseText());this._lexer.expect("close");return e};r.prototype._parseCall=function(){var e=this._lexer;if(!e.accept("func","call"))return null;var t=e.get().whitespace;e.expect("open");var i=e.expect("ordinary");e.expect("close");var h=new a("call");h.whitespace=t;h.value=i;e.expect("open");var s=this._parseCloseText();h.addChild(s);e.expect("close");return h};r.prototype._parseCond=r.prototype._parseCloseText=function(){return this._parseText("close")};r.prototype._parseOpenText=function(){return this._parseText("open")};r.prototype._parseText=function(e){var t=new a(e+"-text");var i=false;var h;while(true){h=this._parseAtom()||this._parseCall();if(h){if(i)h.whitespace|=i;t.addChild(h);continue}if(this._lexer.accept("open")){h=this._parseCloseText();i=this._lexer.get().whitespace;h.whitespace=i;t.addChild(h);this._lexer.expect("close");i=this._lexer.get().whitespace;continue}break}return t};var n={ordinary:{tokenType:"ordinary"},math:{tokenType:"math"},special:{tokenType:"special"},"cond-symbol":{tokenType:"func",tokenValues:["and","or","not","true","false","to"]},"quote-symbol":{tokenType:"quote"},"sizing-dclr":{tokenType:"func",tokenValues:["tiny","scriptsize","footnotesize","small","normalsize","large","Large","LARGE","huge","Huge"]},"font-dclr":{tokenType:"func",tokenValues:["normalfont","rmfamily","sffamily","ttfamily","upshape","itshape","slshape","scshape","bfseries","mdseries","lfseries"]},"font-cmd":{tokenType:"func",tokenValues:["textnormal","textrm","textsf","texttt","textup","textit","textsl","textsc","uppercase","lowercase","textbf","textmd","textlf"]},"text-symbol":{tokenType:"func",tokenValues:["textbackslash"]}};r.prototype._parseAtom=function(){for(var e in n){var t=n[e];var i=this._lexer.accept(t.tokenType,t.tokenValues);if(i===null)continue;var h=this._lexer.get().whitespace;return new s(e,i.toLowerCase(),h)}return null};t.exports=r},{"./utils":21}],20:[function(e,t,i){var h=e("katex");var a=e("./utils");function s(e){this._css={};this._fontSize=this._outerFontSize=e!==undefined?e:1}s.prototype.outerFontSize=function(e){if(e!==undefined)this._outerFontSize=e;return this._outerFontSize};s.prototype.fontSize=function(){return this._fontSize};s.prototype._fontCommandTable={normalfont:{"font-family":"KaTeX_Main"},rmfamily:{"font-family":"KaTeX_Main"},sffamily:{"font-family":"KaTeX_SansSerif"},ttfamily:{"font-family":"KaTeX_Typewriter"},bfseries:{"font-weight":"bold"},mdseries:{"font-weight":"medium"},lfseries:{"font-weight":"lighter"},upshape:{"font-style":"normal","font-variant":"normal"},itshape:{"font-style":"italic","font-variant":"normal"},scshape:{"font-style":"normal","font-variant":"small-caps"},slshape:{"font-style":"oblique","font-variant":"normal"},textnormal:{"font-family":"KaTeX_Main"},textrm:{"font-family":"KaTeX_Main"},textsf:{"font-family":"KaTeX_SansSerif"},texttt:{"font-family":"KaTeX_Typewriter"},textbf:{"font-weight":"bold"},textmd:{"font-weight":"medium"},textlf:{"font-weight":"lighter"},textup:{"font-style":"normal","font-variant":"normal"},textit:{"font-style":"italic","font-variant":"normal"},textsc:{"font-style":"normal","font-variant":"small-caps"},textsl:{"font-style":"oblique","font-variant":"normal"},uppercase:{"text-transform":"uppercase"},lowercase:{"text-transform":"lowercase"}};s.prototype._sizingScalesTable={tiny:.68,scriptsize:.8,footnotesize:.85,small:.92,normalsize:1,large:1.17,Large:1.41,LARGE:1.58,huge:1.9,Huge:2.28};s.prototype.updateByCommand=function(e){var t=this._fontCommandTable[e];if(t!==undefined){for(var i in t)this._css[i]=t[i];return}var h=this._sizingScalesTable[e];if(h!==undefined){this._outerFontSize=this._fontSize;this._fontSize=h;return}throw new ParserError("unrecogniazed text-style command")};s.prototype.toCSS=function(){var e="";for(var t in this._css){var i=this._css[t];if(i===undefined)continue;e+=t+":"+i+";"}if(this._fontSize!==this._outerFontSize){e+="font-size:"+this._fontSize/this._outerFontSize+"em;"}return e};function r(e,t){this._nodes=e;this._textStyle=t}r.prototype._renderCloseText=function(e){var t=new s(this._textStyle.fontSize());var i=new r(e.children,t);if(e.whitespace)this._html.putText(" ");this._html.putSpan(i.renderToHTML())};r.prototype.renderToHTML=function(){this._html=new l;var e;while((e=this._nodes.shift())!==undefined){var t=e.type;var i=e.value;if(e.whitespace)this._html.putText(" ");switch(t){case"ordinary":this._html.putText(i);break;case"math":var a=h.renderToString(i);this._html.putSpan(a);break;case"cond-symbol":this._html.beginSpan("ps-keyword").putText(i.toLowerCase()).endSpan();break;case"special":if(i==="\\\\"){this._html.putHTML("<br/>");break}var p={"\\{":"{","\\}":"}","\\$":"$","\\&":"&","\\#":"#","\\%":"%","\\_":"_"};var n=p[i];this._html.putText(n);break;case"text-symbol":var c={textbackslash:"\\"};var o=c[i];this._html.putText(o);break;case"quote-symbol":var d={"`":"‘","``":"“","'":"’","''":"â€"};var g=d[i];this._html.putText(g);break;case"call":this._html.beginSpan("ps-funcname").putText(i).endSpan();this._html.write("(");var u=e.children[0];this._renderCloseText(u);this._html.write(")");break;case"close-text":this._renderCloseText(e);break;case"font-dclr":case"sizing-dclr":this._textStyle.updateByCommand(i);this._html.beginSpan(null,this._textStyle.toCSS());var w=new r(this._nodes,this._textStyle);this._html.putSpan(w.renderToHTML());this._html.endSpan();break;case"font-cmd":var k=this._nodes[0];if(k.type!=="close-text")continue;var f=new s(this._textStyle.fontSize());f.updateByCommand(i);this._html.beginSpan(null,f.toCSS());var m=new r(k.children,f);this._html.putSpan(m.renderToHTML());this._html.endSpan();break;default:throw new ParseError("Unexpected ParseNode of type "+e.type)}}return this._html.toMarkup()};function l(){this._body=[];this._textBuf=[]}l.prototype.beginDiv=function(e,t,i){this._beginTag("div",e,t,i);this._body.push("\n");return this};l.prototype.endDiv=function(){this._endTag("div");this._body.push("\n");return this};l.prototype.beginP=function(e,t,i){this._beginTag("p",e,t,i);this._body.push("\n");return this};l.prototype.endP=function(){this._flushText();this._endTag("p");this._body.push("\n");return this};l.prototype.beginSpan=function(e,t,i){this._flushText();return this._beginTag("span",e,t,i)};l.prototype.endSpan=function(){this._flushText();return this._endTag("span")};l.prototype.putHTML=l.prototype.putSpan=function(e){this._flushText();this._body.push(e);return this};l.prototype.putText=function(e){this._textBuf.push(e);return this};l.prototype.write=function(e){this._body.push(e)};l.prototype.toMarkup=function(){this._flushText();var e=this._body.join("");return e.trim()};l.prototype.toDOM=function(){var e=this.toMarkup();var t=document.createElement("div");t.innerHTML=e;return t.firstChild};l.prototype._flushText=function(){if(this._textBuf.length===0)return;var e=this._textBuf.join("");this._body.push(this._escapeHtml(e));this._textBuf=[]};l.prototype._beginTag=function(e,t,i,h){var s="<"+e;if(t)s+=' class="'+t+'"';if(i){var r;if(a.isString(i))r=i;else{r="";for(var l in i){attrVal=i[l];r+=l+":"+attrVal+";"}}if(h)r+=h;s+=' style="'+r+'"'}s+=">";this._body.push(s);return this};l.prototype._endTag=function(e){this._body.push("</"+e+">");return this};var p={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};l.prototype._escapeHtml=function(e){return String(e).replace(/[&<>"'\/]/g,function(e){return p[e]})};function n(e){e=e||{};this.indentSize=e.indentSize?this._parseEmVal(e.indentSize):1.2;this.commentDelimiter=e.commentDelimiter||" // ";this.lineNumberPunc=e.lineNumberPunc||":";this.lineNumber=e.lineNumber!==undefined?e.lineNumber:false;this.noEnd=e.noEnd!==undefined?e.noEnd:false;if(e.captionCount!==undefined)c.captionCount=e.captionCount}n.prototype._parseEmVal=function(e){e=e.trim();if(e.indexOf("em")!==e.length-2)throw"option unit error; no `em` found";return Number(e.substring(0,e.length-2))};function c(e,t){this._root=e.parse();this._options=new n(t);this._openLine=false;this._blockLevel=0;this._textLevel=-1;this._globalTextStyle=new s}c.captionCount=0;c.prototype.toMarkup=function(){var e=this._html=new l;this._buildTree(this._root);delete this._html;return e.toMarkup()};c.prototype.toDOM=function(){var e=this.toMarkup();var t=document.createElement("div");t.innerHTML=e;return t.firstChild};c.prototype._beginGroup=function(e,t,i){this._closeLineIfAny();this._html.beginDiv("ps-"+e+(t?" "+t:""),i)};c.prototype._endGroup=function(e){this._closeLineIfAny();this._html.endDiv()};c.prototype._beginBlock=function(){var e=this._options.lineNumber&&this._blockLevel===0?.6:0;var t=this._options.indentSize+e;this._beginGroup("block",null,{"margin-left":t+"em"}); +this._blockLevel++};c.prototype._endBlock=function(){this._closeLineIfAny();this._endGroup();this._blockLevel--};c.prototype._newLine=function(){this._closeLineIfAny();this._openLine=true;this._globalTextStyle.outerFontSize(1);var e=this._options.indentSize;if(this._blockLevel>0){this._numLOC++;this._html.beginP("ps-line ps-code",this._globalTextStyle.toCSS());if(this._options.lineNumber){this._html.beginSpan("ps-linenum",{left:-((this._blockLevel-1)*(e*1.25))+"em"}).putText(this._numLOC+this._options.lineNumberPunc).endSpan()}}else{this._html.beginP("ps-line",{"text-indent":-e+"em","padding-left":e+"em"},this._globalTextStyle.toCSS())}};c.prototype._closeLineIfAny=function(){if(!this._openLine)return;this._html.endP();this._openLine=false};c.prototype._typeKeyword=function(e){this._html.beginSpan("ps-keyword").putText(e).endSpan()};c.prototype._typeFuncName=function(e){this._html.beginSpan("ps-funcname").putText(e).endSpan()};c.prototype._typeText=function(e){this._html.write(e)};c.prototype._buildTreeForAllChildren=function(e){var t=e.children;for(var i=0;i<t.length;i++)this._buildTree(t[i])};c.prototype._buildCommentsFromBlock=function(e){var t=e.children;while(t.length>0&&t[0].type==="comment"){var i=t.shift();this._buildTree(i)}};c.prototype._buildTree=function(e){var t,i,h;switch(e.type){case"root":this._beginGroup("root");this._buildTreeForAllChildren(e);this._endGroup();break;case"algorithm":var a;for(t=0;t<e.children.length;t++){i=e.children[t];if(i.type!=="caption")continue;a=i;c.captionCount++}if(a){this._beginGroup("algorithm","with-caption");this._buildTree(a)}else{this._beginGroup("algorithm")}for(t=0;t<e.children.length;t++){i=e.children[t];if(i.type==="caption")continue;this._buildTree(i)}this._endGroup();break;case"algorithmic":if(this._options.lineNumber){this._beginGroup("algorithmic","with-linenum");this._numLOC=0}else{this._beginGroup("algorithmic")}this._buildTreeForAllChildren(e);this._endGroup();break;case"block":this._beginBlock();this._buildTreeForAllChildren(e);this._endBlock();break;case"function":var l=e.value.type.toLowerCase();var p=e.value.name;h=e.children[0];var n=e.children[1];this._newLine();this._typeKeyword(l+" ");this._typeFuncName(p);this._typeText("(");this._buildTree(h);this._typeText(")");this._buildCommentsFromBlock(n);this._buildTree(n);if(!this._options.noEnd){this._newLine();this._typeKeyword("end "+l)}break;case"if":this._newLine();this._typeKeyword("if ");ifCond=e.children[0];this._buildTree(ifCond);this._typeKeyword(" then");var o=e.children[1];this._buildCommentsFromBlock(o);this._buildTree(o);var d=e.value.numElif;for(var g=0;g<d;g++){this._newLine();this._typeKeyword("else if ");var u=e.children[2+2*g];this._buildTree(u);this._typeKeyword(" then");var w=e.children[2+2*g+1];this._buildCommentsFromBlock(w);this._buildTree(w)}var k=e.value.hasElse;if(k){this._newLine();this._typeKeyword("else");var f=e.children[e.children.length-1];this._buildCommentsFromBlock(f);this._buildTree(f)}if(!this._options.noEnd){this._newLine();this._typeKeyword("end if")}break;case"loop":this._newLine();var m=e.value;var v={"for":"for",forall:"for all","while":"while"};this._typeKeyword(v[m]+" ");var y=e.children[0];this._buildTree(y);this._typeKeyword(" do");var x=e.children[1];this._buildCommentsFromBlock(x);this._buildTree(x);if(!this._options.noEnd){this._newLine();var b=m==="while"?"end while":"end for";this._typeKeyword(b)}break;case"command":var _=e.value;var z={state:"",ensure:"Ensure: ",require:"Require: ",print:"print ","return":"return "}[_];this._newLine();if(z)this._typeKeyword(z);h=e.children[0];this._buildTree(h);break;case"caption":this._newLine();this._typeKeyword("Algorithm ");h=e.children[0];this._buildTree(h);break;case"comment":h=e.children[0];this._html.beginSpan("ps-comment");this._html.putText(this._options.commentDelimiter);this._buildTree(h);this._html.endSpan();break;case"open-text":var S=new r(e.children,this._globalTextStyle);this._html.putSpan(S.renderToHTML());break;case"close-text":var T=this._globalTextStyle.fontSize();var C=new s(T);var M=new r(e.children,C);this._html.putSpan(M.renderToHTML());break;default:throw new ParseError("Unexpected ParseNode of type "+e.type)}};t.exports=c},{"./utils":21,katex:1}],21:[function(e,t,i){function h(e){return typeof e==="string"||e instanceof String}function a(e){return typeof e==="object"&&e instanceof Object}function s(e){if(!a(e))return e+"";var t=[];for(var i in e)t.push(i+": "+s(e[i]));return t.join(", ")}t.exports={isString:h,isObject:a,toString:s}},{}]},{},[16])(16)}); \ No newline at end of file diff --git a/source/javascripts/skel.min.js b/source/javascripts/skel.min.js new file mode 100644 index 0000000..4f6a674 --- /dev/null +++ b/source/javascripts/skel.min.js @@ -0,0 +1,2 @@ +/* skel.js v3.0.0 | (c) n33 | skel.io | MIT licensed */ +var skel=function(){"use strict";var t={breakpointIds:null,events:{},isInit:!1,obj:{attachments:{},breakpoints:{},head:null,states:{}},sd:"/",state:null,stateHandlers:{},stateId:"",vars:{},DOMReady:null,indexOf:null,isArray:null,iterate:null,matchesMedia:null,extend:function(e,n){t.iterate(n,function(i){t.isArray(n[i])?(t.isArray(e[i])||(e[i]=[]),t.extend(e[i],n[i])):"object"==typeof n[i]?("object"!=typeof e[i]&&(e[i]={}),t.extend(e[i],n[i])):e[i]=n[i]})},newStyle:function(t){var e=document.createElement("style");return e.type="text/css",e.innerHTML=t,e},_canUse:null,canUse:function(e){t._canUse||(t._canUse=document.createElement("div"));var n=t._canUse.style,i=e.charAt(0).toUpperCase()+e.slice(1);return e in n||"Moz"+i in n||"Webkit"+i in n||"O"+i in n||"ms"+i in n},on:function(e,n){var i=e.split(/[\s]+/);return t.iterate(i,function(e){var a=i[e];if(t.isInit){if("init"==a)return void n();if("change"==a)n();else{var r=a.charAt(0);if("+"==r||"!"==r){var o=a.substring(1);if(o in t.obj.breakpoints)if("+"==r&&t.obj.breakpoints[o].active)n();else if("!"==r&&!t.obj.breakpoints[o].active)return void n()}}}t.events[a]||(t.events[a]=[]),t.events[a].push(n)}),t},trigger:function(e){return t.events[e]&&0!=t.events[e].length?(t.iterate(t.events[e],function(n){t.events[e][n]()}),t):void 0},breakpoint:function(e){return t.obj.breakpoints[e]},breakpoints:function(e){function n(t,e){this.name=this.id=t,this.media=e,this.active=!1,this.wasActive=!1}return n.prototype.matches=function(){return t.matchesMedia(this.media)},n.prototype.sync=function(){this.wasActive=this.active,this.active=this.matches()},t.iterate(e,function(i){t.obj.breakpoints[i]=new n(i,e[i])}),window.setTimeout(function(){t.poll()},0),t},addStateHandler:function(e,n){t.stateHandlers[e]=n},callStateHandler:function(e){var n=t.stateHandlers[e]();t.iterate(n,function(e){t.state.attachments.push(n[e])})},changeState:function(e){t.iterate(t.obj.breakpoints,function(e){t.obj.breakpoints[e].sync()}),t.vars.lastStateId=t.stateId,t.stateId=e,t.breakpointIds=t.stateId===t.sd?[]:t.stateId.substring(1).split(t.sd),t.obj.states[t.stateId]?t.state=t.obj.states[t.stateId]:(t.obj.states[t.stateId]={attachments:[]},t.state=t.obj.states[t.stateId],t.iterate(t.stateHandlers,t.callStateHandler)),t.detachAll(t.state.attachments),t.attachAll(t.state.attachments),t.vars.stateId=t.stateId,t.vars.state=t.state,t.trigger("change"),t.iterate(t.obj.breakpoints,function(e){t.obj.breakpoints[e].active?t.obj.breakpoints[e].wasActive||t.trigger("+"+e):t.obj.breakpoints[e].wasActive&&t.trigger("-"+e)})},generateStateConfig:function(e,n){var i={};return t.extend(i,e),t.iterate(t.breakpointIds,function(e){t.extend(i,n[t.breakpointIds[e]])}),i},getStateId:function(){var e="";return t.iterate(t.obj.breakpoints,function(n){var i=t.obj.breakpoints[n];i.matches()&&(e+=t.sd+i.id)}),e},poll:function(){var e="";e=t.getStateId(),""===e&&(e=t.sd),e!==t.stateId&&t.changeState(e)},_attach:null,attach:function(e){var n=t.obj.head,i=e.element;return i.parentNode&&i.parentNode.tagName?!1:(t._attach||(t._attach=n.firstChild),n.insertBefore(i,t._attach.nextSibling),e.permanent&&(t._attach=i),!0)},attachAll:function(e){var n=[];t.iterate(e,function(t){n[e[t].priority]||(n[e[t].priority]=[]),n[e[t].priority].push(e[t])}),n.reverse(),t.iterate(n,function(e){t.iterate(n[e],function(i){t.attach(n[e][i])})})},detach:function(t){var e=t.element;return t.permanent||!e.parentNode||e.parentNode&&!e.parentNode.tagName?!1:(e.parentNode.removeChild(e),!0)},detachAll:function(e){var n={};t.iterate(e,function(t){n[e[t].id]=!0}),t.iterate(t.obj.attachments,function(e){e in n||t.detach(t.obj.attachments[e])})},attachment:function(e){return e in t.obj.attachments?t.obj.attachments[e]:null},newAttachment:function(e,n,i,a){return t.obj.attachments[e]={id:e,element:n,priority:i,permanent:a}},init:function(){t.initMethods(),t.initVars(),t.initEvents(),t.obj.head=document.getElementsByTagName("head")[0],t.isInit=!0,t.trigger("init")},initEvents:function(){t.on("resize",function(){t.poll()}),t.on("orientationChange",function(){t.poll()}),t.DOMReady(function(){t.trigger("ready")}),window.onload&&t.on("load",window.onload),window.onload=function(){t.trigger("load")},window.onresize&&t.on("resize",window.onresize),window.onresize=function(){t.trigger("resize")},window.onorientationchange&&t.on("orientationChange",window.onorientationchange),window.onorientationchange=function(){t.trigger("orientationChange")}},initMethods:function(){document.addEventListener?!function(e,n){t.DOMReady=n()}("domready",function(){function t(t){for(r=1;t=n.shift();)t()}var e,n=[],i=document,a="DOMContentLoaded",r=/^loaded|^c/.test(i.readyState);return i.addEventListener(a,e=function(){i.removeEventListener(a,e),t()}),function(t){r?t():n.push(t)}}):!function(e,n){t.DOMReady=n()}("domready",function(t){function e(t){for(h=1;t=i.shift();)t()}var n,i=[],a=!1,r=document,o=r.documentElement,s=o.doScroll,c="DOMContentLoaded",d="addEventListener",u="onreadystatechange",l="readyState",f=s?/^loaded|^c/:/^loaded|c/,h=f.test(r[l]);return r[d]&&r[d](c,n=function(){r.removeEventListener(c,n,a),e()},a),s&&r.attachEvent(u,n=function(){/^c/.test(r[l])&&(r.detachEvent(u,n),e())}),t=s?function(e){self!=top?h?e():i.push(e):function(){try{o.doScroll("left")}catch(n){return setTimeout(function(){t(e)},50)}e()}()}:function(t){h?t():i.push(t)}}),Array.prototype.indexOf?t.indexOf=function(t,e){return t.indexOf(e)}:t.indexOf=function(t,e){if("string"==typeof t)return t.indexOf(e);var n,i,a=e?e:0;if(!this)throw new TypeError;if(i=this.length,0===i||a>=i)return-1;for(0>a&&(a=i-Math.abs(a)),n=a;i>n;n++)if(this[n]===t)return n;return-1},Array.isArray?t.isArray=function(t){return Array.isArray(t)}:t.isArray=function(t){return"[object Array]"===Object.prototype.toString.call(t)},Object.keys?t.iterate=function(t,e){if(!t)return[];var n,i=Object.keys(t);for(n=0;i[n]&&e(i[n],t[i[n]])!==!1;n++);}:t.iterate=function(t,e){if(!t)return[];var n;for(n in t)if(Object.prototype.hasOwnProperty.call(t,n)&&e(n,t[n])===!1)break},window.matchMedia?t.matchesMedia=function(t){return""==t?!0:window.matchMedia(t).matches}:window.styleMedia||window.media?t.matchesMedia=function(t){if(""==t)return!0;var e=window.styleMedia||window.media;return e.matchMedium(t||"all")}:window.getComputedStyle?t.matchesMedia=function(t){if(""==t)return!0;var e=document.createElement("style"),n=document.getElementsByTagName("script")[0],i=null;e.type="text/css",e.id="matchmediajs-test",n.parentNode.insertBefore(e,n),i="getComputedStyle"in window&&window.getComputedStyle(e,null)||e.currentStyle;var a="@media "+t+"{ #matchmediajs-test { width: 1px; } }";return e.styleSheet?e.styleSheet.cssText=a:e.textContent=a,"1px"===i.width}:t.matchesMedia=function(t){if(""==t)return!0;var e,n,i,a,r={"min-width":null,"max-width":null},o=!1;for(i=t.split(/\s+and\s+/),e=0;e<i.length;e++)n=i[e],"("==n.charAt(0)&&(n=n.substring(1,n.length-1),a=n.split(/:\s+/),2==a.length&&(r[a[0].replace(/^\s+|\s+$/g,"")]=parseInt(a[1]),o=!0));if(!o)return!1;var s=document.documentElement.clientWidth,c=document.documentElement.clientHeight;return null!==r["min-width"]&&s<r["min-width"]||null!==r["max-width"]&&s>r["max-width"]||null!==r["min-height"]&&c<r["min-height"]||null!==r["max-height"]&&c>r["max-height"]?!1:!0},navigator.userAgent.match(/MSIE ([0-9]+)/)&&RegExp.$1<9&&(t.newStyle=function(t){var e=document.createElement("span");return e.innerHTML=' <style type="text/css">'+t+"</style>",e})},initVars:function(){var e,n,i,a=navigator.userAgent;e="other",n=0,i=[["firefox",/Firefox\/([0-9\.]+)/],["bb",/BlackBerry.+Version\/([0-9\.]+)/],["bb",/BB[0-9]+.+Version\/([0-9\.]+)/],["opera",/OPR\/([0-9\.]+)/],["opera",/Opera\/([0-9\.]+)/],["edge",/Edge\/([0-9\.]+)/],["safari",/Version\/([0-9\.]+).+Safari/],["chrome",/Chrome\/([0-9\.]+)/],["ie",/MSIE ([0-9]+)/],["ie",/Trident\/.+rv:([0-9]+)/]],t.iterate(i,function(t,i){return a.match(i[1])?(e=i[0],n=parseFloat(RegExp.$1),!1):void 0}),t.vars.browser=e,t.vars.browserVersion=n,e="other",n=0,i=[["ios",/([0-9_]+) like Mac OS X/,function(t){return t.replace("_",".").replace("_","")}],["ios",/CPU like Mac OS X/,function(t){return 0}],["android",/Android ([0-9\.]+)/,null],["mac",/Macintosh.+Mac OS X ([0-9_]+)/,function(t){return t.replace("_",".").replace("_","")}],["wp",/Windows Phone ([0-9\.]+)/,null],["windows",/Windows NT ([0-9\.]+)/,null],["bb",/BlackBerry.+Version\/([0-9\.]+)/,null],["bb",/BB[0-9]+.+Version\/([0-9\.]+)/,null]],t.iterate(i,function(t,i){return a.match(i[1])?(e=i[0],n=parseFloat(i[2]?i[2](RegExp.$1):RegExp.$1),!1):void 0}),t.vars.os=e,t.vars.osVersion=n,t.vars.IEVersion="ie"==t.vars.browser?t.vars.browserVersion:99,t.vars.touch="wp"==t.vars.os?navigator.msMaxTouchPoints>0:!!("ontouchstart"in window),t.vars.mobile="wp"==t.vars.os||"android"==t.vars.os||"ios"==t.vars.os||"bb"==t.vars.os}};return t.init(),t}();!function(t,e){"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?module.exports=e():t.skel=e()}(this,function(){return skel}); diff --git a/source/javascripts/util.js b/source/javascripts/util.js new file mode 100644 index 0000000..ecf7b37 --- /dev/null +++ b/source/javascripts/util.js @@ -0,0 +1,587 @@ +(function($) { + + /** + * Generate an indented list of links from a nav. Meant for use with panel(). + * @return {jQuery} jQuery object. + */ + $.fn.navList = function() { + + var $this = $(this); + $a = $this.find('a'), + b = []; + + $a.each(function() { + + var $this = $(this), + indent = Math.max(0, $this.parents('li').length - 1), + href = $this.attr('href'), + target = $this.attr('target'); + + b.push( + '<a ' + + 'class="link depth-' + indent + '"' + + ( (typeof target !== 'undefined' && target != '') ? ' target="' + target + '"' : '') + + ( (typeof href !== 'undefined' && href != '') ? ' href="' + href + '"' : '') + + '>' + + '<span class="indent-' + indent + '"></span>' + + $this.text() + + '</a>' + ); + + }); + + return b.join(''); + + }; + + /** + * Panel-ify an element. + * @param {object} userConfig User config. + * @return {jQuery} jQuery object. + */ + $.fn.panel = function(userConfig) { + + // No elements? + if (this.length == 0) + return $this; + + // Multiple elements? + if (this.length > 1) { + + for (var i=0; i < this.length; i++) + $(this[i]).panel(userConfig); + + return $this; + + } + + // Vars. + var $this = $(this), + $body = $('body'), + $window = $(window), + id = $this.attr('id'), + config; + + // Config. + config = $.extend({ + + // Delay. + delay: 0, + + // Hide panel on link click. + hideOnClick: false, + + // Hide panel on escape keypress. + hideOnEscape: false, + + // Hide panel on swipe. + hideOnSwipe: false, + + // Reset scroll position on hide. + resetScroll: false, + + // Reset forms on hide. + resetForms: false, + + // Side of viewport the panel will appear. + side: null, + + // Target element for "class". + target: $this, + + // Class to toggle. + visibleClass: 'visible' + + }, userConfig); + + // Expand "target" if it's not a jQuery object already. + if (typeof config.target != 'jQuery') + config.target = $(config.target); + + // Panel. + + // Methods. + $this._hide = function(event) { + + // Already hidden? Bail. + if (!config.target.hasClass(config.visibleClass)) + return; + + // If an event was provided, cancel it. + if (event) { + + event.preventDefault(); + event.stopPropagation(); + + } + + // Hide. + config.target.removeClass(config.visibleClass); + + // Post-hide stuff. + window.setTimeout(function() { + + // Reset scroll position. + if (config.resetScroll) + $this.scrollTop(0); + + // Reset forms. + if (config.resetForms) + $this.find('form').each(function() { + this.reset(); + }); + + }, config.delay); + + }; + + // Vendor fixes. + $this + .css('-ms-overflow-style', '-ms-autohiding-scrollbar') + .css('-webkit-overflow-scrolling', 'touch'); + + // Hide on click. + if (config.hideOnClick) { + + $this.find('a') + .css('-webkit-tap-highlight-color', 'rgba(0,0,0,0)'); + + $this + .on('click', 'a', function(event) { + + var $a = $(this), + href = $a.attr('href'), + target = $a.attr('target'); + + if (!href || href == '#' || href == '' || href == '#' + id) + return; + + // Cancel original event. + event.preventDefault(); + event.stopPropagation(); + + // Hide panel. + $this._hide(); + + // Redirect to href. + window.setTimeout(function() { + + if (target == '_blank') + window.open(href); + else + window.location.href = href; + + }, config.delay + 10); + + }); + + } + + // Event: Touch stuff. + $this.on('touchstart', function(event) { + + $this.touchPosX = event.originalEvent.touches[0].pageX; + $this.touchPosY = event.originalEvent.touches[0].pageY; + + }) + + $this.on('touchmove', function(event) { + + if ($this.touchPosX === null + || $this.touchPosY === null) + return; + + var diffX = $this.touchPosX - event.originalEvent.touches[0].pageX, + diffY = $this.touchPosY - event.originalEvent.touches[0].pageY, + th = $this.outerHeight(), + ts = ($this.get(0).scrollHeight - $this.scrollTop()); + + // Hide on swipe? + if (config.hideOnSwipe) { + + var result = false, + boundary = 20, + delta = 50; + + switch (config.side) { + + case 'left': + result = (diffY < boundary && diffY > (-1 * boundary)) && (diffX > delta); + break; + + case 'right': + result = (diffY < boundary && diffY > (-1 * boundary)) && (diffX < (-1 * delta)); + break; + + case 'top': + result = (diffX < boundary && diffX > (-1 * boundary)) && (diffY > delta); + break; + + case 'bottom': + result = (diffX < boundary && diffX > (-1 * boundary)) && (diffY < (-1 * delta)); + break; + + default: + break; + + } + + if (result) { + + $this.touchPosX = null; + $this.touchPosY = null; + $this._hide(); + + return false; + + } + + } + + // Prevent vertical scrolling past the top or bottom. + if (($this.scrollTop() < 0 && diffY < 0) + || (ts > (th - 2) && ts < (th + 2) && diffY > 0)) { + + event.preventDefault(); + event.stopPropagation(); + + } + + }); + + // Event: Prevent certain events inside the panel from bubbling. + $this.on('click touchend touchstart touchmove', function(event) { + event.stopPropagation(); + }); + + // Event: Hide panel if a child anchor tag pointing to its ID is clicked. + $this.on('click', 'a[href="#' + id + '"]', function(event) { + + event.preventDefault(); + event.stopPropagation(); + + config.target.removeClass(config.visibleClass); + + }); + + // Body. + + // Event: Hide panel on body click/tap. + $body.on('click touchend', function(event) { + $this._hide(event); + }); + + // Event: Toggle. + $body.on('click', 'a[href="#' + id + '"]', function(event) { + + event.preventDefault(); + event.stopPropagation(); + + config.target.toggleClass(config.visibleClass); + + }); + + // Window. + + // Event: Hide on ESC. + if (config.hideOnEscape) + $window.on('keydown', function(event) { + + if (event.keyCode == 27) + $this._hide(event); + + }); + + return $this; + + }; + + /** + * Apply "placeholder" attribute polyfill to one or more forms. + * @return {jQuery} jQuery object. + */ + $.fn.placeholder = function() { + + // Browser natively supports placeholders? Bail. + if (typeof (document.createElement('input')).placeholder != 'undefined') + return $(this); + + // No elements? + if (this.length == 0) + return $this; + + // Multiple elements? + if (this.length > 1) { + + for (var i=0; i < this.length; i++) + $(this[i]).placeholder(); + + return $this; + + } + + // Vars. + var $this = $(this); + + // Text, TextArea. + $this.find('input[type=text],textarea') + .each(function() { + + var i = $(this); + + if (i.val() == '' + || i.val() == i.attr('placeholder')) + i + .addClass('polyfill-placeholder') + .val(i.attr('placeholder')); + + }) + .on('blur', function() { + + var i = $(this); + + if (i.attr('name').match(/-polyfill-field$/)) + return; + + if (i.val() == '') + i + .addClass('polyfill-placeholder') + .val(i.attr('placeholder')); + + }) + .on('focus', function() { + + var i = $(this); + + if (i.attr('name').match(/-polyfill-field$/)) + return; + + if (i.val() == i.attr('placeholder')) + i + .removeClass('polyfill-placeholder') + .val(''); + + }); + + // Password. + $this.find('input[type=password]') + .each(function() { + + var i = $(this); + var x = $( + $('<div>') + .append(i.clone()) + .remove() + .html() + .replace(/type="password"/i, 'type="text"') + .replace(/type=password/i, 'type=text') + ); + + if (i.attr('id') != '') + x.attr('id', i.attr('id') + '-polyfill-field'); + + if (i.attr('name') != '') + x.attr('name', i.attr('name') + '-polyfill-field'); + + x.addClass('polyfill-placeholder') + .val(x.attr('placeholder')).insertAfter(i); + + if (i.val() == '') + i.hide(); + else + x.hide(); + + i + .on('blur', function(event) { + + event.preventDefault(); + + var x = i.parent().find('input[name=' + i.attr('name') + '-polyfill-field]'); + + if (i.val() == '') { + + i.hide(); + x.show(); + + } + + }); + + x + .on('focus', function(event) { + + event.preventDefault(); + + var i = x.parent().find('input[name=' + x.attr('name').replace('-polyfill-field', '') + ']'); + + x.hide(); + + i + .show() + .focus(); + + }) + .on('keypress', function(event) { + + event.preventDefault(); + x.val(''); + + }); + + }); + + // Events. + $this + .on('submit', function() { + + $this.find('input[type=text],input[type=password],textarea') + .each(function(event) { + + var i = $(this); + + if (i.attr('name').match(/-polyfill-field$/)) + i.attr('name', ''); + + if (i.val() == i.attr('placeholder')) { + + i.removeClass('polyfill-placeholder'); + i.val(''); + + } + + }); + + }) + .on('reset', function(event) { + + event.preventDefault(); + + $this.find('select') + .val($('option:first').val()); + + $this.find('input,textarea') + .each(function() { + + var i = $(this), + x; + + i.removeClass('polyfill-placeholder'); + + switch (this.type) { + + case 'submit': + case 'reset': + break; + + case 'password': + i.val(i.attr('defaultValue')); + + x = i.parent().find('input[name=' + i.attr('name') + '-polyfill-field]'); + + if (i.val() == '') { + i.hide(); + x.show(); + } + else { + i.show(); + x.hide(); + } + + break; + + case 'checkbox': + case 'radio': + i.attr('checked', i.attr('defaultValue')); + break; + + case 'text': + case 'textarea': + i.val(i.attr('defaultValue')); + + if (i.val() == '') { + i.addClass('polyfill-placeholder'); + i.val(i.attr('placeholder')); + } + + break; + + default: + i.val(i.attr('defaultValue')); + break; + + } + }); + + }); + + return $this; + + }; + + /** + * Moves elements to/from the first positions of their respective parents. + * @param {jQuery} $elements Elements (or selector) to move. + * @param {bool} condition If true, moves elements to the top. Otherwise, moves elements back to their original locations. + */ + $.prioritize = function($elements, condition) { + + var key = '__prioritize'; + + // Expand $elements if it's not already a jQuery object. + if (typeof $elements != 'jQuery') + $elements = $($elements); + + // Step through elements. + $elements.each(function() { + + var $e = $(this), $p, + $parent = $e.parent(); + + // No parent? Bail. + if ($parent.length == 0) + return; + + // Not moved? Move it. + if (!$e.data(key)) { + + // Condition is false? Bail. + if (!condition) + return; + + // Get placeholder (which will serve as our point of reference for when this element needs to move back). + $p = $e.prev(); + + // Couldn't find anything? Means this element's already at the top, so bail. + if ($p.length == 0) + return; + + // Move element to top of parent. + $e.prependTo($parent); + + // Mark element as moved. + $e.data(key, $p); + + } + + // Moved already? + else { + + // Condition is true? Bail. + if (condition) + return; + + $p = $e.data(key); + + // Move element back to its original location (using our placeholder). + $e.insertAfter($p); + + // Unmark element as moved. + $e.removeData(key); + + } + + }); + + }; + +})(jQuery); \ No newline at end of file diff --git a/source/layouts/layout.haml b/source/layouts/layout.haml index 8e0555c..9b50857 100644 --- a/source/layouts/layout.haml +++ b/source/layouts/layout.haml @@ -1,67 +1,3 @@ --#!!! 5 --#%html --# %head --# %title= page_title --# %meta{name: :description, content: page_description} --# %meta{charset: 'utf-8'} --# %meta{name: :viewport, content: 'width=device-width, initial-scale=1.0'} --# %meta{'http-equiv' => 'X-UA-Compatible', content: 'IE=edge'} --# %meta{name: 'HandheldFriendly', content: 'True'} --# --# -# Open Graph Tags --# %meta{property: "og:site_name", content: blog_settings.name} --# %meta{property: "og:type", content: og_type} --# - if og_title.present? --# %meta{property: "og:title", content: og_title} --# %meta{property: "og:description", content: page_description} --# %meta{property: "og:url", content: URI.join(blog_settings.url, current_page.url)} --# - if cover? --# %meta{property: "og:image", content: URI.join(blog_settings.url, image_path(current_page.data.cover))} --# - if is_blog_article? --# %meta{property: "article:published_time", content: current_article.date.strftime('%Y-%m-%d')} --# --# -# Twitter Card Tags --# %meta{name: "twitter:card", content: "summary"} --# - if blog_author.twitter.present? --# %meta{name: "twitter:site", content: blog_author.twitter} --# - if twitter_title.present? --# %meta{name: "twitter:title", content: twitter_title} --# %meta{name: "twitter:description", content: page_description} --# %meta{name: "twitter:url", content: URI.join(blog_settings.url, current_page.url)} --# - if cover? --# %meta{name: "twitter:image:src", content: URI.join(blog_settings.url, image_path(current_page.data.cover))} --# --# = feed_tag :atom, "#{blog.options.prefix.to_s}/feed.xml", title: "Atom Feed" --# = favicon_tag 'images/favicon.ico' --# %link{rel: :stylesheet, type: 'text/css', href: '//fonts.googleapis.com/css?family=Merriweather:300,700,700italic,300italic|Open+Sans:700,400'} --# = stylesheet_link_tag :application --# %body{class: "#{page_class} nav-closed"} --# --# = partial('shared/navigation') --# --# .site-wrapper --# = yield --# --# %footer.site-footer.clearfix --# %section.copyright --# %a{href: home_path}= blog_settings.name --# © --# = Time.now.year --# %section.poweredby --# -# --# Proudly published with --# %a{href: 'http://middlemanapp.com'} Middleman --# Casper theme powered by --# %a{href: 'https://ghost.org'} Ghost --# --# = javascript_include_tag :application - - - - - - - !!! 5 %html %head @@ -73,6 +9,8 @@ %meta{:content => "True", :name => "HandheldFriendly"} %meta{:content => "width=device-width, initial-scale=1.0", :name => "viewport"} = favicon_tag 'images/favicon.ico' + = stylesheet_link_tag :katex + = stylesheet_link_tag :pseudocode = stylesheet_link_tag :application = feed_tag :atom, "#{blog.options.prefix.to_s}/feed.xml", title: "Atom Feed" %meta{name: 'HandheldFriendly', content: 'True'} @@ -135,4 +73,30 @@ %a{href: 'https://github.com/Syncleus/middleman-ghoststa'} Ghoststa theme by %a{href: 'http://syncleus.com'} Syncleus - = javascript_include_tag :application + = javascript_include_tag :ghoststa_vendor + = javascript_include_tag :ghoststa + = javascript_include_tag :katex + = javascript_include_tag :pseudocode + %script{:src => "//cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML", :type => "text/javascript"} + + :javascript + var blocks = document.getElementsByClassName("pseudocode"); + for(var blockId = 0; blockId < blocks.length; blockId++) { + var block = blocks[blockId]; + + var code = block.textContent; + var options = { + lineNumber: true + }; + + var outputEl = document.createElement('div'); + outputEl.className += " pseudocode-out"; + block.parentNode.insertBefore(outputEl, block.nextSibling); + + pseudocode.render(code, outputEl, options); + } + + while( blocks[0]) { + blocks[0].parentNode.removeChild(blocks[0]); + } + diff --git a/source/layouts/page.haml b/source/layouts/page.haml index cc085f9..10b153d 100644 --- a/source/layouts/page.haml +++ b/source/layouts/page.haml @@ -5,7 +5,7 @@ = current_page.data.title %main#content.container .row - .col-md-9 + .col-md-12 %article.post %section.post-content= yield %section.share.text-center @@ -20,4 +20,4 @@ %a.share-google-plus{:href => "https://plus.google.com/share?url=#{URI.join(blog_settings.url, current_page.url)}", :onclick => "window.open(this.href, 'google-plus-share', 'width=490,height=530');return false;", :true => ""} %span.fa-stack.fa-lg %i.fa.fa-circle.fa-stack-2x - %i.fa.fa-google.fa-stack-1x.fa-inverse + %i.fa.fa-google.fa-stack-1x.fa-inverse \ No newline at end of file diff --git a/source/layouts/post.haml b/source/layouts/post.haml index b9b3374..4d53625 100644 --- a/source/layouts/post.haml +++ b/source/layouts/post.haml @@ -1,82 +1,9 @@ --#= wrap_layout :layout do --# %header.main-header.post-head{cover} --# %nav.main-nav.clearfix{class: cover? ? 'overlay' : nil} --# - if blog_settings.logo.present? --# %a.blog-logo{href: home_path} --# = image_tag blog_settings.logo, alt: blog_settings.name --# - if blog_settings.navigation --# %a.menu-button.icon-menu{href: '#'} --# %span.word Menu --# --# %main.content{role: :main} --# %article.post --# %header.post-header --# %h1.post-title= current_article.title --# %section.post-meta --# %time.post-date{datetime: current_article.date.strftime('%Y-%m-%d')} --# = current_article.date.strftime(blog_settings.date_format) --# - if tags? --# on #{tags} --# --# %section.post-content= yield --# --# %footer.post-footer --# - if gravatar? --# %figure.author-image --# %a.img{href: author_path, style: "background-image: url(#{gravatar})"} --# %span.hidden #{blog_author.name}'s Picture --# %section.author --# %h4 --# %a{href: author_path}= blog_author.name --# --# %p --# - if blog_author.bio.present? --# = blog_author.bio --# - else --# Read --# %a{href: author_path} more posts --# by this author. --# --# - if blog_author.location.present? || blog_author.website.present? --# .author-meta --# - if blog_author.location.present? --# %span.author-location.icon-location= blog_author.location --# - if blog_author.website.present? --# %span.author-link.icon-link --# %a{href: blog_author.website}= blog_author.website --# --# %section.share --# %h4 Share this post --# %a.icon-twitter{href: twitter_url, onclick: "window.open(this.href, 'twitter-share', 'width=550,height=235');return false;"} --# %span.hidden Twitter --# %a.icon-facebook{href: facebook_url, onclick: "window.open(this.href, 'facebook-share','width=580,height=296');return false;"} --# %span.hidden Facebook --# %a.icon-google-plus{href: google_plus_url, onclick: "window.open(this.href, 'google-plus-share', 'width=490,height=530');return false;"} --# %span.hidden Google+ --# --# %aside.read-next --# - if prev_article = current_article.previous_article --# - attributes = { href: prev_article.url }.merge(cover(prev_article)) --# %a.read-next-story{attributes} --# %section.post --# %h2= prev_article.title --# %p #{read_next_summary(prev_article, 19)}… --# - if next_article = current_article.next_article --# - attributes = { href: next_article.url }.merge(cover(next_article)) --# %a.read-next-story.prev{attributes} --# %section.post --# %h2= next_article.title --# %p #{read_next_summary(next_article, 19)}… - - - - = wrap_layout :layout do %header.subheader .container %h2.page-title %small - %a{:href => "/"} + %a{:href => "/blog"} %i.fa.fa-chevron-left = current_article.title %main#content.container @@ -116,6 +43,8 @@ %span.fa-stack.fa-lg %i.fa.fa-circle.fa-stack-2x %i.fa.fa-google.fa-stack-1x.fa-inverse + %section.disqus.text-center + = partial('shared/disqus') .col-md-3 = partial('shared/recent_nav', locals: { page_articles: page_articles, paginate: paginate }) diff --git a/source/shared/_article.haml b/source/shared/_article.haml index 951e98d..ed1e87f 100644 --- a/source/shared/_article.haml +++ b/source/shared/_article.haml @@ -21,4 +21,4 @@ #{tags(article)} %section.post-content - = article.body + = article.body \ No newline at end of file diff --git a/source/shared/_disqus.haml b/source/shared/_disqus.haml new file mode 100644 index 0000000..c41c86f --- /dev/null +++ b/source/shared/_disqus.haml @@ -0,0 +1,21 @@ +#disqus_thread +:javascript + /** + * RECOMMENDED CONFIGURATION VARIABLES: EDIT AND UNCOMMENT THE SECTION BELOW TO INSERT DYNAMIC VALUES FROM YOUR PLATFORM OR CMS. + * LEARN WHY DEFINING THESE VARIABLES IS IMPORTANT: https://disqus.com/admin/universalcode/#configuration-variables*/ + /* + var disqus_config = function () { + this.page.url = #{current_page.url}; // Replace PAGE_URL with your page's canonical URL variable + }; + */ + (function() { // DON'T EDIT BELOW THIS LINE + var d = document, s = d.createElement('script'); + s.src = 'https://jeffreyfreeman.disqus.com/embed.js'; + s.setAttribute('data-timestamp', +new Date()); + (d.head || d.body).appendChild(s); + })(); +%noscript + Please enable JavaScript to view the + %a{:href => "https://disqus.com/?ref_noscript"} comments powered by Disqus. + +%script#dsq-count-scr{:async => "", :src => "//jeffreyfreeman.disqus.com/count.js"} diff --git a/source/shared/_navigation.haml b/source/shared/_navigation.haml index e081db5..2b128a7 100644 --- a/source/shared/_navigation.haml +++ b/source/shared/_navigation.haml @@ -1,17 +1,3 @@ --#.nav --# %h3.nav-title Menu --# %a.nav-close{href: '#'} --# %span.hidden Close --# %ul --# - navigation.try(:each) do |label, href| --# - css_class = %W(nav-#{label.parameterize}) --# - css_class << "nav-current" if current_page.url == href --# %li{class: css_class.join(' ')} --# %a{href: href}= label --# %a.subscribe-button.icon-feed{href: feed_path} Subscribe --#%span.nav-cover - - %nav.navbar.navbar-default .container .navbar-header diff --git a/source/shared/_page_articles.haml b/source/shared/_page_articles.haml index af2274c..9062f29 100644 --- a/source/shared/_page_articles.haml +++ b/source/shared/_page_articles.haml @@ -1,28 +1,3 @@ --#.extra-pagination.inner --# = partial('shared/pagination') if paginate --# --#- page_articles.each do |article| --# %article.post --# %header.post-header --# %h2.post-title= link_to article.title, article --# %section.post-excerpt --# %p --# = summary(article) --# = link_to '»', article, class: 'read-more' --# %footer.post-meta --# - if gravatar? --# %img.author-thumb{src: gravatar(24), alt: blog_author.name, nopin: 'nopin'} --# %a{href: author_path}= blog_author.name --# - if tags?(article) --# on #{tags(article)} --# %time.post-date{datetime: article.date.strftime('%Y-%m-%d')} --# = article.date.strftime(blog_settings.date_format) --# --#= partial('shared/pagination') if paginate - - - - .extra-pagination.inner = partial('shared/pagination') if paginate diff --git a/source/shared/_tags_nav.haml b/source/shared/_tags_nav.haml index 0917224..f0ebf4d 100644 --- a/source/shared/_tags_nav.haml +++ b/source/shared/_tags_nav.haml @@ -1,8 +1,8 @@ %nav.menu.tags - if selected_tag == 'all' - %a.menu-item.selected{"data-slug" => "all", :href => "/"} All posts + %a.menu-item.selected{"data-slug" => "all", :href => "/blog"} All posts - else - %a.menu-item{"data-slug" => "all", :href => "/"} All posts + %a.menu-item{"data-slug" => "all", :href => "/blog"} All posts - blog.tags.each do |tag, articles| - if selected_tag == tag diff --git a/source/stylesheets/application.css.scss b/source/stylesheets/application.css.scss index e491fcf..e6bd66a 100644 --- a/source/stylesheets/application.css.scss +++ b/source/stylesheets/application.css.scss @@ -215,4 +215,35 @@ code { @import 'vendor/primer-css/buttons'; @import 'vendor/primer-css/forms'; -@import 'vendor/primer-css/menu'; \ No newline at end of file +@import 'vendor/primer-css/menu'; + +.highlight, .highlight .w { + color: #fdfdfd; + background-color: #000000; +} + +// ---------------------------------------------------------- +// KaTeX Overloads +// ---------------------------------------------------------- +.ps-root { + font-size: 1.5em; +} + +// ---------------------------------------------------------- +// Youtube videos +// ---------------------------------------------------------- +.video-container { + position: relative; + padding-bottom: 56.25%; + padding-top: 30px; height: 0; overflow: hidden; +} + +.video-container iframe, +.video-container object, +.video-container embed { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} \ No newline at end of file diff --git a/source/stylesheets/font-awesome.min.css b/source/stylesheets/font-awesome.min.css new file mode 100644 index 0000000..ee4e978 --- /dev/null +++ b/source/stylesheets/font-awesome.min.css @@ -0,0 +1,4 @@ +/*! + * Font Awesome 4.4.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.4.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.4.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.4.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.4.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.4.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.4.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"} diff --git a/source/stylesheets/images/arrow.svg b/source/stylesheets/images/arrow.svg new file mode 100644 index 0000000..a76c07e --- /dev/null +++ b/source/stylesheets/images/arrow.svg @@ -0,0 +1,6 @@ +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="30px" height="30px" viewBox="0 0 30 30" zoomAndPan="disable" preserveAspectRatio="none"> + <style type="text/css"><![CDATA[ line { stroke: #ffffff; stroke-width: 3; } ]]></style> + <line x1="0" y1="15" x2="15" y2="30" /> + <line x1="30" y1="15" x2="15" y2="30" /> + <line x1="15" y1="30" x2="15" y2="0" /> +</svg> \ No newline at end of file diff --git a/source/stylesheets/images/bars.svg b/source/stylesheets/images/bars.svg new file mode 100644 index 0000000..467fb97 --- /dev/null +++ b/source/stylesheets/images/bars.svg @@ -0,0 +1,6 @@ +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16px" height="16px" viewBox="0 0 16 16" zoomAndPan="disable" preserveAspectRatio="none"> + <style type="text/css"><![CDATA[ line { stroke: #ffffff; stroke-width: 2; } ]]></style> + <line x1="0" y1="1" x2="16" y2="1" /> + <line x1="0" y1="7" x2="16" y2="7" /> + <line x1="0" y1="13" x2="16" y2="13" /> +</svg> \ No newline at end of file diff --git a/source/stylesheets/images/close.svg b/source/stylesheets/images/close.svg new file mode 100644 index 0000000..f80a2a3 --- /dev/null +++ b/source/stylesheets/images/close.svg @@ -0,0 +1,5 @@ +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16px" height="16px" viewBox="0 0 16 16" zoomAndPan="disable" preserveAspectRatio="none"> + <style type="text/css"><![CDATA[ line { stroke: #ffffff; stroke-width: 2; } ]]></style> + <line x1="0" y1="0" x2="16" y2="16" /> + <line x1="16" y1="0" x2="0" y2="16" /> +</svg> \ No newline at end of file diff --git a/source/stylesheets/katex.css b/source/stylesheets/katex.css new file mode 100644 index 0000000..f3137ef --- /dev/null +++ b/source/stylesheets/katex.css @@ -0,0 +1,976 @@ +@font-face { + font-family: 'KaTeX_AMS'; + src: url('/fonts/KaTeX_AMS-Regular.eot'); + src: url('/fonts/KaTeX_AMS-Regular.eot#iefix') format('embedded-opentype'), url('/fonts/KaTeX_AMS-Regular.woff2') format('woff2'), url('/fonts/KaTeX_AMS-Regular.woff') format('woff'), url('/fonts/KaTeX_AMS-Regular.ttf') format('truetype'); + font-weight: normal; + font-style: normal; +} +@font-face { + font-family: 'KaTeX_Caligraphic'; + src: url('/fonts/KaTeX_Caligraphic-Bold.eot'); + src: url('/fonts/KaTeX_Caligraphic-Bold.eot#iefix') format('embedded-opentype'), url('/fonts/KaTeX_Caligraphic-Bold.woff2') format('woff2'), url('/fonts/KaTeX_Caligraphic-Bold.woff') format('woff'), url('/fonts/KaTeX_Caligraphic-Bold.ttf') format('truetype'); + font-weight: bold; + font-style: normal; +} +@font-face { + font-family: 'KaTeX_Caligraphic'; + src: url('/fonts/KaTeX_Caligraphic-Regular.eot'); + src: url('/fonts/KaTeX_Caligraphic-Regular.eot#iefix') format('embedded-opentype'), url('/fonts/KaTeX_Caligraphic-Regular.woff2') format('woff2'), url('/fonts/KaTeX_Caligraphic-Regular.woff') format('woff'), url('/fonts/KaTeX_Caligraphic-Regular.ttf') format('truetype'); + font-weight: normal; + font-style: normal; +} +@font-face { + font-family: 'KaTeX_Fraktur'; + src: url('/fonts/KaTeX_Fraktur-Bold.eot'); + src: url('/fonts/KaTeX_Fraktur-Bold.eot#iefix') format('embedded-opentype'), url('/fonts/KaTeX_Fraktur-Bold.woff2') format('woff2'), url('/fonts/KaTeX_Fraktur-Bold.woff') format('woff'), url('/fonts/KaTeX_Fraktur-Bold.ttf') format('truetype'); + font-weight: bold; + font-style: normal; +} +@font-face { + font-family: 'KaTeX_Fraktur'; + src: url('/fonts/KaTeX_Fraktur-Regular.eot'); + src: url('/fonts/KaTeX_Fraktur-Regular.eot#iefix') format('embedded-opentype'), url('/fonts/KaTeX_Fraktur-Regular.woff2') format('woff2'), url('/fonts/KaTeX_Fraktur-Regular.woff') format('woff'), url('/fonts/KaTeX_Fraktur-Regular.ttf') format('truetype'); + font-weight: normal; + font-style: normal; +} +@font-face { + font-family: 'KaTeX_Main'; + src: url('/fonts/KaTeX_Main-Bold.eot'); + src: url('/fonts/KaTeX_Main-Bold.eot#iefix') format('embedded-opentype'), url('/fonts/KaTeX_Main-Bold.woff2') format('woff2'), url('/fonts/KaTeX_Main-Bold.woff') format('woff'), url('/fonts/KaTeX_Main-Bold.ttf') format('truetype'); + font-weight: bold; + font-style: normal; +} +@font-face { + font-family: 'KaTeX_Main'; + src: url('/fonts/KaTeX_Main-Italic.eot'); + src: url('/fonts/KaTeX_Main-Italic.eot#iefix') format('embedded-opentype'), url('/fonts/KaTeX_Main-Italic.woff2') format('woff2'), url('/fonts/KaTeX_Main-Italic.woff') format('woff'), url('/fonts/KaTeX_Main-Italic.ttf') format('truetype'); + font-weight: normal; + font-style: italic; +} +@font-face { + font-family: 'KaTeX_Main'; + src: url('/fonts/KaTeX_Main-Regular.eot'); + src: url('/fonts/KaTeX_Main-Regular.eot#iefix') format('embedded-opentype'), url('/fonts/KaTeX_Main-Regular.woff2') format('woff2'), url('/fonts/KaTeX_Main-Regular.woff') format('woff'), url('/fonts/KaTeX_Main-Regular.ttf') format('truetype'); + font-weight: normal; + font-style: normal; +} +@font-face { + font-family: 'KaTeX_Math'; + src: url('/fonts/KaTeX_Math-Italic.eot'); + src: url('/fonts/KaTeX_Math-Italic.eot#iefix') format('embedded-opentype'), url('/fonts/KaTeX_Math-Italic.woff2') format('woff2'), url('/fonts/KaTeX_Math-Italic.woff') format('woff'), url('/fonts/KaTeX_Math-Italic.ttf') format('truetype'); + font-weight: normal; + font-style: italic; +} +@font-face { + font-family: 'KaTeX_SansSerif'; + src: url('/fonts/KaTeX_SansSerif-Regular.eot'); + src: url('/fonts/KaTeX_SansSerif-Regular.eot#iefix') format('embedded-opentype'), url('/fonts/KaTeX_SansSerif-Regular.woff2') format('woff2'), url('/fonts/KaTeX_SansSerif-Regular.woff') format('woff'), url('/fonts/KaTeX_SansSerif-Regular.ttf') format('truetype'); + font-weight: normal; + font-style: normal; +} +@font-face { + font-family: 'KaTeX_Script'; + src: url('/fonts/KaTeX_Script-Regular.eot'); + src: url('/fonts/KaTeX_Script-Regular.eot#iefix') format('embedded-opentype'), url('/fonts/KaTeX_Script-Regular.woff2') format('woff2'), url('/fonts/KaTeX_Script-Regular.woff') format('woff'), url('/fonts/KaTeX_Script-Regular.ttf') format('truetype'); + font-weight: normal; + font-style: normal; +} +@font-face { + font-family: 'KaTeX_Size1'; + src: url('/fonts/KaTeX_Size1-Regular.eot'); + src: url('/fonts/KaTeX_Size1-Regular.eot#iefix') format('embedded-opentype'), url('/fonts/KaTeX_Size1-Regular.woff2') format('woff2'), url('/fonts/KaTeX_Size1-Regular.woff') format('woff'), url('/fonts/KaTeX_Size1-Regular.ttf') format('truetype'); + font-weight: normal; + font-style: normal; +} +@font-face { + font-family: 'KaTeX_Size2'; + src: url('/fonts/KaTeX_Size2-Regular.eot'); + src: url('/fonts/KaTeX_Size2-Regular.eot#iefix') format('embedded-opentype'), url('/fonts/KaTeX_Size2-Regular.woff2') format('woff2'), url('/fonts/KaTeX_Size2-Regular.woff') format('woff'), url('/fonts/KaTeX_Size2-Regular.ttf') format('truetype'); + font-weight: normal; + font-style: normal; +} +@font-face { + font-family: 'KaTeX_Size3'; + src: url('/fonts/KaTeX_Size3-Regular.eot'); + src: url('/fonts/KaTeX_Size3-Regular.eot#iefix') format('embedded-opentype'), url('/fonts/KaTeX_Size3-Regular.woff2') format('woff2'), url('/fonts/KaTeX_Size3-Regular.woff') format('woff'), url('/fonts/KaTeX_Size3-Regular.ttf') format('truetype'); + font-weight: normal; + font-style: normal; +} +@font-face { + font-family: 'KaTeX_Size4'; + src: url('/fonts/KaTeX_Size4-Regular.eot'); + src: url('/fonts/KaTeX_Size4-Regular.eot#iefix') format('embedded-opentype'), url('/fonts/KaTeX_Size4-Regular.woff2') format('woff2'), url('/fonts/KaTeX_Size4-Regular.woff') format('woff'), url('/fonts/KaTeX_Size4-Regular.ttf') format('truetype'); + font-weight: normal; + font-style: normal; +} +@font-face { + font-family: 'KaTeX_Typewriter'; + src: url('/fonts/KaTeX_Typewriter-Regular.eot'); + src: url('/fonts/KaTeX_Typewriter-Regular.eot#iefix') format('embedded-opentype'), url('/fonts/KaTeX_Typewriter-Regular.woff2') format('woff2'), url('/fonts/KaTeX_Typewriter-Regular.woff') format('woff'), url('/fonts/KaTeX_Typewriter-Regular.ttf') format('truetype'); + font-weight: normal; + font-style: normal; +} +.katex-display { + display: block; + margin: 1em 0; + text-align: center; +} +.katex-display > .katex { + display: inline-block; + text-align: initial; +} +.katex { + font: normal 1.21em KaTeX_Main, Times New Roman, serif; + line-height: 1.2; + white-space: nowrap; + text-indent: 0; +} +.katex .katex-html { + display: inline-block; +} +.katex .katex-mathml { + position: absolute; + clip: rect(1px, 1px, 1px, 1px); + padding: 0; + border: 0; + height: 1px; + width: 1px; + overflow: hidden; +} +.katex .base { + display: inline-block; +} +.katex .strut { + display: inline-block; +} +.katex .mathrm { + font-style: normal; +} +.katex .textit { + font-style: italic; +} +.katex .mathit { + font-family: KaTeX_Math; + font-style: italic; +} +.katex .mathbf { + font-family: KaTeX_Main; + font-weight: bold; +} +.katex .amsrm { + font-family: KaTeX_AMS; +} +.katex .mathbb { + font-family: KaTeX_AMS; +} +.katex .mathcal { + font-family: KaTeX_Caligraphic; +} +.katex .mathfrak { + font-family: KaTeX_Fraktur; +} +.katex .mathtt { + font-family: KaTeX_Typewriter; +} +.katex .mathscr { + font-family: KaTeX_Script; +} +.katex .mathsf { + font-family: KaTeX_SansSerif; +} +.katex .mainit { + font-family: KaTeX_Main; + font-style: italic; +} +.katex .mord + .mop { + margin-left: 0.16667em; +} +.katex .mord + .mbin { + margin-left: 0.22222em; +} +.katex .mord + .mrel { + margin-left: 0.27778em; +} +.katex .mord + .minner { + margin-left: 0.16667em; +} +.katex .mop + .mord { + margin-left: 0.16667em; +} +.katex .mop + .mop { + margin-left: 0.16667em; +} +.katex .mop + .mrel { + margin-left: 0.27778em; +} +.katex .mop + .minner { + margin-left: 0.16667em; +} +.katex .mbin + .mord { + margin-left: 0.22222em; +} +.katex .mbin + .mop { + margin-left: 0.22222em; +} +.katex .mbin + .mopen { + margin-left: 0.22222em; +} +.katex .mbin + .minner { + margin-left: 0.22222em; +} +.katex .mrel + .mord { + margin-left: 0.27778em; +} +.katex .mrel + .mop { + margin-left: 0.27778em; +} +.katex .mrel + .mopen { + margin-left: 0.27778em; +} +.katex .mrel + .minner { + margin-left: 0.27778em; +} +.katex .mclose + .mop { + margin-left: 0.16667em; +} +.katex .mclose + .mbin { + margin-left: 0.22222em; +} +.katex .mclose + .mrel { + margin-left: 0.27778em; +} +.katex .mclose + .minner { + margin-left: 0.16667em; +} +.katex .mpunct + .mord { + margin-left: 0.16667em; +} +.katex .mpunct + .mop { + margin-left: 0.16667em; +} +.katex .mpunct + .mrel { + margin-left: 0.16667em; +} +.katex .mpunct + .mopen { + margin-left: 0.16667em; +} +.katex .mpunct + .mclose { + margin-left: 0.16667em; +} +.katex .mpunct + .mpunct { + margin-left: 0.16667em; +} +.katex .mpunct + .minner { + margin-left: 0.16667em; +} +.katex .minner + .mord { + margin-left: 0.16667em; +} +.katex .minner + .mop { + margin-left: 0.16667em; +} +.katex .minner + .mbin { + margin-left: 0.22222em; +} +.katex .minner + .mrel { + margin-left: 0.27778em; +} +.katex .minner + .mopen { + margin-left: 0.16667em; +} +.katex .minner + .mpunct { + margin-left: 0.16667em; +} +.katex .minner + .minner { + margin-left: 0.16667em; +} +.katex .mord.mtight { + margin-left: 0; +} +.katex .mop.mtight { + margin-left: 0; +} +.katex .mbin.mtight { + margin-left: 0; +} +.katex .mrel.mtight { + margin-left: 0; +} +.katex .mopen.mtight { + margin-left: 0; +} +.katex .mclose.mtight { + margin-left: 0; +} +.katex .mpunct.mtight { + margin-left: 0; +} +.katex .minner.mtight { + margin-left: 0; +} +.katex .mord + .mop.mtight { + margin-left: 0.16667em; +} +.katex .mop + .mord.mtight { + margin-left: 0.16667em; +} +.katex .mop + .mop.mtight { + margin-left: 0.16667em; +} +.katex .mclose + .mop.mtight { + margin-left: 0.16667em; +} +.katex .minner + .mop.mtight { + margin-left: 0.16667em; +} +.katex .reset-textstyle.textstyle { + font-size: 1em; +} +.katex .reset-textstyle.scriptstyle { + font-size: 0.7em; +} +.katex .reset-textstyle.scriptscriptstyle { + font-size: 0.5em; +} +.katex .reset-scriptstyle.textstyle { + font-size: 1.42857em; +} +.katex .reset-scriptstyle.scriptstyle { + font-size: 1em; +} +.katex .reset-scriptstyle.scriptscriptstyle { + font-size: 0.71429em; +} +.katex .reset-scriptscriptstyle.textstyle { + font-size: 2em; +} +.katex .reset-scriptscriptstyle.scriptstyle { + font-size: 1.4em; +} +.katex .reset-scriptscriptstyle.scriptscriptstyle { + font-size: 1em; +} +.katex .style-wrap { + position: relative; +} +.katex .vlist { + display: inline-block; +} +.katex .vlist > span { + display: block; + height: 0; + position: relative; +} +.katex .vlist > span > span { + display: inline-block; +} +.katex .vlist .baseline-fix { + display: inline-table; + table-layout: fixed; +} +.katex .msupsub { + text-align: left; +} +.katex .mfrac > span > span { + text-align: center; +} +.katex .mfrac .frac-line { + width: 100%; +} +.katex .mfrac .frac-line:before { + border-bottom-style: solid; + border-bottom-width: 1px; + content: ""; + display: block; +} +.katex .mfrac .frac-line:after { + border-bottom-style: solid; + border-bottom-width: 0.04em; + content: ""; + display: block; + margin-top: -1px; +} +.katex .mspace { + display: inline-block; +} +.katex .mspace.negativethinspace { + margin-left: -0.16667em; +} +.katex .mspace.thinspace { + width: 0.16667em; +} +.katex .mspace.negativemediumspace { + margin-left: -0.22222em; +} +.katex .mspace.mediumspace { + width: 0.22222em; +} +.katex .mspace.thickspace { + width: 0.27778em; +} +.katex .mspace.sixmuspace { + width: 0.333333em; +} +.katex .mspace.eightmuspace { + width: 0.444444em; +} +.katex .mspace.enspace { + width: 0.5em; +} +.katex .mspace.twelvemuspace { + width: 0.666667em; +} +.katex .mspace.quad { + width: 1em; +} +.katex .mspace.qquad { + width: 2em; +} +.katex .llap, +.katex .rlap { + width: 0; + position: relative; +} +.katex .llap > .inner, +.katex .rlap > .inner { + position: absolute; +} +.katex .llap > .fix, +.katex .rlap > .fix { + display: inline-block; +} +.katex .llap > .inner { + right: 0; +} +.katex .rlap > .inner { + left: 0; +} +.katex .katex-logo .a { + font-size: 0.75em; + margin-left: -0.32em; + position: relative; + top: -0.2em; +} +.katex .katex-logo .t { + margin-left: -0.23em; +} +.katex .katex-logo .e { + margin-left: -0.1667em; + position: relative; + top: 0.2155em; +} +.katex .katex-logo .x { + margin-left: -0.125em; +} +.katex .rule { + display: inline-block; + border: solid 0; + position: relative; +} +.katex .overline .overline-line, +.katex .underline .underline-line { + width: 100%; +} +.katex .overline .overline-line:before, +.katex .underline .underline-line:before { + border-bottom-style: solid; + border-bottom-width: 1px; + content: ""; + display: block; +} +.katex .overline .overline-line:after, +.katex .underline .underline-line:after { + border-bottom-style: solid; + border-bottom-width: 0.04em; + content: ""; + display: block; + margin-top: -1px; +} +.katex .sqrt > .sqrt-sign { + position: relative; +} +.katex .sqrt .sqrt-line { + width: 100%; +} +.katex .sqrt .sqrt-line:before { + border-bottom-style: solid; + border-bottom-width: 1px; + content: ""; + display: block; +} +.katex .sqrt .sqrt-line:after { + border-bottom-style: solid; + border-bottom-width: 0.04em; + content: ""; + display: block; + margin-top: -1px; +} +.katex .sqrt > .root { + margin-left: 0.27777778em; + margin-right: -0.55555556em; +} +.katex .sizing, +.katex .fontsize-ensurer { + display: inline-block; +} +.katex .sizing.reset-size1.size1, +.katex .fontsize-ensurer.reset-size1.size1 { + font-size: 1em; +} +.katex .sizing.reset-size1.size2, +.katex .fontsize-ensurer.reset-size1.size2 { + font-size: 1.4em; +} +.katex .sizing.reset-size1.size3, +.katex .fontsize-ensurer.reset-size1.size3 { + font-size: 1.6em; +} +.katex .sizing.reset-size1.size4, +.katex .fontsize-ensurer.reset-size1.size4 { + font-size: 1.8em; +} +.katex .sizing.reset-size1.size5, +.katex .fontsize-ensurer.reset-size1.size5 { + font-size: 2em; +} +.katex .sizing.reset-size1.size6, +.katex .fontsize-ensurer.reset-size1.size6 { + font-size: 2.4em; +} +.katex .sizing.reset-size1.size7, +.katex .fontsize-ensurer.reset-size1.size7 { + font-size: 2.88em; +} +.katex .sizing.reset-size1.size8, +.katex .fontsize-ensurer.reset-size1.size8 { + font-size: 3.46em; +} +.katex .sizing.reset-size1.size9, +.katex .fontsize-ensurer.reset-size1.size9 { + font-size: 4.14em; +} +.katex .sizing.reset-size1.size10, +.katex .fontsize-ensurer.reset-size1.size10 { + font-size: 4.98em; +} +.katex .sizing.reset-size2.size1, +.katex .fontsize-ensurer.reset-size2.size1 { + font-size: 0.71428571em; +} +.katex .sizing.reset-size2.size2, +.katex .fontsize-ensurer.reset-size2.size2 { + font-size: 1em; +} +.katex .sizing.reset-size2.size3, +.katex .fontsize-ensurer.reset-size2.size3 { + font-size: 1.14285714em; +} +.katex .sizing.reset-size2.size4, +.katex .fontsize-ensurer.reset-size2.size4 { + font-size: 1.28571429em; +} +.katex .sizing.reset-size2.size5, +.katex .fontsize-ensurer.reset-size2.size5 { + font-size: 1.42857143em; +} +.katex .sizing.reset-size2.size6, +.katex .fontsize-ensurer.reset-size2.size6 { + font-size: 1.71428571em; +} +.katex .sizing.reset-size2.size7, +.katex .fontsize-ensurer.reset-size2.size7 { + font-size: 2.05714286em; +} +.katex .sizing.reset-size2.size8, +.katex .fontsize-ensurer.reset-size2.size8 { + font-size: 2.47142857em; +} +.katex .sizing.reset-size2.size9, +.katex .fontsize-ensurer.reset-size2.size9 { + font-size: 2.95714286em; +} +.katex .sizing.reset-size2.size10, +.katex .fontsize-ensurer.reset-size2.size10 { + font-size: 3.55714286em; +} +.katex .sizing.reset-size3.size1, +.katex .fontsize-ensurer.reset-size3.size1 { + font-size: 0.625em; +} +.katex .sizing.reset-size3.size2, +.katex .fontsize-ensurer.reset-size3.size2 { + font-size: 0.875em; +} +.katex .sizing.reset-size3.size3, +.katex .fontsize-ensurer.reset-size3.size3 { + font-size: 1em; +} +.katex .sizing.reset-size3.size4, +.katex .fontsize-ensurer.reset-size3.size4 { + font-size: 1.125em; +} +.katex .sizing.reset-size3.size5, +.katex .fontsize-ensurer.reset-size3.size5 { + font-size: 1.25em; +} +.katex .sizing.reset-size3.size6, +.katex .fontsize-ensurer.reset-size3.size6 { + font-size: 1.5em; +} +.katex .sizing.reset-size3.size7, +.katex .fontsize-ensurer.reset-size3.size7 { + font-size: 1.8em; +} +.katex .sizing.reset-size3.size8, +.katex .fontsize-ensurer.reset-size3.size8 { + font-size: 2.1625em; +} +.katex .sizing.reset-size3.size9, +.katex .fontsize-ensurer.reset-size3.size9 { + font-size: 2.5875em; +} +.katex .sizing.reset-size3.size10, +.katex .fontsize-ensurer.reset-size3.size10 { + font-size: 3.1125em; +} +.katex .sizing.reset-size4.size1, +.katex .fontsize-ensurer.reset-size4.size1 { + font-size: 0.55555556em; +} +.katex .sizing.reset-size4.size2, +.katex .fontsize-ensurer.reset-size4.size2 { + font-size: 0.77777778em; +} +.katex .sizing.reset-size4.size3, +.katex .fontsize-ensurer.reset-size4.size3 { + font-size: 0.88888889em; +} +.katex .sizing.reset-size4.size4, +.katex .fontsize-ensurer.reset-size4.size4 { + font-size: 1em; +} +.katex .sizing.reset-size4.size5, +.katex .fontsize-ensurer.reset-size4.size5 { + font-size: 1.11111111em; +} +.katex .sizing.reset-size4.size6, +.katex .fontsize-ensurer.reset-size4.size6 { + font-size: 1.33333333em; +} +.katex .sizing.reset-size4.size7, +.katex .fontsize-ensurer.reset-size4.size7 { + font-size: 1.6em; +} +.katex .sizing.reset-size4.size8, +.katex .fontsize-ensurer.reset-size4.size8 { + font-size: 1.92222222em; +} +.katex .sizing.reset-size4.size9, +.katex .fontsize-ensurer.reset-size4.size9 { + font-size: 2.3em; +} +.katex .sizing.reset-size4.size10, +.katex .fontsize-ensurer.reset-size4.size10 { + font-size: 2.76666667em; +} +.katex .sizing.reset-size5.size1, +.katex .fontsize-ensurer.reset-size5.size1 { + font-size: 0.5em; +} +.katex .sizing.reset-size5.size2, +.katex .fontsize-ensurer.reset-size5.size2 { + font-size: 0.7em; +} +.katex .sizing.reset-size5.size3, +.katex .fontsize-ensurer.reset-size5.size3 { + font-size: 0.8em; +} +.katex .sizing.reset-size5.size4, +.katex .fontsize-ensurer.reset-size5.size4 { + font-size: 0.9em; +} +.katex .sizing.reset-size5.size5, +.katex .fontsize-ensurer.reset-size5.size5 { + font-size: 1em; +} +.katex .sizing.reset-size5.size6, +.katex .fontsize-ensurer.reset-size5.size6 { + font-size: 1.2em; +} +.katex .sizing.reset-size5.size7, +.katex .fontsize-ensurer.reset-size5.size7 { + font-size: 1.44em; +} +.katex .sizing.reset-size5.size8, +.katex .fontsize-ensurer.reset-size5.size8 { + font-size: 1.73em; +} +.katex .sizing.reset-size5.size9, +.katex .fontsize-ensurer.reset-size5.size9 { + font-size: 2.07em; +} +.katex .sizing.reset-size5.size10, +.katex .fontsize-ensurer.reset-size5.size10 { + font-size: 2.49em; +} +.katex .sizing.reset-size6.size1, +.katex .fontsize-ensurer.reset-size6.size1 { + font-size: 0.41666667em; +} +.katex .sizing.reset-size6.size2, +.katex .fontsize-ensurer.reset-size6.size2 { + font-size: 0.58333333em; +} +.katex .sizing.reset-size6.size3, +.katex .fontsize-ensurer.reset-size6.size3 { + font-size: 0.66666667em; +} +.katex .sizing.reset-size6.size4, +.katex .fontsize-ensurer.reset-size6.size4 { + font-size: 0.75em; +} +.katex .sizing.reset-size6.size5, +.katex .fontsize-ensurer.reset-size6.size5 { + font-size: 0.83333333em; +} +.katex .sizing.reset-size6.size6, +.katex .fontsize-ensurer.reset-size6.size6 { + font-size: 1em; +} +.katex .sizing.reset-size6.size7, +.katex .fontsize-ensurer.reset-size6.size7 { + font-size: 1.2em; +} +.katex .sizing.reset-size6.size8, +.katex .fontsize-ensurer.reset-size6.size8 { + font-size: 1.44166667em; +} +.katex .sizing.reset-size6.size9, +.katex .fontsize-ensurer.reset-size6.size9 { + font-size: 1.725em; +} +.katex .sizing.reset-size6.size10, +.katex .fontsize-ensurer.reset-size6.size10 { + font-size: 2.075em; +} +.katex .sizing.reset-size7.size1, +.katex .fontsize-ensurer.reset-size7.size1 { + font-size: 0.34722222em; +} +.katex .sizing.reset-size7.size2, +.katex .fontsize-ensurer.reset-size7.size2 { + font-size: 0.48611111em; +} +.katex .sizing.reset-size7.size3, +.katex .fontsize-ensurer.reset-size7.size3 { + font-size: 0.55555556em; +} +.katex .sizing.reset-size7.size4, +.katex .fontsize-ensurer.reset-size7.size4 { + font-size: 0.625em; +} +.katex .sizing.reset-size7.size5, +.katex .fontsize-ensurer.reset-size7.size5 { + font-size: 0.69444444em; +} +.katex .sizing.reset-size7.size6, +.katex .fontsize-ensurer.reset-size7.size6 { + font-size: 0.83333333em; +} +.katex .sizing.reset-size7.size7, +.katex .fontsize-ensurer.reset-size7.size7 { + font-size: 1em; +} +.katex .sizing.reset-size7.size8, +.katex .fontsize-ensurer.reset-size7.size8 { + font-size: 1.20138889em; +} +.katex .sizing.reset-size7.size9, +.katex .fontsize-ensurer.reset-size7.size9 { + font-size: 1.4375em; +} +.katex .sizing.reset-size7.size10, +.katex .fontsize-ensurer.reset-size7.size10 { + font-size: 1.72916667em; +} +.katex .sizing.reset-size8.size1, +.katex .fontsize-ensurer.reset-size8.size1 { + font-size: 0.28901734em; +} +.katex .sizing.reset-size8.size2, +.katex .fontsize-ensurer.reset-size8.size2 { + font-size: 0.40462428em; +} +.katex .sizing.reset-size8.size3, +.katex .fontsize-ensurer.reset-size8.size3 { + font-size: 0.46242775em; +} +.katex .sizing.reset-size8.size4, +.katex .fontsize-ensurer.reset-size8.size4 { + font-size: 0.52023121em; +} +.katex .sizing.reset-size8.size5, +.katex .fontsize-ensurer.reset-size8.size5 { + font-size: 0.57803468em; +} +.katex .sizing.reset-size8.size6, +.katex .fontsize-ensurer.reset-size8.size6 { + font-size: 0.69364162em; +} +.katex .sizing.reset-size8.size7, +.katex .fontsize-ensurer.reset-size8.size7 { + font-size: 0.83236994em; +} +.katex .sizing.reset-size8.size8, +.katex .fontsize-ensurer.reset-size8.size8 { + font-size: 1em; +} +.katex .sizing.reset-size8.size9, +.katex .fontsize-ensurer.reset-size8.size9 { + font-size: 1.19653179em; +} +.katex .sizing.reset-size8.size10, +.katex .fontsize-ensurer.reset-size8.size10 { + font-size: 1.43930636em; +} +.katex .sizing.reset-size9.size1, +.katex .fontsize-ensurer.reset-size9.size1 { + font-size: 0.24154589em; +} +.katex .sizing.reset-size9.size2, +.katex .fontsize-ensurer.reset-size9.size2 { + font-size: 0.33816425em; +} +.katex .sizing.reset-size9.size3, +.katex .fontsize-ensurer.reset-size9.size3 { + font-size: 0.38647343em; +} +.katex .sizing.reset-size9.size4, +.katex .fontsize-ensurer.reset-size9.size4 { + font-size: 0.43478261em; +} +.katex .sizing.reset-size9.size5, +.katex .fontsize-ensurer.reset-size9.size5 { + font-size: 0.48309179em; +} +.katex .sizing.reset-size9.size6, +.katex .fontsize-ensurer.reset-size9.size6 { + font-size: 0.57971014em; +} +.katex .sizing.reset-size9.size7, +.katex .fontsize-ensurer.reset-size9.size7 { + font-size: 0.69565217em; +} +.katex .sizing.reset-size9.size8, +.katex .fontsize-ensurer.reset-size9.size8 { + font-size: 0.83574879em; +} +.katex .sizing.reset-size9.size9, +.katex .fontsize-ensurer.reset-size9.size9 { + font-size: 1em; +} +.katex .sizing.reset-size9.size10, +.katex .fontsize-ensurer.reset-size9.size10 { + font-size: 1.20289855em; +} +.katex .sizing.reset-size10.size1, +.katex .fontsize-ensurer.reset-size10.size1 { + font-size: 0.20080321em; +} +.katex .sizing.reset-size10.size2, +.katex .fontsize-ensurer.reset-size10.size2 { + font-size: 0.2811245em; +} +.katex .sizing.reset-size10.size3, +.katex .fontsize-ensurer.reset-size10.size3 { + font-size: 0.32128514em; +} +.katex .sizing.reset-size10.size4, +.katex .fontsize-ensurer.reset-size10.size4 { + font-size: 0.36144578em; +} +.katex .sizing.reset-size10.size5, +.katex .fontsize-ensurer.reset-size10.size5 { + font-size: 0.40160643em; +} +.katex .sizing.reset-size10.size6, +.katex .fontsize-ensurer.reset-size10.size6 { + font-size: 0.48192771em; +} +.katex .sizing.reset-size10.size7, +.katex .fontsize-ensurer.reset-size10.size7 { + font-size: 0.57831325em; +} +.katex .sizing.reset-size10.size8, +.katex .fontsize-ensurer.reset-size10.size8 { + font-size: 0.69477912em; +} +.katex .sizing.reset-size10.size9, +.katex .fontsize-ensurer.reset-size10.size9 { + font-size: 0.8313253em; +} +.katex .sizing.reset-size10.size10, +.katex .fontsize-ensurer.reset-size10.size10 { + font-size: 1em; +} +.katex .delimsizing.size1 { + font-family: KaTeX_Size1; +} +.katex .delimsizing.size2 { + font-family: KaTeX_Size2; +} +.katex .delimsizing.size3 { + font-family: KaTeX_Size3; +} +.katex .delimsizing.size4 { + font-family: KaTeX_Size4; +} +.katex .delimsizing.mult .delim-size1 > span { + font-family: KaTeX_Size1; +} +.katex .delimsizing.mult .delim-size4 > span { + font-family: KaTeX_Size4; +} +.katex .nulldelimiter { + display: inline-block; + width: 0.12em; +} +.katex .op-symbol { + position: relative; +} +.katex .op-symbol.small-op { + font-family: KaTeX_Size1; +} +.katex .op-symbol.large-op { + font-family: KaTeX_Size2; +} +.katex .op-limits > .vlist > span { + text-align: center; +} +.katex .accent > .vlist > span { + text-align: center; +} +.katex .accent .accent-body > span { + width: 0; +} +.katex .accent .accent-body.accent-vec > span { + position: relative; + left: 0.326em; +} +.katex .mtable .vertical-separator { + display: inline-block; + margin: 0 -0.025em; + border-right: 0.05em solid black; +} +.katex .mtable .arraycolsep { + display: inline-block; +} +.katex .mtable .col-align-c > .vlist { + text-align: center; +} +.katex .mtable .col-align-l > .vlist { + text-align: left; +} +.katex .mtable .col-align-r > .vlist { + text-align: right; +} diff --git a/source/stylesheets/pseudocode.css b/source/stylesheets/pseudocode.css new file mode 100644 index 0000000..1db441d --- /dev/null +++ b/source/stylesheets/pseudocode.css @@ -0,0 +1 @@ +@font-face{font-family:KaTeX_Typewriter_Replace;src:url(fonts/KaTeX_Typewriter-Regular.eot);src:url(fonts/KaTeX_Typewriter-Regular.eot#iefix) format('embedded-opentype'),url(fonts/KaTeX_Typewriter-Regular.woff2) format('woff2'),url(fonts/KaTeX_Typewriter-Regular.woff) format('woff'),url(fonts/KaTeX_Typewriter-Regular.ttf) format('ttf');font-weight:400;font-style:normal}@font-face{font-family:KaTeX_SansSerif_Replace;src:url(fonts/KaTeX_SansSerif-Bold.eot);src:url(fonts/KaTeX_SansSerif-Bold.eot#iefix) format('embedded-opentype'),url(fonts/KaTeX_SansSerif-Bold.woff2) format('woff2'),url(fonts/KaTeX_SansSerif-Bold.woff) format('woff'),url(fonts/KaTeX_SansSerif-Bold.ttf) format('ttf');font-weight:700;font-style:normal}.ps-root{font-family:KaTeX_Main,'Times New Roman',Times,serif;font-size:1em;font-weight:100;-webkit-font-smoothing:antialiased!important}.ps-root .ps-algorithm{margin:.8em 0;border-top:3px solid #000;border-bottom:2px solid #000}.ps-root .ps-algorithm.with-caption>.ps-line:first-child{border-bottom:2px solid #000}.ps-root .katex{text-indent:0;font-size:1em}.ps-root .ps-line{margin:0;padding:0;line-height:1.2}.ps-root .ps-funcname{font-family:KaTeX_Main,'Times New Roman',Times,serif;font-weight:400;font-variant:small-caps;font-style:normal;text-transform:none}.ps-root .ps-keyword{font-family:KaTeX_Main,'Times New Roman',Times,serif;font-weight:700;font-variant:normal;font-style:normal;text-transform:none}.ps-root .ps-comment{font-family:KaTeX_Main,'Times New Roman',Times,serif;font-weight:400;font-variant:normal;font-style:normal;text-transform:none}.ps-root .ps-linenum{font-size:.8em;line-height:1em;width:1.6em;text-align:right;display:inline-block;position:relative;padding-right:.3em}.ps-root .ps-algorithmic.with-linenum .ps-line.ps-code{text-indent:-1.6em}.ps-root .ps-algorithmic.with-linenum .ps-line.ps-code>span{text-indent:0} \ No newline at end of file diff --git a/source/tag.html.haml b/source/tag.html.haml index 1eef8d3..35013b1 100644 --- a/source/tag.html.haml +++ b/source/tag.html.haml @@ -3,28 +3,6 @@ pageable: true per_page: 6 --- --#%header.main-header.tag-head{cover} --# %nav.main-nav.overlay.clearfix --# - if blog_settings.logo.present? --# %a.blog-logo{href: home_path} --# = image_tag blog_settings.logo, alt: blog_settings.name --# - if blog_settings.navigation --# %a.menu-button.icon-menu{href: '#'} --# %span.word Menu --# .vertical --# .main-header-content.inner --# %h1.page-title= tagname --# %h2.page-description A #{page_articles.count}-post collection --# --#%main#content.content{role: :main} --# = partial('shared/page_articles', --# locals: { page_articles: page_articles, paginate: paginate }) - - - - - - %header.subheader .container %h2.page-title -- GitLab