[epiphany/mcatanzaro/pdfjs-2.8] Update to PDF.js v2.8.335




commit 5b83cf846f7b9731677204f8d2cf044056c091f6
Author: Michael Catanzaro <mcatanzaro gnome org>
Date:   Mon Apr 5 15:23:42 2021 -0500

    Update to PDF.js v2.8.335
    
    This does not actually work because all icons are blocked by CORS.

 third-party/pdfjs/README.epiphany.md               |    10 +-
 third-party/pdfjs/build/pdf.js                     |  4681 ++-
 third-party/pdfjs/build/pdf.worker.js              | 38139 ++++++++++++++-----
 third-party/pdfjs/epiphany-pdfjs-changes.patch     |    68 +-
 third-party/pdfjs/pdfjs.gresource.xml              |   568 +-
 third-party/pdfjs/web/debugger.js                  |    24 +-
 .../pdfjs/web/images/findbarButton-next-dark.svg   |     6 -
 .../web/images/findbarButton-previous-dark.svg     |     5 -
 ...ondaryToolbarButton-documentProperties-dark.svg |    16 -
 .../secondaryToolbarButton-firstPage-dark.svg      |     2 -
 .../secondaryToolbarButton-handTool-dark.svg       |     2 -
 .../secondaryToolbarButton-lastPage-dark.svg       |     2 -
 .../secondaryToolbarButton-rotateCcw-dark.svg      |     2 -
 .../secondaryToolbarButton-rotateCw-dark.svg       |     5 -
 ...econdaryToolbarButton-scrollHorizontal-dark.svg |     2 -
 .../secondaryToolbarButton-scrollVertical-dark.svg |     2 -
 .../secondaryToolbarButton-scrollWrapped-dark.svg  |     2 -
 .../secondaryToolbarButton-selectTool-dark.svg     |     5 -
 .../secondaryToolbarButton-spreadEven-dark.svg     |     2 -
 .../secondaryToolbarButton-spreadNone-dark.svg     |     2 -
 .../secondaryToolbarButton-spreadOdd-dark.svg      |     2 -
 .../web/images/toolbarButton-bookmark-dark.svg     |     2 -
 .../images/toolbarButton-currentOutlineItem.svg    |     1 +
 .../web/images/toolbarButton-download-dark.svg     |     5 -
 .../web/images/toolbarButton-menuArrow-dark.svg    |     1 -
 .../web/images/toolbarButton-openFile-dark.svg     |     5 -
 .../web/images/toolbarButton-pageDown-dark.svg     |     8 -
 .../pdfjs/web/images/toolbarButton-pageUp-dark.svg |    13 -
 .../images/toolbarButton-presentationMode-dark.svg |     2 -
 .../pdfjs/web/images/toolbarButton-print-dark.svg  |     5 -
 .../pdfjs/web/images/toolbarButton-search-dark.svg |     5 -
 .../toolbarButton-secondaryToolbarToggle-dark.svg  |     5 -
 .../images/toolbarButton-sidebarToggle-dark.svg    |     5 -
 .../images/toolbarButton-viewAttachments-dark.svg  |     2 -
 .../web/images/toolbarButton-viewLayers-dark.svg   |     1 -
 .../web/images/toolbarButton-viewOutline-dark.svg  |     2 -
 .../images/toolbarButton-viewThumbnail-dark.svg    |     5 -
 .../pdfjs/web/images/toolbarButton-zoomIn-dark.svg |     5 -
 .../web/images/toolbarButton-zoomOut-dark.svg      |     5 -
 .../pdfjs/web/images/treeitem-collapsed-dark.svg   |     2 -
 .../pdfjs/web/images/treeitem-expanded-dark.svg    |     2 -
 third-party/pdfjs/web/locale/ach/viewer.properties |     1 -
 third-party/pdfjs/web/locale/af/viewer.properties  |     1 -
 third-party/pdfjs/web/locale/an/viewer.properties  |    71 +-
 third-party/pdfjs/web/locale/ar/viewer.properties  |    19 +-
 third-party/pdfjs/web/locale/ast/viewer.properties |   100 +-
 third-party/pdfjs/web/locale/az/viewer.properties  |     9 +-
 third-party/pdfjs/web/locale/be/viewer.properties  |     7 +-
 third-party/pdfjs/web/locale/bg/viewer.properties  |     1 -
 third-party/pdfjs/web/locale/bn/viewer.properties  |     1 -
 third-party/pdfjs/web/locale/bo/viewer.properties  |     1 -
 third-party/pdfjs/web/locale/br/viewer.properties  |    43 +-
 third-party/pdfjs/web/locale/brx/viewer.properties |     1 -
 third-party/pdfjs/web/locale/bs/viewer.properties  |     1 -
 third-party/pdfjs/web/locale/ca/viewer.properties  |    11 +-
 third-party/pdfjs/web/locale/cak/viewer.properties |     7 +-
 third-party/pdfjs/web/locale/ckb/viewer.properties |   137 +-
 third-party/pdfjs/web/locale/cs/viewer.properties  |     7 +-
 third-party/pdfjs/web/locale/cy/viewer.properties  |     7 +-
 third-party/pdfjs/web/locale/da/viewer.properties  |     7 +-
 third-party/pdfjs/web/locale/de/viewer.properties  |     7 +-
 third-party/pdfjs/web/locale/dsb/viewer.properties |     7 +-
 third-party/pdfjs/web/locale/el/viewer.properties  |    13 +-
 .../pdfjs/web/locale/en-CA/viewer.properties       |    13 +-
 .../pdfjs/web/locale/en-GB/viewer.properties       |     7 +-
 .../pdfjs/web/locale/en-US/viewer.properties       |    12 +-
 third-party/pdfjs/web/locale/eo/viewer.properties  |     7 +-
 .../pdfjs/web/locale/es-AR/viewer.properties       |     7 +-
 .../pdfjs/web/locale/es-CL/viewer.properties       |     7 +-
 .../pdfjs/web/locale/es-ES/viewer.properties       |     7 +-
 .../pdfjs/web/locale/es-MX/viewer.properties       |     5 +-
 third-party/pdfjs/web/locale/et/viewer.properties  |     1 -
 third-party/pdfjs/web/locale/eu/viewer.properties  |     7 +-
 third-party/pdfjs/web/locale/fa/viewer.properties  |     1 -
 third-party/pdfjs/web/locale/ff/viewer.properties  |     1 -
 third-party/pdfjs/web/locale/fi/viewer.properties  |     7 +-
 third-party/pdfjs/web/locale/fr/viewer.properties  |     7 +-
 .../pdfjs/web/locale/fy-NL/viewer.properties       |     9 +-
 .../pdfjs/web/locale/ga-IE/viewer.properties       |     1 -
 third-party/pdfjs/web/locale/gd/viewer.properties  |     7 +-
 third-party/pdfjs/web/locale/gl/viewer.properties  |     7 +-
 third-party/pdfjs/web/locale/gn/viewer.properties  |     7 +-
 .../pdfjs/web/locale/gu-IN/viewer.properties       |     1 -
 third-party/pdfjs/web/locale/he/viewer.properties  |    15 +-
 .../pdfjs/web/locale/hi-IN/viewer.properties       |     1 -
 third-party/pdfjs/web/locale/hr/viewer.properties  |    17 +-
 third-party/pdfjs/web/locale/hsb/viewer.properties |     7 +-
 third-party/pdfjs/web/locale/hu/viewer.properties  |     7 +-
 .../pdfjs/web/locale/hy-AM/viewer.properties       |     1 -
 third-party/pdfjs/web/locale/hye/viewer.properties |    10 +-
 third-party/pdfjs/web/locale/ia/viewer.properties  |     9 +-
 third-party/pdfjs/web/locale/id/viewer.properties  |     7 +-
 third-party/pdfjs/web/locale/is/viewer.properties  |     1 -
 third-party/pdfjs/web/locale/it/viewer.properties  |     9 +-
 third-party/pdfjs/web/locale/ja/viewer.properties  |     8 +-
 third-party/pdfjs/web/locale/ka/viewer.properties  |    23 +-
 third-party/pdfjs/web/locale/kab/viewer.properties |    11 +-
 third-party/pdfjs/web/locale/kk/viewer.properties  |     7 +-
 third-party/pdfjs/web/locale/km/viewer.properties  |    34 +-
 third-party/pdfjs/web/locale/kn/viewer.properties  |     1 -
 third-party/pdfjs/web/locale/ko/viewer.properties  |    27 +-
 third-party/pdfjs/web/locale/lij/viewer.properties |     1 -
 third-party/pdfjs/web/locale/lo/viewer.properties  |     1 -
 third-party/pdfjs/web/locale/lt/viewer.properties  |    19 +-
 third-party/pdfjs/web/locale/ltg/viewer.properties |     1 -
 third-party/pdfjs/web/locale/lv/viewer.properties  |     1 -
 third-party/pdfjs/web/locale/mk/viewer.properties  |     1 -
 third-party/pdfjs/web/locale/mr/viewer.properties  |     1 -
 third-party/pdfjs/web/locale/ms/viewer.properties  |     1 -
 third-party/pdfjs/web/locale/my/viewer.properties  |     1 -
 .../pdfjs/web/locale/nb-NO/viewer.properties       |     7 +-
 .../pdfjs/web/locale/ne-NP/viewer.properties       |     1 -
 third-party/pdfjs/web/locale/nl/viewer.properties  |     7 +-
 .../pdfjs/web/locale/nn-NO/viewer.properties       |     7 +-
 third-party/pdfjs/web/locale/oc/viewer.properties  |    13 +-
 .../pdfjs/web/locale/pa-IN/viewer.properties       |    13 +-
 third-party/pdfjs/web/locale/pl/viewer.properties  |     7 +-
 .../pdfjs/web/locale/pt-BR/viewer.properties       |    37 +-
 .../pdfjs/web/locale/pt-PT/viewer.properties       |     7 +-
 third-party/pdfjs/web/locale/rm/viewer.properties  |     7 +-
 third-party/pdfjs/web/locale/ro/viewer.properties  |     1 -
 third-party/pdfjs/web/locale/ru/viewer.properties  |     9 +-
 third-party/pdfjs/web/locale/si/viewer.properties  |     1 -
 third-party/pdfjs/web/locale/sk/viewer.properties  |     9 +-
 third-party/pdfjs/web/locale/sl/viewer.properties  |     7 +-
 third-party/pdfjs/web/locale/son/viewer.properties |     1 -
 third-party/pdfjs/web/locale/sq/viewer.properties  |     5 +-
 third-party/pdfjs/web/locale/sr/viewer.properties  |     7 +-
 .../pdfjs/web/locale/sv-SE/viewer.properties       |    13 +-
 third-party/pdfjs/web/locale/szl/viewer.properties |     7 +-
 third-party/pdfjs/web/locale/ta/viewer.properties  |     1 -
 third-party/pdfjs/web/locale/te/viewer.properties  |     5 +-
 third-party/pdfjs/web/locale/th/viewer.properties  |     7 +-
 third-party/pdfjs/web/locale/tl/viewer.properties  |   143 +-
 third-party/pdfjs/web/locale/tr/viewer.properties  |     7 +-
 third-party/pdfjs/web/locale/trs/viewer.properties |     1 -
 third-party/pdfjs/web/locale/uk/viewer.properties  |     9 +-
 third-party/pdfjs/web/locale/ur/viewer.properties  |     1 -
 third-party/pdfjs/web/locale/uz/viewer.properties  |     1 -
 third-party/pdfjs/web/locale/vi/viewer.properties  |     7 +-
 third-party/pdfjs/web/locale/wo/viewer.properties  |     1 -
 third-party/pdfjs/web/locale/xh/viewer.properties  |     1 -
 .../pdfjs/web/locale/zh-CN/viewer.properties       |     7 +-
 .../pdfjs/web/locale/zh-TW/viewer.properties       |     9 +-
 third-party/pdfjs/web/viewer.css                   |  2445 +-
 third-party/pdfjs/web/viewer.html                  |    65 +-
 third-party/pdfjs/web/viewer.js                    |  9697 ++---
 147 files changed, 37628 insertions(+), 19375 deletions(-)
---
diff --git a/third-party/pdfjs/README.epiphany.md b/third-party/pdfjs/README.epiphany.md
index 81070302a..5040b54b8 100644
--- a/third-party/pdfjs/README.epiphany.md
+++ b/third-party/pdfjs/README.epiphany.md
@@ -3,10 +3,12 @@
 This directory contains an official pdf.js release version, distributed at: https://github.com/mozilla/pdf.js
 
 ## Update process
-Grab a new official release (*-dist.zip) distributed at github and extract everything except 
viewer.[html/js/css] and map files into this directory.
-Then recreate the resource xml file with `python ./pdfjs_generate_resource.py`
-
-The additional files within this directory are modified for Epiphany and shouldn't be changed automatically.
+1. Delete existing files except epiphany-pdfjs-changes.patch, pdfjs_generate_resource.py, and 
README.epiphany.md.
+2. Grab a new official release (*-dist.zip) distributed at github and extract everything into this directory.
+3. Delete precompiled .map files (viewer.js.map, pdf.js.map, pdf.worker.js.map, pdf.sandbox.js.map).
+4. Manually merge changes from epiphany-pdfjs-changes.patch into web/viewer.[html/js/css].
+5. Recreate epiphany-pdfjs-changes.patch.
+6. Recreate the resource xml file with `python ./pdfjs_generate_resource.py`
 
 ## Modifications to viewer.html
 1. In order to circumvent CORS the pdf is downloaded and then embedded into the viewer.html file. Therefore 
the head has an
diff --git a/third-party/pdfjs/build/pdf.js b/third-party/pdfjs/build/pdf.js
index 8d59e6dd9..7293ddd1d 100644
--- a/third-party/pdfjs/build/pdf.js
+++ b/third-party/pdfjs/build/pdf.js
@@ -2,7 +2,7 @@
  * @licstart The following is the entire license notice for the
  * Javascript code in this page
  *
- * Copyright 2020 Mozilla Foundation
+ * Copyright 2021 Mozilla Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -30,360 +30,28 @@
        else
                root["pdfjs-dist/build/pdf"] = root.pdfjsLib = factory();
 })(this, function() {
-return /******/ (function(modules) { // webpackBootstrap
-/******/       // The module cache
-/******/       var installedModules = {};
-/******/
-/******/       // The require function
-/******/       function __w_pdfjs_require__(moduleId) {
-/******/
-/******/               // Check if module is in cache
-/******/               if(installedModules[moduleId]) {
-/******/                       return installedModules[moduleId].exports;
-/******/               }
-/******/               // Create a new module (and put it into the cache)
-/******/               var module = installedModules[moduleId] = {
-/******/                       i: moduleId,
-/******/                       l: false,
-/******/                       exports: {}
-/******/               };
-/******/
-/******/               // Execute the module function
-/******/               modules[moduleId].call(module.exports, module, module.exports, __w_pdfjs_require__);
-/******/
-/******/               // Flag the module as loaded
-/******/               module.l = true;
-/******/
-/******/               // Return the exports of the module
-/******/               return module.exports;
-/******/       }
-/******/
-/******/
-/******/       // expose the modules object (__webpack_modules__)
-/******/       __w_pdfjs_require__.m = modules;
-/******/
-/******/       // expose the module cache
-/******/       __w_pdfjs_require__.c = installedModules;
-/******/
-/******/       // define getter function for harmony exports
-/******/       __w_pdfjs_require__.d = function(exports, name, getter) {
-/******/               if(!__w_pdfjs_require__.o(exports, name)) {
-/******/                       Object.defineProperty(exports, name, { enumerable: true, get: getter });
-/******/               }
-/******/       };
-/******/
-/******/       // define __esModule on exports
-/******/       __w_pdfjs_require__.r = function(exports) {
-/******/               if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
-/******/                       Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
-/******/               }
-/******/               Object.defineProperty(exports, '__esModule', { value: true });
-/******/       };
-/******/
-/******/       // create a fake namespace object
-/******/       // mode & 1: value is a module id, require it
-/******/       // mode & 2: merge all properties of value into the ns
-/******/       // mode & 4: return value when already ns object
-/******/       // mode & 8|1: behave like require
-/******/       __w_pdfjs_require__.t = function(value, mode) {
-/******/               if(mode & 1) value = __w_pdfjs_require__(value);
-/******/               if(mode & 8) return value;
-/******/               if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
-/******/               var ns = Object.create(null);
-/******/               __w_pdfjs_require__.r(ns);
-/******/               Object.defineProperty(ns, 'default', { enumerable: true, value: value });
-/******/               if(mode & 2 && typeof value != 'string') for(var key in value) 
__w_pdfjs_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
-/******/               return ns;
-/******/       };
-/******/
-/******/       // getDefaultExport function for compatibility with non-harmony modules
-/******/       __w_pdfjs_require__.n = function(module) {
-/******/               var getter = module && module.__esModule ?
-/******/                       function getDefault() { return module['default']; } :
-/******/                       function getModuleExports() { return module; };
-/******/               __w_pdfjs_require__.d(getter, 'a', getter);
-/******/               return getter;
-/******/       };
-/******/
-/******/       // Object.prototype.hasOwnProperty.call
-/******/       __w_pdfjs_require__.o = function(object, property) { return 
Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/       // __webpack_public_path__
-/******/       __w_pdfjs_require__.p = "";
-/******/
-/******/
-/******/       // Load entry module and return exports
-/******/       return __w_pdfjs_require__(__w_pdfjs_require__.s = 0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-Object.defineProperty(exports, "addLinkAttributes", {
-  enumerable: true,
-  get: function () {
-    return _display_utils.addLinkAttributes;
-  }
-});
-Object.defineProperty(exports, "getFilenameFromUrl", {
-  enumerable: true,
-  get: function () {
-    return _display_utils.getFilenameFromUrl;
-  }
-});
-Object.defineProperty(exports, "LinkTarget", {
-  enumerable: true,
-  get: function () {
-    return _display_utils.LinkTarget;
-  }
-});
-Object.defineProperty(exports, "loadScript", {
-  enumerable: true,
-  get: function () {
-    return _display_utils.loadScript;
-  }
-});
-Object.defineProperty(exports, "PDFDateString", {
-  enumerable: true,
-  get: function () {
-    return _display_utils.PDFDateString;
-  }
-});
-Object.defineProperty(exports, "RenderingCancelledException", {
-  enumerable: true,
-  get: function () {
-    return _display_utils.RenderingCancelledException;
-  }
-});
-Object.defineProperty(exports, "build", {
-  enumerable: true,
-  get: function () {
-    return _api.build;
-  }
-});
-Object.defineProperty(exports, "getDocument", {
-  enumerable: true,
-  get: function () {
-    return _api.getDocument;
-  }
-});
-Object.defineProperty(exports, "LoopbackPort", {
-  enumerable: true,
-  get: function () {
-    return _api.LoopbackPort;
-  }
-});
-Object.defineProperty(exports, "PDFDataRangeTransport", {
-  enumerable: true,
-  get: function () {
-    return _api.PDFDataRangeTransport;
-  }
-});
-Object.defineProperty(exports, "PDFWorker", {
-  enumerable: true,
-  get: function () {
-    return _api.PDFWorker;
-  }
-});
-Object.defineProperty(exports, "version", {
-  enumerable: true,
-  get: function () {
-    return _api.version;
-  }
-});
-Object.defineProperty(exports, "CMapCompressionType", {
-  enumerable: true,
-  get: function () {
-    return _util.CMapCompressionType;
-  }
-});
-Object.defineProperty(exports, "createObjectURL", {
-  enumerable: true,
-  get: function () {
-    return _util.createObjectURL;
-  }
-});
-Object.defineProperty(exports, "createPromiseCapability", {
-  enumerable: true,
-  get: function () {
-    return _util.createPromiseCapability;
-  }
-});
-Object.defineProperty(exports, "createValidAbsoluteUrl", {
-  enumerable: true,
-  get: function () {
-    return _util.createValidAbsoluteUrl;
-  }
-});
-Object.defineProperty(exports, "InvalidPDFException", {
-  enumerable: true,
-  get: function () {
-    return _util.InvalidPDFException;
-  }
-});
-Object.defineProperty(exports, "MissingPDFException", {
-  enumerable: true,
-  get: function () {
-    return _util.MissingPDFException;
-  }
-});
-Object.defineProperty(exports, "OPS", {
-  enumerable: true,
-  get: function () {
-    return _util.OPS;
-  }
-});
-Object.defineProperty(exports, "PasswordResponses", {
-  enumerable: true,
-  get: function () {
-    return _util.PasswordResponses;
-  }
-});
-Object.defineProperty(exports, "PermissionFlag", {
-  enumerable: true,
-  get: function () {
-    return _util.PermissionFlag;
-  }
-});
-Object.defineProperty(exports, "removeNullCharacters", {
-  enumerable: true,
-  get: function () {
-    return _util.removeNullCharacters;
-  }
-});
-Object.defineProperty(exports, "shadow", {
-  enumerable: true,
-  get: function () {
-    return _util.shadow;
-  }
-});
-Object.defineProperty(exports, "UnexpectedResponseException", {
-  enumerable: true,
-  get: function () {
-    return _util.UnexpectedResponseException;
-  }
-});
-Object.defineProperty(exports, "UNSUPPORTED_FEATURES", {
-  enumerable: true,
-  get: function () {
-    return _util.UNSUPPORTED_FEATURES;
-  }
-});
-Object.defineProperty(exports, "Util", {
-  enumerable: true,
-  get: function () {
-    return _util.Util;
-  }
-});
-Object.defineProperty(exports, "VerbosityLevel", {
-  enumerable: true,
-  get: function () {
-    return _util.VerbosityLevel;
-  }
-});
-Object.defineProperty(exports, "AnnotationLayer", {
-  enumerable: true,
-  get: function () {
-    return _annotation_layer.AnnotationLayer;
-  }
-});
-Object.defineProperty(exports, "apiCompatibilityParams", {
-  enumerable: true,
-  get: function () {
-    return _api_compatibility.apiCompatibilityParams;
-  }
-});
-Object.defineProperty(exports, "GlobalWorkerOptions", {
-  enumerable: true,
-  get: function () {
-    return _worker_options.GlobalWorkerOptions;
-  }
-});
-Object.defineProperty(exports, "renderTextLayer", {
-  enumerable: true,
-  get: function () {
-    return _text_layer.renderTextLayer;
-  }
-});
-Object.defineProperty(exports, "SVGGraphics", {
-  enumerable: true,
-  get: function () {
-    return _svg.SVGGraphics;
-  }
-});
-
-var _display_utils = __w_pdfjs_require__(1);
-
-var _api = __w_pdfjs_require__(5);
-
-var _util = __w_pdfjs_require__(2);
-
-var _annotation_layer = __w_pdfjs_require__(19);
-
-var _api_compatibility = __w_pdfjs_require__(9);
-
-var _worker_options = __w_pdfjs_require__(12);
-
-var _text_layer = __w_pdfjs_require__(20);
-
-var _svg = __w_pdfjs_require__(21);
-
-const pdfjsVersion = '2.6.347';
-const pdfjsBuild = '3be9c65f';
-{
-  const {
-    isNodeJS
-  } = __w_pdfjs_require__(4);
-
-  if (isNodeJS) {
-    const PDFNodeStream = __w_pdfjs_require__(22).PDFNodeStream;
-
-    (0, _api.setPDFNetworkStreamFactory)(params => {
-      return new PDFNodeStream(params);
-    });
-  } else {
-    const PDFNetworkStream = __w_pdfjs_require__(25).PDFNetworkStream;
-
-    let PDFFetchStream;
-
-    if ((0, _display_utils.isFetchSupported)()) {
-      PDFFetchStream = __w_pdfjs_require__(26).PDFFetchStream;
-    }
-
-    (0, _api.setPDFNetworkStreamFactory)(params => {
-      if (PDFFetchStream && (0, _display_utils.isValidFetchUrl)(params.url)) {
-        return new PDFFetchStream(params);
-      }
-
-      return new PDFNetworkStream(params);
-    });
-  }
-}
-
-/***/ }),
+return /******/ (() => { // webpackBootstrap
+/******/       "use strict";
+/******/       var __webpack_modules__ = ([
+/* 0 */,
 /* 1 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.addLinkAttributes = addLinkAttributes;
+exports.deprecated = deprecated;
 exports.getFilenameFromUrl = getFilenameFromUrl;
+exports.getPdfFilenameFromUrl = getPdfFilenameFromUrl;
+exports.isDataScheme = isDataScheme;
 exports.isFetchSupported = isFetchSupported;
+exports.isPdfFile = isPdfFile;
 exports.isValidFetchUrl = isValidFetchUrl;
 exports.loadScript = loadScript;
-exports.deprecated = deprecated;
-exports.PDFDateString = exports.StatTimer = exports.DOMSVGFactory = exports.DOMCMapReaderFactory = 
exports.BaseCMapReaderFactory = exports.DOMCanvasFactory = exports.BaseCanvasFactory = 
exports.DEFAULT_LINK_REL = exports.LinkTarget = exports.RenderingCancelledException = exports.PageViewport = 
void 0;
+exports.StatTimer = exports.RenderingCancelledException = exports.PDFDateString = exports.PageViewport = 
exports.LinkTarget = exports.DOMSVGFactory = exports.DOMCMapReaderFactory = exports.DOMCanvasFactory = 
exports.DEFAULT_LINK_REL = exports.BaseCMapReaderFactory = exports.BaseCanvasFactory = void 0;
 
 var _util = __w_pdfjs_require__(2);
 
@@ -600,8 +268,11 @@ class PageViewport {
     const centerX = (viewBox[2] + viewBox[0]) / 2;
     const centerY = (viewBox[3] + viewBox[1]) / 2;
     let rotateA, rotateB, rotateC, rotateD;
-    rotation = rotation % 360;
-    rotation = rotation < 0 ? rotation + 360 : rotation;
+    rotation %= 360;
+
+    if (rotation < 0) {
+      rotation += 360;
+    }
 
     switch (rotation) {
       case 180:
@@ -763,6 +434,21 @@ function addLinkAttributes(link, {
   link.rel = typeof rel === "string" ? rel : DEFAULT_LINK_REL;
 }
 
+function isDataScheme(url) {
+  const ii = url.length;
+  let i = 0;
+
+  while (i < ii && url[i].trim() === "") {
+    i++;
+  }
+
+  return url.substring(i, i + 5).toLowerCase() === "data:";
+}
+
+function isPdfFile(filename) {
+  return typeof filename === "string" && /\.pdf$/i.test(filename);
+}
+
 function getFilenameFromUrl(url) {
   const anchor = url.indexOf("#");
   const query = url.indexOf("?");
@@ -770,6 +456,34 @@ function getFilenameFromUrl(url) {
   return url.substring(url.lastIndexOf("/", end) + 1, end);
 }
 
+function getPdfFilenameFromUrl(url, defaultFilename = "document.pdf") {
+  if (typeof url !== "string") {
+    return defaultFilename;
+  }
+
+  if (isDataScheme(url)) {
+    (0, _util.warn)('getPdfFilenameFromUrl: ignore "data:"-URL for performance reasons.');
+    return defaultFilename;
+  }
+
+  const reURI = /^(?:(?:[^:]+:)?\/\/[^/]+)?([^?#]*)(\?[^#]*)?(#.*)?$/;
+  const reFilename = /[^/?#=]+\.pdf\b(?!.*\.pdf\b)/i;
+  const splitURI = reURI.exec(url);
+  let suggestedFilename = reFilename.exec(splitURI[1]) || reFilename.exec(splitURI[2]) || 
reFilename.exec(splitURI[3]);
+
+  if (suggestedFilename) {
+    suggestedFilename = suggestedFilename[0];
+
+    if (suggestedFilename.includes("%")) {
+      try {
+        suggestedFilename = reFilename.exec(decodeURIComponent(suggestedFilename))[0];
+      } catch (ex) {}
+    }
+  }
+
+  return suggestedFilename || defaultFilename;
+}
+
 class StatTimer {
   constructor() {
     this.started = Object.create(null);
@@ -836,11 +550,18 @@ function isValidFetchUrl(url, baseUrl) {
   }
 }
 
-function loadScript(src) {
+function loadScript(src, removeScriptElement = false) {
   return new Promise((resolve, reject) => {
     const script = document.createElement("script");
     script.src = src;
-    script.onload = resolve;
+
+    script.onload = function (evt) {
+      if (removeScriptElement) {
+        script.remove();
+      }
+
+      resolve(evt);
+    };
 
     script.onerror = function () {
       reject(new Error(`Cannot load script at: ${script.src}`));
@@ -906,41 +627,45 @@ exports.PDFDateString = PDFDateString;
 
 /***/ }),
 /* 2 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.arrayByteLength = arrayByteLength;
 exports.arraysToBytes = arraysToBytes;
 exports.assert = assert;
 exports.bytesToString = bytesToString;
+exports.createObjectURL = createObjectURL;
 exports.createPromiseCapability = createPromiseCapability;
+exports.createValidAbsoluteUrl = createValidAbsoluteUrl;
 exports.escapeString = escapeString;
 exports.getModificationDate = getModificationDate;
 exports.getVerbosityLevel = getVerbosityLevel;
 exports.info = info;
 exports.isArrayBuffer = isArrayBuffer;
 exports.isArrayEqual = isArrayEqual;
+exports.isAscii = isAscii;
 exports.isBool = isBool;
 exports.isNum = isNum;
-exports.isString = isString;
 exports.isSameOrigin = isSameOrigin;
-exports.createValidAbsoluteUrl = createValidAbsoluteUrl;
+exports.isString = isString;
+exports.objectFromMap = objectFromMap;
+exports.objectSize = objectSize;
 exports.removeNullCharacters = removeNullCharacters;
 exports.setVerbosityLevel = setVerbosityLevel;
 exports.shadow = shadow;
 exports.string32 = string32;
 exports.stringToBytes = stringToBytes;
 exports.stringToPDFString = stringToPDFString;
+exports.stringToUTF16BEString = stringToUTF16BEString;
 exports.stringToUTF8String = stringToUTF8String;
+exports.unreachable = unreachable;
 exports.utf8StringToString = utf8StringToString;
 exports.warn = warn;
-exports.unreachable = unreachable;
-exports.IsEvalSupportedCached = exports.IsLittleEndianCached = exports.createObjectURL = exports.FormatError 
= exports.Util = exports.UnknownErrorException = exports.UnexpectedResponseException = 
exports.TextRenderingMode = exports.StreamType = exports.PermissionFlag = exports.PasswordResponses = 
exports.PasswordException = exports.MissingPDFException = exports.InvalidPDFException = 
exports.AbortException = exports.CMapCompressionType = exports.ImageKind = exports.FontType = 
exports.AnnotationType = exports.AnnotationStateModelType = exports.AnnotationReviewState = 
exports.AnnotationReplyType = exports.AnnotationMarkedState = exports.AnnotationFlag = 
exports.AnnotationFieldFlag = exports.AnnotationBorderStyleType = exports.UNSUPPORTED_FEATURES = 
exports.VerbosityLevel = exports.OPS = exports.IDENTITY_MATRIX = exports.FONT_IDENTITY_MATRIX = 
exports.BaseException = void 0;
+exports.VerbosityLevel = exports.Util = exports.UNSUPPORTED_FEATURES = exports.UnknownErrorException = 
exports.UnexpectedResponseException = exports.TextRenderingMode = exports.StreamType = exports.PermissionFlag 
= exports.PasswordResponses = exports.PasswordException = exports.PageActionEventType = exports.OPS = 
exports.MissingPDFException = exports.IsLittleEndianCached = exports.IsEvalSupportedCached = 
exports.InvalidPDFException = exports.ImageKind = exports.IDENTITY_MATRIX = exports.FormatError = 
exports.FontType = exports.FONT_IDENTITY_MATRIX = exports.DocumentActionEventType = 
exports.CMapCompressionType = exports.BaseException = exports.AnnotationType = 
exports.AnnotationStateModelType = exports.AnnotationReviewState = exports.AnnotationReplyType = 
exports.AnnotationMarkedState = exports.AnnotationFlag = exports.AnnotationFieldFlag = 
exports.AnnotationBorderStyleType = exports.AnnotationActionEventType = exports.AbortException = void 0;
 
 __w_pdfjs_require__(3);
 
@@ -1073,6 +798,36 @@ const AnnotationBorderStyleType = {
   UNDERLINE: 5
 };
 exports.AnnotationBorderStyleType = AnnotationBorderStyleType;
+const AnnotationActionEventType = {
+  E: "Mouse Enter",
+  X: "Mouse Exit",
+  D: "Mouse Down",
+  U: "Mouse Up",
+  Fo: "Focus",
+  Bl: "Blur",
+  PO: "PageOpen",
+  PC: "PageClose",
+  PV: "PageVisible",
+  PI: "PageInvisible",
+  K: "Keystroke",
+  F: "Format",
+  V: "Validate",
+  C: "Calculate"
+};
+exports.AnnotationActionEventType = AnnotationActionEventType;
+const DocumentActionEventType = {
+  WC: "WillClose",
+  WS: "WillSave",
+  DS: "DidSave",
+  WP: "WillPrint",
+  DP: "DidPrint"
+};
+exports.DocumentActionEventType = DocumentActionEventType;
+const PageActionEventType = {
+  O: "PageOpen",
+  C: "PageClose"
+};
+exports.PageActionEventType = PageActionEventType;
 const StreamType = {
   UNKNOWN: "UNKNOWN",
   FLATE: "FLATE",
@@ -1481,6 +1236,20 @@ function string32(value) {
   return String.fromCharCode(value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff);
 }
 
+function objectSize(obj) {
+  return Object.keys(obj).length;
+}
+
+function objectFromMap(map) {
+  const obj = Object.create(null);
+
+  for (const [key, value] of map) {
+    obj[key] = value;
+  }
+
+  return obj;
+}
+
 function isLittleEndian() {
   const buffer8 = new Uint8Array(4);
   buffer8[0] = 1;
@@ -1512,14 +1281,11 @@ const IsEvalSupportedCached = {
 
 };
 exports.IsEvalSupportedCached = IsEvalSupportedCached;
-const rgbBuf = ["rgb(", 0, ",", 0, ",", 0, ")"];
+const hexNumbers = [...Array(256).keys()].map(n => n.toString(16).padStart(2, "0"));
 
 class Util {
-  static makeCssRgb(r, g, b) {
-    rgbBuf[1] = r;
-    rgbBuf[3] = g;
-    rgbBuf[5] = b;
-    return rgbBuf.join("");
+  static makeHexColor(r, g, b) {
+    return `#${hexNumbers[r]}${hexNumbers[g]}${hexNumbers[b]}`;
   }
 
   static transform(m1, m2) {
@@ -1563,7 +1329,7 @@ class Util {
     const c = m[2] * transpose[0] + m[3] * transpose[2];
     const d = m[2] * transpose[1] + m[3] * transpose[3];
     const first = (a + d) / 2;
-    const second = Math.sqrt((a + d) * (a + d) - 4 * (a * d - c * b)) / 2;
+    const second = Math.sqrt((a + d) ** 2 - 4 * (a * d - c * b)) / 2;
     const sx = first + second || 1;
     const sy = first - second || 1;
     return [Math.sqrt(sx), Math.sqrt(sy)];
@@ -1641,7 +1407,31 @@ function stringToPDFString(str) {
 }
 
 function escapeString(str) {
-  return str.replace(/([\(\)\\])/g, "\\$1");
+  return str.replace(/([()\\\n\r])/g, match => {
+    if (match === "\n") {
+      return "\\n";
+    } else if (match === "\r") {
+      return "\\r";
+    }
+
+    return `\\${match}`;
+  });
+}
+
+function isAscii(str) {
+  return /^[\x00-\x7F]*$/.test(str);
+}
+
+function stringToUTF16BEString(str) {
+  const buf = ["\xFE\xFF"];
+
+  for (let i = 0, ii = str.length; i < ii; i++) {
+    const char = str.charCodeAt(i);
+    buf.push(String.fromCharCode(char >> 8 & 0xff));
+    buf.push(String.fromCharCode(char & 0xff));
+  }
+
+  return buf.join("");
 }
 
 function stringToUTF8String(str) {
@@ -1673,13 +1463,17 @@ function isArrayEqual(arr1, arr2) {
     return false;
   }
 
-  return arr1.every(function (element, index) {
-    return element === arr2[index];
-  });
+  for (let i = 0, ii = arr1.length; i < ii; i++) {
+    if (arr1[i] !== arr2[i]) {
+      return false;
+    }
+  }
+
+  return true;
 }
 
-function getModificationDate(date = new Date(Date.now())) {
-  const buffer = [date.getUTCFullYear().toString(), (date.getUTCMonth() + 1).toString().padStart(2, "0"), 
(date.getUTCDate() + 1).toString().padStart(2, "0"), date.getUTCHours().toString().padStart(2, "0"), 
date.getUTCMinutes().toString().padStart(2, "0"), date.getUTCSeconds().toString().padStart(2, "0")];
+function getModificationDate(date = new Date()) {
+  const buffer = [date.getUTCFullYear().toString(), (date.getUTCMonth() + 1).toString().padStart(2, "0"), 
date.getUTCDate().toString().padStart(2, "0"), date.getUTCHours().toString().padStart(2, "0"), 
date.getUTCMinutes().toString().padStart(2, "0"), date.getUTCSeconds().toString().padStart(2, "0")];
   return buffer.join("");
 }
 
@@ -1706,40 +1500,34 @@ function createPromiseCapability() {
   return capability;
 }
 
-const createObjectURL = function createObjectURLClosure() {
-  const digits = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
-  return function createObjectURL(data, contentType, forceDataSchema = false) {
-    if (!forceDataSchema && URL.createObjectURL) {
-      const blob = new Blob([data], {
-        type: contentType
-      });
-      return URL.createObjectURL(blob);
-    }
-
-    let buffer = `data:${contentType};base64,`;
+function createObjectURL(data, contentType = "", forceDataSchema = false) {
+  if (URL.createObjectURL && !forceDataSchema) {
+    return URL.createObjectURL(new Blob([data], {
+      type: contentType
+    }));
+  }
 
-    for (let i = 0, ii = data.length; i < ii; i += 3) {
-      const b1 = data[i] & 0xff;
-      const b2 = data[i + 1] & 0xff;
-      const b3 = data[i + 2] & 0xff;
-      const d1 = b1 >> 2,
-            d2 = (b1 & 3) << 4 | b2 >> 4;
-      const d3 = i + 1 < ii ? (b2 & 0xf) << 2 | b3 >> 6 : 64;
-      const d4 = i + 2 < ii ? b3 & 0x3f : 64;
-      buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4];
-    }
+  const digits = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
+  let buffer = `data:${contentType};base64,`;
 
-    return buffer;
-  };
-}();
+  for (let i = 0, ii = data.length; i < ii; i += 3) {
+    const b1 = data[i] & 0xff;
+    const b2 = data[i + 1] & 0xff;
+    const b3 = data[i + 2] & 0xff;
+    const d1 = b1 >> 2,
+          d2 = (b1 & 3) << 4 | b2 >> 4;
+    const d3 = i + 1 < ii ? (b2 & 0xf) << 2 | b3 >> 6 : 64;
+    const d4 = i + 2 < ii ? b3 & 0x3f : 64;
+    buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4];
+  }
 
-exports.createObjectURL = createObjectURL;
+  return buffer;
+}
 
 /***/ }),
 /* 3 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
 var _is_node = __w_pdfjs_require__(4);
@@ -1748,31 +1536,29 @@ var _is_node = __w_pdfjs_require__(4);
 
 /***/ }),
 /* 4 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/***/ ((__unused_webpack_module, exports) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.isNodeJS = void 0;
 const isNodeJS = typeof process === "object" && process + "" === "[object process]" && !process.versions.nw 
&& !(process.versions.electron && process.type && process.type !== "browser");
 exports.isNodeJS = isNodeJS;
 
 /***/ }),
 /* 5 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.getDocument = getDocument;
 exports.setPDFNetworkStreamFactory = setPDFNetworkStreamFactory;
-exports.build = exports.version = exports.PDFPageProxy = exports.PDFDocumentProxy = exports.PDFWorker = 
exports.PDFDataRangeTransport = exports.LoopbackPort = void 0;
+exports.version = exports.PDFWorker = exports.PDFPageProxy = exports.PDFDocumentProxy = 
exports.PDFDataRangeTransport = exports.LoopbackPort = exports.DefaultCMapReaderFactory = 
exports.DefaultCanvasFactory = exports.build = void 0;
 
 var _util = __w_pdfjs_require__(2);
 
@@ -1796,16 +1582,18 @@ var _message_handler = __w_pdfjs_require__(13);
 
 var _metadata = __w_pdfjs_require__(14);
 
-var _optional_content_config = __w_pdfjs_require__(16);
+var _optional_content_config = __w_pdfjs_require__(15);
 
-var _transport_stream = __w_pdfjs_require__(17);
+var _transport_stream = __w_pdfjs_require__(16);
 
-var _webgl = __w_pdfjs_require__(18);
+var _webgl = __w_pdfjs_require__(17);
 
 const DEFAULT_RANGE_CHUNK_SIZE = 65536;
 const RENDERING_CANCELLED_TIMEOUT = 100;
 const DefaultCanvasFactory = _is_node.isNodeJS ? _node_utils.NodeCanvasFactory : 
_display_utils.DOMCanvasFactory;
+exports.DefaultCanvasFactory = DefaultCanvasFactory;
 const DefaultCMapReaderFactory = _is_node.isNodeJS ? _node_utils.NodeCMapReaderFactory : 
_display_utils.DOMCMapReaderFactory;
+exports.DefaultCMapReaderFactory = DefaultCMapReaderFactory;
 let createPDFNetworkStream;
 
 function setPDFNetworkStreamFactory(pdfNetworkStreamFactory) {
@@ -1816,7 +1604,7 @@ function getDocument(src) {
   const task = new PDFDocumentLoadingTask();
   let source;
 
-  if (typeof src === "string") {
+  if (typeof src === "string" || src instanceof URL) {
     source = {
       url: src
     };
@@ -1830,7 +1618,7 @@ function getDocument(src) {
     };
   } else {
     if (typeof src !== "object") {
-      throw new Error("Invalid parameter in getDocument, " + "need either Uint8Array, string or a parameter 
object");
+      throw new Error("Invalid parameter in getDocument, " + "need either string, URL, Uint8Array, or 
parameter object.");
     }
 
     if (!src.url && !src.data && !src.range) {
@@ -1845,32 +1633,51 @@ function getDocument(src) {
       worker = null;
 
   for (const key in source) {
-    if (key === "url" && typeof window !== "undefined") {
-      params[key] = new URL(source[key], window.location).href;
-      continue;
-    } else if (key === "range") {
-      rangeTransport = source[key];
-      continue;
-    } else if (key === "worker") {
-      worker = source[key];
-      continue;
-    } else if (key === "data" && !(source[key] instanceof Uint8Array)) {
-      const pdfBytes = source[key];
-
-      if (typeof pdfBytes === "string") {
-        params[key] = (0, _util.stringToBytes)(pdfBytes);
-      } else if (typeof pdfBytes === "object" && pdfBytes !== null && !isNaN(pdfBytes.length)) {
-        params[key] = new Uint8Array(pdfBytes);
-      } else if ((0, _util.isArrayBuffer)(pdfBytes)) {
-        params[key] = new Uint8Array(pdfBytes);
-      } else {
-        throw new Error("Invalid PDF binary data: either typed array, " + "string or array-like object is 
expected in the " + "data property.");
-      }
+    const value = source[key];
 
-      continue;
+    switch (key) {
+      case "url":
+        if (typeof window !== "undefined") {
+          try {
+            params[key] = new URL(value, window.location).href;
+            continue;
+          } catch (ex) {
+            (0, _util.warn)(`Cannot create valid URL: "${ex}".`);
+          }
+        } else if (typeof value === "string" || value instanceof URL) {
+          params[key] = value.toString();
+          continue;
+        }
+
+        throw new Error("Invalid PDF url data: " + "either string or URL-object is expected in the url 
property.");
+
+      case "range":
+        rangeTransport = value;
+        continue;
+
+      case "worker":
+        worker = value;
+        continue;
+
+      case "data":
+        if (_is_node.isNodeJS && typeof Buffer !== "undefined" && value instanceof Buffer) {
+          params[key] = new Uint8Array(value);
+        } else if (value instanceof Uint8Array) {
+          break;
+        } else if (typeof value === "string") {
+          params[key] = (0, _util.stringToBytes)(value);
+        } else if (typeof value === "object" && value !== null && !isNaN(value.length)) {
+          params[key] = new Uint8Array(value);
+        } else if ((0, _util.isArrayBuffer)(value)) {
+          params[key] = new Uint8Array(value);
+        } else {
+          throw new Error("Invalid PDF binary data: either typed array, " + "string, or array-like object is 
expected in the data property.");
+        }
+
+        continue;
     }
 
-    params[key] = source[key];
+    params[key] = value;
   }
 
   params.rangeChunkSize = params.rangeChunkSize || DEFAULT_RANGE_CHUNK_SIZE;
@@ -1878,6 +1685,11 @@ function getDocument(src) {
   params.ignoreErrors = params.stopAtErrors !== true;
   params.fontExtraProperties = params.fontExtraProperties === true;
   params.pdfBug = params.pdfBug === true;
+  params.enableXfa = params.enableXfa === true;
+
+  if (typeof params.docBaseUrl !== "string" || (0, _display_utils.isDataScheme)(params.docBaseUrl)) {
+    params.docBaseUrl = null;
+  }
 
   if (!Number.isInteger(params.maxImageSize)) {
     params.maxImageSize = -1;
@@ -1934,6 +1746,7 @@ function getDocument(src) {
           length: params.length,
           initialData: params.initialData,
           progressiveDone: params.progressiveDone,
+          contentDispositionFilename: params.contentDispositionFilename,
           disableRange: params.disableRange,
           disableStream: params.disableStream
         }, rangeTransport);
@@ -1975,11 +1788,12 @@ function _fetchDocument(worker, source, pdfDataRangeTransport, docId) {
     source.length = pdfDataRangeTransport.length;
     source.initialData = pdfDataRangeTransport.initialData;
     source.progressiveDone = pdfDataRangeTransport.progressiveDone;
+    source.contentDispositionFilename = pdfDataRangeTransport.contentDispositionFilename;
   }
 
   return worker.messageHandler.sendWithPromise("GetDocRequest", {
     docId,
-    apiVersion: '2.6.347',
+    apiVersion: '2.8.335',
     source: {
       data: source.data,
       url: source.url,
@@ -1994,7 +1808,8 @@ function _fetchDocument(worker, source, pdfDataRangeTransport, docId) {
     docBaseUrl: source.docBaseUrl,
     ignoreErrors: source.ignoreErrors,
     isEvalSupported: source.isEvalSupported,
-    fontExtraProperties: source.fontExtraProperties
+    fontExtraProperties: source.fontExtraProperties,
+    enableXfa: source.enableXfa
   }).then(function (workerId) {
     if (worker.destroyed) {
       throw new Error("Worker was destroyed");
@@ -2043,10 +1858,11 @@ const PDFDocumentLoadingTask = function PDFDocumentLoadingTaskClosure() {
 }();
 
 class PDFDataRangeTransport {
-  constructor(length, initialData, progressiveDone = false) {
+  constructor(length, initialData, progressiveDone = false, contentDispositionFilename = null) {
     this.length = length;
     this.initialData = initialData;
     this.progressiveDone = progressiveDone;
+    this.contentDispositionFilename = contentDispositionFilename;
     this._rangeListeners = [];
     this._progressListeners = [];
     this._progressiveReadListeners = [];
@@ -2132,6 +1948,10 @@ class PDFDocumentProxy {
     return this._pdfInfo.fingerprint;
   }
 
+  get isPureXfa() {
+    return this._pdfInfo.isPureXfa;
+  }
+
   getPage(pageNumber) {
     return this._transport.getPage(pageNumber);
   }
@@ -2176,6 +1996,10 @@ class PDFDocumentProxy {
     return this._transport.getJavaScript();
   }
 
+  getJSActions() {
+    return this._transport.getDocJSActions();
+  }
+
   getOutline() {
     return this._transport.getOutline();
   }
@@ -2192,6 +2016,10 @@ class PDFDocumentProxy {
     return this._transport.getMetadata();
   }
 
+  getMarkInfo() {
+    return this._transport.getMarkInfo();
+  }
+
   getData() {
     return this._transport.getData();
   }
@@ -2204,8 +2032,8 @@ class PDFDocumentProxy {
     return this._transport.getStats();
   }
 
-  cleanup() {
-    return this._transport.startCleanup();
+  cleanup(keepLoadedFonts = false) {
+    return this._transport.startCleanup(keepLoadedFonts || this.isPureXfa);
   }
 
   destroy() {
@@ -2224,6 +2052,18 @@ class PDFDocumentProxy {
     return this._transport.saveDocument(annotationStorage);
   }
 
+  getFieldObjects() {
+    return this._transport.getFieldObjects();
+  }
+
+  hasJSActions() {
+    return this._transport.hasJSActions();
+  }
+
+  getCalculationOrderIds() {
+    return this._transport.getCalculationOrderIds();
+  }
+
 }
 
 exports.PDFDocumentProxy = PDFDocumentProxy;
@@ -2284,12 +2124,20 @@ class PDFPageProxy {
   getAnnotations({
     intent = null
   } = {}) {
-    if (!this.annotationsPromise || this.annotationsIntent !== intent) {
-      this.annotationsPromise = this._transport.getAnnotations(this._pageIndex, intent);
-      this.annotationsIntent = intent;
+    if (!this._annotationsPromise || this._annotationsIntent !== intent) {
+      this._annotationsPromise = this._transport.getAnnotations(this._pageIndex, intent);
+      this._annotationsIntent = intent;
     }
 
-    return this.annotationsPromise;
+    return this._annotationsPromise;
+  }
+
+  getJSActions() {
+    return this._jsActionsPromise || (this._jsActionsPromise = 
this._transport.getPageJSActions(this._pageIndex));
+  }
+
+  getXfa() {
+    return this._xfaPromise || (this._xfaPromise = this._transport.getPageXfa(this._pageIndex));
   }
 
   render({
@@ -2305,6 +2153,8 @@ class PDFPageProxy {
     annotationStorage = null,
     optionalContentConfigPromise = null
   }) {
+    var _intentState;
+
     if (this._stats) {
       this._stats.time("Overall");
     }
@@ -2352,16 +2202,12 @@ class PDFPageProxy {
         pageIndex: this._pageIndex,
         intent: renderingIntent,
         renderInteractiveForms: renderInteractiveForms === true,
-        annotationStorage: annotationStorage && annotationStorage.getAll() || null
+        annotationStorage: annotationStorage?.serializable || null
       });
     }
 
     const complete = error => {
-      const i = intentState.renderTasks.indexOf(internalRenderTask);
-
-      if (i >= 0) {
-        intentState.renderTasks.splice(i, 1);
-      }
+      intentState.renderTasks.delete(internalRenderTask);
 
       if (this.cleanupAfterRender || renderingIntent === "print") {
         this.pendingCleanup = true;
@@ -2405,12 +2251,7 @@ class PDFPageProxy {
       useRequestAnimationFrame: renderingIntent !== "print",
       pdfBug: this._pdfBug
     });
-
-    if (!intentState.renderTasks) {
-      intentState.renderTasks = [];
-    }
-
-    intentState.renderTasks.push(internalRenderTask);
+    ((_intentState = intentState).renderTasks || (_intentState.renderTasks = new 
Set())).add(internalRenderTask);
     const renderTask = internalRenderTask.task;
     Promise.all([intentState.displayReadyCapability.promise, 
optionalContentConfigPromise]).then(([transparency, optionalContentConfig]) => {
       if (this.pendingCleanup) {
@@ -2435,11 +2276,7 @@ class PDFPageProxy {
     function operatorListChanged() {
       if (intentState.operatorList.lastChunk) {
         intentState.opListReadCapability.resolve(intentState.operatorList);
-        const i = intentState.renderTasks.indexOf(opListTask);
-
-        if (i >= 0) {
-          intentState.renderTasks.splice(i, 1);
-        }
+        intentState.renderTasks.delete(opListTask);
       }
     }
 
@@ -2456,11 +2293,12 @@ class PDFPageProxy {
     let opListTask;
 
     if (!intentState.opListReadCapability) {
+      var _intentState2;
+
       opListTask = Object.create(null);
       opListTask.operatorListChanged = operatorListChanged;
       intentState.opListReadCapability = (0, _util.createPromiseCapability)();
-      intentState.renderTasks = [];
-      intentState.renderTasks.push(opListTask);
+      ((_intentState2 = intentState).renderTasks || (_intentState2.renderTasks = new Set())).add(opListTask);
       intentState.operatorList = {
         fnArray: [],
         argsArray: [],
@@ -2550,7 +2388,9 @@ class PDFPageProxy {
     }
 
     this.objs.clear();
-    this.annotationsPromise = null;
+    this._annotationsPromise = null;
+    this._jsActionsPromise = null;
+    this._xfaPromise = null;
     this.pendingCleanup = false;
     return Promise.all(waitOn);
   }
@@ -2569,7 +2409,7 @@ class PDFPageProxy {
       renderTasks,
       operatorList
     } of this._intentStates.values()) {
-      if (renderTasks.length !== 0 || !operatorList.lastChunk) {
+      if (renderTasks.size > 0 || !operatorList.lastChunk) {
         return false;
       }
     }
@@ -2577,7 +2417,9 @@ class PDFPageProxy {
     this._intentStates.clear();
 
     this.objs.clear();
-    this.annotationsPromise = null;
+    this._annotationsPromise = null;
+    this._jsActionsPromise = null;
+    this._xfaPromise = null;
 
     if (resetStats && this._stats) {
       this._stats = new _display_utils.StatTimer();
@@ -2611,8 +2453,8 @@ class PDFPageProxy {
 
     intentState.operatorList.lastChunk = operatorListChunk.lastChunk;
 
-    for (let i = 0; i < intentState.renderTasks.length; i++) {
-      intentState.renderTasks[i].operatorListChanged();
+    for (const internalRenderTask of intentState.renderTasks) {
+      internalRenderTask.operatorListChanged();
     }
 
     if (operatorListChunk.lastChunk) {
@@ -2658,8 +2500,8 @@ class PDFPageProxy {
         if (intentState.operatorList) {
           intentState.operatorList.lastChunk = true;
 
-          for (let i = 0; i < intentState.renderTasks.length; i++) {
-            intentState.renderTasks[i].operatorListChanged();
+          for (const internalRenderTask of intentState.renderTasks) {
+            internalRenderTask.operatorListChanged();
           }
 
           this._tryCleanup();
@@ -2690,7 +2532,7 @@ class PDFPageProxy {
     }
 
     if (!force) {
-      if (intentState.renderTasks.length !== 0) {
+      if (intentState.renderTasks.size > 0) {
         return;
       }
 
@@ -2708,7 +2550,7 @@ class PDFPageProxy {
       }
     }
 
-    intentState.streamReader.cancel(new _util.AbortException(reason && reason.message));
+    intentState.streamReader.cancel(new _util.AbortException(reason?.message));
     intentState.streamReader = null;
 
     if (this._transport.destroyed) {
@@ -2735,9 +2577,8 @@ class PDFPageProxy {
 exports.PDFPageProxy = PDFPageProxy;
 
 class LoopbackPort {
-  constructor(defer = true) {
+  constructor() {
     this._listeners = [];
-    this._defer = defer;
     this._deferred = Promise.resolve(undefined);
   }
 
@@ -2754,9 +2595,7 @@ class LoopbackPort {
       let buffer, result;
 
       if ((buffer = value.buffer) && (0, _util.isArrayBuffer)(buffer)) {
-        const transferable = transfers && transfers.includes(buffer);
-
-        if (transferable) {
+        if (transfers?.includes(buffer)) {
           result = new value.constructor(buffer, value.byteOffset, value.byteLength);
         } else {
           result = new value.constructor(value);
@@ -2766,6 +2605,28 @@ class LoopbackPort {
         return result;
       }
 
+      if (value instanceof Map) {
+        result = new Map();
+        cloned.set(value, result);
+
+        for (const [key, val] of value) {
+          result.set(key, cloneValue(val));
+        }
+
+        return result;
+      }
+
+      if (value instanceof Set) {
+        result = new Set();
+        cloned.set(value, result);
+
+        for (const val of value) {
+          result.add(cloneValue(val));
+        }
+
+        return result;
+      }
+
       result = Array.isArray(value) ? [] : {};
       cloned.set(value, result);
 
@@ -2782,7 +2643,7 @@ class LoopbackPort {
         }
 
         if (typeof desc.value === "function") {
-          if (value.hasOwnProperty && value.hasOwnProperty(i)) {
+          if (value.hasOwnProperty?.(i)) {
             throw new Error(`LoopbackPort.postMessage - cannot clone: ${value[i]}`);
           }
 
@@ -2795,25 +2656,15 @@ class LoopbackPort {
       return result;
     }
 
-    if (!this._defer) {
-      this._listeners.forEach(listener => {
-        listener.call(this, {
-          data: obj
-        });
-      });
-
-      return;
-    }
-
     const cloned = new WeakMap();
-    const e = {
+    const event = {
       data: cloneValue(obj)
     };
 
     this._deferred.then(() => {
-      this._listeners.forEach(listener => {
-        listener.call(this, e);
-      });
+      for (const listener of this._listeners) {
+        listener.call(this, event);
+      }
     });
   }
 
@@ -2846,7 +2697,7 @@ const PDFWorker = function PDFWorkerClosure() {
     isWorkerDisabled = true;
     fallbackWorkerSrc = "./pdf.worker.js";
   } else if (typeof document === "object" && "currentScript" in document) {
-    const pdfjsFilePath = document.currentScript && document.currentScript.src;
+    const pdfjsFilePath = document.currentScript?.src;
 
     if (pdfjsFilePath) {
       fallbackWorkerSrc = pdfjsFilePath.replace(/(\.(?:min\.)?js)(\?.*)?$/i, ".worker$1$2");
@@ -2873,7 +2724,7 @@ const PDFWorker = function PDFWorkerClosure() {
     let mainWorkerMessageHandler;
 
     try {
-      mainWorkerMessageHandler = globalThis.pdfjsWorker && globalThis.pdfjsWorker.WorkerMessageHandler;
+      mainWorkerMessageHandler = globalThis.pdfjsWorker?.WorkerMessageHandler;
     } catch (ex) {}
 
     return mainWorkerMessageHandler || null;
@@ -3159,6 +3010,10 @@ class WorkerTransport {
     this.setupMessageHandler();
   }
 
+  get loadingTaskSettled() {
+    return this.loadingTask._capability.settled;
+  }
+
   destroy() {
     if (this.destroyCapability) {
       return this.destroyCapability.promise;
@@ -3181,8 +3036,20 @@ class WorkerTransport {
     this.pagePromises.length = 0;
     const terminated = this.messageHandler.sendWithPromise("Terminate", null);
     waitOn.push(terminated);
+
+    if (this.loadingTaskSettled) {
+      const annotationStorageResetModified = this.loadingTask.promise.then(pdfDocument => {
+        if (pdfDocument.hasOwnProperty("annotationStorage")) {
+          pdfDocument.annotationStorage.resetModified();
+        }
+      }).catch(() => {});
+      waitOn.push(annotationStorageResetModified);
+    }
+
     Promise.all(waitOn).then(() => {
+      this.commonObjs.clear();
       this.fontLoader.clear();
+      this._hasJSActionsPromise = null;
 
       if (this._networkStream) {
         this._networkStream.cancelAllRequests(new _util.AbortException("Worker was terminated."));
@@ -3411,7 +3278,7 @@ class WorkerTransport {
 
           let fontRegistry = null;
 
-          if (params.pdfBug && globalThis.FontInspector && globalThis.FontInspector.enabled) {
+          if (params.pdfBug && globalThis.FontInspector?.enabled) {
             fontRegistry = {
               registerFont(font, url) {
                 globalThis.FontInspector.fontAdded(font, url);
@@ -3466,7 +3333,7 @@ class WorkerTransport {
           pageProxy.objs.resolve(id, imageData);
           const MAX_IMAGE_SIZE_TO_STORE = 8000000;
 
-          if (imageData && "data" in imageData && imageData.data.length > MAX_IMAGE_SIZE_TO_STORE) {
+          if (imageData?.data?.length > MAX_IMAGE_SIZE_TO_STORE) {
             pageProxy.cleanupAfterRender = true;
           }
 
@@ -3575,8 +3442,8 @@ class WorkerTransport {
   saveDocument(annotationStorage) {
     return this.messageHandler.sendWithPromise("SaveDocument", {
       numPages: this._numPages,
-      annotationStorage: annotationStorage && annotationStorage.getAll() || null,
-      filename: this._fullReader ? this._fullReader.filename : null
+      annotationStorage: annotationStorage?.serializable || null,
+      filename: this._fullReader?.filename ?? null
     }).finally(() => {
       if (annotationStorage) {
         annotationStorage.resetModified();
@@ -3584,6 +3451,18 @@ class WorkerTransport {
     });
   }
 
+  getFieldObjects() {
+    return this.messageHandler.sendWithPromise("GetFieldObjects", null);
+  }
+
+  hasJSActions() {
+    return this._hasJSActionsPromise || (this._hasJSActionsPromise = 
this.messageHandler.sendWithPromise("HasJSActions", null));
+  }
+
+  getCalculationOrderIds() {
+    return this.messageHandler.sendWithPromise("GetCalculationOrderIds", null);
+  }
+
   getDestinations() {
     return this.messageHandler.sendWithPromise("GetDestinations", null);
   }
@@ -3626,6 +3505,22 @@ class WorkerTransport {
     return this.messageHandler.sendWithPromise("GetJavaScript", null);
   }
 
+  getDocJSActions() {
+    return this.messageHandler.sendWithPromise("GetDocJSActions", null);
+  }
+
+  getPageJSActions(pageIndex) {
+    return this.messageHandler.sendWithPromise("GetPageJSActions", {
+      pageIndex
+    });
+  }
+
+  getPageXfa(pageIndex) {
+    return this.messageHandler.sendWithPromise("GetPageXfa", {
+      pageIndex
+    });
+  }
+
   getOutline() {
     return this.messageHandler.sendWithPromise("GetOutline", null);
   }
@@ -3645,32 +3540,48 @@ class WorkerTransport {
       return {
         info: results[0],
         metadata: results[1] ? new _metadata.Metadata(results[1]) : null,
-        contentDispositionFilename: this._fullReader ? this._fullReader.filename : null
+        contentDispositionFilename: this._fullReader?.filename ?? null,
+        contentLength: this._fullReader?.contentLength ?? null
       };
     });
   }
 
+  getMarkInfo() {
+    return this.messageHandler.sendWithPromise("GetMarkInfo", null);
+  }
+
   getStats() {
     return this.messageHandler.sendWithPromise("GetStats", null);
   }
 
-  startCleanup() {
-    return this.messageHandler.sendWithPromise("Cleanup", null).then(() => {
-      for (let i = 0, ii = this.pageCache.length; i < ii; i++) {
-        const page = this.pageCache[i];
+  async startCleanup(keepLoadedFonts = false) {
+    await this.messageHandler.sendWithPromise("Cleanup", null);
 
-        if (page) {
-          const cleanupSuccessful = page.cleanup();
+    if (this.destroyed) {
+      return;
+    }
 
-          if (!cleanupSuccessful) {
-            throw new Error(`startCleanup: Page ${i + 1} is currently rendering.`);
-          }
-        }
+    for (let i = 0, ii = this.pageCache.length; i < ii; i++) {
+      const page = this.pageCache[i];
+
+      if (!page) {
+        continue;
       }
 
-      this.commonObjs.clear();
+      const cleanupSuccessful = page.cleanup();
+
+      if (!cleanupSuccessful) {
+        throw new Error(`startCleanup: Page ${i + 1} is currently rendering.`);
+      }
+    }
+
+    this.commonObjs.clear();
+
+    if (!keepLoadedFonts) {
       this.fontLoader.clear();
-    });
+    }
+
+    this._hasJSActionsPromise = null;
   }
 
   get loadingParams() {
@@ -3718,7 +3629,7 @@ class PDFObjects {
 
   has(objId) {
     const obj = this._objs[objId];
-    return obj ? obj.resolved : false;
+    return obj?.resolved || false;
   }
 
   resolve(objId, data) {
@@ -3784,6 +3695,7 @@ const InternalRenderTask = function InternalRenderTaskClosure() {
       this.cancelled = false;
       this.capability = (0, _util.createPromiseCapability)();
       this.task = new RenderTask(this);
+      this._cancelBound = this.cancel.bind(this);
       this._continueBound = this._continue.bind(this);
       this._scheduleNextBound = this._scheduleNext.bind(this);
       this._nextBound = this._next.bind(this);
@@ -3810,7 +3722,7 @@ const InternalRenderTask = function InternalRenderTaskClosure() {
         canvasInRendering.add(this._canvas);
       }
 
-      if (this._pdfBug && globalThis.StepperManager && globalThis.StepperManager.enabled) {
+      if (this._pdfBug && globalThis.StepperManager?.enabled) {
         this.stepper = globalThis.StepperManager.create(this._pageIndex);
         this.stepper.init(this.operatorList);
         this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint();
@@ -3890,10 +3802,10 @@ const InternalRenderTask = function InternalRenderTaskClosure() {
     _scheduleNext() {
       if (this._useRequestAnimationFrame) {
         window.requestAnimationFrame(() => {
-          this._nextBound().catch(this.cancel.bind(this));
+          this._nextBound().catch(this._cancelBound);
         });
       } else {
-        Promise.resolve().then(this._nextBound).catch(this.cancel.bind(this));
+        Promise.resolve().then(this._nextBound).catch(this._cancelBound);
       }
     }
 
@@ -3924,21 +3836,20 @@ const InternalRenderTask = function InternalRenderTaskClosure() {
   return InternalRenderTask;
 }();
 
-const version = '2.6.347';
+const version = '2.8.335';
 exports.version = version;
-const build = '3be9c65f';
+const build = '228adbf67';
 exports.build = build;
 
 /***/ }),
 /* 6 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.FontLoader = exports.FontFaceObject = void 0;
 
 var _util = __w_pdfjs_require__(2);
@@ -4043,8 +3954,7 @@ class BaseFontLoader {
   }
 
   get isFontLoadingAPISupported() {
-    const supported = typeof this._document !== "undefined" && !!this._document.fonts;
-    return (0, _util.shadow)(this, "isFontLoadingAPISupported", supported);
+    return (0, _util.shadow)(this, "isFontLoadingAPISupported", !!this._document?.fonts);
   }
 
   get isSyncFontLoadingSupported() {
@@ -4082,7 +3992,7 @@ exports.FontLoader = FontLoader;
       } else {
         const m = /Mozilla\/5.0.*?rv:(\d+).*? Gecko/.exec(navigator.userAgent);
 
-        if (m && m[1] >= 14) {
+        if (m?.[1] >= 14) {
           supported = true;
         }
       }
@@ -4221,7 +4131,7 @@ class FontFaceObject {
     isEvalSupported = true,
     disableFontFace = false,
     ignoreErrors = false,
-    onUnsupportedFeature = null,
+    onUnsupportedFeature,
     fontRegistry = null
   }) {
     this.compiledGlyphs = Object.create(null);
@@ -4281,11 +4191,9 @@ class FontFaceObject {
         throw ex;
       }
 
-      if (this._onUnsupportedFeature) {
-        this._onUnsupportedFeature({
-          featureId: _util.UNSUPPORTED_FEATURES.errorFontGetPath
-        });
-      }
+      this._onUnsupportedFeature({
+        featureId: _util.UNSUPPORTED_FEATURES.errorFontGetPath
+      });
 
       (0, _util.warn)(`getPathGenerator - ignoring character: "${ex}".`);
       return this.compiledGlyphs[character] = function (c, size) {};
@@ -4329,14 +4237,13 @@ exports.FontFaceObject = FontFaceObject;
 
 /***/ }),
 /* 7 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.NodeCMapReaderFactory = exports.NodeCanvasFactory = void 0;
 
 var _display_utils = __w_pdfjs_require__(1);
@@ -4401,16 +4308,19 @@ if (_is_node.isNodeJS) {
 
 /***/ }),
 /* 8 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.AnnotationStorage = void 0;
 
+var _display_utils = __w_pdfjs_require__(1);
+
+var _util = __w_pdfjs_require__(2);
+
 class AnnotationStorage {
   constructor() {
     this._storage = new Map();
@@ -4419,7 +4329,15 @@ class AnnotationStorage {
     this.onResetModified = null;
   }
 
+  getValue(key, defaultValue) {
+    const obj = this._storage.get(key);
+
+    return obj !== undefined ? obj : defaultValue;
+  }
+
   getOrCreateValue(key, defaultValue) {
+    (0, _display_utils.deprecated)("Use getValue instead.");
+
     if (this._storage.has(key)) {
       return this._storage.get(key);
     }
@@ -4430,19 +4348,30 @@ class AnnotationStorage {
   }
 
   setValue(key, value) {
-    if (this._storage.get(key) !== value) {
-      this._setModified();
+    const obj = this._storage.get(key);
+
+    let modified = false;
+
+    if (obj !== undefined) {
+      for (const [entry, val] of Object.entries(value)) {
+        if (obj[entry] !== val) {
+          modified = true;
+          obj[entry] = val;
+        }
+      }
+    } else {
+      this._storage.set(key, value);
+
+      modified = true;
     }
 
-    this._storage.set(key, value);
+    if (modified) {
+      this._setModified();
+    }
   }
 
   getAll() {
-    if (this._storage.size === 0) {
-      return null;
-    }
-
-    return Object.fromEntries(this._storage);
+    return this._storage.size > 0 ? (0, _util.objectFromMap)(this._storage) : null;
   }
 
   get size() {
@@ -4469,20 +4398,23 @@ class AnnotationStorage {
     }
   }
 
+  get serializable() {
+    return this._storage.size > 0 ? this._storage : null;
+  }
+
 }
 
 exports.AnnotationStorage = AnnotationStorage;
 
 /***/ }),
 /* 9 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.apiCompatibilityParams = void 0;
 
 var _is_node = __w_pdfjs_require__(4);
@@ -4500,27 +4432,26 @@ exports.apiCompatibilityParams = apiCompatibilityParams;
 
 /***/ }),
 /* 10 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.CanvasGraphics = void 0;
 
 var _util = __w_pdfjs_require__(2);
 
 var _pattern_helper = __w_pdfjs_require__(11);
 
-var MIN_FONT_SIZE = 16;
-var MAX_FONT_SIZE = 100;
-var MAX_GROUP_SIZE = 4096;
-var MIN_WIDTH_FACTOR = 0.65;
-var COMPILE_TYPE3_GLYPHS = true;
-var MAX_SIZE_TO_COMPILE = 1000;
-var FULL_CHUNK_HEIGHT = 16;
+const MIN_FONT_SIZE = 16;
+const MAX_FONT_SIZE = 100;
+const MAX_GROUP_SIZE = 4096;
+const COMPILE_TYPE3_GLYPHS = true;
+const MAX_SIZE_TO_COMPILE = 1000;
+const FULL_CHUNK_HEIGHT = 16;
+const LINEWIDTH_SCALE_FACTOR = 1.000001;
 
 function addContextCurrentTransform(ctx) {
   if (!ctx.mozCurrentTransform) {
@@ -4531,8 +4462,24 @@ function addContextCurrentTransform(ctx) {
     ctx._originalTranslate = ctx.translate;
     ctx._originalTransform = ctx.transform;
     ctx._originalSetTransform = ctx.setTransform;
+    ctx._originalResetTransform = ctx.resetTransform;
     ctx._transformMatrix = ctx._transformMatrix || [1, 0, 0, 1, 0, 0];
     ctx._transformStack = [];
+
+    try {
+      const desc = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(ctx), "lineWidth");
+      ctx._setLineWidth = desc.set;
+      ctx._getLineWidth = desc.get;
+      Object.defineProperty(ctx, "lineWidth", {
+        set: function setLineWidth(width) {
+          this._setLineWidth(width * LINEWIDTH_SCALE_FACTOR);
+        },
+        get: function getLineWidth() {
+          return this._getLineWidth();
+        }
+      });
+    } catch (_) {}
+
     Object.defineProperty(ctx, "mozCurrentTransform", {
       get: function getCurrentTransform() {
         return this._transformMatrix;
@@ -4540,21 +4487,21 @@ function addContextCurrentTransform(ctx) {
     });
     Object.defineProperty(ctx, "mozCurrentTransformInverse", {
       get: function getCurrentTransformInverse() {
-        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;
+        const m = this._transformMatrix;
+        const a = m[0],
+              b = m[1],
+              c = m[2],
+              d = m[3],
+              e = m[4],
+              f = m[5];
+        const ad_bc = a * d - b * c;
+        const 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;
+      const old = this._transformMatrix;
 
       this._transformStack.push(old);
 
@@ -4564,7 +4511,7 @@ function addContextCurrentTransform(ctx) {
     };
 
     ctx.restore = function ctxRestore() {
-      var prev = this._transformStack.pop();
+      const prev = this._transformStack.pop();
 
       if (prev) {
         this._transformMatrix = prev;
@@ -4574,7 +4521,7 @@ function addContextCurrentTransform(ctx) {
     };
 
     ctx.translate = function ctxTranslate(x, y) {
-      var m = this._transformMatrix;
+      const m = this._transformMatrix;
       m[4] = m[0] * x + m[2] * y + m[4];
       m[5] = m[1] * x + m[3] * y + m[5];
 
@@ -4582,7 +4529,7 @@ function addContextCurrentTransform(ctx) {
     };
 
     ctx.scale = function ctxScale(x, y) {
-      var m = this._transformMatrix;
+      const m = this._transformMatrix;
       m[0] = m[0] * x;
       m[1] = m[1] * x;
       m[2] = m[2] * y;
@@ -4592,7 +4539,7 @@ function addContextCurrentTransform(ctx) {
     };
 
     ctx.transform = function ctxTransform(a, b, c, d, e, f) {
-      var m = this._transformMatrix;
+      const 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);
@@ -4604,10 +4551,16 @@ function addContextCurrentTransform(ctx) {
       ctx._originalSetTransform(a, b, c, d, e, f);
     };
 
+    ctx.resetTransform = function ctxResetTransform() {
+      this._transformMatrix = [1, 0, 0, 1, 0, 0];
+
+      ctx._originalResetTransform();
+    };
+
     ctx.rotate = function ctxRotate(angle) {
-      var cosValue = Math.cos(angle);
-      var sinValue = Math.sin(angle);
-      var m = this._transformMatrix;
+      const cosValue = Math.cos(angle);
+      const sinValue = Math.sin(angle);
+      const 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);
@@ -4615,7 +4568,7 @@ function addContextCurrentTransform(ctx) {
   }
 }
 
-var CachedCanvases = function CachedCanvasesClosure() {
+const CachedCanvases = function CachedCanvasesClosure() {
   function CachedCanvases(canvasFactory) {
     this.canvasFactory = canvasFactory;
     this.cache = Object.create(null);
@@ -4623,7 +4576,7 @@ var CachedCanvases = function CachedCanvasesClosure() {
 
   CachedCanvases.prototype = {
     getCanvas: function CachedCanvases_getCanvas(id, width, height, trackTransform) {
-      var canvasEntry;
+      let canvasEntry;
 
       if (this.cache[id] !== undefined) {
         canvasEntry = this.cache[id];
@@ -4642,8 +4595,8 @@ var CachedCanvases = function CachedCanvasesClosure() {
     },
 
     clear() {
-      for (var id in this.cache) {
-        var canvasEntry = this.cache[id];
+      for (const id in this.cache) {
+        const canvasEntry = this.cache[id];
         this.canvasFactory.destroy(canvasEntry);
         delete this.cache[id];
       }
@@ -4654,24 +4607,21 @@ var CachedCanvases = function CachedCanvasesClosure() {
 }();
 
 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]);
-  var lineSize = width + 7 & ~7,
-      data0 = imgData.data;
-  var data = new Uint8Array(lineSize * height),
-      pos = 0,
-      ii;
+  const POINT_TO_PROCESS_LIMIT = 1000;
+  const width = imgData.width,
+        height = imgData.height,
+        width1 = width + 1;
+  let i, ii, j, j0;
+  const points = new Uint8Array(width1 * (height + 1));
+  const POINT_TYPES = new Uint8Array([0, 2, 4, 0, 1, 0, 5, 4, 8, 10, 0, 8, 0, 2, 1, 0]);
+  const lineSize = width + 7 & ~7,
+        data0 = imgData.data;
+  const data = new Uint8Array(lineSize * height);
+  let pos = 0;
 
   for (i = 0, ii = data0.length; i < ii; i++) {
-    var mask = 128,
-        elem = data0[i];
+    const elem = data0[i];
+    let mask = 128;
 
     while (mask > 0) {
       data[pos++] = elem & mask ? 0 : 255;
@@ -4679,7 +4629,7 @@ function compileType3Glyph(imgData) {
     }
   }
 
-  var count = 0;
+  let count = 0;
   pos = 0;
 
   if (data[pos] !== 0) {
@@ -4710,7 +4660,7 @@ function compileType3Glyph(imgData) {
       ++count;
     }
 
-    var sum = (data[pos] ? 4 : 0) + (data[pos - lineSize] ? 8 : 0);
+    let 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);
@@ -4759,12 +4709,12 @@ function compileType3Glyph(imgData) {
     return null;
   }
 
-  var steps = new Int32Array([0, width1, -1, 0, -width1, 0, 0, 0, 1]);
-  var outlines = [];
+  const steps = new Int32Array([0, width1, -1, 0, -width1, 0, 0, 0, 1]);
+  const outlines = [];
 
   for (i = 0; count && i <= height; i++) {
-    var p = i * width1;
-    var end = p + width;
+    let p = i * width1;
+    const end = p + width;
 
     while (p < end && !points[p]) {
       p++;
@@ -4774,19 +4724,18 @@ function compileType3Glyph(imgData) {
       continue;
     }
 
-    var coords = [p % width1, i];
-    var type = points[p],
-        p0 = p,
-        pp;
+    const coords = [p % width1, i];
+    const p0 = p;
+    let type = points[p];
 
     do {
-      var step = steps[type];
+      const step = steps[type];
 
       do {
         p += step;
       } while (!points[p]);
 
-      pp = points[p];
+      const pp = points[p];
 
       if (pp !== 5 && pp !== 10) {
         type = pp;
@@ -4808,14 +4757,14 @@ function compileType3Glyph(imgData) {
     --i;
   }
 
-  var drawOutline = function (c) {
+  const drawOutline = function (c) {
     c.save();
     c.scale(1 / width, -1 / height);
     c.translate(0, -height);
     c.beginPath();
 
     for (let k = 0, kk = outlines.length; k < kk; k++) {
-      var o = outlines[k];
+      const o = outlines[k];
       c.moveTo(o[0], o[1]);
 
       for (let l = 2, ll = o.length; l < ll; l += 2) {
@@ -4831,7 +4780,7 @@ function compileType3Glyph(imgData) {
   return drawOutline;
 }
 
-var CanvasExtraState = function CanvasExtraStateClosure() {
+const CanvasExtraState = function CanvasExtraStateClosure() {
   function CanvasExtraState() {
     this.alphaIsShape = false;
     this.fontSize = 0;
@@ -4872,9 +4821,9 @@ var CanvasExtraState = function CanvasExtraStateClosure() {
   return CanvasExtraState;
 }();
 
-var CanvasGraphics = function CanvasGraphicsClosure() {
-  var EXECUTION_TIME = 15;
-  var EXECUTION_STEPS = 10;
+const CanvasGraphics = function CanvasGraphicsClosure() {
+  const EXECUTION_TIME = 15;
+  const EXECUTION_STEPS = 10;
 
   function CanvasGraphics(canvasCtx, commonObjs, objs, canvasFactory, webGLContext, imageLayer, 
optionalContentConfig) {
     this.ctx = canvasCtx;
@@ -4915,17 +4864,17 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
       return;
     }
 
-    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,
+    const height = imgData.height,
+          width = imgData.width;
+    const partialChunkHeight = height % FULL_CHUNK_HEIGHT;
+    const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT;
+    const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1;
+    const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT);
+    let srcPos = 0,
         destPos;
-    var src = imgData.data;
-    var dest = chunkImgData.data;
-    var i, j, thisChunkHeight, elemsInThisChunk;
+    const src = imgData.data;
+    const dest = chunkImgData.data;
+    let i, j, thisChunkHeight, elemsInThisChunk;
     let transferMapRed, transferMapGreen, transferMapBlue, transferMapGray;
 
     if (transferMaps) {
@@ -4947,12 +4896,12 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
     }
 
     if (imgData.kind === _util.ImageKind.GRAYSCALE_1BPP) {
-      var srcLength = src.byteLength;
-      var dest32 = new Uint32Array(dest.buffer, 0, dest.byteLength >> 2);
-      var dest32DataLength = dest32.length;
-      var fullSrcDiff = width + 7 >> 3;
-      var white = 0xffffffff;
-      var black = _util.IsLittleEndianCached.value ? 0xff000000 : 0x000000ff;
+      const srcLength = src.byteLength;
+      const dest32 = new Uint32Array(dest.buffer, 0, dest.byteLength >> 2);
+      const dest32DataLength = dest32.length;
+      const fullSrcDiff = width + 7 >> 3;
+      let white = 0xffffffff;
+      let black = _util.IsLittleEndianCached.value ? 0xff000000 : 0x000000ff;
 
       if (transferMapGray) {
         if (transferMapGray[0] === 0xff && transferMapGray[0xff] === 0) {
@@ -4965,12 +4914,12 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
         destPos = 0;
 
         for (j = 0; j < thisChunkHeight; j++) {
-          var srcDiff = srcLength - srcPos;
+          const srcDiff = srcLength - srcPos;
           let k = 0;
-          var kEnd = srcDiff > fullSrcDiff ? width : srcDiff * 8 - 7;
-          var kEndUnrolled = kEnd & ~7;
-          var mask = 0;
-          var srcByte = 0;
+          const kEnd = srcDiff > fullSrcDiff ? width : srcDiff * 8 - 7;
+          const kEndUnrolled = kEnd & ~7;
+          let mask = 0;
+          let srcByte = 0;
 
           for (; k < kEndUnrolled; k += 8) {
             srcByte = src[srcPos++];
@@ -5096,26 +5045,27 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
   }
 
   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;
-      var destPos = 3;
-
-      for (var j = 0; j < thisChunkHeight; j++) {
-        var mask = 0;
-
-        for (var k = 0; k < width; k++) {
+    const height = imgData.height,
+          width = imgData.width;
+    const partialChunkHeight = height % FULL_CHUNK_HEIGHT;
+    const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT;
+    const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1;
+    const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT);
+    let srcPos = 0;
+    const src = imgData.data;
+    const dest = chunkImgData.data;
+
+    for (let i = 0; i < totalChunks; i++) {
+      const thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight;
+      let destPos = 3;
+
+      for (let j = 0; j < thisChunkHeight; j++) {
+        let elem,
+            mask = 0;
+
+        for (let k = 0; k < width; k++) {
           if (!mask) {
-            var elem = src[srcPos++];
+            elem = src[srcPos++];
             mask = 128;
           }
 
@@ -5130,10 +5080,10 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
   }
 
   function copyCtxState(sourceCtx, destCtx) {
-    var properties = ["strokeStyle", "fillStyle", "fillRule", "globalAlpha", "lineWidth", "lineCap", 
"lineJoin", "miterLimit", "globalCompositeOperation", "font"];
+    const 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];
+    for (let i = 0, ii = properties.length; i < ii; i++) {
+      const property = properties[i];
 
       if (sourceCtx[property] !== undefined) {
         destCtx[property] = sourceCtx[property];
@@ -5165,17 +5115,17 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
   }
 
   function composeSMaskBackdrop(bytes, r0, g0, b0) {
-    var length = bytes.length;
+    const length = bytes.length;
 
-    for (var i = 3; i < length; i += 4) {
-      var alpha = bytes[i];
+    for (let i = 3; i < length; i += 4) {
+      const 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;
+        const 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;
@@ -5184,30 +5134,30 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
   }
 
   function composeSMaskAlpha(maskData, layerData, transferMap) {
-    var length = maskData.length;
-    var scale = 1 / 255;
+    const length = maskData.length;
+    const scale = 1 / 255;
 
-    for (var i = 3; i < length; i += 4) {
-      var alpha = transferMap ? transferMap[maskData[i]] : maskData[i];
+    for (let i = 3; i < length; i += 4) {
+      const alpha = transferMap ? transferMap[maskData[i]] : maskData[i];
       layerData[i] = layerData[i] * alpha * scale | 0;
     }
   }
 
   function composeSMaskLuminosity(maskData, layerData, transferMap) {
-    var length = maskData.length;
+    const length = maskData.length;
 
-    for (var i = 3; i < length; i += 4) {
-      var y = maskData[i - 3] * 77 + maskData[i - 2] * 152 + maskData[i - 1] * 28;
+    for (let i = 3; i < length; i += 4) {
+      const y = maskData[i - 3] * 77 + maskData[i - 2] * 152 + maskData[i - 1] * 28;
       layerData[i] = transferMap ? layerData[i] * transferMap[y >> 8] >> 8 : layerData[i] * y >> 16;
     }
   }
 
   function genericComposeSMask(maskCtx, layerCtx, width, height, subtype, backdrop, transferMap) {
-    var hasBackdrop = !!backdrop;
-    var r0 = hasBackdrop ? backdrop[0] : 0;
-    var g0 = hasBackdrop ? backdrop[1] : 0;
-    var b0 = hasBackdrop ? backdrop[2] : 0;
-    var composeFn;
+    const hasBackdrop = !!backdrop;
+    const r0 = hasBackdrop ? backdrop[0] : 0;
+    const g0 = hasBackdrop ? backdrop[1] : 0;
+    const b0 = hasBackdrop ? backdrop[2] : 0;
+    let composeFn;
 
     if (subtype === "Luminosity") {
       composeFn = composeSMaskLuminosity;
@@ -5215,13 +5165,13 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
       composeFn = composeSMaskAlpha;
     }
 
-    var PIXELS_TO_PROCESS = 1048576;
-    var chunkSize = Math.min(height, Math.ceil(PIXELS_TO_PROCESS / width));
+    const PIXELS_TO_PROCESS = 1048576;
+    const 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);
+    for (let row = 0; row < height; row += chunkSize) {
+      const chunkHeight = Math.min(chunkSize, height - row);
+      const maskData = maskCtx.getImageData(0, row, width, chunkHeight);
+      const layerData = layerCtx.getImageData(0, row, width, chunkHeight);
 
       if (hasBackdrop) {
         composeSMaskBackdrop(maskData.data, r0, g0, b0);
@@ -5233,10 +5183,10 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
   }
 
   function composeSMask(ctx, smask, layerCtx, webGLContext) {
-    var mask = smask.canvas;
-    var maskCtx = smask.context;
+    const mask = smask.canvas;
+    const maskCtx = smask.context;
     ctx.setTransform(smask.scaleX, 0, 0, smask.scaleY, smask.offsetX, smask.offsetY);
-    var backdrop = smask.backdrop || null;
+    const backdrop = smask.backdrop || null;
 
     if (!smask.transferMap && webGLContext.isEnabled) {
       const composed = webGLContext.composeSMask({
@@ -5256,10 +5206,10 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
     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 = {};
+  const LINE_CAP_STYLES = ["butt", "round", "square"];
+  const LINE_JOIN_STYLES = ["miter", "round", "bevel"];
+  const NORMAL_CLIP = {};
+  const EO_CLIP = {};
   CanvasGraphics.prototype = {
     beginDrawing({
       transform,
@@ -5267,15 +5217,15 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
       transparency = false,
       background = null
     }) {
-      var width = this.ctx.canvas.width;
-      var height = this.ctx.canvas.height;
+      const width = this.ctx.canvas.width;
+      const height = this.ctx.canvas.height;
       this.ctx.save();
       this.ctx.fillStyle = background || "rgb(255, 255, 255)";
       this.ctx.fillRect(0, 0, width, height);
       this.ctx.restore();
 
       if (transparency) {
-        var transparentCanvas = this.cachedCanvases.getCanvas("transparent", width, height, true);
+        const transparentCanvas = this.cachedCanvases.getCanvas("transparent", width, height, true);
         this.compositeCtx = this.ctx;
         this.transparentCanvas = transparentCanvas.canvas;
         this.ctx = transparentCanvas.context;
@@ -5292,6 +5242,7 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
 
       this.ctx.transform.apply(this.ctx, viewport.transform);
       this.baseTransform = this.ctx.mozCurrentTransform.slice();
+      this._combinedScaleFactor = Math.hypot(this.baseTransform[0], this.baseTransform[2]);
 
       if (this.imageLayer) {
         this.imageLayer.beginLayout();
@@ -5299,21 +5250,21 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
     },
 
     executeOperatorList: function CanvasGraphics_executeOperatorList(operatorList, executionStartIdx, 
continueCallback, stepper) {
-      var argsArray = operatorList.argsArray;
-      var fnArray = operatorList.fnArray;
-      var i = executionStartIdx || 0;
-      var argsArrayLen = argsArray.length;
+      const argsArray = operatorList.argsArray;
+      const fnArray = operatorList.fnArray;
+      let i = executionStartIdx || 0;
+      const argsArrayLen = argsArray.length;
 
       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;
+      const chunkOperations = argsArrayLen - i > EXECUTION_STEPS && typeof continueCallback === "function";
+      const endTime = chunkOperations ? Date.now() + EXECUTION_TIME : 0;
+      let steps = 0;
+      const commonObjs = this.commonObjs;
+      const objs = this.objs;
+      let fnId;
 
       while (true) {
         if (stepper !== undefined && i === stepper.nextBreakPoint) {
@@ -5353,8 +5304,8 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
       }
     },
     endDrawing: function CanvasGraphics_endDrawing() {
-      if (this.current.activeSMask !== null) {
-        this.endSMaskGroup();
+      while (this.stateStack.length || this.current.activeSMask !== null) {
+        this.restore();
       }
 
       this.ctx.restore();
@@ -5389,7 +5340,7 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
       this.ctx.miterLimit = limit;
     },
     setDash: function CanvasGraphics_setDash(dashArray, dashPhase) {
-      var ctx = this.ctx;
+      const ctx = this.ctx;
 
       if (ctx.setLineDash !== undefined) {
         ctx.setLineDash(dashArray);
@@ -5402,10 +5353,10 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
     setFlatness(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];
+      for (let i = 0, ii = states.length; i < ii; i++) {
+        const state = states[i];
+        const key = state[0];
+        const value = state[1];
 
         switch (key) {
           case "LW":
@@ -5477,15 +5428,15 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
       }
     },
     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 = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight, true);
-      var currentCtx = this.ctx;
-      var currentTransform = currentCtx.mozCurrentTransform;
+      const activeSMask = this.current.activeSMask;
+      const drawnWidth = activeSMask.canvas.width;
+      const drawnHeight = activeSMask.canvas.height;
+      const cacheId = "smaskGroupAt" + this.groupLevel;
+      const scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight, true);
+      const currentCtx = this.ctx;
+      const currentTransform = currentCtx.mozCurrentTransform;
       this.ctx.save();
-      var groupCtx = scratchCanvas.context;
+      const groupCtx = scratchCanvas.context;
       groupCtx.scale(1 / activeSMask.scaleX, 1 / activeSMask.scaleY);
       groupCtx.translate(-activeSMask.offsetX, -activeSMask.offsetY);
       groupCtx.transform.apply(groupCtx, currentTransform);
@@ -5497,7 +5448,7 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
       this.groupLevel++;
     },
     suspendSMaskGroup: function CanvasGraphics_endSMaskGroup() {
-      var groupCtx = this.ctx;
+      const groupCtx = this.ctx;
       this.groupLevel--;
       this.ctx = this.groupStack.pop();
       composeSMask(this.ctx, this.current.activeSMask, groupCtx, this.webGLContext);
@@ -5506,7 +5457,7 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
       copyCtxState(groupCtx, this.ctx);
       this.current.resumeSMaskCtx = groupCtx;
 
-      var deltaTransform = _util.Util.transform(this.current.activeSMask.startTransformInverse, 
groupCtx.mozCurrentTransform);
+      const deltaTransform = _util.Util.transform(this.current.activeSMask.startTransformInverse, 
groupCtx.mozCurrentTransform);
 
       this.ctx.transform.apply(this.ctx, deltaTransform);
       groupCtx.save();
@@ -5514,28 +5465,28 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
       groupCtx.clearRect(0, 0, groupCtx.canvas.width, groupCtx.canvas.height);
       groupCtx.restore();
     },
-    resumeSMaskGroup: function CanvasGraphics_endSMaskGroup() {
-      var groupCtx = this.current.resumeSMaskCtx;
-      var currentCtx = this.ctx;
+    resumeSMaskGroup: function CanvasGraphics_resumeSMaskGroup() {
+      const groupCtx = this.current.resumeSMaskCtx;
+      const currentCtx = this.ctx;
       this.ctx = groupCtx;
       this.groupStack.push(currentCtx);
       this.groupLevel++;
     },
     endSMaskGroup: function CanvasGraphics_endSMaskGroup() {
-      var groupCtx = this.ctx;
+      const groupCtx = this.ctx;
       this.groupLevel--;
       this.ctx = this.groupStack.pop();
       composeSMask(this.ctx, this.current.activeSMask, groupCtx, this.webGLContext);
       this.ctx.restore();
       copyCtxState(groupCtx, this.ctx);
 
-      var deltaTransform = _util.Util.transform(this.current.activeSMask.startTransformInverse, 
groupCtx.mozCurrentTransform);
+      const deltaTransform = _util.Util.transform(this.current.activeSMask.startTransformInverse, 
groupCtx.mozCurrentTransform);
 
       this.ctx.transform.apply(this.ctx, deltaTransform);
     },
     save: function CanvasGraphics_save() {
       this.ctx.save();
-      var old = this.current;
+      const old = this.current;
       this.stateStack.push(old);
       this.current = old.clone();
       this.current.resumeSMaskCtx = null;
@@ -5554,6 +5505,8 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
         this.ctx.restore();
         this.pendingClip = null;
         this._cachedGetSinglePixelWidth = null;
+      } else {
+        this.current.activeSMask = null;
       }
     },
     transform: function CanvasGraphics_transform(a, b, c, d, e, f) {
@@ -5561,34 +5514,30 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
       this._cachedGetSinglePixelWidth = null;
     },
     constructPath: function CanvasGraphics_constructPath(ops, args) {
-      var ctx = this.ctx;
-      var current = this.current;
-      var x = current.x,
+      const ctx = this.ctx;
+      const current = this.current;
+      let x = current.x,
           y = current.y;
 
-      for (var i = 0, j = 0, ii = ops.length; i < ii; i++) {
+      for (let i = 0, j = 0, ii = ops.length; i < ii; i++) {
         switch (ops[i] | 0) {
           case _util.OPS.rectangle:
             x = args[j++];
             y = args[j++];
-            var width = args[j++];
-            var height = args[j++];
-
-            if (width === 0 && ctx.lineWidth < this.getSinglePixelWidth()) {
-              width = this.getSinglePixelWidth();
-            }
+            const width = args[j++];
+            const height = args[j++];
+            const xw = x + width;
+            const yh = y + height;
+            ctx.moveTo(x, y);
 
-            if (height === 0 && ctx.lineWidth < this.getSinglePixelWidth()) {
-              height = this.getSinglePixelWidth();
+            if (width === 0 || height === 0) {
+              ctx.lineTo(xw, yh);
+            } else {
+              ctx.lineTo(xw, y);
+              ctx.lineTo(xw, yh);
+              ctx.lineTo(x, yh);
             }
 
-            var xw = x + width;
-            var yh = y + height;
-            ctx.moveTo(x, y);
-            ctx.lineTo(xw, y);
-            ctx.lineTo(xw, yh);
-            ctx.lineTo(x, yh);
-            ctx.lineTo(x, y);
             ctx.closePath();
             break;
 
@@ -5638,24 +5587,43 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
     },
     stroke: function CanvasGraphics_stroke(consumePath) {
       consumePath = typeof consumePath !== "undefined" ? consumePath : true;
-      var ctx = this.ctx;
-      var strokeColor = this.current.strokeColor;
+      const ctx = this.ctx;
+      const strokeColor = this.current.strokeColor;
       ctx.globalAlpha = this.current.strokeAlpha;
 
       if (this.contentVisible) {
-        if (strokeColor && strokeColor.hasOwnProperty("type") && strokeColor.type === "Pattern") {
+        if (typeof strokeColor === "object" && strokeColor?.getPattern) {
           ctx.save();
           const transform = ctx.mozCurrentTransform;
 
           const scale = _util.Util.singularValueDecompose2dScale(transform)[0];
 
           ctx.strokeStyle = strokeColor.getPattern(ctx, this);
-          ctx.lineWidth = Math.max(this.getSinglePixelWidth() * MIN_WIDTH_FACTOR, this.current.lineWidth * 
scale);
+          const lineWidth = this.getSinglePixelWidth();
+          const scaledLineWidth = this.current.lineWidth * scale;
+
+          if (lineWidth < 0 && -lineWidth >= scaledLineWidth) {
+            ctx.resetTransform();
+            ctx.lineWidth = Math.round(this._combinedScaleFactor);
+          } else {
+            ctx.lineWidth = Math.max(lineWidth, scaledLineWidth);
+          }
+
           ctx.stroke();
           ctx.restore();
         } else {
-          ctx.lineWidth = Math.max(this.getSinglePixelWidth() * MIN_WIDTH_FACTOR, this.current.lineWidth);
-          ctx.stroke();
+          const lineWidth = this.getSinglePixelWidth();
+
+          if (lineWidth < 0 && -lineWidth >= this.current.lineWidth) {
+            ctx.save();
+            ctx.resetTransform();
+            ctx.lineWidth = Math.round(this._combinedScaleFactor);
+            ctx.stroke();
+            ctx.restore();
+          } else {
+            ctx.lineWidth = Math.max(lineWidth, this.current.lineWidth);
+            ctx.stroke();
+          }
         }
       }
 
@@ -5671,10 +5639,10 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
     },
     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;
+      const ctx = this.ctx;
+      const fillColor = this.current.fillColor;
+      const isPatternFill = this.current.patternFill;
+      let needRestore = false;
 
       if (isPatternFill) {
         ctx.save();
@@ -5742,8 +5710,8 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
       this.current.y = this.current.lineY = 0;
     },
     endText: function CanvasGraphics_endText() {
-      var paths = this.pendingTextPaths;
-      var ctx = this.ctx;
+      const paths = this.pendingTextPaths;
+      const ctx = this.ctx;
 
       if (paths === undefined) {
         ctx.beginPath();
@@ -5753,8 +5721,8 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
       ctx.save();
       ctx.beginPath();
 
-      for (var i = 0; i < paths.length; i++) {
-        var path = paths[i];
+      for (let i = 0; i < paths.length; i++) {
+        const path = paths[i];
         ctx.setTransform.apply(ctx, path.transform);
         ctx.translate(path.x, path.y);
         path.addToPath(ctx, path.fontSize);
@@ -5778,14 +5746,14 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
       this.current.leading = -leading;
     },
     setFont: function CanvasGraphics_setFont(fontRefName, size) {
-      var fontObj = this.commonObjs.get(fontRefName);
-      var current = this.current;
+      const fontObj = this.commonObjs.get(fontRefName);
+      const current = this.current;
 
       if (!fontObj) {
         throw new Error(`Can't find font for ${fontRefName}`);
       }
 
-      current.fontMatrix = fontObj.fontMatrix ? fontObj.fontMatrix : _util.FONT_IDENTITY_MATRIX;
+      current.fontMatrix = fontObj.fontMatrix || _util.FONT_IDENTITY_MATRIX;
 
       if (current.fontMatrix[0] === 0 || current.fontMatrix[3] === 0) {
         (0, _util.warn)("Invalid font matrix for font " + fontRefName);
@@ -5805,7 +5773,7 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
         return;
       }
 
-      var name = fontObj.loadedName || "sans-serif";
+      const name = fontObj.loadedName || "sans-serif";
       let bold = "normal";
 
       if (fontObj.black) {
@@ -5814,8 +5782,8 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
         bold = "bold";
       }
 
-      var italic = fontObj.italic ? "italic" : "normal";
-      var typeface = `"${name}", ${fontObj.fallbackName}`;
+      const italic = fontObj.italic ? "italic" : "normal";
+      const typeface = `"${name}", ${fontObj.fallbackName}`;
       let browserFontSize = size;
 
       if (size < MIN_FONT_SIZE) {
@@ -5843,7 +5811,7 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
     },
     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.textMatrixScale = Math.hypot(a, b);
       this.current.x = this.current.lineX = 0;
       this.current.y = this.current.lineY = 0;
     },
@@ -5851,16 +5819,16 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
       this.moveText(0, this.current.leading);
     },
 
-    paintChar(character, x, y, patternTransform) {
-      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 & _util.TextRenderingMode.FILL_STROKE_MASK;
-      var isAddToPathSet = !!(textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG);
+    paintChar(character, x, y, patternTransform, resetLineWidthToOne) {
+      const ctx = this.ctx;
+      const current = this.current;
+      const font = current.font;
+      const textRenderingMode = current.textRenderingMode;
+      const fontSize = current.fontSize / current.fontSizeScale;
+      const fillStrokeMode = textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK;
+      const isAddToPathSet = !!(textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG);
       const patternFill = current.patternFill && !font.missingFile;
-      var addToPath;
+      let addToPath;
 
       if (font.disableFontFace || isAddToPathSet || patternFill) {
         addToPath = font.getPathGenerator(this.commonObjs, character);
@@ -5881,6 +5849,11 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
         }
 
         if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === 
_util.TextRenderingMode.FILL_STROKE) {
+          if (resetLineWidthToOne) {
+            ctx.resetTransform();
+            ctx.lineWidth = Math.round(this._combinedScaleFactor);
+          }
+
           ctx.stroke();
         }
 
@@ -5891,12 +5864,21 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
         }
 
         if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === 
_util.TextRenderingMode.FILL_STROKE) {
-          ctx.strokeText(character, x, y);
+          if (resetLineWidthToOne) {
+            ctx.save();
+            ctx.moveTo(x, y);
+            ctx.resetTransform();
+            ctx.lineWidth = Math.round(this._combinedScaleFactor);
+            ctx.strokeText(character, 0, 0);
+            ctx.restore();
+          } else {
+            ctx.strokeText(character, x, y);
+          }
         }
       }
 
       if (isAddToPathSet) {
-        var paths = this.pendingTextPaths || (this.pendingTextPaths = []);
+        const paths = this.pendingTextPaths || (this.pendingTextPaths = []);
         paths.push({
           transform: ctx.mozCurrentTransform,
           x,
@@ -5913,10 +5895,10 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
       } = this.cachedCanvases.getCanvas("isFontSubpixelAAEnabled", 10, 10);
       ctx.scale(1.5, 1);
       ctx.fillText("I", 0, 10);
-      var data = ctx.getImageData(0, 0, 10, 10).data;
-      var enabled = false;
+      const data = ctx.getImageData(0, 0, 10, 10).data;
+      let enabled = false;
 
-      for (var i = 3; i < data.length; i += 4) {
+      for (let i = 3; i < data.length; i += 4) {
         if (data[i] > 0 && data[i] < 255) {
           enabled = true;
           break;
@@ -5927,31 +5909,31 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
     },
 
     showText: function CanvasGraphics_showText(glyphs) {
-      var current = this.current;
-      var font = current.font;
+      const current = this.current;
+      const font = current.font;
 
       if (font.isType3Font) {
         return this.showType3Text(glyphs);
       }
 
-      var fontSize = current.fontSize;
+      const fontSize = current.fontSize;
 
       if (fontSize === 0) {
         return undefined;
       }
 
-      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 spacingDir = vertical ? 1 : -1;
-      var defaultVMetrics = font.defaultVMetrics;
-      var widthAdvanceScale = fontSize * current.fontMatrix[0];
-      var simpleFillText = current.textRenderingMode === _util.TextRenderingMode.FILL && 
!font.disableFontFace && !current.patternFill;
+      const ctx = this.ctx;
+      const fontSizeScale = current.fontSizeScale;
+      const charSpacing = current.charSpacing;
+      const wordSpacing = current.wordSpacing;
+      const fontDirection = current.fontDirection;
+      const textHScale = current.textHScale * fontDirection;
+      const glyphsLength = glyphs.length;
+      const vertical = font.vertical;
+      const spacingDir = vertical ? 1 : -1;
+      const defaultVMetrics = font.defaultVMetrics;
+      const widthAdvanceScale = fontSize * current.fontMatrix[0];
+      const simpleFillText = current.textRenderingMode === _util.TextRenderingMode.FILL && 
!font.disableFontFace && !current.patternFill;
       ctx.save();
       let patternTransform;
 
@@ -5972,15 +5954,17 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
         ctx.scale(textHScale, 1);
       }
 
-      var lineWidth = current.lineWidth;
-      var scale = current.textMatrixScale;
+      let lineWidth = current.lineWidth;
+      let resetLineWidthToOne = false;
+      const scale = current.textMatrixScale;
 
       if (scale === 0 || lineWidth === 0) {
-        var fillStrokeMode = current.textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK;
+        const fillStrokeMode = current.textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK;
 
         if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === 
_util.TextRenderingMode.FILL_STROKE) {
           this._cachedGetSinglePixelWidth = null;
-          lineWidth = this.getSinglePixelWidth() * MIN_WIDTH_FACTOR;
+          lineWidth = this.getSinglePixelWidth();
+          resetLineWidthToOne = lineWidth < 0;
         }
       } else {
         lineWidth /= scale;
@@ -5992,30 +5976,28 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
       }
 
       ctx.lineWidth = lineWidth;
-      var x = 0,
+      let x = 0,
           i;
 
       for (i = 0; i < glyphsLength; ++i) {
-        var glyph = glyphs[i];
+        const glyph = glyphs[i];
 
         if ((0, _util.isNum)(glyph)) {
           x += spacingDir * glyph * fontSize / 1000;
           continue;
         }
 
-        var restoreNeeded = false;
-        var spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;
-        var character = glyph.fontChar;
-        var accent = glyph.accent;
-        var scaledX, scaledY, scaledAccentX, scaledAccentY;
-        var width = glyph.width;
+        let restoreNeeded = false;
+        const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;
+        const character = glyph.fontChar;
+        const accent = glyph.accent;
+        let scaledX, scaledY;
+        let 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;
+          const vmetric = glyph.vmetric || defaultVMetrics;
+          const vx = -(glyph.vmetric ? vmetric[1] : width * 0.5) * widthAdvanceScale;
+          const vy = vmetric[2] * widthAdvanceScale;
           width = vmetric ? -vmetric[0] : width;
           scaledX = vx / fontSizeScale;
           scaledY = (x + vy) / fontSizeScale;
@@ -6025,10 +6007,10 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
         }
 
         if (font.remeasure && width > 0) {
-          var measuredWidth = ctx.measureText(character).width * 1000 / fontSize * fontSizeScale;
+          const measuredWidth = ctx.measureText(character).width * 1000 / fontSize * fontSizeScale;
 
           if (width < measuredWidth && this.isFontSubpixelAAEnabled) {
-            var characterScaleX = width / measuredWidth;
+            const characterScaleX = width / measuredWidth;
             restoreNeeded = true;
             ctx.save();
             ctx.scale(characterScaleX, 1);
@@ -6042,17 +6024,17 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
           if (simpleFillText && !accent) {
             ctx.fillText(character, scaledX, scaledY);
           } else {
-            this.paintChar(character, scaledX, scaledY, patternTransform);
+            this.paintChar(character, scaledX, scaledY, patternTransform, resetLineWidthToOne);
 
             if (accent) {
-              scaledAccentX = scaledX + fontSize * accent.offset.x / fontSizeScale;
-              scaledAccentY = scaledY - fontSize * accent.offset.y / fontSizeScale;
-              this.paintChar(accent.fontChar, scaledAccentX, scaledAccentY, patternTransform);
+              const scaledAccentX = scaledX + fontSize * accent.offset.x / fontSizeScale;
+              const scaledAccentY = scaledY - fontSize * accent.offset.y / fontSizeScale;
+              this.paintChar(accent.fontChar, scaledAccentX, scaledAccentY, patternTransform, 
resetLineWidthToOne);
             }
           }
         }
 
-        var charWidth;
+        let charWidth;
 
         if (vertical) {
           charWidth = width * widthAdvanceScale - spacing * fontDirection;
@@ -6076,19 +6058,19 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
       ctx.restore();
     },
     showType3Text: function CanvasGraphics_showType3Text(glyphs) {
-      var ctx = this.ctx;
-      var current = this.current;
-      var font = current.font;
-      var fontSize = current.fontSize;
-      var fontDirection = current.fontDirection;
-      var spacingDir = font.vertical ? 1 : -1;
-      var charSpacing = current.charSpacing;
-      var wordSpacing = current.wordSpacing;
-      var textHScale = current.textHScale * fontDirection;
-      var fontMatrix = current.fontMatrix || _util.FONT_IDENTITY_MATRIX;
-      var glyphsLength = glyphs.length;
-      var isTextInvisible = current.textRenderingMode === _util.TextRenderingMode.INVISIBLE;
-      var i, glyph, width, spacingLength;
+      const ctx = this.ctx;
+      const current = this.current;
+      const font = current.font;
+      const fontSize = current.fontSize;
+      const fontDirection = current.fontDirection;
+      const spacingDir = font.vertical ? 1 : -1;
+      const charSpacing = current.charSpacing;
+      const wordSpacing = current.wordSpacing;
+      const textHScale = current.textHScale * fontDirection;
+      const fontMatrix = current.fontMatrix || _util.FONT_IDENTITY_MATRIX;
+      const glyphsLength = glyphs.length;
+      const isTextInvisible = current.textRenderingMode === _util.TextRenderingMode.INVISIBLE;
+      let i, glyph, width, spacingLength;
 
       if (isTextInvisible || fontSize === 0) {
         return;
@@ -6110,8 +6092,8 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
           continue;
         }
 
-        var spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;
-        var operatorList = font.charProcOperatorList[glyph.operatorListId];
+        const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;
+        const operatorList = font.charProcOperatorList[glyph.operatorListId];
 
         if (!operatorList) {
           (0, _util.warn)(`Type3 character "${glyph.operatorListId}" is not available.`);
@@ -6127,7 +6109,7 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
           this.restore();
         }
 
-        var transformed = _util.Util.applyTransform([glyph.width, 0], fontMatrix);
+        const transformed = _util.Util.applyTransform([glyph.width, 0], fontMatrix);
 
         width = transformed[0] * fontSize + spacing;
         ctx.translate(width, 0);
@@ -6144,12 +6126,12 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
       this.endPath();
     },
     getColorN_Pattern: function CanvasGraphics_getColorN_Pattern(IR) {
-      var pattern;
+      let pattern;
 
       if (IR[0] === "TilingPattern") {
-        var color = IR[1];
-        var baseTransform = this.baseTransform || this.ctx.mozCurrentTransform.slice();
-        var canvasGraphicsFactory = {
+        const color = IR[1];
+        const baseTransform = this.baseTransform || this.ctx.mozCurrentTransform.slice();
+        const canvasGraphicsFactory = {
           createCanvasGraphics: ctx => {
             return new CanvasGraphics(ctx, this.commonObjs, this.objs, this.canvasFactory, 
this.webGLContext);
           }
@@ -6169,13 +6151,13 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
       this.current.patternFill = true;
     },
     setStrokeRGBColor: function CanvasGraphics_setStrokeRGBColor(r, g, b) {
-      var color = _util.Util.makeCssRgb(r, g, b);
+      const color = _util.Util.makeHexColor(r, g, b);
 
       this.ctx.strokeStyle = color;
       this.current.strokeColor = color;
     },
     setFillRGBColor: function CanvasGraphics_setFillRGBColor(r, g, b) {
-      var color = _util.Util.makeCssRgb(r, g, b);
+      const color = _util.Util.makeHexColor(r, g, b);
 
       this.ctx.fillStyle = color;
       this.current.fillColor = color;
@@ -6186,29 +6168,29 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
         return;
       }
 
-      var ctx = this.ctx;
+      const ctx = this.ctx;
       this.save();
-      var pattern = (0, _pattern_helper.getShadingPatternFromIR)(patternIR);
+      const pattern = (0, _pattern_helper.getShadingPatternFromIR)(patternIR);
       ctx.fillStyle = pattern.getPattern(ctx, this, true);
-      var inv = ctx.mozCurrentTransformInverse;
+      const inv = ctx.mozCurrentTransformInverse;
 
       if (inv) {
-        var canvas = ctx.canvas;
-        var width = canvas.width;
-        var height = canvas.height;
+        const canvas = ctx.canvas;
+        const width = canvas.width;
+        const height = canvas.height;
 
-        var bl = _util.Util.applyTransform([0, 0], inv);
+        const bl = _util.Util.applyTransform([0, 0], inv);
 
-        var br = _util.Util.applyTransform([0, height], inv);
+        const br = _util.Util.applyTransform([0, height], inv);
 
-        var ul = _util.Util.applyTransform([width, 0], inv);
+        const ul = _util.Util.applyTransform([width, 0], inv);
 
-        var ur = _util.Util.applyTransform([width, height], inv);
+        const ur = _util.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]);
+        const x0 = Math.min(bl[0], br[0], ul[0], ur[0]);
+        const y0 = Math.min(bl[1], br[1], ul[1], ur[1]);
+        const x1 = Math.max(bl[0], br[0], ul[0], ur[0]);
+        const y1 = Math.max(bl[1], br[1], ul[1], ur[1]);
         this.ctx.fillRect(x0, y0, x1 - x0, y1 - y0);
       } else {
         this.ctx.fillRect(-1e10, -1e10, 2e10, 2e10);
@@ -6237,8 +6219,8 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
       this.baseTransform = this.ctx.mozCurrentTransform;
 
       if (bbox) {
-        var width = bbox[2] - bbox[0];
-        var height = bbox[3] - bbox[1];
+        const width = bbox[2] - bbox[0];
+        const height = bbox[3] - bbox[1];
         this.ctx.rect(bbox[0], bbox[1], width, height);
         this.clip();
         this.endPath();
@@ -6258,7 +6240,7 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
       }
 
       this.save();
-      var currentCtx = this.ctx;
+      const currentCtx = this.ctx;
 
       if (!group.isolated) {
         (0, _util.info)("TODO: Support non-isolated groups.");
@@ -6268,7 +6250,7 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
         (0, _util.warn)("Knockout groups not supported.");
       }
 
-      var currentTransform = currentCtx.mozCurrentTransform;
+      const currentTransform = currentCtx.mozCurrentTransform;
 
       if (group.matrix) {
         currentCtx.transform.apply(currentCtx, group.matrix);
@@ -6278,15 +6260,15 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
         throw new Error("Bounding box is required.");
       }
 
-      var bounds = _util.Util.getAxialAlignedBoundingBox(group.bbox, currentCtx.mozCurrentTransform);
+      let bounds = _util.Util.getAxialAlignedBoundingBox(group.bbox, currentCtx.mozCurrentTransform);
 
-      var canvasBounds = [0, 0, currentCtx.canvas.width, currentCtx.canvas.height];
+      const canvasBounds = [0, 0, currentCtx.canvas.width, currentCtx.canvas.height];
       bounds = _util.Util.intersect(bounds, canvasBounds) || [0, 0, 0, 0];
-      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,
+      const offsetX = Math.floor(bounds[0]);
+      const offsetY = Math.floor(bounds[1]);
+      let drawnWidth = Math.max(Math.ceil(bounds[2]) - offsetX, 1);
+      let drawnHeight = Math.max(Math.ceil(bounds[3]) - offsetY, 1);
+      let scaleX = 1,
           scaleY = 1;
 
       if (drawnWidth > MAX_GROUP_SIZE) {
@@ -6299,14 +6281,14 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
         drawnHeight = MAX_GROUP_SIZE;
       }
 
-      var cacheId = "groupAt" + this.groupLevel;
+      let cacheId = "groupAt" + this.groupLevel;
 
       if (group.smask) {
         cacheId += "_smask_" + this.smaskCounter++ % 2;
       }
 
-      var scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight, true);
-      var groupCtx = scratchCanvas.context;
+      const scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight, true);
+      const groupCtx = scratchCanvas.context;
       groupCtx.scale(1 / scaleX, 1 / scaleY);
       groupCtx.translate(-offsetX, -offsetY);
       groupCtx.transform.apply(groupCtx, currentTransform);
@@ -6343,7 +6325,7 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
       }
 
       this.groupLevel--;
-      var groupCtx = this.ctx;
+      const groupCtx = this.ctx;
       this.ctx = this.groupStack.pop();
 
       if (this.ctx.imageSmoothingEnabled !== undefined) {
@@ -6376,8 +6358,8 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
       this.current = new CanvasExtraState();
 
       if (Array.isArray(rect) && rect.length === 4) {
-        var width = rect[2] - rect[0];
-        var height = rect[3] - rect[1];
+        const width = rect[2] - rect[0];
+        const height = rect[3] - rect[1];
         this.ctx.rect(rect[0], rect[1], width, height);
         this.clip();
         this.endPath();
@@ -6394,12 +6376,12 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
         return;
       }
 
-      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;
+      const ctx = this.ctx;
+      const width = img.width,
+            height = img.height;
+      const fillColor = this.current.fillColor;
+      const isPatternFill = this.current.patternFill;
+      const glyph = this.processingType3;
 
       if (COMPILE_TYPE3_GLYPHS && glyph && glyph.compiled === undefined) {
         if (width <= MAX_SIZE_TO_COMPILE && height <= MAX_SIZE_TO_COMPILE) {
@@ -6413,13 +6395,13 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
         }
       }
 
-      if (glyph && glyph.compiled) {
+      if (glyph?.compiled) {
         glyph.compiled(ctx);
         return;
       }
 
-      var maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height);
-      var maskCtx = maskCanvas.context;
+      const maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height);
+      const maskCtx = maskCanvas.context;
       maskCtx.save();
       putBinaryImageMask(maskCtx, img);
       maskCtx.globalCompositeOperation = "source-in";
@@ -6434,21 +6416,21 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
         return;
       }
 
-      var width = imgData.width;
-      var height = imgData.height;
-      var fillColor = this.current.fillColor;
-      var isPatternFill = this.current.patternFill;
-      var maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height);
-      var maskCtx = maskCanvas.context;
+      const width = imgData.width;
+      const height = imgData.height;
+      const fillColor = this.current.fillColor;
+      const isPatternFill = this.current.patternFill;
+      const maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height);
+      const 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;
+      const ctx = this.ctx;
 
-      for (var i = 0, ii = positions.length; i < ii; i += 2) {
+      for (let i = 0, ii = positions.length; i < ii; i += 2) {
         ctx.save();
         ctx.transform(scaleX, skewX, skewY, scaleY, positions[i], positions[i + 1]);
         ctx.scale(1, -1);
@@ -6462,16 +6444,16 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
         return;
       }
 
-      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 = this.cachedCanvases.getCanvas("maskCanvas", width, height);
-        var maskCtx = maskCanvas.context;
+      const ctx = this.ctx;
+      const fillColor = this.current.fillColor;
+      const isPatternFill = this.current.patternFill;
+
+      for (let i = 0, ii = images.length; i < ii; i++) {
+        const image = images[i];
+        const width = image.width,
+              height = image.height;
+        const maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height);
+        const maskCtx = maskCanvas.context;
         maskCtx.save();
         putBinaryImageMask(maskCtx, image);
         maskCtx.globalCompositeOperation = "source-in";
@@ -6511,11 +6493,11 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
         return;
       }
 
-      var width = imgData.width;
-      var height = imgData.height;
-      var map = [];
+      const width = imgData.width;
+      const height = imgData.height;
+      const map = [];
 
-      for (var i = 0, ii = positions.length; i < ii; i += 2) {
+      for (let i = 0, ii = positions.length; i < ii; i += 2) {
         map.push({
           transform: [scaleX, 0, 0, scaleY, positions[i], positions[i + 1]],
           x: 0,
@@ -6532,35 +6514,31 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
         return;
       }
 
-      var width = imgData.width;
-      var height = imgData.height;
-      var ctx = this.ctx;
+      const width = imgData.width;
+      const height = imgData.height;
+      const ctx = this.ctx;
       this.save();
       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;
+      const currentTransform = ctx.mozCurrentTransformInverse;
+      let widthScale = Math.max(Math.hypot(currentTransform[0], currentTransform[1]), 1);
+      let heightScale = Math.max(Math.hypot(currentTransform[2], currentTransform[3]), 1);
+      let imgToPaint, tmpCanvas, tmpCtx;
 
       if (typeof HTMLElement === "function" && imgData instanceof HTMLElement || !imgData.data) {
         imgToPaint = imgData;
       } else {
         tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", width, height);
-        var tmpCtx = tmpCanvas.context;
+        tmpCtx = tmpCanvas.context;
         putBinaryImageData(tmpCtx, imgData, this.current.transferMaps);
         imgToPaint = tmpCanvas.canvas;
       }
 
-      var paintWidth = width,
+      let paintWidth = width,
           paintHeight = height;
-      var tmpCanvasId = "prescale1";
+      let tmpCanvasId = "prescale1";
 
       while (widthScale > 2 && paintWidth > 1 || heightScale > 2 && paintHeight > 1) {
-        var newWidth = paintWidth,
+        let newWidth = paintWidth,
             newHeight = paintHeight;
 
         if (widthScale > 2 && paintWidth > 1) {
@@ -6586,7 +6564,7 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
       ctx.drawImage(imgToPaint, 0, 0, paintWidth, paintHeight, 0, -height, width, height);
 
       if (this.imageLayer) {
-        var position = this.getCanvasPosition(0, -height);
+        const position = this.getCanvasPosition(0, -height);
         this.imageLayer.appendImage({
           imgData,
           left: position[0],
@@ -6603,22 +6581,22 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
         return;
       }
 
-      var ctx = this.ctx;
-      var w = imgData.width;
-      var h = imgData.height;
-      var tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", w, h);
-      var tmpCtx = tmpCanvas.context;
+      const ctx = this.ctx;
+      const w = imgData.width;
+      const h = imgData.height;
+      const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", w, h);
+      const tmpCtx = tmpCanvas.context;
       putBinaryImageData(tmpCtx, imgData, this.current.transferMaps);
 
-      for (var i = 0, ii = map.length; i < ii; i++) {
-        var entry = map[i];
+      for (let i = 0, ii = map.length; i < ii; i++) {
+        const 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);
+          const position = this.getCanvasPosition(entry.x, entry.y);
           this.imageLayer.appendImage({
             imgData,
             left: position[0],
@@ -6665,7 +6643,7 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
     beginCompat: function CanvasGraphics_beginCompat() {},
     endCompat: function CanvasGraphics_endCompat() {},
     consumePath: function CanvasGraphics_consumePath() {
-      var ctx = this.ctx;
+      const ctx = this.ctx;
 
       if (this.pendingClip) {
         if (this.pendingClip === EO_CLIP) {
@@ -6680,17 +6658,28 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
       ctx.beginPath();
     },
 
-    getSinglePixelWidth(scale) {
+    getSinglePixelWidth() {
       if (this._cachedGetSinglePixelWidth === null) {
-        const inverse = this.ctx.mozCurrentTransformInverse;
-        this._cachedGetSinglePixelWidth = Math.sqrt(Math.max(inverse[0] * inverse[0] + inverse[1] * 
inverse[1], inverse[2] * inverse[2] + inverse[3] * inverse[3]));
+        const m = this.ctx.mozCurrentTransform;
+        const absDet = Math.abs(m[0] * m[3] - m[2] * m[1]);
+        const sqNorm1 = m[0] ** 2 + m[2] ** 2;
+        const sqNorm2 = m[1] ** 2 + m[3] ** 2;
+        const pixelHeight = Math.sqrt(Math.max(sqNorm1, sqNorm2)) / absDet;
+
+        if (sqNorm1 !== sqNorm2 && this._combinedScaleFactor * pixelHeight > 1) {
+          this._cachedGetSinglePixelWidth = -(this._combinedScaleFactor * pixelHeight);
+        } else if (absDet > Number.EPSILON) {
+          this._cachedGetSinglePixelWidth = pixelHeight;
+        } else {
+          this._cachedGetSinglePixelWidth = 1;
+        }
       }
 
       return this._cachedGetSinglePixelWidth;
     },
 
     getCanvasPosition: function CanvasGraphics_getCanvasPosition(x, y) {
-      var transform = this.ctx.mozCurrentTransform;
+      const transform = this.ctx.mozCurrentTransform;
       return [transform[0] * x + transform[2] * y + transform[4], transform[1] * x + transform[3] * y + 
transform[5]];
     },
     isContentVisible: function CanvasGraphics_isContentVisible() {
@@ -6704,7 +6693,7 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
     }
   };
 
-  for (var op in _util.OPS) {
+  for (const op in _util.OPS) {
     CanvasGraphics.prototype[_util.OPS[op]] = CanvasGraphics.prototype[op];
   }
 
@@ -6715,20 +6704,19 @@ exports.CanvasGraphics = CanvasGraphics;
 
 /***/ }),
 /* 11 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.getShadingPatternFromIR = getShadingPatternFromIR;
 exports.TilingPattern = void 0;
 
 var _util = __w_pdfjs_require__(2);
 
-var ShadingIRs = {};
+const ShadingIRs = {};
 
 function applyBoundingBox(ctx, bbox) {
   if (!bbox || typeof Path2D === "undefined") {
@@ -6744,18 +6732,17 @@ function applyBoundingBox(ctx, bbox) {
 
 ShadingIRs.RadialAxial = {
   fromIR: function RadialAxial_fromIR(raw) {
-    var type = raw[1];
-    var bbox = raw[2];
-    var colorStops = raw[3];
-    var p0 = raw[4];
-    var p1 = raw[5];
-    var r0 = raw[6];
-    var r1 = raw[7];
+    const type = raw[1];
+    const bbox = raw[2];
+    const colorStops = raw[3];
+    const p0 = raw[4];
+    const p1 = raw[5];
+    const r0 = raw[6];
+    const r1 = raw[7];
     return {
-      type: "Pattern",
       getPattern: function RadialAxial_getPattern(ctx) {
         applyBoundingBox(ctx, bbox);
-        var grad;
+        let grad;
 
         if (type === "axial") {
           grad = ctx.createLinearGradient(p0[0], p0[1], p1[0], p1[1]);
@@ -6763,8 +6750,8 @@ ShadingIRs.RadialAxial = {
           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];
+        for (let i = 0, ii = colorStops.length; i < ii; ++i) {
+          const c = colorStops[i];
           grad.addColorStop(c[0], c[1]);
         }
 
@@ -6774,13 +6761,13 @@ ShadingIRs.RadialAxial = {
   }
 };
 
-var createMeshCanvas = function createMeshCanvasClosure() {
+const createMeshCanvas = function createMeshCanvasClosure() {
   function drawTriangle(data, context, p1, p2, p3, c1, c2, c3) {
-    var coords = context.coords,
-        colors = context.colors;
-    var bytes = data.data,
-        rowSize = data.width * 4;
-    var tmp;
+    const coords = context.coords,
+          colors = context.colors;
+    const bytes = data.data,
+          rowSize = data.width * 4;
+    let tmp;
 
     if (coords[p1 + 1] > coords[p2 + 1]) {
       tmp = p1;
@@ -6809,32 +6796,32 @@ var createMeshCanvas = function createMeshCanvasClosure() {
       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;
+    const x1 = (coords[p1] + context.offsetX) * context.scaleX;
+    const y1 = (coords[p1 + 1] + context.offsetY) * context.scaleY;
+    const x2 = (coords[p2] + context.offsetX) * context.scaleX;
+    const y2 = (coords[p2 + 1] + context.offsetY) * context.scaleY;
+    const x3 = (coords[p3] + context.offsetX) * context.scaleX;
+    const 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;
-
-    for (var y = minY; y <= maxY; y++) {
+    const c1r = colors[c1],
+          c1g = colors[c1 + 1],
+          c1b = colors[c1 + 2];
+    const c2r = colors[c2],
+          c2g = colors[c2 + 1],
+          c2b = colors[c2 + 2];
+    const c3r = colors[c3],
+          c3g = colors[c3 + 1],
+          c3b = colors[c3 + 2];
+    const minY = Math.round(y1),
+          maxY = Math.round(y3);
+    let xa, car, cag, cab;
+    let xb, cbr, cbg, cbb;
+
+    for (let y = minY; y <= maxY; y++) {
       if (y < y2) {
         let k;
 
@@ -6881,11 +6868,11 @@ var createMeshCanvas = function createMeshCanvasClosure() {
       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;
+      const x1_ = Math.round(Math.min(xa, xb));
+      const x2_ = Math.round(Math.max(xa, xb));
+      let j = rowSize * y + x1_ * 4;
 
-      for (var x = x1_; x <= x2_; x++) {
+      for (let x = x1_; x <= x2_; x++) {
         k = (xa - x) / (xa - xb);
 
         if (k < 0) {
@@ -6903,20 +6890,20 @@ var createMeshCanvas = function createMeshCanvasClosure() {
   }
 
   function drawFigure(data, figure, context) {
-    var ps = figure.coords;
-    var cs = figure.colors;
-    var i, ii;
+    const ps = figure.coords;
+    const cs = figure.colors;
+    let i, ii;
 
     switch (figure.type) {
       case "lattice":
-        var verticesPerRow = figure.verticesPerRow;
-        var rows = Math.floor(ps.length / verticesPerRow) - 1;
-        var cols = verticesPerRow - 1;
+        const verticesPerRow = figure.verticesPerRow;
+        const rows = Math.floor(ps.length / verticesPerRow) - 1;
+        const cols = verticesPerRow - 1;
 
         for (i = 0; i < rows; i++) {
-          var q = i * verticesPerRow;
+          let q = i * verticesPerRow;
 
-          for (var j = 0; j < cols; j++, q++) {
+          for (let 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]);
           }
@@ -6937,18 +6924,18 @@ var createMeshCanvas = function createMeshCanvasClosure() {
   }
 
   function createMeshCanvas(bounds, combinesScale, coords, colors, figures, backgroundColor, cachedCanvases, 
webGLContext) {
-    var EXPECTED_SCALE = 1.1;
-    var MAX_PATTERN_SIZE = 3000;
-    var BORDER_SIZE = 2;
-    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 = {
+    const EXPECTED_SCALE = 1.1;
+    const MAX_PATTERN_SIZE = 3000;
+    const BORDER_SIZE = 2;
+    const offsetX = Math.floor(bounds[0]);
+    const offsetY = Math.floor(bounds[1]);
+    const boundsWidth = Math.ceil(bounds[2]) - offsetX;
+    const boundsHeight = Math.ceil(bounds[3]) - offsetY;
+    const width = Math.min(Math.ceil(Math.abs(boundsWidth * combinesScale[0] * EXPECTED_SCALE)), 
MAX_PATTERN_SIZE);
+    const height = Math.min(Math.ceil(Math.abs(boundsHeight * combinesScale[1] * EXPECTED_SCALE)), 
MAX_PATTERN_SIZE);
+    const scaleX = boundsWidth / width;
+    const scaleY = boundsHeight / height;
+    const context = {
       coords,
       colors,
       offsetX: -offsetX,
@@ -6956,9 +6943,9 @@ var createMeshCanvas = function createMeshCanvasClosure() {
       scaleX: 1 / scaleX,
       scaleY: 1 / scaleY
     };
-    var paddedWidth = width + BORDER_SIZE * 2;
-    var paddedHeight = height + BORDER_SIZE * 2;
-    var canvas, tmpCanvas, i, ii;
+    const paddedWidth = width + BORDER_SIZE * 2;
+    const paddedHeight = height + BORDER_SIZE * 2;
+    let canvas, tmpCanvas, i, ii;
 
     if (webGLContext.isEnabled) {
       canvas = webGLContext.drawFigures({
@@ -6973,11 +6960,11 @@ var createMeshCanvas = function createMeshCanvasClosure() {
       canvas = tmpCanvas.canvas;
     } else {
       tmpCanvas = cachedCanvases.getCanvas("mesh", paddedWidth, paddedHeight, false);
-      var tmpCtx = tmpCanvas.context;
-      var data = tmpCtx.createImageData(width, height);
+      const tmpCtx = tmpCanvas.context;
+      const data = tmpCtx.createImageData(width, height);
 
       if (backgroundColor) {
-        var bytes = data.data;
+        const bytes = data.data;
 
         for (i = 0, ii = bytes.length; i < ii; i += 4) {
           bytes[i] = backgroundColor[0];
@@ -7009,18 +6996,17 @@ var createMeshCanvas = function createMeshCanvasClosure() {
 
 ShadingIRs.Mesh = {
   fromIR: function Mesh_fromIR(raw) {
-    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];
+    const coords = raw[2];
+    const colors = raw[3];
+    const figures = raw[4];
+    const bounds = raw[5];
+    const matrix = raw[6];
+    const bbox = raw[7];
+    const background = raw[8];
     return {
-      type: "Pattern",
       getPattern: function Mesh_getPattern(ctx, owner, shadingFill) {
         applyBoundingBox(ctx, bbox);
-        var scale;
+        let scale;
 
         if (shadingFill) {
           scale = _util.Util.singularValueDecompose2dScale(ctx.mozCurrentTransform);
@@ -7028,13 +7014,13 @@ ShadingIRs.Mesh = {
           scale = _util.Util.singularValueDecompose2dScale(owner.baseTransform);
 
           if (matrix) {
-            var matrixScale = _util.Util.singularValueDecompose2dScale(matrix);
+            const matrixScale = _util.Util.singularValueDecompose2dScale(matrix);
 
             scale = [scale[0] * matrixScale[0], scale[1] * matrixScale[1]];
           }
         }
 
-        var temporaryPatternCanvas = createMeshCanvas(bounds, scale, coords, colors, figures, shadingFill ? 
null : background, owner.cachedCanvases, owner.webGLContext);
+        const temporaryPatternCanvas = createMeshCanvas(bounds, scale, coords, colors, figures, shadingFill 
? null : background, owner.cachedCanvases, owner.webGLContext);
 
         if (!shadingFill) {
           ctx.setTransform.apply(ctx, owner.baseTransform);
@@ -7054,7 +7040,6 @@ ShadingIRs.Mesh = {
 ShadingIRs.Dummy = {
   fromIR: function Dummy_fromIR() {
     return {
-      type: "Pattern",
       getPattern: function Dummy_fromIR_getPattern() {
         return "hotpink";
       }
@@ -7063,7 +7048,7 @@ ShadingIRs.Dummy = {
 };
 
 function getShadingPatternFromIR(raw) {
-  var shadingIR = ShadingIRs[raw[0]];
+  const shadingIR = ShadingIRs[raw[0]];
 
   if (!shadingIR) {
     throw new Error(`Unknown IR type: ${raw[0]}`);
@@ -7072,12 +7057,12 @@ function getShadingPatternFromIR(raw) {
   return shadingIR.fromIR(raw);
 }
 
-var TilingPattern = function TilingPatternClosure() {
-  var PaintType = {
+const TilingPattern = function TilingPatternClosure() {
+  const PaintType = {
     COLORED: 1,
     UNCOLORED: 2
   };
-  var MAX_PATTERN_SIZE = 3000;
+  const MAX_PATTERN_SIZE = 3000;
 
   function TilingPattern(IR, color, ctx, canvasGraphicsFactory, baseTransform) {
     this.operatorList = IR[2];
@@ -7090,36 +7075,35 @@ var TilingPattern = function TilingPatternClosure() {
     this.color = color;
     this.canvasGraphicsFactory = canvasGraphicsFactory;
     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 canvasGraphicsFactory = this.canvasGraphicsFactory;
+      const operatorList = this.operatorList;
+      const bbox = this.bbox;
+      const xstep = this.xstep;
+      const ystep = this.ystep;
+      const paintType = this.paintType;
+      const tilingType = this.tilingType;
+      const color = this.color;
+      const canvasGraphicsFactory = this.canvasGraphicsFactory;
       (0, _util.info)("TilingType: " + tilingType);
-      var x0 = bbox[0],
-          y0 = bbox[1],
-          x1 = bbox[2],
-          y1 = bbox[3];
+      const x0 = bbox[0],
+            y0 = bbox[1],
+            x1 = bbox[2],
+            y1 = bbox[3];
 
-      var matrixScale = _util.Util.singularValueDecompose2dScale(this.matrix);
+      const matrixScale = _util.Util.singularValueDecompose2dScale(this.matrix);
 
-      var curMatrixScale = _util.Util.singularValueDecompose2dScale(this.baseTransform);
+      const curMatrixScale = _util.Util.singularValueDecompose2dScale(this.baseTransform);
 
-      var combinedScale = [matrixScale[0] * curMatrixScale[0], matrixScale[1] * curMatrixScale[1]];
-      var dimx = this.getSizeAndScale(xstep, this.ctx.canvas.width, combinedScale[0]);
-      var dimy = this.getSizeAndScale(ystep, this.ctx.canvas.height, combinedScale[1]);
-      var tmpCanvas = owner.cachedCanvases.getCanvas("pattern", dimx.size, dimy.size, true);
-      var tmpCtx = tmpCanvas.context;
-      var graphics = canvasGraphicsFactory.createCanvasGraphics(tmpCtx);
+      const combinedScale = [matrixScale[0] * curMatrixScale[0], matrixScale[1] * curMatrixScale[1]];
+      const dimx = this.getSizeAndScale(xstep, this.ctx.canvas.width, combinedScale[0]);
+      const dimy = this.getSizeAndScale(ystep, this.ctx.canvas.height, combinedScale[1]);
+      const tmpCanvas = owner.cachedCanvases.getCanvas("pattern", dimx.size, dimy.size, true);
+      const tmpCtx = tmpCanvas.context;
+      const graphics = canvasGraphicsFactory.createCanvasGraphics(tmpCtx);
       graphics.groupLevel = owner.groupLevel;
       this.setFillAndStrokeStyleToContext(graphics, paintType, color);
       graphics.transform(dimx.scale, 0, 0, dimy.scale, 0, 0);
@@ -7132,8 +7116,8 @@ var TilingPattern = function TilingPatternClosure() {
     },
     getSizeAndScale: function TilingPattern_getSizeAndScale(step, realOutputSize, scale) {
       step = Math.abs(step);
-      var maxSize = Math.max(MAX_PATTERN_SIZE, realOutputSize);
-      var size = Math.ceil(step * scale);
+      const maxSize = Math.max(MAX_PATTERN_SIZE, realOutputSize);
+      let size = Math.ceil(step * scale);
 
       if (size >= maxSize) {
         size = maxSize;
@@ -7148,8 +7132,8 @@ var TilingPattern = function TilingPatternClosure() {
     },
     clipBbox: function clipBbox(graphics, bbox, x0, y0, x1, y1) {
       if (Array.isArray(bbox) && bbox.length === 4) {
-        var bboxWidth = x1 - x0;
-        var bboxHeight = y1 - y0;
+        const bboxWidth = x1 - x0;
+        const bboxHeight = y1 - y0;
         graphics.ctx.rect(x0, y0, bboxWidth, bboxHeight);
         graphics.clip();
         graphics.endPath();
@@ -7161,7 +7145,7 @@ var TilingPattern = function TilingPatternClosure() {
 
       switch (paintType) {
         case PaintType.COLORED:
-          var ctx = this.ctx;
+          const ctx = this.ctx;
           context.fillStyle = ctx.fillStyle;
           context.strokeStyle = ctx.strokeStyle;
           current.fillColor = ctx.fillStyle;
@@ -7169,7 +7153,7 @@ var TilingPattern = function TilingPatternClosure() {
           break;
 
         case PaintType.UNCOLORED:
-          var cssColor = _util.Util.makeCssRgb(color[0], color[1], color[2]);
+          const cssColor = _util.Util.makeHexColor(color[0], color[1], color[2]);
 
           context.fillStyle = cssColor;
           context.strokeStyle = cssColor;
@@ -7185,7 +7169,7 @@ var TilingPattern = function TilingPatternClosure() {
       ctx = this.ctx;
       ctx.setTransform.apply(ctx, this.baseTransform);
       ctx.transform.apply(ctx, this.matrix);
-      var temporaryPatternCanvas = this.createPatternCanvas(owner);
+      const temporaryPatternCanvas = this.createPatternCanvas(owner);
       return ctx.createPattern(temporaryPatternCanvas, "repeat");
     }
   };
@@ -7196,14 +7180,13 @@ exports.TilingPattern = TilingPattern;
 
 /***/ }),
 /* 12 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/***/ ((__unused_webpack_module, exports) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.GlobalWorkerOptions = void 0;
 const GlobalWorkerOptions = Object.create(null);
 exports.GlobalWorkerOptions = GlobalWorkerOptions;
@@ -7212,14 +7195,13 @@ GlobalWorkerOptions.workerSrc = GlobalWorkerOptions.workerSrc === undefined ? ""
 
 /***/ }),
 /* 13 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.MessageHandler = void 0;
 
 var _util = __w_pdfjs_require__(2);
@@ -7670,622 +7652,98 @@ class MessageHandler {
             success: true
           });
         }, function (reason) {
-          comObj.postMessage({
-            sourceName,
-            targetName,
-            stream: StreamKind.CANCEL_COMPLETE,
-            streamId,
-            reason: wrapReason(reason)
-          });
-        });
-        this.streamSinks[streamId].sinkCapability.reject(wrapReason(data.reason));
-        this.streamSinks[streamId].isCancelled = true;
-        delete this.streamSinks[streamId];
-        break;
-
-      default:
-        throw new Error("Unexpected stream case");
-    }
-  }
-
-  async _deleteStreamController(streamId) {
-    await Promise.allSettled([this.streamControllers[streamId].startCall, 
this.streamControllers[streamId].pullCall, this.streamControllers[streamId].cancelCall].map(function 
(capability) {
-      return capability && capability.promise;
-    }));
-    delete this.streamControllers[streamId];
-  }
-
-  _postMessage(message, transfers) {
-    if (transfers && this.postMessageTransfers) {
-      this.comObj.postMessage(message, transfers);
-    } else {
-      this.comObj.postMessage(message);
-    }
-  }
-
-  destroy() {
-    this.comObj.removeEventListener("message", this._onComObjOnMessage);
-  }
-
-}
-
-exports.MessageHandler = MessageHandler;
-
-/***/ }),
-/* 14 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.Metadata = void 0;
-
-var _util = __w_pdfjs_require__(2);
-
-var _xml_parser = __w_pdfjs_require__(15);
-
-class Metadata {
-  constructor(data) {
-    (0, _util.assert)(typeof data === "string", "Metadata: input is not a string");
-    data = this._repair(data);
-    const parser = new _xml_parser.SimpleXMLParser();
-    const xmlDocument = parser.parseFromString(data);
-    this._metadataMap = new Map();
-
-    if (xmlDocument) {
-      this._parse(xmlDocument);
-    }
-  }
-
-  _repair(data) {
-    return data.replace(/^[^<]+/, "").replace(/>\\376\\377([^<]+)/g, function (all, codes) {
-      const bytes = codes.replace(/\\([0-3])([0-7])([0-7])/g, function (code, d1, d2, d3) {
-        return String.fromCharCode(d1 * 64 + d2 * 8 + d3 * 1);
-      }).replace(/&(amp|apos|gt|lt|quot);/g, function (str, name) {
-        switch (name) {
-          case "amp":
-            return "&";
-
-          case "apos":
-            return "'";
-
-          case "gt":
-            return ">";
-
-          case "lt":
-            return "<";
-
-          case "quot":
-            return '"';
-        }
-
-        throw new Error(`_repair: ${name} isn't defined.`);
-      });
-      let chars = "";
-
-      for (let i = 0, ii = bytes.length; i < ii; i += 2) {
-        const code = bytes.charCodeAt(i) * 256 + bytes.charCodeAt(i + 1);
-
-        if (code >= 32 && code < 127 && code !== 60 && code !== 62 && code !== 38) {
-          chars += String.fromCharCode(code);
-        } else {
-          chars += "&#x" + (0x10000 + code).toString(16).substring(1) + ";";
-        }
-      }
-
-      return ">" + chars;
-    });
-  }
-
-  _parse(xmlDocument) {
-    let rdf = xmlDocument.documentElement;
-
-    if (rdf.nodeName.toLowerCase() !== "rdf:rdf") {
-      rdf = rdf.firstChild;
-
-      while (rdf && rdf.nodeName.toLowerCase() !== "rdf:rdf") {
-        rdf = rdf.nextSibling;
-      }
-    }
-
-    const nodeName = rdf ? rdf.nodeName.toLowerCase() : null;
-
-    if (!rdf || nodeName !== "rdf:rdf" || !rdf.hasChildNodes()) {
-      return;
-    }
-
-    const children = rdf.childNodes;
-
-    for (let i = 0, ii = children.length; i < ii; i++) {
-      const desc = children[i];
-
-      if (desc.nodeName.toLowerCase() !== "rdf:description") {
-        continue;
-      }
-
-      for (let j = 0, jj = desc.childNodes.length; j < jj; j++) {
-        if (desc.childNodes[j].nodeName.toLowerCase() !== "#text") {
-          const entry = desc.childNodes[j];
-          const name = entry.nodeName.toLowerCase();
-
-          this._metadataMap.set(name, entry.textContent.trim());
-        }
-      }
-    }
-  }
-
-  get(name) {
-    return this._metadataMap.has(name) ? this._metadataMap.get(name) : null;
-  }
-
-  getAll() {
-    return Object.fromEntries(this._metadataMap);
-  }
-
-  has(name) {
-    return this._metadataMap.has(name);
-  }
-
-}
-
-exports.Metadata = Metadata;
-
-/***/ }),
-/* 15 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.SimpleXMLParser = void 0;
-const XMLParserErrorCode = {
-  NoError: 0,
-  EndOfDocument: -1,
-  UnterminatedCdat: -2,
-  UnterminatedXmlDeclaration: -3,
-  UnterminatedDoctypeDeclaration: -4,
-  UnterminatedComment: -5,
-  MalformedElement: -6,
-  OutOfMemory: -7,
-  UnterminatedAttributeValue: -8,
-  UnterminatedElement: -9,
-  ElementNeverBegun: -10
-};
-
-function isWhitespace(s, index) {
-  const ch = s[index];
-  return ch === " " || ch === "\n" || ch === "\r" || ch === "\t";
-}
-
-function isWhitespaceString(s) {
-  for (let i = 0, ii = s.length; i < ii; i++) {
-    if (!isWhitespace(s, i)) {
-      return false;
-    }
-  }
-
-  return true;
-}
-
-class XMLParserBase {
-  _resolveEntities(s) {
-    return s.replace(/&([^;]+);/g, (all, entity) => {
-      if (entity.substring(0, 2) === "#x") {
-        return String.fromCharCode(parseInt(entity.substring(2), 16));
-      } else if (entity.substring(0, 1) === "#") {
-        return String.fromCharCode(parseInt(entity.substring(1), 10));
-      }
-
-      switch (entity) {
-        case "lt":
-          return "<";
-
-        case "gt":
-          return ">";
-
-        case "amp":
-          return "&";
-
-        case "quot":
-          return '"';
-      }
-
-      return this.onResolveEntity(entity);
-    });
-  }
-
-  _parseContent(s, start) {
-    const attributes = [];
-    let pos = start;
-
-    function skipWs() {
-      while (pos < s.length && isWhitespace(s, pos)) {
-        ++pos;
-      }
-    }
-
-    while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== ">" && s[pos] !== "/") {
-      ++pos;
-    }
-
-    const name = s.substring(start, pos);
-    skipWs();
-
-    while (pos < s.length && s[pos] !== ">" && s[pos] !== "/" && s[pos] !== "?") {
-      skipWs();
-      let attrName = "",
-          attrValue = "";
-
-      while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== "=") {
-        attrName += s[pos];
-        ++pos;
-      }
-
-      skipWs();
-
-      if (s[pos] !== "=") {
-        return null;
-      }
-
-      ++pos;
-      skipWs();
-      const attrEndChar = s[pos];
-
-      if (attrEndChar !== '"' && attrEndChar !== "'") {
-        return null;
-      }
-
-      const attrEndIndex = s.indexOf(attrEndChar, ++pos);
-
-      if (attrEndIndex < 0) {
-        return null;
-      }
-
-      attrValue = s.substring(pos, attrEndIndex);
-      attributes.push({
-        name: attrName,
-        value: this._resolveEntities(attrValue)
-      });
-      pos = attrEndIndex + 1;
-      skipWs();
-    }
-
-    return {
-      name,
-      attributes,
-      parsed: pos - start
-    };
-  }
-
-  _parseProcessingInstruction(s, start) {
-    let pos = start;
-
-    function skipWs() {
-      while (pos < s.length && isWhitespace(s, pos)) {
-        ++pos;
-      }
-    }
-
-    while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== ">" && s[pos] !== "/") {
-      ++pos;
-    }
-
-    const name = s.substring(start, pos);
-    skipWs();
-    const attrStart = pos;
-
-    while (pos < s.length && (s[pos] !== "?" || s[pos + 1] !== ">")) {
-      ++pos;
-    }
-
-    const value = s.substring(attrStart, pos);
-    return {
-      name,
-      value,
-      parsed: pos - start
-    };
-  }
-
-  parseXml(s) {
-    let i = 0;
-
-    while (i < s.length) {
-      const ch = s[i];
-      let j = i;
-
-      if (ch === "<") {
-        ++j;
-        const ch2 = s[j];
-        let q;
-
-        switch (ch2) {
-          case "/":
-            ++j;
-            q = s.indexOf(">", j);
-
-            if (q < 0) {
-              this.onError(XMLParserErrorCode.UnterminatedElement);
-              return;
-            }
-
-            this.onEndElement(s.substring(j, q));
-            j = q + 1;
-            break;
-
-          case "?":
-            ++j;
-
-            const pi = this._parseProcessingInstruction(s, j);
-
-            if (s.substring(j + pi.parsed, j + pi.parsed + 2) !== "?>") {
-              this.onError(XMLParserErrorCode.UnterminatedXmlDeclaration);
-              return;
-            }
-
-            this.onPi(pi.name, pi.value);
-            j += pi.parsed + 2;
-            break;
-
-          case "!":
-            if (s.substring(j + 1, j + 3) === "--") {
-              q = s.indexOf("-->", j + 3);
-
-              if (q < 0) {
-                this.onError(XMLParserErrorCode.UnterminatedComment);
-                return;
-              }
-
-              this.onComment(s.substring(j + 3, q));
-              j = q + 3;
-            } else if (s.substring(j + 1, j + 8) === "[CDATA[") {
-              q = s.indexOf("]]>", j + 8);
-
-              if (q < 0) {
-                this.onError(XMLParserErrorCode.UnterminatedCdat);
-                return;
-              }
-
-              this.onCdata(s.substring(j + 8, q));
-              j = q + 3;
-            } else if (s.substring(j + 1, j + 8) === "DOCTYPE") {
-              const q2 = s.indexOf("[", j + 8);
-              let complexDoctype = false;
-              q = s.indexOf(">", j + 8);
-
-              if (q < 0) {
-                this.onError(XMLParserErrorCode.UnterminatedDoctypeDeclaration);
-                return;
-              }
-
-              if (q2 > 0 && q > q2) {
-                q = s.indexOf("]>", j + 8);
-
-                if (q < 0) {
-                  this.onError(XMLParserErrorCode.UnterminatedDoctypeDeclaration);
-                  return;
-                }
-
-                complexDoctype = true;
-              }
-
-              const doctypeContent = s.substring(j + 8, q + (complexDoctype ? 1 : 0));
-              this.onDoctype(doctypeContent);
-              j = q + (complexDoctype ? 2 : 1);
-            } else {
-              this.onError(XMLParserErrorCode.MalformedElement);
-              return;
-            }
-
-            break;
-
-          default:
-            const content = this._parseContent(s, j);
-
-            if (content === null) {
-              this.onError(XMLParserErrorCode.MalformedElement);
-              return;
-            }
-
-            let isClosed = false;
-
-            if (s.substring(j + content.parsed, j + content.parsed + 2) === "/>") {
-              isClosed = true;
-            } else if (s.substring(j + content.parsed, j + content.parsed + 1) !== ">") {
-              this.onError(XMLParserErrorCode.UnterminatedElement);
-              return;
-            }
-
-            this.onBeginElement(content.name, content.attributes, isClosed);
-            j += content.parsed + (isClosed ? 2 : 1);
-            break;
-        }
-      } else {
-        while (j < s.length && s[j] !== "<") {
-          j++;
-        }
-
-        const text = s.substring(i, j);
-        this.onText(this._resolveEntities(text));
-      }
-
-      i = j;
-    }
-  }
-
-  onResolveEntity(name) {
-    return `&${name};`;
-  }
-
-  onPi(name, value) {}
-
-  onComment(text) {}
-
-  onCdata(text) {}
-
-  onDoctype(doctypeContent) {}
-
-  onText(text) {}
-
-  onBeginElement(name, attributes, isEmpty) {}
-
-  onEndElement(name) {}
-
-  onError(code) {}
-
-}
-
-class SimpleDOMNode {
-  constructor(nodeName, nodeValue) {
-    this.nodeName = nodeName;
-    this.nodeValue = nodeValue;
-    Object.defineProperty(this, "parentNode", {
-      value: null,
-      writable: true
-    });
-  }
-
-  get firstChild() {
-    return this.childNodes && this.childNodes[0];
-  }
-
-  get nextSibling() {
-    const childNodes = this.parentNode.childNodes;
-
-    if (!childNodes) {
-      return undefined;
-    }
-
-    const index = childNodes.indexOf(this);
+          comObj.postMessage({
+            sourceName,
+            targetName,
+            stream: StreamKind.CANCEL_COMPLETE,
+            streamId,
+            reason: wrapReason(reason)
+          });
+        });
+        this.streamSinks[streamId].sinkCapability.reject(wrapReason(data.reason));
+        this.streamSinks[streamId].isCancelled = true;
+        delete this.streamSinks[streamId];
+        break;
 
-    if (index === -1) {
-      return undefined;
+      default:
+        throw new Error("Unexpected stream case");
     }
+  }
 
-    return childNodes[index + 1];
+  async _deleteStreamController(streamId) {
+    await Promise.allSettled([this.streamControllers[streamId].startCall, 
this.streamControllers[streamId].pullCall, this.streamControllers[streamId].cancelCall].map(function 
(capability) {
+      return capability && capability.promise;
+    }));
+    delete this.streamControllers[streamId];
   }
 
-  get textContent() {
-    if (!this.childNodes) {
-      return this.nodeValue || "";
+  _postMessage(message, transfers) {
+    if (transfers && this.postMessageTransfers) {
+      this.comObj.postMessage(message, transfers);
+    } else {
+      this.comObj.postMessage(message);
     }
-
-    return this.childNodes.map(function (child) {
-      return child.textContent;
-    }).join("");
   }
 
-  hasChildNodes() {
-    return this.childNodes && this.childNodes.length > 0;
+  destroy() {
+    this.comObj.removeEventListener("message", this._onComObjOnMessage);
   }
 
 }
 
-class SimpleXMLParser extends XMLParserBase {
-  constructor() {
-    super();
-    this._currentFragment = null;
-    this._stack = null;
-    this._errorCode = XMLParserErrorCode.NoError;
-  }
-
-  parseFromString(data) {
-    this._currentFragment = [];
-    this._stack = [];
-    this._errorCode = XMLParserErrorCode.NoError;
-    this.parseXml(data);
-
-    if (this._errorCode !== XMLParserErrorCode.NoError) {
-      return undefined;
-    }
-
-    const [documentElement] = this._currentFragment;
-
-    if (!documentElement) {
-      return undefined;
-    }
+exports.MessageHandler = MessageHandler;
 
-    return {
-      documentElement
-    };
-  }
+/***/ }),
+/* 14 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-  onResolveEntity(name) {
-    switch (name) {
-      case "apos":
-        return "'";
-    }
 
-    return super.onResolveEntity(name);
-  }
 
-  onText(text) {
-    if (isWhitespaceString(text)) {
-      return;
-    }
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports.Metadata = void 0;
 
-    const node = new SimpleDOMNode("#text", text);
+var _util = __w_pdfjs_require__(2);
 
-    this._currentFragment.push(node);
+class Metadata {
+  constructor({
+    parsedData,
+    rawData
+  }) {
+    this._metadataMap = parsedData;
+    this._data = rawData;
   }
 
-  onCdata(text) {
-    const node = new SimpleDOMNode("#text", text);
-
-    this._currentFragment.push(node);
+  getRaw() {
+    return this._data;
   }
 
-  onBeginElement(name, attributes, isEmpty) {
-    const node = new SimpleDOMNode(name);
-    node.childNodes = [];
-
-    this._currentFragment.push(node);
-
-    if (isEmpty) {
-      return;
-    }
-
-    this._stack.push(this._currentFragment);
-
-    this._currentFragment = node.childNodes;
+  get(name) {
+    return this._metadataMap.get(name) ?? null;
   }
 
-  onEndElement(name) {
-    this._currentFragment = this._stack.pop() || [];
-    const lastElement = this._currentFragment[this._currentFragment.length - 1];
-
-    if (!lastElement) {
-      return;
-    }
-
-    for (let i = 0, ii = lastElement.childNodes.length; i < ii; i++) {
-      lastElement.childNodes[i].parentNode = lastElement;
-    }
+  getAll() {
+    return (0, _util.objectFromMap)(this._metadataMap);
   }
 
-  onError(code) {
-    this._errorCode = code;
+  has(name) {
+    return this._metadataMap.has(name);
   }
 
 }
 
-exports.SimpleXMLParser = SimpleXMLParser;
+exports.Metadata = Metadata;
 
 /***/ }),
-/* 16 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/* 15 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.OptionalContentConfig = void 0;
 
 var _util = __w_pdfjs_require__(2);
@@ -8430,11 +7888,7 @@ class OptionalContentConfig {
   }
 
   getGroups() {
-    if (!this._groups.size) {
-      return null;
-    }
-
-    return Object.fromEntries(this._groups);
+    return this._groups.size > 0 ? (0, _util.objectFromMap)(this._groups) : null;
   }
 
   getGroup(id) {
@@ -8446,27 +7900,29 @@ class OptionalContentConfig {
 exports.OptionalContentConfig = OptionalContentConfig;
 
 /***/ }),
-/* 17 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/* 16 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.PDFDataTransportStream = void 0;
 
 var _util = __w_pdfjs_require__(2);
 
+var _display_utils = __w_pdfjs_require__(1);
+
 class PDFDataTransportStream {
   constructor(params, pdfDataRangeTransport) {
     (0, _util.assert)(pdfDataRangeTransport, 'PDFDataTransportStream - missing required 
"pdfDataRangeTransport" argument.');
     this._queuedChunks = [];
     this._progressiveDone = params.progressiveDone || false;
+    this._contentDispositionFilename = params.contentDispositionFilename || null;
     const initialData = params.initialData;
 
-    if (initialData && initialData.length > 0) {
+    if (initialData?.length > 0) {
       const buffer = new Uint8Array(initialData).buffer;
 
       this._queuedChunks.push(buffer);
@@ -8531,14 +7987,14 @@ class PDFDataTransportStream {
   }
 
   get _progressiveDataLength() {
-    return this._fullRequestReader ? this._fullRequestReader._loaded : 0;
+    return this._fullRequestReader?._loaded ?? 0;
   }
 
   _onProgress(evt) {
     if (evt.total === undefined) {
       const firstReader = this._rangeReaders[0];
 
-      if (firstReader && firstReader.onProgress) {
+      if (firstReader?.onProgress) {
         firstReader.onProgress({
           loaded: evt.loaded
         });
@@ -8546,7 +8002,7 @@ class PDFDataTransportStream {
     } else {
       const fullReader = this._fullRequestReader;
 
-      if (fullReader && fullReader.onProgress) {
+      if (fullReader?.onProgress) {
         fullReader.onProgress({
           loaded: evt.loaded,
           total: evt.total
@@ -8575,7 +8031,7 @@ class PDFDataTransportStream {
     (0, _util.assert)(!this._fullRequestReader, "PDFDataTransportStream.getFullReader can only be called 
once.");
     const queuedChunks = this._queuedChunks;
     this._queuedChunks = null;
-    return new PDFDataTransportStreamReader(this, queuedChunks, this._progressiveDone);
+    return new PDFDataTransportStreamReader(this, queuedChunks, this._progressiveDone, 
this._contentDispositionFilename);
   }
 
   getRangeReader(begin, end) {
@@ -8611,10 +8067,10 @@ class PDFDataTransportStream {
 exports.PDFDataTransportStream = PDFDataTransportStream;
 
 class PDFDataTransportStreamReader {
-  constructor(stream, queuedChunks, progressiveDone = false) {
+  constructor(stream, queuedChunks, progressiveDone = false, contentDispositionFilename = null) {
     this._stream = stream;
     this._done = progressiveDone || false;
-    this._filename = null;
+    this._filename = (0, _display_utils.isPdfFile)(contentDispositionFilename) ? contentDispositionFilename 
: null;
     this._queuedChunks = queuedChunks || [];
     this._loaded = 0;
 
@@ -8801,15 +8257,14 @@ class PDFDataTransportStreamRangeReader {
 }
 
 /***/ }),
-/* 18 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/* 17 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.WebGLContext = void 0;
 
 var _util = __w_pdfjs_require__(2);
@@ -8857,15 +8312,15 @@ class WebGLContext {
 
 exports.WebGLContext = WebGLContext;
 
-var WebGLUtils = function WebGLUtilsClosure() {
+const WebGLUtils = function WebGLUtilsClosure() {
   function loadShader(gl, code, shaderType) {
-    var shader = gl.createShader(shaderType);
+    const shader = gl.createShader(shaderType);
     gl.shaderSource(shader, code);
     gl.compileShader(shader);
-    var compiled = gl.getShaderParameter(shader, gl.COMPILE_STATUS);
+    const compiled = gl.getShaderParameter(shader, gl.COMPILE_STATUS);
 
     if (!compiled) {
-      var errorMsg = gl.getShaderInfoLog(shader);
+      const errorMsg = gl.getShaderInfoLog(shader);
       throw new Error("Error during shader compilation: " + errorMsg);
     }
 
@@ -8881,17 +8336,17 @@ var WebGLUtils = function WebGLUtilsClosure() {
   }
 
   function createProgram(gl, shaders) {
-    var program = gl.createProgram();
+    const program = gl.createProgram();
 
-    for (var i = 0, ii = shaders.length; i < ii; ++i) {
+    for (let i = 0, ii = shaders.length; i < ii; ++i) {
       gl.attachShader(program, shaders[i]);
     }
 
     gl.linkProgram(program);
-    var linked = gl.getProgramParameter(program, gl.LINK_STATUS);
+    const linked = gl.getProgramParameter(program, gl.LINK_STATUS);
 
     if (!linked) {
-      var errorMsg = gl.getProgramInfoLog(program);
+      const errorMsg = gl.getProgramInfoLog(program);
       throw new Error("Error during program linking: " + errorMsg);
     }
 
@@ -8900,7 +8355,7 @@ var WebGLUtils = function WebGLUtilsClosure() {
 
   function createTexture(gl, image, textureId) {
     gl.activeTexture(textureId);
-    var texture = gl.createTexture();
+    const texture = gl.createTexture();
     gl.bindTexture(gl.TEXTURE_2D, texture);
     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);
@@ -8910,7 +8365,7 @@ var WebGLUtils = function WebGLUtilsClosure() {
     return texture;
   }
 
-  var currentGL, currentCanvas;
+  let currentGL, currentCanvas;
 
   function generateGL() {
     if (currentGL) {
@@ -8923,7 +8378,7 @@ var WebGLUtils = function WebGLUtilsClosure() {
     });
   }
 
-  var smaskVertexShaderCode = "\
+  const smaskVertexShaderCode = "\
   attribute vec2 a_position;                                    \
   attribute vec2 a_texCoord;                                    \
                                                                 \
@@ -8937,7 +8392,7 @@ var WebGLUtils = function WebGLUtilsClosure() {
                                                                 \
     v_texCoord = a_texCoord;                                    \
   }                                                             ";
-  var smaskFragmentShaderCode = "\
+  const smaskFragmentShaderCode = "\
   precision mediump float;                                      \
                                                                 \
   uniform vec4 u_backdrop;                                      \
@@ -8965,30 +8420,29 @@ var WebGLUtils = function WebGLUtilsClosure() {
     imageColor.rgb *= imageColor.a;                             \
     gl_FragColor = imageColor;                                  \
   }                                                             ";
-  var smaskCache = null;
+  let smaskCache = null;
 
   function initSmaskGL() {
-    var canvas, gl;
     generateGL();
-    canvas = currentCanvas;
+    const canvas = currentCanvas;
     currentCanvas = null;
-    gl = currentGL;
+    const gl = currentGL;
     currentGL = null;
-    var vertexShader = createVertexShader(gl, smaskVertexShaderCode);
-    var fragmentShader = createFragmentShader(gl, smaskFragmentShaderCode);
-    var program = createProgram(gl, [vertexShader, fragmentShader]);
+    const vertexShader = createVertexShader(gl, smaskVertexShaderCode);
+    const fragmentShader = createFragmentShader(gl, smaskFragmentShaderCode);
+    const program = createProgram(gl, [vertexShader, fragmentShader]);
     gl.useProgram(program);
-    var cache = {};
+    const 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");
-    var texCoordBuffer = gl.createBuffer();
+    const texCoordLocation = gl.getAttribLocation(program, "a_texCoord");
+    const texLayerLocation = gl.getUniformLocation(program, "u_image");
+    const texMaskLocation = gl.getUniformLocation(program, "u_mask");
+    const 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);
@@ -8999,16 +8453,16 @@ var WebGLUtils = function WebGLUtilsClosure() {
   }
 
   function composeSMask(layer, mask, properties) {
-    var width = layer.width,
-        height = layer.height;
+    const width = layer.width,
+          height = layer.height;
 
     if (!smaskCache) {
       initSmaskGL();
     }
 
-    var cache = smaskCache,
-        canvas = cache.canvas,
-        gl = cache.gl;
+    const cache = smaskCache,
+          canvas = cache.canvas,
+          gl = cache.gl;
     canvas.width = width;
     canvas.height = height;
     gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight);
@@ -9021,9 +8475,9 @@ var WebGLUtils = function WebGLUtilsClosure() {
     }
 
     gl.uniform1i(cache.subtypeLocation, properties.subtype === "Luminosity" ? 1 : 0);
-    var texture = createTexture(gl, layer, gl.TEXTURE0);
-    var maskTexture = createTexture(gl, mask, gl.TEXTURE1);
-    var buffer = gl.createBuffer();
+    const texture = createTexture(gl, layer, gl.TEXTURE0);
+    const maskTexture = createTexture(gl, mask, gl.TEXTURE1);
+    const 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);
@@ -9040,7 +8494,7 @@ var WebGLUtils = function WebGLUtilsClosure() {
     return canvas;
   }
 
-  var figuresVertexShaderCode = "\
+  const figuresVertexShaderCode = "\
   attribute vec2 a_position;                                    \
   attribute vec3 a_color;                                       \
                                                                 \
@@ -9057,7 +8511,7 @@ var WebGLUtils = function WebGLUtilsClosure() {
                                                                 \
     v_color = vec4(a_color / 255.0, 1.0);                       \
   }                                                             ";
-  var figuresFragmentShaderCode = "\
+  const figuresFragmentShaderCode = "\
   precision mediump float;                                      \
                                                                 \
   varying vec4 v_color;                                         \
@@ -9065,20 +8519,19 @@ var WebGLUtils = function WebGLUtilsClosure() {
   void main() {                                                 \
     gl_FragColor = v_color;                                     \
   }                                                             ";
-  var figuresCache = null;
+  let figuresCache = null;
 
   function initFiguresGL() {
-    var canvas, gl;
     generateGL();
-    canvas = currentCanvas;
+    const canvas = currentCanvas;
     currentCanvas = null;
-    gl = currentGL;
+    const gl = currentGL;
     currentGL = null;
-    var vertexShader = createVertexShader(gl, figuresVertexShaderCode);
-    var fragmentShader = createFragmentShader(gl, figuresFragmentShaderCode);
-    var program = createProgram(gl, [vertexShader, fragmentShader]);
+    const vertexShader = createVertexShader(gl, figuresVertexShaderCode);
+    const fragmentShader = createFragmentShader(gl, figuresFragmentShaderCode);
+    const program = createProgram(gl, [vertexShader, fragmentShader]);
     gl.useProgram(program);
-    var cache = {};
+    const cache = {};
     cache.gl = gl;
     cache.canvas = canvas;
     cache.resolutionLocation = gl.getUniformLocation(program, "u_resolution");
@@ -9094,20 +8547,19 @@ var WebGLUtils = function WebGLUtilsClosure() {
       initFiguresGL();
     }
 
-    var cache = figuresCache,
-        canvas = cache.canvas,
-        gl = cache.gl;
+    const 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);
-    var count = 0;
-    var i, ii, rows;
+    let count = 0;
 
-    for (i = 0, ii = figures.length; i < ii; i++) {
+    for (let i = 0, ii = figures.length; i < ii; i++) {
       switch (figures[i].type) {
         case "lattice":
-          rows = figures[i].coords.length / figures[i].verticesPerRow | 0;
+          const rows = figures[i].coords.length / figures[i].verticesPerRow | 0;
           count += (rows - 1) * (figures[i].verticesPerRow - 1) * 6;
           break;
 
@@ -9117,27 +8569,27 @@ var WebGLUtils = function WebGLUtilsClosure() {
       }
     }
 
-    var coords = new Float32Array(count * 2);
-    var colors = new Uint8Array(count * 3);
-    var coordsMap = context.coords,
-        colorsMap = context.colors;
-    var pIndex = 0,
+    const coords = new Float32Array(count * 2);
+    const colors = new Uint8Array(count * 3);
+    const coordsMap = context.coords,
+          colorsMap = context.colors;
+    let pIndex = 0,
         cIndex = 0;
 
-    for (i = 0, ii = figures.length; i < ii; i++) {
-      var figure = figures[i],
-          ps = figure.coords,
-          cs = figure.colors;
+    for (let i = 0, ii = figures.length; i < ii; i++) {
+      const figure = figures[i],
+            ps = figure.coords,
+            cs = figure.colors;
 
       switch (figure.type) {
         case "lattice":
-          var cols = figure.verticesPerRow;
-          rows = ps.length / cols | 0;
+          const cols = figure.verticesPerRow;
+          const rows = ps.length / cols | 0;
 
-          for (var row = 1; row < rows; row++) {
-            var offset = row * cols + 1;
+          for (let row = 1; row < rows; row++) {
+            let offset = row * cols + 1;
 
-            for (var col = 1; col < cols; col++, offset++) {
+            for (let 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]];
@@ -9176,7 +8628,7 @@ var WebGLUtils = function WebGLUtilsClosure() {
           break;
 
         case "triangles":
-          for (var j = 0, jj = ps.length; j < jj; j++) {
+          for (let j = 0, jj = ps.length; j < jj; j++) {
             coords[pIndex] = coordsMap[ps[j]];
             coords[pIndex + 1] = coordsMap[ps[j] + 1];
             colors[cIndex] = colorsMap[cs[j]];
@@ -9197,12 +8649,12 @@ var WebGLUtils = function WebGLUtilsClosure() {
     }
 
     gl.clear(gl.COLOR_BUFFER_BIT);
-    var coordsBuffer = gl.createBuffer();
+    const 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();
+    const colorsBuffer = gl.createBuffer();
     gl.bindBuffer(gl.ARRAY_BUFFER, colorsBuffer);
     gl.bufferData(gl.ARRAY_BUFFER, colors, gl.STATIC_DRAW);
     gl.enableVertexAttribArray(cache.colorLocation);
@@ -9230,12 +8682,12 @@ var WebGLUtils = function WebGLUtilsClosure() {
     drawFigures,
 
     cleanup() {
-      if (smaskCache && smaskCache.canvas) {
+      if (smaskCache?.canvas) {
         smaskCache.canvas.width = 0;
         smaskCache.canvas.height = 0;
       }
 
-      if (figuresCache && figuresCache.canvas) {
+      if (figuresCache?.canvas) {
         figuresCache.canvas.width = 0;
         figuresCache.canvas.height = 0;
       }
@@ -9248,15 +8700,14 @@ var WebGLUtils = function WebGLUtilsClosure() {
 }();
 
 /***/ }),
-/* 19 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/* 18 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.AnnotationLayer = void 0;
 
 var _display_utils = __w_pdfjs_require__(1);
@@ -9265,6 +8716,8 @@ var _util = __w_pdfjs_require__(2);
 
 var _annotation_storage = __w_pdfjs_require__(8);
 
+var _scripting_utils = __w_pdfjs_require__(19);
+
 class AnnotationElementFactory {
   static create(parameters) {
     const subtype = parameters.data.annotationType;
@@ -9351,7 +8804,11 @@ class AnnotationElementFactory {
 }
 
 class AnnotationElement {
-  constructor(parameters, isRenderable = false, ignoreBorder = false) {
+  constructor(parameters, {
+    isRenderable = false,
+    ignoreBorder = false,
+    createQuadrilaterals = false
+  } = {}) {
     this.isRenderable = isRenderable;
     this.data = parameters.data;
     this.layer = parameters.layer;
@@ -9363,10 +8820,17 @@ class AnnotationElement {
     this.renderInteractiveForms = parameters.renderInteractiveForms;
     this.svgFactory = parameters.svgFactory;
     this.annotationStorage = parameters.annotationStorage;
+    this.enableScripting = parameters.enableScripting;
+    this.hasJSActions = parameters.hasJSActions;
+    this._mouseState = parameters.mouseState;
 
     if (isRenderable) {
       this.container = this._createContainer(ignoreBorder);
     }
+
+    if (createQuadrilaterals) {
+      this.quadrilaterals = this._createQuadrilaterals(ignoreBorder);
+    }
   }
 
   _createContainer(ignoreBorder = false) {
@@ -9381,7 +8845,7 @@ class AnnotationElement {
     const rect = _util.Util.normalizeRect([data.rect[0], page.view[3] - data.rect[1] + page.view[1], 
data.rect[2], page.view[3] - data.rect[3] + page.view[1]]);
 
     container.style.transform = `matrix(${viewport.transform.join(",")})`;
-    container.style.transformOrigin = `-${rect[0]}px -${rect[1]}px`;
+    container.style.transformOrigin = `${-rect[0]}px ${-rect[1]}px`;
 
     if (!ignoreBorder && data.borderStyle.width > 0) {
       container.style.borderWidth = `${data.borderStyle.width}px`;
@@ -9425,7 +8889,7 @@ class AnnotationElement {
       }
 
       if (data.color) {
-        container.style.borderColor = _util.Util.makeCssRgb(data.color[0] | 0, data.color[1] | 0, 
data.color[2] | 0);
+        container.style.borderColor = _util.Util.makeHexColor(data.color[0] | 0, data.color[1] | 0, 
data.color[2] | 0);
       } else {
         container.style.borderWidth = 0;
       }
@@ -9438,7 +8902,31 @@ class AnnotationElement {
     return container;
   }
 
-  _createPopup(container, trigger, data) {
+  _createQuadrilaterals(ignoreBorder = false) {
+    if (!this.data.quadPoints) {
+      return null;
+    }
+
+    const quadrilaterals = [];
+    const savedRect = this.data.rect;
+
+    for (const quadPoint of this.data.quadPoints) {
+      this.data.rect = [quadPoint[2].x, quadPoint[2].y, quadPoint[1].x, quadPoint[1].y];
+      quadrilaterals.push(this._createContainer(ignoreBorder));
+    }
+
+    this.data.rect = savedRect;
+    return quadrilaterals;
+  }
+
+  _createPopup(trigger, data) {
+    let container = this.container;
+
+    if (this.quadrilaterals) {
+      trigger = trigger || this.quadrilaterals;
+      container = this.quadrilaterals[0];
+    }
+
     if (!trigger) {
       trigger = document.createElement("div");
       trigger.style.height = container.style.height;
@@ -9460,6 +8948,13 @@ class AnnotationElement {
     container.appendChild(popup);
   }
 
+  _renderQuadrilaterals(className) {
+    this.quadrilaterals.forEach(quadrilateral => {
+      quadrilateral.className = className;
+    });
+    return this.quadrilaterals;
+  }
+
   render() {
     (0, _util.unreachable)("Abstract method `AnnotationElement.render` called");
   }
@@ -9468,12 +8963,14 @@ class AnnotationElement {
 
 class LinkAnnotationElement extends AnnotationElement {
   constructor(parameters) {
-    const isRenderable = !!(parameters.data.url || parameters.data.dest || parameters.data.action);
-    super(parameters, isRenderable);
+    const isRenderable = !!(parameters.data.url || parameters.data.dest || parameters.data.action || 
parameters.data.isTooltipOnly || parameters.data.actions && (parameters.data.actions.Action || 
parameters.data.actions["Mouse Up"] || parameters.data.actions["Mouse Down"]));
+    super(parameters, {
+      isRenderable,
+      createQuadrilaterals: true
+    });
   }
 
   render() {
-    this.container.className = "linkAnnotation";
     const {
       data,
       linkService
@@ -9489,10 +8986,23 @@ class LinkAnnotationElement extends AnnotationElement {
       });
     } else if (data.action) {
       this._bindNamedAction(link, data.action);
-    } else {
+    } else if (data.dest) {
       this._bindLink(link, data.dest);
+    } else if (data.actions && (data.actions.Action || data.actions["Mouse Up"] || data.actions["Mouse 
Down"]) && this.enableScripting && this.hasJSActions) {
+      this._bindJSAction(link, data);
+    } else {
+      this._bindLink(link, "");
+    }
+
+    if (this.quadrilaterals) {
+      return this._renderQuadrilaterals("linkAnnotation").map((quadrilateral, index) => {
+        const linkElement = index === 0 ? link : link.cloneNode();
+        quadrilateral.appendChild(linkElement);
+        return quadrilateral;
+      });
     }
 
+    this.container.className = "linkAnnotation";
     this.container.appendChild(link);
     return this.container;
   }
@@ -9502,13 +9012,13 @@ class LinkAnnotationElement extends AnnotationElement {
 
     link.onclick = () => {
       if (destination) {
-        this.linkService.navigateTo(destination);
+        this.linkService.goToDestination(destination);
       }
 
       return false;
     };
 
-    if (destination) {
+    if (destination || destination === "") {
       link.className = "internalLink";
     }
   }
@@ -9524,12 +9034,40 @@ class LinkAnnotationElement extends AnnotationElement {
     link.className = "internalLink";
   }
 
+  _bindJSAction(link, data) {
+    link.href = this.linkService.getAnchorUrl("");
+    const map = new Map([["Action", "onclick"], ["Mouse Up", "onmouseup"], ["Mouse Down", "onmousedown"]]);
+
+    for (const name of Object.keys(data.actions)) {
+      const jsName = map.get(name);
+
+      if (!jsName) {
+        continue;
+      }
+
+      link[jsName] = () => {
+        this.linkService.eventBus?.dispatch("dispatcheventinsandbox", {
+          source: this,
+          detail: {
+            id: data.id,
+            name
+          }
+        });
+        return false;
+      };
+    }
+
+    link.className = "internalLink";
+  }
+
 }
 
 class TextAnnotationElement extends AnnotationElement {
   constructor(parameters) {
     const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
-    super(parameters, isRenderable);
+    super(parameters, {
+      isRenderable
+    });
   }
 
   render() {
@@ -9545,7 +9083,7 @@ class TextAnnotationElement extends AnnotationElement {
     });
 
     if (!this.data.hasPopup) {
-      this._createPopup(this.container, image, this.data);
+      this._createPopup(image, this.data);
     }
 
     this.container.appendChild(image);
@@ -9556,26 +9094,118 @@ class TextAnnotationElement extends AnnotationElement {
 
 class WidgetAnnotationElement extends AnnotationElement {
   render() {
+    if (this.data.alternativeText) {
+      this.container.title = this.data.alternativeText;
+    }
+
     return this.container;
   }
 
+  _getKeyModifier(event) {
+    return navigator.platform.includes("Win") && event.ctrlKey || navigator.platform.includes("Mac") && 
event.metaKey;
+  }
+
+  _setEventListener(element, baseName, eventName, valueGetter) {
+    if (baseName.includes("mouse")) {
+      element.addEventListener(baseName, event => {
+        this.linkService.eventBus?.dispatch("dispatcheventinsandbox", {
+          source: this,
+          detail: {
+            id: this.data.id,
+            name: eventName,
+            value: valueGetter(event),
+            shift: event.shiftKey,
+            modifier: this._getKeyModifier(event)
+          }
+        });
+      });
+    } else {
+      element.addEventListener(baseName, event => {
+        this.linkService.eventBus?.dispatch("dispatcheventinsandbox", {
+          source: this,
+          detail: {
+            id: this.data.id,
+            name: eventName,
+            value: event.target.checked
+          }
+        });
+      });
+    }
+  }
+
+  _setEventListeners(element, names, getter) {
+    for (const [baseName, eventName] of names) {
+      if (eventName === "Action" || this.data.actions?.[eventName]) {
+        this._setEventListener(element, baseName, eventName, getter);
+      }
+    }
+  }
+
+  _setColor(event) {
+    const {
+      detail,
+      target
+    } = event;
+    const {
+      style
+    } = target;
+
+    for (const name of ["bgColor", "fillColor", "fgColor", "textColor", "borderColor", "strokeColor"]) {
+      let color = detail[name];
+
+      if (!color) {
+        continue;
+      }
+
+      color = _scripting_utils.ColorConverters[`${color[0]}_HTML`](color.slice(1));
+
+      switch (name) {
+        case "bgColor":
+        case "fillColor":
+          style.backgroundColor = color;
+          break;
+
+        case "fgColor":
+        case "textColor":
+          style.color = color;
+          break;
+
+        case "borderColor":
+        case "strokeColor":
+          style.borderColor = color;
+          break;
+      }
+    }
+  }
+
 }
 
 class TextWidgetAnnotationElement extends WidgetAnnotationElement {
   constructor(parameters) {
     const isRenderable = parameters.renderInteractiveForms || !parameters.data.hasAppearance && 
!!parameters.data.fieldValue;
-    super(parameters, isRenderable);
+    super(parameters, {
+      isRenderable
+    });
   }
 
   render() {
-    const TEXT_ALIGNMENT = ["left", "center", "right"];
     const storage = this.annotationStorage;
     const id = this.data.id;
     this.container.className = "textWidgetAnnotation";
     let element = null;
 
     if (this.renderInteractiveForms) {
-      const textContent = storage.getOrCreateValue(id, this.data.fieldValue);
+      const storedData = storage.getValue(id, {
+        value: this.data.fieldValue,
+        valueAsString: this.data.fieldValue
+      });
+      const textContent = storedData.valueAsString || storedData.value || "";
+      const elementData = {
+        userValue: null,
+        formattedValue: null,
+        beforeInputSelectionRange: null,
+        beforeInputValue: null
+      };
 
       if (this.data.multiLine) {
         element = document.createElement("textarea");
@@ -9586,9 +9216,186 @@ class TextWidgetAnnotationElement extends WidgetAnnotationElement {
         element.setAttribute("value", textContent);
       }
 
+      elementData.userValue = textContent;
+      element.setAttribute("id", id);
       element.addEventListener("input", function (event) {
-        storage.setValue(id, event.target.value);
+        storage.setValue(id, {
+          value: event.target.value
+        });
       });
+
+      let blurListener = event => {
+        if (elementData.formattedValue) {
+          event.target.value = elementData.formattedValue;
+        }
+
+        event.target.setSelectionRange(0, 0);
+        elementData.beforeInputSelectionRange = null;
+      };
+
+      if (this.enableScripting && this.hasJSActions) {
+        element.addEventListener("focus", event => {
+          if (elementData.userValue) {
+            event.target.value = elementData.userValue;
+          }
+        });
+        element.addEventListener("updatefromsandbox", event => {
+          const {
+            detail
+          } = event;
+          const actions = {
+            value() {
+              elementData.userValue = detail.value || "";
+              storage.setValue(id, {
+                value: elementData.userValue.toString()
+              });
+
+              if (!elementData.formattedValue) {
+                event.target.value = elementData.userValue;
+              }
+            },
+
+            valueAsString() {
+              elementData.formattedValue = detail.valueAsString || "";
+
+              if (event.target !== document.activeElement) {
+                event.target.value = elementData.formattedValue;
+              }
+
+              storage.setValue(id, {
+                formattedValue: elementData.formattedValue
+              });
+            },
+
+            focus() {
+              setTimeout(() => event.target.focus({
+                preventScroll: false
+              }), 0);
+            },
+
+            userName() {
+              event.target.title = detail.userName;
+            },
+
+            hidden() {
+              event.target.style.visibility = detail.hidden ? "hidden" : "visible";
+              storage.setValue(id, {
+                hidden: detail.hidden
+              });
+            },
+
+            editable() {
+              event.target.disabled = !detail.editable;
+            },
+
+            selRange() {
+              const [selStart, selEnd] = detail.selRange;
+
+              if (selStart >= 0 && selEnd < event.target.value.length) {
+                event.target.setSelectionRange(selStart, selEnd);
+              }
+            }
+
+          };
+          Object.keys(detail).filter(name => name in actions).forEach(name => actions[name]());
+
+          this._setColor(event);
+        });
+        element.addEventListener("keydown", event => {
+          elementData.beforeInputValue = event.target.value;
+          let commitKey = -1;
+
+          if (event.key === "Escape") {
+            commitKey = 0;
+          } else if (event.key === "Enter") {
+            commitKey = 2;
+          } else if (event.key === "Tab") {
+            commitKey = 3;
+          }
+
+          if (commitKey === -1) {
+            return;
+          }
+
+          elementData.userValue = event.target.value;
+          this.linkService.eventBus?.dispatch("dispatcheventinsandbox", {
+            source: this,
+            detail: {
+              id,
+              name: "Keystroke",
+              value: event.target.value,
+              willCommit: true,
+              commitKey,
+              selStart: event.target.selectionStart,
+              selEnd: event.target.selectionEnd
+            }
+          });
+        });
+        const _blurListener = blurListener;
+        blurListener = null;
+        element.addEventListener("blur", event => {
+          if (this._mouseState.isDown) {
+            elementData.userValue = event.target.value;
+            this.linkService.eventBus?.dispatch("dispatcheventinsandbox", {
+              source: this,
+              detail: {
+                id,
+                name: "Keystroke",
+                value: event.target.value,
+                willCommit: true,
+                commitKey: 1,
+                selStart: event.target.selectionStart,
+                selEnd: event.target.selectionEnd
+              }
+            });
+          }
+
+          _blurListener(event);
+        });
+        element.addEventListener("mousedown", event => {
+          elementData.beforeInputValue = event.target.value;
+          elementData.beforeInputSelectionRange = null;
+        });
+        element.addEventListener("keyup", event => {
+          if (event.target.selectionStart === event.target.selectionEnd) {
+            elementData.beforeInputSelectionRange = null;
+          }
+        });
+        element.addEventListener("select", event => {
+          elementData.beforeInputSelectionRange = [event.target.selectionStart, event.target.selectionEnd];
+        });
+
+        if (this.data.actions?.Keystroke) {
+          element.addEventListener("input", event => {
+            let selStart = -1;
+            let selEnd = -1;
+
+            if (elementData.beforeInputSelectionRange) {
+              [selStart, selEnd] = elementData.beforeInputSelectionRange;
+            }
+
+            this.linkService.eventBus?.dispatch("dispatcheventinsandbox", {
+              source: this,
+              detail: {
+                id,
+                name: "Keystroke",
+                value: elementData.beforeInputValue,
+                change: event.data,
+                willCommit: false,
+                selStart,
+                selEnd
+              }
+            });
+          });
+        }
+
+        this._setEventListeners(element, [["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], 
["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], event => 
event.target.value);
+      }
+
+      if (blurListener) {
+        element.addEventListener("blur", blurListener);
+      }
+
       element.disabled = this.data.readOnly;
       element.name = this.data.fieldName;
 
@@ -9607,72 +9414,116 @@ class TextWidgetAnnotationElement extends WidgetAnnotationElement {
       element.textContent = this.data.fieldValue;
       element.style.verticalAlign = "middle";
       element.style.display = "table-cell";
-      let font = null;
-
-      if (this.data.fontRefName && this.page.commonObjs.has(this.data.fontRefName)) {
-        font = this.page.commonObjs.get(this.data.fontRefName);
-      }
-
-      this._setTextStyle(element, font);
     }
 
-    if (this.data.textAlignment !== null) {
-      element.style.textAlign = TEXT_ALIGNMENT[this.data.textAlignment];
-    }
+    this._setTextStyle(element);
 
     this.container.appendChild(element);
     return this.container;
   }
 
-  _setTextStyle(element, font) {
+  _setTextStyle(element) {
+    const TEXT_ALIGNMENT = ["left", "center", "right"];
+    const {
+      fontSize,
+      fontColor
+    } = this.data.defaultAppearanceData;
     const style = element.style;
-    style.fontSize = `${this.data.fontSize}px`;
-    style.direction = this.data.fontDirection < 0 ? "rtl" : "ltr";
 
-    if (!font) {
-      return;
+    if (fontSize) {
+      style.fontSize = `${fontSize}px`;
     }
 
-    let bold = "normal";
+    style.color = _util.Util.makeHexColor(fontColor[0], fontColor[1], fontColor[2]);
 
-    if (font.black) {
-      bold = "900";
-    } else if (font.bold) {
-      bold = "bold";
+    if (this.data.textAlignment !== null) {
+      style.textAlign = TEXT_ALIGNMENT[this.data.textAlignment];
     }
-
-    style.fontWeight = bold;
-    style.fontStyle = font.italic ? "italic" : "normal";
-    const fontFamily = font.loadedName ? `"${font.loadedName}", ` : "";
-    const fallbackName = font.fallbackName || "Helvetica, sans-serif";
-    style.fontFamily = fontFamily + fallbackName;
   }
 
 }
 
 class CheckboxWidgetAnnotationElement extends WidgetAnnotationElement {
   constructor(parameters) {
-    super(parameters, parameters.renderInteractiveForms);
+    super(parameters, {
+      isRenderable: parameters.renderInteractiveForms
+    });
   }
 
   render() {
     const storage = this.annotationStorage;
     const data = this.data;
     const id = data.id;
-    const value = storage.getOrCreateValue(id, data.fieldValue && data.fieldValue !== "Off");
+    const value = storage.getValue(id, {
+      value: data.fieldValue && (data.exportValue && data.exportValue === data.fieldValue || 
!data.exportValue && data.fieldValue !== "Off")
+    }).value;
     this.container.className = "buttonWidgetAnnotation checkBox";
     const element = document.createElement("input");
     element.disabled = data.readOnly;
     element.type = "checkbox";
     element.name = this.data.fieldName;
 
-    if (value) {
-      element.setAttribute("checked", true);
+    if (value) {
+      element.setAttribute("checked", true);
+    }
+
+    element.setAttribute("id", id);
+    element.addEventListener("change", function (event) {
+      const name = event.target.name;
+
+      for (const checkbox of document.getElementsByName(name)) {
+        if (checkbox !== event.target) {
+          checkbox.checked = false;
+          storage.setValue(checkbox.parentNode.getAttribute("data-annotation-id"), {
+            value: false
+          });
+        }
+      }
+
+      storage.setValue(id, {
+        value: event.target.checked
+      });
+    });
+
+    if (this.enableScripting && this.hasJSActions) {
+      element.addEventListener("updatefromsandbox", event => {
+        const {
+          detail
+        } = event;
+        const actions = {
+          value() {
+            event.target.checked = detail.value !== "Off";
+            storage.setValue(id, {
+              value: event.target.checked
+            });
+          },
+
+          focus() {
+            setTimeout(() => event.target.focus({
+              preventScroll: false
+            }), 0);
+          },
+
+          hidden() {
+            event.target.style.visibility = detail.hidden ? "hidden" : "visible";
+            storage.setValue(id, {
+              hidden: detail.hidden
+            });
+          },
+
+          editable() {
+            event.target.disabled = !detail.editable;
+          }
+
+        };
+        Object.keys(detail).filter(name => name in actions).forEach(name => actions[name]());
+
+        this._setColor(event);
+      });
+
+      this._setEventListeners(element, [["change", "Validate"], ["change", "Action"], ["focus", "Focus"], 
["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], 
["mouseup", "Mouse Up"]], event => event.target.checked);
     }
 
-    element.addEventListener("change", function (event) {
-      storage.setValue(id, event.target.checked);
-    });
     this.container.appendChild(element);
     return this.container;
   }
@@ -9681,7 +9532,9 @@ class CheckboxWidgetAnnotationElement extends WidgetAnnotationElement {
 
 class RadioButtonWidgetAnnotationElement extends WidgetAnnotationElement {
   constructor(parameters) {
-    super(parameters, parameters.renderInteractiveForms);
+    super(parameters, {
+      isRenderable: parameters.renderInteractiveForms
+    });
   }
 
   render() {
@@ -9689,7 +9542,9 @@ class RadioButtonWidgetAnnotationElement extends WidgetAnnotationElement {
     const storage = this.annotationStorage;
     const data = this.data;
     const id = data.id;
-    const value = storage.getOrCreateValue(id, data.fieldValue === data.buttonValue);
+    const value = storage.getValue(id, {
+      value: data.fieldValue === data.buttonValue
+    }).value;
     const element = document.createElement("input");
     element.disabled = data.readOnly;
     element.type = "radio";
@@ -9699,17 +9554,70 @@ class RadioButtonWidgetAnnotationElement extends WidgetAnnotationElement {
       element.setAttribute("checked", true);
     }
 
+    element.setAttribute("id", id);
     element.addEventListener("change", function (event) {
-      const name = event.target.name;
+      const {
+        target
+      } = event;
 
-      for (const radio of document.getElementsByName(name)) {
-        if (radio !== event.target) {
-          storage.setValue(radio.parentNode.getAttribute("data-annotation-id"), false);
+      for (const radio of document.getElementsByName(target.name)) {
+        if (radio !== target) {
+          storage.setValue(radio.getAttribute("id"), {
+            value: false
+          });
         }
       }
 
-      storage.setValue(id, event.target.checked);
+      storage.setValue(id, {
+        value: target.checked
+      });
     });
+
+    if (this.enableScripting && this.hasJSActions) {
+      const pdfButtonValue = data.buttonValue;
+      element.addEventListener("updatefromsandbox", event => {
+        const {
+          detail
+        } = event;
+        const actions = {
+          value() {
+            const checked = pdfButtonValue === detail.value;
+
+            for (const radio of document.getElementsByName(event.target.name)) {
+              const radioId = radio.getAttribute("id");
+              radio.checked = radioId === id && checked;
+              storage.setValue(radioId, {
+                value: radio.checked
+              });
+            }
+          },
+
+          focus() {
+            setTimeout(() => event.target.focus({
+              preventScroll: false
+            }), 0);
+          },
+
+          hidden() {
+            event.target.style.visibility = detail.hidden ? "hidden" : "visible";
+            storage.setValue(id, {
+              hidden: detail.hidden
+            });
+          },
+
+          editable() {
+            event.target.disabled = !detail.editable;
+          }
+
+        };
+        Object.keys(detail).filter(name => name in actions).forEach(name => actions[name]());
+
+        this._setColor(event);
+      });
+
+      this._setEventListeners(element, [["change", "Validate"], ["change", "Action"], ["focus", "Focus"], 
["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], 
["mouseup", "Mouse Up"]], event => event.target.checked);
+    }
+
     this.container.appendChild(element);
     return this.container;
   }
@@ -9720,6 +9628,11 @@ class PushButtonWidgetAnnotationElement extends LinkAnnotationElement {
   render() {
     const container = super.render();
     container.className = "buttonWidgetAnnotation pushButton";
+
+    if (this.data.alternativeText) {
+      container.title = this.data.alternativeText;
+    }
+
     return container;
   }
 
@@ -9727,17 +9640,22 @@ class PushButtonWidgetAnnotationElement extends LinkAnnotationElement {
 
 class ChoiceWidgetAnnotationElement extends WidgetAnnotationElement {
   constructor(parameters) {
-    super(parameters, parameters.renderInteractiveForms);
+    super(parameters, {
+      isRenderable: parameters.renderInteractiveForms
+    });
   }
 
   render() {
     this.container.className = "choiceWidgetAnnotation";
     const storage = this.annotationStorage;
     const id = this.data.id;
-    storage.getOrCreateValue(id, this.data.fieldValue.length > 0 ? this.data.fieldValue[0] : null);
+    storage.getValue(id, {
+      value: this.data.fieldValue.length > 0 ? this.data.fieldValue[0] : undefined
+    });
     const selectElement = document.createElement("select");
     selectElement.disabled = this.data.readOnly;
     selectElement.name = this.data.fieldName;
+    selectElement.setAttribute("id", id);
 
     if (!this.data.combo) {
       selectElement.size = this.data.options.length;
@@ -9759,11 +9677,188 @@ class ChoiceWidgetAnnotationElement extends WidgetAnnotationElement {
       selectElement.appendChild(optionElement);
     }
 
-    selectElement.addEventListener("input", function (event) {
+    const getValue = (event, isExport) => {
+      const name = isExport ? "value" : "textContent";
       const options = event.target.options;
-      const value = options[options.selectedIndex].value;
-      storage.setValue(id, value);
-    });
+
+      if (!event.target.multiple) {
+        return options.selectedIndex === -1 ? null : options[options.selectedIndex][name];
+      }
+
+      return Array.prototype.filter.call(options, option => option.selected).map(option => option[name]);
+    };
+
+    const getItems = event => {
+      const options = event.target.options;
+      return Array.prototype.map.call(options, option => {
+        return {
+          displayValue: option.textContent,
+          exportValue: option.value
+        };
+      });
+    };
+
+    if (this.enableScripting && this.hasJSActions) {
+      selectElement.addEventListener("updatefromsandbox", event => {
+        const {
+          detail
+        } = event;
+        const actions = {
+          value() {
+            const options = selectElement.options;
+            const value = detail.value;
+            const values = new Set(Array.isArray(value) ? value : [value]);
+            Array.prototype.forEach.call(options, option => {
+              option.selected = values.has(option.value);
+            });
+            storage.setValue(id, {
+              value: getValue(event, true)
+            });
+          },
+
+          multipleSelection() {
+            selectElement.multiple = true;
+          },
+
+          remove() {
+            const options = selectElement.options;
+            const index = detail.remove;
+            options[index].selected = false;
+            selectElement.remove(index);
+
+            if (options.length > 0) {
+              const i = Array.prototype.findIndex.call(options, option => option.selected);
+
+              if (i === -1) {
+                options[0].selected = true;
+              }
+            }
+
+            storage.setValue(id, {
+              value: getValue(event, true),
+              items: getItems(event)
+            });
+          },
+
+          clear() {
+            while (selectElement.length !== 0) {
+              selectElement.remove(0);
+            }
+
+            storage.setValue(id, {
+              value: null,
+              items: []
+            });
+          },
+
+          insert() {
+            const {
+              index,
+              displayValue,
+              exportValue
+            } = detail.insert;
+            const optionElement = document.createElement("option");
+            optionElement.textContent = displayValue;
+            optionElement.value = exportValue;
+            selectElement.insertBefore(optionElement, selectElement.children[index]);
+            storage.setValue(id, {
+              value: getValue(event, true),
+              items: getItems(event)
+            });
+          },
+
+          items() {
+            const {
+              items
+            } = detail;
+
+            while (selectElement.length !== 0) {
+              selectElement.remove(0);
+            }
+
+            for (const item of items) {
+              const {
+                displayValue,
+                exportValue
+              } = item;
+              const optionElement = document.createElement("option");
+              optionElement.textContent = displayValue;
+              optionElement.value = exportValue;
+              selectElement.appendChild(optionElement);
+            }
+
+            if (selectElement.options.length > 0) {
+              selectElement.options[0].selected = true;
+            }
+
+            storage.setValue(id, {
+              value: getValue(event, true),
+              items: getItems(event)
+            });
+          },
+
+          indices() {
+            const indices = new Set(detail.indices);
+            const options = event.target.options;
+            Array.prototype.forEach.call(options, (option, i) => {
+              option.selected = indices.has(i);
+            });
+            storage.setValue(id, {
+              value: getValue(event, true)
+            });
+          },
+
+          focus() {
+            setTimeout(() => event.target.focus({
+              preventScroll: false
+            }), 0);
+          },
+
+          hidden() {
+            event.target.style.visibility = detail.hidden ? "hidden" : "visible";
+            storage.setValue(id, {
+              hidden: detail.hidden
+            });
+          },
+
+          editable() {
+            event.target.disabled = !detail.editable;
+          }
+
+        };
+        Object.keys(detail).filter(name => name in actions).forEach(name => actions[name]());
+
+        this._setColor(event);
+      });
+      selectElement.addEventListener("input", event => {
+        const exportValue = getValue(event, true);
+        const value = getValue(event, false);
+        storage.setValue(id, {
+          value: exportValue
+        });
+        this.linkService.eventBus?.dispatch("dispatcheventinsandbox", {
+          source: this,
+          detail: {
+            id,
+            name: "Keystroke",
+            value,
+            changeEx: exportValue,
+            willCommit: true,
+            commitKey: 1,
+            keyDown: false
+          }
+        });
+      });
+
+      this._setEventListeners(selectElement, [["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse 
Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"], ["input", 
"Action"]], event => event.target.checked);
+    } else {
+      selectElement.addEventListener("input", function (event) {
+        storage.setValue(id, {
+          value: getValue(event)
+        });
+      });
+    }
+
     this.container.appendChild(selectElement);
     return this.container;
   }
@@ -9773,7 +9868,9 @@ class ChoiceWidgetAnnotationElement extends WidgetAnnotationElement {
 class PopupAnnotationElement extends AnnotationElement {
   constructor(parameters) {
     const isRenderable = !!(parameters.data.title || parameters.data.contents);
-    super(parameters, isRenderable);
+    super(parameters, {
+      isRenderable
+    });
   }
 
   render() {
@@ -9785,24 +9882,29 @@ class PopupAnnotationElement extends AnnotationElement {
     }
 
     const selector = `[data-annotation-id="${this.data.parentId}"]`;
-    const parentElement = this.layer.querySelector(selector);
+    const parentElements = this.layer.querySelectorAll(selector);
 
-    if (!parentElement) {
+    if (parentElements.length === 0) {
       return this.container;
     }
 
     const popup = new PopupElement({
       container: this.container,
-      trigger: parentElement,
+      trigger: Array.from(parentElements),
       color: this.data.color,
       title: this.data.title,
       modificationDate: this.data.modificationDate,
       contents: this.data.contents
     });
-    const parentLeft = parseFloat(parentElement.style.left);
-    const parentWidth = parseFloat(parentElement.style.width);
-    this.container.style.transformOrigin = `-${parentLeft + parentWidth}px -${parentElement.style.top}`;
-    this.container.style.left = `${parentLeft + parentWidth}px`;
+    const page = this.page;
+
+    const rect = _util.Util.normalizeRect([this.data.parentRect[0], page.view[3] - this.data.parentRect[1] + 
page.view[1], this.data.parentRect[2], page.view[3] - this.data.parentRect[3] + page.view[1]]);
+
+    const popupLeft = rect[0] + this.data.parentRect[2] - this.data.parentRect[0];
+    const popupTop = rect[1];
+    this.container.style.transformOrigin = `${-popupLeft}px ${-popupTop}px`;
+    this.container.style.left = `${popupLeft}px`;
+    this.container.style.top = `${popupTop}px`;
     this.container.appendChild(popup.render());
     return this.container;
   }
@@ -9826,7 +9928,7 @@ class PopupElement {
     const wrapper = document.createElement("div");
     wrapper.className = "popupWrapper";
     this.hideElement = this.hideWrapper ? wrapper : this.container;
-    this.hideElement.setAttribute("hidden", true);
+    this.hideElement.hidden = true;
     const popup = document.createElement("div");
     popup.className = "popup";
     const color = this.color;
@@ -9835,7 +9937,7 @@ class PopupElement {
       const r = BACKGROUND_ENLIGHT * (255 - color[0]) + color[0];
       const g = BACKGROUND_ENLIGHT * (255 - color[1]) + color[1];
       const b = BACKGROUND_ENLIGHT * (255 - color[2]) + color[2];
-      popup.style.backgroundColor = _util.Util.makeCssRgb(r | 0, g | 0, b | 0);
+      popup.style.backgroundColor = _util.Util.makeHexColor(r | 0, g | 0, b | 0);
     }
 
     const title = document.createElement("h1");
@@ -9858,9 +9960,16 @@ class PopupElement {
     const contents = this._formatContents(this.contents);
 
     popup.appendChild(contents);
-    this.trigger.addEventListener("click", this._toggle.bind(this));
-    this.trigger.addEventListener("mouseover", this._show.bind(this, false));
-    this.trigger.addEventListener("mouseout", this._hide.bind(this, false));
+
+    if (!Array.isArray(this.trigger)) {
+      this.trigger = [this.trigger];
+    }
+
+    this.trigger.forEach(element => {
+      element.addEventListener("click", this._toggle.bind(this));
+      element.addEventListener("mouseover", this._show.bind(this, false));
+      element.addEventListener("mouseout", this._hide.bind(this, false));
+    });
     popup.addEventListener("click", this._hide.bind(this, true));
     wrapper.appendChild(popup);
     return wrapper;
@@ -9895,8 +10004,8 @@ class PopupElement {
       this.pinned = true;
     }
 
-    if (this.hideElement.hasAttribute("hidden")) {
-      this.hideElement.removeAttribute("hidden");
+    if (this.hideElement.hidden) {
+      this.hideElement.hidden = false;
       this.container.style.zIndex += 1;
     }
   }
@@ -9906,8 +10015,8 @@ class PopupElement {
       this.pinned = false;
     }
 
-    if (!this.hideElement.hasAttribute("hidden") && !this.pinned) {
-      this.hideElement.setAttribute("hidden", true);
+    if (!this.hideElement.hidden && !this.pinned) {
+      this.hideElement.hidden = true;
       this.container.style.zIndex -= 1;
     }
   }
@@ -9917,14 +10026,17 @@ class PopupElement {
 class FreeTextAnnotationElement extends AnnotationElement {
   constructor(parameters) {
     const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
-    super(parameters, isRenderable, true);
+    super(parameters, {
+      isRenderable,
+      ignoreBorder: true
+    });
   }
 
   render() {
     this.container.className = "freeTextAnnotation";
 
     if (!this.data.hasPopup) {
-      this._createPopup(this.container, null, this.data);
+      this._createPopup(null, this.data);
     }
 
     return this.container;
@@ -9935,7 +10047,10 @@ class FreeTextAnnotationElement extends AnnotationElement {
 class LineAnnotationElement extends AnnotationElement {
   constructor(parameters) {
     const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
-    super(parameters, isRenderable, true);
+    super(parameters, {
+      isRenderable,
+      ignoreBorder: true
+    });
   }
 
   render() {
@@ -9954,7 +10069,7 @@ class LineAnnotationElement extends AnnotationElement {
     svg.appendChild(line);
     this.container.append(svg);
 
-    this._createPopup(this.container, line, data);
+    this._createPopup(line, data);
 
     return this.container;
   }
@@ -9964,7 +10079,10 @@ class LineAnnotationElement extends AnnotationElement {
 class SquareAnnotationElement extends AnnotationElement {
   constructor(parameters) {
     const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
-    super(parameters, isRenderable, true);
+    super(parameters, {
+      isRenderable,
+      ignoreBorder: true
+    });
   }
 
   render() {
@@ -9985,7 +10103,7 @@ class SquareAnnotationElement extends AnnotationElement {
     svg.appendChild(square);
     this.container.append(svg);
 
-    this._createPopup(this.container, square, data);
+    this._createPopup(square, data);
 
     return this.container;
   }
@@ -9995,7 +10113,10 @@ class SquareAnnotationElement extends AnnotationElement {
 class CircleAnnotationElement extends AnnotationElement {
   constructor(parameters) {
     const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
-    super(parameters, isRenderable, true);
+    super(parameters, {
+      isRenderable,
+      ignoreBorder: true
+    });
   }
 
   render() {
@@ -10016,7 +10137,7 @@ class CircleAnnotationElement extends AnnotationElement {
     svg.appendChild(circle);
     this.container.append(svg);
 
-    this._createPopup(this.container, circle, data);
+    this._createPopup(circle, data);
 
     return this.container;
   }
@@ -10026,7 +10147,10 @@ class CircleAnnotationElement extends AnnotationElement {
 class PolylineAnnotationElement extends AnnotationElement {
   constructor(parameters) {
     const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
-    super(parameters, isRenderable, true);
+    super(parameters, {
+      isRenderable,
+      ignoreBorder: true
+    });
     this.containerClassName = "polylineAnnotation";
     this.svgElementName = "svg:polyline";
   }
@@ -10054,7 +10178,7 @@ class PolylineAnnotationElement extends AnnotationElement {
     svg.appendChild(polyline);
     this.container.append(svg);
 
-    this._createPopup(this.container, polyline, data);
+    this._createPopup(polyline, data);
 
     return this.container;
   }
@@ -10073,14 +10197,17 @@ class PolygonAnnotationElement extends PolylineAnnotationElement {
 class CaretAnnotationElement extends AnnotationElement {
   constructor(parameters) {
     const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
-    super(parameters, isRenderable, true);
+    super(parameters, {
+      isRenderable,
+      ignoreBorder: true
+    });
   }
 
   render() {
     this.container.className = "caretAnnotation";
 
     if (!this.data.hasPopup) {
-      this._createPopup(this.container, null, this.data);
+      this._createPopup(null, this.data);
     }
 
     return this.container;
@@ -10091,7 +10218,10 @@ class CaretAnnotationElement extends AnnotationElement {
 class InkAnnotationElement extends AnnotationElement {
   constructor(parameters) {
     const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
-    super(parameters, isRenderable, true);
+    super(parameters, {
+      isRenderable,
+      ignoreBorder: true
+    });
     this.containerClassName = "inkAnnotation";
     this.svgElementName = "svg:polyline";
   }
@@ -10119,7 +10249,7 @@ class InkAnnotationElement extends AnnotationElement {
       polyline.setAttribute("stroke", "transparent");
       polyline.setAttribute("fill", "none");
 
-      this._createPopup(this.container, polyline, data);
+      this._createPopup(polyline, data);
 
       svg.appendChild(polyline);
     }
@@ -10133,16 +10263,23 @@ class InkAnnotationElement extends AnnotationElement {
 class HighlightAnnotationElement extends AnnotationElement {
   constructor(parameters) {
     const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
-    super(parameters, isRenderable, true);
+    super(parameters, {
+      isRenderable,
+      ignoreBorder: true,
+      createQuadrilaterals: true
+    });
   }
 
   render() {
-    this.container.className = "highlightAnnotation";
-
     if (!this.data.hasPopup) {
-      this._createPopup(this.container, null, this.data);
+      this._createPopup(null, this.data);
+    }
+
+    if (this.quadrilaterals) {
+      return this._renderQuadrilaterals("highlightAnnotation");
     }
 
+    this.container.className = "highlightAnnotation";
     return this.container;
   }
 
@@ -10151,16 +10288,23 @@ class HighlightAnnotationElement extends AnnotationElement {
 class UnderlineAnnotationElement extends AnnotationElement {
   constructor(parameters) {
     const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
-    super(parameters, isRenderable, true);
+    super(parameters, {
+      isRenderable,
+      ignoreBorder: true,
+      createQuadrilaterals: true
+    });
   }
 
   render() {
-    this.container.className = "underlineAnnotation";
-
     if (!this.data.hasPopup) {
-      this._createPopup(this.container, null, this.data);
+      this._createPopup(null, this.data);
+    }
+
+    if (this.quadrilaterals) {
+      return this._renderQuadrilaterals("underlineAnnotation");
     }
 
+    this.container.className = "underlineAnnotation";
     return this.container;
   }
 
@@ -10169,16 +10313,23 @@ class UnderlineAnnotationElement extends AnnotationElement {
 class SquigglyAnnotationElement extends AnnotationElement {
   constructor(parameters) {
     const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
-    super(parameters, isRenderable, true);
+    super(parameters, {
+      isRenderable,
+      ignoreBorder: true,
+      createQuadrilaterals: true
+    });
   }
 
   render() {
-    this.container.className = "squigglyAnnotation";
-
     if (!this.data.hasPopup) {
-      this._createPopup(this.container, null, this.data);
+      this._createPopup(null, this.data);
+    }
+
+    if (this.quadrilaterals) {
+      return this._renderQuadrilaterals("squigglyAnnotation");
     }
 
+    this.container.className = "squigglyAnnotation";
     return this.container;
   }
 
@@ -10187,16 +10338,23 @@ class SquigglyAnnotationElement extends AnnotationElement {
 class StrikeOutAnnotationElement extends AnnotationElement {
   constructor(parameters) {
     const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
-    super(parameters, isRenderable, true);
+    super(parameters, {
+      isRenderable,
+      ignoreBorder: true,
+      createQuadrilaterals: true
+    });
   }
 
   render() {
-    this.container.className = "strikeoutAnnotation";
-
     if (!this.data.hasPopup) {
-      this._createPopup(this.container, null, this.data);
+      this._createPopup(null, this.data);
+    }
+
+    if (this.quadrilaterals) {
+      return this._renderQuadrilaterals("strikeoutAnnotation");
     }
 
+    this.container.className = "strikeoutAnnotation";
     return this.container;
   }
 
@@ -10205,14 +10363,17 @@ class StrikeOutAnnotationElement extends AnnotationElement {
 class StampAnnotationElement extends AnnotationElement {
   constructor(parameters) {
     const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
-    super(parameters, isRenderable, true);
+    super(parameters, {
+      isRenderable,
+      ignoreBorder: true
+    });
   }
 
   render() {
     this.container.className = "stampAnnotation";
 
     if (!this.data.hasPopup) {
-      this._createPopup(this.container, null, this.data);
+      this._createPopup(null, this.data);
     }
 
     return this.container;
@@ -10222,22 +10383,21 @@ class StampAnnotationElement extends AnnotationElement {
 
 class FileAttachmentAnnotationElement extends AnnotationElement {
   constructor(parameters) {
-    super(parameters, true);
+    super(parameters, {
+      isRenderable: true
+    });
     const {
       filename,
       content
     } = this.data.file;
     this.filename = (0, _display_utils.getFilenameFromUrl)(filename);
     this.content = content;
-
-    if (this.linkService.eventBus) {
-      this.linkService.eventBus.dispatch("fileattachmentannotation", {
-        source: this,
-        id: (0, _util.stringToPDFString)(filename),
-        filename,
-        content
-      });
-    }
+    this.linkService.eventBus?.dispatch("fileattachmentannotation", {
+      source: this,
+      id: (0, _util.stringToPDFString)(filename),
+      filename,
+      content
+    });
   }
 
   render() {
@@ -10248,7 +10408,7 @@ class FileAttachmentAnnotationElement extends AnnotationElement {
     trigger.addEventListener("dblclick", this._download.bind(this));
 
     if (!this.data.hasPopup && (this.data.title || this.data.contents)) {
-      this._createPopup(this.container, trigger, this.data);
+      this._createPopup(trigger, this.data);
     }
 
     this.container.appendChild(trigger);
@@ -10256,12 +10416,7 @@ class FileAttachmentAnnotationElement extends AnnotationElement {
   }
 
   _download() {
-    if (!this.downloadManager) {
-      (0, _util.warn)("Download cannot be started due to unavailable download manager");
-      return;
-    }
-
-    this.downloadManager.downloadData(this.content, this.filename, "");
+    this.downloadManager?.openOrDownloadData(this.container, this.content, this.filename);
   }
 
 }
@@ -10297,58 +10452,210 @@ class AnnotationLayer {
         linkService: parameters.linkService,
         downloadManager: parameters.downloadManager,
         imageResourcesPath: parameters.imageResourcesPath || "",
-        renderInteractiveForms: typeof parameters.renderInteractiveForms === "boolean" ? 
parameters.renderInteractiveForms : true,
+        renderInteractiveForms: parameters.renderInteractiveForms !== false,
         svgFactory: new _display_utils.DOMSVGFactory(),
-        annotationStorage: parameters.annotationStorage || new _annotation_storage.AnnotationStorage()
+        annotationStorage: parameters.annotationStorage || new _annotation_storage.AnnotationStorage(),
+        enableScripting: parameters.enableScripting,
+        hasJSActions: parameters.hasJSActions,
+        mouseState: parameters.mouseState || {
+          isDown: false
+        }
       });
 
       if (element.isRenderable) {
-        parameters.div.appendChild(element.render());
+        const rendered = element.render();
+
+        if (data.hidden) {
+          rendered.style.visibility = "hidden";
+        }
+
+        if (Array.isArray(rendered)) {
+          for (const renderedElement of rendered) {
+            parameters.div.appendChild(renderedElement);
+          }
+        } else {
+          if (element instanceof PopupAnnotationElement) {
+            parameters.div.prepend(rendered);
+          } else {
+            parameters.div.appendChild(rendered);
+          }
+        }
       }
     }
   }
 
   static update(parameters) {
+    const transform = `matrix(${parameters.viewport.transform.join(",")})`;
+
     for (const data of parameters.annotations) {
-      const element = parameters.div.querySelector(`[data-annotation-id="${data.id}"]`);
+      const elements = parameters.div.querySelectorAll(`[data-annotation-id="${data.id}"]`);
 
-      if (element) {
-        element.style.transform = `matrix(${parameters.viewport.transform.join(",")})`;
+      if (elements) {
+        elements.forEach(element => {
+          element.style.transform = transform;
+        });
       }
     }
 
-    parameters.div.removeAttribute("hidden");
+    parameters.div.hidden = false;
   }
 
 }
 
 exports.AnnotationLayer = AnnotationLayer;
 
+/***/ }),
+/* 19 */
+/***/ ((__unused_webpack_module, exports) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports.ColorConverters = void 0;
+
+function makeColorComp(n) {
+  return Math.floor(Math.max(0, Math.min(1, n)) * 255).toString(16).padStart(2, "0");
+}
+
+class ColorConverters {
+  static CMYK_G([c, y, m, k]) {
+    return ["G", 1 - Math.min(1, 0.3 * c + 0.59 * m + 0.11 * y + k)];
+  }
+
+  static G_CMYK([g]) {
+    return ["CMYK", 0, 0, 0, 1 - g];
+  }
+
+  static G_RGB([g]) {
+    return ["RGB", g, g, g];
+  }
+
+  static G_HTML([g]) {
+    const G = makeColorComp(g);
+    return `#${G}${G}${G}`;
+  }
+
+  static RGB_G([r, g, b]) {
+    return ["G", 0.3 * r + 0.59 * g + 0.11 * b];
+  }
+
+  static RGB_HTML([r, g, b]) {
+    const R = makeColorComp(r);
+    const G = makeColorComp(g);
+    const B = makeColorComp(b);
+    return `#${R}${G}${B}`;
+  }
+
+  static T_HTML() {
+    return "#00000000";
+  }
+
+  static CMYK_RGB([c, y, m, k]) {
+    return ["RGB", 1 - Math.min(1, c + k), 1 - Math.min(1, m + k), 1 - Math.min(1, y + k)];
+  }
+
+  static CMYK_HTML(components) {
+    return this.RGB_HTML(this.CMYK_RGB(components));
+  }
+
+  static RGB_CMYK([r, g, b]) {
+    const c = 1 - r;
+    const m = 1 - g;
+    const y = 1 - b;
+    const k = Math.min(c, m, y);
+    return ["CMYK", c, m, y, k];
+  }
+
+}
+
+exports.ColorConverters = ColorConverters;
+
 /***/ }),
 /* 20 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.renderTextLayer = void 0;
 
 var _util = __w_pdfjs_require__(2);
 
-var renderTextLayer = function renderTextLayerClosure() {
-  var MAX_TEXT_DIVS_TO_RENDER = 100000;
-  var NonWhitespaceRegexp = /\S/;
+const renderTextLayer = function renderTextLayerClosure() {
+  const MAX_TEXT_DIVS_TO_RENDER = 100000;
+  const DEFAULT_FONT_SIZE = 30;
+  const DEFAULT_FONT_ASCENT = 0.8;
+  const ascentCache = new Map();
+  const NonWhitespaceRegexp = /\S/;
 
   function isAllWhitespace(str) {
     return !NonWhitespaceRegexp.test(str);
   }
 
-  function appendText(task, geom, styles) {
-    var textDiv = document.createElement("span");
-    var textDivProperties = {
+  function getAscent(fontFamily, ctx) {
+    const cachedAscent = ascentCache.get(fontFamily);
+
+    if (cachedAscent) {
+      return cachedAscent;
+    }
+
+    ctx.save();
+    ctx.font = `${DEFAULT_FONT_SIZE}px ${fontFamily}`;
+    const metrics = ctx.measureText("");
+    let ascent = metrics.fontBoundingBoxAscent;
+    let descent = Math.abs(metrics.fontBoundingBoxDescent);
+
+    if (ascent) {
+      ctx.restore();
+      const ratio = ascent / (ascent + descent);
+      ascentCache.set(fontFamily, ratio);
+      return ratio;
+    }
+
+    ctx.strokeStyle = "red";
+    ctx.clearRect(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE);
+    ctx.strokeText("g", 0, 0);
+    let pixels = ctx.getImageData(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE).data;
+    descent = 0;
+
+    for (let i = pixels.length - 1 - 3; i >= 0; i -= 4) {
+      if (pixels[i] > 0) {
+        descent = Math.ceil(i / 4 / DEFAULT_FONT_SIZE);
+        break;
+      }
+    }
+
+    ctx.clearRect(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE);
+    ctx.strokeText("A", 0, DEFAULT_FONT_SIZE);
+    pixels = ctx.getImageData(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE).data;
+    ascent = 0;
+
+    for (let i = 0, ii = pixels.length; i < ii; i += 4) {
+      if (pixels[i] > 0) {
+        ascent = DEFAULT_FONT_SIZE - Math.floor(i / 4 / DEFAULT_FONT_SIZE);
+        break;
+      }
+    }
+
+    ctx.restore();
+
+    if (ascent) {
+      const ratio = ascent / (ascent + descent);
+      ascentCache.set(fontFamily, ratio);
+      return ratio;
+    }
+
+    ascentCache.set(fontFamily, DEFAULT_FONT_ASCENT);
+    return DEFAULT_FONT_ASCENT;
+  }
+
+  function appendText(task, geom, styles, ctx) {
+    const textDiv = document.createElement("span");
+    const textDivProperties = {
       angle: 0,
       canvasWidth: 0,
       isWhitespace: false,
@@ -10370,24 +10677,17 @@ var renderTextLayer = function renderTextLayerClosure() {
       return;
     }
 
-    var tx = _util.Util.transform(task._viewport.transform, geom.transform);
+    const tx = _util.Util.transform(task._viewport.transform, geom.transform);
 
-    var angle = Math.atan2(tx[1], tx[0]);
-    var style = styles[geom.fontName];
+    let angle = Math.atan2(tx[1], tx[0]);
+    const style = styles[geom.fontName];
 
     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;
-    }
-
+    const fontHeight = Math.hypot(tx[2], tx[3]);
+    const fontAscent = fontHeight * getAscent(style.fontFamily, ctx);
     let left, top;
 
     if (angle === 0) {
@@ -10403,6 +10703,7 @@ var renderTextLayer = function renderTextLayerClosure() {
     textDiv.style.fontSize = `${fontHeight}px`;
     textDiv.style.fontFamily = style.fontFamily;
     textDiv.textContent = geom.str;
+    textDiv.dir = geom.dir;
 
     if (task._fontInspectorEnabled) {
       textDiv.dataset.fontName = geom.fontName;
@@ -10440,7 +10741,7 @@ var renderTextLayer = function renderTextLayerClosure() {
     }
 
     if (task._enhanceTextSelection) {
-      var angleCos = 1,
+      let angleCos = 1,
           angleSin = 0;
 
       if (angle !== 0) {
@@ -10448,9 +10749,9 @@ var renderTextLayer = function renderTextLayerClosure() {
         angleSin = Math.sin(angle);
       }
 
-      var divWidth = (style.vertical ? geom.height : geom.width) * task._viewport.scale;
-      var divHeight = fontHeight;
-      var m, b;
+      const divWidth = (style.vertical ? geom.height : geom.width) * task._viewport.scale;
+      const divHeight = fontHeight;
+      let m, b;
 
       if (angle !== 0) {
         m = [angleCos, angleSin, -angleSin, angleCos, left, top];
@@ -10476,9 +10777,9 @@ var renderTextLayer = function renderTextLayerClosure() {
       return;
     }
 
-    var textDivs = task._textDivs;
-    var capability = task._capability;
-    var textDivsLength = textDivs.length;
+    const textDivs = task._textDivs;
+    const capability = task._capability;
+    const textDivsLength = textDivs.length;
 
     if (textDivsLength > MAX_TEXT_DIVS_TO_RENDER) {
       task._renderingDone = true;
@@ -10487,7 +10788,7 @@ var renderTextLayer = function renderTextLayerClosure() {
     }
 
     if (!task._textContentStream) {
-      for (var i = 0; i < textDivsLength; i++) {
+      for (let i = 0; i < textDivsLength; i++) {
         task._layoutText(textDivs[i]);
       }
     }
@@ -10511,14 +10812,14 @@ var renderTextLayer = function renderTextLayerClosure() {
   }
 
   function expand(task) {
-    var bounds = task._bounds;
-    var viewport = task._viewport;
-    var expanded = expandBounds(viewport.width, viewport.height, bounds);
+    const bounds = task._bounds;
+    const viewport = task._viewport;
+    const expanded = expandBounds(viewport.width, viewport.height, bounds);
 
-    for (var i = 0; i < expanded.length; i++) {
-      var div = bounds[i].div;
+    for (let i = 0; i < expanded.length; i++) {
+      const div = bounds[i].div;
 
-      var divProperties = task._textDivProperties.get(div);
+      const divProperties = task._textDivProperties.get(div);
 
       if (divProperties.angle === 0) {
         divProperties.paddingLeft = bounds[i].left - expanded[i].left;
@@ -10531,15 +10832,15 @@ var renderTextLayer = function renderTextLayerClosure() {
         continue;
       }
 
-      var e = expanded[i],
-          b = bounds[i];
-      var m = b.m,
-          c = m[0],
-          s = m[1];
-      var points = [[0, 0], [0, b.size[1]], [b.size[0], 0], b.size];
-      var ts = new Float64Array(64);
+      const e = expanded[i],
+            b = bounds[i];
+      const m = b.m,
+            c = m[0],
+            s = m[1];
+      const points = [[0, 0], [0, b.size[1]], [b.size[0], 0], b.size];
+      const ts = new Float64Array(64);
       points.forEach(function (p, j) {
-        var t = _util.Util.applyTransform(p, m);
+        const t = _util.Util.applyTransform(p, m);
 
         ts[j + 0] = c && (e.left - t[0]) / c;
         ts[j + 4] = s && (e.top - t[1]) / s;
@@ -10558,7 +10859,7 @@ var renderTextLayer = function renderTextLayerClosure() {
         ts[j + 56] = s && (e.right - t[0]) / s;
         ts[j + 60] = c && (e.bottom - t[1]) / -c;
       });
-      var boxScale = 1 + Math.min(Math.abs(c), Math.abs(s));
+      const boxScale = 1 + Math.min(Math.abs(c), Math.abs(s));
       divProperties.paddingLeft = findPositiveMin(ts, 32, 16) / boxScale;
       divProperties.paddingTop = findPositiveMin(ts, 48, 16) / boxScale;
       divProperties.paddingRight = findPositiveMin(ts, 0, 16) / boxScale;
@@ -10569,7 +10870,7 @@ var renderTextLayer = function renderTextLayerClosure() {
   }
 
   function expandBounds(width, height, boxes) {
-    var bounds = boxes.map(function (box, i) {
+    const bounds = boxes.map(function (box, i) {
       return {
         x1: box.left,
         y1: box.top,
@@ -10581,9 +10882,9 @@ var renderTextLayer = function renderTextLayerClosure() {
       };
     });
     expandBoundsLTR(width, bounds);
-    var expanded = new Array(boxes.length);
+    const expanded = new Array(boxes.length);
     bounds.forEach(function (b) {
-      var i = b.index;
+      const i = b.index;
       expanded[i] = {
         left: b.x1New,
         top: 0,
@@ -10592,8 +10893,8 @@ var renderTextLayer = function renderTextLayerClosure() {
       };
     });
     boxes.map(function (box, i) {
-      var e = expanded[i],
-          b = bounds[i];
+      const e = expanded[i],
+            b = bounds[i];
       b.x1 = box.top;
       b.y1 = width - e.right;
       b.x2 = box.bottom;
@@ -10604,7 +10905,7 @@ var renderTextLayer = function renderTextLayerClosure() {
     });
     expandBoundsLTR(height, bounds);
     bounds.forEach(function (b) {
-      var i = b.index;
+      const i = b.index;
       expanded[i].top = b.x1New;
       expanded[i].bottom = b.x2New;
     });
@@ -10615,7 +10916,7 @@ var renderTextLayer = function renderTextLayerClosure() {
     bounds.sort(function (a, b) {
       return a.x1 - b.x1 || a.index - b.index;
     });
-    var fakeBoundary = {
+    const fakeBoundary = {
       x1: -Infinity,
       y1: -Infinity,
       x2: 0,
@@ -10624,33 +10925,33 @@ var renderTextLayer = function renderTextLayerClosure() {
       x1New: 0,
       x2New: 0
     };
-    var horizon = [{
+    const horizon = [{
       start: -Infinity,
       end: Infinity,
       boundary: fakeBoundary
     }];
     bounds.forEach(function (boundary) {
-      var i = 0;
+      let i = 0;
 
       while (i < horizon.length && horizon[i].end <= boundary.y1) {
         i++;
       }
 
-      var j = horizon.length - 1;
+      let j = horizon.length - 1;
 
       while (j >= 0 && horizon[j].start >= boundary.y2) {
         j--;
       }
 
-      var horizonPart, affectedBoundary;
-      var q,
+      let horizonPart, affectedBoundary;
+      let q,
           k,
           maxXNew = -Infinity;
 
       for (q = i; q <= j; q++) {
         horizonPart = horizon[q];
         affectedBoundary = horizonPart.boundary;
-        var xNew;
+        let xNew;
 
         if (affectedBoundary.x2 > boundary.x1) {
           xNew = affectedBoundary.index > boundary.index ? affectedBoundary.x1New : boundary.x1;
@@ -10684,13 +10985,13 @@ var renderTextLayer = function renderTextLayerClosure() {
         }
       }
 
-      var changedHorizon = [],
-          lastBoundary = null;
+      const changedHorizon = [];
+      let lastBoundary = null;
 
       for (q = i; q <= j; q++) {
         horizonPart = horizon[q];
         affectedBoundary = horizonPart.boundary;
-        var useBoundary = affectedBoundary.x2 > boundary.x2 ? affectedBoundary : boundary;
+        const useBoundary = affectedBoundary.x2 > boundary.x2 ? affectedBoundary : boundary;
 
         if (lastBoundary === useBoundary) {
           changedHorizon[changedHorizon.length - 1].end = horizonPart.end;
@@ -10730,7 +11031,7 @@ var renderTextLayer = function renderTextLayerClosure() {
           continue;
         }
 
-        var used = false;
+        let used = false;
 
         for (k = i - 1; !used && k >= 0 && horizon[k].start >= affectedBoundary.y1; k--) {
           used = horizon[k].boundary === affectedBoundary;
@@ -10752,7 +11053,7 @@ var renderTextLayer = function renderTextLayerClosure() {
       Array.prototype.splice.apply(horizon, [i, j - i + 1].concat(changedHorizon));
     });
     horizon.forEach(function (horizonPart) {
-      var affectedBoundary = horizonPart.boundary;
+      const affectedBoundary = horizonPart.boundary;
 
       if (affectedBoundary.x2New === undefined) {
         affectedBoundary.x2New = Math.max(width, affectedBoundary.x2);
@@ -10777,7 +11078,7 @@ var renderTextLayer = function renderTextLayerClosure() {
     this._textDivs = textDivs || [];
     this._textContentItemsStr = textContentItemsStr || [];
     this._enhanceTextSelection = !!enhanceTextSelection;
-    this._fontInspectorEnabled = !!(globalThis.FontInspector && globalThis.FontInspector.enabled);
+    this._fontInspectorEnabled = !!globalThis.FontInspector?.enabled;
     this._reader = null;
     this._layoutTextLastFontSize = null;
     this._layoutTextLastFontFamily = null;
@@ -10824,7 +11125,7 @@ var renderTextLayer = function renderTextLayerClosure() {
       for (let i = 0, len = items.length; i < len; i++) {
         this._textContentItemsStr.push(items[i].str);
 
-        appendText(this, items[i], styleCache);
+        appendText(this, items[i], styleCache, this._layoutTextCtx);
       }
     },
 
@@ -10882,6 +11183,7 @@ var renderTextLayer = function renderTextLayerClosure() {
 
       const canvas = this._document.createElement("canvas");
 
+      canvas.height = canvas.width = DEFAULT_FONT_SIZE;
       canvas.mozOpaque = true;
       this._layoutTextCtx = canvas.getContext("2d", {
         alpha: false
@@ -10945,7 +11247,7 @@ var renderTextLayer = function renderTextLayerClosure() {
       const transformBuf = [],
             paddingBuf = [];
 
-      for (var i = 0, ii = this._textDivs.length; i < ii; i++) {
+      for (let i = 0, ii = this._textDivs.length; i < ii; i++) {
         const div = this._textDivs[i];
 
         const divProps = this._textDivProperties.get(div);
@@ -11002,7 +11304,7 @@ var renderTextLayer = function renderTextLayerClosure() {
   };
 
   function renderTextLayer(renderParameters) {
-    var task = new TextLayerRenderTask({
+    const task = new TextLayerRenderTask({
       textContent: renderParameters.textContent,
       textContentStream: renderParameters.textContentStream,
       container: renderParameters.container,
@@ -11024,14 +11326,13 @@ exports.renderTextLayer = renderTextLayer;
 
 /***/ }),
 /* 21 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.SVGGraphics = void 0;
 
 var _util = __w_pdfjs_require__(2);
@@ -11700,7 +12001,7 @@ exports.SVGGraphics = SVGGraphics;
     setTextMatrix(a, b, c, d, e, f) {
       const current = this.current;
       current.textMatrix = current.lineMatrix = [a, b, c, d, e, f];
-      current.textMatrixScale = Math.sqrt(a * a + b * b);
+      current.textMatrixScale = Math.hypot(a, b);
       current.x = current.lineX = 0;
       current.y = current.lineY = 0;
       current.xcoords = [];
@@ -11901,7 +12202,7 @@ exports.SVGGraphics = SVGGraphics;
         this.embeddedFonts[fontObj.loadedName] = fontObj;
       }
 
-      current.fontMatrix = fontObj.fontMatrix ? fontObj.fontMatrix : _util.FONT_IDENTITY_MATRIX;
+      current.fontMatrix = fontObj.fontMatrix || _util.FONT_IDENTITY_MATRIX;
       let bold = "normal";
 
       if (fontObj.black) {
@@ -11932,7 +12233,7 @@ exports.SVGGraphics = SVGGraphics;
     endText() {
       const current = this.current;
 
-      if (current.textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG && current.txtElement && 
current.txtElement.hasChildNodes()) {
+      if (current.textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG && 
current.txtElement?.hasChildNodes()) {
         current.element = current.txtElement;
         this.clip("nonzero");
         this.endPath();
@@ -11962,7 +12263,7 @@ exports.SVGGraphics = SVGGraphics;
     }
 
     setStrokeRGBColor(r, g, b) {
-      this.current.strokeColor = _util.Util.makeCssRgb(r, g, b);
+      this.current.strokeColor = _util.Util.makeHexColor(r, g, b);
     }
 
     setFillAlpha(fillAlpha) {
@@ -11970,7 +12271,7 @@ exports.SVGGraphics = SVGGraphics;
     }
 
     setFillRGBColor(r, g, b) {
-      this.current.fillColor = _util.Util.makeCssRgb(r, g, b);
+      this.current.fillColor = _util.Util.makeHexColor(r, g, b);
       this.current.tspan = this.svgFactory.createElement("svg:tspan");
       this.current.xcoords = [];
       this.current.ycoords = [];
@@ -12058,7 +12359,7 @@ exports.SVGGraphics = SVGGraphics;
       this.transformMatrix = matrix;
 
       if (paintType === 2) {
-        const cssColor = _util.Util.makeCssRgb(...color);
+        const cssColor = _util.Util.makeHexColor(...color);
 
         this.current.fillColor = cssColor;
         this.current.strokeColor = cssColor;
@@ -12519,50 +12820,138 @@ exports.SVGGraphics = SVGGraphics;
       return svg;
     }
 
-    _ensureClipGroup() {
-      if (!this.current.clipGroup) {
-        const clipGroup = this.svgFactory.createElement("svg:g");
-        clipGroup.setAttributeNS(null, "clip-path", this.current.activeClipUrl);
-        this.svg.appendChild(clipGroup);
-        this.current.clipGroup = clipGroup;
-      }
+    _ensureClipGroup() {
+      if (!this.current.clipGroup) {
+        const clipGroup = this.svgFactory.createElement("svg:g");
+        clipGroup.setAttributeNS(null, "clip-path", this.current.activeClipUrl);
+        this.svg.appendChild(clipGroup);
+        this.current.clipGroup = clipGroup;
+      }
+
+      return this.current.clipGroup;
+    }
+
+    _ensureTransformGroup() {
+      if (!this.tgrp) {
+        this.tgrp = this.svgFactory.createElement("svg:g");
+        this.tgrp.setAttributeNS(null, "transform", pm(this.transformMatrix));
+
+        if (this.current.activeClipUrl) {
+          this._ensureClipGroup().appendChild(this.tgrp);
+        } else {
+          this.svg.appendChild(this.tgrp);
+        }
+      }
+
+      return this.tgrp;
+    }
+
+  };
+}
+
+/***/ }),
+/* 22 */
+/***/ ((__unused_webpack_module, exports) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports.XfaLayer = void 0;
+
+class XfaLayer {
+  static setAttributes(html, attrs) {
+    for (const [key, value] of Object.entries(attrs)) {
+      if (value === null || value === undefined) {
+        continue;
+      }
+
+      if (key !== "style") {
+        html.setAttribute(key, value);
+      } else {
+        Object.assign(html.style, value);
+      }
+    }
+  }
+
+  static render(parameters) {
+    const root = parameters.xfa;
+    const rootHtml = document.createElement(root.name);
 
-      return this.current.clipGroup;
+    if (root.attributes) {
+      XfaLayer.setAttributes(rootHtml, root.attributes);
     }
 
-    _ensureTransformGroup() {
-      if (!this.tgrp) {
-        this.tgrp = this.svgFactory.createElement("svg:g");
-        this.tgrp.setAttributeNS(null, "transform", pm(this.transformMatrix));
+    const stack = [[root, -1, rootHtml]];
+    const rootDiv = parameters.div;
+    rootDiv.appendChild(rootHtml);
+    const coeffs = parameters.viewport.transform.join(",");
+    rootDiv.style.transform = `matrix(${coeffs})`;
+    rootDiv.setAttribute("class", "xfaLayer xfaFont");
 
-        if (this.current.activeClipUrl) {
-          this._ensureClipGroup().appendChild(this.tgrp);
-        } else {
-          this.svg.appendChild(this.tgrp);
-        }
+    while (stack.length > 0) {
+      const [parent, i, html] = stack[stack.length - 1];
+
+      if (i + 1 === parent.children.length) {
+        stack.pop();
+        continue;
       }
 
-      return this.tgrp;
+      const child = parent.children[++stack[stack.length - 1][1]];
+
+      if (child === null) {
+        continue;
+      }
+
+      const {
+        name
+      } = child;
+
+      if (name === "#text") {
+        html.appendChild(document.createTextNode(child.value));
+        continue;
+      }
+
+      const childHtml = document.createElement(name);
+      html.appendChild(childHtml);
+
+      if (child.attributes) {
+        XfaLayer.setAttributes(childHtml, child.attributes);
+      }
+
+      if (child.children && child.children.length > 0) {
+        stack.push([child, -1, childHtml]);
+      } else if (child.value) {
+        childHtml.appendChild(document.createTextNode(child.value));
+      }
     }
+  }
+
+  static update(parameters) {
+    const transform = `matrix(${parameters.viewport.transform.join(",")})`;
+    parameters.div.style.transform = transform;
+    parameters.div.hidden = false;
+  }
 
-  };
 }
 
+exports.XfaLayer = XfaLayer;
+
 /***/ }),
-/* 22 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/* 23 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.PDFNodeStream = void 0;
 
 var _util = __w_pdfjs_require__(2);
 
-var _network_utils = __w_pdfjs_require__(23);
+var _network_utils = __w_pdfjs_require__(24);
 
 ;
 
@@ -12606,7 +12995,7 @@ class PDFNodeStream {
   }
 
   get _progressiveDataLength() {
-    return this._fullRequestReader ? this._fullRequestReader._loaded : 0;
+    return this._fullRequestReader?._loaded ?? 0;
   }
 
   getFullReader() {
@@ -13018,15 +13407,14 @@ class PDFNodeStreamFsRangeReader extends BaseRangeReader {
 }
 
 /***/ }),
-/* 23 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/* 24 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.createResponseStatusError = createResponseStatusError;
 exports.extractFilenameFromHeader = extractFilenameFromHeader;
 exports.validateRangeRequestCapabilities = validateRangeRequestCapabilities;
@@ -13034,7 +13422,9 @@ exports.validateResponseStatus = validateResponseStatus;
 
 var _util = __w_pdfjs_require__(2);
 
-var _content_disposition = __w_pdfjs_require__(24);
+var _content_disposition = __w_pdfjs_require__(25);
+
+var _display_utils = __w_pdfjs_require__(1);
 
 function validateRangeRequestCapabilities({
   getResponseHeader,
@@ -13089,7 +13479,7 @@ function extractFilenameFromHeader(getResponseHeader) {
       } catch (ex) {}
     }
 
-    if (/\.pdf$/i.test(filename)) {
+    if ((0, _display_utils.isPdfFile)(filename)) {
       return filename;
     }
   }
@@ -13102,7 +13492,7 @@ function createResponseStatusError(status, url) {
     return new _util.MissingPDFException('Missing PDF "' + url + '".');
   }
 
-  return new _util.UnexpectedResponseException("Unexpected server response (" + status + ') while retrieving 
PDF "' + url + '".', status);
+  return new _util.UnexpectedResponseException(`Unexpected server response (${status}) while retrieving PDF 
"${url}".`, status);
 }
 
 function validateResponseStatus(status) {
@@ -13110,15 +13500,14 @@ function validateResponseStatus(status) {
 }
 
 /***/ }),
-/* 24 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/* 25 */
+/***/ ((__unused_webpack_module, exports) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.getFilenameFromContentDispositionHeader = getFilenameFromContentDispositionHeader;
 
 function getFilenameFromContentDispositionHeader(contentDisposition) {
@@ -13298,20 +13687,19 @@ function getFilenameFromContentDispositionHeader(contentDisposition) {
 }
 
 /***/ }),
-/* 25 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/* 26 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.PDFNetworkStream = void 0;
 
 var _util = __w_pdfjs_require__(2);
 
-var _network_utils = __w_pdfjs_require__(23);
+var _network_utils = __w_pdfjs_require__(24);
 
 ;
 const OK_RESPONSE = 200;
@@ -13841,20 +14229,19 @@ class PDFNetworkStreamRangeRequestReader {
 }
 
 /***/ }),
-/* 26 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/* 27 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.PDFFetchStream = void 0;
 
 var _util = __w_pdfjs_require__(2);
 
-var _network_utils = __w_pdfjs_require__(23);
+var _network_utils = __w_pdfjs_require__(24);
 
 ;
 
@@ -13862,7 +14249,7 @@ function createFetchOptions(headers, withCredentials, abortController) {
   return {
     method: "GET",
     headers,
-    signal: abortController && abortController.signal,
+    signal: abortController?.signal,
     mode: "cors",
     credentials: withCredentials ? "include" : "same-origin",
     redirect: "follow"
@@ -13895,7 +14282,7 @@ class PDFFetchStream {
   }
 
   get _progressiveDataLength() {
-    return this._fullRequestReader ? this._fullRequestReader._loaded : 0;
+    return this._fullRequestReader?._loaded ?? 0;
   }
 
   getFullReader() {
@@ -14080,7 +14467,7 @@ class PDFFetchStreamRangeReader {
 
       this._reader = response.body.getReader();
     }).catch(reason => {
-      if (reason && reason.name === "AbortError") {
+      if (reason?.name === "AbortError") {
         return;
       }
 
@@ -14135,6 +14522,306 @@ class PDFFetchStreamRangeReader {
 }
 
 /***/ })
-/******/ ]);
+/******/       ]);
+/************************************************************************/
+/******/       // The module cache
+/******/       var __webpack_module_cache__ = {};
+/******/       
+/******/       // The require function
+/******/       function __w_pdfjs_require__(moduleId) {
+/******/               // Check if module is in cache
+/******/               var cachedModule = __webpack_module_cache__[moduleId];
+/******/               if (cachedModule !== undefined) {
+/******/                       return cachedModule.exports;
+/******/               }
+/******/               // Create a new module (and put it into the cache)
+/******/               var module = __webpack_module_cache__[moduleId] = {
+/******/                       // no module.id needed
+/******/                       // no module.loaded needed
+/******/                       exports: {}
+/******/               };
+/******/       
+/******/               // Execute the module function
+/******/               __webpack_modules__[moduleId](module, module.exports, __w_pdfjs_require__);
+/******/       
+/******/               // Return the exports of the module
+/******/               return module.exports;
+/******/       }
+/******/       
+/************************************************************************/
+var __webpack_exports__ = {};
+// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the 
chunk.
+(() => {
+var exports = __webpack_exports__;
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+Object.defineProperty(exports, "addLinkAttributes", ({
+  enumerable: true,
+  get: function () {
+    return _display_utils.addLinkAttributes;
+  }
+}));
+Object.defineProperty(exports, "getFilenameFromUrl", ({
+  enumerable: true,
+  get: function () {
+    return _display_utils.getFilenameFromUrl;
+  }
+}));
+Object.defineProperty(exports, "getPdfFilenameFromUrl", ({
+  enumerable: true,
+  get: function () {
+    return _display_utils.getPdfFilenameFromUrl;
+  }
+}));
+Object.defineProperty(exports, "isPdfFile", ({
+  enumerable: true,
+  get: function () {
+    return _display_utils.isPdfFile;
+  }
+}));
+Object.defineProperty(exports, "LinkTarget", ({
+  enumerable: true,
+  get: function () {
+    return _display_utils.LinkTarget;
+  }
+}));
+Object.defineProperty(exports, "loadScript", ({
+  enumerable: true,
+  get: function () {
+    return _display_utils.loadScript;
+  }
+}));
+Object.defineProperty(exports, "PDFDateString", ({
+  enumerable: true,
+  get: function () {
+    return _display_utils.PDFDateString;
+  }
+}));
+Object.defineProperty(exports, "RenderingCancelledException", ({
+  enumerable: true,
+  get: function () {
+    return _display_utils.RenderingCancelledException;
+  }
+}));
+Object.defineProperty(exports, "build", ({
+  enumerable: true,
+  get: function () {
+    return _api.build;
+  }
+}));
+Object.defineProperty(exports, "getDocument", ({
+  enumerable: true,
+  get: function () {
+    return _api.getDocument;
+  }
+}));
+Object.defineProperty(exports, "LoopbackPort", ({
+  enumerable: true,
+  get: function () {
+    return _api.LoopbackPort;
+  }
+}));
+Object.defineProperty(exports, "PDFDataRangeTransport", ({
+  enumerable: true,
+  get: function () {
+    return _api.PDFDataRangeTransport;
+  }
+}));
+Object.defineProperty(exports, "PDFWorker", ({
+  enumerable: true,
+  get: function () {
+    return _api.PDFWorker;
+  }
+}));
+Object.defineProperty(exports, "version", ({
+  enumerable: true,
+  get: function () {
+    return _api.version;
+  }
+}));
+Object.defineProperty(exports, "CMapCompressionType", ({
+  enumerable: true,
+  get: function () {
+    return _util.CMapCompressionType;
+  }
+}));
+Object.defineProperty(exports, "createObjectURL", ({
+  enumerable: true,
+  get: function () {
+    return _util.createObjectURL;
+  }
+}));
+Object.defineProperty(exports, "createPromiseCapability", ({
+  enumerable: true,
+  get: function () {
+    return _util.createPromiseCapability;
+  }
+}));
+Object.defineProperty(exports, "createValidAbsoluteUrl", ({
+  enumerable: true,
+  get: function () {
+    return _util.createValidAbsoluteUrl;
+  }
+}));
+Object.defineProperty(exports, "InvalidPDFException", ({
+  enumerable: true,
+  get: function () {
+    return _util.InvalidPDFException;
+  }
+}));
+Object.defineProperty(exports, "MissingPDFException", ({
+  enumerable: true,
+  get: function () {
+    return _util.MissingPDFException;
+  }
+}));
+Object.defineProperty(exports, "OPS", ({
+  enumerable: true,
+  get: function () {
+    return _util.OPS;
+  }
+}));
+Object.defineProperty(exports, "PasswordResponses", ({
+  enumerable: true,
+  get: function () {
+    return _util.PasswordResponses;
+  }
+}));
+Object.defineProperty(exports, "PermissionFlag", ({
+  enumerable: true,
+  get: function () {
+    return _util.PermissionFlag;
+  }
+}));
+Object.defineProperty(exports, "removeNullCharacters", ({
+  enumerable: true,
+  get: function () {
+    return _util.removeNullCharacters;
+  }
+}));
+Object.defineProperty(exports, "shadow", ({
+  enumerable: true,
+  get: function () {
+    return _util.shadow;
+  }
+}));
+Object.defineProperty(exports, "UnexpectedResponseException", ({
+  enumerable: true,
+  get: function () {
+    return _util.UnexpectedResponseException;
+  }
+}));
+Object.defineProperty(exports, "UNSUPPORTED_FEATURES", ({
+  enumerable: true,
+  get: function () {
+    return _util.UNSUPPORTED_FEATURES;
+  }
+}));
+Object.defineProperty(exports, "Util", ({
+  enumerable: true,
+  get: function () {
+    return _util.Util;
+  }
+}));
+Object.defineProperty(exports, "VerbosityLevel", ({
+  enumerable: true,
+  get: function () {
+    return _util.VerbosityLevel;
+  }
+}));
+Object.defineProperty(exports, "AnnotationLayer", ({
+  enumerable: true,
+  get: function () {
+    return _annotation_layer.AnnotationLayer;
+  }
+}));
+Object.defineProperty(exports, "apiCompatibilityParams", ({
+  enumerable: true,
+  get: function () {
+    return _api_compatibility.apiCompatibilityParams;
+  }
+}));
+Object.defineProperty(exports, "GlobalWorkerOptions", ({
+  enumerable: true,
+  get: function () {
+    return _worker_options.GlobalWorkerOptions;
+  }
+}));
+Object.defineProperty(exports, "renderTextLayer", ({
+  enumerable: true,
+  get: function () {
+    return _text_layer.renderTextLayer;
+  }
+}));
+Object.defineProperty(exports, "SVGGraphics", ({
+  enumerable: true,
+  get: function () {
+    return _svg.SVGGraphics;
+  }
+}));
+Object.defineProperty(exports, "XfaLayer", ({
+  enumerable: true,
+  get: function () {
+    return _xfa_layer.XfaLayer;
+  }
+}));
+
+var _display_utils = __w_pdfjs_require__(1);
+
+var _api = __w_pdfjs_require__(5);
+
+var _util = __w_pdfjs_require__(2);
+
+var _annotation_layer = __w_pdfjs_require__(18);
+
+var _api_compatibility = __w_pdfjs_require__(9);
+
+var _worker_options = __w_pdfjs_require__(12);
+
+var _text_layer = __w_pdfjs_require__(20);
+
+var _svg = __w_pdfjs_require__(21);
+
+var _xfa_layer = __w_pdfjs_require__(22);
+
+const pdfjsVersion = '2.8.335';
+const pdfjsBuild = '228adbf67';
+{
+  const {
+    isNodeJS
+  } = __w_pdfjs_require__(4);
+
+  if (isNodeJS) {
+    const PDFNodeStream = __w_pdfjs_require__(23).PDFNodeStream;
+
+    (0, _api.setPDFNetworkStreamFactory)(params => {
+      return new PDFNodeStream(params);
+    });
+  } else {
+    const PDFNetworkStream = __w_pdfjs_require__(26).PDFNetworkStream;
+
+    let PDFFetchStream;
+
+    if ((0, _display_utils.isFetchSupported)()) {
+      PDFFetchStream = __w_pdfjs_require__(27).PDFFetchStream;
+    }
+
+    (0, _api.setPDFNetworkStreamFactory)(params => {
+      if (PDFFetchStream && (0, _display_utils.isValidFetchUrl)(params.url)) {
+        return new PDFFetchStream(params);
+      }
+
+      return new PDFNetworkStream(params);
+    });
+  }
+}
+})();
+
+/******/       return __webpack_exports__;
+/******/ })()
+;
 });
 //# sourceMappingURL=pdf.js.map
\ No newline at end of file
diff --git a/third-party/pdfjs/build/pdf.worker.js b/third-party/pdfjs/build/pdf.worker.js
index 58bdf7c19..40af1fb83 100644
--- a/third-party/pdfjs/build/pdf.worker.js
+++ b/third-party/pdfjs/build/pdf.worker.js
@@ -2,7 +2,7 @@
  * @licstart The following is the entire license notice for the
  * Javascript code in this page
  *
- * Copyright 2020 Mozilla Foundation
+ * Copyright 2021 Mozilla Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -30,125 +30,19 @@
        else
                root["pdfjs-dist/build/pdf.worker"] = root.pdfjsWorker = factory();
 })(this, function() {
-return /******/ (function(modules) { // webpackBootstrap
-/******/       // The module cache
-/******/       var installedModules = {};
-/******/
-/******/       // The require function
-/******/       function __w_pdfjs_require__(moduleId) {
-/******/
-/******/               // Check if module is in cache
-/******/               if(installedModules[moduleId]) {
-/******/                       return installedModules[moduleId].exports;
-/******/               }
-/******/               // Create a new module (and put it into the cache)
-/******/               var module = installedModules[moduleId] = {
-/******/                       i: moduleId,
-/******/                       l: false,
-/******/                       exports: {}
-/******/               };
-/******/
-/******/               // Execute the module function
-/******/               modules[moduleId].call(module.exports, module, module.exports, __w_pdfjs_require__);
-/******/
-/******/               // Flag the module as loaded
-/******/               module.l = true;
-/******/
-/******/               // Return the exports of the module
-/******/               return module.exports;
-/******/       }
-/******/
-/******/
-/******/       // expose the modules object (__webpack_modules__)
-/******/       __w_pdfjs_require__.m = modules;
-/******/
-/******/       // expose the module cache
-/******/       __w_pdfjs_require__.c = installedModules;
-/******/
-/******/       // define getter function for harmony exports
-/******/       __w_pdfjs_require__.d = function(exports, name, getter) {
-/******/               if(!__w_pdfjs_require__.o(exports, name)) {
-/******/                       Object.defineProperty(exports, name, { enumerable: true, get: getter });
-/******/               }
-/******/       };
-/******/
-/******/       // define __esModule on exports
-/******/       __w_pdfjs_require__.r = function(exports) {
-/******/               if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
-/******/                       Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
-/******/               }
-/******/               Object.defineProperty(exports, '__esModule', { value: true });
-/******/       };
-/******/
-/******/       // create a fake namespace object
-/******/       // mode & 1: value is a module id, require it
-/******/       // mode & 2: merge all properties of value into the ns
-/******/       // mode & 4: return value when already ns object
-/******/       // mode & 8|1: behave like require
-/******/       __w_pdfjs_require__.t = function(value, mode) {
-/******/               if(mode & 1) value = __w_pdfjs_require__(value);
-/******/               if(mode & 8) return value;
-/******/               if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
-/******/               var ns = Object.create(null);
-/******/               __w_pdfjs_require__.r(ns);
-/******/               Object.defineProperty(ns, 'default', { enumerable: true, value: value });
-/******/               if(mode & 2 && typeof value != 'string') for(var key in value) 
__w_pdfjs_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
-/******/               return ns;
-/******/       };
-/******/
-/******/       // getDefaultExport function for compatibility with non-harmony modules
-/******/       __w_pdfjs_require__.n = function(module) {
-/******/               var getter = module && module.__esModule ?
-/******/                       function getDefault() { return module['default']; } :
-/******/                       function getModuleExports() { return module; };
-/******/               __w_pdfjs_require__.d(getter, 'a', getter);
-/******/               return getter;
-/******/       };
-/******/
-/******/       // Object.prototype.hasOwnProperty.call
-/******/       __w_pdfjs_require__.o = function(object, property) { return 
Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/       // __webpack_public_path__
-/******/       __w_pdfjs_require__.p = "";
-/******/
-/******/
-/******/       // Load entry module and return exports
-/******/       return __w_pdfjs_require__(__w_pdfjs_require__.s = 0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-Object.defineProperty(exports, "WorkerMessageHandler", {
-  enumerable: true,
-  get: function () {
-    return _worker.WorkerMessageHandler;
-  }
-});
-
-var _worker = __w_pdfjs_require__(1);
-
-const pdfjsVersion = '2.6.347';
-const pdfjsBuild = '3be9c65f';
-
-/***/ }),
+return /******/ (() => { // webpackBootstrap
+/******/       "use strict";
+/******/       var __webpack_modules__ = ([
+/* 0 */,
 /* 1 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
-exports.WorkerMessageHandler = exports.WorkerTask = void 0;
+}));
+exports.WorkerTask = exports.WorkerMessageHandler = void 0;
 
 var _util = __w_pdfjs_require__(2);
 
@@ -156,13 +50,13 @@ var _primitives = __w_pdfjs_require__(5);
 
 var _pdf_manager = __w_pdfjs_require__(6);
 
-var _writer = __w_pdfjs_require__(27);
+var _writer = __w_pdfjs_require__(48);
 
 var _is_node = __w_pdfjs_require__(4);
 
-var _message_handler = __w_pdfjs_require__(46);
+var _message_handler = __w_pdfjs_require__(69);
 
-var _worker_stream = __w_pdfjs_require__(47);
+var _worker_stream = __w_pdfjs_require__(70);
 
 var _core_utils = __w_pdfjs_require__(8);
 
@@ -231,7 +125,7 @@ class WorkerMessageHandler {
     var WorkerTasks = [];
     const verbosity = (0, _util.getVerbosityLevel)();
     const apiVersion = docParams.apiVersion;
-    const workerVersion = '2.6.347';
+    const workerVersion = '2.8.335';
 
     if (apiVersion !== workerVersion) {
       throw new Error(`The API version "${apiVersion}" does not match ` + `the Worker version 
"${workerVersion}".`);
@@ -247,8 +141,8 @@ class WorkerMessageHandler {
       throw new Error("The `Array.prototype` contains unexpected enumerable properties: " + 
enumerableProperties.join(", ") + "; thus breaking e.g. `for...in` iteration of `Array`s.");
     }
 
-    if (typeof ReadableStream === "undefined" || typeof Promise.allSettled === "undefined") {
-      throw new Error("The browser/environment lacks native support for critical " + "functionality used by 
the PDF.js library (e.g. " + "`ReadableStream` and/or `Promise.allSettled`); " + "please use an 
ES5-compatible build instead.");
+    if (typeof ReadableStream === "undefined") {
+      throw new Error("The browser/environment lacks native support for critical " + "functionality used by 
the PDF.js library (e.g. `ReadableStream`); " + "please use a `legacy`-build instead.");
     }
 
     var docId = docParams.docId;
@@ -282,21 +176,22 @@ class WorkerMessageHandler {
         await pdfManager.ensureDoc("checkFirstPage");
       }
 
-      const [numPages, fingerprint] = await Promise.all([pdfManager.ensureDoc("numPages"), 
pdfManager.ensureDoc("fingerprint")]);
+      const [numPages, fingerprint, isPureXfa] = await Promise.all([pdfManager.ensureDoc("numPages"), 
pdfManager.ensureDoc("fingerprint"), pdfManager.ensureDoc("isPureXfa")]);
       return {
         numPages,
-        fingerprint
+        fingerprint,
+        isPureXfa
       };
     }
 
-    function getPdfManager(data, evaluatorOptions) {
+    function getPdfManager(data, evaluatorOptions, enableXfa) {
       var pdfManagerCapability = (0, _util.createPromiseCapability)();
       let newPdfManager;
       var source = data.source;
 
       if (source.data) {
         try {
-          newPdfManager = new _pdf_manager.LocalPdfManager(docId, source.data, source.password, 
evaluatorOptions, docBaseUrl);
+          newPdfManager = new _pdf_manager.LocalPdfManager(docId, source.data, source.password, 
evaluatorOptions, enableXfa, docBaseUrl);
           pdfManagerCapability.resolve(newPdfManager);
         } catch (ex) {
           pdfManagerCapability.reject(ex);
@@ -328,7 +223,7 @@ class WorkerMessageHandler {
           length: fullRequest.contentLength,
           disableAutoFetch,
           rangeChunkSize: source.rangeChunkSize
-        }, evaluatorOptions, docBaseUrl);
+        }, evaluatorOptions, enableXfa, docBaseUrl);
 
         for (let i = 0; i < cachedChunks.length; i++) {
           newPdfManager.sendProgressiveData(cachedChunks[i]);
@@ -351,7 +246,7 @@ class WorkerMessageHandler {
         }
 
         try {
-          newPdfManager = new _pdf_manager.LocalPdfManager(docId, pdfFile, source.password, 
evaluatorOptions, docBaseUrl);
+          newPdfManager = new _pdf_manager.LocalPdfManager(docId, pdfFile, source.password, 
evaluatorOptions, enableXfa, docBaseUrl);
           pdfManagerCapability.resolve(newPdfManager);
         } catch (ex) {
           pdfManagerCapability.reject(ex);
@@ -469,7 +364,7 @@ class WorkerMessageHandler {
         isEvalSupported: data.isEvalSupported,
         fontExtraProperties: data.fontExtraProperties
       };
-      getPdfManager(data, evaluatorOptions).then(function (newPdfManager) {
+      getPdfManager(data, evaluatorOptions, data.enableXfa).then(function (newPdfManager) {
         if (terminated) {
           newPdfManager.terminate(new _util.AbortException("Worker was terminated."));
           throw new Error("Worker was terminated");
@@ -530,6 +425,26 @@ class WorkerMessageHandler {
     handler.on("GetJavaScript", function wphSetupGetJavaScript(data) {
       return pdfManager.ensureCatalog("javaScript");
     });
+    handler.on("GetDocJSActions", function wphSetupGetDocJSActions(data) {
+      return pdfManager.ensureCatalog("jsActions");
+    });
+    handler.on("GetPageJSActions", function ({
+      pageIndex
+    }) {
+      return pdfManager.getPage(pageIndex).then(function (page) {
+        return page.jsActions;
+      });
+    });
+    handler.on("GetPageXfa", function wphSetupGetXfa({
+      pageIndex
+    }) {
+      return pdfManager.getPage(pageIndex).then(function (page) {
+        return pdfManager.ensure(page, "xfaData");
+      });
+    });
+    handler.on("GetIsPureXfa", function wphSetupGetIsPureXfa(data) {
+      return pdfManager.ensureDoc("isPureXfa");
+    });
     handler.on("GetOutline", function wphSetupGetOutline(data) {
       return pdfManager.ensureCatalog("documentOutline");
     });
@@ -542,6 +457,9 @@ class WorkerMessageHandler {
     handler.on("GetMetadata", function wphSetupGetMetadata(data) {
       return Promise.all([pdfManager.ensureDoc("documentInfo"), pdfManager.ensureCatalog("metadata")]);
     });
+    handler.on("GetMarkInfo", function wphSetupGetMarkInfo(data) {
+      return pdfManager.ensureCatalog("markInfo");
+    });
     handler.on("GetData", function wphSetupGetData(data) {
       pdfManager.requestLoadedStream();
       return pdfManager.onLoadedStream().then(function (stream) {
@@ -559,23 +477,34 @@ class WorkerMessageHandler {
         return page.getAnnotationsData(intent);
       });
     });
+    handler.on("GetFieldObjects", function (data) {
+      return pdfManager.ensureDoc("fieldObjects");
+    });
+    handler.on("HasJSActions", function (data) {
+      return pdfManager.ensureDoc("hasJSActions");
+    });
+    handler.on("GetCalculationOrderIds", function (data) {
+      return pdfManager.ensureDoc("calculationOrderIds");
+    });
     handler.on("SaveDocument", function ({
       numPages,
       annotationStorage,
       filename
     }) {
       pdfManager.requestLoadedStream();
-      const promises = [pdfManager.onLoadedStream()];
-      const document = pdfManager.pdfDocument;
+      const promises = [pdfManager.onLoadedStream(), pdfManager.ensureCatalog("acroForm"), 
pdfManager.ensureDoc("xref"), pdfManager.ensureDoc("startXRef")];
 
       for (let pageIndex = 0; pageIndex < numPages; pageIndex++) {
         promises.push(pdfManager.getPage(pageIndex).then(function (page) {
           const task = new WorkerTask(`Save: page ${pageIndex}`);
-          return page.save(handler, task, annotationStorage);
+          startWorkerTask(task);
+          return page.save(handler, task, annotationStorage).finally(function () {
+            finishWorkerTask(task);
+          });
         }));
       }
 
-      return Promise.all(promises).then(([stream, ...refs]) => {
+      return Promise.all(promises).then(function ([stream, acroForm, xref, startXRef, ...refs]) {
         let newRefs = [];
 
         for (const ref of refs) {
@@ -586,18 +515,29 @@ class WorkerMessageHandler {
           return stream.bytes;
         }
 
-        const xref = document.xref;
+        const xfa = acroForm instanceof _primitives.Dict && acroForm.get("XFA") || [];
+        let xfaDatasets = null;
+
+        if (Array.isArray(xfa)) {
+          for (let i = 0, ii = xfa.length; i < ii; i += 2) {
+            if (xfa[i] === "datasets") {
+              xfaDatasets = xfa[i + 1];
+            }
+          }
+        } else {
+          (0, _util.warn)("Unsupported XFA type.");
+        }
+
         let newXrefInfo = Object.create(null);
 
         if (xref.trailer) {
-          const _info = Object.create(null);
-
+          const infoObj = Object.create(null);
           const xrefInfo = xref.trailer.get("Info") || null;
 
-          if (xrefInfo) {
+          if (xrefInfo instanceof _primitives.Dict) {
             xrefInfo.forEach((key, value) => {
               if ((0, _util.isString)(key) && (0, _util.isString)(value)) {
-                _info[key] = (0, _util.stringToPDFString)(value);
+                infoObj[key] = (0, _util.stringToPDFString)(value);
               }
             });
           }
@@ -607,15 +547,21 @@ class WorkerMessageHandler {
             encrypt: xref.trailer.getRaw("Encrypt") || null,
             newRef: xref.getNewRef(),
             infoRef: xref.trailer.getRaw("Info") || null,
-            info: _info,
+            info: infoObj,
             fileIds: xref.trailer.getRaw("ID") || null,
-            startXRef: document.startXRef,
+            startXRef,
             filename
           };
         }
 
         xref.resetNewRef();
-        return (0, _writer.incrementalUpdate)(stream.bytes, newXrefInfo, newRefs);
+        return (0, _writer.incrementalUpdate)({
+          originalData: stream.bytes,
+          xrefInfo: newXrefInfo,
+          newRefs,
+          xref,
+          datasetsRef: xfaDatasets
+        });
       });
     });
     handler.on("GetOperatorList", function wphSetupRenderPage(data, sink) {
@@ -652,7 +598,7 @@ class WorkerMessageHandler {
           sink.error(reason);
         });
       });
-    }, this);
+    });
     handler.on("GetTextContent", function wphExtractText(data, sink) {
       var pageIndex = data.pageIndex;
 
@@ -748,41 +694,45 @@ if (typeof window === "undefined" && !_is_node.isNodeJS && typeof self !== "unde
 
 /***/ }),
 /* 2 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.arrayByteLength = arrayByteLength;
 exports.arraysToBytes = arraysToBytes;
 exports.assert = assert;
 exports.bytesToString = bytesToString;
+exports.createObjectURL = createObjectURL;
 exports.createPromiseCapability = createPromiseCapability;
+exports.createValidAbsoluteUrl = createValidAbsoluteUrl;
 exports.escapeString = escapeString;
 exports.getModificationDate = getModificationDate;
 exports.getVerbosityLevel = getVerbosityLevel;
 exports.info = info;
 exports.isArrayBuffer = isArrayBuffer;
 exports.isArrayEqual = isArrayEqual;
+exports.isAscii = isAscii;
 exports.isBool = isBool;
 exports.isNum = isNum;
-exports.isString = isString;
 exports.isSameOrigin = isSameOrigin;
-exports.createValidAbsoluteUrl = createValidAbsoluteUrl;
+exports.isString = isString;
+exports.objectFromMap = objectFromMap;
+exports.objectSize = objectSize;
 exports.removeNullCharacters = removeNullCharacters;
 exports.setVerbosityLevel = setVerbosityLevel;
 exports.shadow = shadow;
 exports.string32 = string32;
 exports.stringToBytes = stringToBytes;
 exports.stringToPDFString = stringToPDFString;
+exports.stringToUTF16BEString = stringToUTF16BEString;
 exports.stringToUTF8String = stringToUTF8String;
+exports.unreachable = unreachable;
 exports.utf8StringToString = utf8StringToString;
 exports.warn = warn;
-exports.unreachable = unreachable;
-exports.IsEvalSupportedCached = exports.IsLittleEndianCached = exports.createObjectURL = exports.FormatError 
= exports.Util = exports.UnknownErrorException = exports.UnexpectedResponseException = 
exports.TextRenderingMode = exports.StreamType = exports.PermissionFlag = exports.PasswordResponses = 
exports.PasswordException = exports.MissingPDFException = exports.InvalidPDFException = 
exports.AbortException = exports.CMapCompressionType = exports.ImageKind = exports.FontType = 
exports.AnnotationType = exports.AnnotationStateModelType = exports.AnnotationReviewState = 
exports.AnnotationReplyType = exports.AnnotationMarkedState = exports.AnnotationFlag = 
exports.AnnotationFieldFlag = exports.AnnotationBorderStyleType = exports.UNSUPPORTED_FEATURES = 
exports.VerbosityLevel = exports.OPS = exports.IDENTITY_MATRIX = exports.FONT_IDENTITY_MATRIX = 
exports.BaseException = void 0;
+exports.VerbosityLevel = exports.Util = exports.UNSUPPORTED_FEATURES = exports.UnknownErrorException = 
exports.UnexpectedResponseException = exports.TextRenderingMode = exports.StreamType = exports.PermissionFlag 
= exports.PasswordResponses = exports.PasswordException = exports.PageActionEventType = exports.OPS = 
exports.MissingPDFException = exports.IsLittleEndianCached = exports.IsEvalSupportedCached = 
exports.InvalidPDFException = exports.ImageKind = exports.IDENTITY_MATRIX = exports.FormatError = 
exports.FontType = exports.FONT_IDENTITY_MATRIX = exports.DocumentActionEventType = 
exports.CMapCompressionType = exports.BaseException = exports.AnnotationType = 
exports.AnnotationStateModelType = exports.AnnotationReviewState = exports.AnnotationReplyType = 
exports.AnnotationMarkedState = exports.AnnotationFlag = exports.AnnotationFieldFlag = 
exports.AnnotationBorderStyleType = exports.AnnotationActionEventType = exports.AbortException = void 0;
 
 __w_pdfjs_require__(3);
 
@@ -915,6 +865,36 @@ const AnnotationBorderStyleType = {
   UNDERLINE: 5
 };
 exports.AnnotationBorderStyleType = AnnotationBorderStyleType;
+const AnnotationActionEventType = {
+  E: "Mouse Enter",
+  X: "Mouse Exit",
+  D: "Mouse Down",
+  U: "Mouse Up",
+  Fo: "Focus",
+  Bl: "Blur",
+  PO: "PageOpen",
+  PC: "PageClose",
+  PV: "PageVisible",
+  PI: "PageInvisible",
+  K: "Keystroke",
+  F: "Format",
+  V: "Validate",
+  C: "Calculate"
+};
+exports.AnnotationActionEventType = AnnotationActionEventType;
+const DocumentActionEventType = {
+  WC: "WillClose",
+  WS: "WillSave",
+  DS: "DidSave",
+  WP: "WillPrint",
+  DP: "DidPrint"
+};
+exports.DocumentActionEventType = DocumentActionEventType;
+const PageActionEventType = {
+  O: "PageOpen",
+  C: "PageClose"
+};
+exports.PageActionEventType = PageActionEventType;
 const StreamType = {
   UNKNOWN: "UNKNOWN",
   FLATE: "FLATE",
@@ -1323,6 +1303,20 @@ function string32(value) {
   return String.fromCharCode(value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff);
 }
 
+function objectSize(obj) {
+  return Object.keys(obj).length;
+}
+
+function objectFromMap(map) {
+  const obj = Object.create(null);
+
+  for (const [key, value] of map) {
+    obj[key] = value;
+  }
+
+  return obj;
+}
+
 function isLittleEndian() {
   const buffer8 = new Uint8Array(4);
   buffer8[0] = 1;
@@ -1354,14 +1348,11 @@ const IsEvalSupportedCached = {
 
 };
 exports.IsEvalSupportedCached = IsEvalSupportedCached;
-const rgbBuf = ["rgb(", 0, ",", 0, ",", 0, ")"];
+const hexNumbers = [...Array(256).keys()].map(n => n.toString(16).padStart(2, "0"));
 
 class Util {
-  static makeCssRgb(r, g, b) {
-    rgbBuf[1] = r;
-    rgbBuf[3] = g;
-    rgbBuf[5] = b;
-    return rgbBuf.join("");
+  static makeHexColor(r, g, b) {
+    return `#${hexNumbers[r]}${hexNumbers[g]}${hexNumbers[b]}`;
   }
 
   static transform(m1, m2) {
@@ -1405,7 +1396,7 @@ class Util {
     const c = m[2] * transpose[0] + m[3] * transpose[2];
     const d = m[2] * transpose[1] + m[3] * transpose[3];
     const first = (a + d) / 2;
-    const second = Math.sqrt((a + d) * (a + d) - 4 * (a * d - c * b)) / 2;
+    const second = Math.sqrt((a + d) ** 2 - 4 * (a * d - c * b)) / 2;
     const sx = first + second || 1;
     const sy = first - second || 1;
     return [Math.sqrt(sx), Math.sqrt(sy)];
@@ -1483,7 +1474,31 @@ function stringToPDFString(str) {
 }
 
 function escapeString(str) {
-  return str.replace(/([\(\)\\])/g, "\\$1");
+  return str.replace(/([()\\\n\r])/g, match => {
+    if (match === "\n") {
+      return "\\n";
+    } else if (match === "\r") {
+      return "\\r";
+    }
+
+    return `\\${match}`;
+  });
+}
+
+function isAscii(str) {
+  return /^[\x00-\x7F]*$/.test(str);
+}
+
+function stringToUTF16BEString(str) {
+  const buf = ["\xFE\xFF"];
+
+  for (let i = 0, ii = str.length; i < ii; i++) {
+    const char = str.charCodeAt(i);
+    buf.push(String.fromCharCode(char >> 8 & 0xff));
+    buf.push(String.fromCharCode(char & 0xff));
+  }
+
+  return buf.join("");
 }
 
 function stringToUTF8String(str) {
@@ -1515,13 +1530,17 @@ function isArrayEqual(arr1, arr2) {
     return false;
   }
 
-  return arr1.every(function (element, index) {
-    return element === arr2[index];
-  });
+  for (let i = 0, ii = arr1.length; i < ii; i++) {
+    if (arr1[i] !== arr2[i]) {
+      return false;
+    }
+  }
+
+  return true;
 }
 
-function getModificationDate(date = new Date(Date.now())) {
-  const buffer = [date.getUTCFullYear().toString(), (date.getUTCMonth() + 1).toString().padStart(2, "0"), 
(date.getUTCDate() + 1).toString().padStart(2, "0"), date.getUTCHours().toString().padStart(2, "0"), 
date.getUTCMinutes().toString().padStart(2, "0"), date.getUTCSeconds().toString().padStart(2, "0")];
+function getModificationDate(date = new Date()) {
+  const buffer = [date.getUTCFullYear().toString(), (date.getUTCMonth() + 1).toString().padStart(2, "0"), 
date.getUTCDate().toString().padStart(2, "0"), date.getUTCHours().toString().padStart(2, "0"), 
date.getUTCMinutes().toString().padStart(2, "0"), date.getUTCSeconds().toString().padStart(2, "0")];
   return buffer.join("");
 }
 
@@ -1548,40 +1567,34 @@ function createPromiseCapability() {
   return capability;
 }
 
-const createObjectURL = function createObjectURLClosure() {
-  const digits = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
-  return function createObjectURL(data, contentType, forceDataSchema = false) {
-    if (!forceDataSchema && URL.createObjectURL) {
-      const blob = new Blob([data], {
-        type: contentType
-      });
-      return URL.createObjectURL(blob);
-    }
-
-    let buffer = `data:${contentType};base64,`;
+function createObjectURL(data, contentType = "", forceDataSchema = false) {
+  if (URL.createObjectURL && !forceDataSchema) {
+    return URL.createObjectURL(new Blob([data], {
+      type: contentType
+    }));
+  }
 
-    for (let i = 0, ii = data.length; i < ii; i += 3) {
-      const b1 = data[i] & 0xff;
-      const b2 = data[i + 1] & 0xff;
-      const b3 = data[i + 2] & 0xff;
-      const d1 = b1 >> 2,
-            d2 = (b1 & 3) << 4 | b2 >> 4;
-      const d3 = i + 1 < ii ? (b2 & 0xf) << 2 | b3 >> 6 : 64;
-      const d4 = i + 2 < ii ? b3 & 0x3f : 64;
-      buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4];
-    }
+  const digits = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
+  let buffer = `data:${contentType};base64,`;
 
-    return buffer;
-  };
-}();
+  for (let i = 0, ii = data.length; i < ii; i += 3) {
+    const b1 = data[i] & 0xff;
+    const b2 = data[i + 1] & 0xff;
+    const b3 = data[i + 2] & 0xff;
+    const d1 = b1 >> 2,
+          d2 = (b1 & 3) << 4 | b2 >> 4;
+    const d3 = i + 1 < ii ? (b2 & 0xf) << 2 | b3 >> 6 : 64;
+    const d4 = i + 2 < ii ? b3 & 0x3f : 64;
+    buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4];
+  }
 
-exports.createObjectURL = createObjectURL;
+  return buffer;
+}
 
 /***/ }),
 /* 3 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
 var _is_node = __w_pdfjs_require__(4);
@@ -1590,44 +1603,42 @@ var _is_node = __w_pdfjs_require__(4);
 
 /***/ }),
 /* 4 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/***/ ((__unused_webpack_module, exports) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.isNodeJS = void 0;
 const isNodeJS = typeof process === "object" && process + "" === "[object process]" && !process.versions.nw 
&& !(process.versions.electron && process.type && process.type !== "browser");
 exports.isNodeJS = isNodeJS;
 
 /***/ }),
 /* 5 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.clearPrimitiveCaches = clearPrimitiveCaches;
-exports.isEOF = isEOF;
 exports.isCmd = isCmd;
 exports.isDict = isDict;
+exports.isEOF = isEOF;
 exports.isName = isName;
 exports.isRef = isRef;
 exports.isRefsEqual = isRefsEqual;
 exports.isStream = isStream;
-exports.RefSetCache = exports.RefSet = exports.Ref = exports.Name = exports.Dict = exports.Cmd = exports.EOF 
= void 0;
+exports.RefSetCache = exports.RefSet = exports.Ref = exports.Name = exports.EOF = exports.Dict = exports.Cmd 
= void 0;
 
 var _util = __w_pdfjs_require__(2);
 
-var EOF = {};
+const EOF = {};
 exports.EOF = EOF;
 
-var Name = function NameClosure() {
+const Name = function NameClosure() {
   let nameCache = Object.create(null);
 
   function Name(name) {
@@ -1637,7 +1648,7 @@ var Name = function NameClosure() {
   Name.prototype = {};
 
   Name.get = function Name_get(name) {
-    var nameValue = nameCache[name];
+    const nameValue = nameCache[name];
     return nameValue ? nameValue : nameCache[name] = new Name(name);
   };
 
@@ -1650,7 +1661,7 @@ var Name = function NameClosure() {
 
 exports.Name = Name;
 
-var Cmd = function CmdClosure() {
+const Cmd = function CmdClosure() {
   let cmdCache = Object.create(null);
 
   function Cmd(cmd) {
@@ -1660,7 +1671,7 @@ var Cmd = function CmdClosure() {
   Cmd.prototype = {};
 
   Cmd.get = function Cmd_get(cmd) {
-    var cmdValue = cmdCache[cmd];
+    const cmdValue = cmdCache[cmd];
     return cmdValue ? cmdValue : cmdCache[cmd] = new Cmd(cmd);
   };
 
@@ -1673,8 +1684,8 @@ var Cmd = function CmdClosure() {
 
 exports.Cmd = Cmd;
 
-var Dict = function DictClosure() {
-  var nonSerializable = function nonSerializableClosure() {
+const Dict = function DictClosure() {
+  const nonSerializable = function nonSerializableClosure() {
     return nonSerializable;
   };
 
@@ -1767,12 +1778,21 @@ var Dict = function DictClosure() {
       return this._map[key] !== undefined;
     },
     forEach: function Dict_forEach(callback) {
-      for (var key in this._map) {
+      for (const key in this._map) {
         callback(key, this.get(key));
       }
     }
   };
-  Dict.empty = new Dict(null);
+
+  Dict.empty = function () {
+    const emptyDict = new Dict(null);
+
+    emptyDict.set = (key, value) => {
+      (0, _util.unreachable)("Should not call `set` on the empty dictionary.");
+    };
+
+    return emptyDict;
+  }();
 
   Dict.merge = function ({
     xref,
@@ -1850,7 +1870,7 @@ var Dict = function DictClosure() {
 
 exports.Dict = Dict;
 
-var Ref = function RefClosure() {
+const Ref = function RefClosure() {
   let refCache = Object.create(null);
 
   function Ref(num, gen) {
@@ -1884,8 +1904,8 @@ var Ref = function RefClosure() {
 exports.Ref = Ref;
 
 class RefSet {
-  constructor() {
-    this._set = new Set();
+  constructor(parent = null) {
+    this._set = new Set(parent && parent._set);
   }
 
   has(ref) {
@@ -1900,6 +1920,16 @@ class RefSet {
     this._set.delete(ref.toString());
   }
 
+  forEach(callback) {
+    for (const ref of this._set.values()) {
+      callback(ref);
+    }
+  }
+
+  clear() {
+    this._set.clear();
+  }
+
 }
 
 exports.RefSet = RefSet;
@@ -1981,14 +2011,13 @@ function clearPrimitiveCaches() {
 
 /***/ }),
 /* 6 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.NetworkPdfManager = exports.LocalPdfManager = void 0;
 
 var _util = __w_pdfjs_require__(2);
@@ -2001,6 +2030,20 @@ var _document = __w_pdfjs_require__(9);
 
 var _stream = __w_pdfjs_require__(12);
 
+function parseDocBaseUrl(url) {
+  if (url) {
+    const absoluteUrl = (0, _util.createValidAbsoluteUrl)(url);
+
+    if (absoluteUrl) {
+      return absoluteUrl.href;
+    }
+
+    (0, _util.warn)(`Invalid absolute docBaseUrl: "${url}".`);
+  }
+
+  return null;
+}
+
 class BasePdfManager {
   constructor() {
     if (this.constructor === BasePdfManager) {
@@ -2017,19 +2060,7 @@ class BasePdfManager {
   }
 
   get docBaseUrl() {
-    let docBaseUrl = null;
-
-    if (this._docBaseUrl) {
-      const absoluteUrl = (0, _util.createValidAbsoluteUrl)(this._docBaseUrl);
-
-      if (absoluteUrl) {
-        docBaseUrl = absoluteUrl.href;
-      } else {
-        (0, _util.warn)(`Invalid absolute docBaseUrl: "${this._docBaseUrl}".`);
-      }
-    }
-
-    return (0, _util.shadow)(this, "docBaseUrl", docBaseUrl);
+    return this._docBaseUrl;
   }
 
   onLoadedStream() {
@@ -2087,12 +2118,13 @@ class BasePdfManager {
 }
 
 class LocalPdfManager extends BasePdfManager {
-  constructor(docId, data, password, evaluatorOptions, docBaseUrl) {
+  constructor(docId, data, password, evaluatorOptions, enableXfa, docBaseUrl) {
     super();
     this._docId = docId;
     this._password = password;
-    this._docBaseUrl = docBaseUrl;
+    this._docBaseUrl = parseDocBaseUrl(docBaseUrl);
     this.evaluatorOptions = evaluatorOptions;
+    this.enableXfa = enableXfa;
     const stream = new _stream.Stream(data);
     this.pdfDocument = new _document.PDFDocument(this, stream);
     this._loadedStreamPromise = Promise.resolve(stream);
@@ -2125,13 +2157,14 @@ class LocalPdfManager extends BasePdfManager {
 exports.LocalPdfManager = LocalPdfManager;
 
 class NetworkPdfManager extends BasePdfManager {
-  constructor(docId, pdfNetworkStream, args, evaluatorOptions, docBaseUrl) {
+  constructor(docId, pdfNetworkStream, args, evaluatorOptions, enableXfa, docBaseUrl) {
     super();
     this._docId = docId;
     this._password = args.password;
-    this._docBaseUrl = docBaseUrl;
+    this._docBaseUrl = parseDocBaseUrl(docBaseUrl);
     this.msgHandler = args.msgHandler;
     this.evaluatorOptions = evaluatorOptions;
+    this.enableXfa = enableXfa;
     this.streamManager = new _chunked_stream.ChunkedStreamManager(pdfNetworkStream, {
       msgHandler: args.msgHandler,
       length: args.length,
@@ -2188,14 +2221,13 @@ exports.NetworkPdfManager = NetworkPdfManager;
 
 /***/ }),
 /* 7 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.ChunkedStreamManager = exports.ChunkedStream = void 0;
 
 var _util = __w_pdfjs_require__(2);
@@ -2815,26 +2847,32 @@ exports.ChunkedStreamManager = ChunkedStreamManager;
 
 /***/ }),
 /* 8 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
-exports.getLookupTableFactory = getLookupTableFactory;
+}));
+exports.collectActions = collectActions;
+exports.encodeToXmlString = encodeToXmlString;
+exports.escapePDFName = escapePDFName;
+exports.getArrayLookupTableFactory = getArrayLookupTableFactory;
 exports.getInheritableProperty = getInheritableProperty;
-exports.toRomanNumerals = toRomanNumerals;
+exports.getLookupTableFactory = getLookupTableFactory;
+exports.isWhiteSpace = isWhiteSpace;
 exports.log2 = log2;
+exports.parseXFAPath = parseXFAPath;
 exports.readInt8 = readInt8;
 exports.readUint16 = readUint16;
 exports.readUint32 = readUint32;
-exports.isWhiteSpace = isWhiteSpace;
+exports.toRomanNumerals = toRomanNumerals;
 exports.XRefParseException = exports.XRefEntryException = exports.MissingDataException = void 0;
 
 var _util = __w_pdfjs_require__(2);
 
+var _primitives = __w_pdfjs_require__(5);
+
 function getLookupTableFactory(initializer) {
   let lookup;
   return function () {
@@ -2848,6 +2886,25 @@ function getLookupTableFactory(initializer) {
   };
 }
 
+function getArrayLookupTableFactory(initializer) {
+  let lookup;
+  return function () {
+    if (initializer) {
+      let arr = initializer();
+      initializer = null;
+      lookup = Object.create(null);
+
+      for (let i = 0, ii = arr.length; i < ii; i += 2) {
+        lookup[arr[i]] = arr[i + 1];
+      }
+
+      arr = null;
+    }
+
+    return lookup;
+  };
+}
+
 class MissingDataException extends _util.BaseException {
   constructor(begin, end) {
     super(`Missing data [${begin}, ${end})`);
@@ -2873,11 +2930,14 @@ function getInheritableProperty({
   getArray = false,
   stopWhenFound = true
 }) {
-  const LOOP_LIMIT = 100;
-  let loopCount = 0;
   let values;
+  const visited = new _primitives.RefSet();
+
+  while (dict instanceof _primitives.Dict && !(dict.objId && visited.has(dict.objId))) {
+    if (dict.objId) {
+      visited.put(dict.objId);
+    }
 
-  while (dict) {
     const value = getArray ? dict.getArray(key) : dict.get(key);
 
     if (value !== undefined) {
@@ -2892,11 +2952,6 @@ function getInheritableProperty({
       values.push(value);
     }
 
-    if (++loopCount > LOOP_LIMIT) {
-      (0, _util.warn)(`getInheritableProperty: maximum loop count exceeded for "${key}"`);
-      break;
-    }
-
     dict = dict.get("Parent");
   }
 
@@ -2950,16 +3005,212 @@ function isWhiteSpace(ch) {
   return ch === 0x20 || ch === 0x09 || ch === 0x0d || ch === 0x0a;
 }
 
+function parseXFAPath(path) {
+  const positionPattern = /(.+)\[([0-9]+)\]$/;
+  return path.split(".").map(component => {
+    const m = component.match(positionPattern);
+
+    if (m) {
+      return {
+        name: m[1],
+        pos: parseInt(m[2], 10)
+      };
+    }
+
+    return {
+      name: component,
+      pos: 0
+    };
+  });
+}
+
+function escapePDFName(str) {
+  const buffer = [];
+  let start = 0;
+
+  for (let i = 0, ii = str.length; i < ii; i++) {
+    const char = str.charCodeAt(i);
+
+    if (char < 0x21 || char > 0x7e || char === 0x23 || char === 0x28 || char === 0x29 || char === 0x3c || 
char === 0x3e || char === 0x5b || char === 0x5d || char === 0x7b || char === 0x7d || char === 0x2f || char 
=== 0x25) {
+      if (start < i) {
+        buffer.push(str.substring(start, i));
+      }
+
+      buffer.push(`#${char.toString(16)}`);
+      start = i + 1;
+    }
+  }
+
+  if (buffer.length === 0) {
+    return str;
+  }
+
+  if (start < str.length) {
+    buffer.push(str.substring(start, str.length));
+  }
+
+  return buffer.join("");
+}
+
+function _collectJS(entry, xref, list, parents) {
+  if (!entry) {
+    return;
+  }
+
+  let parent = null;
+
+  if ((0, _primitives.isRef)(entry)) {
+    if (parents.has(entry)) {
+      return;
+    }
+
+    parent = entry;
+    parents.put(parent);
+    entry = xref.fetch(entry);
+  }
+
+  if (Array.isArray(entry)) {
+    for (const element of entry) {
+      _collectJS(element, xref, list, parents);
+    }
+  } else if (entry instanceof _primitives.Dict) {
+    if ((0, _primitives.isName)(entry.get("S"), "JavaScript") && entry.has("JS")) {
+      const js = entry.get("JS");
+      let code;
+
+      if ((0, _primitives.isStream)(js)) {
+        code = (0, _util.bytesToString)(js.getBytes());
+      } else {
+        code = js;
+      }
+
+      code = (0, _util.stringToPDFString)(code);
+
+      if (code) {
+        list.push(code);
+      }
+    }
+
+    _collectJS(entry.getRaw("Next"), xref, list, parents);
+  }
+
+  if (parent) {
+    parents.remove(parent);
+  }
+}
+
+function collectActions(xref, dict, eventType) {
+  const actions = Object.create(null);
+  const additionalActionsDicts = getInheritableProperty({
+    dict,
+    key: "AA",
+    stopWhenFound: false
+  });
+
+  if (additionalActionsDicts) {
+    for (let i = additionalActionsDicts.length - 1; i >= 0; i--) {
+      const additionalActions = additionalActionsDicts[i];
+
+      if (!(additionalActions instanceof _primitives.Dict)) {
+        continue;
+      }
+
+      for (const key of additionalActions.getKeys()) {
+        const action = eventType[key];
+
+        if (!action) {
+          continue;
+        }
+
+        const actionDict = additionalActions.getRaw(key);
+        const parents = new _primitives.RefSet();
+        const list = [];
+
+        _collectJS(actionDict, xref, list, parents);
+
+        if (list.length > 0) {
+          actions[action] = list;
+        }
+      }
+    }
+  }
+
+  if (dict.has("A")) {
+    const actionDict = dict.get("A");
+    const parents = new _primitives.RefSet();
+    const list = [];
+
+    _collectJS(actionDict, xref, list, parents);
+
+    if (list.length > 0) {
+      actions.Action = list;
+    }
+  }
+
+  return (0, _util.objectSize)(actions) > 0 ? actions : null;
+}
+
+const XMLEntities = {
+  0x3c: "&lt;",
+  0x3e: "&gt;",
+  0x26: "&amp;",
+  0x22: "&quot;",
+  0x27: "&apos;"
+};
+
+function encodeToXmlString(str) {
+  const buffer = [];
+  let start = 0;
+
+  for (let i = 0, ii = str.length; i < ii; i++) {
+    const char = str.codePointAt(i);
+
+    if (0x20 <= char && char <= 0x7e) {
+      const entity = XMLEntities[char];
+
+      if (entity) {
+        if (start < i) {
+          buffer.push(str.substring(start, i));
+        }
+
+        buffer.push(entity);
+        start = i + 1;
+      }
+    } else {
+      if (start < i) {
+        buffer.push(str.substring(start, i));
+      }
+
+      buffer.push(`&#x${char.toString(16).toUpperCase()};`);
+
+      if (char > 0xd7ff && (char < 0xe000 || char > 0xfffd)) {
+        i++;
+      }
+
+      start = i + 1;
+    }
+  }
+
+  if (buffer.length === 0) {
+    return str;
+  }
+
+  if (start < str.length) {
+    buffer.push(str.substring(start, str.length));
+  }
+
+  return buffer.join("");
+}
+
 /***/ }),
 /* 9 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.PDFDocument = exports.Page = void 0;
 
 var _util = __w_pdfjs_require__(2);
@@ -2972,15 +3223,17 @@ var _core_utils = __w_pdfjs_require__(8);
 
 var _stream = __w_pdfjs_require__(12);
 
-var _annotation = __w_pdfjs_require__(25);
+var _annotation = __w_pdfjs_require__(27);
 
 var _crypto = __w_pdfjs_require__(22);
 
 var _parser = __w_pdfjs_require__(11);
 
-var _operator_list = __w_pdfjs_require__(26);
+var _operator_list = __w_pdfjs_require__(46);
 
-var _evaluator = __w_pdfjs_require__(28);
+var _evaluator = __w_pdfjs_require__(29);
+
+var _factory = __w_pdfjs_require__(49);
 
 const DEFAULT_USER_UNIT = 1.0;
 const LETTER_SIZE_MEDIABOX = [0, 0, 612, 792];
@@ -2999,7 +3252,9 @@ class Page {
     globalIdFactory,
     fontCache,
     builtInCMapCache,
-    globalImageCache
+    globalImageCache,
+    nonBlendModesSet,
+    xfaFactory
   }) {
     this.pdfManager = pdfManager;
     this.pageIndex = pageIndex;
@@ -3009,8 +3264,10 @@ class Page {
     this.fontCache = fontCache;
     this.builtInCMapCache = builtInCMapCache;
     this.globalImageCache = globalImageCache;
+    this.nonBlendModesSet = nonBlendModesSet;
     this.evaluatorOptions = pdfManager.evaluatorOptions;
     this.resourcesPromise = null;
+    this.xfaFactory = xfaFactory;
     const idCounters = {
       obj: 0
     };
@@ -3053,6 +3310,14 @@ class Page {
   }
 
   _getBoundingBox(name) {
+    if (this.xfaData) {
+      const {
+        width,
+        height
+      } = this.xfaData.attributes.style;
+      return [0, 0, parseInt(width), parseInt(height)];
+    }
+
     const box = this._getInheritableProperty(name, true);
 
     if (Array.isArray(box) && box.length === 4) {
@@ -3142,6 +3407,14 @@ class Page {
     return stream;
   }
 
+  get xfaData() {
+    if (this.xfaFactory) {
+      return (0, _util.shadow)(this, "xfaData", this.xfaFactory.getPage(this.pageIndex));
+    }
+
+    return (0, _util.shadow)(this, "xfaData", null);
+  }
+
   save(handler, task, annotationStorage) {
     const partialEvaluator = new _evaluator.PartialEvaluator({
       xref: this.xref,
@@ -3206,7 +3479,7 @@ class Page {
     const pageListPromise = dataPromises.then(([contentStream]) => {
       const opList = new _operator_list.OperatorList(intent, sink);
       handler.send("StartRenderPage", {
-        transparency: partialEvaluator.hasBlendModes(this.resources),
+        transparency: partialEvaluator.hasBlendModes(this.resources, this.nonBlendModesSet),
         pageIndex: this.pageIndex,
         intent
       });
@@ -3230,7 +3503,7 @@ class Page {
       const opListPromises = [];
 
       for (const annotation of annotations) {
-        if (isAnnotationRenderable(annotation, intent)) {
+        if (isAnnotationRenderable(annotation, intent) && !annotation.isHidden(annotationStorage)) {
           opListPromises.push(annotation.getOperatorList(partialEvaluator, task, renderInteractiveForms, 
annotationStorage).catch(function (reason) {
             (0, _util.warn)("getOperatorList - ignoring annotation data during " + `"${task.name}" task: 
"${reason}".`);
             return null;
@@ -3301,7 +3574,9 @@ class Page {
   }
 
   get annotations() {
-    return (0, _util.shadow)(this, "annotations", this._getInheritableProperty("Annots") || []);
+    const annots = this._getInheritableProperty("Annots");
+
+    return (0, _util.shadow)(this, "annotations", Array.isArray(annots) ? annots : []);
   }
 
   get _parsedAnnotations() {
@@ -3309,7 +3584,7 @@ class Page {
       const annotationPromises = [];
 
       for (const annotationRef of this.annotations) {
-        annotationPromises.push(_annotation.AnnotationFactory.create(this.xref, annotationRef, 
this.pdfManager, this._localIdFactory).catch(function (reason) {
+        annotationPromises.push(_annotation.AnnotationFactory.create(this.xref, annotationRef, 
this.pdfManager, this._localIdFactory, false).catch(function (reason) {
           (0, _util.warn)(`_parsedAnnotations: "${reason}".`);
           return null;
         }));
@@ -3322,6 +3597,11 @@ class Page {
     return (0, _util.shadow)(this, "_parsedAnnotations", parsedAnnotations);
   }
 
+  get jsActions() {
+    const actions = (0, _core_utils.collectActions)(this.xref, this.pageDict, _util.PageActionEventType);
+    return (0, _util.shadow)(this, "jsActions", actions);
+  }
+
 }
 
 exports.Page = Page;
@@ -3530,6 +3810,10 @@ class PDFDocument {
   }
 
   get numPages() {
+    if (this.xfaFactory) {
+      return (0, _util.shadow)(this, "numPages", this.xfaFactory.numberPages);
+    }
+
     const linearization = this.linearization;
     const num = linearization ? linearization.numPages : this.catalog.numPages;
     return (0, _util.shadow)(this, "numPages", num);
@@ -3537,9 +3821,18 @@ class PDFDocument {
 
   _hasOnlyDocumentSignatures(fields, recursionDepth = 0) {
     const RECURSION_LIMIT = 10;
+
+    if (!Array.isArray(fields)) {
+      return false;
+    }
+
     return fields.every(field => {
       field = this.xref.fetchIfRef(field);
 
+      if (!(field instanceof _primitives.Dict)) {
+        return false;
+      }
+
       if (field.has("Kids")) {
         if (++recursionDepth > RECURSION_LIMIT) {
           (0, _util.warn)("_hasOnlyDocumentSignatures: maximum recursion depth reached");
@@ -3556,8 +3849,87 @@ class PDFDocument {
     });
   }
 
+  get xfaData() {
+    const acroForm = this.catalog.acroForm;
+
+    if (!acroForm) {
+      return null;
+    }
+
+    const xfa = acroForm.get("XFA");
+    const entries = {
+      "xdp:xdp": "",
+      template: "",
+      datasets: "",
+      config: "",
+      connectionSet: "",
+      localeSet: "",
+      stylesheet: "",
+      "/xdp:xdp": ""
+    };
+
+    if ((0, _primitives.isStream)(xfa) && !xfa.isEmpty) {
+      try {
+        entries["xdp:xdp"] = (0, _util.stringToUTF8String)((0, _util.bytesToString)(xfa.getBytes()));
+        return entries;
+      } catch (_) {
+        (0, _util.warn)("XFA - Invalid utf-8 string.");
+        return null;
+      }
+    }
+
+    if (!Array.isArray(xfa) || xfa.length === 0) {
+      return null;
+    }
+
+    for (let i = 0, ii = xfa.length; i < ii; i += 2) {
+      let name;
+
+      if (i === 0) {
+        name = "xdp:xdp";
+      } else if (i === ii - 2) {
+        name = "/xdp:xdp";
+      } else {
+        name = xfa[i];
+      }
+
+      if (!entries.hasOwnProperty(name)) {
+        continue;
+      }
+
+      const data = this.xref.fetchIfRef(xfa[i + 1]);
+
+      if (!(0, _primitives.isStream)(data) || data.isEmpty) {
+        continue;
+      }
+
+      try {
+        entries[name] = (0, _util.stringToUTF8String)((0, _util.bytesToString)(data.getBytes()));
+      } catch (_) {
+        (0, _util.warn)("XFA - Invalid utf-8 string.");
+        return null;
+      }
+    }
+
+    return entries;
+  }
+
+  get xfaFactory() {
+    if (this.pdfManager.enableXfa && this.formInfo.hasXfa && !this.formInfo.hasAcroForm) {
+      const data = this.xfaData;
+      return (0, _util.shadow)(this, "xfaFactory", data ? new _factory.XFAFactory(data) : null);
+    }
+
+    return (0, _util.shadow)(this, "xfaFaxtory", null);
+  }
+
+  get isPureXfa() {
+    return this.xfaFactory !== null;
+  }
+
   get formInfo() {
     const formInfo = {
+      hasFields: false,
       hasAcroForm: false,
       hasXfa: false
     };
@@ -3568,11 +3940,11 @@ class PDFDocument {
     }
 
     try {
-      const xfa = acroForm.get("XFA");
-      const hasXfa = Array.isArray(xfa) && xfa.length > 0 || (0, _primitives.isStream)(xfa) && !xfa.isEmpty;
-      formInfo.hasXfa = hasXfa;
       const fields = acroForm.get("Fields");
       const hasFields = Array.isArray(fields) && fields.length > 0;
+      formInfo.hasFields = hasFields;
+      const xfa = acroForm.get("XFA");
+      formInfo.hasXfa = Array.isArray(xfa) && xfa.length > 0 || (0, _primitives.isStream)(xfa) && 
!xfa.isEmpty;
       const sigFlags = acroForm.get("SigFlags");
 
       const hasOnlyDocumentSignatures = !!(sigFlags & 0x1) && this._hasOnlyDocumentSignatures(fields);
@@ -3583,7 +3955,7 @@ class PDFDocument {
         throw ex;
       }
 
-      (0, _util.info)("Cannot fetch form information.");
+      (0, _util.warn)(`Cannot fetch form information: "${ex}".`);
     }
 
     return (0, _util.shadow)(this, "formInfo", formInfo);
@@ -3714,6 +4086,23 @@ class PDFDocument {
       catalog,
       linearization
     } = this;
+
+    if (this.xfaFactory) {
+      return Promise.resolve(new Page({
+        pdfManager: this.pdfManager,
+        xref: this.xref,
+        pageIndex,
+        pageDict: _primitives.Dict.empty,
+        ref: null,
+        globalIdFactory: this._globalIdFactory,
+        fontCache: catalog.fontCache,
+        builtInCMapCache: catalog.builtInCMapCache,
+        globalImageCache: catalog.globalImageCache,
+        nonBlendModesSet: catalog.nonBlendModesSet,
+        xfaFactory: this.xfaFactory
+      }));
+    }
+
     const promise = linearization && linearization.pageFirst === pageIndex ? 
this._getLinearizationPage(pageIndex) : catalog.getPageDict(pageIndex);
     return this._pagePromises[pageIndex] = promise.then(([pageDict, ref]) => {
       return new Page({
@@ -3725,7 +4114,9 @@ class PDFDocument {
         globalIdFactory: this._globalIdFactory,
         fontCache: catalog.fontCache,
         builtInCMapCache: catalog.builtInCMapCache,
-        globalImageCache: catalog.globalImageCache
+        globalImageCache: catalog.globalImageCache,
+        nonBlendModesSet: catalog.nonBlendModesSet,
+        xfaFactory: null
       });
     });
   }
@@ -3748,36 +4139,123 @@ class PDFDocument {
     return this.catalog ? this.catalog.cleanup(manuallyTriggered) : (0, _primitives.clearPrimitiveCaches)();
   }
 
+  _collectFieldObjects(name, fieldRef, promises) {
+    const field = this.xref.fetchIfRef(fieldRef);
+
+    if (field.has("T")) {
+      const partName = (0, _util.stringToPDFString)(field.get("T"));
+
+      if (name === "") {
+        name = partName;
+      } else {
+        name = `${name}.${partName}`;
+      }
+    }
+
+    if (!promises.has(name)) {
+      promises.set(name, []);
+    }
+
+    promises.get(name).push(_annotation.AnnotationFactory.create(this.xref, fieldRef, this.pdfManager, 
this._localIdFactory, true).then(annotation => annotation && annotation.getFieldObject()).catch(function 
(reason) {
+      (0, _util.warn)(`_collectFieldObjects: "${reason}".`);
+      return null;
+    }));
+
+    if (field.has("Kids")) {
+      const kids = field.get("Kids");
+
+      for (const kid of kids) {
+        this._collectFieldObjects(name, kid, promises);
+      }
+    }
+  }
+
+  get fieldObjects() {
+    if (!this.formInfo.hasFields) {
+      return (0, _util.shadow)(this, "fieldObjects", Promise.resolve(null));
+    }
+
+    const allFields = Object.create(null);
+    const fieldPromises = new Map();
+
+    for (const fieldRef of this.catalog.acroForm.get("Fields")) {
+      this._collectFieldObjects("", fieldRef, fieldPromises);
+    }
+
+    const allPromises = [];
+
+    for (const [name, promises] of fieldPromises) {
+      allPromises.push(Promise.all(promises).then(fields => {
+        fields = fields.filter(field => !!field);
+
+        if (fields.length > 0) {
+          allFields[name] = fields;
+        }
+      }));
+    }
+
+    return (0, _util.shadow)(this, "fieldObjects", Promise.all(allPromises).then(() => allFields));
+  }
+
+  get hasJSActions() {
+    return (0, _util.shadow)(this, "hasJSActions", this.fieldObjects.then(fieldObjects => {
+      return fieldObjects !== null && Object.values(fieldObjects).some(fieldObject => 
fieldObject.some(object => object.actions !== null)) || !!this.catalog.jsActions;
+    }));
+  }
+
+  get calculationOrderIds() {
+    const acroForm = this.catalog.acroForm;
+
+    if (!acroForm || !acroForm.has("CO")) {
+      return (0, _util.shadow)(this, "calculationOrderIds", null);
+    }
+
+    const calculationOrder = acroForm.get("CO");
+
+    if (!Array.isArray(calculationOrder) || calculationOrder.length === 0) {
+      return (0, _util.shadow)(this, "calculationOrderIds", null);
+    }
+
+    const ids = calculationOrder.filter(_primitives.isRef).map(ref => ref.toString());
+
+    if (ids.length === 0) {
+      return (0, _util.shadow)(this, "calculationOrderIds", null);
+    }
+
+    return (0, _util.shadow)(this, "calculationOrderIds", ids);
+  }
+
 }
 
 exports.PDFDocument = PDFDocument;
 
 /***/ }),
 /* 10 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
-exports.FileSpec = exports.XRef = exports.ObjectLoader = exports.Catalog = void 0;
+}));
+exports.XRef = exports.ObjectLoader = exports.FileSpec = exports.Catalog = void 0;
 
 var _util = __w_pdfjs_require__(2);
 
 var _primitives = __w_pdfjs_require__(5);
 
-var _parser = __w_pdfjs_require__(11);
-
 var _core_utils = __w_pdfjs_require__(8);
 
+var _parser = __w_pdfjs_require__(11);
+
 var _crypto = __w_pdfjs_require__(22);
 
 var _colorspace = __w_pdfjs_require__(23);
 
 var _image_utils = __w_pdfjs_require__(24);
 
+var _metadata_parser = __w_pdfjs_require__(25);
+
 function fetchDestination(dest) {
   return (0, _primitives.isDict)(dest) ? dest.get("D") : dest;
 }
@@ -3796,6 +4274,7 @@ class Catalog {
     this.builtInCMapCache = new Map();
     this.globalImageCache = new _image_utils.GlobalImageCache();
     this.pageKidsCountCache = new _primitives.RefSetCache();
+    this.nonBlendModesSet = new _primitives.RefSet();
   }
 
   get version() {
@@ -3857,15 +4336,19 @@ class Catalog {
 
     const suppressEncryption = !(this.xref.encrypt && this.xref.encrypt.encryptMetadata);
     const stream = this.xref.fetch(streamRef, suppressEncryption);
-    let metadata;
+    let metadata = null;
 
-    if (stream && (0, _primitives.isDict)(stream.dict)) {
+    if ((0, _primitives.isStream)(stream) && (0, _primitives.isDict)(stream.dict)) {
       const type = stream.dict.get("Type");
       const subtype = stream.dict.get("Subtype");
 
       if ((0, _primitives.isName)(type, "Metadata") && (0, _primitives.isName)(subtype, "XML")) {
         try {
-          metadata = (0, _util.stringToUTF8String)((0, _util.bytesToString)(stream.getBytes()));
+          const data = (0, _util.stringToUTF8String)((0, _util.bytesToString)(stream.getBytes()));
+
+          if (data) {
+            metadata = new _metadata_parser.MetadataParser(data).serializable;
+          }
         } catch (e) {
           if (e instanceof _core_utils.MissingDataException) {
             throw e;
@@ -3879,6 +4362,52 @@ class Catalog {
     return (0, _util.shadow)(this, "metadata", metadata);
   }
 
+  get markInfo() {
+    let markInfo = null;
+
+    try {
+      markInfo = this._readMarkInfo();
+    } catch (ex) {
+      if (ex instanceof _core_utils.MissingDataException) {
+        throw ex;
+      }
+
+      (0, _util.warn)("Unable to read mark info.");
+    }
+
+    return (0, _util.shadow)(this, "markInfo", markInfo);
+  }
+
+  _readMarkInfo() {
+    const obj = this._catDict.get("MarkInfo");
+
+    if (!(0, _primitives.isDict)(obj)) {
+      return null;
+    }
+
+    const markInfo = Object.assign(Object.create(null), {
+      Marked: false,
+      UserProperties: false,
+      Suspects: false
+    });
+
+    for (const key in markInfo) {
+      if (!obj.has(key)) {
+        continue;
+      }
+
+      const value = obj.get(key);
+
+      if (!(0, _util.isBool)(value)) {
+        continue;
+      }
+
+      markInfo[key] = value;
+    }
+
+    return markInfo;
+  }
+
   get toplevelPagesDict() {
     const pagesObj = this._catDict.get("Pages");
 
@@ -4581,7 +5110,7 @@ class Catalog {
   get openAction() {
     const obj = this._catDict.get("OpenAction");
 
-    let openAction = null;
+    const openAction = Object.create(null);
 
     if ((0, _primitives.isDict)(obj)) {
       const destDict = new _primitives.Dict(this.xref);
@@ -4597,27 +5126,15 @@ class Catalog {
       });
 
       if (Array.isArray(resultObj.dest)) {
-        if (!openAction) {
-          openAction = Object.create(null);
-        }
-
         openAction.dest = resultObj.dest;
       } else if (resultObj.action) {
-        if (!openAction) {
-          openAction = Object.create(null);
-        }
-
         openAction.action = resultObj.action;
       }
     } else if (Array.isArray(obj)) {
-      if (!openAction) {
-        openAction = Object.create(null);
-      }
-
       openAction.dest = obj;
     }
 
-    return (0, _util.shadow)(this, "openAction", openAction);
+    return (0, _util.shadow)(this, "openAction", (0, _util.objectSize)(openAction) > 0 ? openAction : null);
   }
 
   get attachments() {
@@ -4643,12 +5160,12 @@ class Catalog {
     return (0, _util.shadow)(this, "attachments", attachments);
   }
 
-  get javaScript() {
+  _collectJavaScript() {
     const obj = this._catDict.get("Names");
 
     let javaScript = null;
 
-    function appendIfJavaScriptDict(jsDict) {
+    function appendIfJavaScriptDict(name, jsDict) {
       const type = jsDict.get("S");
 
       if (!(0, _primitives.isName)(type, "JavaScript")) {
@@ -4663,11 +5180,11 @@ class Catalog {
         return;
       }
 
-      if (!javaScript) {
-        javaScript = [];
+      if (javaScript === null) {
+        javaScript = Object.create(null);
       }
 
-      javaScript.push((0, _util.stringToPDFString)(js));
+      javaScript[name] = (0, _util.stringToPDFString)(js);
     }
 
     if (obj && obj.has("JavaScript")) {
@@ -4678,7 +5195,7 @@ class Catalog {
         const jsDict = names[name];
 
         if ((0, _primitives.isDict)(jsDict)) {
-          appendIfJavaScriptDict(jsDict);
+          appendIfJavaScriptDict(name, jsDict);
         }
       }
     }
@@ -4686,10 +5203,38 @@ class Catalog {
     const openAction = this._catDict.get("OpenAction");
 
     if ((0, _primitives.isDict)(openAction) && (0, _primitives.isName)(openAction.get("S"), "JavaScript")) {
-      appendIfJavaScriptDict(openAction);
+      appendIfJavaScriptDict("OpenAction", openAction);
+    }
+
+    return javaScript;
+  }
+
+  get javaScript() {
+    const javaScript = this._collectJavaScript();
+
+    return (0, _util.shadow)(this, "javaScript", javaScript ? Object.values(javaScript) : null);
+  }
+
+  get jsActions() {
+    const js = this._collectJavaScript();
+
+    let actions = (0, _core_utils.collectActions)(this.xref, this._catDict, _util.DocumentActionEventType);
+
+    if (!actions && js) {
+      actions = Object.create(null);
+    }
+
+    if (actions && js) {
+      for (const [key, val] of Object.entries(js)) {
+        if (key in actions) {
+          actions[key].push(val);
+        } else {
+          actions[key] = [val];
+        }
+      }
     }
 
-    return (0, _util.shadow)(this, "javaScript", javaScript);
+    return (0, _util.shadow)(this, "jsActions", actions);
   }
 
   fontFallback(id, handler) {
@@ -4711,6 +5256,7 @@ class Catalog {
     (0, _primitives.clearPrimitiveCaches)();
     this.globalImageCache.clear(manuallyTriggered);
     this.pageKidsCountCache.clear();
+    this.nonBlendModesSet.clear();
     const promises = [];
     this.fontCache.forEach(function (promise) {
       promises.push(promise);
@@ -4719,7 +5265,7 @@ class Catalog {
       for (const {
         dict
       } of translatedFonts) {
-        delete dict.translated;
+        delete dict.cacheKey;
       }
 
       this.fontCache.clear();
@@ -4948,8 +5494,20 @@ class Catalog {
         url,
         dest;
 
-    if (!(0, _primitives.isDict)(action) && destDict.has("Dest")) {
-      action = destDict.get("Dest");
+    if (!(0, _primitives.isDict)(action)) {
+      if (destDict.has("Dest")) {
+        action = destDict.get("Dest");
+      } else {
+        action = destDict.get("AA");
+
+        if ((0, _primitives.isDict)(action)) {
+          if (action.has("D")) {
+            action = action.get("D");
+          } else if (action.has("U")) {
+            action = action.get("U");
+          }
+        }
+      }
     }
 
     if ((0, _primitives.isDict)(action)) {
@@ -5050,7 +5608,11 @@ class Catalog {
           }
 
         default:
-          (0, _util.warn)(`parseDestDictionary: unsupported action type "${actionName}".`);
+          if (actionName === "JavaScript" || actionName === "ResetForm" || actionName === "SubmitForm") {
+            break;
+          }
+
+          (0, _util.warn)(`parseDestDictionary - unsupported action: "${actionName}".`);
           break;
       }
     } else if (destDict.has("Dest")) {
@@ -5510,16 +6072,14 @@ var XRef = function XRefClosure() {
         }
       }
 
-      var i, ii;
-
-      for (i = 0, ii = xrefStms.length; i < ii; ++i) {
+      for (let i = 0, ii = xrefStms.length; i < ii; ++i) {
         this.startXRefQueue.push(xrefStms[i]);
         this.readXRef(true);
       }
 
       let trailerDict;
 
-      for (i = 0, ii = trailers.length; i < ii; ++i) {
+      for (let i = 0, ii = trailers.length; i < ii; ++i) {
         stream.pos = trailers[i];
         const parser = new _parser.Parser({
           lexer: new _parser.Lexer(stream),
@@ -5539,19 +6099,25 @@ var XRef = function XRefClosure() {
           continue;
         }
 
-        let rootDict;
-
         try {
-          rootDict = dict.get("Root");
-        } catch (ex) {
-          if (ex instanceof _core_utils.MissingDataException) {
-            throw ex;
+          const rootDict = dict.get("Root");
+
+          if (!(rootDict instanceof _primitives.Dict)) {
+            continue;
           }
 
-          continue;
-        }
+          const pagesDict = rootDict.get("Pages");
 
-        if (!(0, _primitives.isDict)(rootDict) || !rootDict.has("Pages")) {
+          if (!(pagesDict instanceof _primitives.Dict)) {
+            continue;
+          }
+
+          const pagesCount = pagesDict.get("Count");
+
+          if (!Number.isInteger(pagesCount)) {
+            continue;
+          }
+        } catch (ex) {
           continue;
         }
 
@@ -5771,12 +6337,13 @@ var XRef = function XRefClosure() {
         throw new _util.FormatError("invalid first and n parameters for ObjStm stream");
       }
 
-      const parser = new _parser.Parser({
+      let parser = new _parser.Parser({
         lexer: new _parser.Lexer(stream),
         xref: this,
         allowStreams: true
       });
       const nums = new Array(n);
+      const offsets = new Array(n);
 
       for (let i = 0; i < n; ++i) {
         const num = parser.getObj();
@@ -5792,18 +6359,27 @@ var XRef = function XRefClosure() {
         }
 
         nums[i] = num;
+        offsets[i] = offset;
       }
 
+      const start = (stream.start || 0) + first;
       const entries = new Array(n);
 
       for (let i = 0; i < n; ++i) {
-        const obj = parser.getObj();
-        entries[i] = obj;
+        const length = i < n - 1 ? offsets[i + 1] - offsets[i] : undefined;
 
-        if (parser.buf1 instanceof _primitives.Cmd && parser.buf1.cmd === "endobj") {
-          parser.shift();
+        if (length < 0) {
+          throw new _util.FormatError("Invalid offset in the ObjStm stream.");
         }
 
+        parser = new _parser.Parser({
+          lexer: new _parser.Lexer(stream.makeSubStream(start + offsets[i], length, stream.dict)),
+          xref: this,
+          allowStreams: true
+        });
+        const obj = parser.getObj();
+        entries[i] = obj;
+
         if ((0, _primitives.isStream)(obj)) {
           continue;
         }
@@ -6172,7 +6748,12 @@ const ObjectLoader = function () {
             currentNode = this.xref.fetch(currentNode);
           } catch (ex) {
             if (!(ex instanceof _core_utils.MissingDataException)) {
-              throw ex;
+              (0, _util.warn)(`ObjectLoader._walk - requesting all data: "${ex}".`);
+              this.refSet = null;
+              const {
+                manager
+              } = this.xref.stream;
+              return manager.requestAllChunks();
             }
 
             nodesToRevisit.push(currentNode);
@@ -6233,14 +6814,13 @@ exports.ObjectLoader = ObjectLoader;
 
 /***/ }),
 /* 11 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.Parser = exports.Linearization = exports.Lexer = void 0;
 
 var _stream = __w_pdfjs_require__(12);
@@ -7577,15 +8157,14 @@ exports.Linearization = Linearization;
 
 /***/ }),
 /* 12 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
-exports.LZWStream = exports.StringStream = exports.StreamsSequenceStream = exports.Stream = 
exports.RunLengthStream = exports.PredictorStream = exports.NullStream = exports.FlateStream = 
exports.DecodeStream = exports.DecryptStream = exports.AsciiHexStream = exports.Ascii85Stream = void 0;
+}));
+exports.StringStream = exports.StreamsSequenceStream = exports.Stream = exports.RunLengthStream = 
exports.PredictorStream = exports.NullStream = exports.LZWStream = exports.FlateStream = 
exports.DecryptStream = exports.DecodeStream = exports.AsciiHexStream = exports.Ascii85Stream = void 0;
 
 var _util = __w_pdfjs_require__(2);
 
@@ -7738,6 +8317,10 @@ var DecodeStream = function DecodeStreamClosure() {
   }
 
   DecodeStream.prototype = {
+    get length() {
+      (0, _util.unreachable)("Should not access DecodeStream.length");
+    },
+
     get isEmpty() {
       while (!this.eof && this.bufferLength === 0) {
         this.readBlock();
@@ -7841,10 +8424,16 @@ var DecodeStream = function DecodeStreamClosure() {
     },
 
     makeSubStream: function DecodeStream_makeSubStream(start, length, dict) {
-      var end = start + length;
+      if (length === undefined) {
+        while (!this.eof) {
+          this.readBlock();
+        }
+      } else {
+        var end = start + length;
 
-      while (this.bufferLength <= end && !this.eof) {
-        this.readBlock();
+        while (this.bufferLength <= end && !this.eof) {
+          this.readBlock();
+        }
       }
 
       return new Stream(this.buffer, start, length, dict);
@@ -8879,14 +9468,13 @@ exports.NullStream = NullStream;
 
 /***/ }),
 /* 13 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.CCITTFaxStream = void 0;
 
 var _primitives = __w_pdfjs_require__(5);
@@ -8895,7 +9483,7 @@ var _ccitt = __w_pdfjs_require__(14);
 
 var _stream = __w_pdfjs_require__(12);
 
-var CCITTFaxStream = function CCITTFaxStreamClosure() {
+const CCITTFaxStream = function CCITTFaxStreamClosure() {
   function CCITTFaxStream(str, maybeLength, params) {
     this.str = str;
     this.dict = str.dict;
@@ -8946,14 +9534,13 @@ exports.CCITTFaxStream = CCITTFaxStream;
 
 /***/ }),
 /* 14 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.CCITTFaxDecoder = void 0;
 
 var _util = __w_pdfjs_require__(2);
@@ -9651,14 +10238,13 @@ exports.CCITTFaxDecoder = CCITTFaxDecoder;
 
 /***/ }),
 /* 15 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.Jbig2Stream = void 0;
 
 var _primitives = __w_pdfjs_require__(5);
@@ -9735,14 +10321,13 @@ exports.Jbig2Stream = Jbig2Stream;
 
 /***/ }),
 /* 16 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.Jbig2Image = void 0;
 
 var _util = __w_pdfjs_require__(2);
@@ -11943,14 +12528,13 @@ exports.Jbig2Image = Jbig2Image;
 
 /***/ }),
 /* 17 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/***/ ((__unused_webpack_module, exports) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.ArithmeticDecoder = void 0;
 const QeTable = [{
   qe: 0x5601,
@@ -12297,14 +12881,13 @@ exports.ArithmeticDecoder = ArithmeticDecoder;
 
 /***/ }),
 /* 18 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.JpegStream = void 0;
 
 var _stream = __w_pdfjs_require__(12);
@@ -12404,14 +12987,13 @@ exports.JpegStream = JpegStream;
 
 /***/ }),
 /* 19 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.JpegImage = void 0;
 
 var _util = __w_pdfjs_require__(2);
@@ -13417,7 +13999,7 @@ var JpegImage = function JpegImageClosure() {
               break;
             }
 
-            if (offset >= data.length - 1) {
+            if (!nextFileMarker || offset >= data.length - 1) {
               (0, _util.warn)("JpegImage.parse - reached the end of the image data " + "without finding an 
EOI marker (0xFFD9).");
               break markerLoop;
             }
@@ -13650,14 +14232,13 @@ exports.JpegImage = JpegImage;
 
 /***/ }),
 /* 20 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.JpxStream = void 0;
 
 var _stream = __w_pdfjs_require__(12);
@@ -13737,14 +14318,13 @@ exports.JpxStream = JpxStream;
 
 /***/ }),
 /* 21 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.JpxImage = void 0;
 
 var _util = __w_pdfjs_require__(2);
@@ -14134,7 +14714,7 @@ var JpxImage = function JpxImageClosure() {
 
               if (unsupported.length > 0) {
                 doNotRecover = true;
-                throw new Error("Unsupported COD options (" + unsupported.join(", ") + ")");
+                (0, _util.warn)(`JPX: Unsupported COD options (${unsupported.join(", ")}).`);
               }
 
               if (context.mainHeader) {
@@ -14178,6 +14758,9 @@ var JpxImage = function JpxImageClosure() {
               parseTilePackets(context, data, position, length);
               break;
 
+            case 0xff53:
+              (0, _util.warn)("JPX: Codestream code 0xFF53 (COC) is not implemented.");
+
             case 0xff55:
             case 0xff57:
             case 0xff58:
@@ -14185,9 +14768,6 @@ var JpxImage = function JpxImageClosure() {
               length = (0, _core_utils.readUint16)(data, position);
               break;
 
-            case 0xff53:
-              throw new Error("Codestream code 0xFF53 (COC) is not implemented");
-
             default:
               throw new Error("Unknown codestream code: " + code.toString(16));
           }
@@ -14198,7 +14778,7 @@ var JpxImage = function JpxImageClosure() {
         if (doNotRecover || this.failOnCorruptedImage) {
           throw new JpxError(e.message);
         } else {
-          (0, _util.warn)("JPX: Trying to recover from: " + e.message);
+          (0, _util.warn)(`JPX: Trying to recover from: "${e.message}".`);
         }
       }
 
@@ -16073,15 +16653,15 @@ exports.JpxImage = JpxImage;
 
 /***/ }),
 /* 22 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
-exports.calculateSHA512 = exports.calculateSHA384 = exports.calculateSHA256 = exports.calculateMD5 = 
exports.PDF20 = exports.PDF17 = exports.CipherTransformFactory = exports.ARCFourCipher = exports.AES256Cipher 
= exports.AES128Cipher = void 0;
+}));
+exports.calculateSHA384 = calculateSHA384;
+exports.PDF20 = exports.PDF17 = exports.CipherTransformFactory = exports.calculateSHA512 = 
exports.calculateSHA256 = exports.calculateMD5 = exports.ARCFourCipher = exports.AES256Cipher = 
exports.AES128Cipher = void 0;
 
 var _util = __w_pdfjs_require__(2);
 
@@ -16089,8 +16669,8 @@ var _primitives = __w_pdfjs_require__(5);
 
 var _stream = __w_pdfjs_require__(12);
 
-var ARCFourCipher = function ARCFourCipherClosure() {
-  function ARCFourCipher(key) {
+class ARCFourCipher {
+  constructor(key) {
     this.a = 0;
     this.b = 0;
     var s = new Uint8Array(256);
@@ -16113,36 +16693,40 @@ var ARCFourCipher = function ARCFourCipherClosure() {
     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];
-      }
+  encryptBlock(data) {
+    var i,
+        n = data.length,
+        tmp,
+        tmp2;
+    var a = this.a,
+        b = this.b,
+        s = this.s;
+    var output = new Uint8Array(n);
 
-      this.a = a;
-      this.b = b;
-      return output;
+    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];
     }
-  };
-  ARCFourCipher.prototype.decryptBlock = ARCFourCipher.prototype.encryptBlock;
-  ARCFourCipher.prototype.encrypt = ARCFourCipher.prototype.encryptBlock;
-  return ARCFourCipher;
-}();
+
+    this.a = a;
+    this.b = b;
+    return output;
+  }
+
+  decryptBlock(data) {
+    return this.encryptBlock(data);
+  }
+
+  encrypt(data) {
+    return this.encryptBlock(data);
+  }
+
+}
 
 exports.ARCFourCipher = ARCFourCipher;
 
@@ -16230,90 +16814,97 @@ var calculateMD5 = function calculateMD5Closure() {
 
 exports.calculateMD5 = calculateMD5;
 
-var Word64 = function Word64Closure() {
-  function Word64(highInteger, lowInteger) {
+class Word64 {
+  constructor(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;
+  and(word) {
+    this.high &= word.high;
+    this.low &= word.low;
+  }
 
-      if (places & 32) {
-        high = this.low;
-        low = this.high;
-      } else {
-        low = this.low;
-        high = this.high;
-      }
+  xor(word) {
+    this.high ^= word.high;
+    this.low ^= word.low;
+  }
 
-      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);
+  or(word) {
+    this.high |= word.high;
+    this.low |= word.low;
+  }
 
-      if (lowAdd > 0xffffffff) {
-        highAdd += 1;
-      }
+  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;
+    }
+  }
 
-      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;
+  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;
     }
-  };
-  return 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() {
+    this.high = ~this.high;
+    this.low = ~this.low;
+  }
+
+  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(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(word) {
+    this.high = word.high;
+    this.low = word.low;
+  }
+
+}
 
 var calculateSHA256 = function calculateSHA256Closure() {
   function rotr(x, n) {
@@ -16499,8 +17090,7 @@ var calculateSHA512 = function calculateSHA512Closure() {
 
   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(0xb
 f597fc7, 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;
+  function hash(data, offset, length, mode384 = false) {
     var h0, h1, h2, h3, h4, h5, h6, h7;
 
     if (!mode384) {
@@ -16664,29 +17254,20 @@ var calculateSHA512 = function calculateSHA512Closure() {
 
 exports.calculateSHA512 = calculateSHA512;
 
-var calculateSHA384 = function calculateSHA384Closure() {
-  function hash(data, offset, length) {
-    return calculateSHA512(data, offset, length, true);
-  }
-
-  return hash;
-}();
+function calculateSHA384(data, offset, length) {
+  return calculateSHA512(data, offset, length, true);
+}
 
-exports.calculateSHA384 = calculateSHA384;
+class NullCipher {
+  decryptBlock(data) {
+    return data;
+  }
 
-var NullCipher = function NullCipherClosure() {
-  function NullCipher() {}
+  encrypt(data) {
+    return data;
+  }
 
-  NullCipher.prototype = {
-    decryptBlock: function NullCipher_decryptBlock(data) {
-      return data;
-    },
-    encrypt: function NullCipher_encrypt(data) {
-      return data;
-    }
-  };
-  return NullCipher;
-}();
+}
 
 class AESBaseCipher {
   constructor() {
@@ -17116,83 +17697,66 @@ class AES256Cipher extends AESBaseCipher {
 
 exports.AES256Cipher = AES256Cipher;
 
-var PDF17 = function PDF17Closure() {
-  function compareByteArrays(array1, array2) {
-    if (array1.length !== array2.length) {
-      return false;
-    }
+class 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 (0, _util.isArrayEqual)(result, ownerPassword);
+  }
 
-    for (var i = 0; i < array1.length; i++) {
-      if (array1[i] !== array2[i]) {
-        return false;
-      }
-    }
+  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 (0, _util.isArrayEqual)(result, userPassword);
+  }
 
-    return true;
+  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));
   }
 
-  function PDF17() {}
+  getUserKey(password, userKeySalt, userEncryption) {
+    var hashData = new Uint8Array(password.length + 8);
+    hashData.set(password, 0);
+    hashData.set(userKeySalt, password.length);
+    var key = calculateSHA256(hashData, 0, hashData.length);
+    var cipher = new AES256Cipher(key);
+    return cipher.decryptBlock(userEncryption, false, new Uint8Array(16));
+  }
 
-  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);
-      var key = calculateSHA256(hashData, 0, hashData.length);
-      var cipher = new AES256Cipher(key);
-      return cipher.decryptBlock(userEncryption, false, new Uint8Array(16));
-    }
-  };
-  return PDF17;
-}();
+}
 
 exports.PDF17 = 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) {
     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);
+      const combinedLength = password.length + k.length + userBytes.length,
+            combinedArray = new Uint8Array(combinedLength);
+      let writeOffset = 0;
+      combinedArray.set(password, writeOffset);
+      writeOffset += password.length;
+      combinedArray.set(k, writeOffset);
+      writeOffset += k.length;
+      combinedArray.set(userBytes, writeOffset);
+      var k1 = new Uint8Array(combinedLength * 64);
 
-      for (var j = 0, pos = 0; j < 64; j++, pos += arrayLength) {
-        k1.set(array, pos);
+      for (var j = 0, pos = 0; j < 64; j++, pos += combinedLength) {
+        k1.set(combinedArray, pos);
       }
 
       var cipher = new AES128Cipher(k.subarray(0, 16));
@@ -17220,42 +17784,29 @@ var PDF20 = function PDF20Closure() {
     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;
-      }
+  class PDF20 {
+    hash(password, concatBytes, userBytes) {
+      return calculatePDF20Hash(password, concatBytes, userBytes);
     }
 
-    return true;
-  }
-
-  PDF20.prototype = {
-    hash: function PDF20_hash(password, concatBytes, userBytes) {
-      return calculatePDF20Hash(password, concatBytes, userBytes);
-    },
-    checkOwnerPassword: function PDF20_checkOwnerPassword(password, ownerValidationSalt, userBytes, 
ownerPassword) {
+    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) {
+      return (0, _util.isArrayEqual)(result, ownerPassword);
+    }
+
+    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) {
+      return (0, _util.isArrayEqual)(result, userPassword);
+    }
+
+    getOwnerKey(password, ownerKeySalt, userBytes, ownerEncryption) {
       var hashData = new Uint8Array(password.length + 56);
       hashData.set(password, 0);
       hashData.set(ownerKeySalt, password.length);
@@ -17263,8 +17814,9 @@ var PDF20 = function PDF20Closure() {
       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) {
+    }
+
+    getUserKey(password, userKeySalt, userEncryption) {
       var hashData = new Uint8Array(password.length + 8);
       hashData.set(password, 0);
       hashData.set(userKeySalt, password.length);
@@ -17272,67 +17824,69 @@ var PDF20 = function PDF20Closure() {
       var cipher = new AES256Cipher(key);
       return cipher.decryptBlock(userEncryption, false, new Uint8Array(16));
     }
-  };
+
+  }
+
   return PDF20;
 }();
 
 exports.PDF20 = PDF20;
 
-var CipherTransform = function CipherTransformClosure() {
-  function CipherTransform(stringCipherConstructor, streamCipherConstructor) {
+class CipherTransform {
+  constructor(stringCipherConstructor, streamCipherConstructor) {
     this.StringCipherConstructor = stringCipherConstructor;
     this.StreamCipherConstructor = streamCipherConstructor;
   }
 
-  CipherTransform.prototype = {
-    createStream: function CipherTransform_createStream(stream, length) {
-      var cipher = new this.StreamCipherConstructor();
-      return new _stream.DecryptStream(stream, length, function cipherTransformDecryptStream(data, finalize) 
{
-        return cipher.decryptBlock(data, finalize);
-      });
-    },
-    decryptString: function CipherTransform_decryptString(s) {
-      var cipher = new this.StringCipherConstructor();
-      var data = (0, _util.stringToBytes)(s);
-      data = cipher.decryptBlock(data, true);
-      return (0, _util.bytesToString)(data);
-    },
-    encryptString: function CipherTransform_encryptString(s) {
-      const cipher = new this.StringCipherConstructor();
+  createStream(stream, length) {
+    var cipher = new this.StreamCipherConstructor();
+    return new _stream.DecryptStream(stream, length, function cipherTransformDecryptStream(data, finalize) {
+      return cipher.decryptBlock(data, finalize);
+    });
+  }
 
-      if (cipher instanceof AESBaseCipher) {
-        const strLen = s.length;
-        const pad = 16 - strLen % 16;
+  decryptString(s) {
+    var cipher = new this.StringCipherConstructor();
+    var data = (0, _util.stringToBytes)(s);
+    data = cipher.decryptBlock(data, true);
+    return (0, _util.bytesToString)(data);
+  }
 
-        if (pad !== 16) {
-          s = s.padEnd(16 * Math.ceil(strLen / 16), String.fromCharCode(pad));
-        }
+  encryptString(s) {
+    const cipher = new this.StringCipherConstructor();
 
-        const iv = new Uint8Array(16);
+    if (cipher instanceof AESBaseCipher) {
+      const strLen = s.length;
+      const pad = 16 - strLen % 16;
 
-        if (typeof crypto !== "undefined") {
-          crypto.getRandomValues(iv);
-        } else {
-          for (let i = 0; i < 16; i++) {
-            iv[i] = Math.floor(256 * Math.random());
-          }
-        }
+      if (pad !== 16) {
+        s = s.padEnd(16 * Math.ceil(strLen / 16), String.fromCharCode(pad));
+      }
 
-        let data = (0, _util.stringToBytes)(s);
-        data = cipher.encrypt(data, iv);
-        const buf = new Uint8Array(16 + data.length);
-        buf.set(iv);
-        buf.set(data, 16);
-        return (0, _util.bytesToString)(buf);
+      const iv = new Uint8Array(16);
+
+      if (typeof crypto !== "undefined") {
+        crypto.getRandomValues(iv);
+      } else {
+        for (let i = 0; i < 16; i++) {
+          iv[i] = Math.floor(256 * Math.random());
+        }
       }
 
       let data = (0, _util.stringToBytes)(s);
-      data = cipher.encrypt(data);
-      return (0, _util.bytesToString)(data);
+      data = cipher.encrypt(data, iv);
+      const buf = new Uint8Array(16 + data.length);
+      buf.set(iv);
+      buf.set(data, 16);
+      return (0, _util.bytesToString)(buf);
     }
-  };
-  return CipherTransform;
-}();
+
+    let data = (0, _util.stringToBytes)(s);
+    data = cipher.encrypt(data);
+    return (0, _util.bytesToString)(data);
+  }
+
+}
 
 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]);
@@ -17509,111 +18063,7 @@ var CipherTransformFactory = function CipherTransformFactoryClosure() {
 
   var identityName = _primitives.Name.get("Identity");
 
-  function CipherTransformFactory(dict, fileId, password) {
-    var filter = dict.get("Filter");
-
-    if (!(0, _primitives.isName)(filter, "Standard")) {
-      throw new _util.FormatError("unknown encryption method");
-    }
-
-    this.dict = dict;
-    var algorithm = dict.get("V");
-
-    if (!Number.isInteger(algorithm) || algorithm !== 1 && algorithm !== 2 && algorithm !== 4 && algorithm 
!== 5) {
-      throw new _util.FormatError("unsupported encryption algorithm");
-    }
-
-    this.algorithm = algorithm;
-    var keyLength = dict.get("Length");
-
-    if (!keyLength) {
-      if (algorithm <= 3) {
-        keyLength = 40;
-      } else {
-        var cfDict = dict.get("CF");
-        var streamCryptoName = dict.get("StmF");
-
-        if ((0, _primitives.isDict)(cfDict) && (0, _primitives.isName)(streamCryptoName)) {
-          cfDict.suppressEncryption = true;
-          var handlerDict = cfDict.get(streamCryptoName.name);
-          keyLength = handlerDict && handlerDict.get("Length") || 128;
-
-          if (keyLength < 40) {
-            keyLength <<= 3;
-          }
-        }
-      }
-    }
-
-    if (!Number.isInteger(keyLength) || keyLength < 40 || keyLength % 8 !== 0) {
-      throw new _util.FormatError("invalid key length");
-    }
-
-    var ownerPassword = (0, _util.stringToBytes)(dict.get("O")).subarray(0, 32);
-    var userPassword = (0, _util.stringToBytes)(dict.get("U")).subarray(0, 32);
-    var flags = dict.get("P");
-    var revision = dict.get("R");
-    var encryptMetadata = (algorithm === 4 || algorithm === 5) && dict.get("EncryptMetadata") !== false;
-    this.encryptMetadata = encryptMetadata;
-    var fileIdBytes = (0, _util.stringToBytes)(fileId);
-    var passwordBytes;
-
-    if (password) {
-      if (revision === 6) {
-        try {
-          password = (0, _util.utf8StringToString)(password);
-        } catch (ex) {
-          (0, _util.warn)("CipherTransformFactory: " + "Unable to convert UTF8 encoded password.");
-        }
-      }
-
-      passwordBytes = (0, _util.stringToBytes)(password);
-    }
-
-    var encryptionKey;
-
-    if (algorithm !== 5) {
-      encryptionKey = prepareKeyData(fileIdBytes, passwordBytes, ownerPassword, userPassword, flags, 
revision, keyLength, encryptMetadata);
-    } else {
-      var ownerValidationSalt = (0, _util.stringToBytes)(dict.get("O")).subarray(32, 40);
-      var ownerKeySalt = (0, _util.stringToBytes)(dict.get("O")).subarray(40, 48);
-      var uBytes = (0, _util.stringToBytes)(dict.get("U")).subarray(0, 48);
-      var userValidationSalt = (0, _util.stringToBytes)(dict.get("U")).subarray(32, 40);
-      var userKeySalt = (0, _util.stringToBytes)(dict.get("U")).subarray(40, 48);
-      var ownerEncryption = (0, _util.stringToBytes)(dict.get("OE"));
-      var userEncryption = (0, _util.stringToBytes)(dict.get("UE"));
-      var perms = (0, _util.stringToBytes)(dict.get("Perms"));
-      encryptionKey = createEncryptionKey20(revision, passwordBytes, ownerPassword, ownerValidationSalt, 
ownerKeySalt, uBytes, userPassword, userValidationSalt, userKeySalt, ownerEncryption, userEncryption, perms);
-    }
-
-    if (!encryptionKey && !password) {
-      throw new _util.PasswordException("No password given", _util.PasswordResponses.NEED_PASSWORD);
-    } else if (!encryptionKey && password) {
-      var decodedPassword = decodeUserPassword(passwordBytes, ownerPassword, revision, keyLength);
-      encryptionKey = prepareKeyData(fileIdBytes, decodedPassword, ownerPassword, userPassword, flags, 
revision, keyLength, encryptMetadata);
-    }
-
-    if (!encryptionKey) {
-      throw new _util.PasswordException("Incorrect Password", _util.PasswordResponses.INCORRECT_PASSWORD);
-    }
-
-    this.encryptionKey = encryptionKey;
-
-    if (algorithm >= 4) {
-      var cf = dict.get("CF");
-
-      if ((0, _primitives.isDict)(cf)) {
-        cf.suppressEncryption = true;
-      }
-
-      this.cf = 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) {
+  function buildObjectKey(num, gen, encryptionKey, isAes = false) {
     var key = new Uint8Array(encryptionKey.length + 9),
         i,
         n;
@@ -17678,8 +18128,112 @@ var CipherTransformFactory = function CipherTransformFactoryClosure() {
     throw new _util.FormatError("Unknown crypto method");
   }
 
-  CipherTransformFactory.prototype = {
-    createCipherTransform: function CipherTransformFactory_createCipherTransform(num, gen) {
+  class CipherTransformFactory {
+    constructor(dict, fileId, password) {
+      var filter = dict.get("Filter");
+
+      if (!(0, _primitives.isName)(filter, "Standard")) {
+        throw new _util.FormatError("unknown encryption method");
+      }
+
+      this.dict = dict;
+      var algorithm = dict.get("V");
+
+      if (!Number.isInteger(algorithm) || algorithm !== 1 && algorithm !== 2 && algorithm !== 4 && algorithm 
!== 5) {
+        throw new _util.FormatError("unsupported encryption algorithm");
+      }
+
+      this.algorithm = algorithm;
+      var keyLength = dict.get("Length");
+
+      if (!keyLength) {
+        if (algorithm <= 3) {
+          keyLength = 40;
+        } else {
+          var cfDict = dict.get("CF");
+          var streamCryptoName = dict.get("StmF");
+
+          if ((0, _primitives.isDict)(cfDict) && (0, _primitives.isName)(streamCryptoName)) {
+            cfDict.suppressEncryption = true;
+            var handlerDict = cfDict.get(streamCryptoName.name);
+            keyLength = handlerDict && handlerDict.get("Length") || 128;
+
+            if (keyLength < 40) {
+              keyLength <<= 3;
+            }
+          }
+        }
+      }
+
+      if (!Number.isInteger(keyLength) || keyLength < 40 || keyLength % 8 !== 0) {
+        throw new _util.FormatError("invalid key length");
+      }
+
+      var ownerPassword = (0, _util.stringToBytes)(dict.get("O")).subarray(0, 32);
+      var userPassword = (0, _util.stringToBytes)(dict.get("U")).subarray(0, 32);
+      var flags = dict.get("P");
+      var revision = dict.get("R");
+      var encryptMetadata = (algorithm === 4 || algorithm === 5) && dict.get("EncryptMetadata") !== false;
+      this.encryptMetadata = encryptMetadata;
+      var fileIdBytes = (0, _util.stringToBytes)(fileId);
+      var passwordBytes;
+
+      if (password) {
+        if (revision === 6) {
+          try {
+            password = (0, _util.utf8StringToString)(password);
+          } catch (ex) {
+            (0, _util.warn)("CipherTransformFactory: " + "Unable to convert UTF8 encoded password.");
+          }
+        }
+
+        passwordBytes = (0, _util.stringToBytes)(password);
+      }
+
+      var encryptionKey;
+
+      if (algorithm !== 5) {
+        encryptionKey = prepareKeyData(fileIdBytes, passwordBytes, ownerPassword, userPassword, flags, 
revision, keyLength, encryptMetadata);
+      } else {
+        var ownerValidationSalt = (0, _util.stringToBytes)(dict.get("O")).subarray(32, 40);
+        var ownerKeySalt = (0, _util.stringToBytes)(dict.get("O")).subarray(40, 48);
+        var uBytes = (0, _util.stringToBytes)(dict.get("U")).subarray(0, 48);
+        var userValidationSalt = (0, _util.stringToBytes)(dict.get("U")).subarray(32, 40);
+        var userKeySalt = (0, _util.stringToBytes)(dict.get("U")).subarray(40, 48);
+        var ownerEncryption = (0, _util.stringToBytes)(dict.get("OE"));
+        var userEncryption = (0, _util.stringToBytes)(dict.get("UE"));
+        var perms = (0, _util.stringToBytes)(dict.get("Perms"));
+        encryptionKey = createEncryptionKey20(revision, passwordBytes, ownerPassword, ownerValidationSalt, 
ownerKeySalt, uBytes, userPassword, userValidationSalt, userKeySalt, ownerEncryption, userEncryption, perms);
+      }
+
+      if (!encryptionKey && !password) {
+        throw new _util.PasswordException("No password given", _util.PasswordResponses.NEED_PASSWORD);
+      } else if (!encryptionKey && password) {
+        var decodedPassword = decodeUserPassword(passwordBytes, ownerPassword, revision, keyLength);
+        encryptionKey = prepareKeyData(fileIdBytes, decodedPassword, ownerPassword, userPassword, flags, 
revision, keyLength, encryptMetadata);
+      }
+
+      if (!encryptionKey) {
+        throw new _util.PasswordException("Incorrect Password", _util.PasswordResponses.INCORRECT_PASSWORD);
+      }
+
+      this.encryptionKey = encryptionKey;
+
+      if (algorithm >= 4) {
+        var cf = dict.get("CF");
+
+        if ((0, _primitives.isDict)(cf)) {
+          cf.suppressEncryption = true;
+        }
+
+        this.cf = cf;
+        this.stmf = dict.get("StmF") || identityName;
+        this.strf = dict.get("StrF") || identityName;
+        this.eff = dict.get("EFF") || this.stmf;
+      }
+    }
+
+    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));
       }
@@ -17692,7 +18246,9 @@ var CipherTransformFactory = function CipherTransformFactoryClosure() {
 
       return new CipherTransform(cipherConstructor, cipherConstructor);
     }
-  };
+
+  }
+
   return CipherTransformFactory;
 }();
 
@@ -17700,14 +18256,13 @@ exports.CipherTransformFactory = CipherTransformFactory;
 
 /***/ }),
 /* 23 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.ColorSpace = void 0;
 
 var _util = __w_pdfjs_require__(2);
@@ -18638,7 +19193,7 @@ const LabCS = function LabCSClosure() {
     let result;
 
     if (x >= 6 / 29) {
-      result = x * x * x;
+      result = x ** 3;
     } else {
       result = 108 / 841 * (x - 4 / 29);
     }
@@ -18768,15 +19323,14 @@ const LabCS = function LabCSClosure() {
 
 /***/ }),
 /* 24 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
-exports.GlobalImageCache = exports.LocalGStateCache = exports.LocalFunctionCache = 
exports.LocalColorSpaceCache = exports.LocalImageCache = void 0;
+}));
+exports.LocalTilingPatternCache = exports.LocalImageCache = exports.LocalGStateCache = 
exports.LocalFunctionCache = exports.LocalColorSpaceCache = exports.GlobalImageCache = void 0;
 
 var _util = __w_pdfjs_require__(2);
 
@@ -18932,13 +19486,46 @@ class LocalGStateCache extends BaseLocalCache {
 
 exports.LocalGStateCache = LocalGStateCache;
 
+class LocalTilingPatternCache extends BaseLocalCache {
+  set(name, ref = null, data) {
+    if (!name) {
+      throw new Error('LocalTilingPatternCache.set - expected "name" argument.');
+    }
+
+    if (ref) {
+      if (this._imageCache.has(ref)) {
+        return;
+      }
+
+      this._nameRefMap.set(name, ref);
+
+      this._imageCache.put(ref, data);
+
+      return;
+    }
+
+    if (this._imageMap.has(name)) {
+      return;
+    }
+
+    this._imageMap.set(name, data);
+  }
+
+}
+
+exports.LocalTilingPatternCache = LocalTilingPatternCache;
+
 class GlobalImageCache {
   static get NUM_PAGES_THRESHOLD() {
     return (0, _util.shadow)(this, "NUM_PAGES_THRESHOLD", 2);
   }
 
-  static get MAX_IMAGES_TO_CACHE() {
-    return (0, _util.shadow)(this, "MAX_IMAGES_TO_CACHE", 10);
+  static get MIN_IMAGES_TO_CACHE() {
+    return (0, _util.shadow)(this, "MIN_IMAGES_TO_CACHE", 10);
+  }
+
+  static get MAX_BYTE_SIZE() {
+    return (0, _util.shadow)(this, "MAX_BYTE_SIZE", 40e6);
   }
 
   constructor() {
@@ -18946,6 +19533,28 @@ class GlobalImageCache {
     this._imageCache = new _primitives.RefSetCache();
   }
 
+  get _byteSize() {
+    let byteSize = 0;
+
+    this._imageCache.forEach(imageData => {
+      byteSize += imageData.byteSize;
+    });
+
+    return byteSize;
+  }
+
+  get _cacheLimitReached() {
+    if (this._imageCache.size < GlobalImageCache.MIN_IMAGES_TO_CACHE) {
+      return false;
+    }
+
+    if (this._byteSize < GlobalImageCache.MAX_BYTE_SIZE) {
+      return false;
+    }
+
+    return true;
+  }
+
   shouldCache(ref, pageIndex) {
     const pageIndexSet = this._refCache.get(ref);
 
@@ -18955,7 +19564,7 @@ class GlobalImageCache {
       return false;
     }
 
-    if (!this._imageCache.has(ref) && this._imageCache.size >= GlobalImageCache.MAX_IMAGES_TO_CACHE) {
+    if (!this._imageCache.has(ref) && this._cacheLimitReached) {
       return false;
     }
 
@@ -18974,6 +19583,20 @@ class GlobalImageCache {
     pageIndexSet.add(pageIndex);
   }
 
+  addByteSize(ref, byteSize) {
+    const imageData = this._imageCache.get(ref);
+
+    if (!imageData) {
+      return;
+    }
+
+    if (imageData.byteSize) {
+      return;
+    }
+
+    imageData.byteSize = byteSize;
+  }
+
   getData(ref, pageIndex) {
     const pageIndexSet = this._refCache.get(ref);
 
@@ -18985,12 +19608,14 @@ class GlobalImageCache {
       return null;
     }
 
-    if (!this._imageCache.has(ref)) {
+    const imageData = this._imageCache.get(ref);
+
+    if (!imageData) {
       return null;
     }
 
     pageIndexSet.add(pageIndex);
-    return this._imageCache.get(ref);
+    return imageData;
   }
 
   setData(ref, data) {
@@ -19002,8 +19627,8 @@ class GlobalImageCache {
       return;
     }
 
-    if (this._imageCache.size >= GlobalImageCache.MAX_IMAGES_TO_CACHE) {
-      (0, _util.info)("GlobalImageCache.setData - ignoring image above MAX_IMAGES_TO_CACHE.");
+    if (this._cacheLimitReached) {
+      (0, _util.warn)("GlobalImageCache.setData - cache limit reached.");
       return;
     }
 
@@ -19024,2504 +19649,3051 @@ exports.GlobalImageCache = GlobalImageCache;
 
 /***/ }),
 /* 25 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
-exports.getQuadPoints = getQuadPoints;
-exports.MarkupAnnotation = exports.AnnotationFactory = exports.AnnotationBorderStyle = exports.Annotation = 
void 0;
+}));
+exports.MetadataParser = void 0;
 
-var _util = __w_pdfjs_require__(2);
+var _xml_parser = __w_pdfjs_require__(26);
 
-var _obj = __w_pdfjs_require__(10);
+class MetadataParser {
+  constructor(data) {
+    data = this._repair(data);
+    const parser = new _xml_parser.SimpleXMLParser({
+      lowerCaseName: true
+    });
+    const xmlDocument = parser.parseFromString(data);
+    this._metadataMap = new Map();
+    this._data = data;
 
-var _primitives = __w_pdfjs_require__(5);
+    if (xmlDocument) {
+      this._parse(xmlDocument);
+    }
+  }
 
-var _colorspace = __w_pdfjs_require__(23);
+  _repair(data) {
+    return data.replace(/^[^<]+/, "").replace(/>\\376\\377([^<]+)/g, function (all, codes) {
+      const bytes = codes.replace(/\\([0-3])([0-7])([0-7])/g, function (code, d1, d2, d3) {
+        return String.fromCharCode(d1 * 64 + d2 * 8 + d3 * 1);
+      }).replace(/&(amp|apos|gt|lt|quot);/g, function (str, name) {
+        switch (name) {
+          case "amp":
+            return "&";
 
-var _core_utils = __w_pdfjs_require__(8);
+          case "apos":
+            return "'";
 
-var _operator_list = __w_pdfjs_require__(26);
+          case "gt":
+            return ">";
 
-var _stream = __w_pdfjs_require__(12);
+          case "lt":
+            return "<";
 
-var _writer = __w_pdfjs_require__(27);
+          case "quot":
+            return '"';
+        }
 
-class AnnotationFactory {
-  static create(xref, ref, pdfManager, idFactory) {
-    return pdfManager.ensureCatalog("acroForm").then(acroForm => {
-      return pdfManager.ensure(this, "_create", [xref, ref, pdfManager, idFactory, acroForm]);
+        throw new Error(`_repair: ${name} isn't defined.`);
+      });
+      const charBuf = [];
+
+      for (let i = 0, ii = bytes.length; i < ii; i += 2) {
+        const code = bytes.charCodeAt(i) * 256 + bytes.charCodeAt(i + 1);
+
+        if (code >= 32 && code < 127 && code !== 60 && code !== 62 && code !== 38) {
+          charBuf.push(String.fromCharCode(code));
+        } else {
+          charBuf.push("&#x" + (0x10000 + code).toString(16).substring(1) + ";");
+        }
+      }
+
+      return ">" + charBuf.join("");
     });
   }
 
-  static _create(xref, ref, pdfManager, idFactory, acroForm) {
-    const dict = xref.fetchIfRef(ref);
+  _getSequence(entry) {
+    const name = entry.nodeName;
 
-    if (!(0, _primitives.isDict)(dict)) {
-      return undefined;
+    if (name !== "rdf:bag" && name !== "rdf:seq" && name !== "rdf:alt") {
+      return null;
     }
 
-    const id = (0, _primitives.isRef)(ref) ? ref.toString() : `annot_${idFactory.createObjId()}`;
-    let subtype = dict.get("Subtype");
-    subtype = (0, _primitives.isName)(subtype) ? subtype.name : null;
-    const parameters = {
-      xref,
-      ref,
-      dict,
-      subtype,
-      id,
-      pdfManager,
-      acroForm: acroForm instanceof _primitives.Dict ? acroForm : _primitives.Dict.empty
-    };
+    return entry.childNodes.filter(node => node.nodeName === "rdf:li");
+  }
 
-    switch (subtype) {
-      case "Link":
-        return new LinkAnnotation(parameters);
+  _parseArray(entry) {
+    if (!entry.hasChildNodes()) {
+      return;
+    }
 
-      case "Text":
-        return new TextAnnotation(parameters);
+    const [seqNode] = entry.childNodes;
+    const sequence = this._getSequence(seqNode) || [];
 
-      case "Widget":
-        let fieldType = (0, _core_utils.getInheritableProperty)({
-          dict,
-          key: "FT"
-        });
-        fieldType = (0, _primitives.isName)(fieldType) ? fieldType.name : null;
+    this._metadataMap.set(entry.nodeName, sequence.map(node => node.textContent.trim()));
+  }
 
-        switch (fieldType) {
-          case "Tx":
-            return new TextWidgetAnnotation(parameters);
+  _parse(xmlDocument) {
+    let rdf = xmlDocument.documentElement;
 
-          case "Btn":
-            return new ButtonWidgetAnnotation(parameters);
+    if (rdf.nodeName !== "rdf:rdf") {
+      rdf = rdf.firstChild;
 
-          case "Ch":
-            return new ChoiceWidgetAnnotation(parameters);
-        }
+      while (rdf && rdf.nodeName !== "rdf:rdf") {
+        rdf = rdf.nextSibling;
+      }
+    }
 
-        (0, _util.warn)('Unimplemented widget field type "' + fieldType + '", ' + "falling back to base 
field type.");
-        return new WidgetAnnotation(parameters);
+    if (!rdf || rdf.nodeName !== "rdf:rdf" || !rdf.hasChildNodes()) {
+      return;
+    }
 
-      case "Popup":
-        return new PopupAnnotation(parameters);
+    for (const desc of rdf.childNodes) {
+      if (desc.nodeName !== "rdf:description") {
+        continue;
+      }
 
-      case "FreeText":
-        return new FreeTextAnnotation(parameters);
+      for (const entry of desc.childNodes) {
+        const name = entry.nodeName;
 
-      case "Line":
-        return new LineAnnotation(parameters);
+        switch (name) {
+          case "#text":
+            continue;
 
-      case "Square":
-        return new SquareAnnotation(parameters);
+          case "dc:creator":
+          case "dc:subject":
+            this._parseArray(entry);
 
-      case "Circle":
-        return new CircleAnnotation(parameters);
+            continue;
+        }
 
-      case "PolyLine":
-        return new PolylineAnnotation(parameters);
+        this._metadataMap.set(name, entry.textContent.trim());
+      }
+    }
+  }
 
-      case "Polygon":
-        return new PolygonAnnotation(parameters);
+  get serializable() {
+    return {
+      parsedData: this._metadataMap,
+      rawData: this._data
+    };
+  }
 
-      case "Caret":
-        return new CaretAnnotation(parameters);
+}
 
-      case "Ink":
-        return new InkAnnotation(parameters);
+exports.MetadataParser = MetadataParser;
 
-      case "Highlight":
-        return new HighlightAnnotation(parameters);
+/***/ }),
+/* 26 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-      case "Underline":
-        return new UnderlineAnnotation(parameters);
 
-      case "Squiggly":
-        return new SquigglyAnnotation(parameters);
 
-      case "StrikeOut":
-        return new StrikeOutAnnotation(parameters);
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports.XMLParserErrorCode = exports.XMLParserBase = exports.SimpleXMLParser = exports.SimpleDOMNode = void 
0;
 
-      case "Stamp":
-        return new StampAnnotation(parameters);
+var _core_utils = __w_pdfjs_require__(8);
 
-      case "FileAttachment":
-        return new FileAttachmentAnnotation(parameters);
+const XMLParserErrorCode = {
+  NoError: 0,
+  EndOfDocument: -1,
+  UnterminatedCdat: -2,
+  UnterminatedXmlDeclaration: -3,
+  UnterminatedDoctypeDeclaration: -4,
+  UnterminatedComment: -5,
+  MalformedElement: -6,
+  OutOfMemory: -7,
+  UnterminatedAttributeValue: -8,
+  UnterminatedElement: -9,
+  ElementNeverBegun: -10
+};
+exports.XMLParserErrorCode = XMLParserErrorCode;
 
-      default:
-        if (!subtype) {
-          (0, _util.warn)("Annotation is missing the required /Subtype.");
-        } else {
-          (0, _util.warn)('Unimplemented annotation type "' + subtype + '", ' + "falling back to base 
annotation.");
-        }
+function isWhitespace(s, index) {
+  const ch = s[index];
+  return ch === " " || ch === "\n" || ch === "\r" || ch === "\t";
+}
 
-        return new Annotation(parameters);
+function isWhitespaceString(s) {
+  for (let i = 0, ii = s.length; i < ii; i++) {
+    if (!isWhitespace(s, i)) {
+      return false;
     }
   }
 
+  return true;
 }
 
-exports.AnnotationFactory = AnnotationFactory;
+class XMLParserBase {
+  _resolveEntities(s) {
+    return s.replace(/&([^;]+);/g, (all, entity) => {
+      if (entity.substring(0, 2) === "#x") {
+        return String.fromCodePoint(parseInt(entity.substring(2), 16));
+      } else if (entity.substring(0, 1) === "#") {
+        return String.fromCodePoint(parseInt(entity.substring(1), 10));
+      }
 
-function getQuadPoints(dict, rect) {
-  if (!dict.has("QuadPoints")) {
-    return null;
-  }
+      switch (entity) {
+        case "lt":
+          return "<";
 
-  const quadPoints = dict.getArray("QuadPoints");
+        case "gt":
+          return ">";
 
-  if (!Array.isArray(quadPoints) || quadPoints.length % 8 > 0) {
-    return null;
+        case "amp":
+          return "&";
+
+        case "quot":
+          return '"';
+
+        case "apos":
+          return "'";
+      }
+
+      return this.onResolveEntity(entity);
+    });
   }
 
-  const quadPointsLists = [];
+  _parseContent(s, start) {
+    const attributes = [];
+    let pos = start;
 
-  for (let i = 0, ii = quadPoints.length / 8; i < ii; i++) {
-    quadPointsLists.push([]);
+    function skipWs() {
+      while (pos < s.length && isWhitespace(s, pos)) {
+        ++pos;
+      }
+    }
 
-    for (let j = i * 8, jj = i * 8 + 8; j < jj; j += 2) {
-      const x = quadPoints[j];
-      const y = quadPoints[j + 1];
+    while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== ">" && s[pos] !== "/") {
+      ++pos;
+    }
+
+    const name = s.substring(start, pos);
+    skipWs();
+
+    while (pos < s.length && s[pos] !== ">" && s[pos] !== "/" && s[pos] !== "?") {
+      skipWs();
+      let attrName = "",
+          attrValue = "";
 
-      if (x < rect[0] || x > rect[2] || y < rect[1] || y > rect[3]) {
+      while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== "=") {
+        attrName += s[pos];
+        ++pos;
+      }
+
+      skipWs();
+
+      if (s[pos] !== "=") {
         return null;
       }
 
-      quadPointsLists[i].push({
-        x,
-        y
-      });
-    }
-  }
+      ++pos;
+      skipWs();
+      const attrEndChar = s[pos];
 
-  return quadPointsLists;
-}
+      if (attrEndChar !== '"' && attrEndChar !== "'") {
+        return null;
+      }
 
-function getTransformMatrix(rect, bbox, matrix) {
-  const [minX, minY, maxX, maxY] = _util.Util.getAxialAlignedBoundingBox(bbox, matrix);
+      const attrEndIndex = s.indexOf(attrEndChar, ++pos);
 
-  if (minX === maxX || minY === maxY) {
-    return [1, 0, 0, 1, rect[0], rect[1]];
-  }
+      if (attrEndIndex < 0) {
+        return null;
+      }
 
-  const xRatio = (rect[2] - rect[0]) / (maxX - minX);
-  const yRatio = (rect[3] - rect[1]) / (maxY - minY);
-  return [xRatio, 0, 0, yRatio, rect[0] - minX * xRatio, rect[1] - minY * yRatio];
-}
+      attrValue = s.substring(pos, attrEndIndex);
+      attributes.push({
+        name: attrName,
+        value: this._resolveEntities(attrValue)
+      });
+      pos = attrEndIndex + 1;
+      skipWs();
+    }
 
-class Annotation {
-  constructor(params) {
-    const dict = params.dict;
-    this.setContents(dict.get("Contents"));
-    this.setModificationDate(dict.get("M"));
-    this.setFlags(dict.get("F"));
-    this.setRectangle(dict.getArray("Rect"));
-    this.setColor(dict.getArray("C"));
-    this.setBorderStyle(dict);
-    this.setAppearance(dict);
-    this.data = {
-      annotationFlags: this.flags,
-      borderStyle: this.borderStyle,
-      color: this.color,
-      contents: this.contents,
-      hasAppearance: !!this.appearance,
-      id: params.id,
-      modificationDate: this.modificationDate,
-      rect: this.rectangle,
-      subtype: params.subtype
+    return {
+      name,
+      attributes,
+      parsed: pos - start
     };
   }
 
-  _hasFlag(flags, flag) {
-    return !!(flags & flag);
-  }
-
-  _isViewable(flags) {
-    return !this._hasFlag(flags, _util.AnnotationFlag.INVISIBLE) && !this._hasFlag(flags, 
_util.AnnotationFlag.HIDDEN) && !this._hasFlag(flags, _util.AnnotationFlag.NOVIEW);
-  }
+  _parseProcessingInstruction(s, start) {
+    let pos = start;
 
-  _isPrintable(flags) {
-    return this._hasFlag(flags, _util.AnnotationFlag.PRINT) && !this._hasFlag(flags, 
_util.AnnotationFlag.INVISIBLE) && !this._hasFlag(flags, _util.AnnotationFlag.HIDDEN);
-  }
+    function skipWs() {
+      while (pos < s.length && isWhitespace(s, pos)) {
+        ++pos;
+      }
+    }
 
-  get viewable() {
-    if (this.flags === 0) {
-      return true;
+    while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== ">" && s[pos] !== "/") {
+      ++pos;
     }
 
-    return this._isViewable(this.flags);
-  }
+    const name = s.substring(start, pos);
+    skipWs();
+    const attrStart = pos;
 
-  get printable() {
-    if (this.flags === 0) {
-      return false;
+    while (pos < s.length && (s[pos] !== "?" || s[pos + 1] !== ">")) {
+      ++pos;
     }
 
-    return this._isPrintable(this.flags);
+    const value = s.substring(attrStart, pos);
+    return {
+      name,
+      value,
+      parsed: pos - start
+    };
   }
 
-  setContents(contents) {
-    this.contents = (0, _util.stringToPDFString)(contents || "");
-  }
+  parseXml(s) {
+    let i = 0;
 
-  setModificationDate(modificationDate) {
-    this.modificationDate = (0, _util.isString)(modificationDate) ? modificationDate : null;
-  }
+    while (i < s.length) {
+      const ch = s[i];
+      let j = i;
 
-  setFlags(flags) {
-    this.flags = Number.isInteger(flags) && flags > 0 ? flags : 0;
-  }
+      if (ch === "<") {
+        ++j;
+        const ch2 = s[j];
+        let q;
 
-  hasFlag(flag) {
-    return this._hasFlag(this.flags, flag);
-  }
+        switch (ch2) {
+          case "/":
+            ++j;
+            q = s.indexOf(">", j);
 
-  setRectangle(rectangle) {
-    if (Array.isArray(rectangle) && rectangle.length === 4) {
-      this.rectangle = _util.Util.normalizeRect(rectangle);
-    } else {
-      this.rectangle = [0, 0, 0, 0];
-    }
-  }
+            if (q < 0) {
+              this.onError(XMLParserErrorCode.UnterminatedElement);
+              return;
+            }
 
-  setColor(color) {
-    const rgbColor = new Uint8ClampedArray(3);
+            this.onEndElement(s.substring(j, q));
+            j = q + 1;
+            break;
 
-    if (!Array.isArray(color)) {
-      this.color = rgbColor;
-      return;
-    }
+          case "?":
+            ++j;
 
-    switch (color.length) {
-      case 0:
-        this.color = null;
-        break;
+            const pi = this._parseProcessingInstruction(s, j);
 
-      case 1:
-        _colorspace.ColorSpace.singletons.gray.getRgbItem(color, 0, rgbColor, 0);
+            if (s.substring(j + pi.parsed, j + pi.parsed + 2) !== "?>") {
+              this.onError(XMLParserErrorCode.UnterminatedXmlDeclaration);
+              return;
+            }
 
-        this.color = rgbColor;
-        break;
+            this.onPi(pi.name, pi.value);
+            j += pi.parsed + 2;
+            break;
 
-      case 3:
-        _colorspace.ColorSpace.singletons.rgb.getRgbItem(color, 0, rgbColor, 0);
+          case "!":
+            if (s.substring(j + 1, j + 3) === "--") {
+              q = s.indexOf("-->", j + 3);
 
-        this.color = rgbColor;
-        break;
+              if (q < 0) {
+                this.onError(XMLParserErrorCode.UnterminatedComment);
+                return;
+              }
 
-      case 4:
-        _colorspace.ColorSpace.singletons.cmyk.getRgbItem(color, 0, rgbColor, 0);
+              this.onComment(s.substring(j + 3, q));
+              j = q + 3;
+            } else if (s.substring(j + 1, j + 8) === "[CDATA[") {
+              q = s.indexOf("]]>", j + 8);
 
-        this.color = rgbColor;
-        break;
+              if (q < 0) {
+                this.onError(XMLParserErrorCode.UnterminatedCdat);
+                return;
+              }
 
-      default:
-        this.color = rgbColor;
-        break;
-    }
-  }
+              this.onCdata(s.substring(j + 8, q));
+              j = q + 3;
+            } else if (s.substring(j + 1, j + 8) === "DOCTYPE") {
+              const q2 = s.indexOf("[", j + 8);
+              let complexDoctype = false;
+              q = s.indexOf(">", j + 8);
 
-  setBorderStyle(borderStyle) {
-    this.borderStyle = new AnnotationBorderStyle();
+              if (q < 0) {
+                this.onError(XMLParserErrorCode.UnterminatedDoctypeDeclaration);
+                return;
+              }
 
-    if (!(0, _primitives.isDict)(borderStyle)) {
-      return;
-    }
+              if (q2 > 0 && q > q2) {
+                q = s.indexOf("]>", j + 8);
 
-    if (borderStyle.has("BS")) {
-      const dict = borderStyle.get("BS");
-      const dictType = dict.get("Type");
+                if (q < 0) {
+                  this.onError(XMLParserErrorCode.UnterminatedDoctypeDeclaration);
+                  return;
+                }
 
-      if (!dictType || (0, _primitives.isName)(dictType, "Border")) {
-        this.borderStyle.setWidth(dict.get("W"), this.rectangle);
-        this.borderStyle.setStyle(dict.get("S"));
-        this.borderStyle.setDashArray(dict.getArray("D"));
-      }
-    } else if (borderStyle.has("Border")) {
-      const array = borderStyle.getArray("Border");
+                complexDoctype = true;
+              }
 
-      if (Array.isArray(array) && array.length >= 3) {
-        this.borderStyle.setHorizontalCornerRadius(array[0]);
-        this.borderStyle.setVerticalCornerRadius(array[1]);
-        this.borderStyle.setWidth(array[2], this.rectangle);
+              const doctypeContent = s.substring(j + 8, q + (complexDoctype ? 1 : 0));
+              this.onDoctype(doctypeContent);
+              j = q + (complexDoctype ? 2 : 1);
+            } else {
+              this.onError(XMLParserErrorCode.MalformedElement);
+              return;
+            }
 
-        if (array.length === 4) {
-          this.borderStyle.setDashArray(array[3]);
+            break;
+
+          default:
+            const content = this._parseContent(s, j);
+
+            if (content === null) {
+              this.onError(XMLParserErrorCode.MalformedElement);
+              return;
+            }
+
+            let isClosed = false;
+
+            if (s.substring(j + content.parsed, j + content.parsed + 2) === "/>") {
+              isClosed = true;
+            } else if (s.substring(j + content.parsed, j + content.parsed + 1) !== ">") {
+              this.onError(XMLParserErrorCode.UnterminatedElement);
+              return;
+            }
+
+            this.onBeginElement(content.name, content.attributes, isClosed);
+            j += content.parsed + (isClosed ? 2 : 1);
+            break;
+        }
+      } else {
+        while (j < s.length && s[j] !== "<") {
+          j++;
         }
+
+        const text = s.substring(i, j);
+        this.onText(this._resolveEntities(text));
       }
-    } else {
-      this.borderStyle.setWidth(0);
+
+      i = j;
     }
   }
 
-  setAppearance(dict) {
-    this.appearance = null;
-    const appearanceStates = dict.get("AP");
+  onResolveEntity(name) {
+    return `&${name};`;
+  }
 
-    if (!(0, _primitives.isDict)(appearanceStates)) {
-      return;
-    }
+  onPi(name, value) {}
 
-    const normalAppearanceState = appearanceStates.get("N");
+  onComment(text) {}
 
-    if ((0, _primitives.isStream)(normalAppearanceState)) {
-      this.appearance = normalAppearanceState;
-      return;
-    }
+  onCdata(text) {}
 
-    if (!(0, _primitives.isDict)(normalAppearanceState)) {
-      return;
-    }
+  onDoctype(doctypeContent) {}
 
-    const as = dict.get("AS");
+  onText(text) {}
 
-    if (!(0, _primitives.isName)(as) || !normalAppearanceState.has(as.name)) {
-      return;
-    }
+  onBeginElement(name, attributes, isEmpty) {}
 
-    this.appearance = normalAppearanceState.get(as.name);
-  }
+  onEndElement(name) {}
 
-  loadResources(keys) {
-    return this.appearance.dict.getAsync("Resources").then(resources => {
-      if (!resources) {
-        return undefined;
-      }
+  onError(code) {}
 
-      const objectLoader = new _obj.ObjectLoader(resources, keys, resources.xref);
-      return objectLoader.load().then(function () {
-        return resources;
-      });
-    });
-  }
+}
 
-  getOperatorList(evaluator, task, renderForms, annotationStorage) {
-    if (!this.appearance) {
-      return Promise.resolve(new _operator_list.OperatorList());
-    }
+exports.XMLParserBase = XMLParserBase;
 
-    const appearance = this.appearance;
-    const data = this.data;
-    const appearanceDict = appearance.dict;
-    const resourcesPromise = this.loadResources(["ExtGState", "ColorSpace", "Pattern", "Shading", "XObject", 
"Font"]);
-    const bbox = appearanceDict.getArray("BBox") || [0, 0, 1, 1];
-    const matrix = appearanceDict.getArray("Matrix") || [1, 0, 0, 1, 0, 0];
-    const transform = getTransformMatrix(data.rect, bbox, matrix);
-    return resourcesPromise.then(resources => {
-      const opList = new _operator_list.OperatorList();
-      opList.addOp(_util.OPS.beginAnnotation, [data.rect, transform, matrix]);
-      return evaluator.getOperatorList({
-        stream: appearance,
-        task,
-        resources,
-        operatorList: opList
-      }).then(() => {
-        opList.addOp(_util.OPS.endAnnotation, []);
-        appearance.reset();
-        return opList;
-      });
+class SimpleDOMNode {
+  constructor(nodeName, nodeValue) {
+    this.nodeName = nodeName;
+    this.nodeValue = nodeValue;
+    Object.defineProperty(this, "parentNode", {
+      value: null,
+      writable: true
     });
   }
 
-  async save(evaluator, task, annotationStorage) {
-    return null;
+  get firstChild() {
+    return this.childNodes && this.childNodes[0];
   }
 
-}
-
-exports.Annotation = Annotation;
-
-class AnnotationBorderStyle {
-  constructor() {
-    this.width = 1;
-    this.style = _util.AnnotationBorderStyleType.SOLID;
-    this.dashArray = [3];
-    this.horizontalCornerRadius = 0;
-    this.verticalCornerRadius = 0;
-  }
+  get nextSibling() {
+    const childNodes = this.parentNode.childNodes;
 
-  setWidth(width, rect = [0, 0, 0, 0]) {
-    if ((0, _primitives.isName)(width)) {
-      this.width = 0;
-      return;
+    if (!childNodes) {
+      return undefined;
     }
 
-    if (Number.isInteger(width)) {
-      if (width > 0) {
-        const maxWidth = (rect[2] - rect[0]) / 2;
-        const maxHeight = (rect[3] - rect[1]) / 2;
-
-        if (maxWidth > 0 && maxHeight > 0 && (width > maxWidth || width > maxHeight)) {
-          (0, _util.warn)(`AnnotationBorderStyle.setWidth - ignoring width: ${width}`);
-          width = 1;
-        }
-      }
+    const index = childNodes.indexOf(this);
 
-      this.width = width;
+    if (index === -1) {
+      return undefined;
     }
+
+    return childNodes[index + 1];
   }
 
-  setStyle(style) {
-    if (!(0, _primitives.isName)(style)) {
-      return;
+  get textContent() {
+    if (!this.childNodes) {
+      return this.nodeValue || "";
     }
 
-    switch (style.name) {
-      case "S":
-        this.style = _util.AnnotationBorderStyleType.SOLID;
-        break;
+    return this.childNodes.map(function (child) {
+      return child.textContent;
+    }).join("");
+  }
 
-      case "D":
-        this.style = _util.AnnotationBorderStyleType.DASHED;
-        break;
+  hasChildNodes() {
+    return this.childNodes && this.childNodes.length > 0;
+  }
 
-      case "B":
-        this.style = _util.AnnotationBorderStyleType.BEVELED;
-        break;
+  searchNode(paths, pos) {
+    if (pos >= paths.length) {
+      return this;
+    }
 
-      case "I":
-        this.style = _util.AnnotationBorderStyleType.INSET;
-        break;
+    const component = paths[pos];
+    const stack = [];
+    let node = this;
 
-      case "U":
-        this.style = _util.AnnotationBorderStyleType.UNDERLINE;
-        break;
+    while (true) {
+      if (component.name === node.nodeName) {
+        if (component.pos === 0) {
+          const res = node.searchNode(paths, pos + 1);
 
-      default:
-        break;
-    }
-  }
+          if (res !== null) {
+            return res;
+          }
+        } else if (stack.length === 0) {
+          return null;
+        } else {
+          const [parent] = stack.pop();
+          let siblingPos = 0;
 
-  setDashArray(dashArray) {
-    if (Array.isArray(dashArray) && dashArray.length > 0) {
-      let isValid = true;
-      let allZeros = true;
+          for (const child of parent.childNodes) {
+            if (component.name === child.nodeName) {
+              if (siblingPos === component.pos) {
+                return child.searchNode(paths, pos + 1);
+              }
 
-      for (const element of dashArray) {
-        const validNumber = +element >= 0;
+              siblingPos++;
+            }
+          }
 
-        if (!validNumber) {
-          isValid = false;
-          break;
-        } else if (element > 0) {
-          allZeros = false;
+          return node.searchNode(paths, pos + 1);
         }
       }
 
-      if (isValid && !allZeros) {
-        this.dashArray = dashArray;
+      if (node.childNodes && node.childNodes.length !== 0) {
+        stack.push([node, 0]);
+        node = node.childNodes[0];
+      } else if (stack.length === 0) {
+        return null;
       } else {
-        this.width = 0;
-      }
-    } else if (dashArray) {
-      this.width = 0;
-    }
-  }
+        while (stack.length !== 0) {
+          const [parent, currentPos] = stack.pop();
+          const newPos = currentPos + 1;
 
-  setHorizontalCornerRadius(radius) {
-    if (Number.isInteger(radius)) {
-      this.horizontalCornerRadius = radius;
-    }
-  }
+          if (newPos < parent.childNodes.length) {
+            stack.push([parent, newPos]);
+            node = parent.childNodes[newPos];
+            break;
+          }
+        }
 
-  setVerticalCornerRadius(radius) {
-    if (Number.isInteger(radius)) {
-      this.verticalCornerRadius = radius;
+        if (stack.length === 0) {
+          return null;
+        }
+      }
     }
   }
 
-}
-
-exports.AnnotationBorderStyle = AnnotationBorderStyle;
-
-class MarkupAnnotation extends Annotation {
-  constructor(parameters) {
-    super(parameters);
-    const dict = parameters.dict;
-
-    if (dict.has("IRT")) {
-      const rawIRT = dict.getRaw("IRT");
-      this.data.inReplyTo = (0, _primitives.isRef)(rawIRT) ? rawIRT.toString() : null;
-      const rt = dict.get("RT");
-      this.data.replyType = (0, _primitives.isName)(rt) ? rt.name : _util.AnnotationReplyType.REPLY;
+  dump(buffer) {
+    if (this.nodeName === "#text") {
+      buffer.push((0, _core_utils.encodeToXmlString)(this.nodeValue));
+      return;
     }
 
-    if (this.data.replyType === _util.AnnotationReplyType.GROUP) {
-      const parent = dict.get("IRT");
-      this.data.title = (0, _util.stringToPDFString)(parent.get("T") || "");
-      this.setContents(parent.get("Contents"));
-      this.data.contents = this.contents;
-
-      if (!parent.has("CreationDate")) {
-        this.data.creationDate = null;
-      } else {
-        this.setCreationDate(parent.get("CreationDate"));
-        this.data.creationDate = this.creationDate;
-      }
+    buffer.push(`<${this.nodeName}`);
 
-      if (!parent.has("M")) {
-        this.data.modificationDate = null;
-      } else {
-        this.setModificationDate(parent.get("M"));
-        this.data.modificationDate = this.modificationDate;
+    if (this.attributes) {
+      for (const attribute of this.attributes) {
+        buffer.push(` ${attribute.name}="${(0, _core_utils.encodeToXmlString)(attribute.value)}"`);
       }
+    }
 
-      this.data.hasPopup = parent.has("Popup");
+    if (this.hasChildNodes()) {
+      buffer.push(">");
 
-      if (!parent.has("C")) {
-        this.data.color = null;
-      } else {
-        this.setColor(parent.getArray("C"));
-        this.data.color = this.color;
+      for (const child of this.childNodes) {
+        child.dump(buffer);
       }
-    } else {
-      this.data.title = (0, _util.stringToPDFString)(dict.get("T") || "");
-      this.setCreationDate(dict.get("CreationDate"));
-      this.data.creationDate = this.creationDate;
-      this.data.hasPopup = dict.has("Popup");
 
-      if (!dict.has("C")) {
-        this.data.color = null;
-      }
+      buffer.push(`</${this.nodeName}>`);
+    } else if (this.nodeValue) {
+      buffer.push(`>${(0, _core_utils.encodeToXmlString)(this.nodeValue)}</${this.nodeName}>`);
+    } else {
+      buffer.push("/>");
     }
   }
 
-  setCreationDate(creationDate) {
-    this.creationDate = (0, _util.isString)(creationDate) ? creationDate : null;
-  }
-
 }
 
-exports.MarkupAnnotation = MarkupAnnotation;
+exports.SimpleDOMNode = SimpleDOMNode;
 
-class WidgetAnnotation extends Annotation {
-  constructor(params) {
-    super(params);
-    const dict = params.dict;
-    const data = this.data;
-    this.ref = params.ref;
-    data.annotationType = _util.AnnotationType.WIDGET;
-    data.fieldName = this._constructFieldName(dict);
-    const fieldValue = (0, _core_utils.getInheritableProperty)({
-      dict,
-      key: "V",
-      getArray: true
-    });
-    data.fieldValue = this._decodeFormValue(fieldValue);
-    data.alternativeText = (0, _util.stringToPDFString)(dict.get("TU") || "");
-    data.defaultAppearance = (0, _core_utils.getInheritableProperty)({
-      dict,
-      key: "DA"
-    }) || params.acroForm.get("DA") || "";
-    const fieldType = (0, _core_utils.getInheritableProperty)({
-      dict,
-      key: "FT"
-    });
-    data.fieldType = (0, _primitives.isName)(fieldType) ? fieldType.name : null;
-    this.fieldResources = (0, _core_utils.getInheritableProperty)({
-      dict,
-      key: "DR"
-    }) || params.acroForm.get("DR") || _primitives.Dict.empty;
-    data.fieldFlags = (0, _core_utils.getInheritableProperty)({
-      dict,
-      key: "Ff"
-    });
+class SimpleXMLParser extends XMLParserBase {
+  constructor({
+    hasAttributes = false,
+    lowerCaseName = false
+  }) {
+    super();
+    this._currentFragment = null;
+    this._stack = null;
+    this._errorCode = XMLParserErrorCode.NoError;
+    this._hasAttributes = hasAttributes;
+    this._lowerCaseName = lowerCaseName;
+  }
 
-    if (!Number.isInteger(data.fieldFlags) || data.fieldFlags < 0) {
-      data.fieldFlags = 0;
+  parseFromString(data) {
+    this._currentFragment = [];
+    this._stack = [];
+    this._errorCode = XMLParserErrorCode.NoError;
+    this.parseXml(data);
+
+    if (this._errorCode !== XMLParserErrorCode.NoError) {
+      return undefined;
     }
 
-    data.readOnly = this.hasFieldFlag(_util.AnnotationFieldFlag.READONLY);
+    const [documentElement] = this._currentFragment;
 
-    if (data.fieldType === "Sig") {
-      data.fieldValue = null;
-      this.setFlags(_util.AnnotationFlag.HIDDEN);
+    if (!documentElement) {
+      return undefined;
     }
+
+    return {
+      documentElement
+    };
   }
 
-  _constructFieldName(dict) {
-    if (!dict.has("T") && !dict.has("Parent")) {
-      (0, _util.warn)("Unknown field name, falling back to empty field name.");
-      return "";
+  onText(text) {
+    if (isWhitespaceString(text)) {
+      return;
     }
 
-    if (!dict.has("Parent")) {
-      return (0, _util.stringToPDFString)(dict.get("T"));
-    }
+    const node = new SimpleDOMNode("#text", text);
 
-    const fieldName = [];
+    this._currentFragment.push(node);
+  }
 
-    if (dict.has("T")) {
-      fieldName.unshift((0, _util.stringToPDFString)(dict.get("T")));
-    }
+  onCdata(text) {
+    const node = new SimpleDOMNode("#text", text);
 
-    let loopDict = dict;
+    this._currentFragment.push(node);
+  }
 
-    while (loopDict.has("Parent")) {
-      loopDict = loopDict.get("Parent");
+  onBeginElement(name, attributes, isEmpty) {
+    if (this._lowerCaseName) {
+      name = name.toLowerCase();
+    }
 
-      if (!(0, _primitives.isDict)(loopDict)) {
-        break;
-      }
+    const node = new SimpleDOMNode(name);
+    node.childNodes = [];
 
-      if (loopDict.has("T")) {
-        fieldName.unshift((0, _util.stringToPDFString)(loopDict.get("T")));
-      }
+    if (this._hasAttributes) {
+      node.attributes = attributes;
     }
 
-    return fieldName.join(".");
-  }
+    this._currentFragment.push(node);
 
-  _decodeFormValue(formValue) {
-    if (Array.isArray(formValue)) {
-      return formValue.filter(item => (0, _util.isString)(item)).map(item => (0, 
_util.stringToPDFString)(item));
-    } else if ((0, _primitives.isName)(formValue)) {
-      return (0, _util.stringToPDFString)(formValue.name);
-    } else if ((0, _util.isString)(formValue)) {
-      return (0, _util.stringToPDFString)(formValue);
+    if (isEmpty) {
+      return;
     }
 
-    return null;
-  }
+    this._stack.push(this._currentFragment);
 
-  hasFieldFlag(flag) {
-    return !!(this.data.fieldFlags & flag);
+    this._currentFragment = node.childNodes;
   }
 
-  getOperatorList(evaluator, task, renderForms, annotationStorage) {
-    if (renderForms) {
-      return Promise.resolve(new _operator_list.OperatorList());
+  onEndElement(name) {
+    this._currentFragment = this._stack.pop() || [];
+    const lastElement = this._currentFragment[this._currentFragment.length - 1];
+
+    if (!lastElement) {
+      return;
     }
 
-    if (!this._hasText) {
-      return super.getOperatorList(evaluator, task, renderForms, annotationStorage);
+    for (let i = 0, ii = lastElement.childNodes.length; i < ii; i++) {
+      lastElement.childNodes[i].parentNode = lastElement;
     }
+  }
 
-    return this._getAppearance(evaluator, task, annotationStorage).then(content => {
-      if (this.appearance && content === null) {
-        return super.getOperatorList(evaluator, task, renderForms, annotationStorage);
-      }
+  onError(code) {
+    this._errorCode = code;
+  }
 
-      const operatorList = new _operator_list.OperatorList();
+}
 
-      if (!this.data.defaultAppearance || content === null) {
-        return operatorList;
-      }
+exports.SimpleXMLParser = SimpleXMLParser;
 
-      const matrix = [1, 0, 0, 1, 0, 0];
-      const bbox = [0, 0, this.data.rect[2] - this.data.rect[0], this.data.rect[3] - this.data.rect[1]];
-      const transform = getTransformMatrix(this.data.rect, bbox, matrix);
-      operatorList.addOp(_util.OPS.beginAnnotation, [this.data.rect, transform, matrix]);
-      const stream = new _stream.StringStream(content);
-      return evaluator.getOperatorList({
-        stream,
-        task,
-        resources: this.fieldResources,
-        operatorList
-      }).then(function () {
-        operatorList.addOp(_util.OPS.endAnnotation, []);
-        return operatorList;
-      });
-    });
-  }
+/***/ }),
+/* 27 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-  async save(evaluator, task, annotationStorage) {
-    if (this.data.fieldValue === annotationStorage[this.data.id]) {
-      return null;
-    }
 
-    let appearance = await this._getAppearance(evaluator, task, annotationStorage);
 
-    if (appearance === null) {
-      return null;
-    }
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports.getQuadPoints = getQuadPoints;
+exports.MarkupAnnotation = exports.AnnotationFactory = exports.AnnotationBorderStyle = exports.Annotation = 
void 0;
 
-    const dict = evaluator.xref.fetchIfRef(this.ref);
+var _util = __w_pdfjs_require__(2);
 
-    if (!(0, _primitives.isDict)(dict)) {
-      return null;
-    }
+var _obj = __w_pdfjs_require__(10);
 
-    const bbox = [0, 0, this.data.rect[2] - this.data.rect[0], this.data.rect[3] - this.data.rect[1]];
-    const newRef = evaluator.xref.getNewRef();
-    const AP = new _primitives.Dict(evaluator.xref);
-    AP.set("N", newRef);
-    const value = annotationStorage[this.data.id];
-    const encrypt = evaluator.xref.encrypt;
-    let originalTransform = null;
-    let newTransform = null;
+var _core_utils = __w_pdfjs_require__(8);
 
-    if (encrypt) {
-      originalTransform = encrypt.createCipherTransform(this.ref.num, this.ref.gen);
-      newTransform = encrypt.createCipherTransform(newRef.num, newRef.gen);
-      appearance = newTransform.encryptString(appearance);
-    }
+var _default_appearance = __w_pdfjs_require__(28);
 
-    dict.set("V", value);
-    dict.set("AP", AP);
-    dict.set("M", `D:${(0, _util.getModificationDate)()}`);
-    const appearanceDict = new _primitives.Dict(evaluator.xref);
-    appearanceDict.set("Length", appearance.length);
-    appearanceDict.set("Subtype", _primitives.Name.get("Form"));
-    appearanceDict.set("Resources", this.fieldResources);
-    appearanceDict.set("BBox", bbox);
-    const bufferOriginal = [`${this.ref.num} ${this.ref.gen} obj\n`];
-    (0, _writer.writeDict)(dict, bufferOriginal, originalTransform);
-    bufferOriginal.push("\nendobj\n");
-    const bufferNew = [`${newRef.num} ${newRef.gen} obj\n`];
-    (0, _writer.writeDict)(appearanceDict, bufferNew, newTransform);
-    bufferNew.push(" stream\n");
-    bufferNew.push(appearance);
-    bufferNew.push("\nendstream\nendobj\n");
-    return [{
-      ref: this.ref,
-      data: bufferOriginal.join("")
-    }, {
-      ref: newRef,
-      data: bufferNew.join("")
-    }];
-  }
+var _primitives = __w_pdfjs_require__(5);
 
-  async _getAppearance(evaluator, task, annotationStorage) {
-    const isPassword = this.hasFieldFlag(_util.AnnotationFieldFlag.PASSWORD);
+var _colorspace = __w_pdfjs_require__(23);
 
-    if (!annotationStorage || isPassword) {
-      return null;
-    }
+var _operator_list = __w_pdfjs_require__(46);
 
-    const value = annotationStorage[this.data.id];
+var _stream = __w_pdfjs_require__(12);
 
-    if (value === "") {
-      return "";
-    }
+var _writer = __w_pdfjs_require__(48);
 
-    const defaultPadding = 2;
-    const hPadding = defaultPadding;
-    const totalHeight = this.data.rect[3] - this.data.rect[1];
-    const totalWidth = this.data.rect[2] - this.data.rect[0];
-    const fontInfo = await this._getFontData(evaluator, task);
-    const [font, fontName] = fontInfo;
-    let fontSize = fontInfo[2];
-    fontSize = this._computeFontSize(font, fontName, fontSize, totalHeight);
-    let descent = font.descent;
+class AnnotationFactory {
+  static create(xref, ref, pdfManager, idFactory, collectFields) {
+    return pdfManager.ensureCatalog("acroForm").then(acroForm => {
+      return pdfManager.ensure(this, "_create", [xref, ref, pdfManager, idFactory, acroForm, collectFields]);
+    });
+  }
 
-    if (isNaN(descent)) {
-      descent = 0;
+  static _create(xref, ref, pdfManager, idFactory, acroForm, collectFields) {
+    const dict = xref.fetchIfRef(ref);
+
+    if (!(0, _primitives.isDict)(dict)) {
+      return undefined;
     }
 
-    const vPadding = defaultPadding + Math.abs(descent) * fontSize;
-    const defaultAppearance = this.data.defaultAppearance;
-    const alignment = this.data.textAlignment;
+    const id = (0, _primitives.isRef)(ref) ? ref.toString() : `annot_${idFactory.createObjId()}`;
+    let subtype = dict.get("Subtype");
+    subtype = (0, _primitives.isName)(subtype) ? subtype.name : null;
+    const parameters = {
+      xref,
+      ref,
+      dict,
+      subtype,
+      id,
+      pdfManager,
+      acroForm: acroForm instanceof _primitives.Dict ? acroForm : _primitives.Dict.empty,
+      collectFields
+    };
 
-    if (this.data.comb) {
-      return this._getCombAppearance(defaultAppearance, value, totalWidth, hPadding, vPadding);
-    }
+    switch (subtype) {
+      case "Link":
+        return new LinkAnnotation(parameters);
 
-    if (this.data.multiLine) {
-      return this._getMultilineAppearance(defaultAppearance, value, font, fontSize, totalWidth, totalHeight, 
alignment, hPadding, vPadding);
-    }
+      case "Text":
+        return new TextAnnotation(parameters);
 
-    if (alignment === 0 || alignment > 2) {
-      return "/Tx BMC q BT " + defaultAppearance + ` 1 0 0 1 ${hPadding} ${vPadding} Tm (${(0, 
_util.escapeString)(value)}) Tj` + " ET Q EMC";
-    }
+      case "Widget":
+        let fieldType = (0, _core_utils.getInheritableProperty)({
+          dict,
+          key: "FT"
+        });
+        fieldType = (0, _primitives.isName)(fieldType) ? fieldType.name : null;
 
-    const renderedText = this._renderText(value, font, fontSize, totalWidth, alignment, hPadding, vPadding);
+        switch (fieldType) {
+          case "Tx":
+            return new TextWidgetAnnotation(parameters);
 
-    return "/Tx BMC q BT " + defaultAppearance + ` 1 0 0 1 0 0 Tm ${renderedText}` + " ET Q EMC";
-  }
+          case "Btn":
+            return new ButtonWidgetAnnotation(parameters);
 
-  async _getFontData(evaluator, task) {
-    const operatorList = new _operator_list.OperatorList();
-    const initialState = {
-      fontSize: 0,
-      font: null,
-      fontName: null,
+          case "Ch":
+            return new ChoiceWidgetAnnotation(parameters);
+        }
 
-      clone() {
-        return this;
-      }
+        (0, _util.warn)(`Unimplemented widget field type "${fieldType}", ` + "falling back to base field 
type.");
+        return new WidgetAnnotation(parameters);
 
-    };
-    await evaluator.getOperatorList({
-      stream: new _stream.StringStream(this.data.defaultAppearance),
-      task,
-      resources: this.fieldResources,
-      operatorList,
-      initialState
-    });
-    return [initialState.font, initialState.fontName, initialState.fontSize];
-  }
+      case "Popup":
+        return new PopupAnnotation(parameters);
 
-  _computeFontSize(font, fontName, fontSize, height) {
-    if (fontSize === null || fontSize === 0) {
-      const em = font.charsToGlyphs("M", true)[0].width / 1000;
-      const capHeight = 0.7 * em;
-      fontSize = Math.max(1, Math.floor(height / (1.5 * capHeight)));
-      let fontRegex = new RegExp(`/${fontName}\\s+[0-9\.]+\\s+Tf`);
+      case "FreeText":
+        return new FreeTextAnnotation(parameters);
 
-      if (this.data.defaultAppearance.search(fontRegex) === -1) {
-        fontRegex = new RegExp(`/${fontName}\\s+Tf`);
-      }
+      case "Line":
+        return new LineAnnotation(parameters);
 
-      this.data.defaultAppearance = this.data.defaultAppearance.replace(fontRegex, `/${fontName} ${fontSize} 
Tf`);
-    }
+      case "Square":
+        return new SquareAnnotation(parameters);
 
-    return fontSize;
-  }
+      case "Circle":
+        return new CircleAnnotation(parameters);
 
-  _renderText(text, font, fontSize, totalWidth, alignment, hPadding, vPadding) {
-    const glyphs = font.charsToGlyphs(text);
-    const scale = fontSize / 1000;
-    let width = 0;
+      case "PolyLine":
+        return new PolylineAnnotation(parameters);
 
-    for (const glyph of glyphs) {
-      width += glyph.width * scale;
-    }
+      case "Polygon":
+        return new PolygonAnnotation(parameters);
 
-    let shift;
+      case "Caret":
+        return new CaretAnnotation(parameters);
 
-    if (alignment === 1) {
-      shift = (totalWidth - width) / 2;
-    } else if (alignment === 2) {
-      shift = totalWidth - width - hPadding;
-    } else {
-      shift = hPadding;
-    }
+      case "Ink":
+        return new InkAnnotation(parameters);
 
-    shift = shift.toFixed(2);
-    vPadding = vPadding.toFixed(2);
-    return `${shift} ${vPadding} Td (${(0, _util.escapeString)(text)}) Tj`;
-  }
+      case "Highlight":
+        return new HighlightAnnotation(parameters);
 
-}
+      case "Underline":
+        return new UnderlineAnnotation(parameters);
 
-class TextWidgetAnnotation extends WidgetAnnotation {
-  constructor(params) {
-    super(params);
-    this._hasText = true;
-    const dict = params.dict;
+      case "Squiggly":
+        return new SquigglyAnnotation(parameters);
 
-    if (!(0, _util.isString)(this.data.fieldValue)) {
-      this.data.fieldValue = "";
-    }
+      case "StrikeOut":
+        return new StrikeOutAnnotation(parameters);
 
-    let alignment = (0, _core_utils.getInheritableProperty)({
-      dict,
-      key: "Q"
-    });
+      case "Stamp":
+        return new StampAnnotation(parameters);
 
-    if (!Number.isInteger(alignment) || alignment < 0 || alignment > 2) {
-      alignment = null;
-    }
+      case "FileAttachment":
+        return new FileAttachmentAnnotation(parameters);
 
-    this.data.textAlignment = alignment;
-    let maximumLength = (0, _core_utils.getInheritableProperty)({
-      dict,
-      key: "MaxLen"
-    });
+      default:
+        if (!collectFields) {
+          if (!subtype) {
+            (0, _util.warn)("Annotation is missing the required /Subtype.");
+          } else {
+            (0, _util.warn)(`Unimplemented annotation type "${subtype}", ` + "falling back to base 
annotation.");
+          }
+        }
 
-    if (!Number.isInteger(maximumLength) || maximumLength < 0) {
-      maximumLength = null;
+        return new Annotation(parameters);
     }
-
-    this.data.maxLen = maximumLength;
-    this.data.multiLine = this.hasFieldFlag(_util.AnnotationFieldFlag.MULTILINE);
-    this.data.comb = this.hasFieldFlag(_util.AnnotationFieldFlag.COMB) && 
!this.hasFieldFlag(_util.AnnotationFieldFlag.MULTILINE) && 
!this.hasFieldFlag(_util.AnnotationFieldFlag.PASSWORD) && 
!this.hasFieldFlag(_util.AnnotationFieldFlag.FILESELECT) && this.data.maxLen !== null;
   }
 
-  _getCombAppearance(defaultAppearance, text, width, hPadding, vPadding) {
-    const combWidth = (width / this.data.maxLen).toFixed(2);
-    const buf = [];
+}
 
-    for (const character of text) {
-      buf.push(`(${(0, _util.escapeString)(character)}) Tj`);
-    }
+exports.AnnotationFactory = AnnotationFactory;
 
-    const renderedComb = buf.join(` ${combWidth} 0 Td `);
-    return "/Tx BMC q BT " + defaultAppearance + ` 1 0 0 1 ${hPadding} ${vPadding} Tm ${renderedComb}` + " 
ET Q EMC";
+function getRgbColor(color) {
+  const rgbColor = new Uint8ClampedArray(3);
+
+  if (!Array.isArray(color)) {
+    return rgbColor;
   }
 
-  _getMultilineAppearance(defaultAppearance, text, font, fontSize, width, height, alignment, hPadding, 
vPadding) {
-    const lines = text.split(/\r\n|\r|\n/);
-    const buf = [];
-    const totalWidth = width - 2 * hPadding;
+  switch (color.length) {
+    case 0:
+      return null;
 
-    for (const line of lines) {
-      const chunks = this._splitLine(line, font, fontSize, totalWidth);
+    case 1:
+      _colorspace.ColorSpace.singletons.gray.getRgbItem(color, 0, rgbColor, 0);
 
-      for (const chunk of chunks) {
-        const padding = buf.length === 0 ? hPadding : 0;
-        buf.push(this._renderText(chunk, font, fontSize, width, alignment, padding, -fontSize));
-      }
-    }
+      return rgbColor;
 
-    const renderedText = buf.join("\n");
-    return "/Tx BMC q BT " + defaultAppearance + ` 1 0 0 1 0 ${height} Tm ${renderedText}` + " ET Q EMC";
+    case 3:
+      _colorspace.ColorSpace.singletons.rgb.getRgbItem(color, 0, rgbColor, 0);
+
+      return rgbColor;
+
+    case 4:
+      _colorspace.ColorSpace.singletons.cmyk.getRgbItem(color, 0, rgbColor, 0);
+
+      return rgbColor;
+
+    default:
+      return rgbColor;
   }
+}
 
-  _splitLine(line, font, fontSize, width) {
-    if (line.length <= 1) {
-      return [line];
-    }
+function getQuadPoints(dict, rect) {
+  if (!dict.has("QuadPoints")) {
+    return null;
+  }
 
-    const scale = fontSize / 1000;
-    const whitespace = font.charsToGlyphs(" ", true)[0].width * scale;
-    const chunks = [];
-    let lastSpacePos = -1,
-        startChunk = 0,
-        currentWidth = 0;
+  const quadPoints = dict.getArray("QuadPoints");
+
+  if (!Array.isArray(quadPoints) || quadPoints.length === 0 || quadPoints.length % 8 > 0) {
+    return null;
+  }
 
-    for (let i = 0, ii = line.length; i < ii; i++) {
-      const character = line.charAt(i);
+  const quadPointsLists = [];
 
-      if (character === " ") {
-        if (currentWidth + whitespace > width) {
-          chunks.push(line.substring(startChunk, i));
-          startChunk = i;
-          currentWidth = whitespace;
-          lastSpacePos = -1;
-        } else {
-          currentWidth += whitespace;
-          lastSpacePos = i;
-        }
-      } else {
-        const charWidth = font.charsToGlyphs(character, false)[0].width * scale;
+  for (let i = 0, ii = quadPoints.length / 8; i < ii; i++) {
+    quadPointsLists.push([]);
 
-        if (currentWidth + charWidth > width) {
-          if (lastSpacePos !== -1) {
-            chunks.push(line.substring(startChunk, lastSpacePos + 1));
-            startChunk = i = lastSpacePos + 1;
-            lastSpacePos = -1;
-            currentWidth = 0;
-          } else {
-            chunks.push(line.substring(startChunk, i));
-            startChunk = i;
-            currentWidth = charWidth;
-          }
-        } else {
-          currentWidth += charWidth;
-        }
+    for (let j = i * 8, jj = i * 8 + 8; j < jj; j += 2) {
+      const x = quadPoints[j];
+      const y = quadPoints[j + 1];
+
+      if (rect !== null && (x < rect[0] || x > rect[2] || y < rect[1] || y > rect[3])) {
+        return null;
       }
-    }
 
-    if (startChunk < line.length) {
-      chunks.push(line.substring(startChunk, line.length));
+      quadPointsLists[i].push({
+        x,
+        y
+      });
     }
+  }
 
-    return chunks;
+  return quadPointsLists.map(quadPointsList => {
+    const [minX, maxX, minY, maxY] = quadPointsList.reduce(([mX, MX, mY, MY], quadPoint) => [Math.min(mX, 
quadPoint.x), Math.max(MX, quadPoint.x), Math.min(mY, quadPoint.y), Math.max(MY, quadPoint.y)], 
[Number.MAX_VALUE, Number.MIN_VALUE, Number.MAX_VALUE, Number.MIN_VALUE]);
+    return [{
+      x: minX,
+      y: maxY
+    }, {
+      x: maxX,
+      y: maxY
+    }, {
+      x: minX,
+      y: minY
+    }, {
+      x: maxX,
+      y: minY
+    }];
+  });
+}
+
+function getTransformMatrix(rect, bbox, matrix) {
+  const [minX, minY, maxX, maxY] = _util.Util.getAxialAlignedBoundingBox(bbox, matrix);
+
+  if (minX === maxX || minY === maxY) {
+    return [1, 0, 0, 1, rect[0], rect[1]];
   }
 
+  const xRatio = (rect[2] - rect[0]) / (maxX - minX);
+  const yRatio = (rect[3] - rect[1]) / (maxY - minY);
+  return [xRatio, 0, 0, yRatio, rect[0] - minX * xRatio, rect[1] - minY * yRatio];
 }
 
-class ButtonWidgetAnnotation extends WidgetAnnotation {
+class Annotation {
   constructor(params) {
-    super(params);
-    this.checkedAppearance = null;
-    this.uncheckedAppearance = null;
-    this.data.checkBox = !this.hasFieldFlag(_util.AnnotationFieldFlag.RADIO) && 
!this.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON);
-    this.data.radioButton = this.hasFieldFlag(_util.AnnotationFieldFlag.RADIO) && 
!this.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON);
-    this.data.pushButton = this.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON);
+    const dict = params.dict;
+    this.setContents(dict.get("Contents"));
+    this.setModificationDate(dict.get("M"));
+    this.setFlags(dict.get("F"));
+    this.setRectangle(dict.getArray("Rect"));
+    this.setColor(dict.getArray("C"));
+    this.setBorderStyle(dict);
+    this.setAppearance(dict);
+    this._streams = [];
 
-    if (this.data.checkBox) {
-      this._processCheckBox(params);
-    } else if (this.data.radioButton) {
-      this._processRadioButton(params);
-    } else if (this.data.pushButton) {
-      this._processPushButton(params);
-    } else {
-      (0, _util.warn)("Invalid field flags for button widget annotation");
+    if (this.appearance) {
+      this._streams.push(this.appearance);
     }
-  }
 
-  getOperatorList(evaluator, task, renderForms, annotationStorage) {
-    if (this.data.pushButton) {
-      return super.getOperatorList(evaluator, task, false, annotationStorage);
-    }
+    this.data = {
+      annotationFlags: this.flags,
+      borderStyle: this.borderStyle,
+      color: this.color,
+      contents: this.contents,
+      hasAppearance: !!this.appearance,
+      id: params.id,
+      modificationDate: this.modificationDate,
+      rect: this.rectangle,
+      subtype: params.subtype
+    };
 
-    if (annotationStorage) {
-      const value = annotationStorage[this.data.id] || false;
-      let appearance;
+    if (params.collectFields) {
+      const kids = dict.get("Kids");
 
-      if (value) {
-        appearance = this.checkedAppearance;
-      } else {
-        appearance = this.uncheckedAppearance;
-      }
+      if (Array.isArray(kids)) {
+        const kidIds = [];
 
-      if (appearance) {
-        const savedAppearance = this.appearance;
-        this.appearance = appearance;
-        const operatorList = super.getOperatorList(evaluator, task, renderForms, annotationStorage);
-        this.appearance = savedAppearance;
-        return operatorList;
+        for (const kid of kids) {
+          if ((0, _primitives.isRef)(kid)) {
+            kidIds.push(kid.toString());
+          }
+        }
+
+        if (kidIds.length !== 0) {
+          this.data.kidIds = kidIds;
+        }
       }
 
-      return Promise.resolve(new _operator_list.OperatorList());
+      this.data.actions = (0, _core_utils.collectActions)(params.xref, dict, 
_util.AnnotationActionEventType);
+      this.data.fieldName = this._constructFieldName(dict);
     }
 
-    return super.getOperatorList(evaluator, task, renderForms, annotationStorage);
+    this._fallbackFontDict = null;
   }
 
-  async save(evaluator, task, annotationStorage) {
-    if (this.data.checkBox) {
-      return this._saveCheckbox(evaluator, task, annotationStorage);
-    }
+  _hasFlag(flags, flag) {
+    return !!(flags & flag);
+  }
 
-    if (this.data.radioButton) {
-      return this._saveRadioButton(evaluator, task, annotationStorage);
-    }
+  _isViewable(flags) {
+    return !this._hasFlag(flags, _util.AnnotationFlag.INVISIBLE) && !this._hasFlag(flags, 
_util.AnnotationFlag.NOVIEW);
+  }
 
-    return super.save(evaluator, task, annotationStorage);
+  _isPrintable(flags) {
+    return this._hasFlag(flags, _util.AnnotationFlag.PRINT) && !this._hasFlag(flags, 
_util.AnnotationFlag.INVISIBLE);
   }
 
-  async _saveCheckbox(evaluator, task, annotationStorage) {
-    const defaultValue = this.data.fieldValue && this.data.fieldValue !== "Off";
-    const value = annotationStorage[this.data.id];
+  isHidden(annotationStorage) {
+    const storageEntry = annotationStorage && annotationStorage.get(this.data.id);
 
-    if (defaultValue === value) {
-      return null;
+    if (storageEntry && storageEntry.hidden !== undefined) {
+      return storageEntry.hidden;
     }
 
-    const dict = evaluator.xref.fetchIfRef(this.ref);
+    return this._hasFlag(this.flags, _util.AnnotationFlag.HIDDEN);
+  }
 
-    if (!(0, _primitives.isDict)(dict)) {
-      return null;
+  get viewable() {
+    if (this.data.quadPoints === null) {
+      return false;
     }
 
-    const name = _primitives.Name.get(value ? this.data.exportValue : "Off");
-
-    dict.set("V", name);
-    dict.set("AS", name);
-    dict.set("M", `D:${(0, _util.getModificationDate)()}`);
-    const encrypt = evaluator.xref.encrypt;
-    let originalTransform = null;
-
-    if (encrypt) {
-      originalTransform = encrypt.createCipherTransform(this.ref.num, this.ref.gen);
+    if (this.flags === 0) {
+      return true;
     }
 
-    const buffer = [`${this.ref.num} ${this.ref.gen} obj\n`];
-    (0, _writer.writeDict)(dict, buffer, originalTransform);
-    buffer.push("\nendobj\n");
-    return [{
-      ref: this.ref,
-      data: buffer.join("")
-    }];
+    return this._isViewable(this.flags);
   }
 
-  async _saveRadioButton(evaluator, task, annotationStorage) {
-    const defaultValue = this.data.fieldValue === this.data.buttonValue;
-    const value = annotationStorage[this.data.id];
-
-    if (defaultValue === value) {
-      return null;
+  get printable() {
+    if (this.data.quadPoints === null) {
+      return false;
     }
 
-    const dict = evaluator.xref.fetchIfRef(this.ref);
-
-    if (!(0, _primitives.isDict)(dict)) {
-      return null;
+    if (this.flags === 0) {
+      return false;
     }
 
-    const name = _primitives.Name.get(value ? this.data.buttonValue : "Off");
+    return this._isPrintable(this.flags);
+  }
 
-    let parentBuffer = null;
-    const encrypt = evaluator.xref.encrypt;
+  setContents(contents) {
+    this.contents = (0, _util.stringToPDFString)(contents || "");
+  }
 
-    if (value) {
-      if ((0, _primitives.isRef)(this.parent)) {
-        const parent = evaluator.xref.fetch(this.parent);
-        let parentTransform = null;
+  setModificationDate(modificationDate) {
+    this.modificationDate = (0, _util.isString)(modificationDate) ? modificationDate : null;
+  }
 
-        if (encrypt) {
-          parentTransform = encrypt.createCipherTransform(this.parent.num, this.parent.gen);
-        }
+  setFlags(flags) {
+    this.flags = Number.isInteger(flags) && flags > 0 ? flags : 0;
+  }
 
-        parent.set("V", name);
-        parentBuffer = [`${this.parent.num} ${this.parent.gen} obj\n`];
-        (0, _writer.writeDict)(parent, parentBuffer, parentTransform);
-        parentBuffer.push("\nendobj\n");
-      } else if ((0, _primitives.isDict)(this.parent)) {
-        this.parent.set("V", name);
-      }
+  hasFlag(flag) {
+    return this._hasFlag(this.flags, flag);
+  }
+
+  setRectangle(rectangle) {
+    if (Array.isArray(rectangle) && rectangle.length === 4) {
+      this.rectangle = _util.Util.normalizeRect(rectangle);
+    } else {
+      this.rectangle = [0, 0, 0, 0];
     }
+  }
 
-    dict.set("AS", name);
-    dict.set("M", `D:${(0, _util.getModificationDate)()}`);
-    let originalTransform = null;
+  setColor(color) {
+    this.color = getRgbColor(color);
+  }
 
-    if (encrypt) {
-      originalTransform = encrypt.createCipherTransform(this.ref.num, this.ref.gen);
+  setBorderStyle(borderStyle) {
+    this.borderStyle = new AnnotationBorderStyle();
+
+    if (!(0, _primitives.isDict)(borderStyle)) {
+      return;
     }
 
-    const buffer = [`${this.ref.num} ${this.ref.gen} obj\n`];
-    (0, _writer.writeDict)(dict, buffer, originalTransform);
-    buffer.push("\nendobj\n");
-    const newRefs = [{
-      ref: this.ref,
-      data: buffer.join("")
-    }];
+    if (borderStyle.has("BS")) {
+      const dict = borderStyle.get("BS");
+      const dictType = dict.get("Type");
 
-    if (parentBuffer !== null) {
-      newRefs.push({
-        ref: this.parent,
-        data: parentBuffer.join("")
-      });
-    }
+      if (!dictType || (0, _primitives.isName)(dictType, "Border")) {
+        this.borderStyle.setWidth(dict.get("W"), this.rectangle);
+        this.borderStyle.setStyle(dict.get("S"));
+        this.borderStyle.setDashArray(dict.getArray("D"));
+      }
+    } else if (borderStyle.has("Border")) {
+      const array = borderStyle.getArray("Border");
 
-    return newRefs;
+      if (Array.isArray(array) && array.length >= 3) {
+        this.borderStyle.setHorizontalCornerRadius(array[0]);
+        this.borderStyle.setVerticalCornerRadius(array[1]);
+        this.borderStyle.setWidth(array[2], this.rectangle);
+
+        if (array.length === 4) {
+          this.borderStyle.setDashArray(array[3]);
+        }
+      }
+    } else {
+      this.borderStyle.setWidth(0);
+    }
   }
 
-  _processCheckBox(params) {
-    const customAppearance = params.dict.get("AP");
+  setAppearance(dict) {
+    this.appearance = null;
+    const appearanceStates = dict.get("AP");
 
-    if (!(0, _primitives.isDict)(customAppearance)) {
+    if (!(0, _primitives.isDict)(appearanceStates)) {
       return;
     }
 
-    const normalAppearance = customAppearance.get("N");
+    const normalAppearanceState = appearanceStates.get("N");
 
-    if (!(0, _primitives.isDict)(normalAppearance)) {
+    if ((0, _primitives.isStream)(normalAppearanceState)) {
+      this.appearance = normalAppearanceState;
       return;
     }
 
-    const exportValues = normalAppearance.getKeys();
-
-    if (!exportValues.includes("Off")) {
-      exportValues.push("Off");
+    if (!(0, _primitives.isDict)(normalAppearanceState)) {
+      return;
     }
 
-    if (exportValues.length !== 2) {
+    const as = dict.get("AS");
+
+    if (!(0, _primitives.isName)(as) || !normalAppearanceState.has(as.name)) {
       return;
     }
 
-    this.data.exportValue = exportValues[0] === "Off" ? exportValues[1] : exportValues[0];
-    this.checkedAppearance = normalAppearance.get(this.data.exportValue);
-    this.uncheckedAppearance = normalAppearance.get("Off") || null;
+    this.appearance = normalAppearanceState.get(as.name);
   }
 
-  _processRadioButton(params) {
-    this.data.fieldValue = this.data.buttonValue = null;
-    const fieldParent = params.dict.get("Parent");
-
-    if ((0, _primitives.isDict)(fieldParent) && fieldParent.has("V")) {
-      const fieldParentValue = fieldParent.get("V");
-
-      if ((0, _primitives.isName)(fieldParentValue)) {
-        this.parent = params.dict.getRaw("Parent");
-        this.data.fieldValue = this._decodeFormValue(fieldParentValue);
+  loadResources(keys) {
+    return this.appearance.dict.getAsync("Resources").then(resources => {
+      if (!resources) {
+        return undefined;
       }
-    }
 
-    const appearanceStates = params.dict.get("AP");
+      const objectLoader = new _obj.ObjectLoader(resources, keys, resources.xref);
+      return objectLoader.load().then(function () {
+        return resources;
+      });
+    });
+  }
 
-    if (!(0, _primitives.isDict)(appearanceStates)) {
-      return;
+  getOperatorList(evaluator, task, renderForms, annotationStorage) {
+    if (!this.appearance) {
+      return Promise.resolve(new _operator_list.OperatorList());
     }
 
-    const normalAppearance = appearanceStates.get("N");
+    const appearance = this.appearance;
+    const data = this.data;
+    const appearanceDict = appearance.dict;
+    const resourcesPromise = this.loadResources(["ExtGState", "ColorSpace", "Pattern", "Shading", "XObject", 
"Font"]);
+    const bbox = appearanceDict.getArray("BBox") || [0, 0, 1, 1];
+    const matrix = appearanceDict.getArray("Matrix") || [1, 0, 0, 1, 0, 0];
+    const transform = getTransformMatrix(data.rect, bbox, matrix);
+    return resourcesPromise.then(resources => {
+      const opList = new _operator_list.OperatorList();
+      opList.addOp(_util.OPS.beginAnnotation, [data.rect, transform, matrix]);
+      return evaluator.getOperatorList({
+        stream: appearance,
+        task,
+        resources,
+        operatorList: opList,
+        fallbackFontDict: this._fallbackFontDict
+      }).then(() => {
+        opList.addOp(_util.OPS.endAnnotation, []);
+        this.reset();
+        return opList;
+      });
+    });
+  }
 
-    if (!(0, _primitives.isDict)(normalAppearance)) {
-      return;
-    }
+  async save(evaluator, task, annotationStorage) {
+    return null;
+  }
 
-    for (const key of normalAppearance.getKeys()) {
-      if (key !== "Off") {
-        this.data.buttonValue = key;
-        break;
-      }
+  getFieldObject() {
+    if (this.data.kidIds) {
+      return {
+        id: this.data.id,
+        actions: this.data.actions,
+        name: this.data.fieldName,
+        type: "",
+        kidIds: this.data.kidIds
+      };
     }
 
-    this.checkedAppearance = normalAppearance.get(this.data.buttonValue);
-    this.uncheckedAppearance = normalAppearance.get("Off") || null;
+    return null;
   }
 
-  _processPushButton(params) {
-    if (!params.dict.has("A")) {
-      (0, _util.warn)("Push buttons without action dictionaries are not supported");
-      return;
+  reset() {
+    for (const stream of this._streams) {
+      stream.reset();
     }
-
-    _obj.Catalog.parseDestDictionary({
-      destDict: params.dict,
-      resultObj: this.data,
-      docBaseUrl: params.pdfManager.docBaseUrl
-    });
   }
 
-}
+  _constructFieldName(dict) {
+    if (!dict.has("T") && !dict.has("Parent")) {
+      (0, _util.warn)("Unknown field name, falling back to empty field name.");
+      return "";
+    }
 
-class ChoiceWidgetAnnotation extends WidgetAnnotation {
-  constructor(params) {
-    super(params);
-    this.data.options = [];
-    const options = (0, _core_utils.getInheritableProperty)({
-      dict: params.dict,
-      key: "Opt"
-    });
+    if (!dict.has("Parent")) {
+      return (0, _util.stringToPDFString)(dict.get("T"));
+    }
 
-    if (Array.isArray(options)) {
-      const xref = params.xref;
+    const fieldName = [];
 
-      for (let i = 0, ii = options.length; i < ii; i++) {
-        const option = xref.fetchIfRef(options[i]);
-        const isOptionArray = Array.isArray(option);
-        this.data.options[i] = {
-          exportValue: this._decodeFormValue(isOptionArray ? xref.fetchIfRef(option[0]) : option),
-          displayValue: this._decodeFormValue(isOptionArray ? xref.fetchIfRef(option[1]) : option)
-        };
-      }
+    if (dict.has("T")) {
+      fieldName.unshift((0, _util.stringToPDFString)(dict.get("T")));
     }
 
-    if ((0, _util.isString)(this.data.fieldValue)) {
-      this.data.fieldValue = [this.data.fieldValue];
-    } else if (!this.data.fieldValue) {
-      this.data.fieldValue = [];
+    let loopDict = dict;
+    const visited = new _primitives.RefSet();
+
+    if (dict.objId) {
+      visited.put(dict.objId);
     }
 
-    this.data.combo = this.hasFieldFlag(_util.AnnotationFieldFlag.COMBO);
-    this.data.multiSelect = this.hasFieldFlag(_util.AnnotationFieldFlag.MULTISELECT);
-    this._hasText = true;
-  }
+    while (loopDict.has("Parent")) {
+      loopDict = loopDict.get("Parent");
 
-}
+      if (!(loopDict instanceof _primitives.Dict) || loopDict.objId && visited.has(loopDict.objId)) {
+        break;
+      }
 
-class TextAnnotation extends MarkupAnnotation {
-  constructor(parameters) {
-    const DEFAULT_ICON_SIZE = 22;
-    super(parameters);
-    const dict = parameters.dict;
-    this.data.annotationType = _util.AnnotationType.TEXT;
+      if (loopDict.objId) {
+        visited.put(loopDict.objId);
+      }
 
-    if (this.data.hasAppearance) {
-      this.data.name = "NoIcon";
-    } else {
-      this.data.rect[1] = this.data.rect[3] - DEFAULT_ICON_SIZE;
-      this.data.rect[2] = this.data.rect[0] + DEFAULT_ICON_SIZE;
-      this.data.name = dict.has("Name") ? dict.get("Name").name : "Note";
+      if (loopDict.has("T")) {
+        fieldName.unshift((0, _util.stringToPDFString)(loopDict.get("T")));
+      }
     }
 
-    if (dict.has("State")) {
-      this.data.state = dict.get("State") || null;
-      this.data.stateModel = dict.get("StateModel") || null;
-    } else {
-      this.data.state = null;
-      this.data.stateModel = null;
-    }
+    return fieldName.join(".");
   }
 
 }
 
-class LinkAnnotation extends Annotation {
-  constructor(params) {
-    super(params);
-    this.data.annotationType = _util.AnnotationType.LINK;
-    const quadPoints = getQuadPoints(params.dict, this.rectangle);
+exports.Annotation = Annotation;
 
-    if (quadPoints) {
-      this.data.quadPoints = quadPoints;
+class AnnotationBorderStyle {
+  constructor() {
+    this.width = 1;
+    this.style = _util.AnnotationBorderStyleType.SOLID;
+    this.dashArray = [3];
+    this.horizontalCornerRadius = 0;
+    this.verticalCornerRadius = 0;
+  }
+
+  setWidth(width, rect = [0, 0, 0, 0]) {
+    if ((0, _primitives.isName)(width)) {
+      this.width = 0;
+      return;
     }
 
-    _obj.Catalog.parseDestDictionary({
-      destDict: params.dict,
-      resultObj: this.data,
-      docBaseUrl: params.pdfManager.docBaseUrl
-    });
-  }
+    if (Number.isInteger(width)) {
+      if (width > 0) {
+        const maxWidth = (rect[2] - rect[0]) / 2;
+        const maxHeight = (rect[3] - rect[1]) / 2;
 
-}
+        if (maxWidth > 0 && maxHeight > 0 && (width > maxWidth || width > maxHeight)) {
+          (0, _util.warn)(`AnnotationBorderStyle.setWidth - ignoring width: ${width}`);
+          width = 1;
+        }
+      }
 
-class PopupAnnotation extends Annotation {
-  constructor(parameters) {
-    super(parameters);
-    this.data.annotationType = _util.AnnotationType.POPUP;
-    let parentItem = parameters.dict.get("Parent");
+      this.width = width;
+    }
+  }
 
-    if (!parentItem) {
-      (0, _util.warn)("Popup annotation has a missing or invalid parent annotation.");
+  setStyle(style) {
+    if (!(0, _primitives.isName)(style)) {
       return;
     }
 
-    const parentSubtype = parentItem.get("Subtype");
-    this.data.parentType = (0, _primitives.isName)(parentSubtype) ? parentSubtype.name : null;
-    const rawParent = parameters.dict.getRaw("Parent");
-    this.data.parentId = (0, _primitives.isRef)(rawParent) ? rawParent.toString() : null;
-    const rt = parentItem.get("RT");
+    switch (style.name) {
+      case "S":
+        this.style = _util.AnnotationBorderStyleType.SOLID;
+        break;
 
-    if ((0, _primitives.isName)(rt, _util.AnnotationReplyType.GROUP)) {
-      parentItem = parentItem.get("IRT");
-    }
+      case "D":
+        this.style = _util.AnnotationBorderStyleType.DASHED;
+        break;
 
-    if (!parentItem.has("M")) {
-      this.data.modificationDate = null;
-    } else {
-      this.setModificationDate(parentItem.get("M"));
-      this.data.modificationDate = this.modificationDate;
-    }
+      case "B":
+        this.style = _util.AnnotationBorderStyleType.BEVELED;
+        break;
 
-    if (!parentItem.has("C")) {
-      this.data.color = null;
-    } else {
-      this.setColor(parentItem.getArray("C"));
-      this.data.color = this.color;
+      case "I":
+        this.style = _util.AnnotationBorderStyleType.INSET;
+        break;
+
+      case "U":
+        this.style = _util.AnnotationBorderStyleType.UNDERLINE;
+        break;
+
+      default:
+        break;
     }
+  }
 
-    if (!this.viewable) {
-      const parentFlags = parentItem.get("F");
+  setDashArray(dashArray) {
+    if (Array.isArray(dashArray) && dashArray.length > 0) {
+      let isValid = true;
+      let allZeros = true;
 
-      if (this._isViewable(parentFlags)) {
-        this.setFlags(parentFlags);
+      for (const element of dashArray) {
+        const validNumber = +element >= 0;
+
+        if (!validNumber) {
+          isValid = false;
+          break;
+        } else if (element > 0) {
+          allZeros = false;
+        }
       }
-    }
 
-    this.data.title = (0, _util.stringToPDFString)(parentItem.get("T") || "");
-    this.data.contents = (0, _util.stringToPDFString)(parentItem.get("Contents") || "");
+      if (isValid && !allZeros) {
+        this.dashArray = dashArray;
+      } else {
+        this.width = 0;
+      }
+    } else if (dashArray) {
+      this.width = 0;
+    }
   }
 
-}
+  setHorizontalCornerRadius(radius) {
+    if (Number.isInteger(radius)) {
+      this.horizontalCornerRadius = radius;
+    }
+  }
 
-class FreeTextAnnotation extends MarkupAnnotation {
-  constructor(parameters) {
-    super(parameters);
-    this.data.annotationType = _util.AnnotationType.FREETEXT;
+  setVerticalCornerRadius(radius) {
+    if (Number.isInteger(radius)) {
+      this.verticalCornerRadius = radius;
+    }
   }
 
 }
 
-class LineAnnotation extends MarkupAnnotation {
+exports.AnnotationBorderStyle = AnnotationBorderStyle;
+
+class MarkupAnnotation extends Annotation {
   constructor(parameters) {
     super(parameters);
-    this.data.annotationType = _util.AnnotationType.LINE;
-    this.data.lineCoordinates = _util.Util.normalizeRect(parameters.dict.getArray("L"));
-  }
+    const dict = parameters.dict;
 
-}
+    if (dict.has("IRT")) {
+      const rawIRT = dict.getRaw("IRT");
+      this.data.inReplyTo = (0, _primitives.isRef)(rawIRT) ? rawIRT.toString() : null;
+      const rt = dict.get("RT");
+      this.data.replyType = (0, _primitives.isName)(rt) ? rt.name : _util.AnnotationReplyType.REPLY;
+    }
 
-class SquareAnnotation extends MarkupAnnotation {
-  constructor(parameters) {
-    super(parameters);
-    this.data.annotationType = _util.AnnotationType.SQUARE;
-  }
+    if (this.data.replyType === _util.AnnotationReplyType.GROUP) {
+      const parent = dict.get("IRT");
+      this.data.title = (0, _util.stringToPDFString)(parent.get("T") || "");
+      this.setContents(parent.get("Contents"));
+      this.data.contents = this.contents;
 
-}
+      if (!parent.has("CreationDate")) {
+        this.data.creationDate = null;
+      } else {
+        this.setCreationDate(parent.get("CreationDate"));
+        this.data.creationDate = this.creationDate;
+      }
 
-class CircleAnnotation extends MarkupAnnotation {
-  constructor(parameters) {
-    super(parameters);
-    this.data.annotationType = _util.AnnotationType.CIRCLE;
-  }
+      if (!parent.has("M")) {
+        this.data.modificationDate = null;
+      } else {
+        this.setModificationDate(parent.get("M"));
+        this.data.modificationDate = this.modificationDate;
+      }
 
-}
+      this.data.hasPopup = parent.has("Popup");
 
-class PolylineAnnotation extends MarkupAnnotation {
-  constructor(parameters) {
-    super(parameters);
-    this.data.annotationType = _util.AnnotationType.POLYLINE;
-    const rawVertices = parameters.dict.getArray("Vertices");
-    this.data.vertices = [];
+      if (!parent.has("C")) {
+        this.data.color = null;
+      } else {
+        this.setColor(parent.getArray("C"));
+        this.data.color = this.color;
+      }
+    } else {
+      this.data.title = (0, _util.stringToPDFString)(dict.get("T") || "");
+      this.setCreationDate(dict.get("CreationDate"));
+      this.data.creationDate = this.creationDate;
+      this.data.hasPopup = dict.has("Popup");
 
-    for (let i = 0, ii = rawVertices.length; i < ii; i += 2) {
-      this.data.vertices.push({
-        x: rawVertices[i],
-        y: rawVertices[i + 1]
-      });
+      if (!dict.has("C")) {
+        this.data.color = null;
+      }
     }
   }
 
-}
-
-class PolygonAnnotation extends PolylineAnnotation {
-  constructor(parameters) {
-    super(parameters);
-    this.data.annotationType = _util.AnnotationType.POLYGON;
+  setCreationDate(creationDate) {
+    this.creationDate = (0, _util.isString)(creationDate) ? creationDate : null;
   }
 
-}
+  _setDefaultAppearance({
+    xref,
+    extra,
+    strokeColor,
+    fillColor,
+    blendMode,
+    pointsCallback
+  }) {
+    let minX = Number.MAX_VALUE;
+    let minY = Number.MAX_VALUE;
+    let maxX = Number.MIN_VALUE;
+    let maxY = Number.MIN_VALUE;
+    const buffer = ["q"];
+
+    if (extra) {
+      buffer.push(extra);
+    }
+
+    if (strokeColor) {
+      buffer.push(`${strokeColor[0]} ${strokeColor[1]} ${strokeColor[2]} RG`);
+    }
+
+    if (fillColor) {
+      buffer.push(`${fillColor[0]} ${fillColor[1]} ${fillColor[2]} rg`);
+    }
+
+    let pointsArray = this.data.quadPoints;
+
+    if (!pointsArray) {
+      pointsArray = [[{
+        x: this.rectangle[0],
+        y: this.rectangle[3]
+      }, {
+        x: this.rectangle[2],
+        y: this.rectangle[3]
+      }, {
+        x: this.rectangle[0],
+        y: this.rectangle[1]
+      }, {
+        x: this.rectangle[2],
+        y: this.rectangle[1]
+      }]];
+    }
+
+    for (const points of pointsArray) {
+      const [mX, MX, mY, MY] = pointsCallback(buffer, points);
+      minX = Math.min(minX, mX);
+      maxX = Math.max(maxX, MX);
+      minY = Math.min(minY, mY);
+      maxY = Math.max(maxY, MY);
+    }
+
+    buffer.push("Q");
+    const formDict = new _primitives.Dict(xref);
+    const appearanceStreamDict = new _primitives.Dict(xref);
+    appearanceStreamDict.set("Subtype", _primitives.Name.get("Form"));
+    const appearanceStream = new _stream.StringStream(buffer.join(" "));
+    appearanceStream.dict = appearanceStreamDict;
+    formDict.set("Fm0", appearanceStream);
+    const gsDict = new _primitives.Dict(xref);
+
+    if (blendMode) {
+      gsDict.set("BM", _primitives.Name.get(blendMode));
+    }
+
+    const stateDict = new _primitives.Dict(xref);
+    stateDict.set("GS0", gsDict);
+    const resources = new _primitives.Dict(xref);
+    resources.set("ExtGState", stateDict);
+    resources.set("XObject", formDict);
+    const appearanceDict = new _primitives.Dict(xref);
+    appearanceDict.set("Resources", resources);
+    const bbox = this.data.rect = [minX, minY, maxX, maxY];
+    appearanceDict.set("BBox", bbox);
+    this.appearance = new _stream.StringStream("/GS0 gs /Fm0 Do");
+    this.appearance.dict = appearanceDict;
 
-class CaretAnnotation extends MarkupAnnotation {
-  constructor(parameters) {
-    super(parameters);
-    this.data.annotationType = _util.AnnotationType.CARET;
+    this._streams.push(this.appearance, appearanceStream);
   }
 
 }
 
-class InkAnnotation extends MarkupAnnotation {
-  constructor(parameters) {
-    super(parameters);
-    this.data.annotationType = _util.AnnotationType.INK;
-    const xref = parameters.xref;
-    const originalInkLists = parameters.dict.getArray("InkList");
-    this.data.inkLists = [];
+exports.MarkupAnnotation = MarkupAnnotation;
 
-    for (let i = 0, ii = originalInkLists.length; i < ii; ++i) {
-      this.data.inkLists.push([]);
+class WidgetAnnotation extends Annotation {
+  constructor(params) {
+    super(params);
+    const dict = params.dict;
+    const data = this.data;
+    this.ref = params.ref;
+    data.annotationType = _util.AnnotationType.WIDGET;
 
-      for (let j = 0, jj = originalInkLists[i].length; j < jj; j += 2) {
-        this.data.inkLists[i].push({
-          x: xref.fetchIfRef(originalInkLists[i][j]),
-          y: xref.fetchIfRef(originalInkLists[i][j + 1])
-        });
-      }
+    if (data.fieldName === undefined) {
+      data.fieldName = this._constructFieldName(dict);
     }
-  }
 
-}
+    if (data.actions === undefined) {
+      data.actions = (0, _core_utils.collectActions)(params.xref, dict, _util.AnnotationActionEventType);
+    }
 
-class HighlightAnnotation extends MarkupAnnotation {
-  constructor(parameters) {
-    super(parameters);
-    this.data.annotationType = _util.AnnotationType.HIGHLIGHT;
-    const quadPoints = getQuadPoints(parameters.dict, this.rectangle);
+    const fieldValue = (0, _core_utils.getInheritableProperty)({
+      dict,
+      key: "V",
+      getArray: true
+    });
+    data.fieldValue = this._decodeFormValue(fieldValue);
+    const defaultFieldValue = (0, _core_utils.getInheritableProperty)({
+      dict,
+      key: "DV",
+      getArray: true
+    });
+    data.defaultFieldValue = this._decodeFormValue(defaultFieldValue);
+    data.alternativeText = (0, _util.stringToPDFString)(dict.get("TU") || "");
+    const defaultAppearance = (0, _core_utils.getInheritableProperty)({
+      dict,
+      key: "DA"
+    }) || params.acroForm.get("DA");
+    this._defaultAppearance = (0, _util.isString)(defaultAppearance) ? defaultAppearance : "";
+    data.defaultAppearanceData = (0, _default_appearance.parseDefaultAppearance)(this._defaultAppearance);
+    const fieldType = (0, _core_utils.getInheritableProperty)({
+      dict,
+      key: "FT"
+    });
+    data.fieldType = (0, _primitives.isName)(fieldType) ? fieldType.name : null;
+    const localResources = (0, _core_utils.getInheritableProperty)({
+      dict,
+      key: "DR"
+    });
+    const acroFormResources = params.acroForm.get("DR");
+    const appearanceResources = this.appearance && this.appearance.dict.get("Resources");
+    this._fieldResources = {
+      localResources,
+      acroFormResources,
+      appearanceResources,
+      mergedResources: _primitives.Dict.merge({
+        xref: params.xref,
+        dictArray: [localResources, appearanceResources, acroFormResources],
+        mergeSubDicts: true
+      })
+    };
+    data.fieldFlags = (0, _core_utils.getInheritableProperty)({
+      dict,
+      key: "Ff"
+    });
 
-    if (quadPoints) {
-      this.data.quadPoints = quadPoints;
+    if (!Number.isInteger(data.fieldFlags) || data.fieldFlags < 0) {
+      data.fieldFlags = 0;
     }
-  }
-
-}
 
-class UnderlineAnnotation extends MarkupAnnotation {
-  constructor(parameters) {
-    super(parameters);
-    this.data.annotationType = _util.AnnotationType.UNDERLINE;
-    const quadPoints = getQuadPoints(parameters.dict, this.rectangle);
+    data.readOnly = this.hasFieldFlag(_util.AnnotationFieldFlag.READONLY);
+    data.hidden = this._hasFlag(data.annotationFlags, _util.AnnotationFlag.HIDDEN);
 
-    if (quadPoints) {
-      this.data.quadPoints = quadPoints;
+    if (data.fieldType === "Sig") {
+      data.fieldValue = null;
+      this.setFlags(_util.AnnotationFlag.HIDDEN);
+      data.hidden = true;
     }
   }
 
-}
-
-class SquigglyAnnotation extends MarkupAnnotation {
-  constructor(parameters) {
-    super(parameters);
-    this.data.annotationType = _util.AnnotationType.SQUIGGLY;
-    const quadPoints = getQuadPoints(parameters.dict, this.rectangle);
-
-    if (quadPoints) {
-      this.data.quadPoints = quadPoints;
+  _decodeFormValue(formValue) {
+    if (Array.isArray(formValue)) {
+      return formValue.filter(item => (0, _util.isString)(item)).map(item => (0, 
_util.stringToPDFString)(item));
+    } else if ((0, _primitives.isName)(formValue)) {
+      return (0, _util.stringToPDFString)(formValue.name);
+    } else if ((0, _util.isString)(formValue)) {
+      return (0, _util.stringToPDFString)(formValue);
     }
+
+    return null;
   }
 
-}
+  hasFieldFlag(flag) {
+    return !!(this.data.fieldFlags & flag);
+  }
 
-class StrikeOutAnnotation extends MarkupAnnotation {
-  constructor(parameters) {
-    super(parameters);
-    this.data.annotationType = _util.AnnotationType.STRIKEOUT;
-    const quadPoints = getQuadPoints(parameters.dict, this.rectangle);
+  getOperatorList(evaluator, task, renderForms, annotationStorage) {
+    if (renderForms) {
+      return Promise.resolve(new _operator_list.OperatorList());
+    }
 
-    if (quadPoints) {
-      this.data.quadPoints = quadPoints;
+    if (!this._hasText) {
+      return super.getOperatorList(evaluator, task, renderForms, annotationStorage);
     }
-  }
 
-}
+    return this._getAppearance(evaluator, task, annotationStorage).then(content => {
+      if (this.appearance && content === null) {
+        return super.getOperatorList(evaluator, task, renderForms, annotationStorage);
+      }
 
-class StampAnnotation extends MarkupAnnotation {
-  constructor(parameters) {
-    super(parameters);
-    this.data.annotationType = _util.AnnotationType.STAMP;
-  }
+      const operatorList = new _operator_list.OperatorList();
 
-}
+      if (!this._defaultAppearance || content === null) {
+        return operatorList;
+      }
 
-class FileAttachmentAnnotation extends MarkupAnnotation {
-  constructor(parameters) {
-    super(parameters);
-    const file = new _obj.FileSpec(parameters.dict.get("FS"), parameters.xref);
-    this.data.annotationType = _util.AnnotationType.FILEATTACHMENT;
-    this.data.file = file.serializable;
+      const matrix = [1, 0, 0, 1, 0, 0];
+      const bbox = [0, 0, this.data.rect[2] - this.data.rect[0], this.data.rect[3] - this.data.rect[1]];
+      const transform = getTransformMatrix(this.data.rect, bbox, matrix);
+      operatorList.addOp(_util.OPS.beginAnnotation, [this.data.rect, transform, matrix]);
+      const stream = new _stream.StringStream(content);
+      return evaluator.getOperatorList({
+        stream,
+        task,
+        resources: this._fieldResources.mergedResources,
+        operatorList
+      }).then(function () {
+        operatorList.addOp(_util.OPS.endAnnotation, []);
+        return operatorList;
+      });
+    });
   }
 
-}
-
-/***/ }),
-/* 26 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+  async save(evaluator, task, annotationStorage) {
+    if (!annotationStorage) {
+      return null;
+    }
 
-"use strict";
+    const storageEntry = annotationStorage.get(this.data.id);
+    const value = storageEntry && storageEntry.value;
 
+    if (value === this.data.fieldValue || value === undefined) {
+      return null;
+    }
 
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.OperatorList = void 0;
+    let appearance = await this._getAppearance(evaluator, task, annotationStorage);
 
-var _util = __w_pdfjs_require__(2);
+    if (appearance === null) {
+      return null;
+    }
 
-var QueueOptimizer = function QueueOptimizerClosure() {
-  function addState(parentState, pattern, checkFn, iterateFn, processFn) {
-    var state = parentState;
+    const {
+      xref
+    } = evaluator;
+    const dict = xref.fetchIfRef(this.ref);
 
-    for (var i = 0, ii = pattern.length - 1; i < ii; i++) {
-      var item = pattern[i];
-      state = state[item] || (state[item] = []);
+    if (!(0, _primitives.isDict)(dict)) {
+      return null;
     }
 
-    state[pattern[pattern.length - 1]] = {
-      checkFn,
-      iterateFn,
-      processFn
+    const bbox = [0, 0, this.data.rect[2] - this.data.rect[0], this.data.rect[3] - this.data.rect[1]];
+    const xfa = {
+      path: (0, _util.stringToPDFString)(dict.get("T") || ""),
+      value
     };
+    const newRef = xref.getNewRef();
+    const AP = new _primitives.Dict(xref);
+    AP.set("N", newRef);
+    const encrypt = xref.encrypt;
+    let originalTransform = null;
+    let newTransform = null;
+
+    if (encrypt) {
+      originalTransform = encrypt.createCipherTransform(this.ref.num, this.ref.gen);
+      newTransform = encrypt.createCipherTransform(newRef.num, newRef.gen);
+      appearance = newTransform.encryptString(appearance);
+    }
+
+    dict.set("V", (0, _util.isAscii)(value) ? value : (0, _util.stringToUTF16BEString)(value));
+    dict.set("AP", AP);
+    dict.set("M", `D:${(0, _util.getModificationDate)()}`);
+    const appearanceDict = new _primitives.Dict(xref);
+    appearanceDict.set("Length", appearance.length);
+    appearanceDict.set("Subtype", _primitives.Name.get("Form"));
+    appearanceDict.set("Resources", this._getSaveFieldResources(xref));
+    appearanceDict.set("BBox", bbox);
+    const bufferOriginal = [`${this.ref.num} ${this.ref.gen} obj\n`];
+    (0, _writer.writeDict)(dict, bufferOriginal, originalTransform);
+    bufferOriginal.push("\nendobj\n");
+    const bufferNew = [`${newRef.num} ${newRef.gen} obj\n`];
+    (0, _writer.writeDict)(appearanceDict, bufferNew, newTransform);
+    bufferNew.push(" stream\n");
+    bufferNew.push(appearance);
+    bufferNew.push("\nendstream\nendobj\n");
+    return [{
+      ref: this.ref,
+      data: bufferOriginal.join(""),
+      xfa
+    }, {
+      ref: newRef,
+      data: bufferNew.join(""),
+      xfa: null
+    }];
   }
 
-  function handlePaintSolidColorImageMask(iFirstSave, count, fnArray, argsArray) {
-    var iFirstPIMXO = iFirstSave + 2;
+  async _getAppearance(evaluator, task, annotationStorage) {
+    const isPassword = this.hasFieldFlag(_util.AnnotationFieldFlag.PASSWORD);
 
-    for (var i = 0; i < count; i++) {
-      var arg = argsArray[iFirstPIMXO + 4 * i];
-      var imageMask = arg.length === 1 && arg[0];
+    if (!annotationStorage || isPassword) {
+      return null;
+    }
 
-      if (imageMask && imageMask.width === 1 && imageMask.height === 1 && (!imageMask.data.length || 
imageMask.data.length === 1 && imageMask.data[0] === 0)) {
-        fnArray[iFirstPIMXO + 4 * i] = _util.OPS.paintSolidColorImageMask;
-        continue;
-      }
+    const storageEntry = annotationStorage.get(this.data.id);
+    let value = storageEntry && storageEntry.value;
 
-      break;
+    if (value === undefined) {
+      return null;
     }
 
-    return count - i;
-  }
+    value = value.trim();
 
-  var InitialState = [];
-  addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintInlineImageXObject, 
_util.OPS.restore], null, function iterateInlineImageGroup(context, i) {
-    var fnArray = context.fnArray;
-    var iFirstSave = context.iCurr - 3;
-    var pos = (i - iFirstSave) % 4;
+    if (value === "") {
+      return "";
+    }
 
-    switch (pos) {
-      case 0:
-        return fnArray[i] === _util.OPS.save;
+    let lineCount = -1;
 
-      case 1:
-        return fnArray[i] === _util.OPS.transform;
+    if (this.data.multiLine) {
+      lineCount = value.split(/\r\n|\r|\n/).length;
+    }
 
-      case 2:
-        return fnArray[i] === _util.OPS.paintInlineImageXObject;
+    const defaultPadding = 2;
+    const hPadding = defaultPadding;
+    const totalHeight = this.data.rect[3] - this.data.rect[1];
+    const totalWidth = this.data.rect[2] - this.data.rect[0];
 
-      case 3:
-        return fnArray[i] === _util.OPS.restore;
+    if (!this._defaultAppearance) {
+      this.data.defaultAppearanceData = (0, 
_default_appearance.parseDefaultAppearance)(this._defaultAppearance = "/Helvetica 0 Tf 0 g");
     }
 
-    throw new Error(`iterateInlineImageGroup - invalid pos: ${pos}`);
-  }, function foundInlineImageGroup(context, i) {
-    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;
-    var count = Math.min(Math.floor((i - iFirstSave) / 4), MAX_IMAGES_IN_INLINE_IMAGES_BLOCK);
+    const [defaultAppearance, fontSize] = this._computeFontSize(totalHeight, lineCount);
 
-    if (count < MIN_IMAGES_IN_INLINE_IMAGES_BLOCK) {
-      return i - (i - iFirstSave) % 4;
+    const font = await this._getFontData(evaluator, task);
+    let descent = font.descent;
+
+    if (isNaN(descent)) {
+      descent = 0;
     }
 
-    var maxX = 0;
-    var map = [],
-        maxLineHeight = 0;
-    var currentX = IMAGE_PADDING,
-        currentY = IMAGE_PADDING;
-    var q;
+    const vPadding = defaultPadding + Math.abs(descent) * fontSize;
+    const alignment = this.data.textAlignment;
 
-    for (q = 0; q < count; q++) {
-      var transform = argsArray[iFirstTransform + (q << 2)];
-      var img = argsArray[iFirstPIIXO + (q << 2)][0];
+    if (this.data.multiLine) {
+      return this._getMultilineAppearance(defaultAppearance, value, font, fontSize, totalWidth, totalHeight, 
alignment, hPadding, vPadding);
+    }
 
-      if (currentX + img.width > MAX_WIDTH) {
-        maxX = Math.max(maxX, currentX);
-        currentY += maxLineHeight + 2 * IMAGE_PADDING;
-        currentX = 0;
-        maxLineHeight = 0;
-      }
+    const encodedString = font.encodeString(value).join("");
 
-      map.push({
-        transform,
-        x: currentX,
-        y: currentY,
-        w: img.width,
-        h: img.height
-      });
-      currentX += img.width + 2 * IMAGE_PADDING;
-      maxLineHeight = Math.max(maxLineHeight, img.height);
+    if (this.data.comb) {
+      return this._getCombAppearance(defaultAppearance, font, encodedString, totalWidth, hPadding, vPadding);
     }
 
-    var imgWidth = Math.max(maxX, currentX) + IMAGE_PADDING;
-    var imgHeight = currentY + maxLineHeight + IMAGE_PADDING;
-    var imgData = new Uint8ClampedArray(imgWidth * imgHeight * 4);
-    var imgRowSize = imgWidth << 2;
+    if (alignment === 0 || alignment > 2) {
+      return "/Tx BMC q BT " + defaultAppearance + ` 1 0 0 1 ${hPadding} ${vPadding} Tm (${(0, 
_util.escapeString)(encodedString)}) Tj` + " ET Q EMC";
+    }
 
-    for (q = 0; q < count; q++) {
-      var data = argsArray[iFirstPIIXO + (q << 2)][0].data;
-      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);
+    const renderedText = this._renderText(encodedString, font, fontSize, totalWidth, alignment, hPadding, 
vPadding);
 
-      for (var k = 0, kk = map[q].h; k < kk; k++) {
-        imgData.set(data.subarray(dataOffset, dataOffset + rowSize), offset);
-        dataOffset += rowSize;
-        offset += imgRowSize;
-      }
+    return "/Tx BMC q BT " + defaultAppearance + ` 1 0 0 1 0 0 Tm ${renderedText}` + " ET Q EMC";
+  }
 
-      imgData.set(data.subarray(dataOffset - rowSize, dataOffset), offset);
+  async _getFontData(evaluator, task) {
+    const operatorList = new _operator_list.OperatorList();
+    const initialState = {
+      font: null,
 
-      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;
+      clone() {
+        return this;
       }
-    }
 
-    fnArray.splice(iFirstSave, count * 4, _util.OPS.paintInlineImageXObjectGroup);
-    argsArray.splice(iFirstSave, count * 4, [{
-      width: imgWidth,
-      height: imgHeight,
-      kind: _util.ImageKind.RGBA_32BPP,
-      data: imgData
-    }, map]);
-    return iFirstSave + 1;
-  });
-  addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintImageMaskXObject, 
_util.OPS.restore], null, function iterateImageMaskGroup(context, i) {
-    var fnArray = context.fnArray;
-    var iFirstSave = context.iCurr - 3;
-    var pos = (i - iFirstSave) % 4;
+    };
+    const {
+      fontName,
+      fontSize
+    } = this.data.defaultAppearanceData;
+    await evaluator.handleSetFont(this._fieldResources.mergedResources, [fontName && 
_primitives.Name.get(fontName), fontSize], null, operatorList, task, initialState, null);
+    return initialState.font;
+  }
 
-    switch (pos) {
-      case 0:
-        return fnArray[i] === _util.OPS.save;
+  _computeFontSize(height, lineCount) {
+    let {
+      fontSize
+    } = this.data.defaultAppearanceData;
 
-      case 1:
-        return fnArray[i] === _util.OPS.transform;
+    if (!fontSize) {
+      const roundWithOneDigit = x => Math.round(x * 10) / 10;
 
-      case 2:
-        return fnArray[i] === _util.OPS.paintImageMaskXObject;
+      const FONT_FACTOR = 0.8;
 
-      case 3:
-        return fnArray[i] === _util.OPS.restore;
+      if (lineCount === -1) {
+        fontSize = roundWithOneDigit(FONT_FACTOR * height);
+      } else {
+        fontSize = 10;
+        let lineHeight = fontSize / FONT_FACTOR;
+        let numberOfLines = Math.round(height / lineHeight);
+        numberOfLines = Math.max(numberOfLines, lineCount);
+        lineHeight = height / numberOfLines;
+        fontSize = roundWithOneDigit(FONT_FACTOR * lineHeight);
+      }
+
+      const {
+        fontName,
+        fontColor
+      } = this.data.defaultAppearanceData;
+      this._defaultAppearance = (0, _default_appearance.createDefaultAppearance)({
+        fontSize,
+        fontName,
+        fontColor
+      });
     }
 
-    throw new Error(`iterateImageMaskGroup - invalid pos: ${pos}`);
-  }, function foundImageMaskGroup(context, i) {
-    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;
-    var count = Math.floor((i - iFirstSave) / 4);
-    count = handlePaintSolidColorImageMask(iFirstSave, count, fnArray, argsArray);
+    return [this._defaultAppearance, fontSize];
+  }
 
-    if (count < MIN_IMAGES_IN_MASKS_BLOCK) {
-      return i - (i - iFirstSave) % 4;
+  _renderText(text, font, fontSize, totalWidth, alignment, hPadding, vPadding) {
+    const glyphs = font.charsToGlyphs(text);
+    const scale = fontSize / 1000;
+    let width = 0;
+
+    for (const glyph of glyphs) {
+      width += glyph.width * scale;
     }
 
-    var q;
-    var isSameImage = false;
-    var iTransform, transformArgs;
-    var firstPIMXOArg0 = argsArray[iFirstPIMXO][0];
-    const firstTransformArg0 = argsArray[iFirstTransform][0],
-          firstTransformArg1 = argsArray[iFirstTransform][1],
-          firstTransformArg2 = argsArray[iFirstTransform][2],
-          firstTransformArg3 = argsArray[iFirstTransform][3];
+    let shift;
 
-    if (firstTransformArg1 === firstTransformArg2) {
-      isSameImage = true;
-      iTransform = iFirstTransform + 4;
-      var iPIMXO = iFirstPIMXO + 4;
+    if (alignment === 1) {
+      shift = (totalWidth - width) / 2;
+    } else if (alignment === 2) {
+      shift = totalWidth - width - hPadding;
+    } else {
+      shift = hPadding;
+    }
 
-      for (q = 1; q < count; q++, iTransform += 4, iPIMXO += 4) {
-        transformArgs = argsArray[iTransform];
+    shift = shift.toFixed(2);
+    vPadding = vPadding.toFixed(2);
+    return `${shift} ${vPadding} Td (${(0, _util.escapeString)(text)}) Tj`;
+  }
 
-        if (argsArray[iPIMXO][0] !== firstPIMXOArg0 || transformArgs[0] !== firstTransformArg0 || 
transformArgs[1] !== firstTransformArg1 || transformArgs[2] !== firstTransformArg2 || transformArgs[3] !== 
firstTransformArg3) {
-          if (q < MIN_IMAGES_IN_MASKS_BLOCK) {
-            isSameImage = false;
-          } else {
-            count = q;
-          }
+  _getSaveFieldResources(xref) {
+    const {
+      localResources,
+      appearanceResources,
+      acroFormResources
+    } = this._fieldResources;
+    const fontName = this.data.defaultAppearanceData && this.data.defaultAppearanceData.fontName;
 
-          break;
-        }
-      }
+    if (!fontName) {
+      return localResources || _primitives.Dict.empty;
     }
 
-    if (isSameImage) {
-      count = Math.min(count, MAX_SAME_IMAGES_IN_MASKS_BLOCK);
-      var positions = new Float32Array(count * 2);
-      iTransform = iFirstTransform;
+    for (const resources of [localResources, appearanceResources]) {
+      if (resources instanceof _primitives.Dict) {
+        const localFont = resources.get("Font");
 
-      for (q = 0; q < count; q++, iTransform += 4) {
-        transformArgs = argsArray[iTransform];
-        positions[q << 1] = transformArgs[4];
-        positions[(q << 1) + 1] = transformArgs[5];
+        if (localFont instanceof _primitives.Dict && localFont.has(fontName)) {
+          return resources;
+        }
       }
+    }
 
-      fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageMaskXObjectRepeat);
-      argsArray.splice(iFirstSave, count * 4, [firstPIMXOArg0, firstTransformArg0, firstTransformArg1, 
firstTransformArg2, firstTransformArg3, positions]);
-    } else {
-      count = Math.min(count, MAX_IMAGES_IN_MASKS_BLOCK);
-      var images = [];
+    if (acroFormResources instanceof _primitives.Dict) {
+      const acroFormFont = acroFormResources.get("Font");
 
-      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
+      if (acroFormFont instanceof _primitives.Dict && acroFormFont.has(fontName)) {
+        const subFontDict = new _primitives.Dict(xref);
+        subFontDict.set(fontName, acroFormFont.getRaw(fontName));
+        const subResourcesDict = new _primitives.Dict(xref);
+        subResourcesDict.set("Font", subFontDict);
+        return _primitives.Dict.merge({
+          xref,
+          dictArray: [subResourcesDict, localResources],
+          mergeSubDicts: true
         });
       }
+    }
 
-      fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageMaskXObjectGroup);
-      argsArray.splice(iFirstSave, count * 4, [images]);
+    return localResources || _primitives.Dict.empty;
+  }
+
+  getFieldObject() {
+    if (this.data.fieldType === "Sig") {
+      return {
+        id: this.data.id,
+        value: null,
+        type: "signature"
+      };
     }
 
-    return iFirstSave + 1;
-  });
-  addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintImageXObject, 
_util.OPS.restore], function (context) {
-    var argsArray = context.argsArray;
-    var iFirstTransform = context.iCurr - 2;
-    return argsArray[iFirstTransform][1] === 0 && argsArray[iFirstTransform][2] === 0;
-  }, function iterateImageGroup(context, i) {
-    var fnArray = context.fnArray,
-        argsArray = context.argsArray;
-    var iFirstSave = context.iCurr - 3;
-    var pos = (i - iFirstSave) % 4;
+    return null;
+  }
 
-    switch (pos) {
-      case 0:
-        return fnArray[i] === _util.OPS.save;
+}
 
-      case 1:
-        if (fnArray[i] !== _util.OPS.transform) {
-          return false;
-        }
+class TextWidgetAnnotation extends WidgetAnnotation {
+  constructor(params) {
+    super(params);
+    this._hasText = true;
+    const dict = params.dict;
 
-        var iFirstTransform = context.iCurr - 2;
-        var firstTransformArg0 = argsArray[iFirstTransform][0];
-        var firstTransformArg3 = argsArray[iFirstTransform][3];
+    if (!(0, _util.isString)(this.data.fieldValue)) {
+      this.data.fieldValue = "";
+    }
 
-        if (argsArray[i][0] !== firstTransformArg0 || argsArray[i][1] !== 0 || argsArray[i][2] !== 0 || 
argsArray[i][3] !== firstTransformArg3) {
-          return false;
-        }
+    let alignment = (0, _core_utils.getInheritableProperty)({
+      dict,
+      key: "Q"
+    });
 
-        return true;
+    if (!Number.isInteger(alignment) || alignment < 0 || alignment > 2) {
+      alignment = null;
+    }
 
-      case 2:
-        if (fnArray[i] !== _util.OPS.paintImageXObject) {
-          return false;
-        }
+    this.data.textAlignment = alignment;
+    let maximumLength = (0, _core_utils.getInheritableProperty)({
+      dict,
+      key: "MaxLen"
+    });
 
-        var iFirstPIXO = context.iCurr - 1;
-        var firstPIXOArg0 = argsArray[iFirstPIXO][0];
+    if (!Number.isInteger(maximumLength) || maximumLength < 0) {
+      maximumLength = null;
+    }
 
-        if (argsArray[i][0] !== firstPIXOArg0) {
-          return false;
-        }
+    this.data.maxLen = maximumLength;
+    this.data.multiLine = this.hasFieldFlag(_util.AnnotationFieldFlag.MULTILINE);
+    this.data.comb = this.hasFieldFlag(_util.AnnotationFieldFlag.COMB) && 
!this.hasFieldFlag(_util.AnnotationFieldFlag.MULTILINE) && 
!this.hasFieldFlag(_util.AnnotationFieldFlag.PASSWORD) && 
!this.hasFieldFlag(_util.AnnotationFieldFlag.FILESELECT) && this.data.maxLen !== null;
+  }
 
-        return true;
+  _getCombAppearance(defaultAppearance, font, text, width, hPadding, vPadding) {
+    const combWidth = (width / this.data.maxLen).toFixed(2);
+    const buf = [];
+    const positions = font.getCharPositions(text);
 
-      case 3:
-        return fnArray[i] === _util.OPS.restore;
+    for (const [start, end] of positions) {
+      buf.push(`(${(0, _util.escapeString)(text.substring(start, end))}) Tj`);
     }
 
-    throw new Error(`iterateImageGroup - invalid pos: ${pos}`);
-  }, function (context, i) {
-    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 firstPIXOArg0 = argsArray[iFirstPIXO][0];
-    var firstTransformArg0 = argsArray[iFirstTransform][0];
-    var firstTransformArg3 = argsArray[iFirstTransform][3];
-    var count = Math.min(Math.floor((i - iFirstSave) / 4), MAX_IMAGES_IN_BLOCK);
+    const renderedComb = buf.join(` ${combWidth} 0 Td `);
+    return "/Tx BMC q BT " + defaultAppearance + ` 1 0 0 1 ${hPadding} ${vPadding} Tm ${renderedComb}` + " 
ET Q EMC";
+  }
 
-    if (count < MIN_IMAGES_IN_BLOCK) {
-      return i - (i - iFirstSave) % 4;
-    }
+  _getMultilineAppearance(defaultAppearance, text, font, fontSize, width, height, alignment, hPadding, 
vPadding) {
+    const lines = text.split(/\r\n|\r|\n/);
+    const buf = [];
+    const totalWidth = width - 2 * hPadding;
 
-    var positions = new Float32Array(count * 2);
-    var iTransform = iFirstTransform;
+    for (const line of lines) {
+      const chunks = this._splitLine(line, font, fontSize, totalWidth);
 
-    for (var q = 0; q < count; q++, iTransform += 4) {
-      var transformArgs = argsArray[iTransform];
-      positions[q << 1] = transformArgs[4];
-      positions[(q << 1) + 1] = transformArgs[5];
+      for (const chunk of chunks) {
+        const padding = buf.length === 0 ? hPadding : 0;
+        buf.push(this._renderText(chunk, font, fontSize, width, alignment, padding, -fontSize));
+      }
     }
 
-    var args = [firstPIXOArg0, firstTransformArg0, firstTransformArg3, positions];
-    fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageXObjectRepeat);
-    argsArray.splice(iFirstSave, count * 4, args);
-    return iFirstSave + 1;
-  });
-  addState(InitialState, [_util.OPS.beginText, _util.OPS.setFont, _util.OPS.setTextMatrix, 
_util.OPS.showText, _util.OPS.endText], null, function iterateShowTextGroup(context, i) {
-    var fnArray = context.fnArray,
-        argsArray = context.argsArray;
-    var iFirstSave = context.iCurr - 4;
-    var pos = (i - iFirstSave) % 5;
+    const renderedText = buf.join("\n");
+    return "/Tx BMC q BT " + defaultAppearance + ` 1 0 0 1 0 ${height} Tm ${renderedText}` + " ET Q EMC";
+  }
 
-    switch (pos) {
-      case 0:
-        return fnArray[i] === _util.OPS.beginText;
+  _splitLine(line, font, fontSize, width) {
+    line = font.encodeString(line).join("");
+    const glyphs = font.charsToGlyphs(line);
 
-      case 1:
-        return fnArray[i] === _util.OPS.setFont;
+    if (glyphs.length <= 1) {
+      return [line];
+    }
 
-      case 2:
-        return fnArray[i] === _util.OPS.setTextMatrix;
+    const positions = font.getCharPositions(line);
+    const scale = fontSize / 1000;
+    const chunks = [];
+    let lastSpacePosInStringStart = -1,
+        lastSpacePosInStringEnd = -1,
+        lastSpacePos = -1,
+        startChunk = 0,
+        currentWidth = 0;
 
-      case 3:
-        if (fnArray[i] !== _util.OPS.showText) {
-          return false;
+    for (let i = 0, ii = glyphs.length; i < ii; i++) {
+      const [start, end] = positions[i];
+      const glyph = glyphs[i];
+      const glyphWidth = glyph.width * scale;
+
+      if (glyph.unicode === " ") {
+        if (currentWidth + glyphWidth > width) {
+          chunks.push(line.substring(startChunk, start));
+          startChunk = start;
+          currentWidth = glyphWidth;
+          lastSpacePosInStringStart = -1;
+          lastSpacePos = -1;
+        } else {
+          currentWidth += glyphWidth;
+          lastSpacePosInStringStart = start;
+          lastSpacePosInStringEnd = end;
+          lastSpacePos = i;
         }
-
-        var iFirstSetFont = context.iCurr - 3;
-        var firstSetFontArg0 = argsArray[iFirstSetFont][0];
-        var firstSetFontArg1 = argsArray[iFirstSetFont][1];
-
-        if (argsArray[i][0] !== firstSetFontArg0 || argsArray[i][1] !== firstSetFontArg1) {
-          return false;
+      } else {
+        if (currentWidth + glyphWidth > width) {
+          if (lastSpacePosInStringStart !== -1) {
+            chunks.push(line.substring(startChunk, lastSpacePosInStringEnd));
+            startChunk = lastSpacePosInStringEnd;
+            i = lastSpacePos + 1;
+            lastSpacePosInStringStart = -1;
+            currentWidth = 0;
+          } else {
+            chunks.push(line.substring(startChunk, start));
+            startChunk = start;
+            currentWidth = glyphWidth;
+          }
+        } else {
+          currentWidth += glyphWidth;
         }
+      }
+    }
 
-        return true;
-
-      case 4:
-        return fnArray[i] === _util.OPS.endText;
+    if (startChunk < line.length) {
+      chunks.push(line.substring(startChunk, line.length));
     }
 
-    throw new Error(`iterateShowTextGroup - invalid pos: ${pos}`);
-  }, function (context, i) {
-    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;
-    var firstSetFontArg0 = argsArray[iFirstSetFont][0];
-    var firstSetFontArg1 = argsArray[iFirstSetFont][1];
-    var count = Math.min(Math.floor((i - iFirstBeginText) / 5), MAX_CHARS_IN_BLOCK);
+    return chunks;
+  }
 
-    if (count < MIN_CHARS_IN_BLOCK) {
-      return i - (i - iFirstBeginText) % 5;
-    }
+  getFieldObject() {
+    return {
+      id: this.data.id,
+      value: this.data.fieldValue,
+      defaultValue: this.data.defaultFieldValue,
+      multiline: this.data.multiLine,
+      password: this.hasFieldFlag(_util.AnnotationFieldFlag.PASSWORD),
+      charLimit: this.data.maxLen,
+      comb: this.data.comb,
+      editable: !this.data.readOnly,
+      hidden: this.data.hidden,
+      name: this.data.fieldName,
+      rect: this.data.rect,
+      actions: this.data.actions,
+      type: "text"
+    };
+  }
 
-    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;
-    }
+class ButtonWidgetAnnotation extends WidgetAnnotation {
+  constructor(params) {
+    super(params);
+    this.checkedAppearance = null;
+    this.uncheckedAppearance = null;
+    this.data.checkBox = !this.hasFieldFlag(_util.AnnotationFieldFlag.RADIO) && 
!this.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON);
+    this.data.radioButton = this.hasFieldFlag(_util.AnnotationFieldFlag.RADIO) && 
!this.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON);
+    this.data.pushButton = this.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON);
+    this.data.isTooltipOnly = false;
 
-    var iEndText = iFirst + 4;
+    if (this.data.checkBox) {
+      this._processCheckBox(params);
+    } else if (this.data.radioButton) {
+      this._processRadioButton(params);
+    } else if (this.data.pushButton) {
+      this._processPushButton(params);
+    } else {
+      (0, _util.warn)("Invalid field flags for button widget annotation");
+    }
+  }
 
-    for (var q = 1; q < count; q++) {
-      fnArray.splice(iEndText, 3);
-      argsArray.splice(iEndText, 3);
-      iEndText += 2;
+  getOperatorList(evaluator, task, renderForms, annotationStorage) {
+    if (this.data.pushButton) {
+      return super.getOperatorList(evaluator, task, false, annotationStorage);
     }
 
-    return iEndText + 1;
-  });
+    if (annotationStorage) {
+      const storageEntry = annotationStorage.get(this.data.id);
+      const value = storageEntry && storageEntry.value;
 
-  function QueueOptimizer(queue) {
-    this.queue = queue;
-    this.state = null;
-    this.context = {
-      iCurr: 0,
-      fnArray: queue.fnArray,
-      argsArray: queue.argsArray
-    };
-    this.match = null;
-    this.lastProcessed = 0;
-  }
+      if (value === undefined) {
+        return super.getOperatorList(evaluator, task, renderForms, annotationStorage);
+      }
 
-  QueueOptimizer.prototype = {
-    _optimize() {
-      const fnArray = this.queue.fnArray;
-      let i = this.lastProcessed,
-          ii = fnArray.length;
-      let state = this.state;
-      let match = this.match;
+      let appearance;
 
-      if (!state && !match && i + 1 === ii && !InitialState[fnArray[i]]) {
-        this.lastProcessed = ii;
-        return;
+      if (value) {
+        appearance = this.checkedAppearance;
+      } else {
+        appearance = this.uncheckedAppearance;
       }
 
-      const context = this.context;
+      if (appearance) {
+        const savedAppearance = this.appearance;
+        this.appearance = appearance;
+        const operatorList = super.getOperatorList(evaluator, task, renderForms, annotationStorage);
+        this.appearance = savedAppearance;
+        return operatorList;
+      }
 
-      while (i < ii) {
-        if (match) {
-          const iterate = (0, match.iterateFn)(context, i);
+      return Promise.resolve(new _operator_list.OperatorList());
+    }
 
-          if (iterate) {
-            i++;
-            continue;
-          }
+    return super.getOperatorList(evaluator, task, renderForms, annotationStorage);
+  }
 
-          i = (0, match.processFn)(context, i + 1);
-          ii = fnArray.length;
-          match = null;
-          state = null;
+  async save(evaluator, task, annotationStorage) {
+    if (this.data.checkBox) {
+      return this._saveCheckbox(evaluator, task, annotationStorage);
+    }
 
-          if (i >= ii) {
-            break;
-          }
-        }
+    if (this.data.radioButton) {
+      return this._saveRadioButton(evaluator, task, annotationStorage);
+    }
 
-        state = (state || InitialState)[fnArray[i]];
+    return null;
+  }
 
-        if (!state || Array.isArray(state)) {
-          i++;
-          continue;
-        }
+  async _saveCheckbox(evaluator, task, annotationStorage) {
+    if (!annotationStorage) {
+      return null;
+    }
 
-        context.iCurr = i;
-        i++;
+    const storageEntry = annotationStorage.get(this.data.id);
+    const value = storageEntry && storageEntry.value;
 
-        if (state.checkFn && !(0, state.checkFn)(context)) {
-          state = null;
-          continue;
-        }
+    if (value === undefined) {
+      return null;
+    }
 
-        match = state;
-        state = null;
-      }
+    const defaultValue = this.data.fieldValue && this.data.fieldValue !== "Off";
 
-      this.state = state;
-      this.match = match;
-      this.lastProcessed = i;
-    },
+    if (defaultValue === value) {
+      return null;
+    }
 
-    push(fn, args) {
-      this.queue.fnArray.push(fn);
-      this.queue.argsArray.push(args);
+    const dict = evaluator.xref.fetchIfRef(this.ref);
 
-      this._optimize();
-    },
+    if (!(0, _primitives.isDict)(dict)) {
+      return null;
+    }
 
-    flush() {
-      while (this.match) {
-        const length = this.queue.fnArray.length;
-        this.lastProcessed = (0, this.match.processFn)(this.context, length);
-        this.match = null;
-        this.state = null;
+    const xfa = {
+      path: (0, _util.stringToPDFString)(dict.get("T") || ""),
+      value: value ? this.data.exportValue : ""
+    };
 
-        this._optimize();
-      }
-    },
+    const name = _primitives.Name.get(value ? this.data.exportValue : "Off");
 
-    reset() {
-      this.state = null;
-      this.match = null;
-      this.lastProcessed = 0;
-    }
+    dict.set("V", name);
+    dict.set("AS", name);
+    dict.set("M", `D:${(0, _util.getModificationDate)()}`);
+    const encrypt = evaluator.xref.encrypt;
+    let originalTransform = null;
 
-  };
-  return QueueOptimizer;
-}();
+    if (encrypt) {
+      originalTransform = encrypt.createCipherTransform(this.ref.num, this.ref.gen);
+    }
 
-var NullOptimizer = function NullOptimizerClosure() {
-  function NullOptimizer(queue) {
-    this.queue = queue;
+    const buffer = [`${this.ref.num} ${this.ref.gen} obj\n`];
+    (0, _writer.writeDict)(dict, buffer, originalTransform);
+    buffer.push("\nendobj\n");
+    return [{
+      ref: this.ref,
+      data: buffer.join(""),
+      xfa
+    }];
   }
 
-  NullOptimizer.prototype = {
-    push(fn, args) {
-      this.queue.fnArray.push(fn);
-      this.queue.argsArray.push(args);
-    },
+  async _saveRadioButton(evaluator, task, annotationStorage) {
+    if (!annotationStorage) {
+      return null;
+    }
 
-    flush() {},
+    const storageEntry = annotationStorage.get(this.data.id);
+    const value = storageEntry && storageEntry.value;
 
-    reset() {}
+    if (value === undefined) {
+      return null;
+    }
 
-  };
-  return NullOptimizer;
-}();
+    const defaultValue = this.data.fieldValue === this.data.buttonValue;
 
-var OperatorList = function OperatorListClosure() {
-  var CHUNK_SIZE = 1000;
-  var CHUNK_SIZE_ABOUT = CHUNK_SIZE - 5;
+    if (defaultValue === value) {
+      return null;
+    }
 
-  function OperatorList(intent, streamSink) {
-    this._streamSink = streamSink;
-    this.fnArray = [];
-    this.argsArray = [];
+    const dict = evaluator.xref.fetchIfRef(this.ref);
 
-    if (streamSink && intent !== "oplist") {
-      this.optimizer = new QueueOptimizer(this);
-    } else {
-      this.optimizer = new NullOptimizer(this);
+    if (!(0, _primitives.isDict)(dict)) {
+      return null;
     }
 
-    this.dependencies = new Set();
-    this._totalLength = 0;
-    this.weight = 0;
-    this._resolved = streamSink ? null : Promise.resolve();
-  }
-
-  OperatorList.prototype = {
-    get length() {
-      return this.argsArray.length;
-    },
+    const xfa = {
+      path: (0, _util.stringToPDFString)(dict.get("T") || ""),
+      value: value ? this.data.buttonValue : ""
+    };
 
-    get ready() {
-      return this._resolved || this._streamSink.ready;
-    },
+    const name = _primitives.Name.get(value ? this.data.buttonValue : "Off");
 
-    get totalLength() {
-      return this._totalLength + this.length;
-    },
+    let parentBuffer = null;
+    const encrypt = evaluator.xref.encrypt;
 
-    addOp(fn, args) {
-      this.optimizer.push(fn, args);
-      this.weight++;
+    if (value) {
+      if ((0, _primitives.isRef)(this.parent)) {
+        const parent = evaluator.xref.fetch(this.parent);
+        let parentTransform = null;
 
-      if (this._streamSink) {
-        if (this.weight >= CHUNK_SIZE) {
-          this.flush();
-        } else if (this.weight >= CHUNK_SIZE_ABOUT && (fn === _util.OPS.restore || fn === 
_util.OPS.endText)) {
-          this.flush();
+        if (encrypt) {
+          parentTransform = encrypt.createCipherTransform(this.parent.num, this.parent.gen);
         }
-      }
-    },
 
-    addDependency(dependency) {
-      if (this.dependencies.has(dependency)) {
-        return;
+        parent.set("V", name);
+        parentBuffer = [`${this.parent.num} ${this.parent.gen} obj\n`];
+        (0, _writer.writeDict)(parent, parentBuffer, parentTransform);
+        parentBuffer.push("\nendobj\n");
+      } else if ((0, _primitives.isDict)(this.parent)) {
+        this.parent.set("V", name);
       }
+    }
 
-      this.dependencies.add(dependency);
-      this.addOp(_util.OPS.dependency, [dependency]);
-    },
+    dict.set("AS", name);
+    dict.set("M", `D:${(0, _util.getModificationDate)()}`);
+    let originalTransform = null;
 
-    addDependencies(dependencies) {
-      for (const dependency of dependencies) {
-        this.addDependency(dependency);
-      }
-    },
+    if (encrypt) {
+      originalTransform = encrypt.createCipherTransform(this.ref.num, this.ref.gen);
+    }
 
-    addOpList(opList) {
-      if (!(opList instanceof OperatorList)) {
-        (0, _util.warn)('addOpList - ignoring invalid "opList" parameter.');
-        return;
-      }
+    const buffer = [`${this.ref.num} ${this.ref.gen} obj\n`];
+    (0, _writer.writeDict)(dict, buffer, originalTransform);
+    buffer.push("\nendobj\n");
+    const newRefs = [{
+      ref: this.ref,
+      data: buffer.join(""),
+      xfa
+    }];
 
-      for (const dependency of opList.dependencies) {
-        this.dependencies.add(dependency);
-      }
+    if (parentBuffer !== null) {
+      newRefs.push({
+        ref: this.parent,
+        data: parentBuffer.join(""),
+        xfa: null
+      });
+    }
 
-      for (var i = 0, ii = opList.length; i < ii; i++) {
-        this.addOp(opList.fnArray[i], opList.argsArray[i]);
-      }
-    },
+    return newRefs;
+  }
 
-    getIR() {
-      return {
-        fnArray: this.fnArray,
-        argsArray: this.argsArray,
-        length: this.length
-      };
-    },
+  _processCheckBox(params) {
+    const customAppearance = params.dict.get("AP");
 
-    get _transfers() {
-      const transfers = [];
-      const {
-        fnArray,
-        argsArray,
-        length
-      } = this;
+    if (!(0, _primitives.isDict)(customAppearance)) {
+      return;
+    }
 
-      for (let i = 0; i < length; i++) {
-        switch (fnArray[i]) {
-          case _util.OPS.paintInlineImageXObject:
-          case _util.OPS.paintInlineImageXObjectGroup:
-          case _util.OPS.paintImageMaskXObject:
-            const arg = argsArray[i][0];
-            ;
+    const normalAppearance = customAppearance.get("N");
 
-            if (!arg.cached) {
-              transfers.push(arg.data.buffer);
-            }
+    if (!(0, _primitives.isDict)(normalAppearance)) {
+      return;
+    }
 
-            break;
-        }
-      }
+    const exportValues = normalAppearance.getKeys();
 
-      return transfers;
-    },
+    if (!exportValues.includes("Off")) {
+      exportValues.push("Off");
+    }
 
-    flush(lastChunk = false) {
-      this.optimizer.flush();
-      const length = this.length;
-      this._totalLength += length;
+    if (exportValues.length !== 2) {
+      return;
+    }
 
-      this._streamSink.enqueue({
-        fnArray: this.fnArray,
-        argsArray: this.argsArray,
-        lastChunk,
-        length
-      }, 1, this._transfers);
+    this.data.exportValue = exportValues[0] === "Off" ? exportValues[1] : exportValues[0];
+    this.checkedAppearance = normalAppearance.get(this.data.exportValue);
+    this.uncheckedAppearance = normalAppearance.get("Off") || null;
 
-      this.dependencies.clear();
-      this.fnArray.length = 0;
-      this.argsArray.length = 0;
-      this.weight = 0;
-      this.optimizer.reset();
+    this._streams.push(this.checkedAppearance);
+
+    if (this.uncheckedAppearance) {
+      this._streams.push(this.uncheckedAppearance);
     }
 
-  };
-  return OperatorList;
-}();
+    this._fallbackFontDict = this.fallbackFontDict;
+  }
 
-exports.OperatorList = OperatorList;
+  _processRadioButton(params) {
+    this.data.fieldValue = this.data.buttonValue = null;
+    const fieldParent = params.dict.get("Parent");
 
-/***/ }),
-/* 27 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+    if ((0, _primitives.isDict)(fieldParent)) {
+      this.parent = params.dict.getRaw("Parent");
+      const fieldParentValue = fieldParent.get("V");
 
-"use strict";
+      if ((0, _primitives.isName)(fieldParentValue)) {
+        this.data.fieldValue = this._decodeFormValue(fieldParentValue);
+      }
+    }
 
+    const appearanceStates = params.dict.get("AP");
 
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.writeDict = writeDict;
-exports.incrementalUpdate = incrementalUpdate;
+    if (!(0, _primitives.isDict)(appearanceStates)) {
+      return;
+    }
 
-var _util = __w_pdfjs_require__(2);
+    const normalAppearance = appearanceStates.get("N");
 
-var _primitives = __w_pdfjs_require__(5);
+    if (!(0, _primitives.isDict)(normalAppearance)) {
+      return;
+    }
 
-var _crypto = __w_pdfjs_require__(22);
+    for (const key of normalAppearance.getKeys()) {
+      if (key !== "Off") {
+        this.data.buttonValue = this._decodeFormValue(key);
+        break;
+      }
+    }
 
-function writeDict(dict, buffer, transform) {
-  buffer.push("<<");
+    this.checkedAppearance = normalAppearance.get(this.data.buttonValue);
+    this.uncheckedAppearance = normalAppearance.get("Off") || null;
 
-  for (const key of dict.getKeys()) {
-    buffer.push(` /${key} `);
-    writeValue(dict.getRaw(key), buffer, transform);
+    this._streams.push(this.checkedAppearance);
+
+    if (this.uncheckedAppearance) {
+      this._streams.push(this.uncheckedAppearance);
+    }
+
+    this._fallbackFontDict = this.fallbackFontDict;
   }
 
-  buffer.push(">>");
-}
+  _processPushButton(params) {
+    if (!params.dict.has("A") && !params.dict.has("AA") && !this.data.alternativeText) {
+      (0, _util.warn)("Push buttons without action dictionaries are not supported");
+      return;
+    }
 
-function writeStream(stream, buffer, transform) {
-  writeDict(stream.dict, buffer, transform);
-  buffer.push(" stream\n");
-  let string = (0, _util.bytesToString)(stream.getBytes());
+    this.data.isTooltipOnly = !params.dict.has("A") && !params.dict.has("AA");
 
-  if (transform !== null) {
-    string = transform.encryptString(string);
+    _obj.Catalog.parseDestDictionary({
+      destDict: params.dict,
+      resultObj: this.data,
+      docBaseUrl: params.pdfManager.docBaseUrl
+    });
   }
 
-  buffer.push(string);
-  buffer.push("\nendstream\n");
-}
-
-function writeArray(array, buffer, transform) {
-  buffer.push("[");
-  let first = true;
+  getFieldObject() {
+    let type = "button";
+    let exportValues;
 
-  for (const val of array) {
-    if (!first) {
-      buffer.push(" ");
-    } else {
-      first = false;
+    if (this.data.checkBox) {
+      type = "checkbox";
+      exportValues = this.data.exportValue;
+    } else if (this.data.radioButton) {
+      type = "radiobutton";
+      exportValues = this.data.buttonValue;
     }
 
-    writeValue(val, buffer, transform);
+    return {
+      id: this.data.id,
+      value: this.data.fieldValue || "Off",
+      defaultValue: this.data.defaultFieldValue,
+      exportValues,
+      editable: !this.data.readOnly,
+      name: this.data.fieldName,
+      rect: this.data.rect,
+      hidden: this.data.hidden,
+      actions: this.data.actions,
+      type
+    };
+  }
+
+  get fallbackFontDict() {
+    const dict = new _primitives.Dict();
+    dict.set("BaseFont", _primitives.Name.get("ZapfDingbats"));
+    dict.set("Type", _primitives.Name.get("FallbackType"));
+    dict.set("Subtype", _primitives.Name.get("FallbackType"));
+    dict.set("Encoding", _primitives.Name.get("ZapfDingbatsEncoding"));
+    return (0, _util.shadow)(this, "fallbackFontDict", dict);
   }
 
-  buffer.push("]");
 }
 
-function numberToString(value) {
-  if (Number.isInteger(value)) {
-    return value.toString();
-  }
+class ChoiceWidgetAnnotation extends WidgetAnnotation {
+  constructor(params) {
+    super(params);
+    this.data.options = [];
+    const options = (0, _core_utils.getInheritableProperty)({
+      dict: params.dict,
+      key: "Opt"
+    });
 
-  const roundedValue = Math.round(value * 100);
+    if (Array.isArray(options)) {
+      const xref = params.xref;
 
-  if (roundedValue % 100 === 0) {
-    return (roundedValue / 100).toString();
+      for (let i = 0, ii = options.length; i < ii; i++) {
+        const option = xref.fetchIfRef(options[i]);
+        const isOptionArray = Array.isArray(option);
+        this.data.options[i] = {
+          exportValue: this._decodeFormValue(isOptionArray ? xref.fetchIfRef(option[0]) : option),
+          displayValue: this._decodeFormValue(isOptionArray ? xref.fetchIfRef(option[1]) : option)
+        };
+      }
+    }
+
+    if ((0, _util.isString)(this.data.fieldValue)) {
+      this.data.fieldValue = [this.data.fieldValue];
+    } else if (!this.data.fieldValue) {
+      this.data.fieldValue = [];
+    }
+
+    this.data.combo = this.hasFieldFlag(_util.AnnotationFieldFlag.COMBO);
+    this.data.multiSelect = this.hasFieldFlag(_util.AnnotationFieldFlag.MULTISELECT);
+    this._hasText = true;
   }
 
-  if (roundedValue % 10 === 0) {
-    return value.toFixed(1);
+  getFieldObject() {
+    const type = this.data.combo ? "combobox" : "listbox";
+    const value = this.data.fieldValue.length > 0 ? this.data.fieldValue[0] : null;
+    return {
+      id: this.data.id,
+      value,
+      defaultValue: this.data.defaultFieldValue,
+      editable: !this.data.readOnly,
+      name: this.data.fieldName,
+      rect: this.data.rect,
+      numItems: this.data.fieldValue.length,
+      multipleSelection: this.data.multiSelect,
+      hidden: this.data.hidden,
+      actions: this.data.actions,
+      items: this.data.options,
+      type
+    };
   }
 
-  return value.toFixed(2);
 }
 
-function writeValue(value, buffer, transform) {
-  if ((0, _primitives.isName)(value)) {
-    buffer.push(`/${value.name}`);
-  } else if ((0, _primitives.isRef)(value)) {
-    buffer.push(`${value.num} ${value.gen} R`);
-  } else if (Array.isArray(value)) {
-    writeArray(value, buffer, transform);
-  } else if (typeof value === "string") {
-    if (transform !== null) {
-      value = transform.encryptString(value);
+class TextAnnotation extends MarkupAnnotation {
+  constructor(parameters) {
+    const DEFAULT_ICON_SIZE = 22;
+    super(parameters);
+    const dict = parameters.dict;
+    this.data.annotationType = _util.AnnotationType.TEXT;
+
+    if (this.data.hasAppearance) {
+      this.data.name = "NoIcon";
+    } else {
+      this.data.rect[1] = this.data.rect[3] - DEFAULT_ICON_SIZE;
+      this.data.rect[2] = this.data.rect[0] + DEFAULT_ICON_SIZE;
+      this.data.name = dict.has("Name") ? dict.get("Name").name : "Note";
     }
 
-    buffer.push(`(${(0, _util.escapeString)(value)})`);
-  } else if (typeof value === "number") {
-    buffer.push(numberToString(value));
-  } else if ((0, _primitives.isDict)(value)) {
-    writeDict(value, buffer, transform);
-  } else if ((0, _primitives.isStream)(value)) {
-    writeStream(value, buffer, transform);
+    if (dict.has("State")) {
+      this.data.state = dict.get("State") || null;
+      this.data.stateModel = dict.get("StateModel") || null;
+    } else {
+      this.data.state = null;
+      this.data.stateModel = null;
+    }
   }
+
 }
 
-function writeInt(number, size, offset, buffer) {
-  for (let i = size + offset - 1; i > offset - 1; i--) {
-    buffer[i] = number & 0xff;
-    number >>= 8;
-  }
+class LinkAnnotation extends Annotation {
+  constructor(params) {
+    super(params);
+    this.data.annotationType = _util.AnnotationType.LINK;
+    const quadPoints = getQuadPoints(params.dict, this.rectangle);
 
-  return offset + size;
-}
+    if (quadPoints) {
+      this.data.quadPoints = quadPoints;
+    }
 
-function writeString(string, offset, buffer) {
-  for (let i = 0, len = string.length; i < len; i++) {
-    buffer[offset + i] = string.charCodeAt(i) & 0xff;
+    _obj.Catalog.parseDestDictionary({
+      destDict: params.dict,
+      resultObj: this.data,
+      docBaseUrl: params.pdfManager.docBaseUrl
+    });
   }
+
 }
 
-function computeMD5(filesize, xrefInfo) {
-  const time = Math.floor(Date.now() / 1000);
-  const filename = xrefInfo.filename || "";
-  const md5Buffer = [time.toString(), filename, filesize.toString()];
-  let md5BufferLen = md5Buffer.reduce((a, str) => a + str.length, 0);
+class PopupAnnotation extends Annotation {
+  constructor(parameters) {
+    super(parameters);
+    this.data.annotationType = _util.AnnotationType.POPUP;
+    let parentItem = parameters.dict.get("Parent");
 
-  for (const value of Object.values(xrefInfo.info)) {
-    md5Buffer.push(value);
-    md5BufferLen += value.length;
-  }
+    if (!parentItem) {
+      (0, _util.warn)("Popup annotation has a missing or invalid parent annotation.");
+      return;
+    }
 
-  const array = new Uint8Array(md5BufferLen);
-  let offset = 0;
+    const parentSubtype = parentItem.get("Subtype");
+    this.data.parentType = (0, _primitives.isName)(parentSubtype) ? parentSubtype.name : null;
+    const rawParent = parameters.dict.getRaw("Parent");
+    this.data.parentId = (0, _primitives.isRef)(rawParent) ? rawParent.toString() : null;
+    const parentRect = parentItem.getArray("Rect");
 
-  for (const str of md5Buffer) {
-    writeString(str, offset, array);
-    offset += str.length;
-  }
+    if (Array.isArray(parentRect) && parentRect.length === 4) {
+      this.data.parentRect = _util.Util.normalizeRect(parentRect);
+    } else {
+      this.data.parentRect = [0, 0, 0, 0];
+    }
 
-  return (0, _util.bytesToString)((0, _crypto.calculateMD5)(array));
-}
+    const rt = parentItem.get("RT");
 
-function incrementalUpdate(originalData, xrefInfo, newRefs) {
-  const newXref = new _primitives.Dict(null);
-  const refForXrefTable = xrefInfo.newRef;
-  let buffer, baseOffset;
-  const lastByte = originalData[originalData.length - 1];
+    if ((0, _primitives.isName)(rt, _util.AnnotationReplyType.GROUP)) {
+      parentItem = parentItem.get("IRT");
+    }
 
-  if (lastByte === 0x0a || lastByte === 0x0d) {
-    buffer = [];
-    baseOffset = originalData.length;
-  } else {
-    buffer = ["\n"];
-    baseOffset = originalData.length + 1;
-  }
+    if (!parentItem.has("M")) {
+      this.data.modificationDate = null;
+    } else {
+      this.setModificationDate(parentItem.get("M"));
+      this.data.modificationDate = this.modificationDate;
+    }
 
-  newXref.set("Size", refForXrefTable.num + 1);
-  newXref.set("Prev", xrefInfo.startXRef);
-  newXref.set("Type", _primitives.Name.get("XRef"));
+    if (!parentItem.has("C")) {
+      this.data.color = null;
+    } else {
+      this.setColor(parentItem.getArray("C"));
+      this.data.color = this.color;
+    }
 
-  if (xrefInfo.rootRef !== null) {
-    newXref.set("Root", xrefInfo.rootRef);
-  }
+    if (!this.viewable) {
+      const parentFlags = parentItem.get("F");
 
-  if (xrefInfo.infoRef !== null) {
-    newXref.set("Info", xrefInfo.infoRef);
-  }
+      if (this._isViewable(parentFlags)) {
+        this.setFlags(parentFlags);
+      }
+    }
 
-  if (xrefInfo.encrypt !== null) {
-    newXref.set("Encrypt", xrefInfo.encrypt);
+    this.data.title = (0, _util.stringToPDFString)(parentItem.get("T") || "");
+    this.data.contents = (0, _util.stringToPDFString)(parentItem.get("Contents") || "");
   }
 
-  newRefs.push({
-    ref: refForXrefTable,
-    data: ""
-  });
-  newRefs = newRefs.sort((a, b) => {
-    return a.ref.num - b.ref.num;
-  });
-  const xrefTableData = [[0, 1, 0xffff]];
-  const indexes = [0, 1];
-  let maxOffset = 0;
+}
 
-  for (const {
-    ref,
-    data
-  } of newRefs) {
-    maxOffset = Math.max(maxOffset, baseOffset);
-    xrefTableData.push([1, baseOffset, Math.min(ref.gen, 0xffff)]);
-    baseOffset += data.length;
-    indexes.push(ref.num);
-    indexes.push(1);
-    buffer.push(data);
+class FreeTextAnnotation extends MarkupAnnotation {
+  constructor(parameters) {
+    super(parameters);
+    this.data.annotationType = _util.AnnotationType.FREETEXT;
   }
 
-  newXref.set("Index", indexes);
+}
 
-  if (xrefInfo.fileIds.length !== 0) {
-    const md5 = computeMD5(baseOffset, xrefInfo);
-    newXref.set("ID", [xrefInfo.fileIds[0], md5]);
-  }
+class LineAnnotation extends MarkupAnnotation {
+  constructor(parameters) {
+    super(parameters);
+    this.data.annotationType = _util.AnnotationType.LINE;
+    const lineCoordinates = parameters.dict.getArray("L");
+    this.data.lineCoordinates = _util.Util.normalizeRect(lineCoordinates);
 
-  const offsetSize = Math.ceil(Math.log2(maxOffset) / 8);
-  const sizes = [1, offsetSize, 2];
-  const structSize = sizes[0] + sizes[1] + sizes[2];
-  const tableLength = structSize * xrefTableData.length;
-  newXref.set("W", sizes);
-  newXref.set("Length", tableLength);
-  buffer.push(`${refForXrefTable.num} ${refForXrefTable.gen} obj\n`);
-  writeDict(newXref, buffer, null);
-  buffer.push(" stream\n");
-  const bufferLen = buffer.reduce((a, str) => a + str.length, 0);
-  const footer = `\nendstream\nendobj\nstartxref\n${baseOffset}\n%%EOF\n`;
-  const array = new Uint8Array(originalData.length + bufferLen + tableLength + footer.length);
-  array.set(originalData);
-  let offset = originalData.length;
+    if (!this.appearance) {
+      const strokeColor = this.color ? Array.from(this.color).map(c => c / 255) : [0, 0, 0];
+      const borderWidth = this.borderStyle.width;
 
-  for (const str of buffer) {
-    writeString(str, offset, array);
-    offset += str.length;
-  }
+      if ((0, _util.isArrayEqual)(this.rectangle, [0, 0, 0, 0])) {
+        this.rectangle = [this.data.lineCoordinates[0] - 2 * borderWidth, this.data.lineCoordinates[1] - 2 * 
borderWidth, this.data.lineCoordinates[2] + 2 * borderWidth, this.data.lineCoordinates[3] + 2 * borderWidth];
+      }
 
-  for (const [type, objOffset, gen] of xrefTableData) {
-    offset = writeInt(type, sizes[0], offset, array);
-    offset = writeInt(objOffset, sizes[1], offset, array);
-    offset = writeInt(gen, sizes[2], offset, array);
+      this._setDefaultAppearance({
+        xref: parameters.xref,
+        extra: `${borderWidth} w`,
+        strokeColor,
+        pointsCallback: (buffer, points) => {
+          buffer.push(`${lineCoordinates[0]} ${lineCoordinates[1]} m`);
+          buffer.push(`${lineCoordinates[2]} ${lineCoordinates[3]} l`);
+          buffer.push("S");
+          return [points[0].x - borderWidth, points[1].x + borderWidth, points[3].y - borderWidth, 
points[1].y + borderWidth];
+        }
+      });
+    }
   }
 
-  writeString(footer, offset, array);
-  return array;
 }
 
-/***/ }),
-/* 28 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+class SquareAnnotation extends MarkupAnnotation {
+  constructor(parameters) {
+    super(parameters);
+    this.data.annotationType = _util.AnnotationType.SQUARE;
 
-"use strict";
+    if (!this.appearance) {
+      const strokeColor = this.color ? Array.from(this.color).map(c => c / 255) : [0, 0, 0];
+      let fillColor = null;
+      let interiorColor = parameters.dict.getArray("IC");
+
+      if (interiorColor) {
+        interiorColor = getRgbColor(interiorColor);
+        fillColor = interiorColor ? Array.from(interiorColor).map(c => c / 255) : null;
+      }
+
+      this._setDefaultAppearance({
+        xref: parameters.xref,
+        extra: `${this.borderStyle.width} w`,
+        strokeColor,
+        fillColor,
+        pointsCallback: (buffer, points) => {
+          const x = points[2].x + this.borderStyle.width / 2;
+          const y = points[2].y + this.borderStyle.width / 2;
+          const width = points[3].x - points[2].x - this.borderStyle.width;
+          const height = points[1].y - points[3].y - this.borderStyle.width;
+          buffer.push(`${x} ${y} ${width} ${height} re`);
+
+          if (fillColor) {
+            buffer.push("B");
+          } else {
+            buffer.push("S");
+          }
 
+          return [points[0].x, points[1].x, points[3].y, points[1].y];
+        }
+      });
+    }
+  }
 
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.PartialEvaluator = void 0;
+}
 
-var _util = __w_pdfjs_require__(2);
+class CircleAnnotation extends MarkupAnnotation {
+  constructor(parameters) {
+    super(parameters);
+    this.data.annotationType = _util.AnnotationType.CIRCLE;
 
-var _cmap = __w_pdfjs_require__(29);
+    if (!this.appearance) {
+      const strokeColor = this.color ? Array.from(this.color).map(c => c / 255) : [0, 0, 0];
+      let fillColor = null;
+      let interiorColor = parameters.dict.getArray("IC");
+
+      if (interiorColor) {
+        interiorColor = getRgbColor(interiorColor);
+        fillColor = interiorColor ? Array.from(interiorColor).map(c => c / 255) : null;
+      }
+
+      const controlPointsDistance = 4 / 3 * Math.tan(Math.PI / (2 * 4));
+
+      this._setDefaultAppearance({
+        xref: parameters.xref,
+        extra: `${this.borderStyle.width} w`,
+        strokeColor,
+        fillColor,
+        pointsCallback: (buffer, points) => {
+          const x0 = points[0].x + this.borderStyle.width / 2;
+          const y0 = points[0].y - this.borderStyle.width / 2;
+          const x1 = points[3].x - this.borderStyle.width / 2;
+          const y1 = points[3].y + this.borderStyle.width / 2;
+          const xMid = x0 + (x1 - x0) / 2;
+          const yMid = y0 + (y1 - y0) / 2;
+          const xOffset = (x1 - x0) / 2 * controlPointsDistance;
+          const yOffset = (y1 - y0) / 2 * controlPointsDistance;
+          buffer.push(`${xMid} ${y1} m`);
+          buffer.push(`${xMid + xOffset} ${y1} ${x1} ${yMid + yOffset} ${x1} ${yMid} c`);
+          buffer.push(`${x1} ${yMid - yOffset} ${xMid + xOffset} ${y0} ${xMid} ${y0} c`);
+          buffer.push(`${xMid - xOffset} ${y0} ${x0} ${yMid - yOffset} ${x0} ${yMid} c`);
+          buffer.push(`${x0} ${yMid + yOffset} ${xMid - xOffset} ${y1} ${xMid} ${y1} c`);
+          buffer.push("h");
+
+          if (fillColor) {
+            buffer.push("B");
+          } else {
+            buffer.push("S");
+          }
 
-var _primitives = __w_pdfjs_require__(5);
+          return [points[0].x, points[1].x, points[3].y, points[1].y];
+        }
+      });
+    }
+  }
 
-var _fonts = __w_pdfjs_require__(30);
+}
 
-var _encodings = __w_pdfjs_require__(33);
+class PolylineAnnotation extends MarkupAnnotation {
+  constructor(parameters) {
+    super(parameters);
+    this.data.annotationType = _util.AnnotationType.POLYLINE;
+    this.data.vertices = [];
+    const rawVertices = parameters.dict.getArray("Vertices");
 
-var _core_utils = __w_pdfjs_require__(8);
+    if (!Array.isArray(rawVertices)) {
+      return;
+    }
 
-var _unicode = __w_pdfjs_require__(36);
+    for (let i = 0, ii = rawVertices.length; i < ii; i += 2) {
+      this.data.vertices.push({
+        x: rawVertices[i],
+        y: rawVertices[i + 1]
+      });
+    }
+  }
 
-var _standard_fonts = __w_pdfjs_require__(35);
+}
 
-var _pattern = __w_pdfjs_require__(39);
+class PolygonAnnotation extends PolylineAnnotation {
+  constructor(parameters) {
+    super(parameters);
+    this.data.annotationType = _util.AnnotationType.POLYGON;
+  }
 
-var _function = __w_pdfjs_require__(40);
+}
 
-var _parser = __w_pdfjs_require__(11);
+class CaretAnnotation extends MarkupAnnotation {
+  constructor(parameters) {
+    super(parameters);
+    this.data.annotationType = _util.AnnotationType.CARET;
+  }
 
-var _image_utils = __w_pdfjs_require__(24);
+}
 
-var _bidi = __w_pdfjs_require__(42);
+class InkAnnotation extends MarkupAnnotation {
+  constructor(parameters) {
+    super(parameters);
+    this.data.annotationType = _util.AnnotationType.INK;
+    this.data.inkLists = [];
+    const rawInkLists = parameters.dict.getArray("InkList");
 
-var _colorspace = __w_pdfjs_require__(23);
+    if (!Array.isArray(rawInkLists)) {
+      return;
+    }
 
-var _stream = __w_pdfjs_require__(12);
+    const xref = parameters.xref;
 
-var _glyphlist = __w_pdfjs_require__(34);
+    for (let i = 0, ii = rawInkLists.length; i < ii; ++i) {
+      this.data.inkLists.push([]);
 
-var _metrics = __w_pdfjs_require__(43);
+      for (let j = 0, jj = rawInkLists[i].length; j < jj; j += 2) {
+        this.data.inkLists[i].push({
+          x: xref.fetchIfRef(rawInkLists[i][j]),
+          y: xref.fetchIfRef(rawInkLists[i][j + 1])
+        });
+      }
+    }
+  }
 
-var _murmurhash = __w_pdfjs_require__(44);
+}
 
-var _operator_list = __w_pdfjs_require__(26);
+class HighlightAnnotation extends MarkupAnnotation {
+  constructor(parameters) {
+    super(parameters);
+    this.data.annotationType = _util.AnnotationType.HIGHLIGHT;
+    const quadPoints = this.data.quadPoints = getQuadPoints(parameters.dict, null);
 
-var _image = __w_pdfjs_require__(45);
+    if (quadPoints) {
+      if (!this.appearance) {
+        const fillColor = this.color ? Array.from(this.color).map(c => c / 255) : [1, 1, 0];
+
+        this._setDefaultAppearance({
+          xref: parameters.xref,
+          fillColor,
+          blendMode: "Multiply",
+          pointsCallback: (buffer, points) => {
+            buffer.push(`${points[0].x} ${points[0].y} m`);
+            buffer.push(`${points[1].x} ${points[1].y} l`);
+            buffer.push(`${points[3].x} ${points[3].y} l`);
+            buffer.push(`${points[2].x} ${points[2].y} l`);
+            buffer.push("f");
+            return [points[0].x, points[1].x, points[3].y, points[1].y];
+          }
+        });
+      }
+    } else {
+      this.data.hasPopup = false;
+    }
+  }
 
-const DefaultPartialEvaluatorOptions = Object.freeze({
-  maxImageSize: -1,
-  disableFontFace: false,
-  ignoreErrors: false,
-  isEvalSupported: true,
-  fontExtraProperties: false
-});
-const PatternType = {
-  TILING: 1,
-  SHADING: 2
-};
-const deferred = Promise.resolve();
+}
 
-function normalizeBlendMode(value, parsingArray = false) {
-  if (Array.isArray(value)) {
-    for (let i = 0, ii = value.length; i < ii; i++) {
-      const maybeBM = normalizeBlendMode(value[i], true);
+class UnderlineAnnotation extends MarkupAnnotation {
+  constructor(parameters) {
+    super(parameters);
+    this.data.annotationType = _util.AnnotationType.UNDERLINE;
+    const quadPoints = this.data.quadPoints = getQuadPoints(parameters.dict, null);
 
-      if (maybeBM) {
-        return maybeBM;
+    if (quadPoints) {
+      if (!this.appearance) {
+        const strokeColor = this.color ? Array.from(this.color).map(c => c / 255) : [0, 0, 0];
+
+        this._setDefaultAppearance({
+          xref: parameters.xref,
+          extra: "[] 0 d 1 w",
+          strokeColor,
+          pointsCallback: (buffer, points) => {
+            buffer.push(`${points[2].x} ${points[2].y} m`);
+            buffer.push(`${points[3].x} ${points[3].y} l`);
+            buffer.push("S");
+            return [points[0].x, points[1].x, points[3].y, points[1].y];
+          }
+        });
       }
+    } else {
+      this.data.hasPopup = false;
     }
-
-    (0, _util.warn)(`Unsupported blend mode Array: ${value}`);
-    return "source-over";
   }
 
-  if (!(0, _primitives.isName)(value)) {
-    if (parsingArray) {
-      return null;
-    }
+}
 
-    return "source-over";
+class SquigglyAnnotation extends MarkupAnnotation {
+  constructor(parameters) {
+    super(parameters);
+    this.data.annotationType = _util.AnnotationType.SQUIGGLY;
+    const quadPoints = this.data.quadPoints = getQuadPoints(parameters.dict, null);
+
+    if (quadPoints) {
+      if (!this.appearance) {
+        const strokeColor = this.color ? Array.from(this.color).map(c => c / 255) : [0, 0, 0];
+
+        this._setDefaultAppearance({
+          xref: parameters.xref,
+          extra: "[] 0 d 1 w",
+          strokeColor,
+          pointsCallback: (buffer, points) => {
+            const dy = (points[0].y - points[2].y) / 6;
+            let shift = dy;
+            let x = points[2].x;
+            const y = points[2].y;
+            const xEnd = points[3].x;
+            buffer.push(`${x} ${y + shift} m`);
+
+            do {
+              x += 2;
+              shift = shift === 0 ? dy : 0;
+              buffer.push(`${x} ${y + shift} l`);
+            } while (x < xEnd);
+
+            buffer.push("S");
+            return [points[2].x, xEnd, y - 2 * dy, y + 2 * dy];
+          }
+        });
+      }
+    } else {
+      this.data.hasPopup = false;
+    }
   }
 
-  switch (value.name) {
-    case "Normal":
-    case "Compatible":
+}
+
+class StrikeOutAnnotation extends MarkupAnnotation {
+  constructor(parameters) {
+    super(parameters);
+    this.data.annotationType = _util.AnnotationType.STRIKEOUT;
+    const quadPoints = this.data.quadPoints = getQuadPoints(parameters.dict, null);
+
+    if (quadPoints) {
+      if (!this.appearance) {
+        const strokeColor = this.color ? Array.from(this.color).map(c => c / 255) : [0, 0, 0];
+
+        this._setDefaultAppearance({
+          xref: parameters.xref,
+          extra: "[] 0 d 1 w",
+          strokeColor,
+          pointsCallback: (buffer, points) => {
+            buffer.push(`${(points[0].x + points[2].x) / 2}` + ` ${(points[0].y + points[2].y) / 2} m`);
+            buffer.push(`${(points[1].x + points[3].x) / 2}` + ` ${(points[1].y + points[3].y) / 2} l`);
+            buffer.push("S");
+            return [points[0].x, points[1].x, points[3].y, points[1].y];
+          }
+        });
+      }
+    } else {
+      this.data.hasPopup = false;
+    }
+  }
+
+}
+
+class StampAnnotation extends MarkupAnnotation {
+  constructor(parameters) {
+    super(parameters);
+    this.data.annotationType = _util.AnnotationType.STAMP;
+  }
+
+}
+
+class FileAttachmentAnnotation extends MarkupAnnotation {
+  constructor(parameters) {
+    super(parameters);
+    const file = new _obj.FileSpec(parameters.dict.get("FS"), parameters.xref);
+    this.data.annotationType = _util.AnnotationType.FILEATTACHMENT;
+    this.data.file = file.serializable;
+  }
+
+}
+
+/***/ }),
+/* 28 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports.createDefaultAppearance = createDefaultAppearance;
+exports.parseDefaultAppearance = parseDefaultAppearance;
+
+var _util = __w_pdfjs_require__(2);
+
+var _colorspace = __w_pdfjs_require__(23);
+
+var _core_utils = __w_pdfjs_require__(8);
+
+var _evaluator = __w_pdfjs_require__(29);
+
+var _primitives = __w_pdfjs_require__(5);
+
+var _stream = __w_pdfjs_require__(12);
+
+class DefaultAppearanceEvaluator extends _evaluator.EvaluatorPreprocessor {
+  constructor(str) {
+    super(new _stream.StringStream(str));
+  }
+
+  parse() {
+    const operation = {
+      fn: 0,
+      args: []
+    };
+    const result = {
+      fontSize: 0,
+      fontName: "",
+      fontColor: new Uint8ClampedArray(3)
+    };
+
+    try {
+      while (true) {
+        operation.args.length = 0;
+
+        if (!this.read(operation)) {
+          break;
+        }
+
+        if (this.savedStatesDepth !== 0) {
+          continue;
+        }
+
+        const {
+          fn,
+          args
+        } = operation;
+
+        switch (fn | 0) {
+          case _util.OPS.setFont:
+            const [fontName, fontSize] = args;
+
+            if (fontName instanceof _primitives.Name) {
+              result.fontName = fontName.name;
+            }
+
+            if (typeof fontSize === "number" && fontSize > 0) {
+              result.fontSize = fontSize;
+            }
+
+            break;
+
+          case _util.OPS.setFillRGBColor:
+            _colorspace.ColorSpace.singletons.rgb.getRgbItem(args, 0, result.fontColor, 0);
+
+            break;
+
+          case _util.OPS.setFillGray:
+            _colorspace.ColorSpace.singletons.gray.getRgbItem(args, 0, result.fontColor, 0);
+
+            break;
+
+          case _util.OPS.setFillColorSpace:
+            _colorspace.ColorSpace.singletons.cmyk.getRgbItem(args, 0, result.fontColor, 0);
+
+            break;
+        }
+      }
+    } catch (reason) {
+      (0, _util.warn)(`parseDefaultAppearance - ignoring errors: "${reason}".`);
+    }
+
+    return result;
+  }
+
+}
+
+function parseDefaultAppearance(str) {
+  return new DefaultAppearanceEvaluator(str).parse();
+}
+
+function createDefaultAppearance({
+  fontSize,
+  fontName,
+  fontColor
+}) {
+  let colorCmd;
+
+  if (fontColor.every(c => c === 0)) {
+    colorCmd = "0 g";
+  } else {
+    colorCmd = Array.from(fontColor).map(c => (c / 255).toFixed(2)).join(" ") + " rg";
+  }
+
+  return `/${(0, _core_utils.escapePDFName)(fontName)} ${fontSize} Tf ${colorCmd}`;
+}
+
+/***/ }),
+/* 29 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports.PartialEvaluator = exports.EvaluatorPreprocessor = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+var _cmap = __w_pdfjs_require__(30);
+
+var _primitives = __w_pdfjs_require__(5);
+
+var _stream = __w_pdfjs_require__(12);
+
+var _fonts = __w_pdfjs_require__(31);
+
+var _encodings = __w_pdfjs_require__(34);
+
+var _unicode = __w_pdfjs_require__(37);
+
+var _standard_fonts = __w_pdfjs_require__(36);
+
+var _pattern = __w_pdfjs_require__(40);
+
+var _function = __w_pdfjs_require__(41);
+
+var _parser = __w_pdfjs_require__(11);
+
+var _image_utils = __w_pdfjs_require__(24);
+
+var _bidi = __w_pdfjs_require__(43);
+
+var _colorspace = __w_pdfjs_require__(23);
+
+var _glyphlist = __w_pdfjs_require__(35);
+
+var _core_utils = __w_pdfjs_require__(8);
+
+var _metrics = __w_pdfjs_require__(44);
+
+var _murmurhash = __w_pdfjs_require__(45);
+
+var _operator_list = __w_pdfjs_require__(46);
+
+var _image = __w_pdfjs_require__(47);
+
+const DefaultPartialEvaluatorOptions = Object.freeze({
+  maxImageSize: -1,
+  disableFontFace: false,
+  ignoreErrors: false,
+  isEvalSupported: true,
+  fontExtraProperties: false
+});
+const PatternType = {
+  TILING: 1,
+  SHADING: 2
+};
+const deferred = Promise.resolve();
+
+function normalizeBlendMode(value, parsingArray = false) {
+  if (Array.isArray(value)) {
+    for (let i = 0, ii = value.length; i < ii; i++) {
+      const maybeBM = normalizeBlendMode(value[i], true);
+
+      if (maybeBM) {
+        return maybeBM;
+      }
+    }
+
+    (0, _util.warn)(`Unsupported blend mode Array: ${value}`);
+    return "source-over";
+  }
+
+  if (!(0, _primitives.isName)(value)) {
+    if (parsingArray) {
+      return null;
+    }
+
+    return "source-over";
+  }
+
+  switch (value.name) {
+    case "Normal":
+    case "Compatible":
       return "source-over";
 
     case "Multiply":
@@ -21644,12 +22816,16 @@ class PartialEvaluator {
     return newEvaluator;
   }
 
-  hasBlendModes(resources) {
+  hasBlendModes(resources, nonBlendModesSet) {
     if (!(resources instanceof _primitives.Dict)) {
       return false;
     }
 
-    const processed = new _primitives.RefSet();
+    if (resources.objId && nonBlendModesSet.has(resources.objId)) {
+      return false;
+    }
+
+    const processed = new _primitives.RefSet(nonBlendModesSet);
 
     if (resources.objId) {
       processed.put(resources.objId);
@@ -21672,10 +22848,6 @@ class PartialEvaluator {
             try {
               graphicState = xref.fetch(graphicState);
             } catch (ex) {
-              if (ex instanceof _core_utils.MissingDataException) {
-                throw ex;
-              }
-
               processed.put(graphicState);
               (0, _util.info)(`hasBlendModes - ignoring ExtGState: "${ex}".`);
               continue;
@@ -21725,10 +22897,6 @@ class PartialEvaluator {
           try {
             xObject = xref.fetch(xObject);
           } catch (ex) {
-            if (ex instanceof _core_utils.MissingDataException) {
-              throw ex;
-            }
-
             processed.put(xObject);
             (0, _util.info)(`hasBlendModes - ignoring XObject: "${ex}".`);
             continue;
@@ -21761,6 +22929,9 @@ class PartialEvaluator {
       }
     }
 
+    processed.forEach(ref => {
+      nonBlendModesSet.put(ref);
+    });
     return false;
   }
 
@@ -21989,6 +23160,11 @@ class PartialEvaluator {
       localColorSpaceCache
     }).then(imageObj => {
       imgData = imageObj.createImageData(false);
+
+      if (cacheKey && imageRef && cacheGlobally) {
+        this.globalImageCache.addByteSize(imageRef, imgData.data.length);
+      }
+
       return this._sendImgData(objId, imgData, cacheGlobally);
     }).catch(reason => {
       (0, _util.warn)(`Unable to decode image "${objId}": "${reason}".`);
@@ -22011,7 +23187,8 @@ class PartialEvaluator {
           this.globalImageCache.setData(imageRef, {
             objId,
             fn: _util.OPS.paintImageXObject,
-            args
+            args,
+            byteSize: 0
           });
         }
       }
@@ -22098,7 +23275,7 @@ class PartialEvaluator {
     return transferMaps;
   }
 
-  handleTilingType(fn, args, resources, pattern, patternDict, operatorList, task) {
+  handleTilingType(fn, color, resources, pattern, patternDict, operatorList, task, cacheKey, 
localTilingPatternCache) {
     const tilingOpList = new _operator_list.OperatorList();
 
     const patternResources = _primitives.Dict.merge({
@@ -22112,14 +23289,18 @@ class PartialEvaluator {
       resources: patternResources,
       operatorList: tilingOpList
     }).then(function () {
-      return (0, _pattern.getTilingPatternIR)({
-        fnArray: tilingOpList.fnArray,
-        argsArray: tilingOpList.argsArray
-      }, patternDict, args);
-    }).then(function (tilingPatternIR) {
+      const operatorListIR = tilingOpList.getIR();
+      const tilingPatternIR = (0, _pattern.getTilingPatternIR)(operatorListIR, patternDict, color);
       operatorList.addDependencies(tilingOpList.dependencies);
       operatorList.addOp(fn, tilingPatternIR);
-    }, reason => {
+
+      if (cacheKey) {
+        localTilingPatternCache.set(cacheKey, patternDict.objId, {
+          operatorListIR,
+          dict: patternDict
+        });
+      }
+    }).catch(reason => {
       if (reason instanceof _util.AbortException) {
         return;
       }
@@ -22136,17 +23317,9 @@ class PartialEvaluator {
     });
   }
 
-  handleSetFont(resources, fontArgs, fontRef, operatorList, task, state) {
-    var fontName,
-        fontSize = 0;
-
-    if (fontArgs) {
-      fontArgs = fontArgs.slice();
-      fontName = fontArgs[0].name;
-      fontSize = fontArgs[1];
-    }
-
-    return this.loadFont(fontName, fontRef, resources).then(translated => {
+  handleSetFont(resources, fontArgs, fontRef, operatorList, task, state, fallbackFontDict = null) {
+    const fontName = fontArgs && fontArgs[0] instanceof _primitives.Name ? fontArgs[0].name : null;
+    return this.loadFont(fontName, fontRef, resources, fallbackFontDict).then(translated => {
       if (!translated.font.isType3Font) {
         return translated;
       }
@@ -22167,8 +23340,6 @@ class PartialEvaluator {
       });
     }).then(translated => {
       state.font = translated.font;
-      state.fontSize = fontSize;
-      state.fontName = fontName;
       translated.send(this.handler);
       return translated.loadedName;
     });
@@ -22313,14 +23484,14 @@ class PartialEvaluator {
     });
   }
 
-  loadFont(fontName, font, resources) {
-    const errorFont = () => {
-      return Promise.resolve(new TranslatedFont({
+  loadFont(fontName, font, resources, fallbackFontDict = null) {
+    const errorFont = async () => {
+      return new TranslatedFont({
         loadedName: "g_font_error",
         font: new _fonts.ErrorFont(`Font "${fontName}" is not available.`),
         dict: font,
         extraProperties: this.options.fontExtraProperties
-      }));
+      });
     };
 
     var fontRef,
@@ -22352,7 +23523,12 @@ class PartialEvaluator {
         featureId: _util.UNSUPPORTED_FEATURES.errorFontMissing
       });
       (0, _util.warn)(`${partialMsg} -- attempting to fallback to a default font.`);
-      fontRef = PartialEvaluator.fallbackFontDict;
+
+      if (fallbackFontDict) {
+        fontRef = fallbackFontDict;
+      } else {
+        fontRef = PartialEvaluator.fallbackFontDict;
+      }
     }
 
     if (this.fontCache.has(fontRef)) {
@@ -22365,12 +23541,20 @@ class PartialEvaluator {
       return errorFont();
     }
 
-    if (font.translated) {
-      return font.translated;
+    if (font.cacheKey && this.fontCache.has(font.cacheKey)) {
+      return this.fontCache.get(font.cacheKey);
     }
 
     var fontCapability = (0, _util.createPromiseCapability)();
-    var preEvaluatedFont = this.preEvaluateFont(font);
+    let preEvaluatedFont;
+
+    try {
+      preEvaluatedFont = this.preEvaluateFont(font);
+    } catch (reason) {
+      (0, _util.warn)(`loadFont - preEvaluateFont failed: "${reason}".`);
+      return errorFont();
+    }
+
     const {
       descriptor,
       hash
@@ -22416,21 +23600,13 @@ class PartialEvaluator {
         fontID = this.idFactory.createFontId();
       }
 
-      this.fontCache.put(`id_${fontID}`, fontCapability.promise);
+      font.cacheKey = `cacheKey_${fontID}`;
+      this.fontCache.put(font.cacheKey, fontCapability.promise);
     }
 
     (0, _util.assert)(fontID && fontID.startsWith("f"), 'The "fontID" must be (correctly) defined.');
     font.loadedName = `${this.idFactory.getDocId()}_${fontID}`;
-    font.translated = fontCapability.promise;
-    var translatedPromise;
-
-    try {
-      translatedPromise = this.translateFont(preEvaluatedFont);
-    } catch (e) {
-      translatedPromise = Promise.reject(e);
-    }
-
-    translatedPromise.then(translatedFont => {
+    this.translateFont(preEvaluatedFont).then(translatedFont => {
       if (translatedFont.fontType !== undefined) {
         var xrefFontStats = xref.stats.fontTypes;
         xrefFontStats[translatedFont.fontType] = true;
@@ -22446,6 +23622,7 @@ class PartialEvaluator {
       this.handler.send("UnsupportedFeature", {
         featureId: _util.UNSUPPORTED_FEATURES.errorFontTranslate
       });
+      (0, _util.warn)(`loadFont - translateFont failed: "${reason}".`);
 
       try {
         var fontFile3 = descriptor && descriptor.get("FontFile3");
@@ -22518,26 +23695,41 @@ class PartialEvaluator {
     });
   }
 
-  async handleColorN(operatorList, fn, args, cs, patterns, resources, task, localColorSpaceCache) {
-    var patternName = args[args.length - 1];
-    var pattern;
+  handleColorN(operatorList, fn, args, cs, patterns, resources, task, localColorSpaceCache, 
localTilingPatternCache) {
+    const patternName = args.pop();
 
-    if ((0, _primitives.isName)(patternName) && (pattern = patterns.get(patternName.name))) {
-      var dict = (0, _primitives.isStream)(pattern) ? pattern.dict : pattern;
-      var typeNum = dict.get("PatternType");
+    if (patternName instanceof _primitives.Name) {
+      const name = patternName.name;
+      const localTilingPattern = localTilingPatternCache.getByName(name);
 
-      if (typeNum === PatternType.TILING) {
-        var color = cs.base ? cs.base.getRgb(args, 0) : null;
-        return this.handleTilingType(fn, color, resources, pattern, dict, operatorList, task);
-      } else if (typeNum === PatternType.SHADING) {
-        var shading = dict.get("Shading");
-        var matrix = dict.getArray("Matrix");
-        pattern = _pattern.Pattern.parseShading(shading, matrix, this.xref, resources, this.handler, 
this._pdfFunctionFactory, localColorSpaceCache);
-        operatorList.addOp(fn, pattern.getIR());
-        return undefined;
+      if (localTilingPattern) {
+        try {
+          const color = cs.base ? cs.base.getRgb(args, 0) : null;
+          const tilingPatternIR = (0, _pattern.getTilingPatternIR)(localTilingPattern.operatorListIR, 
localTilingPattern.dict, color);
+          operatorList.addOp(fn, tilingPatternIR);
+          return undefined;
+        } catch (ex) {}
       }
 
-      throw new _util.FormatError(`Unknown PatternType: ${typeNum}`);
+      let pattern = patterns.get(name);
+
+      if (pattern) {
+        var dict = (0, _primitives.isStream)(pattern) ? pattern.dict : pattern;
+        var typeNum = dict.get("PatternType");
+
+        if (typeNum === PatternType.TILING) {
+          const color = cs.base ? cs.base.getRgb(args, 0) : null;
+          return this.handleTilingType(fn, color, resources, pattern, dict, operatorList, task, name, 
localTilingPatternCache);
+        } else if (typeNum === PatternType.SHADING) {
+          var shading = dict.get("Shading");
+          var matrix = dict.getArray("Matrix");
+          pattern = _pattern.Pattern.parseShading(shading, matrix, this.xref, resources, this.handler, 
this._pdfFunctionFactory, localColorSpaceCache);
+          operatorList.addOp(fn, pattern.getIR());
+          return undefined;
+        }
+
+        throw new _util.FormatError(`Unknown PatternType: ${typeNum}`);
+      }
     }
 
     throw new _util.FormatError(`Unknown PatternName: ${patternName}`);
@@ -22604,7 +23796,8 @@ class PartialEvaluator {
     task,
     resources,
     operatorList,
-    initialState = null
+    initialState = null,
+    fallbackFontDict = null
   }) {
     resources = resources || _primitives.Dict.empty;
     initialState = initialState || new EvalState();
@@ -22619,6 +23812,7 @@ class PartialEvaluator {
     const localImageCache = new _image_utils.LocalImageCache();
     const localColorSpaceCache = new _image_utils.LocalColorSpaceCache();
     const localGStateCache = new _image_utils.LocalGStateCache();
+    const localTilingPatternCache = new _image_utils.LocalTilingPatternCache();
 
     var xobjs = resources.get("XObject") || _primitives.Dict.empty;
 
@@ -22759,7 +23953,7 @@ class PartialEvaluator {
 
           case _util.OPS.setFont:
             var fontSize = args[1];
-            next(self.handleSetFont(resources, args, null, operatorList, task, 
stateManager.state).then(function (loadedName) {
+            next(self.handleSetFont(resources, args, null, operatorList, task, stateManager.state, 
fallbackFontDict).then(function (loadedName) {
               operatorList.addDependency(loadedName);
               operatorList.addOp(_util.OPS.setFont, [loadedName, fontSize]);
             }));
@@ -22951,7 +24145,7 @@ class PartialEvaluator {
             cs = stateManager.state.fillColorSpace;
 
             if (cs.name === "Pattern") {
-              next(self.handleColorN(operatorList, _util.OPS.setFillColorN, args, cs, patterns, resources, 
task, localColorSpaceCache));
+              next(self.handleColorN(operatorList, _util.OPS.setFillColorN, args, cs, patterns, resources, 
task, localColorSpaceCache, localTilingPatternCache));
               return;
             }
 
@@ -22963,7 +24157,7 @@ class PartialEvaluator {
             cs = stateManager.state.strokeColorSpace;
 
             if (cs.name === "Pattern") {
-              next(self.handleColorN(operatorList, _util.OPS.setStrokeColorN, args, cs, patterns, resources, 
task, localColorSpaceCache));
+              next(self.handleColorN(operatorList, _util.OPS.setStrokeColorN, args, cs, patterns, resources, 
task, localColorSpaceCache, localTilingPatternCache));
               return;
             }
 
@@ -23151,7 +24345,7 @@ class PartialEvaluator {
     normalizeWhitespace = false,
     combineTextItems = false,
     sink,
-    seenStyles = Object.create(null)
+    seenStyles = new Set()
   }) {
     resources = resources || _primitives.Dict.empty;
     stateManager = stateManager || new StateManager(new TextState());
@@ -23193,11 +24387,12 @@ class PartialEvaluator {
         return textContentItem;
       }
 
-      var font = textState.font;
+      const font = textState.font,
+            loadedName = font.loadedName;
 
-      if (!(font.loadedName in seenStyles)) {
-        seenStyles[font.loadedName] = true;
-        textContent.styles[font.loadedName] = {
+      if (!seenStyles.has(loadedName)) {
+        seenStyles.add(loadedName);
+        textContent.styles[loadedName] = {
           fontFamily: font.fallbackName,
           ascent: font.ascent,
           descent: font.descent,
@@ -23205,7 +24400,7 @@ class PartialEvaluator {
         };
       }
 
-      textContentItem.fontName = font.loadedName;
+      textContentItem.fontName = loadedName;
       var tsm = [textState.fontSize * textState.textHScale, 0, 0, textState.fontSize, 0, textState.textRise];
 
       if (font.isType3Font && textState.fontSize <= 1 && !(0, _util.isArrayEqual)(textState.fontMatrix, 
_util.FONT_IDENTITY_MATRIX)) {
@@ -23222,20 +24417,16 @@ class PartialEvaluator {
 
       if (!font.vertical) {
         textContentItem.width = 0;
-        textContentItem.height = Math.sqrt(trm[2] * trm[2] + trm[3] * trm[3]);
+        textContentItem.height = Math.hypot(trm[2], trm[3]);
         textContentItem.vertical = false;
       } else {
-        textContentItem.width = Math.sqrt(trm[0] * trm[0] + trm[1] * trm[1]);
+        textContentItem.width = Math.hypot(trm[0], trm[1]);
         textContentItem.height = 0;
         textContentItem.vertical = true;
       }
 
-      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);
+      const scaleLineX = Math.hypot(textState.textLineMatrix[0], textState.textLineMatrix[1]);
+      const scaleCtmX = Math.hypot(textState.ctm[0], textState.ctm[1]);
       textContentItem.textAdvanceScale = scaleCtmX * scaleLineX;
       textContentItem.lastAdvanceWidth = 0;
       textContentItem.lastAdvanceHeight = 0;
@@ -23626,6 +24817,13 @@ class PartialEvaluator {
                   return;
                 }
 
+                const globalImage = self.globalImageCache.getData(xobj, self.pageIndex);
+
+                if (globalImage) {
+                  resolveXObject();
+                  return;
+                }
+
                 xobj = xref.fetch(xobj);
               }
 
@@ -24224,7 +25422,7 @@ class PartialEvaluator {
 
   getBaseFontMetrics(name) {
     var defaultWidth = 0;
-    var widths = [];
+    var widths = Object.create(null);
     var monospace = false;
     var stdFontMap = (0, _standard_fonts.getStdFontMap)();
     var lookupName = stdFontMap[name] || name;
@@ -24293,6 +25491,11 @@ class PartialEvaluator {
       }
 
       dict = Array.isArray(df) ? this.xref.fetchIfRef(df[0]) : df;
+
+      if (!(dict instanceof _primitives.Dict)) {
+        throw new _util.FormatError("Descendant font is not a dictionary.");
+      }
+
       type = dict.get("Subtype");
 
       if (!(0, _primitives.isName)(type)) {
@@ -24368,7 +25571,7 @@ class PartialEvaluator {
     };
   }
 
-  translateFont(preEvaluatedFont) {
+  async translateFont(preEvaluatedFont) {
     var baseDict = preEvaluatedFont.baseDict;
     var dict = preEvaluatedFont.dict;
     var composite = preEvaluatedFont.composite;
@@ -24440,7 +25643,7 @@ class PartialEvaluator {
       var baseFontStr = baseFont && baseFont.name;
 
       if (fontNameStr !== baseFontStr) {
-        (0, _util.info)(`The FontDescriptor\'s FontName is "${fontNameStr}" but ` + `should be the same as 
the Font\'s BaseFont "${baseFontStr}".`);
+        (0, _util.info)(`The FontDescriptor's FontName is "${fontNameStr}" but ` + `should be the same as 
the Font's BaseFont "${baseFontStr}".`);
 
         if (fontNameStr && baseFontStr && baseFontStr.startsWith(fontNameStr)) {
           fontName = baseFont;
@@ -24454,7 +25657,18 @@ class PartialEvaluator {
       throw new _util.FormatError("invalid font name");
     }
 
-    var fontFile = descriptor.get("FontFile", "FontFile2", "FontFile3");
+    let fontFile;
+
+    try {
+      fontFile = descriptor.get("FontFile", "FontFile2", "FontFile3");
+    } catch (ex) {
+      if (!this.options.ignoreErrors) {
+        throw ex;
+      }
+
+      (0, _util.warn)(`translateFont - fetching "${fontName.name}" font file: "${ex}".`);
+      fontFile = new _stream.NullStream();
+    }
 
     if (fontFile) {
       if (fontFile.dict) {
@@ -24493,30 +25707,24 @@ class PartialEvaluator {
       italicAngle: descriptor.get("ItalicAngle"),
       isType3Font: false
     };
-    var cMapPromise;
 
     if (composite) {
-      var cidEncoding = baseDict.get("Encoding");
+      const cidEncoding = baseDict.get("Encoding");
 
       if ((0, _primitives.isName)(cidEncoding)) {
         properties.cidEncoding = cidEncoding.name;
       }
 
-      cMapPromise = _cmap.CMapFactory.create({
+      const cMap = await _cmap.CMapFactory.create({
         encoding: cidEncoding,
         fetchBuiltInCMap: this._fetchBuiltInCMapBound,
         useCMap: null
-      }).then(function (cMap) {
-        properties.cMap = cMap;
-        properties.vertical = properties.cMap.vertical;
       });
-    } else {
-      cMapPromise = Promise.resolve(undefined);
+      properties.cMap = cMap;
+      properties.vertical = properties.cMap.vertical;
     }
 
-    return cMapPromise.then(() => {
-      return this.extractDataStructures(dict, baseDict, properties);
-    }).then(newProperties => {
+    return this.extractDataStructures(dict, baseDict, properties).then(newProperties => {
       this.extractWidths(dict, descriptor, newProperties);
 
       if (type === "Type3") {
@@ -24615,7 +25823,7 @@ class TranslatedFont {
     var charProcOperatorList = Object.create(null);
 
     for (const key of charProcs.getKeys()) {
-      loadCharProcsPromise = loadCharProcsPromise.then(function () {
+      loadCharProcsPromise = loadCharProcsPromise.then(() => {
         var glyphStream = charProcs.get(key);
         var operatorList = new _operator_list.OperatorList();
         return type3Evaluator.getOperatorList({
@@ -24623,7 +25831,11 @@ class TranslatedFont {
           task,
           resources: fontResources,
           operatorList
-        }).then(function () {
+        }).then(() => {
+          if (operatorList.fnArray[0] === _util.OPS.setCharWidthAndBounds) {
+            this._removeType3ColorOperators(operatorList);
+          }
+
           charProcOperatorList[key] = operatorList.getIR();
 
           for (const dependency of operatorList.dependencies) {
@@ -24643,10 +25855,66 @@ class TranslatedFont {
     return this.type3Loaded;
   }
 
+  _removeType3ColorOperators(operatorList) {
+    let i = 1,
+        ii = operatorList.length;
+
+    while (i < ii) {
+      switch (operatorList.fnArray[i]) {
+        case _util.OPS.setStrokeColorSpace:
+        case _util.OPS.setFillColorSpace:
+        case _util.OPS.setStrokeColor:
+        case _util.OPS.setStrokeColorN:
+        case _util.OPS.setFillColor:
+        case _util.OPS.setFillColorN:
+        case _util.OPS.setStrokeGray:
+        case _util.OPS.setFillGray:
+        case _util.OPS.setStrokeRGBColor:
+        case _util.OPS.setFillRGBColor:
+        case _util.OPS.setStrokeCMYKColor:
+        case _util.OPS.setFillCMYKColor:
+        case _util.OPS.shadingFill:
+        case _util.OPS.setRenderingIntent:
+          operatorList.fnArray.splice(i, 1);
+          operatorList.argsArray.splice(i, 1);
+          ii--;
+          continue;
+
+        case _util.OPS.setGState:
+          const [gStateObj] = operatorList.argsArray[i];
+          let j = 0,
+              jj = gStateObj.length;
+
+          while (j < jj) {
+            const [gStateKey] = gStateObj[j];
+
+            switch (gStateKey) {
+              case "TR":
+              case "TR2":
+              case "HT":
+              case "BG":
+              case "BG2":
+              case "UCR":
+              case "UCR2":
+                gStateObj.splice(j, 1);
+                jj--;
+                continue;
+            }
+
+            j++;
+          }
+
+          break;
+      }
+
+      i++;
+    }
+  }
+
 }
 
 class StateManager {
-  constructor(initialState) {
+  constructor(initialState = new EvalState()) {
     this.state = initialState;
     this.stateStack = [];
   }
@@ -25179,7 +26447,7 @@ class EvaluatorPreprocessor {
     return (0, _util.shadow)(this, "MAX_INVALID_PATH_OPS", 20);
   }
 
-  constructor(stream, xref, stateManager) {
+  constructor(stream, xref, stateManager = new StateManager()) {
     this.parser = new _parser.Parser({
       lexer: new _parser.Lexer(stream, EvaluatorPreprocessor.opMap),
       xref
@@ -25292,17 +26560,18 @@ class EvaluatorPreprocessor {
 
 }
 
+exports.EvaluatorPreprocessor = EvaluatorPreprocessor;
+
 /***/ }),
-/* 29 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/* 30 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
-exports.CMapFactory = exports.IdentityCMap = exports.CMap = void 0;
+}));
+exports.IdentityCMap = exports.CMapFactory = exports.CMap = void 0;
 
 var _util = __w_pdfjs_require__(2);
 
@@ -25443,6 +26712,25 @@ class CMap {
     out.length = 1;
   }
 
+  getCharCodeLength(charCode) {
+    const codespaceRanges = this.codespaceRanges;
+
+    for (let n = 0, nn = codespaceRanges.length; n < nn; n++) {
+      const codespaceRange = codespaceRanges[n];
+
+      for (let k = 0, kk = codespaceRange.length; k < kk;) {
+        const low = codespaceRange[k++];
+        const high = codespaceRange[k++];
+
+        if (charCode >= low && charCode <= high) {
+          return n + 1;
+        }
+      }
+    }
+
+    return 1;
+  }
+
   get length() {
     return this._map.length;
   }
@@ -25578,21 +26866,21 @@ var BinaryCMapReader = function BinaryCMapReaderClosure() {
   var MAX_NUM_SIZE = 16;
   var MAX_ENCODED_NUM_SIZE = 19;
 
-  function BinaryCMapStream(data) {
-    this.buffer = data;
-    this.pos = 0;
-    this.end = data.length;
-    this.tmpBuf = new Uint8Array(MAX_ENCODED_NUM_SIZE);
-  }
+  class BinaryCMapStream {
+    constructor(data) {
+      this.buffer = data;
+      this.pos = 0;
+      this.end = data.length;
+      this.tmpBuf = new Uint8Array(MAX_ENCODED_NUM_SIZE);
+    }
 
-  BinaryCMapStream.prototype = {
     readByte() {
       if (this.pos >= this.end) {
         return -1;
       }
 
       return this.buffer[this.pos++];
-    },
+    }
 
     readNumber() {
       var n = 0;
@@ -25610,17 +26898,17 @@ var BinaryCMapReader = function BinaryCMapReaderClosure() {
       } while (!last);
 
       return n;
-    },
+    }
 
     readSigned() {
       var n = this.readNumber();
       return n & 1 ? ~(n >>> 1) : n >>> 1;
-    },
+    }
 
     readHex(num, size) {
       num.set(this.buffer.subarray(this.pos, this.pos + size + 1));
       this.pos += size + 1;
-    },
+    }
 
     readHexNumber(num, size) {
       var last;
@@ -25653,7 +26941,7 @@ var BinaryCMapReader = function BinaryCMapReaderClosure() {
         buffer >>= 8;
         bufferSize -= 8;
       }
-    },
+    }
 
     readHexSigned(num, size) {
       this.readHexNumber(num, size);
@@ -25664,7 +26952,7 @@ var BinaryCMapReader = function BinaryCMapReaderClosure() {
         c = (c & 1) << 8 | num[i];
         num[i] = c >> 1 ^ sign;
       }
-    },
+    }
 
     readString() {
       var len = this.readNumber();
@@ -25677,10 +26965,10 @@ var BinaryCMapReader = function BinaryCMapReaderClosure() {
       return s;
     }
 
-  };
+  }
 
-  function processBinaryCMap(data, cMap, extend) {
-    return new Promise(function (resolve, reject) {
+  class BinaryCMapReader {
+    async process(data, cMap, extend) {
       var stream = new BinaryCMapStream(data);
       var header = stream.readByte();
       cMap.vertical = !!(header & 1);
@@ -25714,7 +27002,7 @@ var BinaryCMapReader = function BinaryCMapReaderClosure() {
         var dataSize = b & 15;
 
         if (dataSize + 1 > MAX_NUM_SIZE) {
-          throw new Error("processBinaryCMap: Invalid dataSize.");
+          throw new Error("BinaryCMapReader.process: Invalid dataSize.");
         }
 
         var ucs2DataSize = 1;
@@ -25847,25 +27135,19 @@ var BinaryCMapReader = function BinaryCMapReaderClosure() {
             break;
 
           default:
-            reject(new Error("processBinaryCMap: Unknown type: " + type));
-            return;
+            throw new Error(`BinaryCMapReader.process - unknown type: ${type}`);
         }
       }
 
       if (useCMap) {
-        resolve(extend(useCMap));
-        return;
+        return extend(useCMap);
       }
 
-      resolve(cMap);
-    });
-  }
+      return cMap;
+    }
 
-  function BinaryCMapReader() {}
+  }
 
-  BinaryCMapReader.prototype = {
-    process: processBinaryCMap
-  };
   return BinaryCMapReader;
 }();
 
@@ -26044,7 +27326,7 @@ var CMapFactory = function CMapFactoryClosure() {
     }
   }
 
-  function parseCMap(cMap, lexer, fetchBuiltInCMap, useCMap) {
+  async function parseCMap(cMap, lexer, fetchBuiltInCMap, useCMap) {
     var previous;
     var embeddedUseCMap;
 
@@ -26113,65 +27395,63 @@ var CMapFactory = function CMapFactoryClosure() {
       return extendCMap(cMap, fetchBuiltInCMap, useCMap);
     }
 
-    return Promise.resolve(cMap);
+    return cMap;
   }
 
-  function extendCMap(cMap, fetchBuiltInCMap, useCMap) {
-    return createBuiltInCMap(useCMap, fetchBuiltInCMap).then(function (newCMap) {
-      cMap.useCMap = newCMap;
+  async function extendCMap(cMap, fetchBuiltInCMap, useCMap) {
+    cMap.useCMap = await createBuiltInCMap(useCMap, fetchBuiltInCMap);
 
-      if (cMap.numCodespaceRanges === 0) {
-        var useCodespaceRanges = cMap.useCMap.codespaceRanges;
+    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;
+      for (var i = 0; i < useCodespaceRanges.length; i++) {
+        cMap.codespaceRanges[i] = useCodespaceRanges[i].slice();
       }
 
-      cMap.useCMap.forEach(function (key, value) {
-        if (!cMap.contains(key)) {
-          cMap.mapOne(key, cMap.useCMap.lookup(key));
-        }
-      });
-      return cMap;
+      cMap.numCodespaceRanges = cMap.useCMap.numCodespaceRanges;
+    }
+
+    cMap.useCMap.forEach(function (key, value) {
+      if (!cMap.contains(key)) {
+        cMap.mapOne(key, cMap.useCMap.lookup(key));
+      }
     });
+    return cMap;
   }
 
-  function createBuiltInCMap(name, fetchBuiltInCMap) {
+  async function createBuiltInCMap(name, fetchBuiltInCMap) {
     if (name === "Identity-H") {
-      return Promise.resolve(new IdentityCMap(false, 2));
+      return new IdentityCMap(false, 2);
     } else if (name === "Identity-V") {
-      return Promise.resolve(new IdentityCMap(true, 2));
+      return new IdentityCMap(true, 2);
     }
 
     if (!BUILT_IN_CMAPS.includes(name)) {
-      return Promise.reject(new Error("Unknown CMap name: " + name));
+      throw new Error("Unknown CMap name: " + name);
     }
 
     if (!fetchBuiltInCMap) {
-      return Promise.reject(new Error("Built-in CMap parameters are not provided."));
+      throw new Error("Built-in CMap parameters are not provided.");
     }
 
-    return fetchBuiltInCMap(name).then(function (data) {
-      var cMapData = data.cMapData,
-          compressionType = data.compressionType;
-      var cMap = new CMap(true);
-
-      if (compressionType === _util.CMapCompressionType.BINARY) {
-        return new BinaryCMapReader().process(cMapData, cMap, function (useCMap) {
-          return extendCMap(cMap, fetchBuiltInCMap, useCMap);
-        });
-      }
+    const {
+      cMapData,
+      compressionType
+    } = await fetchBuiltInCMap(name);
+    var cMap = new CMap(true);
+
+    if (compressionType === _util.CMapCompressionType.BINARY) {
+      return new BinaryCMapReader().process(cMapData, cMap, useCMap => {
+        return extendCMap(cMap, fetchBuiltInCMap, useCMap);
+      });
+    }
 
-      if (compressionType === _util.CMapCompressionType.NONE) {
-        var lexer = new _parser.Lexer(new _stream.Stream(cMapData));
-        return parseCMap(cMap, lexer, fetchBuiltInCMap, null);
-      }
+    if (compressionType === _util.CMapCompressionType.NONE) {
+      var lexer = new _parser.Lexer(new _stream.Stream(cMapData));
+      return parseCMap(cMap, lexer, fetchBuiltInCMap, null);
+    }
 
-      return Promise.reject(new Error("TODO: Only BINARY/NONE CMap compression is currently supported."));
-    });
+    throw new Error("TODO: Only BINARY/NONE CMap compression is currently supported.");
   }
 
   return {
@@ -26183,15 +27463,13 @@ var CMapFactory = function CMapFactoryClosure() {
       if ((0, _primitives.isName)(encoding)) {
         return createBuiltInCMap(encoding.name, fetchBuiltInCMap);
       } else if ((0, _primitives.isStream)(encoding)) {
-        var cMap = new CMap();
-        var lexer = new _parser.Lexer(encoding);
-        return parseCMap(cMap, lexer, fetchBuiltInCMap, useCMap).then(function (parsedCMap) {
-          if (parsedCMap.isIdentityCMap) {
-            return createBuiltInCMap(parsedCMap.name, fetchBuiltInCMap);
-          }
+        const parsedCMap = await parseCMap(new CMap(), new _parser.Lexer(encoding), fetchBuiltInCMap, 
useCMap);
 
-          return parsedCMap;
-        });
+        if (parsedCMap.isIdentityCMap) {
+          return createBuiltInCMap(parsedCMap.name, fetchBuiltInCMap);
+        }
+
+        return parsedCMap;
       }
 
       throw new Error("Encoding required.");
@@ -26203,39 +27481,38 @@ var CMapFactory = function CMapFactoryClosure() {
 exports.CMapFactory = CMapFactory;
 
 /***/ }),
-/* 30 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/* 31 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.getFontType = getFontType;
-exports.IdentityToUnicodeMap = exports.ToUnicodeMap = exports.FontFlags = exports.Font = exports.ErrorFont = 
exports.SEAC_ANALYSIS_ENABLED = void 0;
+exports.ToUnicodeMap = exports.SEAC_ANALYSIS_ENABLED = exports.IdentityToUnicodeMap = exports.FontFlags = 
exports.Font = exports.ErrorFont = void 0;
 
 var _util = __w_pdfjs_require__(2);
 
-var _cff_parser = __w_pdfjs_require__(31);
+var _cff_parser = __w_pdfjs_require__(32);
 
-var _glyphlist = __w_pdfjs_require__(34);
+var _glyphlist = __w_pdfjs_require__(35);
 
-var _encodings = __w_pdfjs_require__(33);
+var _encodings = __w_pdfjs_require__(34);
 
-var _standard_fonts = __w_pdfjs_require__(35);
+var _standard_fonts = __w_pdfjs_require__(36);
 
-var _unicode = __w_pdfjs_require__(36);
+var _unicode = __w_pdfjs_require__(37);
 
 var _core_utils = __w_pdfjs_require__(8);
 
-var _font_renderer = __w_pdfjs_require__(37);
+var _font_renderer = __w_pdfjs_require__(38);
 
-var _cmap = __w_pdfjs_require__(29);
+var _cmap = __w_pdfjs_require__(30);
 
 var _stream = __w_pdfjs_require__(12);
 
-var _type1_parser = __w_pdfjs_require__(38);
+var _type1_parser = __w_pdfjs_require__(39);
 
 const PRIVATE_USE_AREAS = [[0xe000, 0xf8ff], [0x100000, 0x10fffd]];
 var PDF_GLYPH_SPACE_UNITS = 1000;
@@ -26623,6 +27900,7 @@ var Font = function FontClosure() {
     this.defaultWidth = properties.defaultWidth;
     this.composite = properties.composite;
     this.cMap = properties.cMap;
+    this.capHeight = properties.capHeight / PDF_GLYPH_SPACE_UNITS;
     this.ascent = properties.ascent / PDF_GLYPH_SPACE_UNITS;
     this.descent = properties.descent / PDF_GLYPH_SPACE_UNITS;
     this.fontMatrix = properties.fontMatrix;
@@ -26654,7 +27932,7 @@ var Font = function FontClosure() {
         (0, _util.warn)('Font file is empty in "' + name + '" (' + this.loadedName + ")");
       }
 
-      this.fallbackToSystemFont();
+      this.fallbackToSystemFont(properties);
       return;
     }
 
@@ -26697,7 +27975,7 @@ var Font = function FontClosure() {
       }
     } catch (e) {
       (0, _util.warn)(e);
-      this.fallbackToSystemFont();
+      this.fallbackToSystemFont(properties);
       return;
     }
 
@@ -27208,7 +28486,7 @@ var Font = function FontClosure() {
       return data;
     },
 
-    fallbackToSystemFont: function Font_fallbackToSystemFont() {
+    fallbackToSystemFont(properties) {
       this.missingFile = true;
       var name = this.name;
       var type = this.type;
@@ -27216,15 +28494,18 @@ var Font = function FontClosure() {
       let fontName = name.replace(/[,_]/g, "-").replace(/\s/g, "");
       var stdFontMap = (0, _standard_fonts.getStdFontMap)(),
           nonStdFontMap = (0, _standard_fonts.getNonStdFontMap)();
-      var isStandardFont = !!stdFontMap[fontName] || !!(nonStdFontMap[fontName] && 
stdFontMap[nonStdFontMap[fontName]]);
+      const isStandardFont = !!stdFontMap[fontName];
+      const isMappedToStandardFont = !!(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;
       this.black = name.search(/Black/g) !== -1;
-      this.remeasure = Object.keys(this.widths).length > 0;
+      const isNarrow = name.search(/Narrow/g) !== -1;
+      this.remeasure = (!isStandardFont || isNarrow) && Object.keys(this.widths).length > 0;
 
-      if (isStandardFont && type === "CIDFontType2" && this.cidEncoding.startsWith("Identity-")) {
-        const GlyphMapForStandardFonts = (0, _standard_fonts.getGlyphMapForStandardFonts)();
+      if ((isStandardFont || isMappedToStandardFont) && type === "CIDFontType2" && 
this.cidEncoding.startsWith("Identity-")) {
+        const GlyphMapForStandardFonts = (0, _standard_fonts.getGlyphMapForStandardFonts)(),
+              cidToGidMap = properties.cidToGidMap;
         const map = [];
 
         for (const charCode in GlyphMapForStandardFonts) {
@@ -27245,6 +28526,16 @@ var Font = function FontClosure() {
           }
         }
 
+        if (cidToGidMap) {
+          for (const charCode in map) {
+            const cid = map[charCode];
+
+            if (cidToGidMap[cid] !== undefined) {
+              map[+charCode] = cidToGidMap[cid];
+            }
+          }
+        }
+
         var isIdentityUnicode = this.toUnicode instanceof IdentityToUnicodeMap;
 
         if (!isIdentityUnicode) {
@@ -27297,6 +28588,7 @@ var Font = function FontClosure() {
       this.loadedName = fontName.split("-")[0];
       this.fontType = getFontType(type, subtype);
     },
+
     checkAndRepair: function Font_checkAndRepair(name, font, properties) {
       const VALID_TABLES = ["OS/2", "cmap", "head", "hhea", "hmtx", "maxp", "name", "post", "loca", "glyf", 
"fpgm", "prep", "cvt ", "CFF "];
 
@@ -28598,15 +29890,22 @@ var Font = function FontClosure() {
           }
         }
 
-        if (properties.glyphNames && baseEncoding.length) {
+        if (properties.glyphNames && (baseEncoding.length || this.differences.length)) {
           for (let i = 0; i < 256; ++i) {
-            if (charCodeToGlyphId[i] === undefined && baseEncoding[i]) {
-              glyphName = baseEncoding[i];
-              const glyphId = properties.glyphNames.indexOf(glyphName);
+            if (charCodeToGlyphId[i] !== undefined) {
+              continue;
+            }
 
-              if (glyphId > 0 && hasGlyph(glyphId)) {
-                charCodeToGlyphId[i] = glyphId;
-              }
+            glyphName = this.differences[i] || baseEncoding[i];
+
+            if (!glyphName) {
+              continue;
+            }
+
+            const glyphId = properties.glyphNames.indexOf(glyphName);
+
+            if (glyphId > 0 && hasGlyph(glyphId)) {
+              charCodeToGlyphId[i] = glyphId;
             }
           }
         }
@@ -28829,7 +30128,7 @@ var Font = function FontClosure() {
       return (0, _util.shadow)(this, "spaceWidth", width);
     },
 
-    charToGlyph: function Font_charToGlyph(charcode, isSpace) {
+    _charToGlyph(charcode, isSpace = false) {
       var fontCharCode, width, operatorListId;
       var widthCode = charcode;
 
@@ -28894,6 +30193,7 @@ var Font = function FontClosure() {
 
       return glyph;
     },
+
     charsToGlyphs: function Font_charsToGlyphs(chars) {
       var charsCache = this.charsCache;
       var glyphs, glyph, charcode;
@@ -28924,13 +30224,13 @@ var Font = function FontClosure() {
           var length = c.length;
           i += length;
           var isSpace = length === 1 && chars.charCodeAt(i - 1) === 0x20;
-          glyph = this.charToGlyph(charcode, isSpace);
+          glyph = this._charToGlyph(charcode, isSpace);
           glyphs.push(glyph);
         }
       } else {
         for (i = 0, ii = chars.length; i < ii; ++i) {
           charcode = chars.charCodeAt(i);
-          glyph = this.charToGlyph(charcode, charcode === 0x20);
+          glyph = this._charToGlyph(charcode, charcode === 0x20);
           glyphs.push(glyph);
         }
       }
@@ -28938,8 +30238,75 @@ var Font = function FontClosure() {
       return charsCache[charsCacheKey] = glyphs;
     },
 
+    getCharPositions(chars) {
+      const positions = [];
+
+      if (this.cMap) {
+        const c = Object.create(null);
+        let i = 0;
+
+        while (i < chars.length) {
+          this.cMap.readCharCode(chars, i, c);
+          const length = c.length;
+          positions.push([i, i + length]);
+          i += length;
+        }
+      } else {
+        for (let i = 0, ii = chars.length; i < ii; ++i) {
+          positions.push([i, i + 1]);
+        }
+      }
+
+      return positions;
+    },
+
     get glyphCacheValues() {
       return Object.values(this.glyphCache);
+    },
+
+    encodeString(str) {
+      const buffers = [];
+      const currentBuf = [];
+
+      const hasCurrentBufErrors = () => buffers.length % 2 === 1;
+
+      for (let i = 0, ii = str.length; i < ii; i++) {
+        const unicode = str.codePointAt(i);
+
+        if (unicode > 0xd7ff && (unicode < 0xe000 || unicode > 0xfffd)) {
+          i++;
+        }
+
+        if (this.toUnicode) {
+          const char = String.fromCodePoint(unicode);
+          const charCode = this.toUnicode.charCodeOf(char);
+
+          if (charCode !== -1) {
+            if (hasCurrentBufErrors()) {
+              buffers.push(currentBuf.join(""));
+              currentBuf.length = 0;
+            }
+
+            const charCodeLength = this.cMap ? this.cMap.getCharCodeLength(charCode) : 1;
+
+            for (let j = charCodeLength - 1; j >= 0; j--) {
+              currentBuf.push(String.fromCharCode(charCode >> 8 * j & 0xff));
+            }
+
+            continue;
+          }
+        }
+
+        if (!hasCurrentBufErrors()) {
+          buffers.push(currentBuf.join(""));
+          currentBuf.length = 0;
+        }
+
+        currentBuf.push(String.fromCodePoint(unicode));
+      }
+
+      buffers.push(currentBuf.join(""));
+      return buffers;
     }
 
   };
@@ -28959,6 +30326,9 @@ var ErrorFont = function ErrorFontClosure() {
     charsToGlyphs: function ErrorFont_charsToGlyphs() {
       return [];
     },
+    encodeString: function ErrorFont_encodeString(chars) {
+      return [chars];
+    },
 
     exportData(extraProperties = false) {
       return {
@@ -29444,30 +30814,29 @@ var CFFFont = function CFFFontClosure() {
 }();
 
 /***/ }),
-/* 31 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/* 32 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
-exports.CFFFDSelect = exports.CFFCompiler = exports.CFFPrivateDict = exports.CFFTopDict = exports.CFFCharset 
= exports.CFFIndex = exports.CFFStrings = exports.CFFHeader = exports.CFF = exports.CFFParser = 
exports.CFFStandardStrings = void 0;
+}));
+exports.CFFTopDict = exports.CFFStrings = exports.CFFStandardStrings = exports.CFFPrivateDict = 
exports.CFFParser = exports.CFFIndex = exports.CFFHeader = exports.CFFFDSelect = exports.CFFCompiler = 
exports.CFFCharset = exports.CFF = void 0;
 
 var _util = __w_pdfjs_require__(2);
 
-var _charsets = __w_pdfjs_require__(32);
+var _charsets = __w_pdfjs_require__(33);
 
-var _encodings = __w_pdfjs_require__(33);
+var _encodings = __w_pdfjs_require__(34);
 
-var MAX_SUBR_NESTING = 10;
-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", "paragra
 ph", "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", "acircum
 flex", "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", "hyphensu
 perior", "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", "periodinferi
 or", "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"];
+const MAX_SUBR_NESTING = 10;
+const 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", "parag
 raph", "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", "acirc
 umflex", "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", "hyphen
 superior", "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", "periodinfe
 rior", "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"];
 exports.CFFStandardStrings = CFFStandardStrings;
 const NUM_STANDARD_CFF_STRINGS = 391;
 
-var CFFParser = function CFFParserClosure() {
-  var CharstringValidationData = [null, {
+const CFFParser = function CFFParserClosure() {
+  const CharstringValidationData = [null, {
     id: "hstem",
     min: 2,
     stackClearing: true,
@@ -29564,7 +30933,7 @@ var CFFParser = function CFFParserClosure() {
     min: 4,
     resetStack: true
   }];
-  var CharstringValidationData12 = [null, null, null, {
+  const CharstringValidationData12 = [null, null, null, {
     id: "and",
     min: 2,
     stackDelta: -1
@@ -29685,16 +31054,16 @@ var CFFParser = function CFFParserClosure() {
     }
 
     parse() {
-      var properties = this.properties;
-      var cff = new CFF();
+      const properties = this.properties;
+      const cff = new CFF();
       this.cff = cff;
-      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);
+      const header = this.parseHeader();
+      const nameIndex = this.parseIndex(header.endPos);
+      const topDictIndex = this.parseIndex(nameIndex.endPos);
+      const stringIndex = this.parseIndex(topDictIndex.endPos);
+      const globalSubrIndex = this.parseIndex(stringIndex.endPos);
+      const topDictParsed = this.parseDict(topDictIndex.obj.get(0));
+      const topDict = this.createDict(CFFTopDict, topDictParsed, cff.strings);
       cff.header = header.obj;
       cff.names = this.parseNameIndex(nameIndex.obj);
       cff.strings = this.parseStringIndex(stringIndex.obj);
@@ -29702,15 +31071,15 @@ var CFFParser = function CFFParserClosure() {
       cff.globalSubrIndex = globalSubrIndex.obj;
       this.parsePrivateDict(cff.topDict);
       cff.isCIDFont = topDict.hasName("ROS");
-      var charStringOffset = topDict.getByName("CharStrings");
-      var charStringIndex = this.parseIndex(charStringOffset).obj;
-      var fontMatrix = topDict.getByName("FontMatrix");
+      const charStringOffset = topDict.getByName("CharStrings");
+      const charStringIndex = this.parseIndex(charStringOffset).obj;
+      const fontMatrix = topDict.getByName("FontMatrix");
 
       if (fontMatrix) {
         properties.fontMatrix = fontMatrix;
       }
 
-      var fontBBox = topDict.getByName("FontBBox");
+      const fontBBox = topDict.getByName("FontBBox");
 
       if (fontBBox) {
         properties.ascent = Math.max(fontBBox[3], fontBBox[1]);
@@ -29718,14 +31087,14 @@ var CFFParser = function CFFParserClosure() {
         properties.ascentScaled = true;
       }
 
-      var charset, encoding;
+      let charset, encoding;
 
       if (cff.isCIDFont) {
-        var fdArrayIndex = this.parseIndex(topDict.getByName("FDArray")).obj;
+        const 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);
+        for (let i = 0, ii = fdArrayIndex.count; i < ii; ++i) {
+          const dictRaw = fdArrayIndex.get(i);
+          const fontDict = this.createDict(CFFTopDict, this.parseDict(dictRaw), cff.strings);
           this.parsePrivateDict(fontDict);
           cff.fdArray.push(fontDict);
         }
@@ -29740,7 +31109,7 @@ var CFFParser = function CFFParserClosure() {
 
       cff.charset = charset;
       cff.encoding = encoding;
-      var charStringsAndSeacs = this.parseCharStrings({
+      const charStringsAndSeacs = this.parseCharStrings({
         charStrings: charStringIndex,
         localSubrIndex: topDict.privateDict.subrsIndex,
         globalSubrIndex: globalSubrIndex.obj,
@@ -29755,9 +31124,9 @@ var CFFParser = function CFFParserClosure() {
     }
 
     parseHeader() {
-      var bytes = this.bytes;
-      var bytesLength = bytes.length;
-      var offset = 0;
+      let bytes = this.bytes;
+      const bytesLength = bytes.length;
+      let offset = 0;
 
       while (offset < bytesLength && bytes[offset] !== 1) {
         ++offset;
@@ -29773,11 +31142,11 @@ var CFFParser = function CFFParserClosure() {
         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);
+      const major = bytes[0];
+      const minor = bytes[1];
+      const hdrSize = bytes[2];
+      const offSize = bytes[3];
+      const header = new CFFHeader(major, minor, hdrSize, offSize);
       return {
         obj: header,
         endPos: hdrSize
@@ -29785,10 +31154,10 @@ var CFFParser = function CFFParserClosure() {
     }
 
     parseDict(dict) {
-      var pos = 0;
+      let pos = 0;
 
       function parseOperand() {
-        var value = dict[pos++];
+        let value = dict[pos++];
 
         if (value === 30) {
           return parseFloatOperand();
@@ -29815,15 +31184,15 @@ var CFFParser = function CFFParserClosure() {
       }
 
       function parseFloatOperand() {
-        var str = "";
-        var eof = 15;
+        let str = "";
+        const eof = 15;
         const lookup = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ".", "E", "E-", null, "-"];
-        var length = dict.length;
+        const length = dict.length;
 
         while (pos < length) {
-          var b = dict[pos++];
-          var b1 = b >> 4;
-          var b2 = b & 15;
+          const b = dict[pos++];
+          const b1 = b >> 4;
+          const b2 = b & 15;
 
           if (b1 === eof) {
             break;
@@ -29841,13 +31210,13 @@ var CFFParser = function CFFParserClosure() {
         return parseFloat(str);
       }
 
-      var operands = [];
-      var entries = [];
+      let operands = [];
+      const entries = [];
       pos = 0;
-      var end = dict.length;
+      const end = dict.length;
 
       while (pos < end) {
-        var b = dict[pos];
+        let b = dict[pos];
 
         if (b <= 21) {
           if (b === 12) {
@@ -29866,21 +31235,21 @@ var CFFParser = function CFFParserClosure() {
     }
 
     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;
+      const cffIndex = new CFFIndex();
+      const bytes = this.bytes;
+      const count = bytes[pos++] << 8 | bytes[pos++];
+      const offsets = [];
+      let end = pos;
+      let i, ii;
 
       if (count !== 0) {
-        var offsetSize = bytes[pos++];
-        var startPos = pos + (count + 1) * offsetSize - 1;
+        const offsetSize = bytes[pos++];
+        const startPos = pos + (count + 1) * offsetSize - 1;
 
         for (i = 0, ii = count + 1; i < ii; ++i) {
-          var offset = 0;
+          let offset = 0;
 
-          for (var j = 0; j < offsetSize; ++j) {
+          for (let j = 0; j < offsetSize; ++j) {
             offset <<= 8;
             offset += bytes[pos++];
           }
@@ -29892,8 +31261,8 @@ var CFFParser = function CFFParserClosure() {
       }
 
       for (i = 0, ii = offsets.length - 1; i < ii; ++i) {
-        var offsetStart = offsets[i];
-        var offsetEnd = offsets[i + 1];
+        const offsetStart = offsets[i];
+        const offsetEnd = offsets[i + 1];
         cffIndex.add(bytes.subarray(offsetStart, offsetEnd));
       }
 
@@ -29904,10 +31273,10 @@ var CFFParser = function CFFParserClosure() {
     }
 
     parseNameIndex(index) {
-      var names = [];
+      const names = [];
 
-      for (var i = 0, ii = index.count; i < ii; ++i) {
-        var name = index.get(i);
+      for (let i = 0, ii = index.count; i < ii; ++i) {
+        const name = index.get(i);
         names.push((0, _util.bytesToString)(name));
       }
 
@@ -29915,10 +31284,10 @@ var CFFParser = function CFFParserClosure() {
     }
 
     parseStringIndex(index) {
-      var strings = new CFFStrings();
+      const strings = new CFFStrings();
 
-      for (var i = 0, ii = index.count; i < ii; ++i) {
-        var data = index.get(i);
+      for (let i = 0, ii = index.count; i < ii; ++i) {
+        const data = index.get(i);
         strings.add((0, _util.bytesToString)(data));
       }
 
@@ -29926,12 +31295,12 @@ var CFFParser = function CFFParserClosure() {
     }
 
     createDict(Type, dict, strings) {
-      var cffDict = new Type(strings);
+      const 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];
+      for (let i = 0, ii = dict.length; i < ii; ++i) {
+        const pair = dict[i];
+        const key = pair[0];
+        const value = pair[1];
         cffDict.setByKey(key, value);
       }
 
@@ -29943,16 +31312,16 @@ var CFFParser = function CFFParserClosure() {
         return false;
       }
 
-      var stackSize = state.stackSize;
-      var stack = state.stack;
-      var length = data.length;
+      let stackSize = state.stackSize;
+      const stack = state.stack;
+      const length = data.length;
 
-      for (var j = 0; j < length;) {
-        var value = data[j++];
-        var validationCommand = null;
+      for (let j = 0; j < length;) {
+        const value = data[j++];
+        let validationCommand = null;
 
         if (value === 12) {
-          var q = data[j++];
+          const q = data[j++];
 
           if (q === 0) {
             data[j - 2] = 139;
@@ -29993,7 +31362,7 @@ var CFFParser = function CFFParserClosure() {
           stackSize %= 2;
           validationCommand = CharstringValidationData[value];
         } else if (value === 10 || value === 29) {
-          var subrsIndex;
+          let subrsIndex;
 
           if (value === 10) {
             subrsIndex = localSubrIndex;
@@ -30007,7 +31376,7 @@ var CFFParser = function CFFParserClosure() {
             return false;
           }
 
-          var bias = 32768;
+          let bias = 32768;
 
           if (subrsIndex.count < 1240) {
             bias = 107;
@@ -30015,7 +31384,7 @@ var CFFParser = function CFFParserClosure() {
             bias = 1131;
           }
 
-          var subrNumber = stack[--stackSize] + bias;
+          const subrNumber = stack[--stackSize] + bias;
 
           if (subrNumber < 0 || subrNumber >= subrsIndex.count || isNaN(subrNumber)) {
             validationCommand = CharstringValidationData[value];
@@ -30025,7 +31394,7 @@ var CFFParser = function CFFParserClosure() {
 
           state.stackSize = stackSize;
           state.callDepth++;
-          var valid = this.parseCharString(state, subrsIndex.get(subrNumber), localSubrIndex, 
globalSubrIndex);
+          const valid = this.parseCharString(state, subrsIndex.get(subrNumber), localSubrIndex, 
globalSubrIndex);
 
           if (!valid) {
             return false;
@@ -30106,13 +31475,13 @@ var CFFParser = function CFFParserClosure() {
       fdArray,
       privateDict
     }) {
-      var seacs = [];
-      var widths = [];
-      var count = charStrings.count;
+      const seacs = [];
+      const widths = [];
+      const count = charStrings.count;
 
-      for (var i = 0; i < count; i++) {
-        var charstring = charStrings.get(i);
-        var state = {
+      for (let i = 0; i < count; i++) {
+        const charstring = charStrings.get(i);
+        const state = {
           callDepth: 0,
           stackSize: 0,
           stack: [],
@@ -30123,12 +31492,12 @@ var CFFParser = function CFFParserClosure() {
           width: null,
           hasVStems: false
         };
-        var valid = true;
-        var localSubrToUse = null;
-        var privateDictToUse = privateDict;
+        let valid = true;
+        let localSubrToUse = null;
+        let privateDictToUse = privateDict;
 
         if (fdSelect && fdArray.length) {
-          var fdIndex = fdSelect.getFDIndex(i);
+          const fdIndex = fdSelect.getFDIndex(i);
 
           if (fdIndex === -1) {
             (0, _util.warn)("Glyph index is not in fd select.");
@@ -30177,7 +31546,7 @@ var CFFParser = function CFFParserClosure() {
     }
 
     emptyPrivateDictionary(parentDict) {
-      var privateDict = this.createDict(CFFPrivateDict, [], parentDict.strings);
+      const privateDict = this.createDict(CFFPrivateDict, [], parentDict.strings);
       parentDict.setByKey(18, [0, 0]);
       parentDict.privateDict = privateDict;
     }
@@ -30188,40 +31557,40 @@ var CFFParser = function CFFParserClosure() {
         return;
       }
 
-      var privateOffset = parentDict.getByName("Private");
+      const privateOffset = parentDict.getByName("Private");
 
       if (!Array.isArray(privateOffset) || privateOffset.length !== 2) {
         parentDict.removeByName("Private");
         return;
       }
 
-      var size = privateOffset[0];
-      var offset = privateOffset[1];
+      const size = privateOffset[0];
+      const offset = privateOffset[1];
 
       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);
+      const privateDictEnd = offset + size;
+      const dictData = this.bytes.subarray(offset, privateDictEnd);
+      const dict = this.parseDict(dictData);
+      const privateDict = this.createDict(CFFPrivateDict, dict, parentDict.strings);
       parentDict.privateDict = privateDict;
 
       if (!privateDict.getByName("Subrs")) {
         return;
       }
 
-      var subrsOffset = privateDict.getByName("Subrs");
-      var relativeOffset = offset + subrsOffset;
+      const subrsOffset = privateDict.getByName("Subrs");
+      const relativeOffset = offset + subrsOffset;
 
       if (subrsOffset === 0 || relativeOffset >= this.bytes.length) {
         this.emptyPrivateDictionary(parentDict);
         return;
       }
 
-      var subrsIndex = this.parseIndex(relativeOffset);
+      const subrsIndex = this.parseIndex(relativeOffset);
       privateDict.subrsIndex = subrsIndex.obj;
     }
 
@@ -30234,11 +31603,11 @@ var CFFParser = function CFFParserClosure() {
         return new CFFCharset(true, CFFCharsetPredefinedTypes.EXPERT_SUBSET, _charsets.ExpertSubsetCharset);
       }
 
-      var bytes = this.bytes;
-      var start = pos;
-      var format = bytes[pos++];
+      const bytes = this.bytes;
+      const start = pos;
+      const format = bytes[pos++];
       const charset = [cid ? 0 : ".notdef"];
-      var id, count, i;
+      let id, count, i;
       length -= 1;
 
       switch (format) {
@@ -30278,24 +31647,24 @@ var CFFParser = function CFFParserClosure() {
           throw new _util.FormatError("Unknown charset format");
       }
 
-      var end = pos;
-      var raw = bytes.subarray(start, end);
+      const end = pos;
+      const raw = bytes.subarray(start, end);
       return new CFFCharset(false, format, charset, raw);
     }
 
     parseEncoding(pos, properties, strings, charset) {
-      var encoding = Object.create(null);
-      var bytes = this.bytes;
-      var predefined = false;
-      var format, i, ii;
-      var raw = null;
+      const encoding = Object.create(null);
+      const bytes = this.bytes;
+      let predefined = false;
+      let format, i, ii;
+      let raw = null;
 
       function readSupplement() {
-        var supplementsCount = bytes[pos++];
+        const supplementsCount = bytes[pos++];
 
         for (i = 0; i < supplementsCount; i++) {
-          var code = bytes[pos++];
-          var sid = (bytes[pos++] << 8) + (bytes[pos++] & 0xff);
+          const code = bytes[pos++];
+          const sid = (bytes[pos++] << 8) + (bytes[pos++] & 0xff);
           encoding[code] = charset.indexOf(strings.get(sid));
         }
       }
@@ -30303,22 +31672,22 @@ var CFFParser = function CFFParserClosure() {
       if (pos === 0 || pos === 1) {
         predefined = true;
         format = pos;
-        var baseEncoding = pos ? _encodings.ExpertEncoding : _encodings.StandardEncoding;
+        const baseEncoding = pos ? _encodings.ExpertEncoding : _encodings.StandardEncoding;
 
         for (i = 0, ii = charset.length; i < ii; i++) {
-          var index = baseEncoding.indexOf(charset[i]);
+          const index = baseEncoding.indexOf(charset[i]);
 
           if (index !== -1) {
             encoding[index] = i;
           }
         }
       } else {
-        var dataStart = pos;
+        const dataStart = pos;
         format = bytes[pos++];
 
         switch (format & 0x7f) {
           case 0:
-            var glyphsCount = bytes[pos++];
+            const glyphsCount = bytes[pos++];
 
             for (i = 1; i <= glyphsCount; i++) {
               encoding[bytes[pos++]] = i;
@@ -30327,14 +31696,14 @@ var CFFParser = function CFFParserClosure() {
             break;
 
           case 1:
-            var rangesCount = bytes[pos++];
-            var gid = 1;
+            const rangesCount = bytes[pos++];
+            let gid = 1;
 
             for (i = 0; i < rangesCount; i++) {
-              var start = bytes[pos++];
-              var left = bytes[pos++];
+              const start = bytes[pos++];
+              const left = bytes[pos++];
 
-              for (var j = start; j <= start + left; j++) {
+              for (let j = start; j <= start + left; j++) {
                 encoding[j] = gid++;
               }
             }
@@ -30345,7 +31714,7 @@ var CFFParser = function CFFParserClosure() {
             throw new _util.FormatError(`Unknown encoding format: ${format} in CFF`);
         }
 
-        var dataEnd = pos;
+        const dataEnd = pos;
 
         if (format & 0x80) {
           bytes[dataStart] &= 0x7f;
@@ -30360,35 +31729,35 @@ var CFFParser = function CFFParserClosure() {
     }
 
     parseFDSelect(pos, length) {
-      var bytes = this.bytes;
-      var format = bytes[pos++];
-      var fdSelect = [];
-      var i;
+      const bytes = this.bytes;
+      const format = bytes[pos++];
+      const fdSelect = [];
+      let i;
 
       switch (format) {
         case 0:
           for (i = 0; i < length; ++i) {
-            var id = bytes[pos++];
+            const id = bytes[pos++];
             fdSelect.push(id);
           }
 
           break;
 
         case 3:
-          var rangesCount = bytes[pos++] << 8 | bytes[pos++];
+          const rangesCount = bytes[pos++] << 8 | bytes[pos++];
 
           for (i = 0; i < rangesCount; ++i) {
-            var first = bytes[pos++] << 8 | bytes[pos++];
+            let first = bytes[pos++] << 8 | bytes[pos++];
 
             if (i === 0 && first !== 0) {
               (0, _util.warn)("parseFDSelect: The first range must have a first GID of 0" + " -- trying to 
recover.");
               first = 0;
             }
 
-            var fdIndex = bytes[pos++];
-            var next = bytes[pos] << 8 | bytes[pos + 1];
+            const fdIndex = bytes[pos++];
+            const next = bytes[pos] << 8 | bytes[pos + 1];
 
-            for (var j = first; j < next; ++j) {
+            for (let j = first; j < next; ++j) {
               fdSelect.push(fdIndex);
             }
           }
@@ -30435,7 +31804,7 @@ class CFF {
       return;
     }
 
-    var glyphZero = this.charStrings.get(0);
+    const glyphZero = this.charStrings.get(0);
     this.charStrings.add(glyphZero);
 
     if (this.isCIDFont) {
@@ -30448,7 +31817,7 @@ class CFF {
       return false;
     }
 
-    var glyph = this.charStrings.get(id);
+    const glyph = this.charStrings.get(id);
     return glyph.length > 0;
   }
 
@@ -30558,20 +31927,20 @@ class CFFDict {
       return false;
     }
 
-    var valueLength = value.length;
+    const valueLength = value.length;
 
     if (valueLength === 0) {
       return true;
     }
 
-    for (var i = 0; i < valueLength; i++) {
+    for (let i = 0; i < valueLength; i++) {
       if (isNaN(value[i])) {
         (0, _util.warn)('Invalid CFFDict value: "' + value + '" for key "' + key + '".');
         return true;
       }
     }
 
-    var type = this.types[key];
+    const type = this.types[key];
 
     if (type === "num" || type === "sid" || type === "offset") {
       value = value[0];
@@ -30598,7 +31967,7 @@ class CFFDict {
       throw new _util.FormatError(`Invalid dictionary name ${name}"`);
     }
 
-    var key = this.nameToKeyMap[name];
+    const key = this.nameToKeyMap[name];
 
     if (!(key in this.values)) {
       return this.defaults[key];
@@ -30612,7 +31981,7 @@ class CFFDict {
   }
 
   static createTables(layout) {
-    var tables = {
+    const tables = {
       keyToNameMap: {},
       nameToKeyMap: {},
       defaults: {},
@@ -30621,9 +31990,9 @@ class CFFDict {
       order: []
     };
 
-    for (var i = 0, ii = layout.length; i < ii; ++i) {
-      var entry = layout[i];
-      var key = Array.isArray(entry[0]) ? (entry[0][0] << 8) + entry[0][1] : entry[0];
+    for (let i = 0, ii = layout.length; i < ii; ++i) {
+      const entry = layout[i];
+      const key = Array.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];
@@ -30637,9 +32006,9 @@ class 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], [[12, 37], "FDSelect", "offset", null], [[12, 36], "FDArray", "offset", null], 
[[12, 38], "FontName", "sid", null]];
-  var tables = null;
+const CFFTopDict = function CFFTopDictClosure() {
+  const 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", nul
 l], [[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], [[12, 37], "FDSelect", "offset", null], [[12, 36], "FDArray", "offset", null], 
[[12, 38], "FontName", "sid", null]];
+  let tables = null;
 
   class CFFTopDict extends CFFDict {
     constructor(strings) {
@@ -30658,9 +32027,9 @@ var CFFTopDict = function CFFTopDictClosure() {
 
 exports.CFFTopDict = 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;
+const CFFPrivateDict = function CFFPrivateDictClosure() {
+  const 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]];
+  let tables = null;
 
   class CFFPrivateDict extends CFFDict {
     constructor(strings) {
@@ -30678,7 +32047,7 @@ var CFFPrivateDict = function CFFPrivateDictClosure() {
 }();
 
 exports.CFFPrivateDict = CFFPrivateDict;
-var CFFCharsetPredefinedTypes = {
+const CFFCharsetPredefinedTypes = {
   ISO_ADOBE: 0,
   EXPERT: 1,
   EXPERT_SUBSET: 2
@@ -30742,7 +32111,7 @@ class CFFOffsetTracker {
   }
 
   offset(value) {
-    for (var key in this.offsets) {
+    for (const key in this.offsets) {
       this.offsets[key] += value;
     }
   }
@@ -30752,22 +32121,22 @@ class CFFOffsetTracker {
       throw new _util.FormatError(`Not tracking location of ${key}`);
     }
 
-    var data = output.data;
-    var dataOffset = this.offsets[key];
-    var size = 5;
+    const data = output.data;
+    const dataOffset = this.offsets[key];
+    const 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;
+    for (let i = 0, ii = values.length; i < ii; ++i) {
+      const offset0 = i * size + dataOffset;
+      const offset1 = offset0 + 1;
+      const offset2 = offset0 + 2;
+      const offset3 = offset0 + 3;
+      const offset4 = offset0 + 4;
 
       if (data[offset0] !== 0x1d || data[offset1] !== 0 || data[offset2] !== 0 || data[offset3] !== 0 || 
data[offset4] !== 0) {
         throw new _util.FormatError("writing to an offset that is not empty");
       }
 
-      var value = values[i];
+      const value = values[i];
       data[offset0] = 0x1d;
       data[offset1] = value >> 24 & 0xff;
       data[offset2] = value >> 16 & 0xff;
@@ -30784,8 +32153,8 @@ class CFFCompiler {
   }
 
   compile() {
-    var cff = this.cff;
-    var output = {
+    const cff = this.cff;
+    const output = {
       data: [],
       length: 0,
       add: function CFFCompiler_add(data) {
@@ -30793,19 +32162,19 @@ class CFFCompiler {
         this.length = this.data.length;
       }
     };
-    var header = this.compileHeader(cff.header);
+    const header = this.compileHeader(cff.header);
     output.add(header);
-    var nameIndex = this.compileNameIndex(cff.names);
+    const nameIndex = this.compileNameIndex(cff.names);
     output.add(nameIndex);
 
     if (cff.isCIDFont) {
       if (cff.topDict.hasName("FontMatrix")) {
-        var base = cff.topDict.getByName("FontMatrix");
+        const 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);
+        for (let i = 0, ii = cff.fdArray.length; i < ii; i++) {
+          const subDict = cff.fdArray[i];
+          let matrix = base.slice(0);
 
           if (subDict.hasName("FontMatrix")) {
             matrix = _util.Util.transform(matrix, subDict.getByName("FontMatrix"));
@@ -30816,40 +32185,46 @@ class CFFCompiler {
       }
     }
 
+    const xuid = cff.topDict.getByName("XUID");
+
+    if (xuid && xuid.length > 16) {
+      cff.topDict.removeByName("XUID");
+    }
+
     cff.topDict.setByName("charset", 0);
-    var compiled = this.compileTopDicts([cff.topDict], output.length, cff.isCIDFont);
+    let 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);
+    const topDictTracker = compiled.trackers[0];
+    const stringIndex = this.compileStringIndex(cff.strings.strings);
     output.add(stringIndex);
-    var globalSubrIndex = this.compileIndex(cff.globalSubrIndex);
+    const globalSubrIndex = this.compileIndex(cff.globalSubrIndex);
     output.add(globalSubrIndex);
 
     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);
+        const encoding = this.compileEncoding(cff.encoding);
         topDictTracker.setEntryLocation("Encoding", [output.length], output);
         output.add(encoding);
       }
     }
 
-    var charset = this.compileCharset(cff.charset, cff.charStrings.count, cff.strings, cff.isCIDFont);
+    const charset = this.compileCharset(cff.charset, cff.charStrings.count, cff.strings, cff.isCIDFont);
     topDictTracker.setEntryLocation("charset", [output.length], output);
     output.add(charset);
-    var charStrings = this.compileCharStrings(cff.charStrings);
+    const charStrings = this.compileCharStrings(cff.charStrings);
     topDictTracker.setEntryLocation("CharStrings", [output.length], output);
     output.add(charStrings);
 
     if (cff.isCIDFont) {
       topDictTracker.setEntryLocation("FDSelect", [output.length], output);
-      var fdSelect = this.compileFDSelect(cff.fdSelect);
+      const fdSelect = this.compileFDSelect(cff.fdSelect);
       output.add(fdSelect);
       compiled = this.compileTopDicts(cff.fdArray, output.length, true);
       topDictTracker.setEntryLocation("FDArray", [output.length], output);
       output.add(compiled.output);
-      var fontDictTrackers = compiled.trackers;
+      const fontDictTrackers = compiled.trackers;
       this.compilePrivateDicts(cff.fdArray, fontDictTrackers, output);
     }
 
@@ -30871,19 +32246,19 @@ class CFFCompiler {
   }
 
   encodeFloat(num) {
-    var value = num.toString();
-    var m = CFFCompiler.EncodeFloatRegExp.exec(value);
+    let value = num.toString();
+    const m = CFFCompiler.EncodeFloatRegExp.exec(value);
 
     if (m) {
-      var epsilon = parseFloat("1e" + ((m[2] ? +m[2] : 0) + m[1].length));
+      const epsilon = parseFloat("1e" + ((m[2] ? +m[2] : 0) + m[1].length));
       value = (Math.round(num * epsilon) / epsilon).toString();
     }
 
-    var nibbles = "";
-    var i, ii;
+    let nibbles = "";
+    let i, ii;
 
     for (i = 0, ii = value.length; i < ii; ++i) {
-      var a = value[i];
+      const a = value[i];
 
       if (a === "e") {
         nibbles += value[++i] === "-" ? "c" : "b";
@@ -30897,7 +32272,7 @@ class CFFCompiler {
     }
 
     nibbles += nibbles.length & 1 ? "f" : "ff";
-    var out = [30];
+    const out = [30];
 
     for (i = 0, ii = nibbles.length; i < ii; i += 2) {
       out.push(parseInt(nibbles.substring(i, i + 2), 16));
@@ -30907,7 +32282,7 @@ class CFFCompiler {
   }
 
   encodeInteger(value) {
-    var code;
+    let code;
 
     if (value >= -107 && value <= 107) {
       code = [value + 139];
@@ -30927,19 +32302,19 @@ class CFFCompiler {
   }
 
   compileHeader(header) {
-    return [header.major, header.minor, header.hdrSize, header.offSize];
+    return [header.major, header.minor, 4, header.offSize];
   }
 
   compileNameIndex(names) {
-    var nameIndex = new CFFIndex();
+    const nameIndex = new CFFIndex();
 
-    for (var i = 0, ii = names.length; i < ii; ++i) {
-      var name = names[i];
-      var length = Math.min(name.length, 127);
-      var sanitizedName = new Array(length);
+    for (let i = 0, ii = names.length; i < ii; ++i) {
+      const name = names[i];
+      const length = Math.min(name.length, 127);
+      let sanitizedName = new Array(length);
 
-      for (var j = 0; j < length; j++) {
-        var char = name[j];
+      for (let j = 0; j < length; j++) {
+        let char = name[j];
 
         if (char < "!" || char > "~" || char === "[" || char === "]" || char === "(" || char === ")" || char 
=== "{" || char === "}" || char === "<" || char === ">" || char === "/" || char === "%") {
           char = "_";
@@ -30961,11 +32336,11 @@ class CFFCompiler {
   }
 
   compileTopDicts(dicts, length, removeCidKeys) {
-    var fontDictTrackers = [];
-    var fdArrayIndex = new CFFIndex();
+    const fontDictTrackers = [];
+    let fdArrayIndex = new CFFIndex();
 
-    for (var i = 0, ii = dicts.length; i < ii; ++i) {
-      var fontDict = dicts[i];
+    for (let i = 0, ii = dicts.length; i < ii; ++i) {
+      const fontDict = dicts[i];
 
       if (removeCidKeys) {
         fontDict.removeByName("CIDFontVersion");
@@ -30975,8 +32350,8 @@ class CFFCompiler {
         fontDict.removeByName("UIDBase");
       }
 
-      var fontDictTracker = new CFFOffsetTracker();
-      var fontDictData = this.compileDict(fontDict, fontDictTracker);
+      const fontDictTracker = new CFFOffsetTracker();
+      const fontDictData = this.compileDict(fontDict, fontDictTracker);
       fontDictTrackers.push(fontDictTracker);
       fdArrayIndex.add(fontDictData);
       fontDictTracker.offset(length);
@@ -30990,17 +32365,17 @@ class CFFCompiler {
   }
 
   compilePrivateDicts(dicts, trackers, output) {
-    for (var i = 0, ii = dicts.length; i < ii; ++i) {
-      var fontDict = dicts[i];
-      var privateDict = fontDict.privateDict;
+    for (let i = 0, ii = dicts.length; i < ii; ++i) {
+      const fontDict = dicts[i];
+      const privateDict = fontDict.privateDict;
 
       if (!privateDict || !fontDict.hasName("Private")) {
         throw new _util.FormatError("There must be a private dictionary.");
       }
 
-      var privateDictTracker = new CFFOffsetTracker();
-      var privateDictData = this.compileDict(privateDict, privateDictTracker);
-      var outputLength = output.length;
+      const privateDictTracker = new CFFOffsetTracker();
+      const privateDictData = this.compileDict(privateDict, privateDictTracker);
+      let outputLength = output.length;
       privateDictTracker.offset(outputLength);
 
       if (!privateDictData.length) {
@@ -31011,7 +32386,7 @@ class CFFCompiler {
       output.add(privateDictData);
 
       if (privateDict.subrsIndex && privateDict.hasName("Subrs")) {
-        var subrs = this.compileIndex(privateDict.subrsIndex);
+        const subrs = this.compileIndex(privateDict.subrsIndex);
         privateDictTracker.setEntryLocation("Subrs", [privateDictData.length], output);
         output.add(subrs);
       }
@@ -31019,18 +32394,18 @@ class CFFCompiler {
   }
 
   compileDict(dict, offsetTracker) {
-    var out = [];
-    var order = dict.order;
+    let out = [];
+    const order = dict.order;
 
-    for (var i = 0; i < order.length; ++i) {
-      var key = order[i];
+    for (let i = 0; i < order.length; ++i) {
+      const key = order[i];
 
       if (!(key in dict.values)) {
         continue;
       }
 
-      var values = dict.values[key];
-      var types = dict.types[key];
+      let values = dict.values[key];
+      let types = dict.types[key];
 
       if (!Array.isArray(types)) {
         types = [types];
@@ -31044,9 +32419,9 @@ class CFFCompiler {
         continue;
       }
 
-      for (var j = 0, jj = types.length; j < jj; ++j) {
-        var type = types[j];
-        var value = values[j];
+      for (let j = 0, jj = types.length; j < jj; ++j) {
+        const type = types[j];
+        const value = values[j];
 
         switch (type) {
           case "num":
@@ -31055,7 +32430,7 @@ class CFFCompiler {
             break;
 
           case "offset":
-            var name = dict.keyToNameMap[key];
+            const name = dict.keyToNameMap[key];
 
             if (!offsetTracker.isTracking(name)) {
               offsetTracker.track(name, out.length);
@@ -31068,7 +32443,7 @@ class CFFCompiler {
           case "delta":
             out = out.concat(this.encodeNumber(value));
 
-            for (var k = 1, kk = values.length; k < kk; ++k) {
+            for (let k = 1, kk = values.length; k < kk; ++k) {
               out = out.concat(this.encodeNumber(values[k]));
             }
 
@@ -31086,9 +32461,9 @@ class CFFCompiler {
   }
 
   compileStringIndex(strings) {
-    var stringIndex = new CFFIndex();
+    const stringIndex = new CFFIndex();
 
-    for (var i = 0, ii = strings.length; i < ii; ++i) {
+    for (let i = 0, ii = strings.length; i < ii; ++i) {
       stringIndex.add((0, _util.stringToBytes)(strings[i]));
     }
 
@@ -31096,15 +32471,15 @@ class CFFCompiler {
   }
 
   compileGlobalSubrIndex() {
-    var globalSubrIndex = this.cff.globalSubrIndex;
+    const globalSubrIndex = this.cff.globalSubrIndex;
     this.out.writeByteArray(this.compileIndex(globalSubrIndex));
   }
 
   compileCharStrings(charStrings) {
-    var charStringsIndex = new CFFIndex();
+    const charStringsIndex = new CFFIndex();
 
-    for (var i = 0; i < charStrings.count; i++) {
-      var glyph = charStrings.get(i);
+    for (let i = 0; i < charStrings.count; i++) {
+      const glyph = charStrings.get(i);
 
       if (glyph.length === 0) {
         charStringsIndex.add(new Uint8Array([0x8b, 0x0e]));
@@ -31201,9 +32576,9 @@ class CFFCompiler {
   }
 
   compileTypedArray(data) {
-    var out = [];
+    const out = [];
 
-    for (var i = 0, ii = data.length; i < ii; ++i) {
+    for (let i = 0, ii = data.length; i < ii; ++i) {
       out[i] = data[i];
     }
 
@@ -31211,22 +32586,22 @@ class CFFCompiler {
   }
 
   compileIndex(index, trackers = []) {
-    var objects = index.objects;
-    var count = objects.length;
+    const objects = index.objects;
+    const count = objects.length;
 
     if (count === 0) {
       return [0, 0, 0];
     }
 
-    var data = [count >> 8 & 0xff, count & 0xff];
-    var lastOffset = 1,
+    const data = [count >> 8 & 0xff, count & 0xff];
+    let lastOffset = 1,
         i;
 
     for (i = 0; i < count; ++i) {
       lastOffset += objects[i].length;
     }
 
-    var offsetSize;
+    let offsetSize;
 
     if (lastOffset < 0x100) {
       offsetSize = 1;
@@ -31239,7 +32614,7 @@ class CFFCompiler {
     }
 
     data.push(offsetSize);
-    var relativeOffset = 1;
+    let relativeOffset = 1;
 
     for (i = 0; i < count + 1; i++) {
       if (offsetSize === 1) {
@@ -31262,7 +32637,7 @@ class CFFCompiler {
         trackers[i].offset(data.length);
       }
 
-      for (var j = 0, jj = objects[i].length; j < jj; j++) {
+      for (let j = 0, jj = objects[i].length; j < jj; j++) {
         data.push(objects[i][j]);
       }
     }
@@ -31275,16 +32650,15 @@ class CFFCompiler {
 exports.CFFCompiler = CFFCompiler;
 
 /***/ }),
-/* 32 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/* 33 */
+/***/ ((__unused_webpack_module, exports) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
-exports.ExpertSubsetCharset = exports.ExpertCharset = exports.ISOAdobeCharset = void 0;
+}));
+exports.ISOAdobeCharset = exports.ExpertSubsetCharset = exports.ExpertCharset = void 0;
 const 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", "paragrap
 h", "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", "acircumf
 lex", "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"];
 exports.ISOAdobeCharset = ISOAdobeCharset;
 const 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", "Rsma
 ll", "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", "Ari
 ngsmall", "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"];
@@ -31293,17 +32667,16 @@ const ExpertSubsetCharset = [".notdef", "space", "dollaroldstyle", "dollarsuperi
 exports.ExpertSubsetCharset = ExpertSubsetCharset;
 
 /***/ }),
-/* 33 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/* 34 */
+/***/ ((__unused_webpack_module, exports) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.getEncoding = getEncoding;
-exports.ExpertEncoding = exports.ZapfDingbatsEncoding = exports.SymbolSetEncoding = exports.MacRomanEncoding 
= exports.StandardEncoding = exports.WinAnsiEncoding = void 0;
+exports.ZapfDingbatsEncoding = exports.WinAnsiEncoding = exports.SymbolSetEncoding = 
exports.StandardEncoding = exports.MacRomanEncoding = exports.ExpertEncoding = void 0;
 const 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", 
"Bs
 mall", "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", "sevensuperi
 or", "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"];
 exports.ExpertEncoding = ExpertEncoding;
 const 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", "Esmal
 l", "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", "", "", "", ""];
@@ -31347,4553 +32720,9086 @@ function getEncoding(encodingName) {
 }
 
 /***/ }),
-/* 34 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-var getLookupTableFactory = __w_pdfjs_require__(8).getLookupTableFactory;
-var getGlyphsUnicode = getLookupTableFactory(function (t) {
- t.A = 0x0041;
- t.AE = 0x00c6;
- t.AEacute = 0x01fc;
- t.AEmacron = 0x01e2;
- t.AEsmall = 0xf7e6;
- t.Aacute = 0x00c1;
- t.Aacutesmall = 0xf7e1;
- t.Abreve = 0x0102;
- t.Abreveacute = 0x1eae;
- t.Abrevecyrillic = 0x04d0;
- t.Abrevedotbelow = 0x1eb6;
- t.Abrevegrave = 0x1eb0;
- t.Abrevehookabove = 0x1eb2;
- t.Abrevetilde = 0x1eb4;
- t.Acaron = 0x01cd;
- t.Acircle = 0x24b6;
- t.Acircumflex = 0x00c2;
- t.Acircumflexacute = 0x1ea4;
- t.Acircumflexdotbelow = 0x1eac;
- t.Acircumflexgrave = 0x1ea6;
- t.Acircumflexhookabove = 0x1ea8;
- t.Acircumflexsmall = 0xf7e2;
- t.Acircumflextilde = 0x1eaa;
- t.Acute = 0xf6c9;
- t.Acutesmall = 0xf7b4;
- t.Acyrillic = 0x0410;
- t.Adblgrave = 0x0200;
- t.Adieresis = 0x00c4;
- t.Adieresiscyrillic = 0x04d2;
- t.Adieresismacron = 0x01de;
- t.Adieresissmall = 0xf7e4;
- t.Adotbelow = 0x1ea0;
- t.Adotmacron = 0x01e0;
- t.Agrave = 0x00c0;
- t.Agravesmall = 0xf7e0;
- t.Ahookabove = 0x1ea2;
- t.Aiecyrillic = 0x04d4;
- t.Ainvertedbreve = 0x0202;
- t.Alpha = 0x0391;
- t.Alphatonos = 0x0386;
- t.Amacron = 0x0100;
- t.Amonospace = 0xff21;
- t.Aogonek = 0x0104;
- t.Aring = 0x00c5;
- t.Aringacute = 0x01fa;
- t.Aringbelow = 0x1e00;
- t.Aringsmall = 0xf7e5;
- t.Asmall = 0xf761;
- t.Atilde = 0x00c3;
- t.Atildesmall = 0xf7e3;
- t.Aybarmenian = 0x0531;
- t.B = 0x0042;
- t.Bcircle = 0x24b7;
- t.Bdotaccent = 0x1e02;
- t.Bdotbelow = 0x1e04;
- t.Becyrillic = 0x0411;
- t.Benarmenian = 0x0532;
- t.Beta = 0x0392;
- t.Bhook = 0x0181;
- t.Blinebelow = 0x1e06;
- t.Bmonospace = 0xff22;
- t.Brevesmall = 0xf6f4;
- t.Bsmall = 0xf762;
- t.Btopbar = 0x0182;
- t.C = 0x0043;
- t.Caarmenian = 0x053e;
- t.Cacute = 0x0106;
- t.Caron = 0xf6ca;
- t.Caronsmall = 0xf6f5;
- t.Ccaron = 0x010c;
- t.Ccedilla = 0x00c7;
- t.Ccedillaacute = 0x1e08;
- t.Ccedillasmall = 0xf7e7;
- t.Ccircle = 0x24b8;
- t.Ccircumflex = 0x0108;
- t.Cdot = 0x010a;
- t.Cdotaccent = 0x010a;
- t.Cedillasmall = 0xf7b8;
- t.Chaarmenian = 0x0549;
- t.Cheabkhasiancyrillic = 0x04bc;
- t.Checyrillic = 0x0427;
- t.Chedescenderabkhasiancyrillic = 0x04be;
- t.Chedescendercyrillic = 0x04b6;
- t.Chedieresiscyrillic = 0x04f4;
- t.Cheharmenian = 0x0543;
- t.Chekhakassiancyrillic = 0x04cb;
- t.Cheverticalstrokecyrillic = 0x04b8;
- t.Chi = 0x03a7;
- t.Chook = 0x0187;
- t.Circumflexsmall = 0xf6f6;
- t.Cmonospace = 0xff23;
- t.Coarmenian = 0x0551;
- t.Csmall = 0xf763;
- t.D = 0x0044;
- t.DZ = 0x01f1;
- t.DZcaron = 0x01c4;
- t.Daarmenian = 0x0534;
- t.Dafrican = 0x0189;
- t.Dcaron = 0x010e;
- t.Dcedilla = 0x1e10;
- t.Dcircle = 0x24b9;
- t.Dcircumflexbelow = 0x1e12;
- t.Dcroat = 0x0110;
- t.Ddotaccent = 0x1e0a;
- t.Ddotbelow = 0x1e0c;
- t.Decyrillic = 0x0414;
- t.Deicoptic = 0x03ee;
- t.Delta = 0x2206;
- t.Deltagreek = 0x0394;
- t.Dhook = 0x018a;
- t.Dieresis = 0xf6cb;
- t.DieresisAcute = 0xf6cc;
- t.DieresisGrave = 0xf6cd;
- t.Dieresissmall = 0xf7a8;
- t.Digammagreek = 0x03dc;
- t.Djecyrillic = 0x0402;
- t.Dlinebelow = 0x1e0e;
- t.Dmonospace = 0xff24;
- t.Dotaccentsmall = 0xf6f7;
- t.Dslash = 0x0110;
- t.Dsmall = 0xf764;
- t.Dtopbar = 0x018b;
- t.Dz = 0x01f2;
- t.Dzcaron = 0x01c5;
- t.Dzeabkhasiancyrillic = 0x04e0;
- t.Dzecyrillic = 0x0405;
- t.Dzhecyrillic = 0x040f;
- t.E = 0x0045;
- t.Eacute = 0x00c9;
- t.Eacutesmall = 0xf7e9;
- t.Ebreve = 0x0114;
- t.Ecaron = 0x011a;
- t.Ecedillabreve = 0x1e1c;
- t.Echarmenian = 0x0535;
- t.Ecircle = 0x24ba;
- t.Ecircumflex = 0x00ca;
- t.Ecircumflexacute = 0x1ebe;
- t.Ecircumflexbelow = 0x1e18;
- t.Ecircumflexdotbelow = 0x1ec6;
- t.Ecircumflexgrave = 0x1ec0;
- t.Ecircumflexhookabove = 0x1ec2;
- t.Ecircumflexsmall = 0xf7ea;
- t.Ecircumflextilde = 0x1ec4;
- t.Ecyrillic = 0x0404;
- t.Edblgrave = 0x0204;
- t.Edieresis = 0x00cb;
- t.Edieresissmall = 0xf7eb;
- t.Edot = 0x0116;
- t.Edotaccent = 0x0116;
- t.Edotbelow = 0x1eb8;
- t.Efcyrillic = 0x0424;
- t.Egrave = 0x00c8;
- t.Egravesmall = 0xf7e8;
- t.Eharmenian = 0x0537;
- t.Ehookabove = 0x1eba;
- t.Eightroman = 0x2167;
- t.Einvertedbreve = 0x0206;
- t.Eiotifiedcyrillic = 0x0464;
- t.Elcyrillic = 0x041b;
- t.Elevenroman = 0x216a;
- t.Emacron = 0x0112;
- t.Emacronacute = 0x1e16;
- t.Emacrongrave = 0x1e14;
- t.Emcyrillic = 0x041c;
- t.Emonospace = 0xff25;
- t.Encyrillic = 0x041d;
- t.Endescendercyrillic = 0x04a2;
- t.Eng = 0x014a;
- t.Enghecyrillic = 0x04a4;
- t.Enhookcyrillic = 0x04c7;
- t.Eogonek = 0x0118;
- t.Eopen = 0x0190;
- t.Epsilon = 0x0395;
- t.Epsilontonos = 0x0388;
- t.Ercyrillic = 0x0420;
- t.Ereversed = 0x018e;
- t.Ereversedcyrillic = 0x042d;
- t.Escyrillic = 0x0421;
- t.Esdescendercyrillic = 0x04aa;
- t.Esh = 0x01a9;
- t.Esmall = 0xf765;
- t.Eta = 0x0397;
- t.Etarmenian = 0x0538;
- t.Etatonos = 0x0389;
- t.Eth = 0x00d0;
- t.Ethsmall = 0xf7f0;
- t.Etilde = 0x1ebc;
- t.Etildebelow = 0x1e1a;
- t.Euro = 0x20ac;
- t.Ezh = 0x01b7;
- t.Ezhcaron = 0x01ee;
- t.Ezhreversed = 0x01b8;
- t.F = 0x0046;
- t.Fcircle = 0x24bb;
- t.Fdotaccent = 0x1e1e;
- t.Feharmenian = 0x0556;
- t.Feicoptic = 0x03e4;
- t.Fhook = 0x0191;
- t.Fitacyrillic = 0x0472;
- t.Fiveroman = 0x2164;
- t.Fmonospace = 0xff26;
- t.Fourroman = 0x2163;
- t.Fsmall = 0xf766;
- t.G = 0x0047;
- t.GBsquare = 0x3387;
- t.Gacute = 0x01f4;
- t.Gamma = 0x0393;
- t.Gammaafrican = 0x0194;
- t.Gangiacoptic = 0x03ea;
- t.Gbreve = 0x011e;
- t.Gcaron = 0x01e6;
- t.Gcedilla = 0x0122;
- t.Gcircle = 0x24bc;
- t.Gcircumflex = 0x011c;
- t.Gcommaaccent = 0x0122;
- t.Gdot = 0x0120;
- t.Gdotaccent = 0x0120;
- t.Gecyrillic = 0x0413;
- t.Ghadarmenian = 0x0542;
- t.Ghemiddlehookcyrillic = 0x0494;
- t.Ghestrokecyrillic = 0x0492;
- t.Gheupturncyrillic = 0x0490;
- t.Ghook = 0x0193;
- t.Gimarmenian = 0x0533;
- t.Gjecyrillic = 0x0403;
- t.Gmacron = 0x1e20;
- t.Gmonospace = 0xff27;
- t.Grave = 0xf6ce;
- t.Gravesmall = 0xf760;
- t.Gsmall = 0xf767;
- t.Gsmallhook = 0x029b;
- t.Gstroke = 0x01e4;
- t.H = 0x0048;
- t.H18533 = 0x25cf;
- t.H18543 = 0x25aa;
- t.H18551 = 0x25ab;
- t.H22073 = 0x25a1;
- t.HPsquare = 0x33cb;
- t.Haabkhasiancyrillic = 0x04a8;
- t.Hadescendercyrillic = 0x04b2;
- t.Hardsigncyrillic = 0x042a;
- t.Hbar = 0x0126;
- t.Hbrevebelow = 0x1e2a;
- t.Hcedilla = 0x1e28;
- t.Hcircle = 0x24bd;
- t.Hcircumflex = 0x0124;
- t.Hdieresis = 0x1e26;
- t.Hdotaccent = 0x1e22;
- t.Hdotbelow = 0x1e24;
- t.Hmonospace = 0xff28;
- t.Hoarmenian = 0x0540;
- t.Horicoptic = 0x03e8;
- t.Hsmall = 0xf768;
- t.Hungarumlaut = 0xf6cf;
- t.Hungarumlautsmall = 0xf6f8;
- t.Hzsquare = 0x3390;
- t.I = 0x0049;
- t.IAcyrillic = 0x042f;
- t.IJ = 0x0132;
- t.IUcyrillic = 0x042e;
- t.Iacute = 0x00cd;
- t.Iacutesmall = 0xf7ed;
- t.Ibreve = 0x012c;
- t.Icaron = 0x01cf;
- t.Icircle = 0x24be;
- t.Icircumflex = 0x00ce;
- t.Icircumflexsmall = 0xf7ee;
- t.Icyrillic = 0x0406;
- t.Idblgrave = 0x0208;
- t.Idieresis = 0x00cf;
- t.Idieresisacute = 0x1e2e;
- t.Idieresiscyrillic = 0x04e4;
- t.Idieresissmall = 0xf7ef;
- t.Idot = 0x0130;
- t.Idotaccent = 0x0130;
- t.Idotbelow = 0x1eca;
- t.Iebrevecyrillic = 0x04d6;
- t.Iecyrillic = 0x0415;
- t.Ifraktur = 0x2111;
- t.Igrave = 0x00cc;
- t.Igravesmall = 0xf7ec;
- t.Ihookabove = 0x1ec8;
- t.Iicyrillic = 0x0418;
- t.Iinvertedbreve = 0x020a;
- t.Iishortcyrillic = 0x0419;
- t.Imacron = 0x012a;
- t.Imacroncyrillic = 0x04e2;
- t.Imonospace = 0xff29;
- t.Iniarmenian = 0x053b;
- t.Iocyrillic = 0x0401;
- t.Iogonek = 0x012e;
- t.Iota = 0x0399;
- t.Iotaafrican = 0x0196;
- t.Iotadieresis = 0x03aa;
- t.Iotatonos = 0x038a;
- t.Ismall = 0xf769;
- t.Istroke = 0x0197;
- t.Itilde = 0x0128;
- t.Itildebelow = 0x1e2c;
- t.Izhitsacyrillic = 0x0474;
- t.Izhitsadblgravecyrillic = 0x0476;
- t.J = 0x004a;
- t.Jaarmenian = 0x0541;
- t.Jcircle = 0x24bf;
- t.Jcircumflex = 0x0134;
- t.Jecyrillic = 0x0408;
- t.Jheharmenian = 0x054b;
- t.Jmonospace = 0xff2a;
- t.Jsmall = 0xf76a;
- t.K = 0x004b;
- t.KBsquare = 0x3385;
- t.KKsquare = 0x33cd;
- t.Kabashkircyrillic = 0x04a0;
- t.Kacute = 0x1e30;
- t.Kacyrillic = 0x041a;
- t.Kadescendercyrillic = 0x049a;
- t.Kahookcyrillic = 0x04c3;
- t.Kappa = 0x039a;
- t.Kastrokecyrillic = 0x049e;
- t.Kaverticalstrokecyrillic = 0x049c;
- t.Kcaron = 0x01e8;
- t.Kcedilla = 0x0136;
- t.Kcircle = 0x24c0;
- t.Kcommaaccent = 0x0136;
- t.Kdotbelow = 0x1e32;
- t.Keharmenian = 0x0554;
- t.Kenarmenian = 0x053f;
- t.Khacyrillic = 0x0425;
- t.Kheicoptic = 0x03e6;
- t.Khook = 0x0198;
- t.Kjecyrillic = 0x040c;
- t.Klinebelow = 0x1e34;
- t.Kmonospace = 0xff2b;
- t.Koppacyrillic = 0x0480;
- t.Koppagreek = 0x03de;
- t.Ksicyrillic = 0x046e;
- t.Ksmall = 0xf76b;
- t.L = 0x004c;
- t.LJ = 0x01c7;
- t.LL = 0xf6bf;
- t.Lacute = 0x0139;
- t.Lambda = 0x039b;
- t.Lcaron = 0x013d;
- t.Lcedilla = 0x013b;
- t.Lcircle = 0x24c1;
- t.Lcircumflexbelow = 0x1e3c;
- t.Lcommaaccent = 0x013b;
- t.Ldot = 0x013f;
- t.Ldotaccent = 0x013f;
- t.Ldotbelow = 0x1e36;
- t.Ldotbelowmacron = 0x1e38;
- t.Liwnarmenian = 0x053c;
- t.Lj = 0x01c8;
- t.Ljecyrillic = 0x0409;
- t.Llinebelow = 0x1e3a;
- t.Lmonospace = 0xff2c;
- t.Lslash = 0x0141;
- t.Lslashsmall = 0xf6f9;
- t.Lsmall = 0xf76c;
- t.M = 0x004d;
- t.MBsquare = 0x3386;
- t.Macron = 0xf6d0;
- t.Macronsmall = 0xf7af;
- t.Macute = 0x1e3e;
- t.Mcircle = 0x24c2;
- t.Mdotaccent = 0x1e40;
- t.Mdotbelow = 0x1e42;
- t.Menarmenian = 0x0544;
- t.Mmonospace = 0xff2d;
- t.Msmall = 0xf76d;
- t.Mturned = 0x019c;
- t.Mu = 0x039c;
- t.N = 0x004e;
- t.NJ = 0x01ca;
- t.Nacute = 0x0143;
- t.Ncaron = 0x0147;
- t.Ncedilla = 0x0145;
- t.Ncircle = 0x24c3;
- t.Ncircumflexbelow = 0x1e4a;
- t.Ncommaaccent = 0x0145;
- t.Ndotaccent = 0x1e44;
- t.Ndotbelow = 0x1e46;
- t.Nhookleft = 0x019d;
- t.Nineroman = 0x2168;
- t.Nj = 0x01cb;
- t.Njecyrillic = 0x040a;
- t.Nlinebelow = 0x1e48;
- t.Nmonospace = 0xff2e;
- t.Nowarmenian = 0x0546;
- t.Nsmall = 0xf76e;
- t.Ntilde = 0x00d1;
- t.Ntildesmall = 0xf7f1;
- t.Nu = 0x039d;
- t.O = 0x004f;
- t.OE = 0x0152;
- t.OEsmall = 0xf6fa;
- t.Oacute = 0x00d3;
- t.Oacutesmall = 0xf7f3;
- t.Obarredcyrillic = 0x04e8;
- t.Obarreddieresiscyrillic = 0x04ea;
- t.Obreve = 0x014e;
- t.Ocaron = 0x01d1;
- t.Ocenteredtilde = 0x019f;
- t.Ocircle = 0x24c4;
- t.Ocircumflex = 0x00d4;
- t.Ocircumflexacute = 0x1ed0;
- t.Ocircumflexdotbelow = 0x1ed8;
- t.Ocircumflexgrave = 0x1ed2;
- t.Ocircumflexhookabove = 0x1ed4;
- t.Ocircumflexsmall = 0xf7f4;
- t.Ocircumflextilde = 0x1ed6;
- t.Ocyrillic = 0x041e;
- t.Odblacute = 0x0150;
- t.Odblgrave = 0x020c;
- t.Odieresis = 0x00d6;
- t.Odieresiscyrillic = 0x04e6;
- t.Odieresissmall = 0xf7f6;
- t.Odotbelow = 0x1ecc;
- t.Ogoneksmall = 0xf6fb;
- t.Ograve = 0x00d2;
- t.Ogravesmall = 0xf7f2;
- t.Oharmenian = 0x0555;
- t.Ohm = 0x2126;
- t.Ohookabove = 0x1ece;
- t.Ohorn = 0x01a0;
- t.Ohornacute = 0x1eda;
- t.Ohorndotbelow = 0x1ee2;
- t.Ohorngrave = 0x1edc;
- t.Ohornhookabove = 0x1ede;
- t.Ohorntilde = 0x1ee0;
- t.Ohungarumlaut = 0x0150;
- t.Oi = 0x01a2;
- t.Oinvertedbreve = 0x020e;
- t.Omacron = 0x014c;
- t.Omacronacute = 0x1e52;
- t.Omacrongrave = 0x1e50;
- t.Omega = 0x2126;
- t.Omegacyrillic = 0x0460;
- t.Omegagreek = 0x03a9;
- t.Omegaroundcyrillic = 0x047a;
- t.Omegatitlocyrillic = 0x047c;
- t.Omegatonos = 0x038f;
- t.Omicron = 0x039f;
- t.Omicrontonos = 0x038c;
- t.Omonospace = 0xff2f;
- t.Oneroman = 0x2160;
- t.Oogonek = 0x01ea;
- t.Oogonekmacron = 0x01ec;
- t.Oopen = 0x0186;
- t.Oslash = 0x00d8;
- t.Oslashacute = 0x01fe;
- t.Oslashsmall = 0xf7f8;
- t.Osmall = 0xf76f;
- t.Ostrokeacute = 0x01fe;
- t.Otcyrillic = 0x047e;
- t.Otilde = 0x00d5;
- t.Otildeacute = 0x1e4c;
- t.Otildedieresis = 0x1e4e;
- t.Otildesmall = 0xf7f5;
- t.P = 0x0050;
- t.Pacute = 0x1e54;
- t.Pcircle = 0x24c5;
- t.Pdotaccent = 0x1e56;
- t.Pecyrillic = 0x041f;
- t.Peharmenian = 0x054a;
- t.Pemiddlehookcyrillic = 0x04a6;
- t.Phi = 0x03a6;
- t.Phook = 0x01a4;
- t.Pi = 0x03a0;
- t.Piwrarmenian = 0x0553;
- t.Pmonospace = 0xff30;
- t.Psi = 0x03a8;
- t.Psicyrillic = 0x0470;
- t.Psmall = 0xf770;
- t.Q = 0x0051;
- t.Qcircle = 0x24c6;
- t.Qmonospace = 0xff31;
- t.Qsmall = 0xf771;
- t.R = 0x0052;
- t.Raarmenian = 0x054c;
- t.Racute = 0x0154;
- t.Rcaron = 0x0158;
- t.Rcedilla = 0x0156;
- t.Rcircle = 0x24c7;
- t.Rcommaaccent = 0x0156;
- t.Rdblgrave = 0x0210;
- t.Rdotaccent = 0x1e58;
- t.Rdotbelow = 0x1e5a;
- t.Rdotbelowmacron = 0x1e5c;
- t.Reharmenian = 0x0550;
- t.Rfraktur = 0x211c;
- t.Rho = 0x03a1;
- t.Ringsmall = 0xf6fc;
- t.Rinvertedbreve = 0x0212;
- t.Rlinebelow = 0x1e5e;
- t.Rmonospace = 0xff32;
- t.Rsmall = 0xf772;
- t.Rsmallinverted = 0x0281;
- t.Rsmallinvertedsuperior = 0x02b6;
- t.S = 0x0053;
- t.SF010000 = 0x250c;
- t.SF020000 = 0x2514;
- t.SF030000 = 0x2510;
- t.SF040000 = 0x2518;
- t.SF050000 = 0x253c;
- t.SF060000 = 0x252c;
- t.SF070000 = 0x2534;
- t.SF080000 = 0x251c;
- t.SF090000 = 0x2524;
- t.SF100000 = 0x2500;
- t.SF110000 = 0x2502;
- t.SF190000 = 0x2561;
- t.SF200000 = 0x2562;
- t.SF210000 = 0x2556;
- t.SF220000 = 0x2555;
- t.SF230000 = 0x2563;
- t.SF240000 = 0x2551;
- t.SF250000 = 0x2557;
- t.SF260000 = 0x255d;
- t.SF270000 = 0x255c;
- t.SF280000 = 0x255b;
- t.SF360000 = 0x255e;
- t.SF370000 = 0x255f;
- t.SF380000 = 0x255a;
- t.SF390000 = 0x2554;
- t.SF400000 = 0x2569;
- t.SF410000 = 0x2566;
- t.SF420000 = 0x2560;
- t.SF430000 = 0x2550;
- t.SF440000 = 0x256c;
- t.SF450000 = 0x2567;
- t.SF460000 = 0x2568;
- t.SF470000 = 0x2564;
- t.SF480000 = 0x2565;
- t.SF490000 = 0x2559;
- t.SF500000 = 0x2558;
- t.SF510000 = 0x2552;
- t.SF520000 = 0x2553;
- t.SF530000 = 0x256b;
- t.SF540000 = 0x256a;
- t.Sacute = 0x015a;
- t.Sacutedotaccent = 0x1e64;
- t.Sampigreek = 0x03e0;
- t.Scaron = 0x0160;
- t.Scarondotaccent = 0x1e66;
- t.Scaronsmall = 0xf6fd;
- t.Scedilla = 0x015e;
- t.Schwa = 0x018f;
- t.Schwacyrillic = 0x04d8;
- t.Schwadieresiscyrillic = 0x04da;
- t.Scircle = 0x24c8;
- t.Scircumflex = 0x015c;
- t.Scommaaccent = 0x0218;
- t.Sdotaccent = 0x1e60;
- t.Sdotbelow = 0x1e62;
- t.Sdotbelowdotaccent = 0x1e68;
- t.Seharmenian = 0x054d;
- t.Sevenroman = 0x2166;
- t.Shaarmenian = 0x0547;
- t.Shacyrillic = 0x0428;
- t.Shchacyrillic = 0x0429;
- t.Sheicoptic = 0x03e2;
- t.Shhacyrillic = 0x04ba;
- t.Shimacoptic = 0x03ec;
- t.Sigma = 0x03a3;
- t.Sixroman = 0x2165;
- t.Smonospace = 0xff33;
- t.Softsigncyrillic = 0x042c;
- t.Ssmall = 0xf773;
- t.Stigmagreek = 0x03da;
- t.T = 0x0054;
- t.Tau = 0x03a4;
- t.Tbar = 0x0166;
- t.Tcaron = 0x0164;
- t.Tcedilla = 0x0162;
- t.Tcircle = 0x24c9;
- t.Tcircumflexbelow = 0x1e70;
- t.Tcommaaccent = 0x0162;
- t.Tdotaccent = 0x1e6a;
- t.Tdotbelow = 0x1e6c;
- t.Tecyrillic = 0x0422;
- t.Tedescendercyrillic = 0x04ac;
- t.Tenroman = 0x2169;
- t.Tetsecyrillic = 0x04b4;
- t.Theta = 0x0398;
- t.Thook = 0x01ac;
- t.Thorn = 0x00de;
- t.Thornsmall = 0xf7fe;
- t.Threeroman = 0x2162;
- t.Tildesmall = 0xf6fe;
- t.Tiwnarmenian = 0x054f;
- t.Tlinebelow = 0x1e6e;
- t.Tmonospace = 0xff34;
- t.Toarmenian = 0x0539;
- t.Tonefive = 0x01bc;
- t.Tonesix = 0x0184;
- t.Tonetwo = 0x01a7;
- t.Tretroflexhook = 0x01ae;
- t.Tsecyrillic = 0x0426;
- t.Tshecyrillic = 0x040b;
- t.Tsmall = 0xf774;
- t.Twelveroman = 0x216b;
- t.Tworoman = 0x2161;
- t.U = 0x0055;
- t.Uacute = 0x00da;
- t.Uacutesmall = 0xf7fa;
- t.Ubreve = 0x016c;
- t.Ucaron = 0x01d3;
- t.Ucircle = 0x24ca;
- t.Ucircumflex = 0x00db;
- t.Ucircumflexbelow = 0x1e76;
- t.Ucircumflexsmall = 0xf7fb;
- t.Ucyrillic = 0x0423;
- t.Udblacute = 0x0170;
- t.Udblgrave = 0x0214;
- t.Udieresis = 0x00dc;
- t.Udieresisacute = 0x01d7;
- t.Udieresisbelow = 0x1e72;
- t.Udieresiscaron = 0x01d9;
- t.Udieresiscyrillic = 0x04f0;
- t.Udieresisgrave = 0x01db;
- t.Udieresismacron = 0x01d5;
- t.Udieresissmall = 0xf7fc;
- t.Udotbelow = 0x1ee4;
- t.Ugrave = 0x00d9;
- t.Ugravesmall = 0xf7f9;
- t.Uhookabove = 0x1ee6;
- t.Uhorn = 0x01af;
- t.Uhornacute = 0x1ee8;
- t.Uhorndotbelow = 0x1ef0;
- t.Uhorngrave = 0x1eea;
- t.Uhornhookabove = 0x1eec;
- t.Uhorntilde = 0x1eee;
- t.Uhungarumlaut = 0x0170;
- t.Uhungarumlautcyrillic = 0x04f2;
- t.Uinvertedbreve = 0x0216;
- t.Ukcyrillic = 0x0478;
- t.Umacron = 0x016a;
- t.Umacroncyrillic = 0x04ee;
- t.Umacrondieresis = 0x1e7a;
- t.Umonospace = 0xff35;
- t.Uogonek = 0x0172;
- t.Upsilon = 0x03a5;
- t.Upsilon1 = 0x03d2;
- t.Upsilonacutehooksymbolgreek = 0x03d3;
- t.Upsilonafrican = 0x01b1;
- t.Upsilondieresis = 0x03ab;
- t.Upsilondieresishooksymbolgreek = 0x03d4;
- t.Upsilonhooksymbol = 0x03d2;
- t.Upsilontonos = 0x038e;
- t.Uring = 0x016e;
- t.Ushortcyrillic = 0x040e;
- t.Usmall = 0xf775;
- t.Ustraightcyrillic = 0x04ae;
- t.Ustraightstrokecyrillic = 0x04b0;
- t.Utilde = 0x0168;
- t.Utildeacute = 0x1e78;
- t.Utildebelow = 0x1e74;
- t.V = 0x0056;
- t.Vcircle = 0x24cb;
- t.Vdotbelow = 0x1e7e;
- t.Vecyrillic = 0x0412;
- t.Vewarmenian = 0x054e;
- t.Vhook = 0x01b2;
- t.Vmonospace = 0xff36;
- t.Voarmenian = 0x0548;
- t.Vsmall = 0xf776;
- t.Vtilde = 0x1e7c;
- t.W = 0x0057;
- t.Wacute = 0x1e82;
- t.Wcircle = 0x24cc;
- t.Wcircumflex = 0x0174;
- t.Wdieresis = 0x1e84;
- t.Wdotaccent = 0x1e86;
- t.Wdotbelow = 0x1e88;
- t.Wgrave = 0x1e80;
- t.Wmonospace = 0xff37;
- t.Wsmall = 0xf777;
- t.X = 0x0058;
- t.Xcircle = 0x24cd;
- t.Xdieresis = 0x1e8c;
- t.Xdotaccent = 0x1e8a;
- t.Xeharmenian = 0x053d;
- t.Xi = 0x039e;
- t.Xmonospace = 0xff38;
- t.Xsmall = 0xf778;
- t.Y = 0x0059;
- t.Yacute = 0x00dd;
- t.Yacutesmall = 0xf7fd;
- t.Yatcyrillic = 0x0462;
- t.Ycircle = 0x24ce;
- t.Ycircumflex = 0x0176;
- t.Ydieresis = 0x0178;
- t.Ydieresissmall = 0xf7ff;
- t.Ydotaccent = 0x1e8e;
- t.Ydotbelow = 0x1ef4;
- t.Yericyrillic = 0x042b;
- t.Yerudieresiscyrillic = 0x04f8;
- t.Ygrave = 0x1ef2;
- t.Yhook = 0x01b3;
- t.Yhookabove = 0x1ef6;
- t.Yiarmenian = 0x0545;
- t.Yicyrillic = 0x0407;
- t.Yiwnarmenian = 0x0552;
- t.Ymonospace = 0xff39;
- t.Ysmall = 0xf779;
- t.Ytilde = 0x1ef8;
- t.Yusbigcyrillic = 0x046a;
- t.Yusbigiotifiedcyrillic = 0x046c;
- t.Yuslittlecyrillic = 0x0466;
- t.Yuslittleiotifiedcyrillic = 0x0468;
- t.Z = 0x005a;
- t.Zaarmenian = 0x0536;
- t.Zacute = 0x0179;
- t.Zcaron = 0x017d;
- t.Zcaronsmall = 0xf6ff;
- t.Zcircle = 0x24cf;
- t.Zcircumflex = 0x1e90;
- t.Zdot = 0x017b;
- t.Zdotaccent = 0x017b;
- t.Zdotbelow = 0x1e92;
- t.Zecyrillic = 0x0417;
- t.Zedescendercyrillic = 0x0498;
- t.Zedieresiscyrillic = 0x04de;
- t.Zeta = 0x0396;
- t.Zhearmenian = 0x053a;
- t.Zhebrevecyrillic = 0x04c1;
- t.Zhecyrillic = 0x0416;
- t.Zhedescendercyrillic = 0x0496;
- t.Zhedieresiscyrillic = 0x04dc;
- t.Zlinebelow = 0x1e94;
- t.Zmonospace = 0xff3a;
- t.Zsmall = 0xf77a;
- t.Zstroke = 0x01b5;
- t.a = 0x0061;
- t.aabengali = 0x0986;
- t.aacute = 0x00e1;
- t.aadeva = 0x0906;
- t.aagujarati = 0x0a86;
- t.aagurmukhi = 0x0a06;
- t.aamatragurmukhi = 0x0a3e;
- t.aarusquare = 0x3303;
- t.aavowelsignbengali = 0x09be;
- t.aavowelsigndeva = 0x093e;
- t.aavowelsigngujarati = 0x0abe;
- t.abbreviationmarkarmenian = 0x055f;
- t.abbreviationsigndeva = 0x0970;
- t.abengali = 0x0985;
- t.abopomofo = 0x311a;
- t.abreve = 0x0103;
- t.abreveacute = 0x1eaf;
- t.abrevecyrillic = 0x04d1;
- t.abrevedotbelow = 0x1eb7;
- t.abrevegrave = 0x1eb1;
- t.abrevehookabove = 0x1eb3;
- t.abrevetilde = 0x1eb5;
- t.acaron = 0x01ce;
- t.acircle = 0x24d0;
- t.acircumflex = 0x00e2;
- t.acircumflexacute = 0x1ea5;
- t.acircumflexdotbelow = 0x1ead;
- t.acircumflexgrave = 0x1ea7;
- t.acircumflexhookabove = 0x1ea9;
- t.acircumflextilde = 0x1eab;
- t.acute = 0x00b4;
- t.acutebelowcmb = 0x0317;
- t.acutecmb = 0x0301;
- t.acutecomb = 0x0301;
- t.acutedeva = 0x0954;
- t.acutelowmod = 0x02cf;
- t.acutetonecmb = 0x0341;
- t.acyrillic = 0x0430;
- t.adblgrave = 0x0201;
- t.addakgurmukhi = 0x0a71;
- t.adeva = 0x0905;
- t.adieresis = 0x00e4;
- t.adieresiscyrillic = 0x04d3;
- t.adieresismacron = 0x01df;
- t.adotbelow = 0x1ea1;
- t.adotmacron = 0x01e1;
- t.ae = 0x00e6;
- t.aeacute = 0x01fd;
- t.aekorean = 0x3150;
- t.aemacron = 0x01e3;
- t.afii00208 = 0x2015;
- t.afii08941 = 0x20a4;
- t.afii10017 = 0x0410;
- t.afii10018 = 0x0411;
- t.afii10019 = 0x0412;
- t.afii10020 = 0x0413;
- t.afii10021 = 0x0414;
- t.afii10022 = 0x0415;
- t.afii10023 = 0x0401;
- t.afii10024 = 0x0416;
- t.afii10025 = 0x0417;
- t.afii10026 = 0x0418;
- t.afii10027 = 0x0419;
- t.afii10028 = 0x041a;
- t.afii10029 = 0x041b;
- t.afii10030 = 0x041c;
- t.afii10031 = 0x041d;
- t.afii10032 = 0x041e;
- t.afii10033 = 0x041f;
- t.afii10034 = 0x0420;
- t.afii10035 = 0x0421;
- t.afii10036 = 0x0422;
- t.afii10037 = 0x0423;
- t.afii10038 = 0x0424;
- t.afii10039 = 0x0425;
- t.afii10040 = 0x0426;
- t.afii10041 = 0x0427;
- t.afii10042 = 0x0428;
- t.afii10043 = 0x0429;
- t.afii10044 = 0x042a;
- t.afii10045 = 0x042b;
- t.afii10046 = 0x042c;
- t.afii10047 = 0x042d;
- t.afii10048 = 0x042e;
- t.afii10049 = 0x042f;
- t.afii10050 = 0x0490;
- t.afii10051 = 0x0402;
- t.afii10052 = 0x0403;
- t.afii10053 = 0x0404;
- t.afii10054 = 0x0405;
- t.afii10055 = 0x0406;
- t.afii10056 = 0x0407;
- t.afii10057 = 0x0408;
- t.afii10058 = 0x0409;
- t.afii10059 = 0x040a;
- t.afii10060 = 0x040b;
- t.afii10061 = 0x040c;
- t.afii10062 = 0x040e;
- t.afii10063 = 0xf6c4;
- t.afii10064 = 0xf6c5;
- t.afii10065 = 0x0430;
- t.afii10066 = 0x0431;
- t.afii10067 = 0x0432;
- t.afii10068 = 0x0433;
- t.afii10069 = 0x0434;
- t.afii10070 = 0x0435;
- t.afii10071 = 0x0451;
- t.afii10072 = 0x0436;
- t.afii10073 = 0x0437;
- t.afii10074 = 0x0438;
- t.afii10075 = 0x0439;
- t.afii10076 = 0x043a;
- t.afii10077 = 0x043b;
- t.afii10078 = 0x043c;
- t.afii10079 = 0x043d;
- t.afii10080 = 0x043e;
- t.afii10081 = 0x043f;
- t.afii10082 = 0x0440;
- t.afii10083 = 0x0441;
- t.afii10084 = 0x0442;
- t.afii10085 = 0x0443;
- t.afii10086 = 0x0444;
- t.afii10087 = 0x0445;
- t.afii10088 = 0x0446;
- t.afii10089 = 0x0447;
- t.afii10090 = 0x0448;
- t.afii10091 = 0x0449;
- t.afii10092 = 0x044a;
- t.afii10093 = 0x044b;
- t.afii10094 = 0x044c;
- t.afii10095 = 0x044d;
- t.afii10096 = 0x044e;
- t.afii10097 = 0x044f;
- t.afii10098 = 0x0491;
- t.afii10099 = 0x0452;
- t.afii10100 = 0x0453;
- t.afii10101 = 0x0454;
- t.afii10102 = 0x0455;
- t.afii10103 = 0x0456;
- t.afii10104 = 0x0457;
- t.afii10105 = 0x0458;
- t.afii10106 = 0x0459;
- t.afii10107 = 0x045a;
- t.afii10108 = 0x045b;
- t.afii10109 = 0x045c;
- t.afii10110 = 0x045e;
- t.afii10145 = 0x040f;
- t.afii10146 = 0x0462;
- t.afii10147 = 0x0472;
- t.afii10148 = 0x0474;
- t.afii10192 = 0xf6c6;
- t.afii10193 = 0x045f;
- t.afii10194 = 0x0463;
- t.afii10195 = 0x0473;
- t.afii10196 = 0x0475;
- t.afii10831 = 0xf6c7;
- t.afii10832 = 0xf6c8;
- t.afii10846 = 0x04d9;
- t.afii299 = 0x200e;
- t.afii300 = 0x200f;
- t.afii301 = 0x200d;
- t.afii57381 = 0x066a;
- t.afii57388 = 0x060c;
- t.afii57392 = 0x0660;
- t.afii57393 = 0x0661;
- t.afii57394 = 0x0662;
- t.afii57395 = 0x0663;
- t.afii57396 = 0x0664;
- t.afii57397 = 0x0665;
- t.afii57398 = 0x0666;
- t.afii57399 = 0x0667;
- t.afii57400 = 0x0668;
- t.afii57401 = 0x0669;
- t.afii57403 = 0x061b;
- t.afii57407 = 0x061f;
- t.afii57409 = 0x0621;
- t.afii57410 = 0x0622;
- t.afii57411 = 0x0623;
- t.afii57412 = 0x0624;
- t.afii57413 = 0x0625;
- t.afii57414 = 0x0626;
- t.afii57415 = 0x0627;
- t.afii57416 = 0x0628;
- t.afii57417 = 0x0629;
- t.afii57418 = 0x062a;
- t.afii57419 = 0x062b;
- t.afii57420 = 0x062c;
- t.afii57421 = 0x062d;
- t.afii57422 = 0x062e;
- t.afii57423 = 0x062f;
- t.afii57424 = 0x0630;
- t.afii57425 = 0x0631;
- t.afii57426 = 0x0632;
- t.afii57427 = 0x0633;
- t.afii57428 = 0x0634;
- t.afii57429 = 0x0635;
- t.afii57430 = 0x0636;
- t.afii57431 = 0x0637;
- t.afii57432 = 0x0638;
- t.afii57433 = 0x0639;
- t.afii57434 = 0x063a;
- t.afii57440 = 0x0640;
- t.afii57441 = 0x0641;
- t.afii57442 = 0x0642;
- t.afii57443 = 0x0643;
- t.afii57444 = 0x0644;
- t.afii57445 = 0x0645;
- t.afii57446 = 0x0646;
- t.afii57448 = 0x0648;
- t.afii57449 = 0x0649;
- t.afii57450 = 0x064a;
- t.afii57451 = 0x064b;
- t.afii57452 = 0x064c;
- t.afii57453 = 0x064d;
- t.afii57454 = 0x064e;
- t.afii57455 = 0x064f;
- t.afii57456 = 0x0650;
- t.afii57457 = 0x0651;
- t.afii57458 = 0x0652;
- t.afii57470 = 0x0647;
- t.afii57505 = 0x06a4;
- t.afii57506 = 0x067e;
- t.afii57507 = 0x0686;
- t.afii57508 = 0x0698;
- t.afii57509 = 0x06af;
- t.afii57511 = 0x0679;
- t.afii57512 = 0x0688;
- t.afii57513 = 0x0691;
- t.afii57514 = 0x06ba;
- t.afii57519 = 0x06d2;
- t.afii57534 = 0x06d5;
- t.afii57636 = 0x20aa;
- t.afii57645 = 0x05be;
- t.afii57658 = 0x05c3;
- t.afii57664 = 0x05d0;
- t.afii57665 = 0x05d1;
- t.afii57666 = 0x05d2;
- t.afii57667 = 0x05d3;
- t.afii57668 = 0x05d4;
- t.afii57669 = 0x05d5;
- t.afii57670 = 0x05d6;
- t.afii57671 = 0x05d7;
- t.afii57672 = 0x05d8;
- t.afii57673 = 0x05d9;
- t.afii57674 = 0x05da;
- t.afii57675 = 0x05db;
- t.afii57676 = 0x05dc;
- t.afii57677 = 0x05dd;
- t.afii57678 = 0x05de;
- t.afii57679 = 0x05df;
- t.afii57680 = 0x05e0;
- t.afii57681 = 0x05e1;
- t.afii57682 = 0x05e2;
- t.afii57683 = 0x05e3;
- t.afii57684 = 0x05e4;
- t.afii57685 = 0x05e5;
- t.afii57686 = 0x05e6;
- t.afii57687 = 0x05e7;
- t.afii57688 = 0x05e8;
- t.afii57689 = 0x05e9;
- t.afii57690 = 0x05ea;
- t.afii57694 = 0xfb2a;
- t.afii57695 = 0xfb2b;
- t.afii57700 = 0xfb4b;
- t.afii57705 = 0xfb1f;
- t.afii57716 = 0x05f0;
- t.afii57717 = 0x05f1;
- t.afii57718 = 0x05f2;
- t.afii57723 = 0xfb35;
- t.afii57793 = 0x05b4;
- t.afii57794 = 0x05b5;
- t.afii57795 = 0x05b6;
- t.afii57796 = 0x05bb;
- t.afii57797 = 0x05b8;
- t.afii57798 = 0x05b7;
- t.afii57799 = 0x05b0;
- t.afii57800 = 0x05b2;
- t.afii57801 = 0x05b1;
- t.afii57802 = 0x05b3;
- t.afii57803 = 0x05c2;
- t.afii57804 = 0x05c1;
- t.afii57806 = 0x05b9;
- t.afii57807 = 0x05bc;
- t.afii57839 = 0x05bd;
- t.afii57841 = 0x05bf;
- t.afii57842 = 0x05c0;
- t.afii57929 = 0x02bc;
- t.afii61248 = 0x2105;
- t.afii61289 = 0x2113;
- t.afii61352 = 0x2116;
- t.afii61573 = 0x202c;
- t.afii61574 = 0x202d;
- t.afii61575 = 0x202e;
- t.afii61664 = 0x200c;
- t.afii63167 = 0x066d;
- t.afii64937 = 0x02bd;
- t.agrave = 0x00e0;
- t.agujarati = 0x0a85;
- t.agurmukhi = 0x0a05;
- t.ahiragana = 0x3042;
- t.ahookabove = 0x1ea3;
- t.aibengali = 0x0990;
- t.aibopomofo = 0x311e;
- t.aideva = 0x0910;
- t.aiecyrillic = 0x04d5;
- t.aigujarati = 0x0a90;
- t.aigurmukhi = 0x0a10;
- t.aimatragurmukhi = 0x0a48;
- t.ainarabic = 0x0639;
- t.ainfinalarabic = 0xfeca;
- t.aininitialarabic = 0xfecb;
- t.ainmedialarabic = 0xfecc;
- t.ainvertedbreve = 0x0203;
- t.aivowelsignbengali = 0x09c8;
- t.aivowelsigndeva = 0x0948;
- t.aivowelsigngujarati = 0x0ac8;
- t.akatakana = 0x30a2;
- t.akatakanahalfwidth = 0xff71;
- t.akorean = 0x314f;
- t.alef = 0x05d0;
- t.alefarabic = 0x0627;
- t.alefdageshhebrew = 0xfb30;
- t.aleffinalarabic = 0xfe8e;
- t.alefhamzaabovearabic = 0x0623;
- t.alefhamzaabovefinalarabic = 0xfe84;
- t.alefhamzabelowarabic = 0x0625;
- t.alefhamzabelowfinalarabic = 0xfe88;
- t.alefhebrew = 0x05d0;
- t.aleflamedhebrew = 0xfb4f;
- t.alefmaddaabovearabic = 0x0622;
- t.alefmaddaabovefinalarabic = 0xfe82;
- t.alefmaksuraarabic = 0x0649;
- t.alefmaksurafinalarabic = 0xfef0;
- t.alefmaksurainitialarabic = 0xfef3;
- t.alefmaksuramedialarabic = 0xfef4;
- t.alefpatahhebrew = 0xfb2e;
- t.alefqamatshebrew = 0xfb2f;
- t.aleph = 0x2135;
- t.allequal = 0x224c;
- t.alpha = 0x03b1;
- t.alphatonos = 0x03ac;
- t.amacron = 0x0101;
- t.amonospace = 0xff41;
- t.ampersand = 0x0026;
- t.ampersandmonospace = 0xff06;
- t.ampersandsmall = 0xf726;
- t.amsquare = 0x33c2;
- t.anbopomofo = 0x3122;
- t.angbopomofo = 0x3124;
- t.angbracketleft = 0x3008;
- t.angbracketright = 0x3009;
- t.angkhankhuthai = 0x0e5a;
- t.angle = 0x2220;
- t.anglebracketleft = 0x3008;
- t.anglebracketleftvertical = 0xfe3f;
- t.anglebracketright = 0x3009;
- t.anglebracketrightvertical = 0xfe40;
- t.angleleft = 0x2329;
- t.angleright = 0x232a;
- t.angstrom = 0x212b;
- t.anoteleia = 0x0387;
- t.anudattadeva = 0x0952;
- t.anusvarabengali = 0x0982;
- t.anusvaradeva = 0x0902;
- t.anusvaragujarati = 0x0a82;
- t.aogonek = 0x0105;
- t.apaatosquare = 0x3300;
- t.aparen = 0x249c;
- t.apostrophearmenian = 0x055a;
- t.apostrophemod = 0x02bc;
- t.apple = 0xf8ff;
- t.approaches = 0x2250;
- t.approxequal = 0x2248;
- t.approxequalorimage = 0x2252;
- t.approximatelyequal = 0x2245;
- t.araeaekorean = 0x318e;
- t.araeakorean = 0x318d;
- t.arc = 0x2312;
- t.arighthalfring = 0x1e9a;
- t.aring = 0x00e5;
- t.aringacute = 0x01fb;
- t.aringbelow = 0x1e01;
- t.arrowboth = 0x2194;
- t.arrowdashdown = 0x21e3;
- t.arrowdashleft = 0x21e0;
- t.arrowdashright = 0x21e2;
- t.arrowdashup = 0x21e1;
- t.arrowdblboth = 0x21d4;
- t.arrowdbldown = 0x21d3;
- t.arrowdblleft = 0x21d0;
- t.arrowdblright = 0x21d2;
- t.arrowdblup = 0x21d1;
- t.arrowdown = 0x2193;
- t.arrowdownleft = 0x2199;
- t.arrowdownright = 0x2198;
- t.arrowdownwhite = 0x21e9;
- t.arrowheaddownmod = 0x02c5;
- t.arrowheadleftmod = 0x02c2;
- t.arrowheadrightmod = 0x02c3;
- t.arrowheadupmod = 0x02c4;
- t.arrowhorizex = 0xf8e7;
- t.arrowleft = 0x2190;
- t.arrowleftdbl = 0x21d0;
- t.arrowleftdblstroke = 0x21cd;
- t.arrowleftoverright = 0x21c6;
- t.arrowleftwhite = 0x21e6;
- t.arrowright = 0x2192;
- t.arrowrightdblstroke = 0x21cf;
- t.arrowrightheavy = 0x279e;
- t.arrowrightoverleft = 0x21c4;
- t.arrowrightwhite = 0x21e8;
- t.arrowtableft = 0x21e4;
- t.arrowtabright = 0x21e5;
- t.arrowup = 0x2191;
- t.arrowupdn = 0x2195;
- t.arrowupdnbse = 0x21a8;
- t.arrowupdownbase = 0x21a8;
- t.arrowupleft = 0x2196;
- t.arrowupleftofdown = 0x21c5;
- t.arrowupright = 0x2197;
- t.arrowupwhite = 0x21e7;
- t.arrowvertex = 0xf8e6;
- t.asciicircum = 0x005e;
- t.asciicircummonospace = 0xff3e;
- t.asciitilde = 0x007e;
- t.asciitildemonospace = 0xff5e;
- t.ascript = 0x0251;
- t.ascriptturned = 0x0252;
- t.asmallhiragana = 0x3041;
- t.asmallkatakana = 0x30a1;
- t.asmallkatakanahalfwidth = 0xff67;
- t.asterisk = 0x002a;
- t.asteriskaltonearabic = 0x066d;
- t.asteriskarabic = 0x066d;
- t.asteriskmath = 0x2217;
- t.asteriskmonospace = 0xff0a;
- t.asterisksmall = 0xfe61;
- t.asterism = 0x2042;
- t.asuperior = 0xf6e9;
- t.asymptoticallyequal = 0x2243;
- t.at = 0x0040;
- t.atilde = 0x00e3;
- t.atmonospace = 0xff20;
- t.atsmall = 0xfe6b;
- t.aturned = 0x0250;
- t.aubengali = 0x0994;
- t.aubopomofo = 0x3120;
- t.audeva = 0x0914;
- t.augujarati = 0x0a94;
- t.augurmukhi = 0x0a14;
- t.aulengthmarkbengali = 0x09d7;
- t.aumatragurmukhi = 0x0a4c;
- t.auvowelsignbengali = 0x09cc;
- t.auvowelsigndeva = 0x094c;
- t.auvowelsigngujarati = 0x0acc;
- t.avagrahadeva = 0x093d;
- t.aybarmenian = 0x0561;
- t.ayin = 0x05e2;
- t.ayinaltonehebrew = 0xfb20;
- t.ayinhebrew = 0x05e2;
- t.b = 0x0062;
- t.babengali = 0x09ac;
- t.backslash = 0x005c;
- t.backslashmonospace = 0xff3c;
- t.badeva = 0x092c;
- t.bagujarati = 0x0aac;
- t.bagurmukhi = 0x0a2c;
- t.bahiragana = 0x3070;
- t.bahtthai = 0x0e3f;
- t.bakatakana = 0x30d0;
- t.bar = 0x007c;
- t.barmonospace = 0xff5c;
- t.bbopomofo = 0x3105;
- t.bcircle = 0x24d1;
- t.bdotaccent = 0x1e03;
- t.bdotbelow = 0x1e05;
- t.beamedsixteenthnotes = 0x266c;
- t.because = 0x2235;
- t.becyrillic = 0x0431;
- t.beharabic = 0x0628;
- t.behfinalarabic = 0xfe90;
- t.behinitialarabic = 0xfe91;
- t.behiragana = 0x3079;
- t.behmedialarabic = 0xfe92;
- t.behmeeminitialarabic = 0xfc9f;
- t.behmeemisolatedarabic = 0xfc08;
- t.behnoonfinalarabic = 0xfc6d;
- t.bekatakana = 0x30d9;
- t.benarmenian = 0x0562;
- t.bet = 0x05d1;
- t.beta = 0x03b2;
- t.betasymbolgreek = 0x03d0;
- t.betdagesh = 0xfb31;
- t.betdageshhebrew = 0xfb31;
- t.bethebrew = 0x05d1;
- t.betrafehebrew = 0xfb4c;
- t.bhabengali = 0x09ad;
- t.bhadeva = 0x092d;
- t.bhagujarati = 0x0aad;
- t.bhagurmukhi = 0x0a2d;
- t.bhook = 0x0253;
- t.bihiragana = 0x3073;
- t.bikatakana = 0x30d3;
- t.bilabialclick = 0x0298;
- t.bindigurmukhi = 0x0a02;
- t.birusquare = 0x3331;
- t.blackcircle = 0x25cf;
- t.blackdiamond = 0x25c6;
- t.blackdownpointingtriangle = 0x25bc;
- t.blackleftpointingpointer = 0x25c4;
- t.blackleftpointingtriangle = 0x25c0;
- t.blacklenticularbracketleft = 0x3010;
- t.blacklenticularbracketleftvertical = 0xfe3b;
- t.blacklenticularbracketright = 0x3011;
- t.blacklenticularbracketrightvertical = 0xfe3c;
- t.blacklowerlefttriangle = 0x25e3;
- t.blacklowerrighttriangle = 0x25e2;
- t.blackrectangle = 0x25ac;
- t.blackrightpointingpointer = 0x25ba;
- t.blackrightpointingtriangle = 0x25b6;
- t.blacksmallsquare = 0x25aa;
- t.blacksmilingface = 0x263b;
- t.blacksquare = 0x25a0;
- t.blackstar = 0x2605;
- t.blackupperlefttriangle = 0x25e4;
- t.blackupperrighttriangle = 0x25e5;
- t.blackuppointingsmalltriangle = 0x25b4;
- t.blackuppointingtriangle = 0x25b2;
- t.blank = 0x2423;
- t.blinebelow = 0x1e07;
- t.block = 0x2588;
- t.bmonospace = 0xff42;
- t.bobaimaithai = 0x0e1a;
- t.bohiragana = 0x307c;
- t.bokatakana = 0x30dc;
- t.bparen = 0x249d;
- t.bqsquare = 0x33c3;
- t.braceex = 0xf8f4;
- t.braceleft = 0x007b;
- t.braceleftbt = 0xf8f3;
- t.braceleftmid = 0xf8f2;
- t.braceleftmonospace = 0xff5b;
- t.braceleftsmall = 0xfe5b;
- t.bracelefttp = 0xf8f1;
- t.braceleftvertical = 0xfe37;
- t.braceright = 0x007d;
- t.bracerightbt = 0xf8fe;
- t.bracerightmid = 0xf8fd;
- t.bracerightmonospace = 0xff5d;
- t.bracerightsmall = 0xfe5c;
- t.bracerighttp = 0xf8fc;
- t.bracerightvertical = 0xfe38;
- t.bracketleft = 0x005b;
- t.bracketleftbt = 0xf8f0;
- t.bracketleftex = 0xf8ef;
- t.bracketleftmonospace = 0xff3b;
- t.bracketlefttp = 0xf8ee;
- t.bracketright = 0x005d;
- t.bracketrightbt = 0xf8fb;
- t.bracketrightex = 0xf8fa;
- t.bracketrightmonospace = 0xff3d;
- t.bracketrighttp = 0xf8f9;
- t.breve = 0x02d8;
- t.brevebelowcmb = 0x032e;
- t.brevecmb = 0x0306;
- t.breveinvertedbelowcmb = 0x032f;
- t.breveinvertedcmb = 0x0311;
- t.breveinverteddoublecmb = 0x0361;
- t.bridgebelowcmb = 0x032a;
- t.bridgeinvertedbelowcmb = 0x033a;
- t.brokenbar = 0x00a6;
- t.bstroke = 0x0180;
- t.bsuperior = 0xf6ea;
- t.btopbar = 0x0183;
- t.buhiragana = 0x3076;
- t.bukatakana = 0x30d6;
- t.bullet = 0x2022;
- t.bulletinverse = 0x25d8;
- t.bulletoperator = 0x2219;
- t.bullseye = 0x25ce;
- t.c = 0x0063;
- t.caarmenian = 0x056e;
- t.cabengali = 0x099a;
- t.cacute = 0x0107;
- t.cadeva = 0x091a;
- t.cagujarati = 0x0a9a;
- t.cagurmukhi = 0x0a1a;
- t.calsquare = 0x3388;
- t.candrabindubengali = 0x0981;
- t.candrabinducmb = 0x0310;
- t.candrabindudeva = 0x0901;
- t.candrabindugujarati = 0x0a81;
- t.capslock = 0x21ea;
- t.careof = 0x2105;
- t.caron = 0x02c7;
- t.caronbelowcmb = 0x032c;
- t.caroncmb = 0x030c;
- t.carriagereturn = 0x21b5;
- t.cbopomofo = 0x3118;
- t.ccaron = 0x010d;
- t.ccedilla = 0x00e7;
- t.ccedillaacute = 0x1e09;
- t.ccircle = 0x24d2;
- t.ccircumflex = 0x0109;
- t.ccurl = 0x0255;
- t.cdot = 0x010b;
- t.cdotaccent = 0x010b;
- t.cdsquare = 0x33c5;
- t.cedilla = 0x00b8;
- t.cedillacmb = 0x0327;
- t.cent = 0x00a2;
- t.centigrade = 0x2103;
- t.centinferior = 0xf6df;
- t.centmonospace = 0xffe0;
- t.centoldstyle = 0xf7a2;
- t.centsuperior = 0xf6e0;
- t.chaarmenian = 0x0579;
- t.chabengali = 0x099b;
- t.chadeva = 0x091b;
- t.chagujarati = 0x0a9b;
- t.chagurmukhi = 0x0a1b;
- t.chbopomofo = 0x3114;
- t.cheabkhasiancyrillic = 0x04bd;
- t.checkmark = 0x2713;
- t.checyrillic = 0x0447;
- t.chedescenderabkhasiancyrillic = 0x04bf;
- t.chedescendercyrillic = 0x04b7;
- t.chedieresiscyrillic = 0x04f5;
- t.cheharmenian = 0x0573;
- t.chekhakassiancyrillic = 0x04cc;
- t.cheverticalstrokecyrillic = 0x04b9;
- t.chi = 0x03c7;
- t.chieuchacirclekorean = 0x3277;
- t.chieuchaparenkorean = 0x3217;
- t.chieuchcirclekorean = 0x3269;
- t.chieuchkorean = 0x314a;
- t.chieuchparenkorean = 0x3209;
- t.chochangthai = 0x0e0a;
- t.chochanthai = 0x0e08;
- t.chochingthai = 0x0e09;
- t.chochoethai = 0x0e0c;
- t.chook = 0x0188;
- t.cieucacirclekorean = 0x3276;
- t.cieucaparenkorean = 0x3216;
- t.cieuccirclekorean = 0x3268;
- t.cieuckorean = 0x3148;
- t.cieucparenkorean = 0x3208;
- t.cieucuparenkorean = 0x321c;
- t.circle = 0x25cb;
- t.circlecopyrt = 0x00a9;
- t.circlemultiply = 0x2297;
- t.circleot = 0x2299;
- t.circleplus = 0x2295;
- t.circlepostalmark = 0x3036;
- t.circlewithlefthalfblack = 0x25d0;
- t.circlewithrighthalfblack = 0x25d1;
- t.circumflex = 0x02c6;
- t.circumflexbelowcmb = 0x032d;
- t.circumflexcmb = 0x0302;
- t.clear = 0x2327;
- t.clickalveolar = 0x01c2;
- t.clickdental = 0x01c0;
- t.clicklateral = 0x01c1;
- t.clickretroflex = 0x01c3;
- t.club = 0x2663;
- t.clubsuitblack = 0x2663;
- t.clubsuitwhite = 0x2667;
- t.cmcubedsquare = 0x33a4;
- t.cmonospace = 0xff43;
- t.cmsquaredsquare = 0x33a0;
- t.coarmenian = 0x0581;
- t.colon = 0x003a;
- t.colonmonetary = 0x20a1;
- t.colonmonospace = 0xff1a;
- t.colonsign = 0x20a1;
- t.colonsmall = 0xfe55;
- t.colontriangularhalfmod = 0x02d1;
- t.colontriangularmod = 0x02d0;
- t.comma = 0x002c;
- t.commaabovecmb = 0x0313;
- t.commaaboverightcmb = 0x0315;
- t.commaaccent = 0xf6c3;
- t.commaarabic = 0x060c;
- t.commaarmenian = 0x055d;
- t.commainferior = 0xf6e1;
- t.commamonospace = 0xff0c;
- t.commareversedabovecmb = 0x0314;
- t.commareversedmod = 0x02bd;
- t.commasmall = 0xfe50;
- t.commasuperior = 0xf6e2;
- t.commaturnedabovecmb = 0x0312;
- t.commaturnedmod = 0x02bb;
- t.compass = 0x263c;
- t.congruent = 0x2245;
- t.contourintegral = 0x222e;
- t.control = 0x2303;
- t.controlACK = 0x0006;
- t.controlBEL = 0x0007;
- t.controlBS = 0x0008;
- t.controlCAN = 0x0018;
- t.controlCR = 0x000d;
- t.controlDC1 = 0x0011;
- t.controlDC2 = 0x0012;
- t.controlDC3 = 0x0013;
- t.controlDC4 = 0x0014;
- t.controlDEL = 0x007f;
- t.controlDLE = 0x0010;
- t.controlEM = 0x0019;
- t.controlENQ = 0x0005;
- t.controlEOT = 0x0004;
- t.controlESC = 0x001b;
- t.controlETB = 0x0017;
- t.controlETX = 0x0003;
- t.controlFF = 0x000c;
- t.controlFS = 0x001c;
- t.controlGS = 0x001d;
- t.controlHT = 0x0009;
- t.controlLF = 0x000a;
- t.controlNAK = 0x0015;
- t.controlNULL = 0x0000;
- t.controlRS = 0x001e;
- t.controlSI = 0x000f;
- t.controlSO = 0x000e;
- t.controlSOT = 0x0002;
- t.controlSTX = 0x0001;
- t.controlSUB = 0x001a;
- t.controlSYN = 0x0016;
- t.controlUS = 0x001f;
- t.controlVT = 0x000b;
- t.copyright = 0x00a9;
- t.copyrightsans = 0xf8e9;
- t.copyrightserif = 0xf6d9;
- t.cornerbracketleft = 0x300c;
- t.cornerbracketlefthalfwidth = 0xff62;
- t.cornerbracketleftvertical = 0xfe41;
- t.cornerbracketright = 0x300d;
- t.cornerbracketrighthalfwidth = 0xff63;
- t.cornerbracketrightvertical = 0xfe42;
- t.corporationsquare = 0x337f;
- t.cosquare = 0x33c7;
- t.coverkgsquare = 0x33c6;
- t.cparen = 0x249e;
- t.cruzeiro = 0x20a2;
- t.cstretched = 0x0297;
- t.curlyand = 0x22cf;
- t.curlyor = 0x22ce;
- t.currency = 0x00a4;
- t.cyrBreve = 0xf6d1;
- t.cyrFlex = 0xf6d2;
- t.cyrbreve = 0xf6d4;
- t.cyrflex = 0xf6d5;
- t.d = 0x0064;
- t.daarmenian = 0x0564;
- t.dabengali = 0x09a6;
- t.dadarabic = 0x0636;
- t.dadeva = 0x0926;
- t.dadfinalarabic = 0xfebe;
- t.dadinitialarabic = 0xfebf;
- t.dadmedialarabic = 0xfec0;
- t.dagesh = 0x05bc;
- t.dageshhebrew = 0x05bc;
- t.dagger = 0x2020;
- t.daggerdbl = 0x2021;
- t.dagujarati = 0x0aa6;
- t.dagurmukhi = 0x0a26;
- t.dahiragana = 0x3060;
- t.dakatakana = 0x30c0;
- t.dalarabic = 0x062f;
- t.dalet = 0x05d3;
- t.daletdagesh = 0xfb33;
- t.daletdageshhebrew = 0xfb33;
- t.dalethebrew = 0x05d3;
- t.dalfinalarabic = 0xfeaa;
- t.dammaarabic = 0x064f;
- t.dammalowarabic = 0x064f;
- t.dammatanaltonearabic = 0x064c;
- t.dammatanarabic = 0x064c;
- t.danda = 0x0964;
- t.dargahebrew = 0x05a7;
- t.dargalefthebrew = 0x05a7;
- t.dasiapneumatacyrilliccmb = 0x0485;
- t.dblGrave = 0xf6d3;
- t.dblanglebracketleft = 0x300a;
- t.dblanglebracketleftvertical = 0xfe3d;
- t.dblanglebracketright = 0x300b;
- t.dblanglebracketrightvertical = 0xfe3e;
- t.dblarchinvertedbelowcmb = 0x032b;
- t.dblarrowleft = 0x21d4;
- t.dblarrowright = 0x21d2;
- t.dbldanda = 0x0965;
- t.dblgrave = 0xf6d6;
- t.dblgravecmb = 0x030f;
- t.dblintegral = 0x222c;
- t.dbllowline = 0x2017;
- t.dbllowlinecmb = 0x0333;
- t.dbloverlinecmb = 0x033f;
- t.dblprimemod = 0x02ba;
- t.dblverticalbar = 0x2016;
- t.dblverticallineabovecmb = 0x030e;
- t.dbopomofo = 0x3109;
- t.dbsquare = 0x33c8;
- t.dcaron = 0x010f;
- t.dcedilla = 0x1e11;
- t.dcircle = 0x24d3;
- t.dcircumflexbelow = 0x1e13;
- t.dcroat = 0x0111;
- t.ddabengali = 0x09a1;
- t.ddadeva = 0x0921;
- t.ddagujarati = 0x0aa1;
- t.ddagurmukhi = 0x0a21;
- t.ddalarabic = 0x0688;
- t.ddalfinalarabic = 0xfb89;
- t.dddhadeva = 0x095c;
- t.ddhabengali = 0x09a2;
- t.ddhadeva = 0x0922;
- t.ddhagujarati = 0x0aa2;
- t.ddhagurmukhi = 0x0a22;
- t.ddotaccent = 0x1e0b;
- t.ddotbelow = 0x1e0d;
- t.decimalseparatorarabic = 0x066b;
- t.decimalseparatorpersian = 0x066b;
- t.decyrillic = 0x0434;
- t.degree = 0x00b0;
- t.dehihebrew = 0x05ad;
- t.dehiragana = 0x3067;
- t.deicoptic = 0x03ef;
- t.dekatakana = 0x30c7;
- t.deleteleft = 0x232b;
- t.deleteright = 0x2326;
- t.delta = 0x03b4;
- t.deltaturned = 0x018d;
- t.denominatorminusonenumeratorbengali = 0x09f8;
- t.dezh = 0x02a4;
- t.dhabengali = 0x09a7;
- t.dhadeva = 0x0927;
- t.dhagujarati = 0x0aa7;
- t.dhagurmukhi = 0x0a27;
- t.dhook = 0x0257;
- t.dialytikatonos = 0x0385;
- t.dialytikatonoscmb = 0x0344;
- t.diamond = 0x2666;
- t.diamondsuitwhite = 0x2662;
- t.dieresis = 0x00a8;
- t.dieresisacute = 0xf6d7;
- t.dieresisbelowcmb = 0x0324;
- t.dieresiscmb = 0x0308;
- t.dieresisgrave = 0xf6d8;
- t.dieresistonos = 0x0385;
- t.dihiragana = 0x3062;
- t.dikatakana = 0x30c2;
- t.dittomark = 0x3003;
- t.divide = 0x00f7;
- t.divides = 0x2223;
- t.divisionslash = 0x2215;
- t.djecyrillic = 0x0452;
- t.dkshade = 0x2593;
- t.dlinebelow = 0x1e0f;
- t.dlsquare = 0x3397;
- t.dmacron = 0x0111;
- t.dmonospace = 0xff44;
- t.dnblock = 0x2584;
- t.dochadathai = 0x0e0e;
- t.dodekthai = 0x0e14;
- t.dohiragana = 0x3069;
- t.dokatakana = 0x30c9;
- t.dollar = 0x0024;
- t.dollarinferior = 0xf6e3;
- t.dollarmonospace = 0xff04;
- t.dollaroldstyle = 0xf724;
- t.dollarsmall = 0xfe69;
- t.dollarsuperior = 0xf6e4;
- t.dong = 0x20ab;
- t.dorusquare = 0x3326;
- t.dotaccent = 0x02d9;
- t.dotaccentcmb = 0x0307;
- t.dotbelowcmb = 0x0323;
- t.dotbelowcomb = 0x0323;
- t.dotkatakana = 0x30fb;
- t.dotlessi = 0x0131;
- t.dotlessj = 0xf6be;
- t.dotlessjstrokehook = 0x0284;
- t.dotmath = 0x22c5;
- t.dottedcircle = 0x25cc;
- t.doubleyodpatah = 0xfb1f;
- t.doubleyodpatahhebrew = 0xfb1f;
- t.downtackbelowcmb = 0x031e;
- t.downtackmod = 0x02d5;
- t.dparen = 0x249f;
- t.dsuperior = 0xf6eb;
- t.dtail = 0x0256;
- t.dtopbar = 0x018c;
- t.duhiragana = 0x3065;
- t.dukatakana = 0x30c5;
- t.dz = 0x01f3;
- t.dzaltone = 0x02a3;
- t.dzcaron = 0x01c6;
- t.dzcurl = 0x02a5;
- t.dzeabkhasiancyrillic = 0x04e1;
- t.dzecyrillic = 0x0455;
- t.dzhecyrillic = 0x045f;
- t.e = 0x0065;
- t.eacute = 0x00e9;
- t.earth = 0x2641;
- t.ebengali = 0x098f;
- t.ebopomofo = 0x311c;
- t.ebreve = 0x0115;
- t.ecandradeva = 0x090d;
- t.ecandragujarati = 0x0a8d;
- t.ecandravowelsigndeva = 0x0945;
- t.ecandravowelsigngujarati = 0x0ac5;
- t.ecaron = 0x011b;
- t.ecedillabreve = 0x1e1d;
- t.echarmenian = 0x0565;
- t.echyiwnarmenian = 0x0587;
- t.ecircle = 0x24d4;
- t.ecircumflex = 0x00ea;
- t.ecircumflexacute = 0x1ebf;
- t.ecircumflexbelow = 0x1e19;
- t.ecircumflexdotbelow = 0x1ec7;
- t.ecircumflexgrave = 0x1ec1;
- t.ecircumflexhookabove = 0x1ec3;
- t.ecircumflextilde = 0x1ec5;
- t.ecyrillic = 0x0454;
- t.edblgrave = 0x0205;
- t.edeva = 0x090f;
- t.edieresis = 0x00eb;
- t.edot = 0x0117;
- t.edotaccent = 0x0117;
- t.edotbelow = 0x1eb9;
- t.eegurmukhi = 0x0a0f;
- t.eematragurmukhi = 0x0a47;
- t.efcyrillic = 0x0444;
- t.egrave = 0x00e8;
- t.egujarati = 0x0a8f;
- t.eharmenian = 0x0567;
- t.ehbopomofo = 0x311d;
- t.ehiragana = 0x3048;
- t.ehookabove = 0x1ebb;
- t.eibopomofo = 0x311f;
- t.eight = 0x0038;
- t.eightarabic = 0x0668;
- t.eightbengali = 0x09ee;
- t.eightcircle = 0x2467;
- t.eightcircleinversesansserif = 0x2791;
- t.eightdeva = 0x096e;
- t.eighteencircle = 0x2471;
- t.eighteenparen = 0x2485;
- t.eighteenperiod = 0x2499;
- t.eightgujarati = 0x0aee;
- t.eightgurmukhi = 0x0a6e;
- t.eighthackarabic = 0x0668;
- t.eighthangzhou = 0x3028;
- t.eighthnotebeamed = 0x266b;
- t.eightideographicparen = 0x3227;
- t.eightinferior = 0x2088;
- t.eightmonospace = 0xff18;
- t.eightoldstyle = 0xf738;
- t.eightparen = 0x247b;
- t.eightperiod = 0x248f;
- t.eightpersian = 0x06f8;
- t.eightroman = 0x2177;
- t.eightsuperior = 0x2078;
- t.eightthai = 0x0e58;
- t.einvertedbreve = 0x0207;
- t.eiotifiedcyrillic = 0x0465;
- t.ekatakana = 0x30a8;
- t.ekatakanahalfwidth = 0xff74;
- t.ekonkargurmukhi = 0x0a74;
- t.ekorean = 0x3154;
- t.elcyrillic = 0x043b;
- t.element = 0x2208;
- t.elevencircle = 0x246a;
- t.elevenparen = 0x247e;
- t.elevenperiod = 0x2492;
- t.elevenroman = 0x217a;
- t.ellipsis = 0x2026;
- t.ellipsisvertical = 0x22ee;
- t.emacron = 0x0113;
- t.emacronacute = 0x1e17;
- t.emacrongrave = 0x1e15;
- t.emcyrillic = 0x043c;
- t.emdash = 0x2014;
- t.emdashvertical = 0xfe31;
- t.emonospace = 0xff45;
- t.emphasismarkarmenian = 0x055b;
- t.emptyset = 0x2205;
- t.enbopomofo = 0x3123;
- t.encyrillic = 0x043d;
- t.endash = 0x2013;
- t.endashvertical = 0xfe32;
- t.endescendercyrillic = 0x04a3;
- t.eng = 0x014b;
- t.engbopomofo = 0x3125;
- t.enghecyrillic = 0x04a5;
- t.enhookcyrillic = 0x04c8;
- t.enspace = 0x2002;
- t.eogonek = 0x0119;
- t.eokorean = 0x3153;
- t.eopen = 0x025b;
- t.eopenclosed = 0x029a;
- t.eopenreversed = 0x025c;
- t.eopenreversedclosed = 0x025e;
- t.eopenreversedhook = 0x025d;
- t.eparen = 0x24a0;
- t.epsilon = 0x03b5;
- t.epsilontonos = 0x03ad;
- t.equal = 0x003d;
- t.equalmonospace = 0xff1d;
- t.equalsmall = 0xfe66;
- t.equalsuperior = 0x207c;
- t.equivalence = 0x2261;
- t.erbopomofo = 0x3126;
- t.ercyrillic = 0x0440;
- t.ereversed = 0x0258;
- t.ereversedcyrillic = 0x044d;
- t.escyrillic = 0x0441;
- t.esdescendercyrillic = 0x04ab;
- t.esh = 0x0283;
- t.eshcurl = 0x0286;
- t.eshortdeva = 0x090e;
- t.eshortvowelsigndeva = 0x0946;
- t.eshreversedloop = 0x01aa;
- t.eshsquatreversed = 0x0285;
- t.esmallhiragana = 0x3047;
- t.esmallkatakana = 0x30a7;
- t.esmallkatakanahalfwidth = 0xff6a;
- t.estimated = 0x212e;
- t.esuperior = 0xf6ec;
- t.eta = 0x03b7;
- t.etarmenian = 0x0568;
- t.etatonos = 0x03ae;
- t.eth = 0x00f0;
- t.etilde = 0x1ebd;
- t.etildebelow = 0x1e1b;
- t.etnahtafoukhhebrew = 0x0591;
- t.etnahtafoukhlefthebrew = 0x0591;
- t.etnahtahebrew = 0x0591;
- t.etnahtalefthebrew = 0x0591;
- t.eturned = 0x01dd;
- t.eukorean = 0x3161;
- t.euro = 0x20ac;
- t.evowelsignbengali = 0x09c7;
- t.evowelsigndeva = 0x0947;
- t.evowelsigngujarati = 0x0ac7;
- t.exclam = 0x0021;
- t.exclamarmenian = 0x055c;
- t.exclamdbl = 0x203c;
- t.exclamdown = 0x00a1;
- t.exclamdownsmall = 0xf7a1;
- t.exclammonospace = 0xff01;
- t.exclamsmall = 0xf721;
- t.existential = 0x2203;
- t.ezh = 0x0292;
- t.ezhcaron = 0x01ef;
- t.ezhcurl = 0x0293;
- t.ezhreversed = 0x01b9;
- t.ezhtail = 0x01ba;
- t.f = 0x0066;
- t.fadeva = 0x095e;
- t.fagurmukhi = 0x0a5e;
- t.fahrenheit = 0x2109;
- t.fathaarabic = 0x064e;
- t.fathalowarabic = 0x064e;
- t.fathatanarabic = 0x064b;
- t.fbopomofo = 0x3108;
- t.fcircle = 0x24d5;
- t.fdotaccent = 0x1e1f;
- t.feharabic = 0x0641;
- t.feharmenian = 0x0586;
- t.fehfinalarabic = 0xfed2;
- t.fehinitialarabic = 0xfed3;
- t.fehmedialarabic = 0xfed4;
- t.feicoptic = 0x03e5;
- t.female = 0x2640;
- t.ff = 0xfb00;
- t.f_f = 0xfb00;
- t.ffi = 0xfb03;
- t.ffl = 0xfb04;
- t.fi = 0xfb01;
- t.fifteencircle = 0x246e;
- t.fifteenparen = 0x2482;
- t.fifteenperiod = 0x2496;
- t.figuredash = 0x2012;
- t.filledbox = 0x25a0;
- t.filledrect = 0x25ac;
- t.finalkaf = 0x05da;
- t.finalkafdagesh = 0xfb3a;
- t.finalkafdageshhebrew = 0xfb3a;
- t.finalkafhebrew = 0x05da;
- t.finalmem = 0x05dd;
- t.finalmemhebrew = 0x05dd;
- t.finalnun = 0x05df;
- t.finalnunhebrew = 0x05df;
- t.finalpe = 0x05e3;
- t.finalpehebrew = 0x05e3;
- t.finaltsadi = 0x05e5;
- t.finaltsadihebrew = 0x05e5;
- t.firsttonechinese = 0x02c9;
- t.fisheye = 0x25c9;
- t.fitacyrillic = 0x0473;
- t.five = 0x0035;
- t.fivearabic = 0x0665;
- t.fivebengali = 0x09eb;
- t.fivecircle = 0x2464;
- t.fivecircleinversesansserif = 0x278e;
- t.fivedeva = 0x096b;
- t.fiveeighths = 0x215d;
- t.fivegujarati = 0x0aeb;
- t.fivegurmukhi = 0x0a6b;
- t.fivehackarabic = 0x0665;
- t.fivehangzhou = 0x3025;
- t.fiveideographicparen = 0x3224;
- t.fiveinferior = 0x2085;
- t.fivemonospace = 0xff15;
- t.fiveoldstyle = 0xf735;
- t.fiveparen = 0x2478;
- t.fiveperiod = 0x248c;
- t.fivepersian = 0x06f5;
- t.fiveroman = 0x2174;
- t.fivesuperior = 0x2075;
- t.fivethai = 0x0e55;
- t.fl = 0xfb02;
- t.florin = 0x0192;
- t.fmonospace = 0xff46;
- t.fmsquare = 0x3399;
- t.fofanthai = 0x0e1f;
- t.fofathai = 0x0e1d;
- t.fongmanthai = 0x0e4f;
- t.forall = 0x2200;
- t.four = 0x0034;
- t.fourarabic = 0x0664;
- t.fourbengali = 0x09ea;
- t.fourcircle = 0x2463;
- t.fourcircleinversesansserif = 0x278d;
- t.fourdeva = 0x096a;
- t.fourgujarati = 0x0aea;
- t.fourgurmukhi = 0x0a6a;
- t.fourhackarabic = 0x0664;
- t.fourhangzhou = 0x3024;
- t.fourideographicparen = 0x3223;
- t.fourinferior = 0x2084;
- t.fourmonospace = 0xff14;
- t.fournumeratorbengali = 0x09f7;
- t.fouroldstyle = 0xf734;
- t.fourparen = 0x2477;
- t.fourperiod = 0x248b;
- t.fourpersian = 0x06f4;
- t.fourroman = 0x2173;
- t.foursuperior = 0x2074;
- t.fourteencircle = 0x246d;
- t.fourteenparen = 0x2481;
- t.fourteenperiod = 0x2495;
- t.fourthai = 0x0e54;
- t.fourthtonechinese = 0x02cb;
- t.fparen = 0x24a1;
- t.fraction = 0x2044;
- t.franc = 0x20a3;
- t.g = 0x0067;
- t.gabengali = 0x0997;
- t.gacute = 0x01f5;
- t.gadeva = 0x0917;
- t.gafarabic = 0x06af;
- t.gaffinalarabic = 0xfb93;
- t.gafinitialarabic = 0xfb94;
- t.gafmedialarabic = 0xfb95;
- t.gagujarati = 0x0a97;
- t.gagurmukhi = 0x0a17;
- t.gahiragana = 0x304c;
- t.gakatakana = 0x30ac;
- t.gamma = 0x03b3;
- t.gammalatinsmall = 0x0263;
- t.gammasuperior = 0x02e0;
- t.gangiacoptic = 0x03eb;
- t.gbopomofo = 0x310d;
- t.gbreve = 0x011f;
- t.gcaron = 0x01e7;
- t.gcedilla = 0x0123;
- t.gcircle = 0x24d6;
- t.gcircumflex = 0x011d;
- t.gcommaaccent = 0x0123;
- t.gdot = 0x0121;
- t.gdotaccent = 0x0121;
- t.gecyrillic = 0x0433;
- t.gehiragana = 0x3052;
- t.gekatakana = 0x30b2;
- t.geometricallyequal = 0x2251;
- t.gereshaccenthebrew = 0x059c;
- t.gereshhebrew = 0x05f3;
- t.gereshmuqdamhebrew = 0x059d;
- t.germandbls = 0x00df;
- t.gershayimaccenthebrew = 0x059e;
- t.gershayimhebrew = 0x05f4;
- t.getamark = 0x3013;
- t.ghabengali = 0x0998;
- t.ghadarmenian = 0x0572;
- t.ghadeva = 0x0918;
- t.ghagujarati = 0x0a98;
- t.ghagurmukhi = 0x0a18;
- t.ghainarabic = 0x063a;
- t.ghainfinalarabic = 0xfece;
- t.ghaininitialarabic = 0xfecf;
- t.ghainmedialarabic = 0xfed0;
- t.ghemiddlehookcyrillic = 0x0495;
- t.ghestrokecyrillic = 0x0493;
- t.gheupturncyrillic = 0x0491;
- t.ghhadeva = 0x095a;
- t.ghhagurmukhi = 0x0a5a;
- t.ghook = 0x0260;
- t.ghzsquare = 0x3393;
- t.gihiragana = 0x304e;
- t.gikatakana = 0x30ae;
- t.gimarmenian = 0x0563;
- t.gimel = 0x05d2;
- t.gimeldagesh = 0xfb32;
- t.gimeldageshhebrew = 0xfb32;
- t.gimelhebrew = 0x05d2;
- t.gjecyrillic = 0x0453;
- t.glottalinvertedstroke = 0x01be;
- t.glottalstop = 0x0294;
- t.glottalstopinverted = 0x0296;
- t.glottalstopmod = 0x02c0;
- t.glottalstopreversed = 0x0295;
- t.glottalstopreversedmod = 0x02c1;
- t.glottalstopreversedsuperior = 0x02e4;
- t.glottalstopstroke = 0x02a1;
- t.glottalstopstrokereversed = 0x02a2;
- t.gmacron = 0x1e21;
- t.gmonospace = 0xff47;
- t.gohiragana = 0x3054;
- t.gokatakana = 0x30b4;
- t.gparen = 0x24a2;
- t.gpasquare = 0x33ac;
- t.gradient = 0x2207;
- t.grave = 0x0060;
- t.gravebelowcmb = 0x0316;
- t.gravecmb = 0x0300;
- t.gravecomb = 0x0300;
- t.gravedeva = 0x0953;
- t.gravelowmod = 0x02ce;
- t.gravemonospace = 0xff40;
- t.gravetonecmb = 0x0340;
- t.greater = 0x003e;
- t.greaterequal = 0x2265;
- t.greaterequalorless = 0x22db;
- t.greatermonospace = 0xff1e;
- t.greaterorequivalent = 0x2273;
- t.greaterorless = 0x2277;
- t.greateroverequal = 0x2267;
- t.greatersmall = 0xfe65;
- t.gscript = 0x0261;
- t.gstroke = 0x01e5;
- t.guhiragana = 0x3050;
- t.guillemotleft = 0x00ab;
- t.guillemotright = 0x00bb;
- t.guilsinglleft = 0x2039;
- t.guilsinglright = 0x203a;
- t.gukatakana = 0x30b0;
- t.guramusquare = 0x3318;
- t.gysquare = 0x33c9;
- t.h = 0x0068;
- t.haabkhasiancyrillic = 0x04a9;
- t.haaltonearabic = 0x06c1;
- t.habengali = 0x09b9;
- t.hadescendercyrillic = 0x04b3;
- t.hadeva = 0x0939;
- t.hagujarati = 0x0ab9;
- t.hagurmukhi = 0x0a39;
- t.haharabic = 0x062d;
- t.hahfinalarabic = 0xfea2;
- t.hahinitialarabic = 0xfea3;
- t.hahiragana = 0x306f;
- t.hahmedialarabic = 0xfea4;
- t.haitusquare = 0x332a;
- t.hakatakana = 0x30cf;
- t.hakatakanahalfwidth = 0xff8a;
- t.halantgurmukhi = 0x0a4d;
- t.hamzaarabic = 0x0621;
- t.hamzalowarabic = 0x0621;
- t.hangulfiller = 0x3164;
- t.hardsigncyrillic = 0x044a;
- t.harpoonleftbarbup = 0x21bc;
- t.harpoonrightbarbup = 0x21c0;
- t.hasquare = 0x33ca;
- t.hatafpatah = 0x05b2;
- t.hatafpatah16 = 0x05b2;
- t.hatafpatah23 = 0x05b2;
- t.hatafpatah2f = 0x05b2;
- t.hatafpatahhebrew = 0x05b2;
- t.hatafpatahnarrowhebrew = 0x05b2;
- t.hatafpatahquarterhebrew = 0x05b2;
- t.hatafpatahwidehebrew = 0x05b2;
- t.hatafqamats = 0x05b3;
- t.hatafqamats1b = 0x05b3;
- t.hatafqamats28 = 0x05b3;
- t.hatafqamats34 = 0x05b3;
- t.hatafqamatshebrew = 0x05b3;
- t.hatafqamatsnarrowhebrew = 0x05b3;
- t.hatafqamatsquarterhebrew = 0x05b3;
- t.hatafqamatswidehebrew = 0x05b3;
- t.hatafsegol = 0x05b1;
- t.hatafsegol17 = 0x05b1;
- t.hatafsegol24 = 0x05b1;
- t.hatafsegol30 = 0x05b1;
- t.hatafsegolhebrew = 0x05b1;
- t.hatafsegolnarrowhebrew = 0x05b1;
- t.hatafsegolquarterhebrew = 0x05b1;
- t.hatafsegolwidehebrew = 0x05b1;
- t.hbar = 0x0127;
- t.hbopomofo = 0x310f;
- t.hbrevebelow = 0x1e2b;
- t.hcedilla = 0x1e29;
- t.hcircle = 0x24d7;
- t.hcircumflex = 0x0125;
- t.hdieresis = 0x1e27;
- t.hdotaccent = 0x1e23;
- t.hdotbelow = 0x1e25;
- t.he = 0x05d4;
- t.heart = 0x2665;
- t.heartsuitblack = 0x2665;
- t.heartsuitwhite = 0x2661;
- t.hedagesh = 0xfb34;
- t.hedageshhebrew = 0xfb34;
- t.hehaltonearabic = 0x06c1;
- t.heharabic = 0x0647;
- t.hehebrew = 0x05d4;
- t.hehfinalaltonearabic = 0xfba7;
- t.hehfinalalttwoarabic = 0xfeea;
- t.hehfinalarabic = 0xfeea;
- t.hehhamzaabovefinalarabic = 0xfba5;
- t.hehhamzaaboveisolatedarabic = 0xfba4;
- t.hehinitialaltonearabic = 0xfba8;
- t.hehinitialarabic = 0xfeeb;
- t.hehiragana = 0x3078;
- t.hehmedialaltonearabic = 0xfba9;
- t.hehmedialarabic = 0xfeec;
- t.heiseierasquare = 0x337b;
- t.hekatakana = 0x30d8;
- t.hekatakanahalfwidth = 0xff8d;
- t.hekutaarusquare = 0x3336;
- t.henghook = 0x0267;
- t.herutusquare = 0x3339;
- t.het = 0x05d7;
- t.hethebrew = 0x05d7;
- t.hhook = 0x0266;
- t.hhooksuperior = 0x02b1;
- t.hieuhacirclekorean = 0x327b;
- t.hieuhaparenkorean = 0x321b;
- t.hieuhcirclekorean = 0x326d;
- t.hieuhkorean = 0x314e;
- t.hieuhparenkorean = 0x320d;
- t.hihiragana = 0x3072;
- t.hikatakana = 0x30d2;
- t.hikatakanahalfwidth = 0xff8b;
- t.hiriq = 0x05b4;
- t.hiriq14 = 0x05b4;
- t.hiriq21 = 0x05b4;
- t.hiriq2d = 0x05b4;
- t.hiriqhebrew = 0x05b4;
- t.hiriqnarrowhebrew = 0x05b4;
- t.hiriqquarterhebrew = 0x05b4;
- t.hiriqwidehebrew = 0x05b4;
- t.hlinebelow = 0x1e96;
- t.hmonospace = 0xff48;
- t.hoarmenian = 0x0570;
- t.hohipthai = 0x0e2b;
- t.hohiragana = 0x307b;
- t.hokatakana = 0x30db;
- t.hokatakanahalfwidth = 0xff8e;
- t.holam = 0x05b9;
- t.holam19 = 0x05b9;
- t.holam26 = 0x05b9;
- t.holam32 = 0x05b9;
- t.holamhebrew = 0x05b9;
- t.holamnarrowhebrew = 0x05b9;
- t.holamquarterhebrew = 0x05b9;
- t.holamwidehebrew = 0x05b9;
- t.honokhukthai = 0x0e2e;
- t.hookabovecomb = 0x0309;
- t.hookcmb = 0x0309;
- t.hookpalatalizedbelowcmb = 0x0321;
- t.hookretroflexbelowcmb = 0x0322;
- t.hoonsquare = 0x3342;
- t.horicoptic = 0x03e9;
- t.horizontalbar = 0x2015;
- t.horncmb = 0x031b;
- t.hotsprings = 0x2668;
- t.house = 0x2302;
- t.hparen = 0x24a3;
- t.hsuperior = 0x02b0;
- t.hturned = 0x0265;
- t.huhiragana = 0x3075;
- t.huiitosquare = 0x3333;
- t.hukatakana = 0x30d5;
- t.hukatakanahalfwidth = 0xff8c;
- t.hungarumlaut = 0x02dd;
- t.hungarumlautcmb = 0x030b;
- t.hv = 0x0195;
- t.hyphen = 0x002d;
- t.hypheninferior = 0xf6e5;
- t.hyphenmonospace = 0xff0d;
- t.hyphensmall = 0xfe63;
- t.hyphensuperior = 0xf6e6;
- t.hyphentwo = 0x2010;
- t.i = 0x0069;
- t.iacute = 0x00ed;
- t.iacyrillic = 0x044f;
- t.ibengali = 0x0987;
- t.ibopomofo = 0x3127;
- t.ibreve = 0x012d;
- t.icaron = 0x01d0;
- t.icircle = 0x24d8;
- t.icircumflex = 0x00ee;
- t.icyrillic = 0x0456;
- t.idblgrave = 0x0209;
- t.ideographearthcircle = 0x328f;
- t.ideographfirecircle = 0x328b;
- t.ideographicallianceparen = 0x323f;
- t.ideographiccallparen = 0x323a;
- t.ideographiccentrecircle = 0x32a5;
- t.ideographicclose = 0x3006;
- t.ideographiccomma = 0x3001;
- t.ideographiccommaleft = 0xff64;
- t.ideographiccongratulationparen = 0x3237;
- t.ideographiccorrectcircle = 0x32a3;
- t.ideographicearthparen = 0x322f;
- t.ideographicenterpriseparen = 0x323d;
- t.ideographicexcellentcircle = 0x329d;
- t.ideographicfestivalparen = 0x3240;
- t.ideographicfinancialcircle = 0x3296;
- t.ideographicfinancialparen = 0x3236;
- t.ideographicfireparen = 0x322b;
- t.ideographichaveparen = 0x3232;
- t.ideographichighcircle = 0x32a4;
- t.ideographiciterationmark = 0x3005;
- t.ideographiclaborcircle = 0x3298;
- t.ideographiclaborparen = 0x3238;
- t.ideographicleftcircle = 0x32a7;
- t.ideographiclowcircle = 0x32a6;
- t.ideographicmedicinecircle = 0x32a9;
- t.ideographicmetalparen = 0x322e;
- t.ideographicmoonparen = 0x322a;
- t.ideographicnameparen = 0x3234;
- t.ideographicperiod = 0x3002;
- t.ideographicprintcircle = 0x329e;
- t.ideographicreachparen = 0x3243;
- t.ideographicrepresentparen = 0x3239;
- t.ideographicresourceparen = 0x323e;
- t.ideographicrightcircle = 0x32a8;
- t.ideographicsecretcircle = 0x3299;
- t.ideographicselfparen = 0x3242;
- t.ideographicsocietyparen = 0x3233;
- t.ideographicspace = 0x3000;
- t.ideographicspecialparen = 0x3235;
- t.ideographicstockparen = 0x3231;
- t.ideographicstudyparen = 0x323b;
- t.ideographicsunparen = 0x3230;
- t.ideographicsuperviseparen = 0x323c;
- t.ideographicwaterparen = 0x322c;
- t.ideographicwoodparen = 0x322d;
- t.ideographiczero = 0x3007;
- t.ideographmetalcircle = 0x328e;
- t.ideographmooncircle = 0x328a;
- t.ideographnamecircle = 0x3294;
- t.ideographsuncircle = 0x3290;
- t.ideographwatercircle = 0x328c;
- t.ideographwoodcircle = 0x328d;
- t.ideva = 0x0907;
- t.idieresis = 0x00ef;
- t.idieresisacute = 0x1e2f;
- t.idieresiscyrillic = 0x04e5;
- t.idotbelow = 0x1ecb;
- t.iebrevecyrillic = 0x04d7;
- t.iecyrillic = 0x0435;
- t.ieungacirclekorean = 0x3275;
- t.ieungaparenkorean = 0x3215;
- t.ieungcirclekorean = 0x3267;
- t.ieungkorean = 0x3147;
- t.ieungparenkorean = 0x3207;
- t.igrave = 0x00ec;
- t.igujarati = 0x0a87;
- t.igurmukhi = 0x0a07;
- t.ihiragana = 0x3044;
- t.ihookabove = 0x1ec9;
- t.iibengali = 0x0988;
- t.iicyrillic = 0x0438;
- t.iideva = 0x0908;
- t.iigujarati = 0x0a88;
- t.iigurmukhi = 0x0a08;
- t.iimatragurmukhi = 0x0a40;
- t.iinvertedbreve = 0x020b;
- t.iishortcyrillic = 0x0439;
- t.iivowelsignbengali = 0x09c0;
- t.iivowelsigndeva = 0x0940;
- t.iivowelsigngujarati = 0x0ac0;
- t.ij = 0x0133;
- t.ikatakana = 0x30a4;
- t.ikatakanahalfwidth = 0xff72;
- t.ikorean = 0x3163;
- t.ilde = 0x02dc;
- t.iluyhebrew = 0x05ac;
- t.imacron = 0x012b;
- t.imacroncyrillic = 0x04e3;
- t.imageorapproximatelyequal = 0x2253;
- t.imatragurmukhi = 0x0a3f;
- t.imonospace = 0xff49;
- t.increment = 0x2206;
- t.infinity = 0x221e;
- t.iniarmenian = 0x056b;
- t.integral = 0x222b;
- t.integralbottom = 0x2321;
- t.integralbt = 0x2321;
- t.integralex = 0xf8f5;
- t.integraltop = 0x2320;
- t.integraltp = 0x2320;
- t.intersection = 0x2229;
- t.intisquare = 0x3305;
- t.invbullet = 0x25d8;
- t.invcircle = 0x25d9;
- t.invsmileface = 0x263b;
- t.iocyrillic = 0x0451;
- t.iogonek = 0x012f;
- t.iota = 0x03b9;
- t.iotadieresis = 0x03ca;
- t.iotadieresistonos = 0x0390;
- t.iotalatin = 0x0269;
- t.iotatonos = 0x03af;
- t.iparen = 0x24a4;
- t.irigurmukhi = 0x0a72;
- t.ismallhiragana = 0x3043;
- t.ismallkatakana = 0x30a3;
- t.ismallkatakanahalfwidth = 0xff68;
- t.issharbengali = 0x09fa;
- t.istroke = 0x0268;
- t.isuperior = 0xf6ed;
- t.iterationhiragana = 0x309d;
- t.iterationkatakana = 0x30fd;
- t.itilde = 0x0129;
- t.itildebelow = 0x1e2d;
- t.iubopomofo = 0x3129;
- t.iucyrillic = 0x044e;
- t.ivowelsignbengali = 0x09bf;
- t.ivowelsigndeva = 0x093f;
- t.ivowelsigngujarati = 0x0abf;
- t.izhitsacyrillic = 0x0475;
- t.izhitsadblgravecyrillic = 0x0477;
- t.j = 0x006a;
- t.jaarmenian = 0x0571;
- t.jabengali = 0x099c;
- t.jadeva = 0x091c;
- t.jagujarati = 0x0a9c;
- t.jagurmukhi = 0x0a1c;
- t.jbopomofo = 0x3110;
- t.jcaron = 0x01f0;
- t.jcircle = 0x24d9;
- t.jcircumflex = 0x0135;
- t.jcrossedtail = 0x029d;
- t.jdotlessstroke = 0x025f;
- t.jecyrillic = 0x0458;
- t.jeemarabic = 0x062c;
- t.jeemfinalarabic = 0xfe9e;
- t.jeeminitialarabic = 0xfe9f;
- t.jeemmedialarabic = 0xfea0;
- t.jeharabic = 0x0698;
- t.jehfinalarabic = 0xfb8b;
- t.jhabengali = 0x099d;
- t.jhadeva = 0x091d;
- t.jhagujarati = 0x0a9d;
- t.jhagurmukhi = 0x0a1d;
- t.jheharmenian = 0x057b;
- t.jis = 0x3004;
- t.jmonospace = 0xff4a;
- t.jparen = 0x24a5;
- t.jsuperior = 0x02b2;
- t.k = 0x006b;
- t.kabashkircyrillic = 0x04a1;
- t.kabengali = 0x0995;
- t.kacute = 0x1e31;
- t.kacyrillic = 0x043a;
- t.kadescendercyrillic = 0x049b;
- t.kadeva = 0x0915;
- t.kaf = 0x05db;
- t.kafarabic = 0x0643;
- t.kafdagesh = 0xfb3b;
- t.kafdageshhebrew = 0xfb3b;
- t.kaffinalarabic = 0xfeda;
- t.kafhebrew = 0x05db;
- t.kafinitialarabic = 0xfedb;
- t.kafmedialarabic = 0xfedc;
- t.kafrafehebrew = 0xfb4d;
- t.kagujarati = 0x0a95;
- t.kagurmukhi = 0x0a15;
- t.kahiragana = 0x304b;
- t.kahookcyrillic = 0x04c4;
- t.kakatakana = 0x30ab;
- t.kakatakanahalfwidth = 0xff76;
- t.kappa = 0x03ba;
- t.kappasymbolgreek = 0x03f0;
- t.kapyeounmieumkorean = 0x3171;
- t.kapyeounphieuphkorean = 0x3184;
- t.kapyeounpieupkorean = 0x3178;
- t.kapyeounssangpieupkorean = 0x3179;
- t.karoriisquare = 0x330d;
- t.kashidaautoarabic = 0x0640;
- t.kashidaautonosidebearingarabic = 0x0640;
- t.kasmallkatakana = 0x30f5;
- t.kasquare = 0x3384;
- t.kasraarabic = 0x0650;
- t.kasratanarabic = 0x064d;
- t.kastrokecyrillic = 0x049f;
- t.katahiraprolongmarkhalfwidth = 0xff70;
- t.kaverticalstrokecyrillic = 0x049d;
- t.kbopomofo = 0x310e;
- t.kcalsquare = 0x3389;
- t.kcaron = 0x01e9;
- t.kcedilla = 0x0137;
- t.kcircle = 0x24da;
- t.kcommaaccent = 0x0137;
- t.kdotbelow = 0x1e33;
- t.keharmenian = 0x0584;
- t.kehiragana = 0x3051;
- t.kekatakana = 0x30b1;
- t.kekatakanahalfwidth = 0xff79;
- t.kenarmenian = 0x056f;
- t.kesmallkatakana = 0x30f6;
- t.kgreenlandic = 0x0138;
- t.khabengali = 0x0996;
- t.khacyrillic = 0x0445;
- t.khadeva = 0x0916;
- t.khagujarati = 0x0a96;
- t.khagurmukhi = 0x0a16;
- t.khaharabic = 0x062e;
- t.khahfinalarabic = 0xfea6;
- t.khahinitialarabic = 0xfea7;
- t.khahmedialarabic = 0xfea8;
- t.kheicoptic = 0x03e7;
- t.khhadeva = 0x0959;
- t.khhagurmukhi = 0x0a59;
- t.khieukhacirclekorean = 0x3278;
- t.khieukhaparenkorean = 0x3218;
- t.khieukhcirclekorean = 0x326a;
- t.khieukhkorean = 0x314b;
- t.khieukhparenkorean = 0x320a;
- t.khokhaithai = 0x0e02;
- t.khokhonthai = 0x0e05;
- t.khokhuatthai = 0x0e03;
- t.khokhwaithai = 0x0e04;
- t.khomutthai = 0x0e5b;
- t.khook = 0x0199;
- t.khorakhangthai = 0x0e06;
- t.khzsquare = 0x3391;
- t.kihiragana = 0x304d;
- t.kikatakana = 0x30ad;
- t.kikatakanahalfwidth = 0xff77;
- t.kiroguramusquare = 0x3315;
- t.kiromeetorusquare = 0x3316;
- t.kirosquare = 0x3314;
- t.kiyeokacirclekorean = 0x326e;
- t.kiyeokaparenkorean = 0x320e;
- t.kiyeokcirclekorean = 0x3260;
- t.kiyeokkorean = 0x3131;
- t.kiyeokparenkorean = 0x3200;
- t.kiyeoksioskorean = 0x3133;
- t.kjecyrillic = 0x045c;
- t.klinebelow = 0x1e35;
- t.klsquare = 0x3398;
- t.kmcubedsquare = 0x33a6;
- t.kmonospace = 0xff4b;
- t.kmsquaredsquare = 0x33a2;
- t.kohiragana = 0x3053;
- t.kohmsquare = 0x33c0;
- t.kokaithai = 0x0e01;
- t.kokatakana = 0x30b3;
- t.kokatakanahalfwidth = 0xff7a;
- t.kooposquare = 0x331e;
- t.koppacyrillic = 0x0481;
- t.koreanstandardsymbol = 0x327f;
- t.koroniscmb = 0x0343;
- t.kparen = 0x24a6;
- t.kpasquare = 0x33aa;
- t.ksicyrillic = 0x046f;
- t.ktsquare = 0x33cf;
- t.kturned = 0x029e;
- t.kuhiragana = 0x304f;
- t.kukatakana = 0x30af;
- t.kukatakanahalfwidth = 0xff78;
- t.kvsquare = 0x33b8;
- t.kwsquare = 0x33be;
- t.l = 0x006c;
- t.labengali = 0x09b2;
- t.lacute = 0x013a;
- t.ladeva = 0x0932;
- t.lagujarati = 0x0ab2;
- t.lagurmukhi = 0x0a32;
- t.lakkhangyaothai = 0x0e45;
- t.lamaleffinalarabic = 0xfefc;
- t.lamalefhamzaabovefinalarabic = 0xfef8;
- t.lamalefhamzaaboveisolatedarabic = 0xfef7;
- t.lamalefhamzabelowfinalarabic = 0xfefa;
- t.lamalefhamzabelowisolatedarabic = 0xfef9;
- t.lamalefisolatedarabic = 0xfefb;
- t.lamalefmaddaabovefinalarabic = 0xfef6;
- t.lamalefmaddaaboveisolatedarabic = 0xfef5;
- t.lamarabic = 0x0644;
- t.lambda = 0x03bb;
- t.lambdastroke = 0x019b;
- t.lamed = 0x05dc;
- t.lameddagesh = 0xfb3c;
- t.lameddageshhebrew = 0xfb3c;
- t.lamedhebrew = 0x05dc;
- t.lamfinalarabic = 0xfede;
- t.lamhahinitialarabic = 0xfcca;
- t.laminitialarabic = 0xfedf;
- t.lamjeeminitialarabic = 0xfcc9;
- t.lamkhahinitialarabic = 0xfccb;
- t.lamlamhehisolatedarabic = 0xfdf2;
- t.lammedialarabic = 0xfee0;
- t.lammeemhahinitialarabic = 0xfd88;
- t.lammeeminitialarabic = 0xfccc;
- t.largecircle = 0x25ef;
- t.lbar = 0x019a;
- t.lbelt = 0x026c;
- t.lbopomofo = 0x310c;
- t.lcaron = 0x013e;
- t.lcedilla = 0x013c;
- t.lcircle = 0x24db;
- t.lcircumflexbelow = 0x1e3d;
- t.lcommaaccent = 0x013c;
- t.ldot = 0x0140;
- t.ldotaccent = 0x0140;
- t.ldotbelow = 0x1e37;
- t.ldotbelowmacron = 0x1e39;
- t.leftangleabovecmb = 0x031a;
- t.lefttackbelowcmb = 0x0318;
- t.less = 0x003c;
- t.lessequal = 0x2264;
- t.lessequalorgreater = 0x22da;
- t.lessmonospace = 0xff1c;
- t.lessorequivalent = 0x2272;
- t.lessorgreater = 0x2276;
- t.lessoverequal = 0x2266;
- t.lesssmall = 0xfe64;
- t.lezh = 0x026e;
- t.lfblock = 0x258c;
- t.lhookretroflex = 0x026d;
- t.lira = 0x20a4;
- t.liwnarmenian = 0x056c;
- t.lj = 0x01c9;
- t.ljecyrillic = 0x0459;
- t.ll = 0xf6c0;
- t.lladeva = 0x0933;
- t.llagujarati = 0x0ab3;
- t.llinebelow = 0x1e3b;
- t.llladeva = 0x0934;
- t.llvocalicbengali = 0x09e1;
- t.llvocalicdeva = 0x0961;
- t.llvocalicvowelsignbengali = 0x09e3;
- t.llvocalicvowelsigndeva = 0x0963;
- t.lmiddletilde = 0x026b;
- t.lmonospace = 0xff4c;
- t.lmsquare = 0x33d0;
- t.lochulathai = 0x0e2c;
- t.logicaland = 0x2227;
- t.logicalnot = 0x00ac;
- t.logicalnotreversed = 0x2310;
- t.logicalor = 0x2228;
- t.lolingthai = 0x0e25;
- t.longs = 0x017f;
- t.lowlinecenterline = 0xfe4e;
- t.lowlinecmb = 0x0332;
- t.lowlinedashed = 0xfe4d;
- t.lozenge = 0x25ca;
- t.lparen = 0x24a7;
- t.lslash = 0x0142;
- t.lsquare = 0x2113;
- t.lsuperior = 0xf6ee;
- t.ltshade = 0x2591;
- t.luthai = 0x0e26;
- t.lvocalicbengali = 0x098c;
- t.lvocalicdeva = 0x090c;
- t.lvocalicvowelsignbengali = 0x09e2;
- t.lvocalicvowelsigndeva = 0x0962;
- t.lxsquare = 0x33d3;
- t.m = 0x006d;
- t.mabengali = 0x09ae;
- t.macron = 0x00af;
- t.macronbelowcmb = 0x0331;
- t.macroncmb = 0x0304;
- t.macronlowmod = 0x02cd;
- t.macronmonospace = 0xffe3;
- t.macute = 0x1e3f;
- t.madeva = 0x092e;
- t.magujarati = 0x0aae;
- t.magurmukhi = 0x0a2e;
- t.mahapakhhebrew = 0x05a4;
- t.mahapakhlefthebrew = 0x05a4;
- t.mahiragana = 0x307e;
- t.maichattawalowleftthai = 0xf895;
- t.maichattawalowrightthai = 0xf894;
- t.maichattawathai = 0x0e4b;
- t.maichattawaupperleftthai = 0xf893;
- t.maieklowleftthai = 0xf88c;
- t.maieklowrightthai = 0xf88b;
- t.maiekthai = 0x0e48;
- t.maiekupperleftthai = 0xf88a;
- t.maihanakatleftthai = 0xf884;
- t.maihanakatthai = 0x0e31;
- t.maitaikhuleftthai = 0xf889;
- t.maitaikhuthai = 0x0e47;
- t.maitholowleftthai = 0xf88f;
- t.maitholowrightthai = 0xf88e;
- t.maithothai = 0x0e49;
- t.maithoupperleftthai = 0xf88d;
- t.maitrilowleftthai = 0xf892;
- t.maitrilowrightthai = 0xf891;
- t.maitrithai = 0x0e4a;
- t.maitriupperleftthai = 0xf890;
- t.maiyamokthai = 0x0e46;
- t.makatakana = 0x30de;
- t.makatakanahalfwidth = 0xff8f;
- t.male = 0x2642;
- t.mansyonsquare = 0x3347;
- t.maqafhebrew = 0x05be;
- t.mars = 0x2642;
- t.masoracirclehebrew = 0x05af;
- t.masquare = 0x3383;
- t.mbopomofo = 0x3107;
- t.mbsquare = 0x33d4;
- t.mcircle = 0x24dc;
- t.mcubedsquare = 0x33a5;
- t.mdotaccent = 0x1e41;
- t.mdotbelow = 0x1e43;
- t.meemarabic = 0x0645;
- t.meemfinalarabic = 0xfee2;
- t.meeminitialarabic = 0xfee3;
- t.meemmedialarabic = 0xfee4;
- t.meemmeeminitialarabic = 0xfcd1;
- t.meemmeemisolatedarabic = 0xfc48;
- t.meetorusquare = 0x334d;
- t.mehiragana = 0x3081;
- t.meizierasquare = 0x337e;
- t.mekatakana = 0x30e1;
- t.mekatakanahalfwidth = 0xff92;
- t.mem = 0x05de;
- t.memdagesh = 0xfb3e;
- t.memdageshhebrew = 0xfb3e;
- t.memhebrew = 0x05de;
- t.menarmenian = 0x0574;
- t.merkhahebrew = 0x05a5;
- t.merkhakefulahebrew = 0x05a6;
- t.merkhakefulalefthebrew = 0x05a6;
- t.merkhalefthebrew = 0x05a5;
- t.mhook = 0x0271;
- t.mhzsquare = 0x3392;
- t.middledotkatakanahalfwidth = 0xff65;
- t.middot = 0x00b7;
- t.mieumacirclekorean = 0x3272;
- t.mieumaparenkorean = 0x3212;
- t.mieumcirclekorean = 0x3264;
- t.mieumkorean = 0x3141;
- t.mieumpansioskorean = 0x3170;
- t.mieumparenkorean = 0x3204;
- t.mieumpieupkorean = 0x316e;
- t.mieumsioskorean = 0x316f;
- t.mihiragana = 0x307f;
- t.mikatakana = 0x30df;
- t.mikatakanahalfwidth = 0xff90;
- t.minus = 0x2212;
- t.minusbelowcmb = 0x0320;
- t.minuscircle = 0x2296;
- t.minusmod = 0x02d7;
- t.minusplus = 0x2213;
- t.minute = 0x2032;
- t.miribaarusquare = 0x334a;
- t.mirisquare = 0x3349;
- t.mlonglegturned = 0x0270;
- t.mlsquare = 0x3396;
- t.mmcubedsquare = 0x33a3;
- t.mmonospace = 0xff4d;
- t.mmsquaredsquare = 0x339f;
- t.mohiragana = 0x3082;
- t.mohmsquare = 0x33c1;
- t.mokatakana = 0x30e2;
- t.mokatakanahalfwidth = 0xff93;
- t.molsquare = 0x33d6;
- t.momathai = 0x0e21;
- t.moverssquare = 0x33a7;
- t.moverssquaredsquare = 0x33a8;
- t.mparen = 0x24a8;
- t.mpasquare = 0x33ab;
- t.mssquare = 0x33b3;
- t.msuperior = 0xf6ef;
- t.mturned = 0x026f;
- t.mu = 0x00b5;
- t.mu1 = 0x00b5;
- t.muasquare = 0x3382;
- t.muchgreater = 0x226b;
- t.muchless = 0x226a;
- t.mufsquare = 0x338c;
- t.mugreek = 0x03bc;
- t.mugsquare = 0x338d;
- t.muhiragana = 0x3080;
- t.mukatakana = 0x30e0;
- t.mukatakanahalfwidth = 0xff91;
- t.mulsquare = 0x3395;
- t.multiply = 0x00d7;
- t.mumsquare = 0x339b;
- t.munahhebrew = 0x05a3;
- t.munahlefthebrew = 0x05a3;
- t.musicalnote = 0x266a;
- t.musicalnotedbl = 0x266b;
- t.musicflatsign = 0x266d;
- t.musicsharpsign = 0x266f;
- t.mussquare = 0x33b2;
- t.muvsquare = 0x33b6;
- t.muwsquare = 0x33bc;
- t.mvmegasquare = 0x33b9;
- t.mvsquare = 0x33b7;
- t.mwmegasquare = 0x33bf;
- t.mwsquare = 0x33bd;
- t.n = 0x006e;
- t.nabengali = 0x09a8;
- t.nabla = 0x2207;
- t.nacute = 0x0144;
- t.nadeva = 0x0928;
- t.nagujarati = 0x0aa8;
- t.nagurmukhi = 0x0a28;
- t.nahiragana = 0x306a;
- t.nakatakana = 0x30ca;
- t.nakatakanahalfwidth = 0xff85;
- t.napostrophe = 0x0149;
- t.nasquare = 0x3381;
- t.nbopomofo = 0x310b;
- t.nbspace = 0x00a0;
- t.ncaron = 0x0148;
- t.ncedilla = 0x0146;
- t.ncircle = 0x24dd;
- t.ncircumflexbelow = 0x1e4b;
- t.ncommaaccent = 0x0146;
- t.ndotaccent = 0x1e45;
- t.ndotbelow = 0x1e47;
- t.nehiragana = 0x306d;
- t.nekatakana = 0x30cd;
- t.nekatakanahalfwidth = 0xff88;
- t.newsheqelsign = 0x20aa;
- t.nfsquare = 0x338b;
- t.ngabengali = 0x0999;
- t.ngadeva = 0x0919;
- t.ngagujarati = 0x0a99;
- t.ngagurmukhi = 0x0a19;
- t.ngonguthai = 0x0e07;
- t.nhiragana = 0x3093;
- t.nhookleft = 0x0272;
- t.nhookretroflex = 0x0273;
- t.nieunacirclekorean = 0x326f;
- t.nieunaparenkorean = 0x320f;
- t.nieuncieuckorean = 0x3135;
- t.nieuncirclekorean = 0x3261;
- t.nieunhieuhkorean = 0x3136;
- t.nieunkorean = 0x3134;
- t.nieunpansioskorean = 0x3168;
- t.nieunparenkorean = 0x3201;
- t.nieunsioskorean = 0x3167;
- t.nieuntikeutkorean = 0x3166;
- t.nihiragana = 0x306b;
- t.nikatakana = 0x30cb;
- t.nikatakanahalfwidth = 0xff86;
- t.nikhahitleftthai = 0xf899;
- t.nikhahitthai = 0x0e4d;
- t.nine = 0x0039;
- t.ninearabic = 0x0669;
- t.ninebengali = 0x09ef;
- t.ninecircle = 0x2468;
- t.ninecircleinversesansserif = 0x2792;
- t.ninedeva = 0x096f;
- t.ninegujarati = 0x0aef;
- t.ninegurmukhi = 0x0a6f;
- t.ninehackarabic = 0x0669;
- t.ninehangzhou = 0x3029;
- t.nineideographicparen = 0x3228;
- t.nineinferior = 0x2089;
- t.ninemonospace = 0xff19;
- t.nineoldstyle = 0xf739;
- t.nineparen = 0x247c;
- t.nineperiod = 0x2490;
- t.ninepersian = 0x06f9;
- t.nineroman = 0x2178;
- t.ninesuperior = 0x2079;
- t.nineteencircle = 0x2472;
- t.nineteenparen = 0x2486;
- t.nineteenperiod = 0x249a;
- t.ninethai = 0x0e59;
- t.nj = 0x01cc;
- t.njecyrillic = 0x045a;
- t.nkatakana = 0x30f3;
- t.nkatakanahalfwidth = 0xff9d;
- t.nlegrightlong = 0x019e;
- t.nlinebelow = 0x1e49;
- t.nmonospace = 0xff4e;
- t.nmsquare = 0x339a;
- t.nnabengali = 0x09a3;
- t.nnadeva = 0x0923;
- t.nnagujarati = 0x0aa3;
- t.nnagurmukhi = 0x0a23;
- t.nnnadeva = 0x0929;
- t.nohiragana = 0x306e;
- t.nokatakana = 0x30ce;
- t.nokatakanahalfwidth = 0xff89;
- t.nonbreakingspace = 0x00a0;
- t.nonenthai = 0x0e13;
- t.nonuthai = 0x0e19;
- t.noonarabic = 0x0646;
- t.noonfinalarabic = 0xfee6;
- t.noonghunnaarabic = 0x06ba;
- t.noonghunnafinalarabic = 0xfb9f;
- t.nooninitialarabic = 0xfee7;
- t.noonjeeminitialarabic = 0xfcd2;
- t.noonjeemisolatedarabic = 0xfc4b;
- t.noonmedialarabic = 0xfee8;
- t.noonmeeminitialarabic = 0xfcd5;
- t.noonmeemisolatedarabic = 0xfc4e;
- t.noonnoonfinalarabic = 0xfc8d;
- t.notcontains = 0x220c;
- t.notelement = 0x2209;
- t.notelementof = 0x2209;
- t.notequal = 0x2260;
- t.notgreater = 0x226f;
- t.notgreaternorequal = 0x2271;
- t.notgreaternorless = 0x2279;
- t.notidentical = 0x2262;
- t.notless = 0x226e;
- t.notlessnorequal = 0x2270;
- t.notparallel = 0x2226;
- t.notprecedes = 0x2280;
- t.notsubset = 0x2284;
- t.notsucceeds = 0x2281;
- t.notsuperset = 0x2285;
- t.nowarmenian = 0x0576;
- t.nparen = 0x24a9;
- t.nssquare = 0x33b1;
- t.nsuperior = 0x207f;
- t.ntilde = 0x00f1;
- t.nu = 0x03bd;
- t.nuhiragana = 0x306c;
- t.nukatakana = 0x30cc;
- t.nukatakanahalfwidth = 0xff87;
- t.nuktabengali = 0x09bc;
- t.nuktadeva = 0x093c;
- t.nuktagujarati = 0x0abc;
- t.nuktagurmukhi = 0x0a3c;
- t.numbersign = 0x0023;
- t.numbersignmonospace = 0xff03;
- t.numbersignsmall = 0xfe5f;
- t.numeralsigngreek = 0x0374;
- t.numeralsignlowergreek = 0x0375;
- t.numero = 0x2116;
- t.nun = 0x05e0;
- t.nundagesh = 0xfb40;
- t.nundageshhebrew = 0xfb40;
- t.nunhebrew = 0x05e0;
- t.nvsquare = 0x33b5;
- t.nwsquare = 0x33bb;
- t.nyabengali = 0x099e;
- t.nyadeva = 0x091e;
- t.nyagujarati = 0x0a9e;
- t.nyagurmukhi = 0x0a1e;
- t.o = 0x006f;
- t.oacute = 0x00f3;
- t.oangthai = 0x0e2d;
- t.obarred = 0x0275;
- t.obarredcyrillic = 0x04e9;
- t.obarreddieresiscyrillic = 0x04eb;
- t.obengali = 0x0993;
- t.obopomofo = 0x311b;
- t.obreve = 0x014f;
- t.ocandradeva = 0x0911;
- t.ocandragujarati = 0x0a91;
- t.ocandravowelsigndeva = 0x0949;
- t.ocandravowelsigngujarati = 0x0ac9;
- t.ocaron = 0x01d2;
- t.ocircle = 0x24de;
- t.ocircumflex = 0x00f4;
- t.ocircumflexacute = 0x1ed1;
- t.ocircumflexdotbelow = 0x1ed9;
- t.ocircumflexgrave = 0x1ed3;
- t.ocircumflexhookabove = 0x1ed5;
- t.ocircumflextilde = 0x1ed7;
- t.ocyrillic = 0x043e;
- t.odblacute = 0x0151;
- t.odblgrave = 0x020d;
- t.odeva = 0x0913;
- t.odieresis = 0x00f6;
- t.odieresiscyrillic = 0x04e7;
- t.odotbelow = 0x1ecd;
- t.oe = 0x0153;
- t.oekorean = 0x315a;
- t.ogonek = 0x02db;
- t.ogonekcmb = 0x0328;
- t.ograve = 0x00f2;
- t.ogujarati = 0x0a93;
- t.oharmenian = 0x0585;
- t.ohiragana = 0x304a;
- t.ohookabove = 0x1ecf;
- t.ohorn = 0x01a1;
- t.ohornacute = 0x1edb;
- t.ohorndotbelow = 0x1ee3;
- t.ohorngrave = 0x1edd;
- t.ohornhookabove = 0x1edf;
- t.ohorntilde = 0x1ee1;
- t.ohungarumlaut = 0x0151;
- t.oi = 0x01a3;
- t.oinvertedbreve = 0x020f;
- t.okatakana = 0x30aa;
- t.okatakanahalfwidth = 0xff75;
- t.okorean = 0x3157;
- t.olehebrew = 0x05ab;
- t.omacron = 0x014d;
- t.omacronacute = 0x1e53;
- t.omacrongrave = 0x1e51;
- t.omdeva = 0x0950;
- t.omega = 0x03c9;
- t.omega1 = 0x03d6;
- t.omegacyrillic = 0x0461;
- t.omegalatinclosed = 0x0277;
- t.omegaroundcyrillic = 0x047b;
- t.omegatitlocyrillic = 0x047d;
- t.omegatonos = 0x03ce;
- t.omgujarati = 0x0ad0;
- t.omicron = 0x03bf;
- t.omicrontonos = 0x03cc;
- t.omonospace = 0xff4f;
- t.one = 0x0031;
- t.onearabic = 0x0661;
- t.onebengali = 0x09e7;
- t.onecircle = 0x2460;
- t.onecircleinversesansserif = 0x278a;
- t.onedeva = 0x0967;
- t.onedotenleader = 0x2024;
- t.oneeighth = 0x215b;
- t.onefitted = 0xf6dc;
- t.onegujarati = 0x0ae7;
- t.onegurmukhi = 0x0a67;
- t.onehackarabic = 0x0661;
- t.onehalf = 0x00bd;
- t.onehangzhou = 0x3021;
- t.oneideographicparen = 0x3220;
- t.oneinferior = 0x2081;
- t.onemonospace = 0xff11;
- t.onenumeratorbengali = 0x09f4;
- t.oneoldstyle = 0xf731;
- t.oneparen = 0x2474;
- t.oneperiod = 0x2488;
- t.onepersian = 0x06f1;
- t.onequarter = 0x00bc;
- t.oneroman = 0x2170;
- t.onesuperior = 0x00b9;
- t.onethai = 0x0e51;
- t.onethird = 0x2153;
- t.oogonek = 0x01eb;
- t.oogonekmacron = 0x01ed;
- t.oogurmukhi = 0x0a13;
- t.oomatragurmukhi = 0x0a4b;
- t.oopen = 0x0254;
- t.oparen = 0x24aa;
- t.openbullet = 0x25e6;
- t.option = 0x2325;
- t.ordfeminine = 0x00aa;
- t.ordmasculine = 0x00ba;
- t.orthogonal = 0x221f;
- t.oshortdeva = 0x0912;
- t.oshortvowelsigndeva = 0x094a;
- t.oslash = 0x00f8;
- t.oslashacute = 0x01ff;
- t.osmallhiragana = 0x3049;
- t.osmallkatakana = 0x30a9;
- t.osmallkatakanahalfwidth = 0xff6b;
- t.ostrokeacute = 0x01ff;
- t.osuperior = 0xf6f0;
- t.otcyrillic = 0x047f;
- t.otilde = 0x00f5;
- t.otildeacute = 0x1e4d;
- t.otildedieresis = 0x1e4f;
- t.oubopomofo = 0x3121;
- t.overline = 0x203e;
- t.overlinecenterline = 0xfe4a;
- t.overlinecmb = 0x0305;
- t.overlinedashed = 0xfe49;
- t.overlinedblwavy = 0xfe4c;
- t.overlinewavy = 0xfe4b;
- t.overscore = 0x00af;
- t.ovowelsignbengali = 0x09cb;
- t.ovowelsigndeva = 0x094b;
- t.ovowelsigngujarati = 0x0acb;
- t.p = 0x0070;
- t.paampssquare = 0x3380;
- t.paasentosquare = 0x332b;
- t.pabengali = 0x09aa;
- t.pacute = 0x1e55;
- t.padeva = 0x092a;
- t.pagedown = 0x21df;
- t.pageup = 0x21de;
- t.pagujarati = 0x0aaa;
- t.pagurmukhi = 0x0a2a;
- t.pahiragana = 0x3071;
- t.paiyannoithai = 0x0e2f;
- t.pakatakana = 0x30d1;
- t.palatalizationcyrilliccmb = 0x0484;
- t.palochkacyrillic = 0x04c0;
- t.pansioskorean = 0x317f;
- t.paragraph = 0x00b6;
- t.parallel = 0x2225;
- t.parenleft = 0x0028;
- t.parenleftaltonearabic = 0xfd3e;
- t.parenleftbt = 0xf8ed;
- t.parenleftex = 0xf8ec;
- t.parenleftinferior = 0x208d;
- t.parenleftmonospace = 0xff08;
- t.parenleftsmall = 0xfe59;
- t.parenleftsuperior = 0x207d;
- t.parenlefttp = 0xf8eb;
- t.parenleftvertical = 0xfe35;
- t.parenright = 0x0029;
- t.parenrightaltonearabic = 0xfd3f;
- t.parenrightbt = 0xf8f8;
- t.parenrightex = 0xf8f7;
- t.parenrightinferior = 0x208e;
- t.parenrightmonospace = 0xff09;
- t.parenrightsmall = 0xfe5a;
- t.parenrightsuperior = 0x207e;
- t.parenrighttp = 0xf8f6;
- t.parenrightvertical = 0xfe36;
- t.partialdiff = 0x2202;
- t.paseqhebrew = 0x05c0;
- t.pashtahebrew = 0x0599;
- t.pasquare = 0x33a9;
- t.patah = 0x05b7;
- t.patah11 = 0x05b7;
- t.patah1d = 0x05b7;
- t.patah2a = 0x05b7;
- t.patahhebrew = 0x05b7;
- t.patahnarrowhebrew = 0x05b7;
- t.patahquarterhebrew = 0x05b7;
- t.patahwidehebrew = 0x05b7;
- t.pazerhebrew = 0x05a1;
- t.pbopomofo = 0x3106;
- t.pcircle = 0x24df;
- t.pdotaccent = 0x1e57;
- t.pe = 0x05e4;
- t.pecyrillic = 0x043f;
- t.pedagesh = 0xfb44;
- t.pedageshhebrew = 0xfb44;
- t.peezisquare = 0x333b;
- t.pefinaldageshhebrew = 0xfb43;
- t.peharabic = 0x067e;
- t.peharmenian = 0x057a;
- t.pehebrew = 0x05e4;
- t.pehfinalarabic = 0xfb57;
- t.pehinitialarabic = 0xfb58;
- t.pehiragana = 0x307a;
- t.pehmedialarabic = 0xfb59;
- t.pekatakana = 0x30da;
- t.pemiddlehookcyrillic = 0x04a7;
- t.perafehebrew = 0xfb4e;
- t.percent = 0x0025;
- t.percentarabic = 0x066a;
- t.percentmonospace = 0xff05;
- t.percentsmall = 0xfe6a;
- t.period = 0x002e;
- t.periodarmenian = 0x0589;
- t.periodcentered = 0x00b7;
- t.periodhalfwidth = 0xff61;
- t.periodinferior = 0xf6e7;
- t.periodmonospace = 0xff0e;
- t.periodsmall = 0xfe52;
- t.periodsuperior = 0xf6e8;
- t.perispomenigreekcmb = 0x0342;
- t.perpendicular = 0x22a5;
- t.perthousand = 0x2030;
- t.peseta = 0x20a7;
- t.pfsquare = 0x338a;
- t.phabengali = 0x09ab;
- t.phadeva = 0x092b;
- t.phagujarati = 0x0aab;
- t.phagurmukhi = 0x0a2b;
- t.phi = 0x03c6;
- t.phi1 = 0x03d5;
- t.phieuphacirclekorean = 0x327a;
- t.phieuphaparenkorean = 0x321a;
- t.phieuphcirclekorean = 0x326c;
- t.phieuphkorean = 0x314d;
- t.phieuphparenkorean = 0x320c;
- t.philatin = 0x0278;
- t.phinthuthai = 0x0e3a;
- t.phisymbolgreek = 0x03d5;
- t.phook = 0x01a5;
- t.phophanthai = 0x0e1e;
- t.phophungthai = 0x0e1c;
- t.phosamphaothai = 0x0e20;
- t.pi = 0x03c0;
- t.pieupacirclekorean = 0x3273;
- t.pieupaparenkorean = 0x3213;
- t.pieupcieuckorean = 0x3176;
- t.pieupcirclekorean = 0x3265;
- t.pieupkiyeokkorean = 0x3172;
- t.pieupkorean = 0x3142;
- t.pieupparenkorean = 0x3205;
- t.pieupsioskiyeokkorean = 0x3174;
- t.pieupsioskorean = 0x3144;
- t.pieupsiostikeutkorean = 0x3175;
- t.pieupthieuthkorean = 0x3177;
- t.pieuptikeutkorean = 0x3173;
- t.pihiragana = 0x3074;
- t.pikatakana = 0x30d4;
- t.pisymbolgreek = 0x03d6;
- t.piwrarmenian = 0x0583;
- t.plus = 0x002b;
- t.plusbelowcmb = 0x031f;
- t.pluscircle = 0x2295;
- t.plusminus = 0x00b1;
- t.plusmod = 0x02d6;
- t.plusmonospace = 0xff0b;
- t.plussmall = 0xfe62;
- t.plussuperior = 0x207a;
- t.pmonospace = 0xff50;
- t.pmsquare = 0x33d8;
- t.pohiragana = 0x307d;
- t.pointingindexdownwhite = 0x261f;
- t.pointingindexleftwhite = 0x261c;
- t.pointingindexrightwhite = 0x261e;
- t.pointingindexupwhite = 0x261d;
- t.pokatakana = 0x30dd;
- t.poplathai = 0x0e1b;
- t.postalmark = 0x3012;
- t.postalmarkface = 0x3020;
- t.pparen = 0x24ab;
- t.precedes = 0x227a;
- t.prescription = 0x211e;
- t.primemod = 0x02b9;
- t.primereversed = 0x2035;
- t.product = 0x220f;
- t.projective = 0x2305;
- t.prolongedkana = 0x30fc;
- t.propellor = 0x2318;
- t.propersubset = 0x2282;
- t.propersuperset = 0x2283;
- t.proportion = 0x2237;
- t.proportional = 0x221d;
- t.psi = 0x03c8;
- t.psicyrillic = 0x0471;
- t.psilipneumatacyrilliccmb = 0x0486;
- t.pssquare = 0x33b0;
- t.puhiragana = 0x3077;
- t.pukatakana = 0x30d7;
- t.pvsquare = 0x33b4;
- t.pwsquare = 0x33ba;
- t.q = 0x0071;
- t.qadeva = 0x0958;
- t.qadmahebrew = 0x05a8;
- t.qafarabic = 0x0642;
- t.qaffinalarabic = 0xfed6;
- t.qafinitialarabic = 0xfed7;
- t.qafmedialarabic = 0xfed8;
- t.qamats = 0x05b8;
- t.qamats10 = 0x05b8;
- t.qamats1a = 0x05b8;
- t.qamats1c = 0x05b8;
- t.qamats27 = 0x05b8;
- t.qamats29 = 0x05b8;
- t.qamats33 = 0x05b8;
- t.qamatsde = 0x05b8;
- t.qamatshebrew = 0x05b8;
- t.qamatsnarrowhebrew = 0x05b8;
- t.qamatsqatanhebrew = 0x05b8;
- t.qamatsqatannarrowhebrew = 0x05b8;
- t.qamatsqatanquarterhebrew = 0x05b8;
- t.qamatsqatanwidehebrew = 0x05b8;
- t.qamatsquarterhebrew = 0x05b8;
- t.qamatswidehebrew = 0x05b8;
- t.qarneyparahebrew = 0x059f;
- t.qbopomofo = 0x3111;
- t.qcircle = 0x24e0;
- t.qhook = 0x02a0;
- t.qmonospace = 0xff51;
- t.qof = 0x05e7;
- t.qofdagesh = 0xfb47;
- t.qofdageshhebrew = 0xfb47;
- t.qofhebrew = 0x05e7;
- t.qparen = 0x24ac;
- t.quarternote = 0x2669;
- t.qubuts = 0x05bb;
- t.qubuts18 = 0x05bb;
- t.qubuts25 = 0x05bb;
- t.qubuts31 = 0x05bb;
- t.qubutshebrew = 0x05bb;
- t.qubutsnarrowhebrew = 0x05bb;
- t.qubutsquarterhebrew = 0x05bb;
- t.qubutswidehebrew = 0x05bb;
- t.question = 0x003f;
- t.questionarabic = 0x061f;
- t.questionarmenian = 0x055e;
- t.questiondown = 0x00bf;
- t.questiondownsmall = 0xf7bf;
- t.questiongreek = 0x037e;
- t.questionmonospace = 0xff1f;
- t.questionsmall = 0xf73f;
- t.quotedbl = 0x0022;
- t.quotedblbase = 0x201e;
- t.quotedblleft = 0x201c;
- t.quotedblmonospace = 0xff02;
- t.quotedblprime = 0x301e;
- t.quotedblprimereversed = 0x301d;
- t.quotedblright = 0x201d;
- t.quoteleft = 0x2018;
- t.quoteleftreversed = 0x201b;
- t.quotereversed = 0x201b;
- t.quoteright = 0x2019;
- t.quoterightn = 0x0149;
- t.quotesinglbase = 0x201a;
- t.quotesingle = 0x0027;
- t.quotesinglemonospace = 0xff07;
- t.r = 0x0072;
- t.raarmenian = 0x057c;
- t.rabengali = 0x09b0;
- t.racute = 0x0155;
- t.radeva = 0x0930;
- t.radical = 0x221a;
- t.radicalex = 0xf8e5;
- t.radoverssquare = 0x33ae;
- t.radoverssquaredsquare = 0x33af;
- t.radsquare = 0x33ad;
- t.rafe = 0x05bf;
- t.rafehebrew = 0x05bf;
- t.ragujarati = 0x0ab0;
- t.ragurmukhi = 0x0a30;
- t.rahiragana = 0x3089;
- t.rakatakana = 0x30e9;
- t.rakatakanahalfwidth = 0xff97;
- t.ralowerdiagonalbengali = 0x09f1;
- t.ramiddlediagonalbengali = 0x09f0;
- t.ramshorn = 0x0264;
- t.ratio = 0x2236;
- t.rbopomofo = 0x3116;
- t.rcaron = 0x0159;
- t.rcedilla = 0x0157;
- t.rcircle = 0x24e1;
- t.rcommaaccent = 0x0157;
- t.rdblgrave = 0x0211;
- t.rdotaccent = 0x1e59;
- t.rdotbelow = 0x1e5b;
- t.rdotbelowmacron = 0x1e5d;
- t.referencemark = 0x203b;
- t.reflexsubset = 0x2286;
- t.reflexsuperset = 0x2287;
- t.registered = 0x00ae;
- t.registersans = 0xf8e8;
- t.registerserif = 0xf6da;
- t.reharabic = 0x0631;
- t.reharmenian = 0x0580;
- t.rehfinalarabic = 0xfeae;
- t.rehiragana = 0x308c;
- t.rekatakana = 0x30ec;
- t.rekatakanahalfwidth = 0xff9a;
- t.resh = 0x05e8;
- t.reshdageshhebrew = 0xfb48;
- t.reshhebrew = 0x05e8;
- t.reversedtilde = 0x223d;
- t.reviahebrew = 0x0597;
- t.reviamugrashhebrew = 0x0597;
- t.revlogicalnot = 0x2310;
- t.rfishhook = 0x027e;
- t.rfishhookreversed = 0x027f;
- t.rhabengali = 0x09dd;
- t.rhadeva = 0x095d;
- t.rho = 0x03c1;
- t.rhook = 0x027d;
- t.rhookturned = 0x027b;
- t.rhookturnedsuperior = 0x02b5;
- t.rhosymbolgreek = 0x03f1;
- t.rhotichookmod = 0x02de;
- t.rieulacirclekorean = 0x3271;
- t.rieulaparenkorean = 0x3211;
- t.rieulcirclekorean = 0x3263;
- t.rieulhieuhkorean = 0x3140;
- t.rieulkiyeokkorean = 0x313a;
- t.rieulkiyeoksioskorean = 0x3169;
- t.rieulkorean = 0x3139;
- t.rieulmieumkorean = 0x313b;
- t.rieulpansioskorean = 0x316c;
- t.rieulparenkorean = 0x3203;
- t.rieulphieuphkorean = 0x313f;
- t.rieulpieupkorean = 0x313c;
- t.rieulpieupsioskorean = 0x316b;
- t.rieulsioskorean = 0x313d;
- t.rieulthieuthkorean = 0x313e;
- t.rieultikeutkorean = 0x316a;
- t.rieulyeorinhieuhkorean = 0x316d;
- t.rightangle = 0x221f;
- t.righttackbelowcmb = 0x0319;
- t.righttriangle = 0x22bf;
- t.rihiragana = 0x308a;
- t.rikatakana = 0x30ea;
- t.rikatakanahalfwidth = 0xff98;
- t.ring = 0x02da;
- t.ringbelowcmb = 0x0325;
- t.ringcmb = 0x030a;
- t.ringhalfleft = 0x02bf;
- t.ringhalfleftarmenian = 0x0559;
- t.ringhalfleftbelowcmb = 0x031c;
- t.ringhalfleftcentered = 0x02d3;
- t.ringhalfright = 0x02be;
- t.ringhalfrightbelowcmb = 0x0339;
- t.ringhalfrightcentered = 0x02d2;
- t.rinvertedbreve = 0x0213;
- t.rittorusquare = 0x3351;
- t.rlinebelow = 0x1e5f;
- t.rlongleg = 0x027c;
- t.rlonglegturned = 0x027a;
- t.rmonospace = 0xff52;
- t.rohiragana = 0x308d;
- t.rokatakana = 0x30ed;
- t.rokatakanahalfwidth = 0xff9b;
- t.roruathai = 0x0e23;
- t.rparen = 0x24ad;
- t.rrabengali = 0x09dc;
- t.rradeva = 0x0931;
- t.rragurmukhi = 0x0a5c;
- t.rreharabic = 0x0691;
- t.rrehfinalarabic = 0xfb8d;
- t.rrvocalicbengali = 0x09e0;
- t.rrvocalicdeva = 0x0960;
- t.rrvocalicgujarati = 0x0ae0;
- t.rrvocalicvowelsignbengali = 0x09c4;
- t.rrvocalicvowelsigndeva = 0x0944;
- t.rrvocalicvowelsigngujarati = 0x0ac4;
- t.rsuperior = 0xf6f1;
- t.rtblock = 0x2590;
- t.rturned = 0x0279;
- t.rturnedsuperior = 0x02b4;
- t.ruhiragana = 0x308b;
- t.rukatakana = 0x30eb;
- t.rukatakanahalfwidth = 0xff99;
- t.rupeemarkbengali = 0x09f2;
- t.rupeesignbengali = 0x09f3;
- t.rupiah = 0xf6dd;
- t.ruthai = 0x0e24;
- t.rvocalicbengali = 0x098b;
- t.rvocalicdeva = 0x090b;
- t.rvocalicgujarati = 0x0a8b;
- t.rvocalicvowelsignbengali = 0x09c3;
- t.rvocalicvowelsigndeva = 0x0943;
- t.rvocalicvowelsigngujarati = 0x0ac3;
- t.s = 0x0073;
- t.sabengali = 0x09b8;
- t.sacute = 0x015b;
- t.sacutedotaccent = 0x1e65;
- t.sadarabic = 0x0635;
- t.sadeva = 0x0938;
- t.sadfinalarabic = 0xfeba;
- t.sadinitialarabic = 0xfebb;
- t.sadmedialarabic = 0xfebc;
- t.sagujarati = 0x0ab8;
- t.sagurmukhi = 0x0a38;
- t.sahiragana = 0x3055;
- t.sakatakana = 0x30b5;
- t.sakatakanahalfwidth = 0xff7b;
- t.sallallahoualayhewasallamarabic = 0xfdfa;
- t.samekh = 0x05e1;
- t.samekhdagesh = 0xfb41;
- t.samekhdageshhebrew = 0xfb41;
- t.samekhhebrew = 0x05e1;
- t.saraaathai = 0x0e32;
- t.saraaethai = 0x0e41;
- t.saraaimaimalaithai = 0x0e44;
- t.saraaimaimuanthai = 0x0e43;
- t.saraamthai = 0x0e33;
- t.saraathai = 0x0e30;
- t.saraethai = 0x0e40;
- t.saraiileftthai = 0xf886;
- t.saraiithai = 0x0e35;
- t.saraileftthai = 0xf885;
- t.saraithai = 0x0e34;
- t.saraothai = 0x0e42;
- t.saraueeleftthai = 0xf888;
- t.saraueethai = 0x0e37;
- t.saraueleftthai = 0xf887;
- t.sarauethai = 0x0e36;
- t.sarauthai = 0x0e38;
- t.sarauuthai = 0x0e39;
- t.sbopomofo = 0x3119;
- t.scaron = 0x0161;
- t.scarondotaccent = 0x1e67;
- t.scedilla = 0x015f;
- t.schwa = 0x0259;
- t.schwacyrillic = 0x04d9;
- t.schwadieresiscyrillic = 0x04db;
- t.schwahook = 0x025a;
- t.scircle = 0x24e2;
- t.scircumflex = 0x015d;
- t.scommaaccent = 0x0219;
- t.sdotaccent = 0x1e61;
- t.sdotbelow = 0x1e63;
- t.sdotbelowdotaccent = 0x1e69;
- t.seagullbelowcmb = 0x033c;
- t.second = 0x2033;
- t.secondtonechinese = 0x02ca;
- t.section = 0x00a7;
- t.seenarabic = 0x0633;
- t.seenfinalarabic = 0xfeb2;
- t.seeninitialarabic = 0xfeb3;
- t.seenmedialarabic = 0xfeb4;
- t.segol = 0x05b6;
- t.segol13 = 0x05b6;
- t.segol1f = 0x05b6;
- t.segol2c = 0x05b6;
- t.segolhebrew = 0x05b6;
- t.segolnarrowhebrew = 0x05b6;
- t.segolquarterhebrew = 0x05b6;
- t.segoltahebrew = 0x0592;
- t.segolwidehebrew = 0x05b6;
- t.seharmenian = 0x057d;
- t.sehiragana = 0x305b;
- t.sekatakana = 0x30bb;
- t.sekatakanahalfwidth = 0xff7e;
- t.semicolon = 0x003b;
- t.semicolonarabic = 0x061b;
- t.semicolonmonospace = 0xff1b;
- t.semicolonsmall = 0xfe54;
- t.semivoicedmarkkana = 0x309c;
- t.semivoicedmarkkanahalfwidth = 0xff9f;
- t.sentisquare = 0x3322;
- t.sentosquare = 0x3323;
- t.seven = 0x0037;
- t.sevenarabic = 0x0667;
- t.sevenbengali = 0x09ed;
- t.sevencircle = 0x2466;
- t.sevencircleinversesansserif = 0x2790;
- t.sevendeva = 0x096d;
- t.seveneighths = 0x215e;
- t.sevengujarati = 0x0aed;
- t.sevengurmukhi = 0x0a6d;
- t.sevenhackarabic = 0x0667;
- t.sevenhangzhou = 0x3027;
- t.sevenideographicparen = 0x3226;
- t.seveninferior = 0x2087;
- t.sevenmonospace = 0xff17;
- t.sevenoldstyle = 0xf737;
- t.sevenparen = 0x247a;
- t.sevenperiod = 0x248e;
- t.sevenpersian = 0x06f7;
- t.sevenroman = 0x2176;
- t.sevensuperior = 0x2077;
- t.seventeencircle = 0x2470;
- t.seventeenparen = 0x2484;
- t.seventeenperiod = 0x2498;
- t.seventhai = 0x0e57;
- t.sfthyphen = 0x00ad;
- t.shaarmenian = 0x0577;
- t.shabengali = 0x09b6;
- t.shacyrillic = 0x0448;
- t.shaddaarabic = 0x0651;
- t.shaddadammaarabic = 0xfc61;
- t.shaddadammatanarabic = 0xfc5e;
- t.shaddafathaarabic = 0xfc60;
- t.shaddakasraarabic = 0xfc62;
- t.shaddakasratanarabic = 0xfc5f;
- t.shade = 0x2592;
- t.shadedark = 0x2593;
- t.shadelight = 0x2591;
- t.shademedium = 0x2592;
- t.shadeva = 0x0936;
- t.shagujarati = 0x0ab6;
- t.shagurmukhi = 0x0a36;
- t.shalshelethebrew = 0x0593;
- t.shbopomofo = 0x3115;
- t.shchacyrillic = 0x0449;
- t.sheenarabic = 0x0634;
- t.sheenfinalarabic = 0xfeb6;
- t.sheeninitialarabic = 0xfeb7;
- t.sheenmedialarabic = 0xfeb8;
- t.sheicoptic = 0x03e3;
- t.sheqel = 0x20aa;
- t.sheqelhebrew = 0x20aa;
- t.sheva = 0x05b0;
- t.sheva115 = 0x05b0;
- t.sheva15 = 0x05b0;
- t.sheva22 = 0x05b0;
- t.sheva2e = 0x05b0;
- t.shevahebrew = 0x05b0;
- t.shevanarrowhebrew = 0x05b0;
- t.shevaquarterhebrew = 0x05b0;
- t.shevawidehebrew = 0x05b0;
- t.shhacyrillic = 0x04bb;
- t.shimacoptic = 0x03ed;
- t.shin = 0x05e9;
- t.shindagesh = 0xfb49;
- t.shindageshhebrew = 0xfb49;
- t.shindageshshindot = 0xfb2c;
- t.shindageshshindothebrew = 0xfb2c;
- t.shindageshsindot = 0xfb2d;
- t.shindageshsindothebrew = 0xfb2d;
- t.shindothebrew = 0x05c1;
- t.shinhebrew = 0x05e9;
- t.shinshindot = 0xfb2a;
- t.shinshindothebrew = 0xfb2a;
- t.shinsindot = 0xfb2b;
- t.shinsindothebrew = 0xfb2b;
- t.shook = 0x0282;
- t.sigma = 0x03c3;
- t.sigma1 = 0x03c2;
- t.sigmafinal = 0x03c2;
- t.sigmalunatesymbolgreek = 0x03f2;
- t.sihiragana = 0x3057;
- t.sikatakana = 0x30b7;
- t.sikatakanahalfwidth = 0xff7c;
- t.siluqhebrew = 0x05bd;
- t.siluqlefthebrew = 0x05bd;
- t.similar = 0x223c;
- t.sindothebrew = 0x05c2;
- t.siosacirclekorean = 0x3274;
- t.siosaparenkorean = 0x3214;
- t.sioscieuckorean = 0x317e;
- t.sioscirclekorean = 0x3266;
- t.sioskiyeokkorean = 0x317a;
- t.sioskorean = 0x3145;
- t.siosnieunkorean = 0x317b;
- t.siosparenkorean = 0x3206;
- t.siospieupkorean = 0x317d;
- t.siostikeutkorean = 0x317c;
- t.six = 0x0036;
- t.sixarabic = 0x0666;
- t.sixbengali = 0x09ec;
- t.sixcircle = 0x2465;
- t.sixcircleinversesansserif = 0x278f;
- t.sixdeva = 0x096c;
- t.sixgujarati = 0x0aec;
- t.sixgurmukhi = 0x0a6c;
- t.sixhackarabic = 0x0666;
- t.sixhangzhou = 0x3026;
- t.sixideographicparen = 0x3225;
- t.sixinferior = 0x2086;
- t.sixmonospace = 0xff16;
- t.sixoldstyle = 0xf736;
- t.sixparen = 0x2479;
- t.sixperiod = 0x248d;
- t.sixpersian = 0x06f6;
- t.sixroman = 0x2175;
- t.sixsuperior = 0x2076;
- t.sixteencircle = 0x246f;
- t.sixteencurrencydenominatorbengali = 0x09f9;
- t.sixteenparen = 0x2483;
- t.sixteenperiod = 0x2497;
- t.sixthai = 0x0e56;
- t.slash = 0x002f;
- t.slashmonospace = 0xff0f;
- t.slong = 0x017f;
- t.slongdotaccent = 0x1e9b;
- t.smileface = 0x263a;
- t.smonospace = 0xff53;
- t.sofpasuqhebrew = 0x05c3;
- t.softhyphen = 0x00ad;
- t.softsigncyrillic = 0x044c;
- t.sohiragana = 0x305d;
- t.sokatakana = 0x30bd;
- t.sokatakanahalfwidth = 0xff7f;
- t.soliduslongoverlaycmb = 0x0338;
- t.solidusshortoverlaycmb = 0x0337;
- t.sorusithai = 0x0e29;
- t.sosalathai = 0x0e28;
- t.sosothai = 0x0e0b;
- t.sosuathai = 0x0e2a;
- t.space = 0x0020;
- t.spacehackarabic = 0x0020;
- t.spade = 0x2660;
- t.spadesuitblack = 0x2660;
- t.spadesuitwhite = 0x2664;
- t.sparen = 0x24ae;
- t.squarebelowcmb = 0x033b;
- t.squarecc = 0x33c4;
- t.squarecm = 0x339d;
- t.squarediagonalcrosshatchfill = 0x25a9;
- t.squarehorizontalfill = 0x25a4;
- t.squarekg = 0x338f;
- t.squarekm = 0x339e;
- t.squarekmcapital = 0x33ce;
- t.squareln = 0x33d1;
- t.squarelog = 0x33d2;
- t.squaremg = 0x338e;
- t.squaremil = 0x33d5;
- t.squaremm = 0x339c;
- t.squaremsquared = 0x33a1;
- t.squareorthogonalcrosshatchfill = 0x25a6;
- t.squareupperlefttolowerrightfill = 0x25a7;
- t.squareupperrighttolowerleftfill = 0x25a8;
- t.squareverticalfill = 0x25a5;
- t.squarewhitewithsmallblack = 0x25a3;
- t.srsquare = 0x33db;
- t.ssabengali = 0x09b7;
- t.ssadeva = 0x0937;
- t.ssagujarati = 0x0ab7;
- t.ssangcieuckorean = 0x3149;
- t.ssanghieuhkorean = 0x3185;
- t.ssangieungkorean = 0x3180;
- t.ssangkiyeokkorean = 0x3132;
- t.ssangnieunkorean = 0x3165;
- t.ssangpieupkorean = 0x3143;
- t.ssangsioskorean = 0x3146;
- t.ssangtikeutkorean = 0x3138;
- t.ssuperior = 0xf6f2;
- t.sterling = 0x00a3;
- t.sterlingmonospace = 0xffe1;
- t.strokelongoverlaycmb = 0x0336;
- t.strokeshortoverlaycmb = 0x0335;
- t.subset = 0x2282;
- t.subsetnotequal = 0x228a;
- t.subsetorequal = 0x2286;
- t.succeeds = 0x227b;
- t.suchthat = 0x220b;
- t.suhiragana = 0x3059;
- t.sukatakana = 0x30b9;
- t.sukatakanahalfwidth = 0xff7d;
- t.sukunarabic = 0x0652;
- t.summation = 0x2211;
- t.sun = 0x263c;
- t.superset = 0x2283;
- t.supersetnotequal = 0x228b;
- t.supersetorequal = 0x2287;
- t.svsquare = 0x33dc;
- t.syouwaerasquare = 0x337c;
- t.t = 0x0074;
- t.tabengali = 0x09a4;
- t.tackdown = 0x22a4;
- t.tackleft = 0x22a3;
- t.tadeva = 0x0924;
- t.tagujarati = 0x0aa4;
- t.tagurmukhi = 0x0a24;
- t.taharabic = 0x0637;
- t.tahfinalarabic = 0xfec2;
- t.tahinitialarabic = 0xfec3;
- t.tahiragana = 0x305f;
- t.tahmedialarabic = 0xfec4;
- t.taisyouerasquare = 0x337d;
- t.takatakana = 0x30bf;
- t.takatakanahalfwidth = 0xff80;
- t.tatweelarabic = 0x0640;
- t.tau = 0x03c4;
- t.tav = 0x05ea;
- t.tavdages = 0xfb4a;
- t.tavdagesh = 0xfb4a;
- t.tavdageshhebrew = 0xfb4a;
- t.tavhebrew = 0x05ea;
- t.tbar = 0x0167;
- t.tbopomofo = 0x310a;
- t.tcaron = 0x0165;
- t.tccurl = 0x02a8;
- t.tcedilla = 0x0163;
- t.tcheharabic = 0x0686;
- t.tchehfinalarabic = 0xfb7b;
- t.tchehinitialarabic = 0xfb7c;
- t.tchehmedialarabic = 0xfb7d;
- t.tcircle = 0x24e3;
- t.tcircumflexbelow = 0x1e71;
- t.tcommaaccent = 0x0163;
- t.tdieresis = 0x1e97;
- t.tdotaccent = 0x1e6b;
- t.tdotbelow = 0x1e6d;
- t.tecyrillic = 0x0442;
- t.tedescendercyrillic = 0x04ad;
- t.teharabic = 0x062a;
- t.tehfinalarabic = 0xfe96;
- t.tehhahinitialarabic = 0xfca2;
- t.tehhahisolatedarabic = 0xfc0c;
- t.tehinitialarabic = 0xfe97;
- t.tehiragana = 0x3066;
- t.tehjeeminitialarabic = 0xfca1;
- t.tehjeemisolatedarabic = 0xfc0b;
- t.tehmarbutaarabic = 0x0629;
- t.tehmarbutafinalarabic = 0xfe94;
- t.tehmedialarabic = 0xfe98;
- t.tehmeeminitialarabic = 0xfca4;
- t.tehmeemisolatedarabic = 0xfc0e;
- t.tehnoonfinalarabic = 0xfc73;
- t.tekatakana = 0x30c6;
- t.tekatakanahalfwidth = 0xff83;
- t.telephone = 0x2121;
- t.telephoneblack = 0x260e;
- t.telishagedolahebrew = 0x05a0;
- t.telishaqetanahebrew = 0x05a9;
- t.tencircle = 0x2469;
- t.tenideographicparen = 0x3229;
- t.tenparen = 0x247d;
- t.tenperiod = 0x2491;
- t.tenroman = 0x2179;
- t.tesh = 0x02a7;
- t.tet = 0x05d8;
- t.tetdagesh = 0xfb38;
- t.tetdageshhebrew = 0xfb38;
- t.tethebrew = 0x05d8;
- t.tetsecyrillic = 0x04b5;
- t.tevirhebrew = 0x059b;
- t.tevirlefthebrew = 0x059b;
- t.thabengali = 0x09a5;
- t.thadeva = 0x0925;
- t.thagujarati = 0x0aa5;
- t.thagurmukhi = 0x0a25;
- t.thalarabic = 0x0630;
- t.thalfinalarabic = 0xfeac;
- t.thanthakhatlowleftthai = 0xf898;
- t.thanthakhatlowrightthai = 0xf897;
- t.thanthakhatthai = 0x0e4c;
- t.thanthakhatupperleftthai = 0xf896;
- t.theharabic = 0x062b;
- t.thehfinalarabic = 0xfe9a;
- t.thehinitialarabic = 0xfe9b;
- t.thehmedialarabic = 0xfe9c;
- t.thereexists = 0x2203;
- t.therefore = 0x2234;
- t.theta = 0x03b8;
- t.theta1 = 0x03d1;
- t.thetasymbolgreek = 0x03d1;
- t.thieuthacirclekorean = 0x3279;
- t.thieuthaparenkorean = 0x3219;
- t.thieuthcirclekorean = 0x326b;
- t.thieuthkorean = 0x314c;
- t.thieuthparenkorean = 0x320b;
- t.thirteencircle = 0x246c;
- t.thirteenparen = 0x2480;
- t.thirteenperiod = 0x2494;
- t.thonangmonthothai = 0x0e11;
- t.thook = 0x01ad;
- t.thophuthaothai = 0x0e12;
- t.thorn = 0x00fe;
- t.thothahanthai = 0x0e17;
- t.thothanthai = 0x0e10;
- t.thothongthai = 0x0e18;
- t.thothungthai = 0x0e16;
- t.thousandcyrillic = 0x0482;
- t.thousandsseparatorarabic = 0x066c;
- t.thousandsseparatorpersian = 0x066c;
- t.three = 0x0033;
- t.threearabic = 0x0663;
- t.threebengali = 0x09e9;
- t.threecircle = 0x2462;
- t.threecircleinversesansserif = 0x278c;
- t.threedeva = 0x0969;
- t.threeeighths = 0x215c;
- t.threegujarati = 0x0ae9;
- t.threegurmukhi = 0x0a69;
- t.threehackarabic = 0x0663;
- t.threehangzhou = 0x3023;
- t.threeideographicparen = 0x3222;
- t.threeinferior = 0x2083;
- t.threemonospace = 0xff13;
- t.threenumeratorbengali = 0x09f6;
- t.threeoldstyle = 0xf733;
- t.threeparen = 0x2476;
- t.threeperiod = 0x248a;
- t.threepersian = 0x06f3;
- t.threequarters = 0x00be;
- t.threequartersemdash = 0xf6de;
- t.threeroman = 0x2172;
- t.threesuperior = 0x00b3;
- t.threethai = 0x0e53;
- t.thzsquare = 0x3394;
- t.tihiragana = 0x3061;
- t.tikatakana = 0x30c1;
- t.tikatakanahalfwidth = 0xff81;
- t.tikeutacirclekorean = 0x3270;
- t.tikeutaparenkorean = 0x3210;
- t.tikeutcirclekorean = 0x3262;
- t.tikeutkorean = 0x3137;
- t.tikeutparenkorean = 0x3202;
- t.tilde = 0x02dc;
- t.tildebelowcmb = 0x0330;
- t.tildecmb = 0x0303;
- t.tildecomb = 0x0303;
- t.tildedoublecmb = 0x0360;
- t.tildeoperator = 0x223c;
- t.tildeoverlaycmb = 0x0334;
- t.tildeverticalcmb = 0x033e;
- t.timescircle = 0x2297;
- t.tipehahebrew = 0x0596;
- t.tipehalefthebrew = 0x0596;
- t.tippigurmukhi = 0x0a70;
- t.titlocyrilliccmb = 0x0483;
- t.tiwnarmenian = 0x057f;
- t.tlinebelow = 0x1e6f;
- t.tmonospace = 0xff54;
- t.toarmenian = 0x0569;
- t.tohiragana = 0x3068;
- t.tokatakana = 0x30c8;
- t.tokatakanahalfwidth = 0xff84;
- t.tonebarextrahighmod = 0x02e5;
- t.tonebarextralowmod = 0x02e9;
- t.tonebarhighmod = 0x02e6;
- t.tonebarlowmod = 0x02e8;
- t.tonebarmidmod = 0x02e7;
- t.tonefive = 0x01bd;
- t.tonesix = 0x0185;
- t.tonetwo = 0x01a8;
- t.tonos = 0x0384;
- t.tonsquare = 0x3327;
- t.topatakthai = 0x0e0f;
- t.tortoiseshellbracketleft = 0x3014;
- t.tortoiseshellbracketleftsmall = 0xfe5d;
- t.tortoiseshellbracketleftvertical = 0xfe39;
- t.tortoiseshellbracketright = 0x3015;
- t.tortoiseshellbracketrightsmall = 0xfe5e;
- t.tortoiseshellbracketrightvertical = 0xfe3a;
- t.totaothai = 0x0e15;
- t.tpalatalhook = 0x01ab;
- t.tparen = 0x24af;
- t.trademark = 0x2122;
- t.trademarksans = 0xf8ea;
- t.trademarkserif = 0xf6db;
- t.tretroflexhook = 0x0288;
- t.triagdn = 0x25bc;
- t.triaglf = 0x25c4;
- t.triagrt = 0x25ba;
- t.triagup = 0x25b2;
- t.ts = 0x02a6;
- t.tsadi = 0x05e6;
- t.tsadidagesh = 0xfb46;
- t.tsadidageshhebrew = 0xfb46;
- t.tsadihebrew = 0x05e6;
- t.tsecyrillic = 0x0446;
- t.tsere = 0x05b5;
- t.tsere12 = 0x05b5;
- t.tsere1e = 0x05b5;
- t.tsere2b = 0x05b5;
- t.tserehebrew = 0x05b5;
- t.tserenarrowhebrew = 0x05b5;
- t.tserequarterhebrew = 0x05b5;
- t.tserewidehebrew = 0x05b5;
- t.tshecyrillic = 0x045b;
- t.tsuperior = 0xf6f3;
- t.ttabengali = 0x099f;
- t.ttadeva = 0x091f;
- t.ttagujarati = 0x0a9f;
- t.ttagurmukhi = 0x0a1f;
- t.tteharabic = 0x0679;
- t.ttehfinalarabic = 0xfb67;
- t.ttehinitialarabic = 0xfb68;
- t.ttehmedialarabic = 0xfb69;
- t.tthabengali = 0x09a0;
- t.tthadeva = 0x0920;
- t.tthagujarati = 0x0aa0;
- t.tthagurmukhi = 0x0a20;
- t.tturned = 0x0287;
- t.tuhiragana = 0x3064;
- t.tukatakana = 0x30c4;
- t.tukatakanahalfwidth = 0xff82;
- t.tusmallhiragana = 0x3063;
- t.tusmallkatakana = 0x30c3;
- t.tusmallkatakanahalfwidth = 0xff6f;
- t.twelvecircle = 0x246b;
- t.twelveparen = 0x247f;
- t.twelveperiod = 0x2493;
- t.twelveroman = 0x217b;
- t.twentycircle = 0x2473;
- t.twentyhangzhou = 0x5344;
- t.twentyparen = 0x2487;
- t.twentyperiod = 0x249b;
- t.two = 0x0032;
- t.twoarabic = 0x0662;
- t.twobengali = 0x09e8;
- t.twocircle = 0x2461;
- t.twocircleinversesansserif = 0x278b;
- t.twodeva = 0x0968;
- t.twodotenleader = 0x2025;
- t.twodotleader = 0x2025;
- t.twodotleadervertical = 0xfe30;
- t.twogujarati = 0x0ae8;
- t.twogurmukhi = 0x0a68;
- t.twohackarabic = 0x0662;
- t.twohangzhou = 0x3022;
- t.twoideographicparen = 0x3221;
- t.twoinferior = 0x2082;
- t.twomonospace = 0xff12;
- t.twonumeratorbengali = 0x09f5;
- t.twooldstyle = 0xf732;
- t.twoparen = 0x2475;
- t.twoperiod = 0x2489;
- t.twopersian = 0x06f2;
- t.tworoman = 0x2171;
- t.twostroke = 0x01bb;
- t.twosuperior = 0x00b2;
- t.twothai = 0x0e52;
- t.twothirds = 0x2154;
- t.u = 0x0075;
- t.uacute = 0x00fa;
- t.ubar = 0x0289;
- t.ubengali = 0x0989;
- t.ubopomofo = 0x3128;
- t.ubreve = 0x016d;
- t.ucaron = 0x01d4;
- t.ucircle = 0x24e4;
- t.ucircumflex = 0x00fb;
- t.ucircumflexbelow = 0x1e77;
- t.ucyrillic = 0x0443;
- t.udattadeva = 0x0951;
- t.udblacute = 0x0171;
- t.udblgrave = 0x0215;
- t.udeva = 0x0909;
- t.udieresis = 0x00fc;
- t.udieresisacute = 0x01d8;
- t.udieresisbelow = 0x1e73;
- t.udieresiscaron = 0x01da;
- t.udieresiscyrillic = 0x04f1;
- t.udieresisgrave = 0x01dc;
- t.udieresismacron = 0x01d6;
- t.udotbelow = 0x1ee5;
- t.ugrave = 0x00f9;
- t.ugujarati = 0x0a89;
- t.ugurmukhi = 0x0a09;
- t.uhiragana = 0x3046;
- t.uhookabove = 0x1ee7;
- t.uhorn = 0x01b0;
- t.uhornacute = 0x1ee9;
- t.uhorndotbelow = 0x1ef1;
- t.uhorngrave = 0x1eeb;
- t.uhornhookabove = 0x1eed;
- t.uhorntilde = 0x1eef;
- t.uhungarumlaut = 0x0171;
- t.uhungarumlautcyrillic = 0x04f3;
- t.uinvertedbreve = 0x0217;
- t.ukatakana = 0x30a6;
- t.ukatakanahalfwidth = 0xff73;
- t.ukcyrillic = 0x0479;
- t.ukorean = 0x315c;
- t.umacron = 0x016b;
- t.umacroncyrillic = 0x04ef;
- t.umacrondieresis = 0x1e7b;
- t.umatragurmukhi = 0x0a41;
- t.umonospace = 0xff55;
- t.underscore = 0x005f;
- t.underscoredbl = 0x2017;
- t.underscoremonospace = 0xff3f;
- t.underscorevertical = 0xfe33;
- t.underscorewavy = 0xfe4f;
- t.union = 0x222a;
- t.universal = 0x2200;
- t.uogonek = 0x0173;
- t.uparen = 0x24b0;
- t.upblock = 0x2580;
- t.upperdothebrew = 0x05c4;
- t.upsilon = 0x03c5;
- t.upsilondieresis = 0x03cb;
- t.upsilondieresistonos = 0x03b0;
- t.upsilonlatin = 0x028a;
- t.upsilontonos = 0x03cd;
- t.uptackbelowcmb = 0x031d;
- t.uptackmod = 0x02d4;
- t.uragurmukhi = 0x0a73;
- t.uring = 0x016f;
- t.ushortcyrillic = 0x045e;
- t.usmallhiragana = 0x3045;
- t.usmallkatakana = 0x30a5;
- t.usmallkatakanahalfwidth = 0xff69;
- t.ustraightcyrillic = 0x04af;
- t.ustraightstrokecyrillic = 0x04b1;
- t.utilde = 0x0169;
- t.utildeacute = 0x1e79;
- t.utildebelow = 0x1e75;
- t.uubengali = 0x098a;
- t.uudeva = 0x090a;
- t.uugujarati = 0x0a8a;
- t.uugurmukhi = 0x0a0a;
- t.uumatragurmukhi = 0x0a42;
- t.uuvowelsignbengali = 0x09c2;
- t.uuvowelsigndeva = 0x0942;
- t.uuvowelsigngujarati = 0x0ac2;
- t.uvowelsignbengali = 0x09c1;
- t.uvowelsigndeva = 0x0941;
- t.uvowelsigngujarati = 0x0ac1;
- t.v = 0x0076;
- t.vadeva = 0x0935;
- t.vagujarati = 0x0ab5;
- t.vagurmukhi = 0x0a35;
- t.vakatakana = 0x30f7;
- t.vav = 0x05d5;
- t.vavdagesh = 0xfb35;
- t.vavdagesh65 = 0xfb35;
- t.vavdageshhebrew = 0xfb35;
- t.vavhebrew = 0x05d5;
- t.vavholam = 0xfb4b;
- t.vavholamhebrew = 0xfb4b;
- t.vavvavhebrew = 0x05f0;
- t.vavyodhebrew = 0x05f1;
- t.vcircle = 0x24e5;
- t.vdotbelow = 0x1e7f;
- t.vecyrillic = 0x0432;
- t.veharabic = 0x06a4;
- t.vehfinalarabic = 0xfb6b;
- t.vehinitialarabic = 0xfb6c;
- t.vehmedialarabic = 0xfb6d;
- t.vekatakana = 0x30f9;
- t.venus = 0x2640;
- t.verticalbar = 0x007c;
- t.verticallineabovecmb = 0x030d;
- t.verticallinebelowcmb = 0x0329;
- t.verticallinelowmod = 0x02cc;
- t.verticallinemod = 0x02c8;
- t.vewarmenian = 0x057e;
- t.vhook = 0x028b;
- t.vikatakana = 0x30f8;
- t.viramabengali = 0x09cd;
- t.viramadeva = 0x094d;
- t.viramagujarati = 0x0acd;
- t.visargabengali = 0x0983;
- t.visargadeva = 0x0903;
- t.visargagujarati = 0x0a83;
- t.vmonospace = 0xff56;
- t.voarmenian = 0x0578;
- t.voicediterationhiragana = 0x309e;
- t.voicediterationkatakana = 0x30fe;
- t.voicedmarkkana = 0x309b;
- t.voicedmarkkanahalfwidth = 0xff9e;
- t.vokatakana = 0x30fa;
- t.vparen = 0x24b1;
- t.vtilde = 0x1e7d;
- t.vturned = 0x028c;
- t.vuhiragana = 0x3094;
- t.vukatakana = 0x30f4;
- t.w = 0x0077;
- t.wacute = 0x1e83;
- t.waekorean = 0x3159;
- t.wahiragana = 0x308f;
- t.wakatakana = 0x30ef;
- t.wakatakanahalfwidth = 0xff9c;
- t.wakorean = 0x3158;
- t.wasmallhiragana = 0x308e;
- t.wasmallkatakana = 0x30ee;
- t.wattosquare = 0x3357;
- t.wavedash = 0x301c;
- t.wavyunderscorevertical = 0xfe34;
- t.wawarabic = 0x0648;
- t.wawfinalarabic = 0xfeee;
- t.wawhamzaabovearabic = 0x0624;
- t.wawhamzaabovefinalarabic = 0xfe86;
- t.wbsquare = 0x33dd;
- t.wcircle = 0x24e6;
- t.wcircumflex = 0x0175;
- t.wdieresis = 0x1e85;
- t.wdotaccent = 0x1e87;
- t.wdotbelow = 0x1e89;
- t.wehiragana = 0x3091;
- t.weierstrass = 0x2118;
- t.wekatakana = 0x30f1;
- t.wekorean = 0x315e;
- t.weokorean = 0x315d;
- t.wgrave = 0x1e81;
- t.whitebullet = 0x25e6;
- t.whitecircle = 0x25cb;
- t.whitecircleinverse = 0x25d9;
- t.whitecornerbracketleft = 0x300e;
- t.whitecornerbracketleftvertical = 0xfe43;
- t.whitecornerbracketright = 0x300f;
- t.whitecornerbracketrightvertical = 0xfe44;
- t.whitediamond = 0x25c7;
- t.whitediamondcontainingblacksmalldiamond = 0x25c8;
- t.whitedownpointingsmalltriangle = 0x25bf;
- t.whitedownpointingtriangle = 0x25bd;
- t.whiteleftpointingsmalltriangle = 0x25c3;
- t.whiteleftpointingtriangle = 0x25c1;
- t.whitelenticularbracketleft = 0x3016;
- t.whitelenticularbracketright = 0x3017;
- t.whiterightpointingsmalltriangle = 0x25b9;
- t.whiterightpointingtriangle = 0x25b7;
- t.whitesmallsquare = 0x25ab;
- t.whitesmilingface = 0x263a;
- t.whitesquare = 0x25a1;
- t.whitestar = 0x2606;
- t.whitetelephone = 0x260f;
- t.whitetortoiseshellbracketleft = 0x3018;
- t.whitetortoiseshellbracketright = 0x3019;
- t.whiteuppointingsmalltriangle = 0x25b5;
- t.whiteuppointingtriangle = 0x25b3;
- t.wihiragana = 0x3090;
- t.wikatakana = 0x30f0;
- t.wikorean = 0x315f;
- t.wmonospace = 0xff57;
- t.wohiragana = 0x3092;
- t.wokatakana = 0x30f2;
- t.wokatakanahalfwidth = 0xff66;
- t.won = 0x20a9;
- t.wonmonospace = 0xffe6;
- t.wowaenthai = 0x0e27;
- t.wparen = 0x24b2;
- t.wring = 0x1e98;
- t.wsuperior = 0x02b7;
- t.wturned = 0x028d;
- t.wynn = 0x01bf;
- t.x = 0x0078;
- t.xabovecmb = 0x033d;
- t.xbopomofo = 0x3112;
- t.xcircle = 0x24e7;
- t.xdieresis = 0x1e8d;
- t.xdotaccent = 0x1e8b;
- t.xeharmenian = 0x056d;
- t.xi = 0x03be;
- t.xmonospace = 0xff58;
- t.xparen = 0x24b3;
- t.xsuperior = 0x02e3;
- t.y = 0x0079;
- t.yaadosquare = 0x334e;
- t.yabengali = 0x09af;
- t.yacute = 0x00fd;
- t.yadeva = 0x092f;
- t.yaekorean = 0x3152;
- t.yagujarati = 0x0aaf;
- t.yagurmukhi = 0x0a2f;
- t.yahiragana = 0x3084;
- t.yakatakana = 0x30e4;
- t.yakatakanahalfwidth = 0xff94;
- t.yakorean = 0x3151;
- t.yamakkanthai = 0x0e4e;
- t.yasmallhiragana = 0x3083;
- t.yasmallkatakana = 0x30e3;
- t.yasmallkatakanahalfwidth = 0xff6c;
- t.yatcyrillic = 0x0463;
- t.ycircle = 0x24e8;
- t.ycircumflex = 0x0177;
- t.ydieresis = 0x00ff;
- t.ydotaccent = 0x1e8f;
- t.ydotbelow = 0x1ef5;
- t.yeharabic = 0x064a;
- t.yehbarreearabic = 0x06d2;
- t.yehbarreefinalarabic = 0xfbaf;
- t.yehfinalarabic = 0xfef2;
- t.yehhamzaabovearabic = 0x0626;
- t.yehhamzaabovefinalarabic = 0xfe8a;
- t.yehhamzaaboveinitialarabic = 0xfe8b;
- t.yehhamzaabovemedialarabic = 0xfe8c;
- t.yehinitialarabic = 0xfef3;
- t.yehmedialarabic = 0xfef4;
- t.yehmeeminitialarabic = 0xfcdd;
- t.yehmeemisolatedarabic = 0xfc58;
- t.yehnoonfinalarabic = 0xfc94;
- t.yehthreedotsbelowarabic = 0x06d1;
- t.yekorean = 0x3156;
- t.yen = 0x00a5;
- t.yenmonospace = 0xffe5;
- t.yeokorean = 0x3155;
- t.yeorinhieuhkorean = 0x3186;
- t.yerahbenyomohebrew = 0x05aa;
- t.yerahbenyomolefthebrew = 0x05aa;
- t.yericyrillic = 0x044b;
- t.yerudieresiscyrillic = 0x04f9;
- t.yesieungkorean = 0x3181;
- t.yesieungpansioskorean = 0x3183;
- t.yesieungsioskorean = 0x3182;
- t.yetivhebrew = 0x059a;
- t.ygrave = 0x1ef3;
- t.yhook = 0x01b4;
- t.yhookabove = 0x1ef7;
- t.yiarmenian = 0x0575;
- t.yicyrillic = 0x0457;
- t.yikorean = 0x3162;
- t.yinyang = 0x262f;
- t.yiwnarmenian = 0x0582;
- t.ymonospace = 0xff59;
- t.yod = 0x05d9;
- t.yoddagesh = 0xfb39;
- t.yoddageshhebrew = 0xfb39;
- t.yodhebrew = 0x05d9;
- t.yodyodhebrew = 0x05f2;
- t.yodyodpatahhebrew = 0xfb1f;
- t.yohiragana = 0x3088;
- t.yoikorean = 0x3189;
- t.yokatakana = 0x30e8;
- t.yokatakanahalfwidth = 0xff96;
- t.yokorean = 0x315b;
- t.yosmallhiragana = 0x3087;
- t.yosmallkatakana = 0x30e7;
- t.yosmallkatakanahalfwidth = 0xff6e;
- t.yotgreek = 0x03f3;
- t.yoyaekorean = 0x3188;
- t.yoyakorean = 0x3187;
- t.yoyakthai = 0x0e22;
- t.yoyingthai = 0x0e0d;
- t.yparen = 0x24b4;
- t.ypogegrammeni = 0x037a;
- t.ypogegrammenigreekcmb = 0x0345;
- t.yr = 0x01a6;
- t.yring = 0x1e99;
- t.ysuperior = 0x02b8;
- t.ytilde = 0x1ef9;
- t.yturned = 0x028e;
- t.yuhiragana = 0x3086;
- t.yuikorean = 0x318c;
- t.yukatakana = 0x30e6;
- t.yukatakanahalfwidth = 0xff95;
- t.yukorean = 0x3160;
- t.yusbigcyrillic = 0x046b;
- t.yusbigiotifiedcyrillic = 0x046d;
- t.yuslittlecyrillic = 0x0467;
- t.yuslittleiotifiedcyrillic = 0x0469;
- t.yusmallhiragana = 0x3085;
- t.yusmallkatakana = 0x30e5;
- t.yusmallkatakanahalfwidth = 0xff6d;
- t.yuyekorean = 0x318b;
- t.yuyeokorean = 0x318a;
- t.yyabengali = 0x09df;
- t.yyadeva = 0x095f;
- t.z = 0x007a;
- t.zaarmenian = 0x0566;
- t.zacute = 0x017a;
- t.zadeva = 0x095b;
- t.zagurmukhi = 0x0a5b;
- t.zaharabic = 0x0638;
- t.zahfinalarabic = 0xfec6;
- t.zahinitialarabic = 0xfec7;
- t.zahiragana = 0x3056;
- t.zahmedialarabic = 0xfec8;
- t.zainarabic = 0x0632;
- t.zainfinalarabic = 0xfeb0;
- t.zakatakana = 0x30b6;
- t.zaqefgadolhebrew = 0x0595;
- t.zaqefqatanhebrew = 0x0594;
- t.zarqahebrew = 0x0598;
- t.zayin = 0x05d6;
- t.zayindagesh = 0xfb36;
- t.zayindageshhebrew = 0xfb36;
- t.zayinhebrew = 0x05d6;
- t.zbopomofo = 0x3117;
- t.zcaron = 0x017e;
- t.zcircle = 0x24e9;
- t.zcircumflex = 0x1e91;
- t.zcurl = 0x0291;
- t.zdot = 0x017c;
- t.zdotaccent = 0x017c;
- t.zdotbelow = 0x1e93;
- t.zecyrillic = 0x0437;
- t.zedescendercyrillic = 0x0499;
- t.zedieresiscyrillic = 0x04df;
- t.zehiragana = 0x305c;
- t.zekatakana = 0x30bc;
- t.zero = 0x0030;
- t.zeroarabic = 0x0660;
- t.zerobengali = 0x09e6;
- t.zerodeva = 0x0966;
- t.zerogujarati = 0x0ae6;
- t.zerogurmukhi = 0x0a66;
- t.zerohackarabic = 0x0660;
- t.zeroinferior = 0x2080;
- t.zeromonospace = 0xff10;
- t.zerooldstyle = 0xf730;
- t.zeropersian = 0x06f0;
- t.zerosuperior = 0x2070;
- t.zerothai = 0x0e50;
- t.zerowidthjoiner = 0xfeff;
- t.zerowidthnonjoiner = 0x200c;
- t.zerowidthspace = 0x200b;
- t.zeta = 0x03b6;
- t.zhbopomofo = 0x3113;
- t.zhearmenian = 0x056a;
- t.zhebrevecyrillic = 0x04c2;
- t.zhecyrillic = 0x0436;
- t.zhedescendercyrillic = 0x0497;
- t.zhedieresiscyrillic = 0x04dd;
- t.zihiragana = 0x3058;
- t.zikatakana = 0x30b8;
- t.zinorhebrew = 0x05ae;
- t.zlinebelow = 0x1e95;
- t.zmonospace = 0xff5a;
- t.zohiragana = 0x305e;
- t.zokatakana = 0x30be;
- t.zparen = 0x24b5;
- t.zretroflexhook = 0x0290;
- t.zstroke = 0x01b6;
- t.zuhiragana = 0x305a;
- t.zukatakana = 0x30ba;
- t[".notdef"] = 0x0000;
- t.angbracketleftbig = 0x2329;
- t.angbracketleftBig = 0x2329;
- t.angbracketleftbigg = 0x2329;
- t.angbracketleftBigg = 0x2329;
- t.angbracketrightBig = 0x232a;
- t.angbracketrightbig = 0x232a;
- t.angbracketrightBigg = 0x232a;
- t.angbracketrightbigg = 0x232a;
- t.arrowhookleft = 0x21aa;
- t.arrowhookright = 0x21a9;
- t.arrowlefttophalf = 0x21bc;
- t.arrowleftbothalf = 0x21bd;
- t.arrownortheast = 0x2197;
- t.arrownorthwest = 0x2196;
- t.arrowrighttophalf = 0x21c0;
- t.arrowrightbothalf = 0x21c1;
- t.arrowsoutheast = 0x2198;
- t.arrowsouthwest = 0x2199;
- t.backslashbig = 0x2216;
- t.backslashBig = 0x2216;
- t.backslashBigg = 0x2216;
- t.backslashbigg = 0x2216;
- t.bardbl = 0x2016;
- t.bracehtipdownleft = 0xfe37;
- t.bracehtipdownright = 0xfe37;
- t.bracehtipupleft = 0xfe38;
- t.bracehtipupright = 0xfe38;
- t.braceleftBig = 0x007b;
- t.braceleftbig = 0x007b;
- t.braceleftbigg = 0x007b;
- t.braceleftBigg = 0x007b;
- t.bracerightBig = 0x007d;
- t.bracerightbig = 0x007d;
- t.bracerightbigg = 0x007d;
- t.bracerightBigg = 0x007d;
- t.bracketleftbig = 0x005b;
- t.bracketleftBig = 0x005b;
- t.bracketleftbigg = 0x005b;
- t.bracketleftBigg = 0x005b;
- t.bracketrightBig = 0x005d;
- t.bracketrightbig = 0x005d;
- t.bracketrightbigg = 0x005d;
- t.bracketrightBigg = 0x005d;
- t.ceilingleftbig = 0x2308;
- t.ceilingleftBig = 0x2308;
- t.ceilingleftBigg = 0x2308;
- t.ceilingleftbigg = 0x2308;
- t.ceilingrightbig = 0x2309;
- t.ceilingrightBig = 0x2309;
- t.ceilingrightbigg = 0x2309;
- t.ceilingrightBigg = 0x2309;
- t.circledotdisplay = 0x2299;
- t.circledottext = 0x2299;
- t.circlemultiplydisplay = 0x2297;
- t.circlemultiplytext = 0x2297;
- t.circleplusdisplay = 0x2295;
- t.circleplustext = 0x2295;
- t.contintegraldisplay = 0x222e;
- t.contintegraltext = 0x222e;
- t.coproductdisplay = 0x2210;
- t.coproducttext = 0x2210;
- t.floorleftBig = 0x230a;
- t.floorleftbig = 0x230a;
- t.floorleftbigg = 0x230a;
- t.floorleftBigg = 0x230a;
- t.floorrightbig = 0x230b;
- t.floorrightBig = 0x230b;
- t.floorrightBigg = 0x230b;
- t.floorrightbigg = 0x230b;
- t.hatwide = 0x0302;
- t.hatwider = 0x0302;
- t.hatwidest = 0x0302;
- t.intercal = 0x1d40;
- t.integraldisplay = 0x222b;
- t.integraltext = 0x222b;
- t.intersectiondisplay = 0x22c2;
- t.intersectiontext = 0x22c2;
- t.logicalanddisplay = 0x2227;
- t.logicalandtext = 0x2227;
- t.logicalordisplay = 0x2228;
- t.logicalortext = 0x2228;
- t.parenleftBig = 0x0028;
- t.parenleftbig = 0x0028;
- t.parenleftBigg = 0x0028;
- t.parenleftbigg = 0x0028;
- t.parenrightBig = 0x0029;
- t.parenrightbig = 0x0029;
- t.parenrightBigg = 0x0029;
- t.parenrightbigg = 0x0029;
- t.prime = 0x2032;
- t.productdisplay = 0x220f;
- t.producttext = 0x220f;
- t.radicalbig = 0x221a;
- t.radicalBig = 0x221a;
- t.radicalBigg = 0x221a;
- t.radicalbigg = 0x221a;
- t.radicalbt = 0x221a;
- t.radicaltp = 0x221a;
- t.radicalvertex = 0x221a;
- t.slashbig = 0x002f;
- t.slashBig = 0x002f;
- t.slashBigg = 0x002f;
- t.slashbigg = 0x002f;
- t.summationdisplay = 0x2211;
- t.summationtext = 0x2211;
- t.tildewide = 0x02dc;
- t.tildewider = 0x02dc;
- t.tildewidest = 0x02dc;
- t.uniondisplay = 0x22c3;
- t.unionmultidisplay = 0x228e;
- t.unionmultitext = 0x228e;
- t.unionsqdisplay = 0x2294;
- t.unionsqtext = 0x2294;
- t.uniontext = 0x22c3;
- t.vextenddouble = 0x2225;
- t.vextendsingle = 0x2223;
+/* 35 */
+/***/ ((__unused_webpack_module, __webpack_exports__, __w_pdfjs_require__) => {
+
+__w_pdfjs_require__.r(__webpack_exports__);
+/* harmony export */ __w_pdfjs_require__.d(__webpack_exports__, {
+/* harmony export */   "getDingbatsGlyphsUnicode": () => (/* binding */ getDingbatsGlyphsUnicode),
+/* harmony export */   "getGlyphsUnicode": () => (/* binding */ getGlyphsUnicode)
+/* harmony export */ });
+/* harmony import */ var _core_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __w_pdfjs_require__(8);
+
+const getGlyphsUnicode = (0,_core_utils_js__WEBPACK_IMPORTED_MODULE_0__.getArrayLookupTableFactory)(function 
() {
+ return [
+  "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,
+  "angbracketright",
+  0x3009,
+  "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,
+  "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,
+  "controlNULL",
+  0x0000,
+  "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,
+  "f_f",
+  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,
+  "angbracketleftbig",
+  0x2329,
+  "angbracketleftBig",
+  0x2329,
+  "angbracketleftbigg",
+  0x2329,
+  "angbracketleftBigg",
+  0x2329,
+  "angbracketrightBig",
+  0x232a,
+  "angbracketrightbig",
+  0x232a,
+  "angbracketrightBigg",
+  0x232a,
+  "angbracketrightbigg",
+  0x232a,
+  "arrowhookleft",
+  0x21aa,
+  "arrowhookright",
+  0x21a9,
+  "arrowlefttophalf",
+  0x21bc,
+  "arrowleftbothalf",
+  0x21bd,
+  "arrownortheast",
+  0x2197,
+  "arrownorthwest",
+  0x2196,
+  "arrowrighttophalf",
+  0x21c0,
+  "arrowrightbothalf",
+  0x21c1,
+  "arrowsoutheast",
+  0x2198,
+  "arrowsouthwest",
+  0x2199,
+  "backslashbig",
+  0x2216,
+  "backslashBig",
+  0x2216,
+  "backslashBigg",
+  0x2216,
+  "backslashbigg",
+  0x2216,
+  "bardbl",
+  0x2016,
+  "bracehtipdownleft",
+  0xfe37,
+  "bracehtipdownright",
+  0xfe37,
+  "bracehtipupleft",
+  0xfe38,
+  "bracehtipupright",
+  0xfe38,
+  "braceleftBig",
+  0x007b,
+  "braceleftbig",
+  0x007b,
+  "braceleftbigg",
+  0x007b,
+  "braceleftBigg",
+  0x007b,
+  "bracerightBig",
+  0x007d,
+  "bracerightbig",
+  0x007d,
+  "bracerightbigg",
+  0x007d,
+  "bracerightBigg",
+  0x007d,
+  "bracketleftbig",
+  0x005b,
+  "bracketleftBig",
+  0x005b,
+  "bracketleftbigg",
+  0x005b,
+  "bracketleftBigg",
+  0x005b,
+  "bracketrightBig",
+  0x005d,
+  "bracketrightbig",
+  0x005d,
+  "bracketrightbigg",
+  0x005d,
+  "bracketrightBigg",
+  0x005d,
+  "ceilingleftbig",
+  0x2308,
+  "ceilingleftBig",
+  0x2308,
+  "ceilingleftBigg",
+  0x2308,
+  "ceilingleftbigg",
+  0x2308,
+  "ceilingrightbig",
+  0x2309,
+  "ceilingrightBig",
+  0x2309,
+  "ceilingrightbigg",
+  0x2309,
+  "ceilingrightBigg",
+  0x2309,
+  "circledotdisplay",
+  0x2299,
+  "circledottext",
+  0x2299,
+  "circlemultiplydisplay",
+  0x2297,
+  "circlemultiplytext",
+  0x2297,
+  "circleplusdisplay",
+  0x2295,
+  "circleplustext",
+  0x2295,
+  "contintegraldisplay",
+  0x222e,
+  "contintegraltext",
+  0x222e,
+  "coproductdisplay",
+  0x2210,
+  "coproducttext",
+  0x2210,
+  "floorleftBig",
+  0x230a,
+  "floorleftbig",
+  0x230a,
+  "floorleftbigg",
+  0x230a,
+  "floorleftBigg",
+  0x230a,
+  "floorrightbig",
+  0x230b,
+  "floorrightBig",
+  0x230b,
+  "floorrightBigg",
+  0x230b,
+  "floorrightbigg",
+  0x230b,
+  "hatwide",
+  0x0302,
+  "hatwider",
+  0x0302,
+  "hatwidest",
+  0x0302,
+  "intercal",
+  0x1d40,
+  "integraldisplay",
+  0x222b,
+  "integraltext",
+  0x222b,
+  "intersectiondisplay",
+  0x22c2,
+  "intersectiontext",
+  0x22c2,
+  "logicalanddisplay",
+  0x2227,
+  "logicalandtext",
+  0x2227,
+  "logicalordisplay",
+  0x2228,
+  "logicalortext",
+  0x2228,
+  "parenleftBig",
+  0x0028,
+  "parenleftbig",
+  0x0028,
+  "parenleftBigg",
+  0x0028,
+  "parenleftbigg",
+  0x0028,
+  "parenrightBig",
+  0x0029,
+  "parenrightbig",
+  0x0029,
+  "parenrightBigg",
+  0x0029,
+  "parenrightbigg",
+  0x0029,
+  "prime",
+  0x2032,
+  "productdisplay",
+  0x220f,
+  "producttext",
+  0x220f,
+  "radicalbig",
+  0x221a,
+  "radicalBig",
+  0x221a,
+  "radicalBigg",
+  0x221a,
+  "radicalbigg",
+  0x221a,
+  "radicalbt",
+  0x221a,
+  "radicaltp",
+  0x221a,
+  "radicalvertex",
+  0x221a,
+  "slashbig",
+  0x002f,
+  "slashBig",
+  0x002f,
+  "slashBigg",
+  0x002f,
+  "slashbigg",
+  0x002f,
+  "summationdisplay",
+  0x2211,
+  "summationtext",
+  0x2211,
+  "tildewide",
+  0x02dc,
+  "tildewider",
+  0x02dc,
+  "tildewidest",
+  0x02dc,
+  "uniondisplay",
+  0x22c3,
+  "unionmultidisplay",
+  0x228e,
+  "unionmultitext",
+  0x228e,
+  "unionsqdisplay",
+  0x2294,
+  "unionsqtext",
+  0x2294,
+  "uniontext",
+  0x22c3,
+  "vextenddouble",
+  0x2225,
+  "vextendsingle",
+  0x2223
+ ];
 });
-var getDingbatsGlyphsUnicode = getLookupTableFactory(function (t) {
- t.space = 0x0020;
- t.a1 = 0x2701;
- t.a2 = 0x2702;
- t.a202 = 0x2703;
- t.a3 = 0x2704;
- t.a4 = 0x260e;
- t.a5 = 0x2706;
- t.a119 = 0x2707;
- t.a118 = 0x2708;
- t.a117 = 0x2709;
- t.a11 = 0x261b;
- t.a12 = 0x261e;
- t.a13 = 0x270c;
- t.a14 = 0x270d;
- t.a15 = 0x270e;
- t.a16 = 0x270f;
- t.a105 = 0x2710;
- t.a17 = 0x2711;
- t.a18 = 0x2712;
- t.a19 = 0x2713;
- t.a20 = 0x2714;
- t.a21 = 0x2715;
- t.a22 = 0x2716;
- t.a23 = 0x2717;
- t.a24 = 0x2718;
- t.a25 = 0x2719;
- t.a26 = 0x271a;
- t.a27 = 0x271b;
- t.a28 = 0x271c;
- t.a6 = 0x271d;
- t.a7 = 0x271e;
- t.a8 = 0x271f;
- t.a9 = 0x2720;
- t.a10 = 0x2721;
- t.a29 = 0x2722;
- t.a30 = 0x2723;
- t.a31 = 0x2724;
- t.a32 = 0x2725;
- t.a33 = 0x2726;
- t.a34 = 0x2727;
- t.a35 = 0x2605;
- t.a36 = 0x2729;
- t.a37 = 0x272a;
- t.a38 = 0x272b;
- t.a39 = 0x272c;
- t.a40 = 0x272d;
- t.a41 = 0x272e;
- t.a42 = 0x272f;
- t.a43 = 0x2730;
- t.a44 = 0x2731;
- t.a45 = 0x2732;
- t.a46 = 0x2733;
- t.a47 = 0x2734;
- t.a48 = 0x2735;
- t.a49 = 0x2736;
- t.a50 = 0x2737;
- t.a51 = 0x2738;
- t.a52 = 0x2739;
- t.a53 = 0x273a;
- t.a54 = 0x273b;
- t.a55 = 0x273c;
- t.a56 = 0x273d;
- t.a57 = 0x273e;
- t.a58 = 0x273f;
- t.a59 = 0x2740;
- t.a60 = 0x2741;
- t.a61 = 0x2742;
- t.a62 = 0x2743;
- t.a63 = 0x2744;
- t.a64 = 0x2745;
- t.a65 = 0x2746;
- t.a66 = 0x2747;
- t.a67 = 0x2748;
- t.a68 = 0x2749;
- t.a69 = 0x274a;
- t.a70 = 0x274b;
- t.a71 = 0x25cf;
- t.a72 = 0x274d;
- t.a73 = 0x25a0;
- t.a74 = 0x274f;
- t.a203 = 0x2750;
- t.a75 = 0x2751;
- t.a204 = 0x2752;
- t.a76 = 0x25b2;
- t.a77 = 0x25bc;
- t.a78 = 0x25c6;
- t.a79 = 0x2756;
- t.a81 = 0x25d7;
- t.a82 = 0x2758;
- t.a83 = 0x2759;
- t.a84 = 0x275a;
- t.a97 = 0x275b;
- t.a98 = 0x275c;
- t.a99 = 0x275d;
- t.a100 = 0x275e;
- t.a101 = 0x2761;
- t.a102 = 0x2762;
- t.a103 = 0x2763;
- t.a104 = 0x2764;
- t.a106 = 0x2765;
- t.a107 = 0x2766;
- t.a108 = 0x2767;
- t.a112 = 0x2663;
- t.a111 = 0x2666;
- t.a110 = 0x2665;
- t.a109 = 0x2660;
- t.a120 = 0x2460;
- t.a121 = 0x2461;
- t.a122 = 0x2462;
- t.a123 = 0x2463;
- t.a124 = 0x2464;
- t.a125 = 0x2465;
- t.a126 = 0x2466;
- t.a127 = 0x2467;
- t.a128 = 0x2468;
- t.a129 = 0x2469;
- t.a130 = 0x2776;
- t.a131 = 0x2777;
- t.a132 = 0x2778;
- t.a133 = 0x2779;
- t.a134 = 0x277a;
- t.a135 = 0x277b;
- t.a136 = 0x277c;
- t.a137 = 0x277d;
- t.a138 = 0x277e;
- t.a139 = 0x277f;
- t.a140 = 0x2780;
- t.a141 = 0x2781;
- t.a142 = 0x2782;
- t.a143 = 0x2783;
- t.a144 = 0x2784;
- t.a145 = 0x2785;
- t.a146 = 0x2786;
- t.a147 = 0x2787;
- t.a148 = 0x2788;
- t.a149 = 0x2789;
- t.a150 = 0x278a;
- t.a151 = 0x278b;
- t.a152 = 0x278c;
- t.a153 = 0x278d;
- t.a154 = 0x278e;
- t.a155 = 0x278f;
- t.a156 = 0x2790;
- t.a157 = 0x2791;
- t.a158 = 0x2792;
- t.a159 = 0x2793;
- t.a160 = 0x2794;
- t.a161 = 0x2192;
- t.a163 = 0x2194;
- t.a164 = 0x2195;
- t.a196 = 0x2798;
- t.a165 = 0x2799;
- t.a192 = 0x279a;
- t.a166 = 0x279b;
- t.a167 = 0x279c;
- t.a168 = 0x279d;
- t.a169 = 0x279e;
- t.a170 = 0x279f;
- t.a171 = 0x27a0;
- t.a172 = 0x27a1;
- t.a173 = 0x27a2;
- t.a162 = 0x27a3;
- t.a174 = 0x27a4;
- t.a175 = 0x27a5;
- t.a176 = 0x27a6;
- t.a177 = 0x27a7;
- t.a178 = 0x27a8;
- t.a179 = 0x27a9;
- t.a193 = 0x27aa;
- t.a180 = 0x27ab;
- t.a199 = 0x27ac;
- t.a181 = 0x27ad;
- t.a200 = 0x27ae;
- t.a182 = 0x27af;
- t.a201 = 0x27b1;
- t.a183 = 0x27b2;
- t.a184 = 0x27b3;
- t.a197 = 0x27b4;
- t.a185 = 0x27b5;
- t.a194 = 0x27b6;
- t.a198 = 0x27b7;
- t.a186 = 0x27b8;
- t.a195 = 0x27b9;
- t.a187 = 0x27ba;
- t.a188 = 0x27bb;
- t.a189 = 0x27bc;
- t.a190 = 0x27bd;
- t.a191 = 0x27be;
- t.a89 = 0x2768;
- t.a90 = 0x2769;
- t.a93 = 0x276a;
- t.a94 = 0x276b;
- t.a91 = 0x276c;
- t.a92 = 0x276d;
- t.a205 = 0x276e;
- t.a85 = 0x276f;
- t.a206 = 0x2770;
- t.a86 = 0x2771;
- t.a87 = 0x2772;
- t.a88 = 0x2773;
- t.a95 = 0x2774;
- t.a96 = 0x2775;
- t[".notdef"] = 0x0000;
+const getDingbatsGlyphsUnicode = 
(0,_core_utils_js__WEBPACK_IMPORTED_MODULE_0__.getArrayLookupTableFactory)(function () {
+ return [
+  "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,
+  "a90",
+  0x2769,
+  "a93",
+  0x276a,
+  "a94",
+  0x276b,
+  "a91",
+  0x276c,
+  "a92",
+  0x276d,
+  "a205",
+  0x276e,
+  "a85",
+  0x276f,
+  "a206",
+  0x2770,
+  "a86",
+  0x2771,
+  "a87",
+  0x2772,
+  "a88",
+  0x2773,
+  "a95",
+  0x2774,
+  "a96",
+  0x2775,
+  ".notdef",
+  0x0000
+ ];
 });
-exports.getGlyphsUnicode = getGlyphsUnicode;
-exports.getDingbatsGlyphsUnicode = getDingbatsGlyphsUnicode;
+
 
 /***/ }),
-/* 35 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/* 36 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
-exports.getSupplementalGlyphMapForCalibri = exports.getSupplementalGlyphMapForArialBlack = 
exports.getGlyphMapForStandardFonts = exports.getSymbolsFonts = exports.getSerifFonts = 
exports.getNonStdFontMap = exports.getStdFontMap = void 0;
+}));
+exports.getSymbolsFonts = exports.getSupplementalGlyphMapForCalibri = 
exports.getSupplementalGlyphMapForArialBlack = exports.getStdFontMap = exports.getSerifFonts = 
exports.getNonStdFontMap = exports.getGlyphMapForStandardFonts = void 0;
 
 var _core_utils = __w_pdfjs_require__(8);
 
@@ -36628,11 +42534,20 @@ const getSupplementalGlyphMapForCalibri = (0, _core_utils.getLookupTableFactory)
 exports.getSupplementalGlyphMapForCalibri = getSupplementalGlyphMapForCalibri;
 
 /***/ }),
-/* 36 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-var getLookupTableFactory = __w_pdfjs_require__(8).getLookupTableFactory;
-var getSpecialPUASymbols = getLookupTableFactory(function (t) {
+/* 37 */
+/***/ ((__unused_webpack_module, __webpack_exports__, __w_pdfjs_require__) => {
+
+__w_pdfjs_require__.r(__webpack_exports__);
+/* harmony export */ __w_pdfjs_require__.d(__webpack_exports__, {
+/* harmony export */   "getNormalizedUnicodes": () => (/* binding */ getNormalizedUnicodes),
+/* harmony export */   "getUnicodeForGlyph": () => (/* binding */ getUnicodeForGlyph),
+/* harmony export */   "getUnicodeRangeFor": () => (/* binding */ getUnicodeRangeFor),
+/* harmony export */   "mapSpecialUnicodeValues": () => (/* binding */ mapSpecialUnicodeValues),
+/* harmony export */   "reverseIfRtl": () => (/* binding */ reverseIfRtl)
+/* harmony export */ });
+/* harmony import */ var _core_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __w_pdfjs_require__(8);
+
+const getSpecialPUASymbols = (0,_core_utils_js__WEBPACK_IMPORTED_MODULE_0__.getLookupTableFactory)(function 
(t) {
  t[63721] = 0x00a9;
  t[63193] = 0x00a9;
  t[63720] = 0x00ae;
@@ -36669,7 +42584,7 @@ function mapSpecialUnicodeValues(code) {
  return code;
 }
 function getUnicodeForGlyph(name, glyphsUnicodeMap) {
- var unicode = glyphsUnicodeMap[name];
+ let unicode = glyphsUnicodeMap[name];
  if (unicode !== undefined) {
   return unicode;
  }
@@ -36677,7 +42592,8 @@ function getUnicodeForGlyph(name, glyphsUnicodeMap) {
   return -1;
  }
  if (name[0] === "u") {
-  var nameLen = name.length, hexStr;
+  const nameLen = name.length;
+  let hexStr;
   if (nameLen === 7 && name[1] === "n" && name[2] === "i") {
    hexStr = name.substring(3);
   } else if (nameLen >= 5 && nameLen <= 7) {
@@ -36694,7 +42610,7 @@ function getUnicodeForGlyph(name, glyphsUnicodeMap) {
  }
  return -1;
 }
-var UnicodeRanges = [
+const UnicodeRanges = [
  {
   begin: 0x0000,
   end: 0x007f
@@ -37189,8 +43105,8 @@ var UnicodeRanges = [
  }
 ];
 function getUnicodeRangeFor(value) {
- for (var i = 0, ii = UnicodeRanges.length; i < ii; i++) {
-  var range = UnicodeRanges[i];
+ for (let i = 0, ii = UnicodeRanges.length; i < ii; i++) {
+  const range = UnicodeRanges[i];
   if (value >= range.begin && value < range.end) {
    return i;
   }
@@ -37198,7 +43114,7 @@ function getUnicodeRangeFor(value) {
  return -1;
 }
 function isRTLRangeFor(value) {
- var range = UnicodeRanges[13];
+ let range = UnicodeRanges[13];
  if (value >= range.begin && value < range.end) {
   return true;
  }
@@ -37208,1425 +43124,2799 @@ function isRTLRangeFor(value) {
  }
  return false;
 }
-var getNormalizedUnicodes = getLookupTableFactory(function (t) {
- t["\u00A8"] = "\u0020\u0308";
- t["\u00AF"] = "\u0020\u0304";
- t["\u00B4"] = "\u0020\u0301";
- t["\u00B5"] = "\u03BC";
- t["\u00B8"] = "\u0020\u0327";
- t["\u0132"] = "\u0049\u004A";
- t["\u0133"] = "\u0069\u006A";
- t["\u013F"] = "\u004C\u00B7";
- t["\u0140"] = "\u006C\u00B7";
- t["\u0149"] = "\u02BC\u006E";
- t["\u017F"] = "\u0073";
- t["\u01C4"] = "\u0044\u017D";
- t["\u01C5"] = "\u0044\u017E";
- t["\u01C6"] = "\u0064\u017E";
- t["\u01C7"] = "\u004C\u004A";
- t["\u01C8"] = "\u004C\u006A";
- t["\u01C9"] = "\u006C\u006A";
- t["\u01CA"] = "\u004E\u004A";
- t["\u01CB"] = "\u004E\u006A";
- t["\u01CC"] = "\u006E\u006A";
- t["\u01F1"] = "\u0044\u005A";
- t["\u01F2"] = "\u0044\u007A";
- t["\u01F3"] = "\u0064\u007A";
- t["\u02D8"] = "\u0020\u0306";
- t["\u02D9"] = "\u0020\u0307";
- t["\u02DA"] = "\u0020\u030A";
- t["\u02DB"] = "\u0020\u0328";
- t["\u02DC"] = "\u0020\u0303";
- t["\u02DD"] = "\u0020\u030B";
- t["\u037A"] = "\u0020\u0345";
- t["\u0384"] = "\u0020\u0301";
- t["\u03D0"] = "\u03B2";
- t["\u03D1"] = "\u03B8";
- t["\u03D2"] = "\u03A5";
- t["\u03D5"] = "\u03C6";
- t["\u03D6"] = "\u03C0";
- t["\u03F0"] = "\u03BA";
- t["\u03F1"] = "\u03C1";
- t["\u03F2"] = "\u03C2";
- t["\u03F4"] = "\u0398";
- t["\u03F5"] = "\u03B5";
- t["\u03F9"] = "\u03A3";
- t["\u0587"] = "\u0565\u0582";
- t["\u0675"] = "\u0627\u0674";
- t["\u0676"] = "\u0648\u0674";
- t["\u0677"] = "\u06C7\u0674";
- t["\u0678"] = "\u064A\u0674";
- t["\u0E33"] = "\u0E4D\u0E32";
- t["\u0EB3"] = "\u0ECD\u0EB2";
- t["\u0EDC"] = "\u0EAB\u0E99";
- t["\u0EDD"] = "\u0EAB\u0EA1";
- t["\u0F77"] = "\u0FB2\u0F81";
- t["\u0F79"] = "\u0FB3\u0F81";
- t["\u1E9A"] = "\u0061\u02BE";
- t["\u1FBD"] = "\u0020\u0313";
- t["\u1FBF"] = "\u0020\u0313";
- t["\u1FC0"] = "\u0020\u0342";
- t["\u1FFE"] = "\u0020\u0314";
- t["\u2002"] = "\u0020";
- t["\u2003"] = "\u0020";
- t["\u2004"] = "\u0020";
- t["\u2005"] = "\u0020";
- t["\u2006"] = "\u0020";
- t["\u2008"] = "\u0020";
- t["\u2009"] = "\u0020";
- t["\u200A"] = "\u0020";
- t["\u2017"] = "\u0020\u0333";
- t["\u2024"] = "\u002E";
- t["\u2025"] = "\u002E\u002E";
- t["\u2026"] = "\u002E\u002E\u002E";
- t["\u2033"] = "\u2032\u2032";
- t["\u2034"] = "\u2032\u2032\u2032";
- t["\u2036"] = "\u2035\u2035";
- t["\u2037"] = "\u2035\u2035\u2035";
- t["\u203C"] = "\u0021\u0021";
- t["\u203E"] = "\u0020\u0305";
- t["\u2047"] = "\u003F\u003F";
- t["\u2048"] = "\u003F\u0021";
- t["\u2049"] = "\u0021\u003F";
- t["\u2057"] = "\u2032\u2032\u2032\u2032";
- t["\u205F"] = "\u0020";
- t["\u20A8"] = "\u0052\u0073";
- t["\u2100"] = "\u0061\u002F\u0063";
- t["\u2101"] = "\u0061\u002F\u0073";
- t["\u2103"] = "\u00B0\u0043";
- t["\u2105"] = "\u0063\u002F\u006F";
- t["\u2106"] = "\u0063\u002F\u0075";
- t["\u2107"] = "\u0190";
- t["\u2109"] = "\u00B0\u0046";
- t["\u2116"] = "\u004E\u006F";
- t["\u2121"] = "\u0054\u0045\u004C";
- t["\u2135"] = "\u05D0";
- t["\u2136"] = "\u05D1";
- t["\u2137"] = "\u05D2";
- t["\u2138"] = "\u05D3";
- t["\u213B"] = "\u0046\u0041\u0058";
- t["\u2160"] = "\u0049";
- t["\u2161"] = "\u0049\u0049";
- t["\u2162"] = "\u0049\u0049\u0049";
- t["\u2163"] = "\u0049\u0056";
- t["\u2164"] = "\u0056";
- t["\u2165"] = "\u0056\u0049";
- t["\u2166"] = "\u0056\u0049\u0049";
- t["\u2167"] = "\u0056\u0049\u0049\u0049";
- t["\u2168"] = "\u0049\u0058";
- t["\u2169"] = "\u0058";
- t["\u216A"] = "\u0058\u0049";
- t["\u216B"] = "\u0058\u0049\u0049";
- t["\u216C"] = "\u004C";
- t["\u216D"] = "\u0043";
- t["\u216E"] = "\u0044";
- t["\u216F"] = "\u004D";
- t["\u2170"] = "\u0069";
- t["\u2171"] = "\u0069\u0069";
- t["\u2172"] = "\u0069\u0069\u0069";
- t["\u2173"] = "\u0069\u0076";
- t["\u2174"] = "\u0076";
- t["\u2175"] = "\u0076\u0069";
- t["\u2176"] = "\u0076\u0069\u0069";
- t["\u2177"] = "\u0076\u0069\u0069\u0069";
- t["\u2178"] = "\u0069\u0078";
- t["\u2179"] = "\u0078";
- t["\u217A"] = "\u0078\u0069";
- t["\u217B"] = "\u0078\u0069\u0069";
- t["\u217C"] = "\u006C";
- t["\u217D"] = "\u0063";
- t["\u217E"] = "\u0064";
- t["\u217F"] = "\u006D";
- t["\u222C"] = "\u222B\u222B";
- t["\u222D"] = "\u222B\u222B\u222B";
- t["\u222F"] = "\u222E\u222E";
- t["\u2230"] = "\u222E\u222E\u222E";
- t["\u2474"] = "\u0028\u0031\u0029";
- t["\u2475"] = "\u0028\u0032\u0029";
- t["\u2476"] = "\u0028\u0033\u0029";
- t["\u2477"] = "\u0028\u0034\u0029";
- t["\u2478"] = "\u0028\u0035\u0029";
- t["\u2479"] = "\u0028\u0036\u0029";
- t["\u247A"] = "\u0028\u0037\u0029";
- t["\u247B"] = "\u0028\u0038\u0029";
- t["\u247C"] = "\u0028\u0039\u0029";
- t["\u247D"] = "\u0028\u0031\u0030\u0029";
- t["\u247E"] = "\u0028\u0031\u0031\u0029";
- t["\u247F"] = "\u0028\u0031\u0032\u0029";
- t["\u2480"] = "\u0028\u0031\u0033\u0029";
- t["\u2481"] = "\u0028\u0031\u0034\u0029";
- t["\u2482"] = "\u0028\u0031\u0035\u0029";
- t["\u2483"] = "\u0028\u0031\u0036\u0029";
- t["\u2484"] = "\u0028\u0031\u0037\u0029";
- t["\u2485"] = "\u0028\u0031\u0038\u0029";
- t["\u2486"] = "\u0028\u0031\u0039\u0029";
- t["\u2487"] = "\u0028\u0032\u0030\u0029";
- t["\u2488"] = "\u0031\u002E";
- t["\u2489"] = "\u0032\u002E";
- t["\u248A"] = "\u0033\u002E";
- t["\u248B"] = "\u0034\u002E";
- t["\u248C"] = "\u0035\u002E";
- t["\u248D"] = "\u0036\u002E";
- t["\u248E"] = "\u0037\u002E";
- t["\u248F"] = "\u0038\u002E";
- t["\u2490"] = "\u0039\u002E";
- t["\u2491"] = "\u0031\u0030\u002E";
- t["\u2492"] = "\u0031\u0031\u002E";
- t["\u2493"] = "\u0031\u0032\u002E";
- t["\u2494"] = "\u0031\u0033\u002E";
- t["\u2495"] = "\u0031\u0034\u002E";
- t["\u2496"] = "\u0031\u0035\u002E";
- t["\u2497"] = "\u0031\u0036\u002E";
- t["\u2498"] = "\u0031\u0037\u002E";
- t["\u2499"] = "\u0031\u0038\u002E";
- t["\u249A"] = "\u0031\u0039\u002E";
- t["\u249B"] = "\u0032\u0030\u002E";
- t["\u249C"] = "\u0028\u0061\u0029";
- t["\u249D"] = "\u0028\u0062\u0029";
- t["\u249E"] = "\u0028\u0063\u0029";
- t["\u249F"] = "\u0028\u0064\u0029";
- t["\u24A0"] = "\u0028\u0065\u0029";
- t["\u24A1"] = "\u0028\u0066\u0029";
- t["\u24A2"] = "\u0028\u0067\u0029";
- t["\u24A3"] = "\u0028\u0068\u0029";
- t["\u24A4"] = "\u0028\u0069\u0029";
- t["\u24A5"] = "\u0028\u006A\u0029";
- t["\u24A6"] = "\u0028\u006B\u0029";
- t["\u24A7"] = "\u0028\u006C\u0029";
- t["\u24A8"] = "\u0028\u006D\u0029";
- t["\u24A9"] = "\u0028\u006E\u0029";
- t["\u24AA"] = "\u0028\u006F\u0029";
- t["\u24AB"] = "\u0028\u0070\u0029";
- t["\u24AC"] = "\u0028\u0071\u0029";
- t["\u24AD"] = "\u0028\u0072\u0029";
- t["\u24AE"] = "\u0028\u0073\u0029";
- t["\u24AF"] = "\u0028\u0074\u0029";
- t["\u24B0"] = "\u0028\u0075\u0029";
- t["\u24B1"] = "\u0028\u0076\u0029";
- t["\u24B2"] = "\u0028\u0077\u0029";
- t["\u24B3"] = "\u0028\u0078\u0029";
- t["\u24B4"] = "\u0028\u0079\u0029";
- t["\u24B5"] = "\u0028\u007A\u0029";
- t["\u2A0C"] = "\u222B\u222B\u222B\u222B";
- t["\u2A74"] = "\u003A\u003A\u003D";
- t["\u2A75"] = "\u003D\u003D";
- t["\u2A76"] = "\u003D\u003D\u003D";
- t["\u2E9F"] = "\u6BCD";
- t["\u2EF3"] = "\u9F9F";
- t["\u2F00"] = "\u4E00";
- t["\u2F01"] = "\u4E28";
- t["\u2F02"] = "\u4E36";
- t["\u2F03"] = "\u4E3F";
- t["\u2F04"] = "\u4E59";
- t["\u2F05"] = "\u4E85";
- t["\u2F06"] = "\u4E8C";
- t["\u2F07"] = "\u4EA0";
- t["\u2F08"] = "\u4EBA";
- t["\u2F09"] = "\u513F";
- t["\u2F0A"] = "\u5165";
- t["\u2F0B"] = "\u516B";
- t["\u2F0C"] = "\u5182";
- t["\u2F0D"] = "\u5196";
- t["\u2F0E"] = "\u51AB";
- t["\u2F0F"] = "\u51E0";
- t["\u2F10"] = "\u51F5";
- t["\u2F11"] = "\u5200";
- t["\u2F12"] = "\u529B";
- t["\u2F13"] = "\u52F9";
- t["\u2F14"] = "\u5315";
- t["\u2F15"] = "\u531A";
- t["\u2F16"] = "\u5338";
- t["\u2F17"] = "\u5341";
- t["\u2F18"] = "\u535C";
- t["\u2F19"] = "\u5369";
- t["\u2F1A"] = "\u5382";
- t["\u2F1B"] = "\u53B6";
- t["\u2F1C"] = "\u53C8";
- t["\u2F1D"] = "\u53E3";
- t["\u2F1E"] = "\u56D7";
- t["\u2F1F"] = "\u571F";
- t["\u2F20"] = "\u58EB";
- t["\u2F21"] = "\u5902";
- t["\u2F22"] = "\u590A";
- t["\u2F23"] = "\u5915";
- t["\u2F24"] = "\u5927";
- t["\u2F25"] = "\u5973";
- t["\u2F26"] = "\u5B50";
- t["\u2F27"] = "\u5B80";
- t["\u2F28"] = "\u5BF8";
- t["\u2F29"] = "\u5C0F";
- t["\u2F2A"] = "\u5C22";
- t["\u2F2B"] = "\u5C38";
- t["\u2F2C"] = "\u5C6E";
- t["\u2F2D"] = "\u5C71";
- t["\u2F2E"] = "\u5DDB";
- t["\u2F2F"] = "\u5DE5";
- t["\u2F30"] = "\u5DF1";
- t["\u2F31"] = "\u5DFE";
- t["\u2F32"] = "\u5E72";
- t["\u2F33"] = "\u5E7A";
- t["\u2F34"] = "\u5E7F";
- t["\u2F35"] = "\u5EF4";
- t["\u2F36"] = "\u5EFE";
- t["\u2F37"] = "\u5F0B";
- t["\u2F38"] = "\u5F13";
- t["\u2F39"] = "\u5F50";
- t["\u2F3A"] = "\u5F61";
- t["\u2F3B"] = "\u5F73";
- t["\u2F3C"] = "\u5FC3";
- t["\u2F3D"] = "\u6208";
- t["\u2F3E"] = "\u6236";
- t["\u2F3F"] = "\u624B";
- t["\u2F40"] = "\u652F";
- t["\u2F41"] = "\u6534";
- t["\u2F42"] = "\u6587";
- t["\u2F43"] = "\u6597";
- t["\u2F44"] = "\u65A4";
- t["\u2F45"] = "\u65B9";
- t["\u2F46"] = "\u65E0";
- t["\u2F47"] = "\u65E5";
- t["\u2F48"] = "\u66F0";
- t["\u2F49"] = "\u6708";
- t["\u2F4A"] = "\u6728";
- t["\u2F4B"] = "\u6B20";
- t["\u2F4C"] = "\u6B62";
- t["\u2F4D"] = "\u6B79";
- t["\u2F4E"] = "\u6BB3";
- t["\u2F4F"] = "\u6BCB";
- t["\u2F50"] = "\u6BD4";
- t["\u2F51"] = "\u6BDB";
- t["\u2F52"] = "\u6C0F";
- t["\u2F53"] = "\u6C14";
- t["\u2F54"] = "\u6C34";
- t["\u2F55"] = "\u706B";
- t["\u2F56"] = "\u722A";
- t["\u2F57"] = "\u7236";
- t["\u2F58"] = "\u723B";
- t["\u2F59"] = "\u723F";
- t["\u2F5A"] = "\u7247";
- t["\u2F5B"] = "\u7259";
- t["\u2F5C"] = "\u725B";
- t["\u2F5D"] = "\u72AC";
- t["\u2F5E"] = "\u7384";
- t["\u2F5F"] = "\u7389";
- t["\u2F60"] = "\u74DC";
- t["\u2F61"] = "\u74E6";
- t["\u2F62"] = "\u7518";
- t["\u2F63"] = "\u751F";
- t["\u2F64"] = "\u7528";
- t["\u2F65"] = "\u7530";
- t["\u2F66"] = "\u758B";
- t["\u2F67"] = "\u7592";
- t["\u2F68"] = "\u7676";
- t["\u2F69"] = "\u767D";
- t["\u2F6A"] = "\u76AE";
- t["\u2F6B"] = "\u76BF";
- t["\u2F6C"] = "\u76EE";
- t["\u2F6D"] = "\u77DB";
- t["\u2F6E"] = "\u77E2";
- t["\u2F6F"] = "\u77F3";
- t["\u2F70"] = "\u793A";
- t["\u2F71"] = "\u79B8";
- t["\u2F72"] = "\u79BE";
- t["\u2F73"] = "\u7A74";
- t["\u2F74"] = "\u7ACB";
- t["\u2F75"] = "\u7AF9";
- t["\u2F76"] = "\u7C73";
- t["\u2F77"] = "\u7CF8";
- t["\u2F78"] = "\u7F36";
- t["\u2F79"] = "\u7F51";
- t["\u2F7A"] = "\u7F8A";
- t["\u2F7B"] = "\u7FBD";
- t["\u2F7C"] = "\u8001";
- t["\u2F7D"] = "\u800C";
- t["\u2F7E"] = "\u8012";
- t["\u2F7F"] = "\u8033";
- t["\u2F80"] = "\u807F";
- t["\u2F81"] = "\u8089";
- t["\u2F82"] = "\u81E3";
- t["\u2F83"] = "\u81EA";
- t["\u2F84"] = "\u81F3";
- t["\u2F85"] = "\u81FC";
- t["\u2F86"] = "\u820C";
- t["\u2F87"] = "\u821B";
- t["\u2F88"] = "\u821F";
- t["\u2F89"] = "\u826E";
- t["\u2F8A"] = "\u8272";
- t["\u2F8B"] = "\u8278";
- t["\u2F8C"] = "\u864D";
- t["\u2F8D"] = "\u866B";
- t["\u2F8E"] = "\u8840";
- t["\u2F8F"] = "\u884C";
- t["\u2F90"] = "\u8863";
- t["\u2F91"] = "\u897E";
- t["\u2F92"] = "\u898B";
- t["\u2F93"] = "\u89D2";
- t["\u2F94"] = "\u8A00";
- t["\u2F95"] = "\u8C37";
- t["\u2F96"] = "\u8C46";
- t["\u2F97"] = "\u8C55";
- t["\u2F98"] = "\u8C78";
- t["\u2F99"] = "\u8C9D";
- t["\u2F9A"] = "\u8D64";
- t["\u2F9B"] = "\u8D70";
- t["\u2F9C"] = "\u8DB3";
- t["\u2F9D"] = "\u8EAB";
- t["\u2F9E"] = "\u8ECA";
- t["\u2F9F"] = "\u8F9B";
- t["\u2FA0"] = "\u8FB0";
- t["\u2FA1"] = "\u8FB5";
- t["\u2FA2"] = "\u9091";
- t["\u2FA3"] = "\u9149";
- t["\u2FA4"] = "\u91C6";
- t["\u2FA5"] = "\u91CC";
- t["\u2FA6"] = "\u91D1";
- t["\u2FA7"] = "\u9577";
- t["\u2FA8"] = "\u9580";
- t["\u2FA9"] = "\u961C";
- t["\u2FAA"] = "\u96B6";
- t["\u2FAB"] = "\u96B9";
- t["\u2FAC"] = "\u96E8";
- t["\u2FAD"] = "\u9751";
- t["\u2FAE"] = "\u975E";
- t["\u2FAF"] = "\u9762";
- t["\u2FB0"] = "\u9769";
- t["\u2FB1"] = "\u97CB";
- t["\u2FB2"] = "\u97ED";
- t["\u2FB3"] = "\u97F3";
- t["\u2FB4"] = "\u9801";
- t["\u2FB5"] = "\u98A8";
- t["\u2FB6"] = "\u98DB";
- t["\u2FB7"] = "\u98DF";
- t["\u2FB8"] = "\u9996";
- t["\u2FB9"] = "\u9999";
- t["\u2FBA"] = "\u99AC";
- t["\u2FBB"] = "\u9AA8";
- t["\u2FBC"] = "\u9AD8";
- t["\u2FBD"] = "\u9ADF";
- t["\u2FBE"] = "\u9B25";
- t["\u2FBF"] = "\u9B2F";
- t["\u2FC0"] = "\u9B32";
- t["\u2FC1"] = "\u9B3C";
- t["\u2FC2"] = "\u9B5A";
- t["\u2FC3"] = "\u9CE5";
- t["\u2FC4"] = "\u9E75";
- t["\u2FC5"] = "\u9E7F";
- t["\u2FC6"] = "\u9EA5";
- t["\u2FC7"] = "\u9EBB";
- t["\u2FC8"] = "\u9EC3";
- t["\u2FC9"] = "\u9ECD";
- t["\u2FCA"] = "\u9ED1";
- t["\u2FCB"] = "\u9EF9";
- t["\u2FCC"] = "\u9EFD";
- t["\u2FCD"] = "\u9F0E";
- t["\u2FCE"] = "\u9F13";
- t["\u2FCF"] = "\u9F20";
- t["\u2FD0"] = "\u9F3B";
- t["\u2FD1"] = "\u9F4A";
- t["\u2FD2"] = "\u9F52";
- t["\u2FD3"] = "\u9F8D";
- t["\u2FD4"] = "\u9F9C";
- t["\u2FD5"] = "\u9FA0";
- t["\u3036"] = "\u3012";
- t["\u3038"] = "\u5341";
- t["\u3039"] = "\u5344";
- t["\u303A"] = "\u5345";
- t["\u309B"] = "\u0020\u3099";
- t["\u309C"] = "\u0020\u309A";
- t["\u3131"] = "\u1100";
- t["\u3132"] = "\u1101";
- t["\u3133"] = "\u11AA";
- t["\u3134"] = "\u1102";
- t["\u3135"] = "\u11AC";
- t["\u3136"] = "\u11AD";
- t["\u3137"] = "\u1103";
- t["\u3138"] = "\u1104";
- t["\u3139"] = "\u1105";
- t["\u313A"] = "\u11B0";
- t["\u313B"] = "\u11B1";
- t["\u313C"] = "\u11B2";
- t["\u313D"] = "\u11B3";
- t["\u313E"] = "\u11B4";
- t["\u313F"] = "\u11B5";
- t["\u3140"] = "\u111A";
- t["\u3141"] = "\u1106";
- t["\u3142"] = "\u1107";
- t["\u3143"] = "\u1108";
- t["\u3144"] = "\u1121";
- t["\u3145"] = "\u1109";
- t["\u3146"] = "\u110A";
- t["\u3147"] = "\u110B";
- t["\u3148"] = "\u110C";
- t["\u3149"] = "\u110D";
- t["\u314A"] = "\u110E";
- t["\u314B"] = "\u110F";
- t["\u314C"] = "\u1110";
- t["\u314D"] = "\u1111";
- t["\u314E"] = "\u1112";
- t["\u314F"] = "\u1161";
- t["\u3150"] = "\u1162";
- t["\u3151"] = "\u1163";
- t["\u3152"] = "\u1164";
- t["\u3153"] = "\u1165";
- t["\u3154"] = "\u1166";
- t["\u3155"] = "\u1167";
- t["\u3156"] = "\u1168";
- t["\u3157"] = "\u1169";
- t["\u3158"] = "\u116A";
- t["\u3159"] = "\u116B";
- t["\u315A"] = "\u116C";
- t["\u315B"] = "\u116D";
- t["\u315C"] = "\u116E";
- t["\u315D"] = "\u116F";
- t["\u315E"] = "\u1170";
- t["\u315F"] = "\u1171";
- t["\u3160"] = "\u1172";
- t["\u3161"] = "\u1173";
- t["\u3162"] = "\u1174";
- t["\u3163"] = "\u1175";
- t["\u3164"] = "\u1160";
- t["\u3165"] = "\u1114";
- t["\u3166"] = "\u1115";
- t["\u3167"] = "\u11C7";
- t["\u3168"] = "\u11C8";
- t["\u3169"] = "\u11CC";
- t["\u316A"] = "\u11CE";
- t["\u316B"] = "\u11D3";
- t["\u316C"] = "\u11D7";
- t["\u316D"] = "\u11D9";
- t["\u316E"] = "\u111C";
- t["\u316F"] = "\u11DD";
- t["\u3170"] = "\u11DF";
- t["\u3171"] = "\u111D";
- t["\u3172"] = "\u111E";
- t["\u3173"] = "\u1120";
- t["\u3174"] = "\u1122";
- t["\u3175"] = "\u1123";
- t["\u3176"] = "\u1127";
- t["\u3177"] = "\u1129";
- t["\u3178"] = "\u112B";
- t["\u3179"] = "\u112C";
- t["\u317A"] = "\u112D";
- t["\u317B"] = "\u112E";
- t["\u317C"] = "\u112F";
- t["\u317D"] = "\u1132";
- t["\u317E"] = "\u1136";
- t["\u317F"] = "\u1140";
- t["\u3180"] = "\u1147";
- t["\u3181"] = "\u114C";
- t["\u3182"] = "\u11F1";
- t["\u3183"] = "\u11F2";
- t["\u3184"] = "\u1157";
- t["\u3185"] = "\u1158";
- t["\u3186"] = "\u1159";
- t["\u3187"] = "\u1184";
- t["\u3188"] = "\u1185";
- t["\u3189"] = "\u1188";
- t["\u318A"] = "\u1191";
- t["\u318B"] = "\u1192";
- t["\u318C"] = "\u1194";
- t["\u318D"] = "\u119E";
- t["\u318E"] = "\u11A1";
- t["\u3200"] = "\u0028\u1100\u0029";
- t["\u3201"] = "\u0028\u1102\u0029";
- t["\u3202"] = "\u0028\u1103\u0029";
- t["\u3203"] = "\u0028\u1105\u0029";
- t["\u3204"] = "\u0028\u1106\u0029";
- t["\u3205"] = "\u0028\u1107\u0029";
- t["\u3206"] = "\u0028\u1109\u0029";
- t["\u3207"] = "\u0028\u110B\u0029";
- t["\u3208"] = "\u0028\u110C\u0029";
- t["\u3209"] = "\u0028\u110E\u0029";
- t["\u320A"] = "\u0028\u110F\u0029";
- t["\u320B"] = "\u0028\u1110\u0029";
- t["\u320C"] = "\u0028\u1111\u0029";
- t["\u320D"] = "\u0028\u1112\u0029";
- t["\u320E"] = "\u0028\u1100\u1161\u0029";
- t["\u320F"] = "\u0028\u1102\u1161\u0029";
- t["\u3210"] = "\u0028\u1103\u1161\u0029";
- t["\u3211"] = "\u0028\u1105\u1161\u0029";
- t["\u3212"] = "\u0028\u1106\u1161\u0029";
- t["\u3213"] = "\u0028\u1107\u1161\u0029";
- t["\u3214"] = "\u0028\u1109\u1161\u0029";
- t["\u3215"] = "\u0028\u110B\u1161\u0029";
- t["\u3216"] = "\u0028\u110C\u1161\u0029";
- t["\u3217"] = "\u0028\u110E\u1161\u0029";
- t["\u3218"] = "\u0028\u110F\u1161\u0029";
- t["\u3219"] = "\u0028\u1110\u1161\u0029";
- t["\u321A"] = "\u0028\u1111\u1161\u0029";
- t["\u321B"] = "\u0028\u1112\u1161\u0029";
- t["\u321C"] = "\u0028\u110C\u116E\u0029";
- t["\u321D"] = "\u0028\u110B\u1169\u110C\u1165\u11AB\u0029";
- t["\u321E"] = "\u0028\u110B\u1169\u1112\u116E\u0029";
- t["\u3220"] = "\u0028\u4E00\u0029";
- t["\u3221"] = "\u0028\u4E8C\u0029";
- t["\u3222"] = "\u0028\u4E09\u0029";
- t["\u3223"] = "\u0028\u56DB\u0029";
- t["\u3224"] = "\u0028\u4E94\u0029";
- t["\u3225"] = "\u0028\u516D\u0029";
- t["\u3226"] = "\u0028\u4E03\u0029";
- t["\u3227"] = "\u0028\u516B\u0029";
- t["\u3228"] = "\u0028\u4E5D\u0029";
- t["\u3229"] = "\u0028\u5341\u0029";
- t["\u322A"] = "\u0028\u6708\u0029";
- t["\u322B"] = "\u0028\u706B\u0029";
- t["\u322C"] = "\u0028\u6C34\u0029";
- t["\u322D"] = "\u0028\u6728\u0029";
- t["\u322E"] = "\u0028\u91D1\u0029";
- t["\u322F"] = "\u0028\u571F\u0029";
- t["\u3230"] = "\u0028\u65E5\u0029";
- t["\u3231"] = "\u0028\u682A\u0029";
- t["\u3232"] = "\u0028\u6709\u0029";
- t["\u3233"] = "\u0028\u793E\u0029";
- t["\u3234"] = "\u0028\u540D\u0029";
- t["\u3235"] = "\u0028\u7279\u0029";
- t["\u3236"] = "\u0028\u8CA1\u0029";
- t["\u3237"] = "\u0028\u795D\u0029";
- t["\u3238"] = "\u0028\u52B4\u0029";
- t["\u3239"] = "\u0028\u4EE3\u0029";
- t["\u323A"] = "\u0028\u547C\u0029";
- t["\u323B"] = "\u0028\u5B66\u0029";
- t["\u323C"] = "\u0028\u76E3\u0029";
- t["\u323D"] = "\u0028\u4F01\u0029";
- t["\u323E"] = "\u0028\u8CC7\u0029";
- t["\u323F"] = "\u0028\u5354\u0029";
- t["\u3240"] = "\u0028\u796D\u0029";
- t["\u3241"] = "\u0028\u4F11\u0029";
- t["\u3242"] = "\u0028\u81EA\u0029";
- t["\u3243"] = "\u0028\u81F3\u0029";
- t["\u32C0"] = "\u0031\u6708";
- t["\u32C1"] = "\u0032\u6708";
- t["\u32C2"] = "\u0033\u6708";
- t["\u32C3"] = "\u0034\u6708";
- t["\u32C4"] = "\u0035\u6708";
- t["\u32C5"] = "\u0036\u6708";
- t["\u32C6"] = "\u0037\u6708";
- t["\u32C7"] = "\u0038\u6708";
- t["\u32C8"] = "\u0039\u6708";
- t["\u32C9"] = "\u0031\u0030\u6708";
- t["\u32CA"] = "\u0031\u0031\u6708";
- t["\u32CB"] = "\u0031\u0032\u6708";
- t["\u3358"] = "\u0030\u70B9";
- t["\u3359"] = "\u0031\u70B9";
- t["\u335A"] = "\u0032\u70B9";
- t["\u335B"] = "\u0033\u70B9";
- t["\u335C"] = "\u0034\u70B9";
- t["\u335D"] = "\u0035\u70B9";
- t["\u335E"] = "\u0036\u70B9";
- t["\u335F"] = "\u0037\u70B9";
- t["\u3360"] = "\u0038\u70B9";
- t["\u3361"] = "\u0039\u70B9";
- t["\u3362"] = "\u0031\u0030\u70B9";
- t["\u3363"] = "\u0031\u0031\u70B9";
- t["\u3364"] = "\u0031\u0032\u70B9";
- t["\u3365"] = "\u0031\u0033\u70B9";
- t["\u3366"] = "\u0031\u0034\u70B9";
- t["\u3367"] = "\u0031\u0035\u70B9";
- t["\u3368"] = "\u0031\u0036\u70B9";
- t["\u3369"] = "\u0031\u0037\u70B9";
- t["\u336A"] = "\u0031\u0038\u70B9";
- t["\u336B"] = "\u0031\u0039\u70B9";
- t["\u336C"] = "\u0032\u0030\u70B9";
- t["\u336D"] = "\u0032\u0031\u70B9";
- t["\u336E"] = "\u0032\u0032\u70B9";
- t["\u336F"] = "\u0032\u0033\u70B9";
- t["\u3370"] = "\u0032\u0034\u70B9";
- t["\u33E0"] = "\u0031\u65E5";
- t["\u33E1"] = "\u0032\u65E5";
- t["\u33E2"] = "\u0033\u65E5";
- t["\u33E3"] = "\u0034\u65E5";
- t["\u33E4"] = "\u0035\u65E5";
- t["\u33E5"] = "\u0036\u65E5";
- t["\u33E6"] = "\u0037\u65E5";
- t["\u33E7"] = "\u0038\u65E5";
- t["\u33E8"] = "\u0039\u65E5";
- t["\u33E9"] = "\u0031\u0030\u65E5";
- t["\u33EA"] = "\u0031\u0031\u65E5";
- t["\u33EB"] = "\u0031\u0032\u65E5";
- t["\u33EC"] = "\u0031\u0033\u65E5";
- t["\u33ED"] = "\u0031\u0034\u65E5";
- t["\u33EE"] = "\u0031\u0035\u65E5";
- t["\u33EF"] = "\u0031\u0036\u65E5";
- t["\u33F0"] = "\u0031\u0037\u65E5";
- t["\u33F1"] = "\u0031\u0038\u65E5";
- t["\u33F2"] = "\u0031\u0039\u65E5";
- t["\u33F3"] = "\u0032\u0030\u65E5";
- t["\u33F4"] = "\u0032\u0031\u65E5";
- t["\u33F5"] = "\u0032\u0032\u65E5";
- t["\u33F6"] = "\u0032\u0033\u65E5";
- t["\u33F7"] = "\u0032\u0034\u65E5";
- t["\u33F8"] = "\u0032\u0035\u65E5";
- t["\u33F9"] = "\u0032\u0036\u65E5";
- t["\u33FA"] = "\u0032\u0037\u65E5";
- t["\u33FB"] = "\u0032\u0038\u65E5";
- t["\u33FC"] = "\u0032\u0039\u65E5";
- t["\u33FD"] = "\u0033\u0030\u65E5";
- t["\u33FE"] = "\u0033\u0031\u65E5";
- t["\uFB00"] = "\u0066\u0066";
- t["\uFB01"] = "\u0066\u0069";
- t["\uFB02"] = "\u0066\u006C";
- t["\uFB03"] = "\u0066\u0066\u0069";
- t["\uFB04"] = "\u0066\u0066\u006C";
- t["\uFB05"] = "\u017F\u0074";
- t["\uFB06"] = "\u0073\u0074";
- t["\uFB13"] = "\u0574\u0576";
- t["\uFB14"] = "\u0574\u0565";
- t["\uFB15"] = "\u0574\u056B";
- t["\uFB16"] = "\u057E\u0576";
- t["\uFB17"] = "\u0574\u056D";
- t["\uFB4F"] = "\u05D0\u05DC";
- t["\uFB50"] = "\u0671";
- t["\uFB51"] = "\u0671";
- t["\uFB52"] = "\u067B";
- t["\uFB53"] = "\u067B";
- t["\uFB54"] = "\u067B";
- t["\uFB55"] = "\u067B";
- t["\uFB56"] = "\u067E";
- t["\uFB57"] = "\u067E";
- t["\uFB58"] = "\u067E";
- t["\uFB59"] = "\u067E";
- t["\uFB5A"] = "\u0680";
- t["\uFB5B"] = "\u0680";
- t["\uFB5C"] = "\u0680";
- t["\uFB5D"] = "\u0680";
- t["\uFB5E"] = "\u067A";
- t["\uFB5F"] = "\u067A";
- t["\uFB60"] = "\u067A";
- t["\uFB61"] = "\u067A";
- t["\uFB62"] = "\u067F";
- t["\uFB63"] = "\u067F";
- t["\uFB64"] = "\u067F";
- t["\uFB65"] = "\u067F";
- t["\uFB66"] = "\u0679";
- t["\uFB67"] = "\u0679";
- t["\uFB68"] = "\u0679";
- t["\uFB69"] = "\u0679";
- t["\uFB6A"] = "\u06A4";
- t["\uFB6B"] = "\u06A4";
- t["\uFB6C"] = "\u06A4";
- t["\uFB6D"] = "\u06A4";
- t["\uFB6E"] = "\u06A6";
- t["\uFB6F"] = "\u06A6";
- t["\uFB70"] = "\u06A6";
- t["\uFB71"] = "\u06A6";
- t["\uFB72"] = "\u0684";
- t["\uFB73"] = "\u0684";
- t["\uFB74"] = "\u0684";
- t["\uFB75"] = "\u0684";
- t["\uFB76"] = "\u0683";
- t["\uFB77"] = "\u0683";
- t["\uFB78"] = "\u0683";
- t["\uFB79"] = "\u0683";
- t["\uFB7A"] = "\u0686";
- t["\uFB7B"] = "\u0686";
- t["\uFB7C"] = "\u0686";
- t["\uFB7D"] = "\u0686";
- t["\uFB7E"] = "\u0687";
- t["\uFB7F"] = "\u0687";
- t["\uFB80"] = "\u0687";
- t["\uFB81"] = "\u0687";
- t["\uFB82"] = "\u068D";
- t["\uFB83"] = "\u068D";
- t["\uFB84"] = "\u068C";
- t["\uFB85"] = "\u068C";
- t["\uFB86"] = "\u068E";
- t["\uFB87"] = "\u068E";
- t["\uFB88"] = "\u0688";
- t["\uFB89"] = "\u0688";
- t["\uFB8A"] = "\u0698";
- t["\uFB8B"] = "\u0698";
- t["\uFB8C"] = "\u0691";
- t["\uFB8D"] = "\u0691";
- t["\uFB8E"] = "\u06A9";
- t["\uFB8F"] = "\u06A9";
- t["\uFB90"] = "\u06A9";
- t["\uFB91"] = "\u06A9";
- t["\uFB92"] = "\u06AF";
- t["\uFB93"] = "\u06AF";
- t["\uFB94"] = "\u06AF";
- t["\uFB95"] = "\u06AF";
- t["\uFB96"] = "\u06B3";
- t["\uFB97"] = "\u06B3";
- t["\uFB98"] = "\u06B3";
- t["\uFB99"] = "\u06B3";
- t["\uFB9A"] = "\u06B1";
- t["\uFB9B"] = "\u06B1";
- t["\uFB9C"] = "\u06B1";
- t["\uFB9D"] = "\u06B1";
- t["\uFB9E"] = "\u06BA";
- t["\uFB9F"] = "\u06BA";
- t["\uFBA0"] = "\u06BB";
- t["\uFBA1"] = "\u06BB";
- t["\uFBA2"] = "\u06BB";
- t["\uFBA3"] = "\u06BB";
- t["\uFBA4"] = "\u06C0";
- t["\uFBA5"] = "\u06C0";
- t["\uFBA6"] = "\u06C1";
- t["\uFBA7"] = "\u06C1";
- t["\uFBA8"] = "\u06C1";
- t["\uFBA9"] = "\u06C1";
- t["\uFBAA"] = "\u06BE";
- t["\uFBAB"] = "\u06BE";
- t["\uFBAC"] = "\u06BE";
- t["\uFBAD"] = "\u06BE";
- t["\uFBAE"] = "\u06D2";
- t["\uFBAF"] = "\u06D2";
- t["\uFBB0"] = "\u06D3";
- t["\uFBB1"] = "\u06D3";
- t["\uFBD3"] = "\u06AD";
- t["\uFBD4"] = "\u06AD";
- t["\uFBD5"] = "\u06AD";
- t["\uFBD6"] = "\u06AD";
- t["\uFBD7"] = "\u06C7";
- t["\uFBD8"] = "\u06C7";
- t["\uFBD9"] = "\u06C6";
- t["\uFBDA"] = "\u06C6";
- t["\uFBDB"] = "\u06C8";
- t["\uFBDC"] = "\u06C8";
- t["\uFBDD"] = "\u0677";
- t["\uFBDE"] = "\u06CB";
- t["\uFBDF"] = "\u06CB";
- t["\uFBE0"] = "\u06C5";
- t["\uFBE1"] = "\u06C5";
- t["\uFBE2"] = "\u06C9";
- t["\uFBE3"] = "\u06C9";
- t["\uFBE4"] = "\u06D0";
- t["\uFBE5"] = "\u06D0";
- t["\uFBE6"] = "\u06D0";
- t["\uFBE7"] = "\u06D0";
- t["\uFBE8"] = "\u0649";
- t["\uFBE9"] = "\u0649";
- t["\uFBEA"] = "\u0626\u0627";
- t["\uFBEB"] = "\u0626\u0627";
- t["\uFBEC"] = "\u0626\u06D5";
- t["\uFBED"] = "\u0626\u06D5";
- t["\uFBEE"] = "\u0626\u0648";
- t["\uFBEF"] = "\u0626\u0648";
- t["\uFBF0"] = "\u0626\u06C7";
- t["\uFBF1"] = "\u0626\u06C7";
- t["\uFBF2"] = "\u0626\u06C6";
- t["\uFBF3"] = "\u0626\u06C6";
- t["\uFBF4"] = "\u0626\u06C8";
- t["\uFBF5"] = "\u0626\u06C8";
- t["\uFBF6"] = "\u0626\u06D0";
- t["\uFBF7"] = "\u0626\u06D0";
- t["\uFBF8"] = "\u0626\u06D0";
- t["\uFBF9"] = "\u0626\u0649";
- t["\uFBFA"] = "\u0626\u0649";
- t["\uFBFB"] = "\u0626\u0649";
- t["\uFBFC"] = "\u06CC";
- t["\uFBFD"] = "\u06CC";
- t["\uFBFE"] = "\u06CC";
- t["\uFBFF"] = "\u06CC";
- t["\uFC00"] = "\u0626\u062C";
- t["\uFC01"] = "\u0626\u062D";
- t["\uFC02"] = "\u0626\u0645";
- t["\uFC03"] = "\u0626\u0649";
- t["\uFC04"] = "\u0626\u064A";
- t["\uFC05"] = "\u0628\u062C";
- t["\uFC06"] = "\u0628\u062D";
- t["\uFC07"] = "\u0628\u062E";
- t["\uFC08"] = "\u0628\u0645";
- t["\uFC09"] = "\u0628\u0649";
- t["\uFC0A"] = "\u0628\u064A";
- t["\uFC0B"] = "\u062A\u062C";
- t["\uFC0C"] = "\u062A\u062D";
- t["\uFC0D"] = "\u062A\u062E";
- t["\uFC0E"] = "\u062A\u0645";
- t["\uFC0F"] = "\u062A\u0649";
- t["\uFC10"] = "\u062A\u064A";
- t["\uFC11"] = "\u062B\u062C";
- t["\uFC12"] = "\u062B\u0645";
- t["\uFC13"] = "\u062B\u0649";
- t["\uFC14"] = "\u062B\u064A";
- t["\uFC15"] = "\u062C\u062D";
- t["\uFC16"] = "\u062C\u0645";
- t["\uFC17"] = "\u062D\u062C";
- t["\uFC18"] = "\u062D\u0645";
- t["\uFC19"] = "\u062E\u062C";
- t["\uFC1A"] = "\u062E\u062D";
- t["\uFC1B"] = "\u062E\u0645";
- t["\uFC1C"] = "\u0633\u062C";
- t["\uFC1D"] = "\u0633\u062D";
- t["\uFC1E"] = "\u0633\u062E";
- t["\uFC1F"] = "\u0633\u0645";
- t["\uFC20"] = "\u0635\u062D";
- t["\uFC21"] = "\u0635\u0645";
- t["\uFC22"] = "\u0636\u062C";
- t["\uFC23"] = "\u0636\u062D";
- t["\uFC24"] = "\u0636\u062E";
- t["\uFC25"] = "\u0636\u0645";
- t["\uFC26"] = "\u0637\u062D";
- t["\uFC27"] = "\u0637\u0645";
- t["\uFC28"] = "\u0638\u0645";
- t["\uFC29"] = "\u0639\u062C";
- t["\uFC2A"] = "\u0639\u0645";
- t["\uFC2B"] = "\u063A\u062C";
- t["\uFC2C"] = "\u063A\u0645";
- t["\uFC2D"] = "\u0641\u062C";
- t["\uFC2E"] = "\u0641\u062D";
- t["\uFC2F"] = "\u0641\u062E";
- t["\uFC30"] = "\u0641\u0645";
- t["\uFC31"] = "\u0641\u0649";
- t["\uFC32"] = "\u0641\u064A";
- t["\uFC33"] = "\u0642\u062D";
- t["\uFC34"] = "\u0642\u0645";
- t["\uFC35"] = "\u0642\u0649";
- t["\uFC36"] = "\u0642\u064A";
- t["\uFC37"] = "\u0643\u0627";
- t["\uFC38"] = "\u0643\u062C";
- t["\uFC39"] = "\u0643\u062D";
- t["\uFC3A"] = "\u0643\u062E";
- t["\uFC3B"] = "\u0643\u0644";
- t["\uFC3C"] = "\u0643\u0645";
- t["\uFC3D"] = "\u0643\u0649";
- t["\uFC3E"] = "\u0643\u064A";
- t["\uFC3F"] = "\u0644\u062C";
- t["\uFC40"] = "\u0644\u062D";
- t["\uFC41"] = "\u0644\u062E";
- t["\uFC42"] = "\u0644\u0645";
- t["\uFC43"] = "\u0644\u0649";
- t["\uFC44"] = "\u0644\u064A";
- t["\uFC45"] = "\u0645\u062C";
- t["\uFC46"] = "\u0645\u062D";
- t["\uFC47"] = "\u0645\u062E";
- t["\uFC48"] = "\u0645\u0645";
- t["\uFC49"] = "\u0645\u0649";
- t["\uFC4A"] = "\u0645\u064A";
- t["\uFC4B"] = "\u0646\u062C";
- t["\uFC4C"] = "\u0646\u062D";
- t["\uFC4D"] = "\u0646\u062E";
- t["\uFC4E"] = "\u0646\u0645";
- t["\uFC4F"] = "\u0646\u0649";
- t["\uFC50"] = "\u0646\u064A";
- t["\uFC51"] = "\u0647\u062C";
- t["\uFC52"] = "\u0647\u0645";
- t["\uFC53"] = "\u0647\u0649";
- t["\uFC54"] = "\u0647\u064A";
- t["\uFC55"] = "\u064A\u062C";
- t["\uFC56"] = "\u064A\u062D";
- t["\uFC57"] = "\u064A\u062E";
- t["\uFC58"] = "\u064A\u0645";
- t["\uFC59"] = "\u064A\u0649";
- t["\uFC5A"] = "\u064A\u064A";
- t["\uFC5B"] = "\u0630\u0670";
- t["\uFC5C"] = "\u0631\u0670";
- t["\uFC5D"] = "\u0649\u0670";
- t["\uFC5E"] = "\u0020\u064C\u0651";
- t["\uFC5F"] = "\u0020\u064D\u0651";
- t["\uFC60"] = "\u0020\u064E\u0651";
- t["\uFC61"] = "\u0020\u064F\u0651";
- t["\uFC62"] = "\u0020\u0650\u0651";
- t["\uFC63"] = "\u0020\u0651\u0670";
- t["\uFC64"] = "\u0626\u0631";
- t["\uFC65"] = "\u0626\u0632";
- t["\uFC66"] = "\u0626\u0645";
- t["\uFC67"] = "\u0626\u0646";
- t["\uFC68"] = "\u0626\u0649";
- t["\uFC69"] = "\u0626\u064A";
- t["\uFC6A"] = "\u0628\u0631";
- t["\uFC6B"] = "\u0628\u0632";
- t["\uFC6C"] = "\u0628\u0645";
- t["\uFC6D"] = "\u0628\u0646";
- t["\uFC6E"] = "\u0628\u0649";
- t["\uFC6F"] = "\u0628\u064A";
- t["\uFC70"] = "\u062A\u0631";
- t["\uFC71"] = "\u062A\u0632";
- t["\uFC72"] = "\u062A\u0645";
- t["\uFC73"] = "\u062A\u0646";
- t["\uFC74"] = "\u062A\u0649";
- t["\uFC75"] = "\u062A\u064A";
- t["\uFC76"] = "\u062B\u0631";
- t["\uFC77"] = "\u062B\u0632";
- t["\uFC78"] = "\u062B\u0645";
- t["\uFC79"] = "\u062B\u0646";
- t["\uFC7A"] = "\u062B\u0649";
- t["\uFC7B"] = "\u062B\u064A";
- t["\uFC7C"] = "\u0641\u0649";
- t["\uFC7D"] = "\u0641\u064A";
- t["\uFC7E"] = "\u0642\u0649";
- t["\uFC7F"] = "\u0642\u064A";
- t["\uFC80"] = "\u0643\u0627";
- t["\uFC81"] = "\u0643\u0644";
- t["\uFC82"] = "\u0643\u0645";
- t["\uFC83"] = "\u0643\u0649";
- t["\uFC84"] = "\u0643\u064A";
- t["\uFC85"] = "\u0644\u0645";
- t["\uFC86"] = "\u0644\u0649";
- t["\uFC87"] = "\u0644\u064A";
- t["\uFC88"] = "\u0645\u0627";
- t["\uFC89"] = "\u0645\u0645";
- t["\uFC8A"] = "\u0646\u0631";
- t["\uFC8B"] = "\u0646\u0632";
- t["\uFC8C"] = "\u0646\u0645";
- t["\uFC8D"] = "\u0646\u0646";
- t["\uFC8E"] = "\u0646\u0649";
- t["\uFC8F"] = "\u0646\u064A";
- t["\uFC90"] = "\u0649\u0670";
- t["\uFC91"] = "\u064A\u0631";
- t["\uFC92"] = "\u064A\u0632";
- t["\uFC93"] = "\u064A\u0645";
- t["\uFC94"] = "\u064A\u0646";
- t["\uFC95"] = "\u064A\u0649";
- t["\uFC96"] = "\u064A\u064A";
- t["\uFC97"] = "\u0626\u062C";
- t["\uFC98"] = "\u0626\u062D";
- t["\uFC99"] = "\u0626\u062E";
- t["\uFC9A"] = "\u0626\u0645";
- t["\uFC9B"] = "\u0626\u0647";
- t["\uFC9C"] = "\u0628\u062C";
- t["\uFC9D"] = "\u0628\u062D";
- t["\uFC9E"] = "\u0628\u062E";
- t["\uFC9F"] = "\u0628\u0645";
- t["\uFCA0"] = "\u0628\u0647";
- t["\uFCA1"] = "\u062A\u062C";
- t["\uFCA2"] = "\u062A\u062D";
- t["\uFCA3"] = "\u062A\u062E";
- t["\uFCA4"] = "\u062A\u0645";
- t["\uFCA5"] = "\u062A\u0647";
- t["\uFCA6"] = "\u062B\u0645";
- t["\uFCA7"] = "\u062C\u062D";
- t["\uFCA8"] = "\u062C\u0645";
- t["\uFCA9"] = "\u062D\u062C";
- t["\uFCAA"] = "\u062D\u0645";
- t["\uFCAB"] = "\u062E\u062C";
- t["\uFCAC"] = "\u062E\u0645";
- t["\uFCAD"] = "\u0633\u062C";
- t["\uFCAE"] = "\u0633\u062D";
- t["\uFCAF"] = "\u0633\u062E";
- t["\uFCB0"] = "\u0633\u0645";
- t["\uFCB1"] = "\u0635\u062D";
- t["\uFCB2"] = "\u0635\u062E";
- t["\uFCB3"] = "\u0635\u0645";
- t["\uFCB4"] = "\u0636\u062C";
- t["\uFCB5"] = "\u0636\u062D";
- t["\uFCB6"] = "\u0636\u062E";
- t["\uFCB7"] = "\u0636\u0645";
- t["\uFCB8"] = "\u0637\u062D";
- t["\uFCB9"] = "\u0638\u0645";
- t["\uFCBA"] = "\u0639\u062C";
- t["\uFCBB"] = "\u0639\u0645";
- t["\uFCBC"] = "\u063A\u062C";
- t["\uFCBD"] = "\u063A\u0645";
- t["\uFCBE"] = "\u0641\u062C";
- t["\uFCBF"] = "\u0641\u062D";
- t["\uFCC0"] = "\u0641\u062E";
- t["\uFCC1"] = "\u0641\u0645";
- t["\uFCC2"] = "\u0642\u062D";
- t["\uFCC3"] = "\u0642\u0645";
- t["\uFCC4"] = "\u0643\u062C";
- t["\uFCC5"] = "\u0643\u062D";
- t["\uFCC6"] = "\u0643\u062E";
- t["\uFCC7"] = "\u0643\u0644";
- t["\uFCC8"] = "\u0643\u0645";
- t["\uFCC9"] = "\u0644\u062C";
- t["\uFCCA"] = "\u0644\u062D";
- t["\uFCCB"] = "\u0644\u062E";
- t["\uFCCC"] = "\u0644\u0645";
- t["\uFCCD"] = "\u0644\u0647";
- t["\uFCCE"] = "\u0645\u062C";
- t["\uFCCF"] = "\u0645\u062D";
- t["\uFCD0"] = "\u0645\u062E";
- t["\uFCD1"] = "\u0645\u0645";
- t["\uFCD2"] = "\u0646\u062C";
- t["\uFCD3"] = "\u0646\u062D";
- t["\uFCD4"] = "\u0646\u062E";
- t["\uFCD5"] = "\u0646\u0645";
- t["\uFCD6"] = "\u0646\u0647";
- t["\uFCD7"] = "\u0647\u062C";
- t["\uFCD8"] = "\u0647\u0645";
- t["\uFCD9"] = "\u0647\u0670";
- t["\uFCDA"] = "\u064A\u062C";
- t["\uFCDB"] = "\u064A\u062D";
- t["\uFCDC"] = "\u064A\u062E";
- t["\uFCDD"] = "\u064A\u0645";
- t["\uFCDE"] = "\u064A\u0647";
- t["\uFCDF"] = "\u0626\u0645";
- t["\uFCE0"] = "\u0626\u0647";
- t["\uFCE1"] = "\u0628\u0645";
- t["\uFCE2"] = "\u0628\u0647";
- t["\uFCE3"] = "\u062A\u0645";
- t["\uFCE4"] = "\u062A\u0647";
- t["\uFCE5"] = "\u062B\u0645";
- t["\uFCE6"] = "\u062B\u0647";
- t["\uFCE7"] = "\u0633\u0645";
- t["\uFCE8"] = "\u0633\u0647";
- t["\uFCE9"] = "\u0634\u0645";
- t["\uFCEA"] = "\u0634\u0647";
- t["\uFCEB"] = "\u0643\u0644";
- t["\uFCEC"] = "\u0643\u0645";
- t["\uFCED"] = "\u0644\u0645";
- t["\uFCEE"] = "\u0646\u0645";
- t["\uFCEF"] = "\u0646\u0647";
- t["\uFCF0"] = "\u064A\u0645";
- t["\uFCF1"] = "\u064A\u0647";
- t["\uFCF2"] = "\u0640\u064E\u0651";
- t["\uFCF3"] = "\u0640\u064F\u0651";
- t["\uFCF4"] = "\u0640\u0650\u0651";
- t["\uFCF5"] = "\u0637\u0649";
- t["\uFCF6"] = "\u0637\u064A";
- t["\uFCF7"] = "\u0639\u0649";
- t["\uFCF8"] = "\u0639\u064A";
- t["\uFCF9"] = "\u063A\u0649";
- t["\uFCFA"] = "\u063A\u064A";
- t["\uFCFB"] = "\u0633\u0649";
- t["\uFCFC"] = "\u0633\u064A";
- t["\uFCFD"] = "\u0634\u0649";
- t["\uFCFE"] = "\u0634\u064A";
- t["\uFCFF"] = "\u062D\u0649";
- t["\uFD00"] = "\u062D\u064A";
- t["\uFD01"] = "\u062C\u0649";
- t["\uFD02"] = "\u062C\u064A";
- t["\uFD03"] = "\u062E\u0649";
- t["\uFD04"] = "\u062E\u064A";
- t["\uFD05"] = "\u0635\u0649";
- t["\uFD06"] = "\u0635\u064A";
- t["\uFD07"] = "\u0636\u0649";
- t["\uFD08"] = "\u0636\u064A";
- t["\uFD09"] = "\u0634\u062C";
- t["\uFD0A"] = "\u0634\u062D";
- t["\uFD0B"] = "\u0634\u062E";
- t["\uFD0C"] = "\u0634\u0645";
- t["\uFD0D"] = "\u0634\u0631";
- t["\uFD0E"] = "\u0633\u0631";
- t["\uFD0F"] = "\u0635\u0631";
- t["\uFD10"] = "\u0636\u0631";
- t["\uFD11"] = "\u0637\u0649";
- t["\uFD12"] = "\u0637\u064A";
- t["\uFD13"] = "\u0639\u0649";
- t["\uFD14"] = "\u0639\u064A";
- t["\uFD15"] = "\u063A\u0649";
- t["\uFD16"] = "\u063A\u064A";
- t["\uFD17"] = "\u0633\u0649";
- t["\uFD18"] = "\u0633\u064A";
- t["\uFD19"] = "\u0634\u0649";
- t["\uFD1A"] = "\u0634\u064A";
- t["\uFD1B"] = "\u062D\u0649";
- t["\uFD1C"] = "\u062D\u064A";
- t["\uFD1D"] = "\u062C\u0649";
- t["\uFD1E"] = "\u062C\u064A";
- t["\uFD1F"] = "\u062E\u0649";
- t["\uFD20"] = "\u062E\u064A";
- t["\uFD21"] = "\u0635\u0649";
- t["\uFD22"] = "\u0635\u064A";
- t["\uFD23"] = "\u0636\u0649";
- t["\uFD24"] = "\u0636\u064A";
- t["\uFD25"] = "\u0634\u062C";
- t["\uFD26"] = "\u0634\u062D";
- t["\uFD27"] = "\u0634\u062E";
- t["\uFD28"] = "\u0634\u0645";
- t["\uFD29"] = "\u0634\u0631";
- t["\uFD2A"] = "\u0633\u0631";
- t["\uFD2B"] = "\u0635\u0631";
- t["\uFD2C"] = "\u0636\u0631";
- t["\uFD2D"] = "\u0634\u062C";
- t["\uFD2E"] = "\u0634\u062D";
- t["\uFD2F"] = "\u0634\u062E";
- t["\uFD30"] = "\u0634\u0645";
- t["\uFD31"] = "\u0633\u0647";
- t["\uFD32"] = "\u0634\u0647";
- t["\uFD33"] = "\u0637\u0645";
- t["\uFD34"] = "\u0633\u062C";
- t["\uFD35"] = "\u0633\u062D";
- t["\uFD36"] = "\u0633\u062E";
- t["\uFD37"] = "\u0634\u062C";
- t["\uFD38"] = "\u0634\u062D";
- t["\uFD39"] = "\u0634\u062E";
- t["\uFD3A"] = "\u0637\u0645";
- t["\uFD3B"] = "\u0638\u0645";
- t["\uFD3C"] = "\u0627\u064B";
- t["\uFD3D"] = "\u0627\u064B";
- t["\uFD50"] = "\u062A\u062C\u0645";
- t["\uFD51"] = "\u062A\u062D\u062C";
- t["\uFD52"] = "\u062A\u062D\u062C";
- t["\uFD53"] = "\u062A\u062D\u0645";
- t["\uFD54"] = "\u062A\u062E\u0645";
- t["\uFD55"] = "\u062A\u0645\u062C";
- t["\uFD56"] = "\u062A\u0645\u062D";
- t["\uFD57"] = "\u062A\u0645\u062E";
- t["\uFD58"] = "\u062C\u0645\u062D";
- t["\uFD59"] = "\u062C\u0645\u062D";
- t["\uFD5A"] = "\u062D\u0645\u064A";
- t["\uFD5B"] = "\u062D\u0645\u0649";
- t["\uFD5C"] = "\u0633\u062D\u062C";
- t["\uFD5D"] = "\u0633\u062C\u062D";
- t["\uFD5E"] = "\u0633\u062C\u0649";
- t["\uFD5F"] = "\u0633\u0645\u062D";
- t["\uFD60"] = "\u0633\u0645\u062D";
- t["\uFD61"] = "\u0633\u0645\u062C";
- t["\uFD62"] = "\u0633\u0645\u0645";
- t["\uFD63"] = "\u0633\u0645\u0645";
- t["\uFD64"] = "\u0635\u062D\u062D";
- t["\uFD65"] = "\u0635\u062D\u062D";
- t["\uFD66"] = "\u0635\u0645\u0645";
- t["\uFD67"] = "\u0634\u062D\u0645";
- t["\uFD68"] = "\u0634\u062D\u0645";
- t["\uFD69"] = "\u0634\u062C\u064A";
- t["\uFD6A"] = "\u0634\u0645\u062E";
- t["\uFD6B"] = "\u0634\u0645\u062E";
- t["\uFD6C"] = "\u0634\u0645\u0645";
- t["\uFD6D"] = "\u0634\u0645\u0645";
- t["\uFD6E"] = "\u0636\u062D\u0649";
- t["\uFD6F"] = "\u0636\u062E\u0645";
- t["\uFD70"] = "\u0636\u062E\u0645";
- t["\uFD71"] = "\u0637\u0645\u062D";
- t["\uFD72"] = "\u0637\u0645\u062D";
- t["\uFD73"] = "\u0637\u0645\u0645";
- t["\uFD74"] = "\u0637\u0645\u064A";
- t["\uFD75"] = "\u0639\u062C\u0645";
- t["\uFD76"] = "\u0639\u0645\u0645";
- t["\uFD77"] = "\u0639\u0645\u0645";
- t["\uFD78"] = "\u0639\u0645\u0649";
- t["\uFD79"] = "\u063A\u0645\u0645";
- t["\uFD7A"] = "\u063A\u0645\u064A";
- t["\uFD7B"] = "\u063A\u0645\u0649";
- t["\uFD7C"] = "\u0641\u062E\u0645";
- t["\uFD7D"] = "\u0641\u062E\u0645";
- t["\uFD7E"] = "\u0642\u0645\u062D";
- t["\uFD7F"] = "\u0642\u0645\u0645";
- t["\uFD80"] = "\u0644\u062D\u0645";
- t["\uFD81"] = "\u0644\u062D\u064A";
- t["\uFD82"] = "\u0644\u062D\u0649";
- t["\uFD83"] = "\u0644\u062C\u062C";
- t["\uFD84"] = "\u0644\u062C\u062C";
- t["\uFD85"] = "\u0644\u062E\u0645";
- t["\uFD86"] = "\u0644\u062E\u0645";
- t["\uFD87"] = "\u0644\u0645\u062D";
- t["\uFD88"] = "\u0644\u0645\u062D";
- t["\uFD89"] = "\u0645\u062D\u062C";
- t["\uFD8A"] = "\u0645\u062D\u0645";
- t["\uFD8B"] = "\u0645\u062D\u064A";
- t["\uFD8C"] = "\u0645\u062C\u062D";
- t["\uFD8D"] = "\u0645\u062C\u0645";
- t["\uFD8E"] = "\u0645\u062E\u062C";
- t["\uFD8F"] = "\u0645\u062E\u0645";
- t["\uFD92"] = "\u0645\u062C\u062E";
- t["\uFD93"] = "\u0647\u0645\u062C";
- t["\uFD94"] = "\u0647\u0645\u0645";
- t["\uFD95"] = "\u0646\u062D\u0645";
- t["\uFD96"] = "\u0646\u062D\u0649";
- t["\uFD97"] = "\u0646\u062C\u0645";
- t["\uFD98"] = "\u0646\u062C\u0645";
- t["\uFD99"] = "\u0646\u062C\u0649";
- t["\uFD9A"] = "\u0646\u0645\u064A";
- t["\uFD9B"] = "\u0646\u0645\u0649";
- t["\uFD9C"] = "\u064A\u0645\u0645";
- t["\uFD9D"] = "\u064A\u0645\u0645";
- t["\uFD9E"] = "\u0628\u062E\u064A";
- t["\uFD9F"] = "\u062A\u062C\u064A";
- t["\uFDA0"] = "\u062A\u062C\u0649";
- t["\uFDA1"] = "\u062A\u062E\u064A";
- t["\uFDA2"] = "\u062A\u062E\u0649";
- t["\uFDA3"] = "\u062A\u0645\u064A";
- t["\uFDA4"] = "\u062A\u0645\u0649";
- t["\uFDA5"] = "\u062C\u0645\u064A";
- t["\uFDA6"] = "\u062C\u062D\u0649";
- t["\uFDA7"] = "\u062C\u0645\u0649";
- t["\uFDA8"] = "\u0633\u062E\u0649";
- t["\uFDA9"] = "\u0635\u062D\u064A";
- t["\uFDAA"] = "\u0634\u062D\u064A";
- t["\uFDAB"] = "\u0636\u062D\u064A";
- t["\uFDAC"] = "\u0644\u062C\u064A";
- t["\uFDAD"] = "\u0644\u0645\u064A";
- t["\uFDAE"] = "\u064A\u062D\u064A";
- t["\uFDAF"] = "\u064A\u062C\u064A";
- t["\uFDB0"] = "\u064A\u0645\u064A";
- t["\uFDB1"] = "\u0645\u0645\u064A";
- t["\uFDB2"] = "\u0642\u0645\u064A";
- t["\uFDB3"] = "\u0646\u062D\u064A";
- t["\uFDB4"] = "\u0642\u0645\u062D";
- t["\uFDB5"] = "\u0644\u062D\u0645";
- t["\uFDB6"] = "\u0639\u0645\u064A";
- t["\uFDB7"] = "\u0643\u0645\u064A";
- t["\uFDB8"] = "\u0646\u062C\u062D";
- t["\uFDB9"] = "\u0645\u062E\u064A";
- t["\uFDBA"] = "\u0644\u062C\u0645";
- t["\uFDBB"] = "\u0643\u0645\u0645";
- t["\uFDBC"] = "\u0644\u062C\u0645";
- t["\uFDBD"] = "\u0646\u062C\u062D";
- t["\uFDBE"] = "\u062C\u062D\u064A";
- t["\uFDBF"] = "\u062D\u062C\u064A";
- t["\uFDC0"] = "\u0645\u062C\u064A";
- t["\uFDC1"] = "\u0641\u0645\u064A";
- t["\uFDC2"] = "\u0628\u062D\u064A";
- t["\uFDC3"] = "\u0643\u0645\u0645";
- t["\uFDC4"] = "\u0639\u062C\u0645";
- t["\uFDC5"] = "\u0635\u0645\u0645";
- t["\uFDC6"] = "\u0633\u062E\u064A";
- t["\uFDC7"] = "\u0646\u062C\u064A";
- t["\uFE49"] = "\u203E";
- t["\uFE4A"] = "\u203E";
- t["\uFE4B"] = "\u203E";
- t["\uFE4C"] = "\u203E";
- t["\uFE4D"] = "\u005F";
- t["\uFE4E"] = "\u005F";
- t["\uFE4F"] = "\u005F";
- t["\uFE80"] = "\u0621";
- t["\uFE81"] = "\u0622";
- t["\uFE82"] = "\u0622";
- t["\uFE83"] = "\u0623";
- t["\uFE84"] = "\u0623";
- t["\uFE85"] = "\u0624";
- t["\uFE86"] = "\u0624";
- t["\uFE87"] = "\u0625";
- t["\uFE88"] = "\u0625";
- t["\uFE89"] = "\u0626";
- t["\uFE8A"] = "\u0626";
- t["\uFE8B"] = "\u0626";
- t["\uFE8C"] = "\u0626";
- t["\uFE8D"] = "\u0627";
- t["\uFE8E"] = "\u0627";
- t["\uFE8F"] = "\u0628";
- t["\uFE90"] = "\u0628";
- t["\uFE91"] = "\u0628";
- t["\uFE92"] = "\u0628";
- t["\uFE93"] = "\u0629";
- t["\uFE94"] = "\u0629";
- t["\uFE95"] = "\u062A";
- t["\uFE96"] = "\u062A";
- t["\uFE97"] = "\u062A";
- t["\uFE98"] = "\u062A";
- t["\uFE99"] = "\u062B";
- t["\uFE9A"] = "\u062B";
- t["\uFE9B"] = "\u062B";
- t["\uFE9C"] = "\u062B";
- t["\uFE9D"] = "\u062C";
- t["\uFE9E"] = "\u062C";
- t["\uFE9F"] = "\u062C";
- t["\uFEA0"] = "\u062C";
- t["\uFEA1"] = "\u062D";
- t["\uFEA2"] = "\u062D";
- t["\uFEA3"] = "\u062D";
- t["\uFEA4"] = "\u062D";
- t["\uFEA5"] = "\u062E";
- t["\uFEA6"] = "\u062E";
- t["\uFEA7"] = "\u062E";
- t["\uFEA8"] = "\u062E";
- t["\uFEA9"] = "\u062F";
- t["\uFEAA"] = "\u062F";
- t["\uFEAB"] = "\u0630";
- t["\uFEAC"] = "\u0630";
- t["\uFEAD"] = "\u0631";
- t["\uFEAE"] = "\u0631";
- t["\uFEAF"] = "\u0632";
- t["\uFEB0"] = "\u0632";
- t["\uFEB1"] = "\u0633";
- t["\uFEB2"] = "\u0633";
- t["\uFEB3"] = "\u0633";
- t["\uFEB4"] = "\u0633";
- t["\uFEB5"] = "\u0634";
- t["\uFEB6"] = "\u0634";
- t["\uFEB7"] = "\u0634";
- t["\uFEB8"] = "\u0634";
- t["\uFEB9"] = "\u0635";
- t["\uFEBA"] = "\u0635";
- t["\uFEBB"] = "\u0635";
- t["\uFEBC"] = "\u0635";
- t["\uFEBD"] = "\u0636";
- t["\uFEBE"] = "\u0636";
- t["\uFEBF"] = "\u0636";
- t["\uFEC0"] = "\u0636";
- t["\uFEC1"] = "\u0637";
- t["\uFEC2"] = "\u0637";
- t["\uFEC3"] = "\u0637";
- t["\uFEC4"] = "\u0637";
- t["\uFEC5"] = "\u0638";
- t["\uFEC6"] = "\u0638";
- t["\uFEC7"] = "\u0638";
- t["\uFEC8"] = "\u0638";
- t["\uFEC9"] = "\u0639";
- t["\uFECA"] = "\u0639";
- t["\uFECB"] = "\u0639";
- t["\uFECC"] = "\u0639";
- t["\uFECD"] = "\u063A";
- t["\uFECE"] = "\u063A";
- t["\uFECF"] = "\u063A";
- t["\uFED0"] = "\u063A";
- t["\uFED1"] = "\u0641";
- t["\uFED2"] = "\u0641";
- t["\uFED3"] = "\u0641";
- t["\uFED4"] = "\u0641";
- t["\uFED5"] = "\u0642";
- t["\uFED6"] = "\u0642";
- t["\uFED7"] = "\u0642";
- t["\uFED8"] = "\u0642";
- t["\uFED9"] = "\u0643";
- t["\uFEDA"] = "\u0643";
- t["\uFEDB"] = "\u0643";
- t["\uFEDC"] = "\u0643";
- t["\uFEDD"] = "\u0644";
- t["\uFEDE"] = "\u0644";
- t["\uFEDF"] = "\u0644";
- t["\uFEE0"] = "\u0644";
- t["\uFEE1"] = "\u0645";
- t["\uFEE2"] = "\u0645";
- t["\uFEE3"] = "\u0645";
- t["\uFEE4"] = "\u0645";
- t["\uFEE5"] = "\u0646";
- t["\uFEE6"] = "\u0646";
- t["\uFEE7"] = "\u0646";
- t["\uFEE8"] = "\u0646";
- t["\uFEE9"] = "\u0647";
- t["\uFEEA"] = "\u0647";
- t["\uFEEB"] = "\u0647";
- t["\uFEEC"] = "\u0647";
- t["\uFEED"] = "\u0648";
- t["\uFEEE"] = "\u0648";
- t["\uFEEF"] = "\u0649";
- t["\uFEF0"] = "\u0649";
- t["\uFEF1"] = "\u064A";
- t["\uFEF2"] = "\u064A";
- t["\uFEF3"] = "\u064A";
- t["\uFEF4"] = "\u064A";
- t["\uFEF5"] = "\u0644\u0622";
- t["\uFEF6"] = "\u0644\u0622";
- t["\uFEF7"] = "\u0644\u0623";
- t["\uFEF8"] = "\u0644\u0623";
- t["\uFEF9"] = "\u0644\u0625";
- t["\uFEFA"] = "\u0644\u0625";
- t["\uFEFB"] = "\u0644\u0627";
- t["\uFEFC"] = "\u0644\u0627";
+const getNormalizedUnicodes = 
(0,_core_utils_js__WEBPACK_IMPORTED_MODULE_0__.getArrayLookupTableFactory)(function () {
+ return [
+  "\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;
+ const charsLength = chars.length;
  if (charsLength <= 1 || !isRTLRangeFor(chars.charCodeAt(0))) {
   return chars;
  }
- var s = "";
- for (var ii = charsLength - 1; ii >= 0; ii--) {
-  s += chars[ii];
+ const buf = [];
+ for (let ii = charsLength - 1; ii >= 0; ii--) {
+  buf.push(chars[ii]);
  }
- return s;
+ return buf.join("");
 }
-exports.mapSpecialUnicodeValues = mapSpecialUnicodeValues;
-exports.reverseIfRtl = reverseIfRtl;
-exports.getUnicodeRangeFor = getUnicodeRangeFor;
-exports.getNormalizedUnicodes = getNormalizedUnicodes;
-exports.getUnicodeForGlyph = getUnicodeForGlyph;
+
 
 /***/ }),
-/* 37 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/* 38 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.FontRendererFactory = void 0;
 
 var _util = __w_pdfjs_require__(2);
 
-var _cff_parser = __w_pdfjs_require__(31);
+var _cff_parser = __w_pdfjs_require__(32);
 
-var _glyphlist = __w_pdfjs_require__(34);
+var _glyphlist = __w_pdfjs_require__(35);
 
-var _encodings = __w_pdfjs_require__(33);
+var _encodings = __w_pdfjs_require__(34);
 
 var _stream = __w_pdfjs_require__(12);
 
-var FontRendererFactory = function FontRendererFactoryClosure() {
+const FontRendererFactory = function FontRendererFactoryClosure() {
   function getLong(data, offset) {
     return data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3];
   }
@@ -38649,13 +45939,13 @@ var FontRendererFactory = function FontRendererFactoryClosure() {
   }
 
   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 ranges, p, i;
+    const offset = getUshort(data, start + 2) === 1 ? getLong(data, start + 8) : getLong(data, start + 16);
+    const format = getUshort(data, start + offset);
+    let ranges, p, i;
 
     if (format === 4) {
       getUshort(data, start + offset + 2);
-      var segCount = getUshort(data, start + offset + 6) >> 1;
+      const segCount = getUshort(data, start + offset + 6) >> 1;
       p = start + offset + 14;
       ranges = [];
 
@@ -38676,7 +45966,7 @@ var FontRendererFactory = function FontRendererFactoryClosure() {
       }
 
       for (i = 0; i < segCount; i++, p += 2) {
-        var idOffset = getUshort(data, p);
+        let idOffset = getUshort(data, p);
 
         if (idOffset === 0) {
           continue;
@@ -38684,7 +45974,7 @@ var FontRendererFactory = function FontRendererFactoryClosure() {
 
         ranges[i].ids = [];
 
-        for (var j = 0, jj = ranges[i].end - ranges[i].start + 1; j < jj; j++) {
+        for (let j = 0, jj = ranges[i].end - ranges[i].start + 1; j < jj; j++) {
           ranges[i].ids[j] = getUshort(data, p + idOffset);
           idOffset += 2;
         }
@@ -38693,7 +45983,7 @@ var FontRendererFactory = function FontRendererFactoryClosure() {
       return ranges;
     } else if (format === 12) {
       getLong(data, start + offset + 4);
-      var groups = getLong(data, start + offset + 12);
+      const groups = getLong(data, start + offset + 12);
       p = start + offset + 16;
       ranges = [];
 
@@ -38713,9 +46003,9 @@ var FontRendererFactory = function FontRendererFactoryClosure() {
   }
 
   function parseCff(data, start, end, seacAnalysisEnabled) {
-    var properties = {};
-    var parser = new _cff_parser.CFFParser(new _stream.Stream(data, start, end - start), properties, 
seacAnalysisEnabled);
-    var cff = parser.parse();
+    const properties = {};
+    const parser = new _cff_parser.CFFParser(new _stream.Stream(data, start, end - start), properties, 
seacAnalysisEnabled);
+    const cff = parser.parse();
     return {
       glyphs: cff.charStrings.objects,
       subrs: cff.topDict.privateDict && cff.topDict.privateDict.subrsIndex && 
cff.topDict.privateDict.subrsIndex.objects,
@@ -38727,7 +46017,7 @@ var FontRendererFactory = function FontRendererFactoryClosure() {
   }
 
   function parseGlyfTable(glyf, loca, isGlyphLocationsLong) {
-    var itemSize, itemDecode;
+    let itemSize, itemDecode;
 
     if (isGlyphLocationsLong) {
       itemSize = 4;
@@ -38743,11 +46033,11 @@ var FontRendererFactory = function FontRendererFactoryClosure() {
       };
     }
 
-    var glyphs = [];
-    var startOffset = itemDecode(loca, 0);
+    const glyphs = [];
+    let startOffset = itemDecode(loca, 0);
 
-    for (var j = itemSize; j < loca.length; j += itemSize) {
-      var endOffset = itemDecode(loca, j);
+    for (let j = itemSize; j < loca.length; j += itemSize) {
+      const endOffset = itemDecode(loca, j);
       glyphs.push(glyf.subarray(startOffset, endOffset));
       startOffset = endOffset;
     }
@@ -38756,13 +46046,13 @@ var FontRendererFactory = function FontRendererFactoryClosure() {
   }
 
   function lookupCmap(ranges, unicode) {
-    var code = unicode.codePointAt(0),
-        gid = 0;
-    var l = 0,
+    const code = unicode.codePointAt(0);
+    let gid = 0,
+        l = 0,
         r = ranges.length - 1;
 
     while (l < r) {
-      var c = l + r + 1 >> 1;
+      const c = l + r + 1 >> 1;
 
       if (code < ranges[c].start) {
         r = c - 1;
@@ -38803,19 +46093,19 @@ var FontRendererFactory = function FontRendererFactoryClosure() {
       });
     }
 
-    var i = 0;
-    var numberOfContours = (code[i] << 24 | code[i + 1] << 16) >> 16;
-    var flags;
-    var x = 0,
+    let i = 0;
+    const numberOfContours = (code[i] << 24 | code[i + 1] << 16) >> 16;
+    let flags;
+    let x = 0,
         y = 0;
     i += 10;
 
     if (numberOfContours < 0) {
       do {
         flags = code[i] << 8 | code[i + 1];
-        var glyphIndex = code[i + 2] << 8 | code[i + 3];
+        const glyphIndex = code[i + 2] << 8 | code[i + 3];
         i += 4;
-        var arg1, arg2;
+        let arg1, arg2;
 
         if (flags & 0x01) {
           arg1 = (code[i] << 24 | code[i + 1] << 16) >> 16;
@@ -38834,7 +46124,7 @@ var FontRendererFactory = function FontRendererFactoryClosure() {
           y = 0;
         }
 
-        var scaleX = 1,
+        let scaleX = 1,
             scaleY = 1,
             scale01 = 0,
             scale10 = 0;
@@ -38854,7 +46144,7 @@ var FontRendererFactory = function FontRendererFactoryClosure() {
           i += 8;
         }
 
-        var subglyph = font.glyphs[glyphIndex];
+        const subglyph = font.glyphs[glyphIndex];
 
         if (subglyph) {
           cmds.push({
@@ -38871,22 +46161,22 @@ var FontRendererFactory = function FontRendererFactoryClosure() {
         }
       } while (flags & 0x20);
     } else {
-      var endPtsOfContours = [];
-      var j, jj;
+      const endPtsOfContours = [];
+      let 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];
+      const instructionLength = code[i] << 8 | code[i + 1];
       i += 2 + instructionLength;
-      var numberOfPoints = endPtsOfContours[endPtsOfContours.length - 1] + 1;
-      var points = [];
+      const numberOfPoints = endPtsOfContours[endPtsOfContours.length - 1] + 1;
+      const points = [];
 
       while (points.length < numberOfPoints) {
         flags = code[i++];
-        var repeat = 1;
+        let repeat = 1;
 
         if (flags & 0x08) {
           repeat += code[i++];
@@ -38937,18 +46227,18 @@ var FontRendererFactory = function FontRendererFactoryClosure() {
         points[j].y = y;
       }
 
-      var startPoint = 0;
+      let startPoint = 0;
 
       for (i = 0; i < numberOfContours; i++) {
-        var endPoint = endPtsOfContours[i];
-        var contour = points.slice(startPoint, endPoint + 1);
+        const endPoint = endPtsOfContours[i];
+        const contour = points.slice(startPoint, endPoint + 1);
 
         if (contour[0].flags & 1) {
           contour.push(contour[0]);
         } else if (contour[contour.length - 1].flags & 1) {
           contour.unshift(contour[contour.length - 1]);
         } else {
-          var p = {
+          const p = {
             flags: 1,
             x: (contour[0].x + contour[contour.length - 1].x) / 2,
             y: (contour[0].y + contour[contour.length - 1].y) / 2
@@ -38997,18 +46287,18 @@ var FontRendererFactory = function FontRendererFactoryClosure() {
       });
     }
 
-    var stack = [];
-    var x = 0,
+    const stack = [];
+    let x = 0,
         y = 0;
-    var stems = 0;
+    let stems = 0;
 
     function parse(code) {
-      var i = 0;
+      let i = 0;
 
       while (i < code.length) {
-        var stackClean = false;
-        var v = code[i++];
-        var xa, xb, ya, yb, y1, y2, y3, n, subrCode;
+        let stackClean = false;
+        let v = code[i++];
+        let xa, xb, ya, yb, y1, y2, y3, n, subrCode;
 
         switch (v) {
           case 1:
@@ -39163,8 +46453,8 @@ var FontRendererFactory = function FontRendererFactoryClosure() {
                 break;
 
               case 37:
-                var x0 = x,
-                    y0 = y;
+                const x0 = x,
+                      y0 = y;
                 xa = x + stack.shift();
                 ya = y + stack.shift();
                 xb = xa + stack.shift();
@@ -39196,8 +46486,8 @@ var FontRendererFactory = function FontRendererFactoryClosure() {
 
           case 14:
             if (stack.length >= 4) {
-              var achar = stack.pop();
-              var bchar = stack.pop();
+              const achar = stack.pop();
+              const bchar = stack.pop();
               y = stack.pop();
               x = stack.pop();
               cmds.push({
@@ -39207,7 +46497,7 @@ var FontRendererFactory = function FontRendererFactoryClosure() {
                 cmd: "translate",
                 args: [x, y]
               });
-              var cmap = lookupCmap(font.cmap, 
String.fromCharCode(font.glyphNameMap[_encodings.StandardEncoding[achar]]));
+              let cmap = lookupCmap(font.cmap, 
String.fromCharCode(font.glyphNameMap[_encodings.StandardEncoding[achar]]));
               compileCharString(font.glyphs[cmap.glyphId], cmds, font, cmap.glyphId);
               cmds.push({
                 cmd: "restore"
@@ -39525,14 +46815,14 @@ var FontRendererFactory = function FontRendererFactoryClosure() {
 
   return {
     create: function FontRendererFactory_create(font, seacAnalysisEnabled) {
-      var data = new Uint8Array(font.data);
-      var cmap, glyf, loca, cff, indexToLocFormat, unitsPerEm;
-      var numTables = getUshort(data, 4);
+      const data = new Uint8Array(font.data);
+      let cmap, glyf, loca, cff, indexToLocFormat, unitsPerEm;
+      const numTables = getUshort(data, 4);
 
-      for (var i = 0, p = 12; i < numTables; i++, p += 16) {
-        var tag = (0, _util.bytesToString)(data.subarray(p, p + 4));
-        var offset = getLong(data, p + 8);
-        var length = getLong(data, p + 12);
+      for (let i = 0, p = 12; i < numTables; i++, p += 16) {
+        const tag = (0, _util.bytesToString)(data.subarray(p, p + 4));
+        const offset = getLong(data, p + 8);
+        const length = getLong(data, p + 12);
 
         switch (tag) {
           case "cmap":
@@ -39559,7 +46849,7 @@ var FontRendererFactory = function FontRendererFactoryClosure() {
       }
 
       if (glyf) {
-        var fontMatrix = !unitsPerEm ? font.fontMatrix : [1 / unitsPerEm, 0, 0, 1 / unitsPerEm, 0, 0];
+        const fontMatrix = !unitsPerEm ? font.fontMatrix : [1 / unitsPerEm, 0, 0, 1 / unitsPerEm, 0, 0];
         return new TrueTypeCompiled(parseGlyfTable(glyf, loca, indexToLocFormat), cmap, fontMatrix);
       }
 
@@ -39571,18 +46861,17 @@ var FontRendererFactory = function FontRendererFactoryClosure() {
 exports.FontRendererFactory = FontRendererFactory;
 
 /***/ }),
-/* 38 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/* 39 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.Type1Parser = void 0;
 
-var _encodings = __w_pdfjs_require__(33);
+var _encodings = __w_pdfjs_require__(34);
 
 var _core_utils = __w_pdfjs_require__(8);
 
@@ -39590,10 +46879,10 @@ var _stream = __w_pdfjs_require__(12);
 
 var _util = __w_pdfjs_require__(2);
 
-var HINTING_ENABLED = false;
+const HINTING_ENABLED = false;
 
-var Type1CharString = function Type1CharStringClosure() {
-  var COMMAND_MAP = {
+const Type1CharString = function Type1CharStringClosure() {
+  const COMMAND_MAP = {
     hstem: [1],
     vstem: [3],
     vmoveto: [4],
@@ -39611,22 +46900,22 @@ var Type1CharString = function Type1CharStringClosure() {
     hvcurveto: [31]
   };
 
-  function Type1CharString() {
-    this.width = 0;
-    this.lsb = 0;
-    this.flexing = false;
-    this.output = [];
-    this.stack = [];
-  }
+  class Type1CharString {
+    constructor() {
+      this.width = 0;
+      this.lsb = 0;
+      this.flexing = false;
+      this.output = [];
+      this.stack = [];
+    }
 
-  Type1CharString.prototype = {
-    convert: function Type1CharString_convert(encoded, subrs, seacAnalysisEnabled) {
-      var count = encoded.length;
-      var error = false;
-      var wx, sbx, subrNumber;
+    convert(encoded, subrs, seacAnalysisEnabled) {
+      const count = encoded.length;
+      let error = false;
+      let wx, sbx, subrNumber;
 
-      for (var i = 0; i < count; i++) {
-        var value = encoded[i];
+      for (let i = 0; i < count; i++) {
+        let value = encoded[i];
 
         if (value < 32) {
           if (value === 12) {
@@ -39659,7 +46948,7 @@ var Type1CharString = function Type1CharStringClosure() {
                   break;
                 }
 
-                var dy = this.stack.pop();
+                const dy = this.stack.pop();
                 this.stack.push(0, dy);
                 break;
               }
@@ -39791,7 +47080,7 @@ var Type1CharString = function Type1CharStringClosure() {
 
               this.stack.pop();
               wx = this.stack.pop();
-              var sby = this.stack.pop();
+              const sby = this.stack.pop();
               sbx = this.stack.pop();
               this.lsb = sbx;
               this.width = wx;
@@ -39805,8 +47094,8 @@ var Type1CharString = function Type1CharStringClosure() {
                 break;
               }
 
-              var num2 = this.stack.pop();
-              var num1 = this.stack.pop();
+              const num2 = this.stack.pop();
+              const num1 = this.stack.pop();
               this.stack.push(num1 / num2);
               break;
 
@@ -39817,10 +47106,10 @@ var Type1CharString = function Type1CharStringClosure() {
               }
 
               subrNumber = this.stack.pop();
-              var numArgs = this.stack.pop();
+              const numArgs = this.stack.pop();
 
               if (subrNumber === 0 && numArgs === 3) {
-                var flexArgs = this.stack.splice(this.stack.length - 17, 17);
+                const flexArgs = this.stack.splice(this.stack.length - 17, 17);
                 this.stack.push(flexArgs[2] + flexArgs[0], flexArgs[3] + flexArgs[1], flexArgs[4], 
flexArgs[5], flexArgs[6], flexArgs[7], flexArgs[8], flexArgs[9], flexArgs[10], flexArgs[11], flexArgs[12], 
flexArgs[13], flexArgs[14]);
                 error = this.executeCommand(13, COMMAND_MAP.flex, true);
                 this.flexing = false;
@@ -39862,19 +47151,19 @@ var Type1CharString = function Type1CharStringClosure() {
       }
 
       return error;
-    },
+    }
 
     executeCommand(howManyArgs, command, keepStack) {
-      var stackLength = this.stack.length;
+      const stackLength = this.stack.length;
 
       if (howManyArgs > stackLength) {
         return true;
       }
 
-      var start = stackLength - howManyArgs;
+      const start = stackLength - howManyArgs;
 
-      for (var i = start; i < stackLength; i++) {
-        var value = this.stack[i];
+      for (let i = start; i < stackLength; i++) {
+        let value = this.stack[i];
 
         if (Number.isInteger(value)) {
           this.output.push(28, value >> 8 & 0xff, value & 0xff);
@@ -39895,13 +47184,14 @@ var Type1CharString = function Type1CharStringClosure() {
       return false;
     }
 
-  };
+  }
+
   return Type1CharString;
 }();
 
-var Type1Parser = function Type1ParserClosure() {
-  var EEXEC_ENCRYPT_KEY = 55665;
-  var CHAR_STRS_ENCRYPT_KEY = 4330;
+const Type1Parser = function Type1ParserClosure() {
+  const EEXEC_ENCRYPT_KEY = 55665;
+  const CHAR_STRS_ENCRYPT_KEY = 4330;
 
   function isHexDigit(code) {
     return code >= 48 && code <= 57 || code >= 65 && code <= 70 || code >= 97 && code <= 102;
@@ -39912,9 +47202,9 @@ var Type1Parser = function Type1ParserClosure() {
       return new Uint8Array(0);
     }
 
-    var r = key | 0,
-        c1 = 52845,
-        c2 = 22719,
+    const c1 = 52845,
+          c2 = 22719;
+    let r = key | 0,
         i,
         j;
 
@@ -39922,11 +47212,11 @@ var Type1Parser = function Type1ParserClosure() {
       r = (data[i] + r) * c1 + c2 & (1 << 16) - 1;
     }
 
-    var count = data.length - discardNumber;
-    var decrypted = new Uint8Array(count);
+    const count = data.length - discardNumber;
+    const decrypted = new Uint8Array(count);
 
     for (i = discardNumber, j = 0; j < count; i++, j++) {
-      var value = data[i];
+      const value = data[i];
       decrypted[j] = value ^ r >> 8;
       r = (value + r) * c1 + c2 & (1 << 16) - 1;
     }
@@ -39935,30 +47225,30 @@ var Type1Parser = function Type1ParserClosure() {
   }
 
   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;
+    const c1 = 52845,
+          c2 = 22719;
+    let r = key | 0;
+    const count = data.length,
+          maybeLength = count >>> 1;
+    const decrypted = new Uint8Array(maybeLength);
+    let i, j;
 
     for (i = 0, j = 0; i < count; i++) {
-      var digit1 = data[i];
+      const digit1 = data[i];
 
       if (!isHexDigit(digit1)) {
         continue;
       }
 
       i++;
-      var digit2;
+      let digit2;
 
       while (i < count && !isHexDigit(digit2 = data[i])) {
         i++;
       }
 
       if (i < count) {
-        var value = parseInt(String.fromCharCode(digit1, digit2), 16);
+        const value = parseInt(String.fromCharCode(digit1, digit2), 16);
         decrypted[j++] = value ^ r >> 8;
         r = (value + r) * c1 + c2 & (1 << 16) - 1;
       }
@@ -39971,25 +47261,25 @@ var Type1Parser = function Type1ParserClosure() {
     return c === 0x2f || c === 0x5b || c === 0x5d || c === 0x7b || c === 0x7d || c === 0x28 || c === 0x29;
   }
 
-  function Type1Parser(stream, encrypted, seacAnalysisEnabled) {
-    if (encrypted) {
-      var data = stream.getBytes();
-      var isBinary = !((isHexDigit(data[0]) || (0, _core_utils.isWhiteSpace)(data[0])) && 
isHexDigit(data[1]) && isHexDigit(data[2]) && isHexDigit(data[3]) && isHexDigit(data[4]) && 
isHexDigit(data[5]) && isHexDigit(data[6]) && isHexDigit(data[7]));
-      stream = new _stream.Stream(isBinary ? decrypt(data, EEXEC_ENCRYPT_KEY, 4) : decryptAscii(data, 
EEXEC_ENCRYPT_KEY, 4));
-    }
+  class Type1Parser {
+    constructor(stream, encrypted, seacAnalysisEnabled) {
+      if (encrypted) {
+        const data = stream.getBytes();
+        const isBinary = !((isHexDigit(data[0]) || (0, _core_utils.isWhiteSpace)(data[0])) && 
isHexDigit(data[1]) && isHexDigit(data[2]) && isHexDigit(data[3]) && isHexDigit(data[4]) && 
isHexDigit(data[5]) && isHexDigit(data[6]) && isHexDigit(data[7]));
+        stream = new _stream.Stream(isBinary ? decrypt(data, EEXEC_ENCRYPT_KEY, 4) : decryptAscii(data, 
EEXEC_ENCRYPT_KEY, 4));
+      }
 
-    this.seacAnalysisEnabled = !!seacAnalysisEnabled;
-    this.stream = stream;
-    this.nextChar();
-  }
+      this.seacAnalysisEnabled = !!seacAnalysisEnabled;
+      this.stream = stream;
+      this.nextChar();
+    }
 
-  Type1Parser.prototype = {
-    readNumberArray: function Type1Parser_readNumberArray() {
+    readNumberArray() {
       this.getToken();
-      var array = [];
+      const array = [];
 
       while (true) {
-        var token = this.getToken();
+        const token = this.getToken();
 
         if (token === null || token === "]" || token === "}") {
           break;
@@ -39999,25 +47289,30 @@ var Type1Parser = function Type1ParserClosure() {
       }
 
       return array;
-    },
-    readNumber: function Type1Parser_readNumber() {
-      var token = this.getToken();
+    }
+
+    readNumber() {
+      const token = this.getToken();
       return parseFloat(token || 0);
-    },
-    readInt: function Type1Parser_readInt() {
-      var token = this.getToken();
+    }
+
+    readInt() {
+      const token = this.getToken();
       return parseInt(token || 0, 10) | 0;
-    },
-    readBoolean: function Type1Parser_readBoolean() {
-      var token = this.getToken();
+    }
+
+    readBoolean() {
+      const token = this.getToken();
       return token === "true" ? 1 : 0;
-    },
-    nextChar: function Type1_nextChar() {
+    }
+
+    nextChar() {
       return this.currentChar = this.stream.getByte();
-    },
-    getToken: function Type1Parser_getToken() {
-      var comment = false;
-      var ch = this.currentChar;
+    }
+
+    getToken() {
+      let comment = false;
+      let ch = this.currentChar;
 
       while (true) {
         if (ch === -1) {
@@ -40042,7 +47337,7 @@ var Type1Parser = function Type1ParserClosure() {
         return String.fromCharCode(ch);
       }
 
-      var token = "";
+      let token = "";
 
       do {
         token += String.fromCharCode(ch);
@@ -40050,28 +47345,30 @@ var Type1Parser = function Type1ParserClosure() {
       } while (ch >= 0 && !(0, _core_utils.isWhiteSpace)(ch) && !isSpecial(ch));
 
       return token;
-    },
-    readCharStrings: function Type1Parser_readCharStrings(bytes, lenIV) {
+    }
+
+    readCharStrings(bytes, lenIV) {
       if (lenIV === -1) {
         return bytes;
       }
 
       return decrypt(bytes, CHAR_STRS_ENCRYPT_KEY, lenIV);
-    },
-    extractFontProgram: function Type1Parser_extractFontProgram(properties) {
-      var stream = this.stream;
-      var subrs = [],
-          charstrings = [];
-      var privateData = Object.create(null);
+    }
+
+    extractFontProgram(properties) {
+      const stream = this.stream;
+      const subrs = [],
+            charstrings = [];
+      const privateData = Object.create(null);
       privateData.lenIV = 4;
-      var program = {
+      const program = {
         subrs: [],
         charstrings: [],
         properties: {
           privateData
         }
       };
-      var token, length, data, lenIV, encoded;
+      let token, length, data, lenIV, encoded;
 
       while ((token = this.getToken()) !== null) {
         if (token !== "/") {
@@ -40098,7 +47395,7 @@ var Type1Parser = function Type1ParserClosure() {
                 continue;
               }
 
-              var glyph = this.getToken();
+              const glyph = this.getToken();
               length = this.readInt();
               this.getToken();
               data = length > 0 ? stream.getBytes(length) : new Uint8Array(0);
@@ -40146,7 +47443,7 @@ var Type1Parser = function Type1ParserClosure() {
           case "OtherBlues":
           case "FamilyBlues":
           case "FamilyOtherBlues":
-            var blueArray = this.readNumberArray();
+            const blueArray = this.readNumberArray();
 
             if (blueArray.length > 0 && blueArray.length % 2 === 0 && HINTING_ENABLED) {
               program.properties.privateData[token] = blueArray;
@@ -40179,12 +47476,12 @@ var Type1Parser = function Type1ParserClosure() {
         }
       }
 
-      for (var i = 0; i < charstrings.length; i++) {
-        glyph = charstrings[i].glyph;
+      for (let i = 0; i < charstrings.length; i++) {
+        const glyph = charstrings[i].glyph;
         encoded = charstrings[i].encoded;
-        var charString = new Type1CharString();
-        var error = charString.convert(encoded, subrs, this.seacAnalysisEnabled);
-        var output = charString.output;
+        const charString = new Type1CharString();
+        const error = charString.convert(encoded, subrs, this.seacAnalysisEnabled);
+        let output = charString.output;
 
         if (error) {
           output = [14];
@@ -40214,9 +47511,10 @@ var Type1Parser = function Type1ParserClosure() {
       }
 
       return program;
-    },
-    extractFontHeader: function Type1Parser_extractFontHeader(properties) {
-      var token;
+    }
+
+    extractFontHeader(properties) {
+      let token;
 
       while ((token = this.getToken()) !== null) {
         if (token !== "/") {
@@ -40227,22 +47525,22 @@ var Type1Parser = function Type1ParserClosure() {
 
         switch (token) {
           case "FontMatrix":
-            var matrix = this.readNumberArray();
+            const matrix = this.readNumberArray();
             properties.fontMatrix = matrix;
             break;
 
           case "Encoding":
-            var encodingArg = this.getToken();
-            var encoding;
+            const encodingArg = this.getToken();
+            let encoding;
 
             if (!/^\d+$/.test(encodingArg)) {
               encoding = (0, _encodings.getEncoding)(encodingArg);
             } else {
               encoding = [];
-              var size = parseInt(encodingArg, 10) | 0;
+              const size = parseInt(encodingArg, 10) | 0;
               this.getToken();
 
-              for (var j = 0; j < size; j++) {
+              for (let j = 0; j < size; j++) {
                 token = this.getToken();
 
                 while (token !== "dup" && token !== "def") {
@@ -40257,9 +47555,9 @@ var Type1Parser = function Type1ParserClosure() {
                   break;
                 }
 
-                var index = this.readInt();
+                const index = this.readInt();
                 this.getToken();
-                var glyph = this.getToken();
+                const glyph = this.getToken();
                 encoding[index] = glyph;
                 this.getToken();
               }
@@ -40269,7 +47567,7 @@ var Type1Parser = function Type1ParserClosure() {
             break;
 
           case "FontBBox":
-            var fontBBox = this.readNumberArray();
+            const fontBBox = this.readNumberArray();
             properties.ascent = Math.max(fontBBox[3], fontBBox[1]);
             properties.descent = Math.min(fontBBox[1], fontBBox[3]);
             properties.ascentScaled = true;
@@ -40277,22 +47575,23 @@ var Type1Parser = function Type1ParserClosure() {
         }
       }
     }
-  };
+
+  }
+
   return Type1Parser;
 }();
 
 exports.Type1Parser = Type1Parser;
 
 /***/ }),
-/* 39 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/* 40 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.getTilingPatternIR = getTilingPatternIR;
 exports.Pattern = void 0;
 
@@ -40304,7 +47603,7 @@ var _primitives = __w_pdfjs_require__(5);
 
 var _core_utils = __w_pdfjs_require__(8);
 
-var ShadingType = {
+const ShadingType = {
   FUNCTION_BASED: 1,
   AXIAL: 2,
   RADIAL: 3,
@@ -40314,7 +47613,7 @@ var ShadingType = {
   TENSOR_PATCH_MESH: 7
 };
 
-var Pattern = function PatternClosure() {
+const Pattern = function PatternClosure() {
   function Pattern() {
     (0, _util.unreachable)("should not call Pattern constructor");
   }
@@ -40326,8 +47625,8 @@ var Pattern = function PatternClosure() {
   };
 
   Pattern.parseShading = function (shading, matrix, xref, res, handler, pdfFunctionFactory, 
localColorSpaceCache) {
-    var dict = (0, _primitives.isStream)(shading) ? shading.dict : shading;
-    var type = dict.get("ShadingType");
+    const dict = (0, _primitives.isStream)(shading) ? shading.dict : shading;
+    const type = dict.get("ShadingType");
 
     try {
       switch (type) {
@@ -40361,7 +47660,7 @@ var Pattern = function PatternClosure() {
 }();
 
 exports.Pattern = Pattern;
-var Shadings = {};
+const Shadings = {};
 Shadings.SMALL_NUMBER = 1e-6;
 
 Shadings.RadialAxial = function RadialAxialClosure() {
@@ -40388,32 +47687,27 @@ Shadings.RadialAxial = function RadialAxialClosure() {
       this.bbox = null;
     }
 
-    var t0 = 0.0,
+    let t0 = 0.0,
         t1 = 1.0;
 
     if (dict.has("Domain")) {
-      var domainArr = dict.getArray("Domain");
+      const domainArr = dict.getArray("Domain");
       t0 = domainArr[0];
       t1 = domainArr[1];
     }
 
-    var extendStart = false,
+    let extendStart = false,
         extendEnd = false;
 
     if (dict.has("Extend")) {
-      var extendArr = dict.getArray("Extend");
+      const extendArr = dict.getArray("Extend");
       extendStart = extendArr[0];
       extendEnd = extendArr[1];
     }
 
     if (this.shadingType === ShadingType.RADIAL && (!extendStart || !extendEnd)) {
-      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));
+      const [x1, y1, r1, x2, y2, r2] = this.coordsArr;
+      const distance = Math.hypot(x1 - x2, y1 - y2);
 
       if (r1 <= r2 + distance && r2 <= r1 + distance) {
         (0, _util.warn)("Unsupported radial gradient.");
@@ -40422,36 +47716,36 @@ Shadings.RadialAxial = function RadialAxialClosure() {
 
     this.extendStart = extendStart;
     this.extendEnd = extendEnd;
-    var fnObj = dict.getRaw("Function");
-    var fn = pdfFunctionFactory.createFromArray(fnObj);
+    const fnObj = dict.getRaw("Function");
+    const fn = pdfFunctionFactory.createFromArray(fnObj);
     const NUMBER_OF_SAMPLES = 10;
     const step = (t1 - t0) / NUMBER_OF_SAMPLES;
-    var colorStops = this.colorStops = [];
+    const colorStops = this.colorStops = [];
 
     if (t0 >= t1 || step <= 0) {
       (0, _util.info)("Bad shading domain.");
       return;
     }
 
-    var color = new Float32Array(cs.numComps),
-        ratio = new Float32Array(1);
-    var rgbColor;
+    const color = new Float32Array(cs.numComps),
+          ratio = new Float32Array(1);
+    let rgbColor;
 
     for (let i = 0; i <= NUMBER_OF_SAMPLES; i++) {
       ratio[0] = t0 + i * step;
       fn(ratio, 0, color, 0);
       rgbColor = cs.getRgb(color, 0);
 
-      var cssColor = _util.Util.makeCssRgb(rgbColor[0], rgbColor[1], rgbColor[2]);
+      const cssColor = _util.Util.makeHexColor(rgbColor[0], rgbColor[1], rgbColor[2]);
 
       colorStops.push([i / NUMBER_OF_SAMPLES, cssColor]);
     }
 
-    var background = "transparent";
+    let background = "transparent";
 
     if (dict.has("Background")) {
       rgbColor = cs.getRgb(dict.get("Background"), 0);
-      background = _util.Util.makeCssRgb(rgbColor[0], rgbColor[1], rgbColor[2]);
+      background = _util.Util.makeHexColor(rgbColor[0], rgbColor[1], rgbColor[2]);
     }
 
     if (!extendStart) {
@@ -40469,9 +47763,9 @@ Shadings.RadialAxial = function RadialAxialClosure() {
 
   RadialAxial.prototype = {
     getIR: function RadialAxial_getIR() {
-      var coordsArr = this.coordsArr;
-      var shadingType = this.shadingType;
-      var type, p0, p1, r0, r1;
+      const coordsArr = this.coordsArr;
+      const shadingType = this.shadingType;
+      let type, p0, p1, r0, r1;
 
       if (shadingType === ShadingType.AXIAL) {
         p0 = [coordsArr[0], coordsArr[1]];
@@ -40489,14 +47783,14 @@ Shadings.RadialAxial = function RadialAxialClosure() {
         (0, _util.unreachable)(`getPattern type unknown: ${shadingType}`);
       }
 
-      var matrix = this.matrix;
+      const matrix = this.matrix;
 
       if (matrix) {
         p0 = _util.Util.applyTransform(p0, matrix);
         p1 = _util.Util.applyTransform(p1, matrix);
 
         if (shadingType === ShadingType.RADIAL) {
-          var scale = _util.Util.singularValueDecompose2dScale(matrix);
+          const scale = _util.Util.singularValueDecompose2dScale(matrix);
 
           r0 *= scale[0];
           r1 *= scale[1];
@@ -40515,9 +47809,9 @@ Shadings.Mesh = function MeshClosure() {
     this.context = context;
     this.buffer = 0;
     this.bufferLength = 0;
-    var numComps = context.numComps;
+    const numComps = context.numComps;
     this.tmpCompsBuf = new Float32Array(numComps);
-    var csNumComps = context.colorSpace.numComps;
+    const csNumComps = context.colorSpace.numComps;
     this.tmpCsCompsBuf = context.colorFn ? new Float32Array(csNumComps) : this.tmpCompsBuf;
   }
 
@@ -40531,7 +47825,7 @@ Shadings.Mesh = function MeshClosure() {
         return true;
       }
 
-      var nextByte = this.stream.getByte();
+      const nextByte = this.stream.getByte();
 
       if (nextByte < 0) {
         return false;
@@ -40543,8 +47837,8 @@ Shadings.Mesh = function MeshClosure() {
     },
 
     readBits: function MeshStreamReader_readBits(n) {
-      var buffer = this.buffer;
-      var bufferLength = this.bufferLength;
+      let buffer = this.buffer;
+      let bufferLength = this.bufferLength;
 
       if (n === 32) {
         if (bufferLength === 0) {
@@ -40552,7 +47846,7 @@ Shadings.Mesh = function MeshClosure() {
         }
 
         buffer = buffer << 24 | this.stream.getByte() << 16 | this.stream.getByte() << 8 | 
this.stream.getByte();
-        var nextByte = this.stream.getByte();
+        const nextByte = this.stream.getByte();
         this.buffer = nextByte & (1 << bufferLength) - 1;
         return (buffer << 8 - bufferLength | (nextByte & 0xff) >> bufferLength) >>> 0;
       }
@@ -40579,26 +47873,26 @@ Shadings.Mesh = function MeshClosure() {
       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;
+      const bitsPerCoordinate = this.context.bitsPerCoordinate;
+      const xi = this.readBits(bitsPerCoordinate);
+      const yi = this.readBits(bitsPerCoordinate);
+      const decode = this.context.decode;
+      const scale = bitsPerCoordinate < 32 ? 1 / ((1 << bitsPerCoordinate) - 1) : 2.3283064365386963e-10;
       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;
-      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);
+      const numComps = this.context.numComps;
+      const bitsPerComponent = this.context.bitsPerComponent;
+      const scale = bitsPerComponent < 32 ? 1 / ((1 << bitsPerComponent) - 1) : 2.3283064365386963e-10;
+      const decode = this.context.decode;
+      const components = this.tmpCompsBuf;
+
+      for (let i = 0, j = 4; i < numComps; i++, j += 2) {
+        const ci = this.readBits(bitsPerComponent);
         components[i] = ci * scale * (decode[j + 1] - decode[j]) + decode[j];
       }
 
-      var color = this.tmpCsCompsBuf;
+      const color = this.tmpCsCompsBuf;
 
       if (this.context.colorFn) {
         this.context.colorFn(components, 0, color, 0);
@@ -40609,16 +47903,16 @@ Shadings.Mesh = function MeshClosure() {
   };
 
   function decodeType4Shading(mesh, reader) {
-    var coords = mesh.coords;
-    var colors = mesh.colors;
-    var operators = [];
-    var ps = [];
-    var verticesLeft = 0;
+    const coords = mesh.coords;
+    const colors = mesh.colors;
+    const operators = [];
+    const ps = [];
+    let verticesLeft = 0;
 
     while (reader.hasData) {
-      var f = reader.readFlag();
-      var coord = reader.readCoordinate();
-      var color = reader.readComponents();
+      const f = reader.readFlag();
+      const coord = reader.readCoordinate();
+      const color = reader.readComponents();
 
       if (verticesLeft === 0) {
         if (!(0 <= f && f <= 2)) {
@@ -40659,13 +47953,13 @@ Shadings.Mesh = function MeshClosure() {
   }
 
   function decodeType5Shading(mesh, reader, verticesPerRow) {
-    var coords = mesh.coords;
-    var colors = mesh.colors;
-    var ps = [];
+    const coords = mesh.coords;
+    const colors = mesh.colors;
+    const ps = [];
 
     while (reader.hasData) {
-      var coord = reader.readCoordinate();
-      var color = reader.readComponents();
+      const coord = reader.readCoordinate();
+      const color = reader.readComponents();
       ps.push(coords.length);
       coords.push(coord);
       colors.push(color);
@@ -40679,24 +47973,24 @@ Shadings.Mesh = function MeshClosure() {
     });
   }
 
-  var MIN_SPLIT_PATCH_CHUNKS_AMOUNT = 3;
-  var MAX_SPLIT_PATCH_CHUNKS_AMOUNT = 20;
-  var TRIANGLE_DENSITY = 20;
+  const MIN_SPLIT_PATCH_CHUNKS_AMOUNT = 3;
+  const MAX_SPLIT_PATCH_CHUNKS_AMOUNT = 20;
+  const TRIANGLE_DENSITY = 20;
 
-  var getB = function getBClosure() {
+  const getB = function getBClosure() {
     function buildB(count) {
-      var lut = [];
+      const lut = [];
 
-      for (var i = 0; i <= count; i++) {
-        var t = i / count,
-            t_ = 1 - t;
+      for (let i = 0; i <= count; i++) {
+        const 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 = [];
+    const cache = [];
     return function getB(count) {
       if (!cache[count]) {
         cache[count] = buildB(count);
@@ -40707,34 +48001,34 @@ Shadings.Mesh = function MeshClosure() {
   }();
 
   function buildFigureFromPatch(mesh, index) {
-    var figure = mesh.figures[index];
+    const figure = mesh.figures[index];
     (0, _util.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]));
+    const coords = mesh.coords,
+          colors = mesh.colors;
+    const pi = figure.coords;
+    const ci = figure.colors;
+    const figureMinX = Math.min(coords[pi[0]][0], coords[pi[3]][0], coords[pi[12]][0], coords[pi[15]][0]);
+    const figureMinY = Math.min(coords[pi[0]][1], coords[pi[3]][1], coords[pi[12]][1], coords[pi[15]][1]);
+    const figureMaxX = Math.max(coords[pi[0]][0], coords[pi[3]][0], coords[pi[12]][0], coords[pi[15]][0]);
+    const figureMaxY = Math.max(coords[pi[0]][1], coords[pi[3]][1], coords[pi[12]][1], coords[pi[15]][1]);
+    let 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]));
+    let 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++) {
+    const verticesPerRow = splitXBy + 1;
+    const figureCoords = new Int32Array((splitYBy + 1) * verticesPerRow);
+    const figureColors = new Int32Array((splitYBy + 1) * verticesPerRow);
+    let k = 0;
+    const cl = new Uint8Array(3),
+          cr = new Uint8Array(3);
+    const c0 = colors[ci[0]],
+          c1 = colors[ci[1]],
+          c2 = colors[ci[2]],
+          c3 = colors[ci[3]];
+    const bRow = getB(splitYBy),
+          bCol = getB(splitXBy);
+
+    for (let 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;
@@ -40742,18 +48036,18 @@ Shadings.Mesh = function MeshClosure() {
       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++) {
+      for (let col = 0; col <= splitXBy; col++, k++) {
         if ((row === 0 || row === splitYBy) && (col === 0 || col === splitXBy)) {
           continue;
         }
 
-        var x = 0,
+        let x = 0,
             y = 0;
-        var q = 0;
+        let 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];
+        for (let i = 0; i <= 3; i++) {
+          for (let j = 0; j <= 3; j++, q++) {
+            const m = bRow[row][i] * bCol[col][j];
             x += coords[pi[q]][0] * m;
             y += coords[pi[q]][1] * m;
           }
@@ -40762,7 +48056,7 @@ Shadings.Mesh = function MeshClosure() {
         figureCoords[k] = coords.length;
         coords.push([x, y]);
         figureColors[k] = colors.length;
-        var newColor = new Uint8Array(3);
+        const 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;
@@ -40787,32 +48081,31 @@ Shadings.Mesh = function MeshClosure() {
   }
 
   function decodeType6Shading(mesh, reader) {
-    var coords = mesh.coords;
-    var colors = mesh.colors;
-    var ps = new Int32Array(16);
-    var cs = new Int32Array(4);
+    const coords = mesh.coords;
+    const colors = mesh.colors;
+    const ps = new Int32Array(16);
+    const cs = new Int32Array(4);
 
     while (reader.hasData) {
-      var f = reader.readFlag();
+      const f = reader.readFlag();
 
       if (!(0 <= f && f <= 3)) {
         throw new _util.FormatError("Unknown type6 flag");
       }
 
-      var i, ii;
-      var pi = coords.length;
+      const pi = coords.length;
 
-      for (i = 0, ii = f !== 0 ? 8 : 12; i < ii; i++) {
+      for (let i = 0, ii = f !== 0 ? 8 : 12; i < ii; i++) {
         coords.push(reader.readCoordinate());
       }
 
-      var ci = colors.length;
+      const ci = colors.length;
 
-      for (i = 0, ii = f !== 0 ? 2 : 4; i < ii; i++) {
+      for (let i = 0, ii = f !== 0 ? 2 : 4; i < ii; i++) {
         colors.push(reader.readComponents());
       }
 
-      var tmp1, tmp2, tmp3, tmp4;
+      let tmp1, tmp2, tmp3, tmp4;
 
       switch (f) {
         case 0:
@@ -40918,32 +48211,31 @@ Shadings.Mesh = function MeshClosure() {
   }
 
   function decodeType7Shading(mesh, reader) {
-    var coords = mesh.coords;
-    var colors = mesh.colors;
-    var ps = new Int32Array(16);
-    var cs = new Int32Array(4);
+    const coords = mesh.coords;
+    const colors = mesh.colors;
+    const ps = new Int32Array(16);
+    const cs = new Int32Array(4);
 
     while (reader.hasData) {
-      var f = reader.readFlag();
+      const f = reader.readFlag();
 
       if (!(0 <= f && f <= 3)) {
         throw new _util.FormatError("Unknown type7 flag");
       }
 
-      var i, ii;
-      var pi = coords.length;
+      const pi = coords.length;
 
-      for (i = 0, ii = f !== 0 ? 12 : 16; i < ii; i++) {
+      for (let i = 0, ii = f !== 0 ? 12 : 16; i < ii; i++) {
         coords.push(reader.readCoordinate());
       }
 
-      var ci = colors.length;
+      const ci = colors.length;
 
-      for (i = 0, ii = f !== 0 ? 2 : 4; i < ii; i++) {
+      for (let i = 0, ii = f !== 0 ? 2 : 4; i < ii; i++) {
         colors.push(reader.readComponents());
       }
 
-      var tmp1, tmp2, tmp3, tmp4;
+      let tmp1, tmp2, tmp3, tmp4;
 
       switch (f) {
         case 0:
@@ -41057,14 +48349,14 @@ Shadings.Mesh = function MeshClosure() {
   }
 
   function updateBounds(mesh) {
-    var minX = mesh.coords[0][0],
+    let 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];
+    for (let i = 1, ii = mesh.coords.length; i < ii; i++) {
+      const 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;
@@ -41075,34 +48367,34 @@ Shadings.Mesh = function MeshClosure() {
   }
 
   function packData(mesh) {
-    var i, ii, j, jj;
-    var coords = mesh.coords;
-    var coordsPacked = new Float32Array(coords.length * 2);
+    let i, ii, j, jj;
+    const coords = mesh.coords;
+    const coordsPacked = new Float32Array(coords.length * 2);
 
     for (i = 0, j = 0, ii = coords.length; i < ii; i++) {
-      var xy = coords[i];
+      const 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);
+    const colors = mesh.colors;
+    const colorsPacked = new Uint8Array(colors.length * 3);
 
     for (i = 0, j = 0, ii = colors.length; i < ii; i++) {
-      var c = colors[i];
+      const c = colors[i];
       colorsPacked[j++] = c[0];
       colorsPacked[j++] = c[1];
       colorsPacked[j++] = c[2];
     }
 
     mesh.colors = colorsPacked;
-    var figures = mesh.figures;
+    const figures = mesh.figures;
 
     for (i = 0, ii = figures.length; i < ii; i++) {
-      var figure = figures[i],
-          ps = figure.coords,
-          cs = figure.colors;
+      const figure = figures[i],
+            ps = figure.coords,
+            cs = figure.colors;
 
       for (j = 0, jj = ps.length; j < jj; j++) {
         ps[j] *= 2;
@@ -41116,7 +48408,7 @@ Shadings.Mesh = function MeshClosure() {
       throw new _util.FormatError("Mesh data is not a stream");
     }
 
-    var dict = stream.dict;
+    const dict = stream.dict;
     this.matrix = matrix;
     this.shadingType = dict.get("ShadingType");
     this.type = "Pattern";
@@ -41138,12 +48430,12 @@ Shadings.Mesh = function MeshClosure() {
 
     this.cs = cs;
     this.background = dict.has("Background") ? cs.getRgb(dict.get("Background"), 0) : null;
-    var fnObj = dict.getRaw("Function");
-    var fn = fnObj ? pdfFunctionFactory.createFromArray(fnObj) : null;
+    const fnObj = dict.getRaw("Function");
+    const fn = fnObj ? pdfFunctionFactory.createFromArray(fnObj) : null;
     this.coords = [];
     this.colors = [];
     this.figures = [];
-    var decodeContext = {
+    const decodeContext = {
       bitsPerCoordinate: dict.get("BitsPerCoordinate"),
       bitsPerComponent: dict.get("BitsPerComponent"),
       bitsPerFlag: dict.get("BitsPerFlag"),
@@ -41152,8 +48444,8 @@ Shadings.Mesh = function MeshClosure() {
       colorSpace: cs,
       numComps: fn ? 1 : cs.numComps
     };
-    var reader = new MeshStreamReader(stream, decodeContext);
-    var patchMesh = false;
+    const reader = new MeshStreamReader(stream, decodeContext);
+    let patchMesh = false;
 
     switch (this.shadingType) {
       case ShadingType.FREE_FORM_MESH:
@@ -41161,7 +48453,7 @@ Shadings.Mesh = function MeshClosure() {
         break;
 
       case ShadingType.LATTICE_FORM_MESH:
-        var verticesPerRow = dict.get("VerticesPerRow") | 0;
+        const verticesPerRow = dict.get("VerticesPerRow") | 0;
 
         if (verticesPerRow < 2) {
           throw new _util.FormatError("Invalid VerticesPerRow");
@@ -41188,7 +48480,7 @@ Shadings.Mesh = function MeshClosure() {
     if (patchMesh) {
       updateBounds(this);
 
-      for (var i = 0, ii = this.figures.length; i < ii; i++) {
+      for (let i = 0, ii = this.figures.length; i < ii; i++) {
         buildFigureFromPatch(this, i);
       }
     }
@@ -41218,7 +48510,7 @@ Shadings.Dummy = function DummyClosure() {
   return Dummy;
 }();
 
-function getTilingPatternIR(operatorList, dict, args) {
+function getTilingPatternIR(operatorList, dict, color) {
   const matrix = dict.getArray("Matrix");
 
   const bbox = _util.Util.normalizeRect(dict.getArray("BBox"));
@@ -41232,27 +48524,26 @@ function getTilingPatternIR(operatorList, dict, args) {
     throw new _util.FormatError(`Invalid getTilingPatternIR /BBox array: [${bbox}].`);
   }
 
-  return ["TilingPattern", args, operatorList, matrix, bbox, xstep, ystep, paintType, tilingType];
+  return ["TilingPattern", color, operatorList, matrix, bbox, xstep, ystep, paintType, tilingType];
 }
 
 /***/ }),
-/* 40 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/* 41 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.isPDFFunction = isPDFFunction;
-exports.PostScriptCompiler = exports.PostScriptEvaluator = exports.PDFFunctionFactory = void 0;
+exports.PostScriptEvaluator = exports.PostScriptCompiler = exports.PDFFunctionFactory = void 0;
 
 var _primitives = __w_pdfjs_require__(5);
 
 var _util = __w_pdfjs_require__(2);
 
-var _ps_parser = __w_pdfjs_require__(41);
+var _ps_parser = __w_pdfjs_require__(42);
 
 var _image_utils = __w_pdfjs_require__(24);
 
@@ -41263,7 +48554,6 @@ class PDFFunctionFactory {
   }) {
     this.xref = xref;
     this.isEvalSupported = isEvalSupported !== false;
-    this._localFunctionCache = null;
   }
 
   create(fn) {
@@ -41314,10 +48604,6 @@ class PDFFunctionFactory {
     }
 
     if (fnRef) {
-      if (!this._localFunctionCache) {
-        this._localFunctionCache = new _image_utils.LocalFunctionCache();
-      }
-
       const localFunction = this._localFunctionCache.getByRef(fnRef);
 
       if (localFunction) {
@@ -41344,14 +48630,14 @@ class PDFFunctionFactory {
     }
 
     if (fnRef) {
-      if (!this._localFunctionCache) {
-        this._localFunctionCache = new _image_utils.LocalFunctionCache();
-      }
-
       this._localFunctionCache.set(null, fnRef, parsedFunction);
     }
   }
 
+  get _localFunctionCache() {
+    return (0, _util.shadow)(this, "_localFunctionCache", new _image_utils.LocalFunctionCache());
+  }
+
 }
 
 exports.PDFFunctionFactory = PDFFunctionFactory;
@@ -41896,26 +49182,28 @@ function isPDFFunction(v) {
 var PostScriptStack = function PostScriptStackClosure() {
   var MAX_STACK_SIZE = 100;
 
-  function PostScriptStack(initialStack) {
-    this.stack = !initialStack ? [] : Array.prototype.slice.call(initialStack, 0);
-  }
+  class PostScriptStack {
+    constructor(initialStack) {
+      this.stack = !initialStack ? [] : Array.prototype.slice.call(initialStack, 0);
+    }
 
-  PostScriptStack.prototype = {
-    push: function PostScriptStack_push(value) {
+    push(value) {
       if (this.stack.length >= MAX_STACK_SIZE) {
         throw new Error("PostScript function stack overflow.");
       }
 
       this.stack.push(value);
-    },
-    pop: function PostScriptStack_pop() {
+    }
+
+    pop() {
       if (this.stack.length <= 0) {
         throw new Error("PostScript function stack underflow.");
       }
 
       return this.stack.pop();
-    },
-    copy: function PostScriptStack_copy(n) {
+    }
+
+    copy(n) {
       if (this.stack.length + n >= MAX_STACK_SIZE) {
         throw new Error("PostScript function stack overflow.");
       }
@@ -41925,11 +49213,13 @@ var PostScriptStack = function PostScriptStackClosure() {
       for (var i = stack.length - n, j = n - 1; j >= 0; j--, i++) {
         stack.push(stack[i]);
       }
-    },
-    index: function PostScriptStack_index(n) {
+    }
+
+    index(n) {
       this.push(this.stack[this.stack.length - n - 1]);
-    },
-    roll: function PostScriptStack_roll(n, p) {
+    }
+
+    roll(n, p) {
       var stack = this.stack;
       var l = stack.length - n;
       var r = stack.length - 1,
@@ -41956,406 +49246,415 @@ var PostScriptStack = function PostScriptStackClosure() {
         stack[j] = t;
       }
     }
-  };
+
+  }
+
   return PostScriptStack;
 }();
 
-var PostScriptEvaluator = function PostScriptEvaluatorClosure() {
-  function PostScriptEvaluator(operators) {
+class PostScriptEvaluator {
+  constructor(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;
+  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++];
+    while (counter < length) {
+      operator = operators[counter++];
 
-        if (typeof operator === "number") {
-          stack.push(operator);
-          continue;
-        }
+      if (typeof operator === "number") {
+        stack.push(operator);
+        continue;
+      }
 
-        switch (operator) {
-          case "jz":
-            b = stack.pop();
-            a = stack.pop();
+      switch (operator) {
+        case "jz":
+          b = stack.pop();
+          a = stack.pop();
 
-            if (!a) {
-              counter = b;
-            }
+          if (!a) {
+            counter = b;
+          }
 
-            break;
+          break;
 
-          case "j":
-            a = stack.pop();
-            counter = a;
-            break;
+        case "j":
+          a = stack.pop();
+          counter = a;
+          break;
 
-          case "abs":
-            a = stack.pop();
-            stack.push(Math.abs(a));
-            break;
+        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 "add":
+          b = stack.pop();
+          a = stack.pop();
+          stack.push(a + b);
+          break;
 
-          case "and":
-            b = stack.pop();
-            a = stack.pop();
+        case "and":
+          b = stack.pop();
+          a = stack.pop();
 
-            if ((0, _util.isBool)(a) && (0, _util.isBool)(b)) {
-              stack.push(a && b);
-            } else {
-              stack.push(a & b);
-            }
+          if ((0, _util.isBool)(a) && (0, _util.isBool)(b)) {
+            stack.push(a && b);
+          } else {
+            stack.push(a & b);
+          }
 
-            break;
+          break;
 
-          case "atan":
-            a = stack.pop();
-            stack.push(Math.atan(a));
-            break;
+        case "atan":
+          a = stack.pop();
+          stack.push(Math.atan(a));
+          break;
 
-          case "bitshift":
-            b = stack.pop();
-            a = stack.pop();
+        case "bitshift":
+          b = stack.pop();
+          a = stack.pop();
 
-            if (a > 0) {
-              stack.push(a << b);
-            } else {
-              stack.push(a >> b);
-            }
+          if (a > 0) {
+            stack.push(a << b);
+          } else {
+            stack.push(a >> b);
+          }
 
-            break;
+          break;
 
-          case "ceiling":
-            a = stack.pop();
-            stack.push(Math.ceil(a));
-            break;
+        case "ceiling":
+          a = stack.pop();
+          stack.push(Math.ceil(a));
+          break;
 
-          case "copy":
-            a = stack.pop();
-            stack.copy(a);
-            break;
+        case "copy":
+          a = stack.pop();
+          stack.copy(a);
+          break;
 
-          case "cos":
-            a = stack.pop();
-            stack.push(Math.cos(a));
-            break;
+        case "cos":
+          a = stack.pop();
+          stack.push(Math.cos(a));
+          break;
 
-          case "cvi":
-            a = stack.pop() | 0;
-            stack.push(a);
-            break;
+        case "cvi":
+          a = stack.pop() | 0;
+          stack.push(a);
+          break;
 
-          case "cvr":
-            break;
+        case "cvr":
+          break;
 
-          case "div":
-            b = stack.pop();
-            a = stack.pop();
-            stack.push(a / b);
-            break;
+        case "div":
+          b = stack.pop();
+          a = stack.pop();
+          stack.push(a / b);
+          break;
 
-          case "dup":
-            stack.copy(1);
-            break;
+        case "dup":
+          stack.copy(1);
+          break;
 
-          case "eq":
-            b = stack.pop();
-            a = stack.pop();
-            stack.push(a === b);
-            break;
+        case "eq":
+          b = stack.pop();
+          a = stack.pop();
+          stack.push(a === b);
+          break;
 
-          case "exch":
-            stack.roll(2, 1);
-            break;
+        case "exch":
+          stack.roll(2, 1);
+          break;
 
-          case "exp":
-            b = stack.pop();
-            a = stack.pop();
-            stack.push(a ** b);
-            break;
+        case "exp":
+          b = stack.pop();
+          a = stack.pop();
+          stack.push(a ** b);
+          break;
 
-          case "false":
-            stack.push(false);
-            break;
+        case "false":
+          stack.push(false);
+          break;
 
-          case "floor":
-            a = stack.pop();
-            stack.push(Math.floor(a));
-            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 "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 "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 "idiv":
+          b = stack.pop();
+          a = stack.pop();
+          stack.push(a / b | 0);
+          break;
 
-          case "index":
-            a = stack.pop();
-            stack.index(a);
-            break;
+        case "index":
+          a = stack.pop();
+          stack.index(a);
+          break;
 
-          case "le":
-            b = stack.pop();
-            a = stack.pop();
-            stack.push(a <= b);
-            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 "ln":
+          a = stack.pop();
+          stack.push(Math.log(a));
+          break;
 
-          case "log":
-            a = stack.pop();
-            stack.push(Math.log(a) / Math.LN10);
-            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 "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 "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 "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 "ne":
+          b = stack.pop();
+          a = stack.pop();
+          stack.push(a !== b);
+          break;
 
-          case "neg":
-            a = stack.pop();
-            stack.push(-a);
-            break;
+        case "neg":
+          a = stack.pop();
+          stack.push(-a);
+          break;
 
-          case "not":
-            a = stack.pop();
+        case "not":
+          a = stack.pop();
 
-            if ((0, _util.isBool)(a)) {
-              stack.push(!a);
-            } else {
-              stack.push(~a);
-            }
+          if ((0, _util.isBool)(a)) {
+            stack.push(!a);
+          } else {
+            stack.push(~a);
+          }
 
-            break;
+          break;
 
-          case "or":
-            b = stack.pop();
-            a = stack.pop();
+        case "or":
+          b = stack.pop();
+          a = stack.pop();
 
-            if ((0, _util.isBool)(a) && (0, _util.isBool)(b)) {
-              stack.push(a || b);
-            } else {
-              stack.push(a | b);
-            }
+          if ((0, _util.isBool)(a) && (0, _util.isBool)(b)) {
+            stack.push(a || b);
+          } else {
+            stack.push(a | b);
+          }
 
-            break;
+          break;
 
-          case "pop":
-            stack.pop();
-            break;
+        case "pop":
+          stack.pop();
+          break;
 
-          case "roll":
-            b = stack.pop();
-            a = stack.pop();
-            stack.roll(a, b);
-            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 "round":
+          a = stack.pop();
+          stack.push(Math.round(a));
+          break;
 
-          case "sin":
-            a = stack.pop();
-            stack.push(Math.sin(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 "sqrt":
+          a = stack.pop();
+          stack.push(Math.sqrt(a));
+          break;
 
-          case "sub":
-            b = stack.pop();
-            a = stack.pop();
-            stack.push(a - b);
-            break;
+        case "sub":
+          b = stack.pop();
+          a = stack.pop();
+          stack.push(a - b);
+          break;
 
-          case "true":
-            stack.push(true);
-            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 "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();
+        case "xor":
+          b = stack.pop();
+          a = stack.pop();
 
-            if ((0, _util.isBool)(a) && (0, _util.isBool)(b)) {
-              stack.push(a !== b);
-            } else {
-              stack.push(a ^ b);
-            }
+          if ((0, _util.isBool)(a) && (0, _util.isBool)(b)) {
+            stack.push(a !== b);
+          } else {
+            stack.push(a ^ b);
+          }
 
-            break;
+          break;
 
-          default:
-            throw new _util.FormatError(`Unknown operator ${operator}`);
-        }
+        default:
+          throw new _util.FormatError(`Unknown operator ${operator}`);
       }
-
-      return stack.stack;
     }
-  };
-  return PostScriptEvaluator;
-}();
+
+    return stack.stack;
+  }
+
+}
 
 exports.PostScriptEvaluator = PostScriptEvaluator;
 
 var PostScriptCompiler = function PostScriptCompilerClosure() {
-  function AstNode(type) {
-    this.type = type;
-  }
+  class AstNode {
+    constructor(type) {
+      this.type = type;
+    }
 
-  AstNode.prototype.visit = function (visitor) {
-    (0, _util.unreachable)("abstract method");
-  };
+    visit(visitor) {
+      (0, _util.unreachable)("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);
+  class AstArgument extends AstNode {
+    constructor(index, min, max) {
+      super("args");
+      this.index = index;
+      this.min = min;
+      this.max = max;
+    }
 
-  AstArgument.prototype.visit = function (visitor) {
-    visitor.visitArgument(this);
-  };
+    visit(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);
+  class AstLiteral extends AstNode {
+    constructor(number) {
+      super("literal");
+      this.number = number;
+      this.min = number;
+      this.max = number;
+    }
 
-  AstLiteral.prototype.visit = function (visitor) {
-    visitor.visitLiteral(this);
-  };
+    visit(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);
+  class AstBinaryOperation extends AstNode {
+    constructor(op, arg1, arg2, min, max) {
+      super("binary");
+      this.op = op;
+      this.arg1 = arg1;
+      this.arg2 = arg2;
+      this.min = min;
+      this.max = max;
+    }
 
-  AstBinaryOperation.prototype.visit = function (visitor) {
-    visitor.visitBinaryOperation(this);
-  };
+    visit(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);
+  class AstMin extends AstNode {
+    constructor(arg, max) {
+      super("max");
+      this.arg = arg;
+      this.min = arg.min;
+      this.max = max;
+    }
 
-  AstMin.prototype.visit = function (visitor) {
-    visitor.visitMin(this);
-  };
+    visit(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);
+  class AstVariable extends AstNode {
+    constructor(index, min, max) {
+      super("var");
+      this.index = index;
+      this.min = min;
+      this.max = max;
+    }
 
-  AstVariable.prototype.visit = function (visitor) {
-    visitor.visitVariable(this);
-  };
+    visit(visitor) {
+      visitor.visitVariable(this);
+    }
 
-  function AstVariableDefinition(variable, arg) {
-    AstNode.call(this, "definition");
-    this.variable = variable;
-    this.arg = arg;
   }
 
-  AstVariableDefinition.prototype = Object.create(AstNode.prototype);
+  class AstVariableDefinition extends AstNode {
+    constructor(variable, arg) {
+      super("definition");
+      this.variable = variable;
+      this.arg = arg;
+    }
 
-  AstVariableDefinition.prototype.visit = function (visitor) {
-    visitor.visitVariableDefinition(this);
-  };
+    visit(visitor) {
+      visitor.visitVariableDefinition(this);
+    }
 
-  function ExpressionBuilderVisitor() {
-    this.parts = [];
   }
 
-  ExpressionBuilderVisitor.prototype = {
+  class ExpressionBuilderVisitor {
+    constructor() {
+      this.parts = [];
+    }
+
     visitArgument(arg) {
       this.parts.push("Math.max(", arg.min, ", Math.min(", arg.max, ", src[srcOffset + ", arg.index, "]))");
-    },
+    }
 
     visitVariable(variable) {
       this.parts.push("v", variable.index);
-    },
+    }
 
     visitLiteral(literal) {
       this.parts.push(literal.number);
-    },
+    }
 
     visitBinaryOperation(operation) {
       this.parts.push("(");
@@ -42363,7 +49662,7 @@ var PostScriptCompiler = function PostScriptCompilerClosure() {
       this.parts.push(" ", operation.op, " ");
       operation.arg2.visit(this);
       this.parts.push(")");
-    },
+    }
 
     visitVariableDefinition(definition) {
       this.parts.push("var ");
@@ -42371,19 +49670,19 @@ var PostScriptCompiler = function PostScriptCompilerClosure() {
       this.parts.push(" = ");
       definition.arg.visit(this);
       this.parts.push(";");
-    },
+    }
 
     visitMin(max) {
       this.parts.push("Math.min(");
       max.arg.visit(this);
       this.parts.push(", ", max.max, ")");
-    },
+    }
 
     toString() {
       return this.parts.join("");
     }
 
-  };
+  }
 
   function buildAddOperation(num1, num2) {
     if (num2.type === "literal" && num2.number === 0) {
@@ -42451,10 +49750,8 @@ var PostScriptCompiler = function PostScriptCompilerClosure() {
     return new AstMin(num1, max);
   }
 
-  function PostScriptCompiler() {}
-
-  PostScriptCompiler.prototype = {
-    compile: function PostScriptCompiler_compile(code, domain, range) {
+  class PostScriptCompiler {
+    compile(code, domain, range) {
       var stack = [];
       var instructions = [];
       var inputSize = domain.length >> 1,
@@ -42652,22 +49949,23 @@ var PostScriptCompiler = function PostScriptCompilerClosure() {
       });
       return result.join("\n");
     }
-  };
+
+  }
+
   return PostScriptCompiler;
 }();
 
 exports.PostScriptCompiler = PostScriptCompiler;
 
 /***/ }),
-/* 41 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/* 42 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.PostScriptParser = exports.PostScriptLexer = void 0;
 
 var _util = __w_pdfjs_require__(2);
@@ -42913,15 +50211,14 @@ class PostScriptLexer {
 exports.PostScriptLexer = PostScriptLexer;
 
 /***/ }),
-/* 42 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/* 43 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.bidi = bidi;
 
 var _util = __w_pdfjs_require__(2);
@@ -43225,20 +50522,19 @@ function bidi(str, startLevel, vertical) {
 }
 
 /***/ }),
-/* 43 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/* 44 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.getMetrics = void 0;
 
 var _core_utils = __w_pdfjs_require__(8);
 
-var getMetrics = (0, _core_utils.getLookupTableFactory)(function (t) {
+const getMetrics = (0, _core_utils.getLookupTableFactory)(function (t) {
   t.Courier = 600;
   t["Courier-Bold"] = 600;
   t["Courier-BoldOblique"] = 600;
@@ -46179,15 +53475,14 @@ var getMetrics = (0, _core_utils.getLookupTableFactory)(function (t) {
 exports.getMetrics = getMetrics;
 
 /***/ }),
-/* 44 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/* 45 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.MurmurHash3_64 = void 0;
 
 var _util = __w_pdfjs_require__(2);
@@ -46220,7 +53515,7 @@ class MurmurHash3_64 {
         }
       }
     } else if ((0, _util.isArrayBuffer)(input)) {
-      data = input;
+      data = input.slice();
       length = data.byteLength;
     } else {
       throw new Error("Wrong data format in MurmurHash3_64_update. " + "Input must be a string or array.");
@@ -46305,689 +53600,10970 @@ class MurmurHash3_64 {
 exports.MurmurHash3_64 = MurmurHash3_64;
 
 /***/ }),
-/* 45 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/* 46 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
-exports.PDFImage = void 0;
+}));
+exports.OperatorList = void 0;
 
 var _util = __w_pdfjs_require__(2);
 
-var _primitives = __w_pdfjs_require__(5);
+const QueueOptimizer = function QueueOptimizerClosure() {
+  function addState(parentState, pattern, checkFn, iterateFn, processFn) {
+    let state = parentState;
 
-var _colorspace = __w_pdfjs_require__(23);
+    for (let i = 0, ii = pattern.length - 1; i < ii; i++) {
+      const item = pattern[i];
+      state = state[item] || (state[item] = []);
+    }
 
-var _stream = __w_pdfjs_require__(12);
+    state[pattern[pattern.length - 1]] = {
+      checkFn,
+      iterateFn,
+      processFn
+    };
+  }
 
-var _jpeg_stream = __w_pdfjs_require__(18);
+  function handlePaintSolidColorImageMask(iFirstSave, count, fnArray, argsArray) {
+    const iFirstPIMXO = iFirstSave + 2;
+    let i;
 
-var _jpx = __w_pdfjs_require__(21);
+    for (i = 0; i < count; i++) {
+      const arg = argsArray[iFirstPIMXO + 4 * i];
+      const imageMask = arg.length === 1 && arg[0];
 
-function decodeAndClamp(value, addend, coefficient, max) {
-  value = addend + value * coefficient;
+      if (imageMask && imageMask.width === 1 && imageMask.height === 1 && (!imageMask.data.length || 
imageMask.data.length === 1 && imageMask.data[0] === 0)) {
+        fnArray[iFirstPIMXO + 4 * i] = _util.OPS.paintSolidColorImageMask;
+        continue;
+      }
 
-  if (value < 0) {
-    value = 0;
-  } else if (value > max) {
-    value = max;
+      break;
+    }
+
+    return count - i;
   }
 
-  return value;
-}
+  const InitialState = [];
+  addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintInlineImageXObject, 
_util.OPS.restore], null, function iterateInlineImageGroup(context, i) {
+    const fnArray = context.fnArray;
+    const iFirstSave = context.iCurr - 3;
+    const pos = (i - iFirstSave) % 4;
 
-function resizeImageMask(src, bpc, w1, h1, w2, h2) {
-  var length = w2 * h2;
-  let dest;
+    switch (pos) {
+      case 0:
+        return fnArray[i] === _util.OPS.save;
 
-  if (bpc <= 8) {
-    dest = new Uint8Array(length);
-  } else if (bpc <= 16) {
-    dest = new Uint16Array(length);
-  } else {
-    dest = new Uint32Array(length);
-  }
+      case 1:
+        return fnArray[i] === _util.OPS.transform;
 
-  var xRatio = w1 / w2;
-  var yRatio = h1 / h2;
-  var i,
-      j,
-      py,
-      newIndex = 0,
-      oldIndex;
-  var xScaled = new Uint16Array(w2);
-  var w1Scanline = w1;
+      case 2:
+        return fnArray[i] === _util.OPS.paintInlineImageXObject;
 
-  for (i = 0; i < w2; i++) {
-    xScaled[i] = Math.floor(i * xRatio);
-  }
+      case 3:
+        return fnArray[i] === _util.OPS.restore;
+    }
 
-  for (i = 0; i < h2; i++) {
-    py = Math.floor(i * yRatio) * w1Scanline;
+    throw new Error(`iterateInlineImageGroup - invalid pos: ${pos}`);
+  }, function foundInlineImageGroup(context, i) {
+    const MIN_IMAGES_IN_INLINE_IMAGES_BLOCK = 10;
+    const MAX_IMAGES_IN_INLINE_IMAGES_BLOCK = 200;
+    const MAX_WIDTH = 1000;
+    const IMAGE_PADDING = 1;
+    const fnArray = context.fnArray,
+          argsArray = context.argsArray;
+    const curr = context.iCurr;
+    const iFirstSave = curr - 3;
+    const iFirstTransform = curr - 2;
+    const iFirstPIIXO = curr - 1;
+    const count = Math.min(Math.floor((i - iFirstSave) / 4), MAX_IMAGES_IN_INLINE_IMAGES_BLOCK);
 
-    for (j = 0; j < w2; j++) {
-      oldIndex = py + xScaled[j];
-      dest[newIndex++] = src[oldIndex];
+    if (count < MIN_IMAGES_IN_INLINE_IMAGES_BLOCK) {
+      return i - (i - iFirstSave) % 4;
     }
-  }
 
-  return dest;
-}
+    let maxX = 0;
+    const map = [];
+    let maxLineHeight = 0;
+    let currentX = IMAGE_PADDING,
+        currentY = IMAGE_PADDING;
 
-class PDFImage {
-  constructor({
-    xref,
-    res,
-    image,
-    isInline = false,
-    smask = null,
-    mask = null,
-    isMask = false,
-    pdfFunctionFactory,
-    localColorSpaceCache
-  }) {
-    this.image = image;
-    var dict = image.dict;
-    const filter = dict.get("Filter");
+    for (let q = 0; q < count; q++) {
+      const transform = argsArray[iFirstTransform + (q << 2)];
+      const img = argsArray[iFirstPIIXO + (q << 2)][0];
 
-    if ((0, _primitives.isName)(filter)) {
-      switch (filter.name) {
-        case "JPXDecode":
-          var jpxImage = new _jpx.JpxImage();
-          jpxImage.parseImageProperties(image.stream);
-          image.stream.reset();
-          image.width = jpxImage.width;
-          image.height = jpxImage.height;
-          image.bitsPerComponent = jpxImage.bitsPerComponent;
-          image.numComps = jpxImage.componentsCount;
-          break;
+      if (currentX + img.width > MAX_WIDTH) {
+        maxX = Math.max(maxX, currentX);
+        currentY += maxLineHeight + 2 * IMAGE_PADDING;
+        currentX = 0;
+        maxLineHeight = 0;
+      }
 
-        case "JBIG2Decode":
-          image.bitsPerComponent = 1;
-          image.numComps = 1;
-          break;
+      map.push({
+        transform,
+        x: currentX,
+        y: currentY,
+        w: img.width,
+        h: img.height
+      });
+      currentX += img.width + 2 * IMAGE_PADDING;
+      maxLineHeight = Math.max(maxLineHeight, img.height);
+    }
+
+    const imgWidth = Math.max(maxX, currentX) + IMAGE_PADDING;
+    const imgHeight = currentY + maxLineHeight + IMAGE_PADDING;
+    const imgData = new Uint8ClampedArray(imgWidth * imgHeight * 4);
+    const imgRowSize = imgWidth << 2;
+
+    for (let q = 0; q < count; q++) {
+      const data = argsArray[iFirstPIIXO + (q << 2)][0].data;
+      const rowSize = map[q].w << 2;
+      let dataOffset = 0;
+      let offset = map[q].x + map[q].y * imgWidth << 2;
+      imgData.set(data.subarray(0, rowSize), offset - imgRowSize);
+
+      for (let 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;
       }
     }
 
-    let width = dict.get("Width", "W");
-    let height = dict.get("Height", "H");
+    fnArray.splice(iFirstSave, count * 4, _util.OPS.paintInlineImageXObjectGroup);
+    argsArray.splice(iFirstSave, count * 4, [{
+      width: imgWidth,
+      height: imgHeight,
+      kind: _util.ImageKind.RGBA_32BPP,
+      data: imgData
+    }, map]);
+    return iFirstSave + 1;
+  });
+  addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintImageMaskXObject, 
_util.OPS.restore], null, function iterateImageMaskGroup(context, i) {
+    const fnArray = context.fnArray;
+    const iFirstSave = context.iCurr - 3;
+    const pos = (i - iFirstSave) % 4;
 
-    if (Number.isInteger(image.width) && image.width > 0 && Number.isInteger(image.height) && image.height > 
0 && (image.width !== width || image.height !== height)) {
-      (0, _util.warn)("PDFImage - using the Width/Height of the image data, " + "rather than the image 
dictionary.");
-      width = image.width;
-      height = image.height;
+    switch (pos) {
+      case 0:
+        return fnArray[i] === _util.OPS.save;
+
+      case 1:
+        return fnArray[i] === _util.OPS.transform;
+
+      case 2:
+        return fnArray[i] === _util.OPS.paintImageMaskXObject;
+
+      case 3:
+        return fnArray[i] === _util.OPS.restore;
     }
 
-    if (width < 1 || height < 1) {
-      throw new _util.FormatError(`Invalid image width: ${width} or height: ${height}`);
+    throw new Error(`iterateImageMaskGroup - invalid pos: ${pos}`);
+  }, function foundImageMaskGroup(context, i) {
+    const MIN_IMAGES_IN_MASKS_BLOCK = 10;
+    const MAX_IMAGES_IN_MASKS_BLOCK = 100;
+    const MAX_SAME_IMAGES_IN_MASKS_BLOCK = 1000;
+    const fnArray = context.fnArray,
+          argsArray = context.argsArray;
+    const curr = context.iCurr;
+    const iFirstSave = curr - 3;
+    const iFirstTransform = curr - 2;
+    const iFirstPIMXO = curr - 1;
+    let count = Math.floor((i - iFirstSave) / 4);
+    count = handlePaintSolidColorImageMask(iFirstSave, count, fnArray, argsArray);
+
+    if (count < MIN_IMAGES_IN_MASKS_BLOCK) {
+      return i - (i - iFirstSave) % 4;
     }
 
-    this.width = width;
-    this.height = 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;
+    let isSameImage = false;
+    let iTransform, transformArgs;
+    const firstPIMXOArg0 = argsArray[iFirstPIMXO][0];
+    const firstTransformArg0 = argsArray[iFirstTransform][0],
+          firstTransformArg1 = argsArray[iFirstTransform][1],
+          firstTransformArg2 = argsArray[iFirstTransform][2],
+          firstTransformArg3 = argsArray[iFirstTransform][3];
 
-    if (!bitsPerComponent) {
-      bitsPerComponent = dict.get("BitsPerComponent", "BPC");
+    if (firstTransformArg1 === firstTransformArg2) {
+      isSameImage = true;
+      iTransform = iFirstTransform + 4;
+      let iPIMXO = iFirstPIMXO + 4;
 
-      if (!bitsPerComponent) {
-        if (this.imageMask) {
-          bitsPerComponent = 1;
-        } else {
-          throw new _util.FormatError(`Bits per component missing in image: ${this.imageMask}`);
+      for (let q = 1; q < count; q++, iTransform += 4, iPIMXO += 4) {
+        transformArgs = argsArray[iTransform];
+
+        if (argsArray[iPIMXO][0] !== firstPIMXOArg0 || transformArgs[0] !== firstTransformArg0 || 
transformArgs[1] !== firstTransformArg1 || transformArgs[2] !== firstTransformArg2 || transformArgs[3] !== 
firstTransformArg3) {
+          if (q < MIN_IMAGES_IN_MASKS_BLOCK) {
+            isSameImage = false;
+          } else {
+            count = q;
+          }
+
+          break;
         }
       }
     }
 
-    this.bpc = bitsPerComponent;
+    if (isSameImage) {
+      count = Math.min(count, MAX_SAME_IMAGES_IN_MASKS_BLOCK);
+      const positions = new Float32Array(count * 2);
+      iTransform = iFirstTransform;
 
-    if (!this.imageMask) {
-      let colorSpace = dict.getRaw("ColorSpace") || dict.getRaw("CS");
+      for (let q = 0; q < count; q++, iTransform += 4) {
+        transformArgs = argsArray[iTransform];
+        positions[q << 1] = transformArgs[4];
+        positions[(q << 1) + 1] = transformArgs[5];
+      }
 
-      if (!colorSpace) {
-        (0, _util.info)("JPX images (which do not require color spaces)");
+      fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageMaskXObjectRepeat);
+      argsArray.splice(iFirstSave, count * 4, [firstPIMXOArg0, firstTransformArg0, firstTransformArg1, 
firstTransformArg2, firstTransformArg3, positions]);
+    } else {
+      count = Math.min(count, MAX_IMAGES_IN_MASKS_BLOCK);
+      const images = [];
 
-        switch (image.numComps) {
-          case 1:
-            colorSpace = _primitives.Name.get("DeviceGray");
-            break;
+      for (let q = 0; q < count; q++) {
+        transformArgs = argsArray[iFirstTransform + (q << 2)];
+        const maskParams = argsArray[iFirstPIMXO + (q << 2)][0];
+        images.push({
+          data: maskParams.data,
+          width: maskParams.width,
+          height: maskParams.height,
+          transform: transformArgs
+        });
+      }
 
-          case 3:
-            colorSpace = _primitives.Name.get("DeviceRGB");
-            break;
+      fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageMaskXObjectGroup);
+      argsArray.splice(iFirstSave, count * 4, [images]);
+    }
 
-          case 4:
-            colorSpace = _primitives.Name.get("DeviceCMYK");
+    return iFirstSave + 1;
+  });
+  addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintImageXObject, 
_util.OPS.restore], function (context) {
+    const argsArray = context.argsArray;
+    const iFirstTransform = context.iCurr - 2;
+    return argsArray[iFirstTransform][1] === 0 && argsArray[iFirstTransform][2] === 0;
+  }, function iterateImageGroup(context, i) {
+    const fnArray = context.fnArray,
+          argsArray = context.argsArray;
+    const iFirstSave = context.iCurr - 3;
+    const pos = (i - iFirstSave) % 4;
+
+    switch (pos) {
+      case 0:
+        return fnArray[i] === _util.OPS.save;
+
+      case 1:
+        if (fnArray[i] !== _util.OPS.transform) {
+          return false;
+        }
+
+        const iFirstTransform = context.iCurr - 2;
+        const firstTransformArg0 = argsArray[iFirstTransform][0];
+        const firstTransformArg3 = argsArray[iFirstTransform][3];
+
+        if (argsArray[i][0] !== firstTransformArg0 || argsArray[i][1] !== 0 || argsArray[i][2] !== 0 || 
argsArray[i][3] !== firstTransformArg3) {
+          return false;
+        }
+
+        return true;
+
+      case 2:
+        if (fnArray[i] !== _util.OPS.paintImageXObject) {
+          return false;
+        }
+
+        const iFirstPIXO = context.iCurr - 1;
+        const firstPIXOArg0 = argsArray[iFirstPIXO][0];
+
+        if (argsArray[i][0] !== firstPIXOArg0) {
+          return false;
+        }
+
+        return true;
+
+      case 3:
+        return fnArray[i] === _util.OPS.restore;
+    }
+
+    throw new Error(`iterateImageGroup - invalid pos: ${pos}`);
+  }, function (context, i) {
+    const MIN_IMAGES_IN_BLOCK = 3;
+    const MAX_IMAGES_IN_BLOCK = 1000;
+    const fnArray = context.fnArray,
+          argsArray = context.argsArray;
+    const curr = context.iCurr;
+    const iFirstSave = curr - 3;
+    const iFirstTransform = curr - 2;
+    const iFirstPIXO = curr - 1;
+    const firstPIXOArg0 = argsArray[iFirstPIXO][0];
+    const firstTransformArg0 = argsArray[iFirstTransform][0];
+    const firstTransformArg3 = argsArray[iFirstTransform][3];
+    const count = Math.min(Math.floor((i - iFirstSave) / 4), MAX_IMAGES_IN_BLOCK);
+
+    if (count < MIN_IMAGES_IN_BLOCK) {
+      return i - (i - iFirstSave) % 4;
+    }
+
+    const positions = new Float32Array(count * 2);
+    let iTransform = iFirstTransform;
+
+    for (let q = 0; q < count; q++, iTransform += 4) {
+      const transformArgs = argsArray[iTransform];
+      positions[q << 1] = transformArgs[4];
+      positions[(q << 1) + 1] = transformArgs[5];
+    }
+
+    const args = [firstPIXOArg0, firstTransformArg0, firstTransformArg3, positions];
+    fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageXObjectRepeat);
+    argsArray.splice(iFirstSave, count * 4, args);
+    return iFirstSave + 1;
+  });
+  addState(InitialState, [_util.OPS.beginText, _util.OPS.setFont, _util.OPS.setTextMatrix, 
_util.OPS.showText, _util.OPS.endText], null, function iterateShowTextGroup(context, i) {
+    const fnArray = context.fnArray,
+          argsArray = context.argsArray;
+    const iFirstSave = context.iCurr - 4;
+    const pos = (i - iFirstSave) % 5;
+
+    switch (pos) {
+      case 0:
+        return fnArray[i] === _util.OPS.beginText;
+
+      case 1:
+        return fnArray[i] === _util.OPS.setFont;
+
+      case 2:
+        return fnArray[i] === _util.OPS.setTextMatrix;
+
+      case 3:
+        if (fnArray[i] !== _util.OPS.showText) {
+          return false;
+        }
+
+        const iFirstSetFont = context.iCurr - 3;
+        const firstSetFontArg0 = argsArray[iFirstSetFont][0];
+        const firstSetFontArg1 = argsArray[iFirstSetFont][1];
+
+        if (argsArray[i][0] !== firstSetFontArg0 || argsArray[i][1] !== firstSetFontArg1) {
+          return false;
+        }
+
+        return true;
+
+      case 4:
+        return fnArray[i] === _util.OPS.endText;
+    }
+
+    throw new Error(`iterateShowTextGroup - invalid pos: ${pos}`);
+  }, function (context, i) {
+    const MIN_CHARS_IN_BLOCK = 3;
+    const MAX_CHARS_IN_BLOCK = 1000;
+    const fnArray = context.fnArray,
+          argsArray = context.argsArray;
+    const curr = context.iCurr;
+    const iFirstBeginText = curr - 4;
+    const iFirstSetFont = curr - 3;
+    const iFirstSetTextMatrix = curr - 2;
+    const iFirstShowText = curr - 1;
+    const iFirstEndText = curr;
+    const firstSetFontArg0 = argsArray[iFirstSetFont][0];
+    const firstSetFontArg1 = argsArray[iFirstSetFont][1];
+    let count = Math.min(Math.floor((i - iFirstBeginText) / 5), MAX_CHARS_IN_BLOCK);
+
+    if (count < MIN_CHARS_IN_BLOCK) {
+      return i - (i - iFirstBeginText) % 5;
+    }
+
+    let 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;
+    }
+
+    let iEndText = iFirst + 4;
+
+    for (let q = 1; q < count; q++) {
+      fnArray.splice(iEndText, 3);
+      argsArray.splice(iEndText, 3);
+      iEndText += 2;
+    }
+
+    return iEndText + 1;
+  });
+
+  function QueueOptimizer(queue) {
+    this.queue = queue;
+    this.state = null;
+    this.context = {
+      iCurr: 0,
+      fnArray: queue.fnArray,
+      argsArray: queue.argsArray
+    };
+    this.match = null;
+    this.lastProcessed = 0;
+  }
+
+  QueueOptimizer.prototype = {
+    _optimize() {
+      const fnArray = this.queue.fnArray;
+      let i = this.lastProcessed,
+          ii = fnArray.length;
+      let state = this.state;
+      let match = this.match;
+
+      if (!state && !match && i + 1 === ii && !InitialState[fnArray[i]]) {
+        this.lastProcessed = ii;
+        return;
+      }
+
+      const context = this.context;
+
+      while (i < ii) {
+        if (match) {
+          const iterate = (0, match.iterateFn)(context, i);
+
+          if (iterate) {
+            i++;
+            continue;
+          }
+
+          i = (0, match.processFn)(context, i + 1);
+          ii = fnArray.length;
+          match = null;
+          state = null;
+
+          if (i >= ii) {
             break;
+          }
+        }
 
-          default:
-            throw new Error(`JPX images with ${image.numComps} ` + "color components not supported.");
+        state = (state || InitialState)[fnArray[i]];
+
+        if (!state || Array.isArray(state)) {
+          i++;
+          continue;
+        }
+
+        context.iCurr = i;
+        i++;
+
+        if (state.checkFn && !(0, state.checkFn)(context)) {
+          state = null;
+          continue;
         }
+
+        match = state;
+        state = null;
       }
 
-      this.colorSpace = _colorspace.ColorSpace.parse({
-        cs: colorSpace,
-        xref,
-        resources: isInline ? res : null,
-        pdfFunctionFactory,
-        localColorSpaceCache
-      });
-      this.numComps = this.colorSpace.numComps;
+      this.state = state;
+      this.match = match;
+      this.lastProcessed = i;
+    },
+
+    push(fn, args) {
+      this.queue.fnArray.push(fn);
+      this.queue.argsArray.push(args);
+
+      this._optimize();
+    },
+
+    flush() {
+      while (this.match) {
+        const length = this.queue.fnArray.length;
+        this.lastProcessed = (0, this.match.processFn)(this.context, length);
+        this.match = null;
+        this.state = null;
+
+        this._optimize();
+      }
+    },
+
+    reset() {
+      this.state = null;
+      this.match = null;
+      this.lastProcessed = 0;
     }
 
-    this.decode = dict.getArray("Decode", "D");
-    this.needsDecode = false;
+  };
+  return QueueOptimizer;
+}();
 
-    if (this.decode && (this.colorSpace && !this.colorSpace.isDefaultDecode(this.decode, bitsPerComponent) 
|| isMask && !_colorspace.ColorSpace.isDefaultDecode(this.decode, 1))) {
-      this.needsDecode = true;
-      var max = (1 << bitsPerComponent) - 1;
-      this.decodeCoefficients = [];
-      this.decodeAddends = [];
-      const isIndexed = this.colorSpace && this.colorSpace.name === "Indexed";
+const NullOptimizer = function NullOptimizerClosure() {
+  function NullOptimizer(queue) {
+    this.queue = queue;
+  }
+
+  NullOptimizer.prototype = {
+    push(fn, args) {
+      this.queue.fnArray.push(fn);
+      this.queue.argsArray.push(args);
+    },
+
+    flush() {},
+
+    reset() {}
+
+  };
+  return NullOptimizer;
+}();
+
+const OperatorList = function OperatorListClosure() {
+  const CHUNK_SIZE = 1000;
+  const CHUNK_SIZE_ABOUT = CHUNK_SIZE - 5;
+
+  function OperatorList(intent, streamSink) {
+    this._streamSink = streamSink;
+    this.fnArray = [];
+    this.argsArray = [];
+
+    if (streamSink && intent !== "oplist") {
+      this.optimizer = new QueueOptimizer(this);
+    } else {
+      this.optimizer = new NullOptimizer(this);
+    }
+
+    this.dependencies = new Set();
+    this._totalLength = 0;
+    this.weight = 0;
+    this._resolved = streamSink ? null : Promise.resolve();
+  }
+
+  OperatorList.prototype = {
+    get length() {
+      return this.argsArray.length;
+    },
+
+    get ready() {
+      return this._resolved || this._streamSink.ready;
+    },
+
+    get totalLength() {
+      return this._totalLength + this.length;
+    },
+
+    addOp(fn, args) {
+      this.optimizer.push(fn, args);
+      this.weight++;
+
+      if (this._streamSink) {
+        if (this.weight >= CHUNK_SIZE) {
+          this.flush();
+        } else if (this.weight >= CHUNK_SIZE_ABOUT && (fn === _util.OPS.restore || fn === 
_util.OPS.endText)) {
+          this.flush();
+        }
+      }
+    },
+
+    addDependency(dependency) {
+      if (this.dependencies.has(dependency)) {
+        return;
+      }
+
+      this.dependencies.add(dependency);
+      this.addOp(_util.OPS.dependency, [dependency]);
+    },
+
+    addDependencies(dependencies) {
+      for (const dependency of dependencies) {
+        this.addDependency(dependency);
+      }
+    },
+
+    addOpList(opList) {
+      if (!(opList instanceof OperatorList)) {
+        (0, _util.warn)('addOpList - ignoring invalid "opList" parameter.');
+        return;
+      }
+
+      for (const dependency of opList.dependencies) {
+        this.dependencies.add(dependency);
+      }
+
+      for (let i = 0, ii = opList.length; i < ii; i++) {
+        this.addOp(opList.fnArray[i], opList.argsArray[i]);
+      }
+    },
+
+    getIR() {
+      return {
+        fnArray: this.fnArray,
+        argsArray: this.argsArray,
+        length: this.length
+      };
+    },
+
+    get _transfers() {
+      const transfers = [];
+      const {
+        fnArray,
+        argsArray,
+        length
+      } = this;
+
+      for (let i = 0; i < length; i++) {
+        switch (fnArray[i]) {
+          case _util.OPS.paintInlineImageXObject:
+          case _util.OPS.paintInlineImageXObjectGroup:
+          case _util.OPS.paintImageMaskXObject:
+            const arg = argsArray[i][0];
+            ;
+
+            if (!arg.cached) {
+              transfers.push(arg.data.buffer);
+            }
+
+            break;
+        }
+      }
+
+      return transfers;
+    },
+
+    flush(lastChunk = false) {
+      this.optimizer.flush();
+      const length = this.length;
+      this._totalLength += length;
+
+      this._streamSink.enqueue({
+        fnArray: this.fnArray,
+        argsArray: this.argsArray,
+        lastChunk,
+        length
+      }, 1, this._transfers);
+
+      this.dependencies.clear();
+      this.fnArray.length = 0;
+      this.argsArray.length = 0;
+      this.weight = 0;
+      this.optimizer.reset();
+    }
+
+  };
+  return OperatorList;
+}();
+
+exports.OperatorList = OperatorList;
+
+/***/ }),
+/* 47 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports.PDFImage = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+var _primitives = __w_pdfjs_require__(5);
+
+var _colorspace = __w_pdfjs_require__(23);
+
+var _stream = __w_pdfjs_require__(12);
+
+var _jpeg_stream = __w_pdfjs_require__(18);
+
+var _jpx = __w_pdfjs_require__(21);
+
+function decodeAndClamp(value, addend, coefficient, max) {
+  value = addend + value * coefficient;
+
+  if (value < 0) {
+    value = 0;
+  } else if (value > max) {
+    value = max;
+  }
+
+  return value;
+}
+
+function resizeImageMask(src, bpc, w1, h1, w2, h2) {
+  var length = w2 * h2;
+  let dest;
+
+  if (bpc <= 8) {
+    dest = new Uint8Array(length);
+  } else if (bpc <= 16) {
+    dest = new Uint16Array(length);
+  } else {
+    dest = 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;
+
+  for (i = 0; i < w2; i++) {
+    xScaled[i] = Math.floor(i * xRatio);
+  }
+
+  for (i = 0; i < h2; i++) {
+    py = Math.floor(i * yRatio) * w1Scanline;
+
+    for (j = 0; j < w2; j++) {
+      oldIndex = py + xScaled[j];
+      dest[newIndex++] = src[oldIndex];
+    }
+  }
+
+  return dest;
+}
+
+class PDFImage {
+  constructor({
+    xref,
+    res,
+    image,
+    isInline = false,
+    smask = null,
+    mask = null,
+    isMask = false,
+    pdfFunctionFactory,
+    localColorSpaceCache
+  }) {
+    this.image = image;
+    var dict = image.dict;
+    const filter = dict.get("Filter");
+
+    if ((0, _primitives.isName)(filter)) {
+      switch (filter.name) {
+        case "JPXDecode":
+          var jpxImage = new _jpx.JpxImage();
+          jpxImage.parseImageProperties(image.stream);
+          image.stream.reset();
+          image.width = jpxImage.width;
+          image.height = jpxImage.height;
+          image.bitsPerComponent = jpxImage.bitsPerComponent;
+          image.numComps = jpxImage.componentsCount;
+          break;
+
+        case "JBIG2Decode":
+          image.bitsPerComponent = 1;
+          image.numComps = 1;
+          break;
+      }
+    }
+
+    let width = dict.get("Width", "W");
+    let height = dict.get("Height", "H");
+
+    if (Number.isInteger(image.width) && image.width > 0 && Number.isInteger(image.height) && image.height > 
0 && (image.width !== width || image.height !== height)) {
+      (0, _util.warn)("PDFImage - using the Width/Height of the image data, " + "rather than the image 
dictionary.");
+      width = image.width;
+      height = image.height;
+    }
+
+    if (width < 1 || height < 1) {
+      throw new _util.FormatError(`Invalid image width: ${width} or height: ${height}`);
+    }
+
+    this.width = width;
+    this.height = 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 {
+          throw new _util.FormatError(`Bits per component missing in image: ${this.imageMask}`);
+        }
+      }
+    }
+
+    this.bpc = bitsPerComponent;
+
+    if (!this.imageMask) {
+      let colorSpace = dict.getRaw("ColorSpace") || dict.getRaw("CS");
+
+      if (!colorSpace) {
+        (0, _util.info)("JPX images (which do not require color spaces)");
+
+        switch (image.numComps) {
+          case 1:
+            colorSpace = _primitives.Name.get("DeviceGray");
+            break;
+
+          case 3:
+            colorSpace = _primitives.Name.get("DeviceRGB");
+            break;
+
+          case 4:
+            colorSpace = _primitives.Name.get("DeviceCMYK");
+            break;
+
+          default:
+            throw new Error(`JPX images with ${image.numComps} ` + "color components not supported.");
+        }
+      }
+
+      this.colorSpace = _colorspace.ColorSpace.parse({
+        cs: colorSpace,
+        xref,
+        resources: isInline ? res : null,
+        pdfFunctionFactory,
+        localColorSpaceCache
+      });
+      this.numComps = this.colorSpace.numComps;
+    }
+
+    this.decode = dict.getArray("Decode", "D");
+    this.needsDecode = false;
+
+    if (this.decode && (this.colorSpace && !this.colorSpace.isDefaultDecode(this.decode, bitsPerComponent) 
|| isMask && !_colorspace.ColorSpace.isDefaultDecode(this.decode, 1))) {
+      this.needsDecode = true;
+      var max = (1 << bitsPerComponent) - 1;
+      this.decodeCoefficients = [];
+      this.decodeAddends = [];
+      const isIndexed = this.colorSpace && this.colorSpace.name === "Indexed";
+
+      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] = isIndexed ? (dmax - dmin) / max : dmax - dmin;
+        this.decodeAddends[j] = isIndexed ? dmin : max * dmin;
+      }
+    }
+
+    if (smask) {
+      this.smask = new PDFImage({
+        xref,
+        res,
+        image: smask,
+        isInline,
+        pdfFunctionFactory,
+        localColorSpaceCache
+      });
+    } else if (mask) {
+      if ((0, _primitives.isStream)(mask)) {
+        var maskDict = mask.dict,
+            imageMask = maskDict.get("ImageMask", "IM");
+
+        if (!imageMask) {
+          (0, _util.warn)("Ignoring /Mask in image without /ImageMask.");
+        } else {
+          this.mask = new PDFImage({
+            xref,
+            res,
+            image: mask,
+            isInline,
+            isMask: true,
+            pdfFunctionFactory,
+            localColorSpaceCache
+          });
+        }
+      } else {
+        this.mask = mask;
+      }
+    }
+  }
+
+  static async buildImage({
+    xref,
+    res,
+    image,
+    isInline = false,
+    pdfFunctionFactory,
+    localColorSpaceCache
+  }) {
+    const imageData = image;
+    let smaskData = null;
+    let maskData = null;
+    const smask = image.dict.get("SMask");
+    const mask = image.dict.get("Mask");
+
+    if (smask) {
+      smaskData = smask;
+    } else if (mask) {
+      if ((0, _primitives.isStream)(mask) || Array.isArray(mask)) {
+        maskData = mask;
+      } else {
+        (0, _util.warn)("Unsupported mask format.");
+      }
+    }
+
+    return new PDFImage({
+      xref,
+      res,
+      image: imageData,
+      isInline,
+      smask: smaskData,
+      mask: maskData,
+      pdfFunctionFactory,
+      localColorSpaceCache
+    });
+  }
+
+  static createMask({
+    imgArray,
+    width,
+    height,
+    imageIsFromDecodeStream,
+    inverseDecode
+  }) {
+    var computedLength = (width + 7 >> 3) * height;
+    var actualLength = imgArray.byteLength;
+    var haveFullData = computedLength === actualLength;
+    var data, i;
+
+    if (imageIsFromDecodeStream && (!inverseDecode || haveFullData)) {
+      data = imgArray;
+    } else if (!inverseDecode) {
+      data = new Uint8ClampedArray(actualLength);
+      data.set(imgArray);
+    } else {
+      data = new Uint8ClampedArray(computedLength);
+      data.set(imgArray);
+
+      for (i = actualLength; i < computedLength; i++) {
+        data[i] = 0xff;
+      }
+    }
+
+    if (inverseDecode) {
+      for (i = 0; i < actualLength; i++) {
+        data[i] ^= 0xff;
+      }
+    }
+
+    return {
+      data,
+      width,
+      height
+    };
+  }
+
+  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(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) {
+      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(buffer) {
+    var bpc = this.bpc;
+
+    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;
+    let output;
+
+    if (bpc <= 8) {
+      output = new Uint8Array(length);
+    } else if (bpc <= 16) {
+      output = new Uint16Array(length);
+    } else {
+      output = new Uint32Array(length);
+    }
+
+    var rowComps = width * numComps;
+    var max = (1 << bpc) - 1;
+    var i = 0,
+        ii,
+        buf;
+
+    if (bpc === 1) {
+      var mask, loop1End, loop2End;
+
+      for (var j = 0; j < height; j++) {
+        loop1End = i + (rowComps & ~7);
+        loop2End = i + rowComps;
+
+        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;
+        }
+
+        if (i < loop2End) {
+          buf = buffer[bufferPos++];
+          mask = 128;
+
+          while (i < loop2End) {
+            output[i++] = +!!(buf & mask);
+            mask >>= 1;
+          }
+        }
+      }
+    } else {
+      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;
+        let value = buf >> remainingBits;
+
+        if (value < 0) {
+          value = 0;
+        } else if (value > max) {
+          value = max;
+        }
+
+        output[i] = value;
+        buf = buf & (1 << remainingBits) - 1;
+        bits = remainingBits;
+      }
+    }
+
+    return output;
+  }
+
+  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 Uint8ClampedArray(sw * sh);
+      smask.fillGrayBuffer(alphaBuf);
+
+      if (sw !== width || sh !== height) {
+        alphaBuf = resizeImageMask(alphaBuf, smask.bpc, sw, sh, width, height);
+      }
+    } else if (mask) {
+      if (mask instanceof PDFImage) {
+        sw = mask.width;
+        sh = mask.height;
+        alphaBuf = new Uint8ClampedArray(sw * sh);
+        mask.numComps = 1;
+        mask.fillGrayBuffer(alphaBuf);
+
+        for (i = 0, ii = sw * sh; i < ii; ++i) {
+          alphaBuf[i] = 255 - alphaBuf[i];
+        }
+
+        if (sw !== width || sh !== height) {
+          alphaBuf = resizeImageMask(alphaBuf, mask.bpc, sw, sh, width, height);
+        }
+      } else if (Array.isArray(mask)) {
+        alphaBuf = new Uint8ClampedArray(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 {
+        throw new _util.FormatError("Unknown mask format.");
+      }
+    }
+
+    if (alphaBuf) {
+      for (i = 0, j = 3, ii = width * actualHeight; i < ii; ++i, j += 4) {
+        rgbaBuf[j] = alphaBuf[i];
+      }
+    } else {
+      for (i = 0, j = 3, ii = width * actualHeight; i < ii; ++i, j += 4) {
+        rgbaBuf[j] = 255;
+      }
+    }
+  }
+
+  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;
+
+    for (var i = 0; i < length; i += 4) {
+      var alpha = buffer[i + 3];
+
+      if (alpha === 0) {
+        buffer[i] = 255;
+        buffer[i + 1] = 255;
+        buffer[i + 2] = 255;
+        continue;
+      }
+
+      var k = 255 / alpha;
+      buffer[i] = (buffer[i] - matteR) * k + matteR;
+      buffer[i + 1] = (buffer[i + 1] - matteG) * k + matteG;
+      buffer[i + 2] = (buffer[i + 2] - matteB) * k + matteB;
+    }
+  }
+
+  createImageData(forceRGBA = false) {
+    var drawWidth = this.drawWidth;
+    var drawHeight = this.drawHeight;
+    var imgData = {
+      width: drawWidth,
+      height: drawHeight,
+      kind: 0,
+      data: null
+    };
+    var numComps = this.numComps;
+    var originalWidth = this.width;
+    var originalHeight = this.height;
+    var bpc = this.bpc;
+    var rowBytes = originalWidth * numComps * bpc + 7 >> 3;
+    var imgArray;
+
+    if (!forceRGBA) {
+      var kind;
+
+      if (this.colorSpace.name === "DeviceGray" && bpc === 1) {
+        kind = _util.ImageKind.GRAYSCALE_1BPP;
+      } else if (this.colorSpace.name === "DeviceRGB" && bpc === 8 && !this.needsDecode) {
+        kind = _util.ImageKind.RGB_24BPP;
+      }
+
+      if (kind && !this.smask && !this.mask && drawWidth === originalWidth && drawHeight === originalHeight) 
{
+        imgData.kind = kind;
+        imgArray = this.getImageBytes(originalHeight * rowBytes);
+
+        if (this.image instanceof _stream.DecodeStream) {
+          imgData.data = imgArray;
+        } else {
+          var newArray = new Uint8ClampedArray(imgArray.length);
+          newArray.set(imgArray);
+          imgData.data = newArray;
+        }
+
+        if (this.needsDecode) {
+          (0, _util.assert)(kind === _util.ImageKind.GRAYSCALE_1BPP, "PDFImage.createImageData: The image 
must be grayscale.");
+          var buffer = imgData.data;
+
+          for (var i = 0, ii = buffer.length; i < ii; i++) {
+            buffer[i] ^= 0xff;
+          }
+        }
+
+        return imgData;
+      }
+
+      if (this.image instanceof _jpeg_stream.JpegStream && !this.smask && !this.mask) {
+        let imageLength = originalHeight * rowBytes;
+
+        switch (this.colorSpace.name) {
+          case "DeviceGray":
+            imageLength *= 3;
+
+          case "DeviceRGB":
+          case "DeviceCMYK":
+            imgData.kind = _util.ImageKind.RGB_24BPP;
+            imgData.data = this.getImageBytes(imageLength, drawWidth, drawHeight, true);
+            return imgData;
+        }
+      }
+    }
+
+    imgArray = this.getImageBytes(originalHeight * rowBytes);
+    var actualHeight = 0 | imgArray.length / rowBytes * drawHeight / originalHeight;
+    var comps = this.getComponents(imgArray);
+    var alpha01, maybeUndoPreblend;
+
+    if (!forceRGBA && !this.smask && !this.mask) {
+      imgData.kind = _util.ImageKind.RGB_24BPP;
+      imgData.data = new Uint8ClampedArray(drawWidth * drawHeight * 3);
+      alpha01 = 0;
+      maybeUndoPreblend = false;
+    } else {
+      imgData.kind = _util.ImageKind.RGBA_32BPP;
+      imgData.data = new Uint8ClampedArray(drawWidth * drawHeight * 4);
+      alpha01 = 1;
+      maybeUndoPreblend = true;
+      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(buffer) {
+    var numComps = this.numComps;
+
+    if (numComps !== 1) {
+      throw new _util.FormatError(`Reading gray scale from a color image: ${numComps}`);
+    }
+
+    var width = this.width;
+    var height = this.height;
+    var bpc = this.bpc;
+    var rowBytes = width * numComps * bpc + 7 >> 3;
+    var imgArray = this.getImageBytes(height * rowBytes);
+    var comps = this.getComponents(imgArray);
+    var i, length;
+
+    if (bpc === 1) {
+      length = width * height;
+
+      if (this.needsDecode) {
+        for (i = 0; i < length; ++i) {
+          buffer[i] = comps[i] - 1 & 255;
+        }
+      } else {
+        for (i = 0; i < length; ++i) {
+          buffer[i] = -comps[i] & 255;
+        }
+      }
+
+      return;
+    }
+
+    if (this.needsDecode) {
+      this.decodeBuffer(comps);
+    }
+
+    length = width * height;
+    var scale = 255 / ((1 << bpc) - 1);
+
+    for (i = 0; i < length; ++i) {
+      buffer[i] = scale * comps[i];
+    }
+  }
+
+  getImageBytes(length, drawWidth, drawHeight, forceRGB = false) {
+    this.image.reset();
+    this.image.drawWidth = drawWidth || this.width;
+    this.image.drawHeight = drawHeight || this.height;
+    this.image.forceRGB = !!forceRGB;
+    return this.image.getBytes(length, true);
+  }
+
+}
+
+exports.PDFImage = PDFImage;
+
+/***/ }),
+/* 48 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports.incrementalUpdate = incrementalUpdate;
+exports.writeDict = writeDict;
+
+var _util = __w_pdfjs_require__(2);
+
+var _primitives = __w_pdfjs_require__(5);
+
+var _core_utils = __w_pdfjs_require__(8);
+
+var _xml_parser = __w_pdfjs_require__(26);
+
+var _crypto = __w_pdfjs_require__(22);
+
+function writeDict(dict, buffer, transform) {
+  buffer.push("<<");
+
+  for (const key of dict.getKeys()) {
+    buffer.push(` /${(0, _core_utils.escapePDFName)(key)} `);
+    writeValue(dict.getRaw(key), buffer, transform);
+  }
+
+  buffer.push(">>");
+}
+
+function writeStream(stream, buffer, transform) {
+  writeDict(stream.dict, buffer, transform);
+  buffer.push(" stream\n");
+  let string = (0, _util.bytesToString)(stream.getBytes());
+
+  if (transform !== null) {
+    string = transform.encryptString(string);
+  }
+
+  buffer.push(string);
+  buffer.push("\nendstream\n");
+}
+
+function writeArray(array, buffer, transform) {
+  buffer.push("[");
+  let first = true;
+
+  for (const val of array) {
+    if (!first) {
+      buffer.push(" ");
+    } else {
+      first = false;
+    }
+
+    writeValue(val, buffer, transform);
+  }
+
+  buffer.push("]");
+}
+
+function numberToString(value) {
+  if (Number.isInteger(value)) {
+    return value.toString();
+  }
+
+  const roundedValue = Math.round(value * 100);
+
+  if (roundedValue % 100 === 0) {
+    return (roundedValue / 100).toString();
+  }
+
+  if (roundedValue % 10 === 0) {
+    return value.toFixed(1);
+  }
+
+  return value.toFixed(2);
+}
+
+function writeValue(value, buffer, transform) {
+  if ((0, _primitives.isName)(value)) {
+    buffer.push(`/${(0, _core_utils.escapePDFName)(value.name)}`);
+  } else if ((0, _primitives.isRef)(value)) {
+    buffer.push(`${value.num} ${value.gen} R`);
+  } else if (Array.isArray(value)) {
+    writeArray(value, buffer, transform);
+  } else if (typeof value === "string") {
+    if (transform !== null) {
+      value = transform.encryptString(value);
+    }
+
+    buffer.push(`(${(0, _util.escapeString)(value)})`);
+  } else if (typeof value === "number") {
+    buffer.push(numberToString(value));
+  } else if ((0, _primitives.isDict)(value)) {
+    writeDict(value, buffer, transform);
+  } else if ((0, _primitives.isStream)(value)) {
+    writeStream(value, buffer, transform);
+  }
+}
+
+function writeInt(number, size, offset, buffer) {
+  for (let i = size + offset - 1; i > offset - 1; i--) {
+    buffer[i] = number & 0xff;
+    number >>= 8;
+  }
+
+  return offset + size;
+}
+
+function writeString(string, offset, buffer) {
+  for (let i = 0, len = string.length; i < len; i++) {
+    buffer[offset + i] = string.charCodeAt(i) & 0xff;
+  }
+}
+
+function computeMD5(filesize, xrefInfo) {
+  const time = Math.floor(Date.now() / 1000);
+  const filename = xrefInfo.filename || "";
+  const md5Buffer = [time.toString(), filename, filesize.toString()];
+  let md5BufferLen = md5Buffer.reduce((a, str) => a + str.length, 0);
+
+  for (const value of Object.values(xrefInfo.info)) {
+    md5Buffer.push(value);
+    md5BufferLen += value.length;
+  }
+
+  const array = new Uint8Array(md5BufferLen);
+  let offset = 0;
+
+  for (const str of md5Buffer) {
+    writeString(str, offset, array);
+    offset += str.length;
+  }
+
+  return (0, _util.bytesToString)((0, _crypto.calculateMD5)(array));
+}
+
+function updateXFA(datasetsRef, newRefs, xref) {
+  if (datasetsRef === null || xref === null) {
+    return;
+  }
+
+  const datasets = xref.fetchIfRef(datasetsRef);
+  const str = (0, _util.bytesToString)(datasets.getBytes());
+  const xml = new _xml_parser.SimpleXMLParser({
+    hasAttributes: true
+  }).parseFromString(str);
+
+  for (const {
+    xfa
+  } of newRefs) {
+    if (!xfa) {
+      continue;
+    }
+
+    const {
+      path,
+      value
+    } = xfa;
+
+    if (!path) {
+      continue;
+    }
+
+    const node = xml.documentElement.searchNode((0, _core_utils.parseXFAPath)(path), 0);
+
+    if (node) {
+      node.childNodes = [new _xml_parser.SimpleDOMNode("#text", value)];
+    } else {
+      (0, _util.warn)(`Node not found for path: ${path}`);
+    }
+  }
+
+  const buffer = [];
+  xml.documentElement.dump(buffer);
+  let updatedXml = buffer.join("");
+  const encrypt = xref.encrypt;
+
+  if (encrypt) {
+    const transform = encrypt.createCipherTransform(datasetsRef.num, datasetsRef.gen);
+    updatedXml = transform.encryptString(updatedXml);
+  }
+
+  const data = `${datasetsRef.num} ${datasetsRef.gen} obj\n` + `<< /Type /EmbeddedFile /Length 
${updatedXml.length}>>\nstream\n` + updatedXml + "\nendstream\nendobj\n";
+  newRefs.push({
+    ref: datasetsRef,
+    data
+  });
+}
+
+function incrementalUpdate({
+  originalData,
+  xrefInfo,
+  newRefs,
+  xref = null,
+  datasetsRef = null
+}) {
+  updateXFA(datasetsRef, newRefs, xref);
+  const newXref = new _primitives.Dict(null);
+  const refForXrefTable = xrefInfo.newRef;
+  let buffer, baseOffset;
+  const lastByte = originalData[originalData.length - 1];
+
+  if (lastByte === 0x0a || lastByte === 0x0d) {
+    buffer = [];
+    baseOffset = originalData.length;
+  } else {
+    buffer = ["\n"];
+    baseOffset = originalData.length + 1;
+  }
+
+  newXref.set("Size", refForXrefTable.num + 1);
+  newXref.set("Prev", xrefInfo.startXRef);
+  newXref.set("Type", _primitives.Name.get("XRef"));
+
+  if (xrefInfo.rootRef !== null) {
+    newXref.set("Root", xrefInfo.rootRef);
+  }
+
+  if (xrefInfo.infoRef !== null) {
+    newXref.set("Info", xrefInfo.infoRef);
+  }
+
+  if (xrefInfo.encrypt !== null) {
+    newXref.set("Encrypt", xrefInfo.encrypt);
+  }
+
+  newRefs.push({
+    ref: refForXrefTable,
+    data: ""
+  });
+  newRefs = newRefs.sort((a, b) => {
+    return a.ref.num - b.ref.num;
+  });
+  const xrefTableData = [[0, 1, 0xffff]];
+  const indexes = [0, 1];
+  let maxOffset = 0;
+
+  for (const {
+    ref,
+    data
+  } of newRefs) {
+    maxOffset = Math.max(maxOffset, baseOffset);
+    xrefTableData.push([1, baseOffset, Math.min(ref.gen, 0xffff)]);
+    baseOffset += data.length;
+    indexes.push(ref.num);
+    indexes.push(1);
+    buffer.push(data);
+  }
+
+  newXref.set("Index", indexes);
+
+  if (xrefInfo.fileIds.length !== 0) {
+    const md5 = computeMD5(baseOffset, xrefInfo);
+    newXref.set("ID", [xrefInfo.fileIds[0], md5]);
+  }
+
+  const offsetSize = Math.ceil(Math.log2(maxOffset) / 8);
+  const sizes = [1, offsetSize, 2];
+  const structSize = sizes[0] + sizes[1] + sizes[2];
+  const tableLength = structSize * xrefTableData.length;
+  newXref.set("W", sizes);
+  newXref.set("Length", tableLength);
+  buffer.push(`${refForXrefTable.num} ${refForXrefTable.gen} obj\n`);
+  writeDict(newXref, buffer, null);
+  buffer.push(" stream\n");
+  const bufferLen = buffer.reduce((a, str) => a + str.length, 0);
+  const footer = `\nendstream\nendobj\nstartxref\n${baseOffset}\n%%EOF\n`;
+  const array = new Uint8Array(originalData.length + bufferLen + tableLength + footer.length);
+  array.set(originalData);
+  let offset = originalData.length;
+
+  for (const str of buffer) {
+    writeString(str, offset, array);
+    offset += str.length;
+  }
+
+  for (const [type, objOffset, gen] of xrefTableData) {
+    offset = writeInt(type, sizes[0], offset, array);
+    offset = writeInt(objOffset, sizes[1], offset, array);
+    offset = writeInt(gen, sizes[2], offset, array);
+  }
+
+  writeString(footer, offset, array);
+  return array;
+}
+
+/***/ }),
+/* 49 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports.XFAFactory = void 0;
+
+var _xfa_object = __w_pdfjs_require__(50);
+
+var _bind = __w_pdfjs_require__(53);
+
+var _parser = __w_pdfjs_require__(57);
+
+class XFAFactory {
+  constructor(data) {
+    try {
+      this.root = new _parser.XFAParser().parse(XFAFactory._createDocument(data));
+      this.form = new _bind.Binder(this.root).bind();
+      this.pages = this.form[_xfa_object.$toHTML]();
+    } catch (e) {
+      console.log(e);
+    }
+  }
+
+  getPage(pageIndex) {
+    return this.pages.children[pageIndex];
+  }
+
+  get numberPages() {
+    return this.pages.children.length;
+  }
+
+  static _createDocument(data) {
+    if (!data["/xdp:xdp"]) {
+      return data["xdp:xdp"];
+    }
+
+    return Object.values(data).join("");
+  }
+
+}
+
+exports.XFAFactory = XFAFactory;
+
+/***/ }),
+/* 50 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports.XmlObject = exports.XFAObjectArray = exports.XFAObject = exports.XFAAttribute = exports.StringObject 
= exports.OptionObject = exports.Option10 = exports.Option01 = exports.IntegerObject = exports.ContentObject 
= exports.$uid = exports.$toStyle = exports.$toHTML = exports.$text = exports.$setValue = 
exports.$setSetAttributes = exports.$setId = exports.$resolvePrototypes = exports.$removeChild = 
exports.$onText = exports.$onChildCheck = exports.$onChild = exports.$nsAttributes = exports.$nodeName = 
exports.$namespaceId = exports.$isTransparent = exports.$isDescendent = exports.$isDataValue = 
exports.$insertAt = exports.$indexOf = exports.$hasSettableValue = exports.$hasItem = exports.$global = 
exports.$getRealChildrenByNameIt = exports.$getParent = exports.$getChildrenByNameIt = 
exports.$getChildrenByName = exports.$getChildrenByClass = exports.$getChildren = exports.$getAttributeIt = 
exports.$finalize = exports.$extra = exports.$dump = exports.$data = exports.$content = expor
 ts.$consumed = exports.$clone = exports.$cleanup = exports.$clean = exports.$childrenToHTML = 
exports.$appendChild = void 0;
+
+var _utils = __w_pdfjs_require__(51);
+
+var _util = __w_pdfjs_require__(2);
+
+var _namespaces = __w_pdfjs_require__(52);
+
+const $appendChild = Symbol();
+exports.$appendChild = $appendChild;
+const $childrenToHTML = Symbol();
+exports.$childrenToHTML = $childrenToHTML;
+const $clean = Symbol();
+exports.$clean = $clean;
+const $cleanup = Symbol();
+exports.$cleanup = $cleanup;
+const $clone = Symbol();
+exports.$clone = $clone;
+const $consumed = Symbol();
+exports.$consumed = $consumed;
+const $content = Symbol("content");
+exports.$content = $content;
+const $data = Symbol("data");
+exports.$data = $data;
+const $dump = Symbol();
+exports.$dump = $dump;
+const $extra = Symbol("extra");
+exports.$extra = $extra;
+const $finalize = Symbol();
+exports.$finalize = $finalize;
+const $getAttributeIt = Symbol();
+exports.$getAttributeIt = $getAttributeIt;
+const $getChildrenByClass = Symbol();
+exports.$getChildrenByClass = $getChildrenByClass;
+const $getChildrenByName = Symbol();
+exports.$getChildrenByName = $getChildrenByName;
+const $getChildrenByNameIt = Symbol();
+exports.$getChildrenByNameIt = $getChildrenByNameIt;
+const $getRealChildrenByNameIt = Symbol();
+exports.$getRealChildrenByNameIt = $getRealChildrenByNameIt;
+const $getChildren = Symbol();
+exports.$getChildren = $getChildren;
+const $getParent = Symbol();
+exports.$getParent = $getParent;
+const $global = Symbol();
+exports.$global = $global;
+const $hasItem = Symbol();
+exports.$hasItem = $hasItem;
+const $hasSettableValue = Symbol();
+exports.$hasSettableValue = $hasSettableValue;
+const $indexOf = Symbol();
+exports.$indexOf = $indexOf;
+const $insertAt = Symbol();
+exports.$insertAt = $insertAt;
+const $isDataValue = Symbol();
+exports.$isDataValue = $isDataValue;
+const $isDescendent = Symbol();
+exports.$isDescendent = $isDescendent;
+const $isTransparent = Symbol();
+exports.$isTransparent = $isTransparent;
+const $lastAttribute = Symbol();
+const $namespaceId = Symbol("namespaceId");
+exports.$namespaceId = $namespaceId;
+const $nodeName = Symbol("nodeName");
+exports.$nodeName = $nodeName;
+const $nsAttributes = Symbol();
+exports.$nsAttributes = $nsAttributes;
+const $onChild = Symbol();
+exports.$onChild = $onChild;
+const $onChildCheck = Symbol();
+exports.$onChildCheck = $onChildCheck;
+const $onText = Symbol();
+exports.$onText = $onText;
+const $removeChild = Symbol();
+exports.$removeChild = $removeChild;
+const $resolvePrototypes = Symbol();
+exports.$resolvePrototypes = $resolvePrototypes;
+const $setId = Symbol();
+exports.$setId = $setId;
+const $setSetAttributes = Symbol();
+exports.$setSetAttributes = $setSetAttributes;
+const $setValue = Symbol();
+exports.$setValue = $setValue;
+const $text = Symbol();
+exports.$text = $text;
+const $toHTML = Symbol();
+exports.$toHTML = $toHTML;
+const $toStyle = Symbol();
+exports.$toStyle = $toStyle;
+const $uid = Symbol("uid");
+exports.$uid = $uid;
+
+const _applyPrototype = Symbol();
+
+const _attributes = Symbol();
+
+const _attributeNames = Symbol();
+
+const _children = Symbol("_children");
+
+const _cloneAttribute = Symbol();
+
+const _dataValue = Symbol();
+
+const _defaultValue = Symbol();
+
+const _getPrototype = Symbol();
+
+const _getUnsetAttributes = Symbol();
+
+const _hasChildren = Symbol();
+
+const _max = Symbol();
+
+const _options = Symbol();
+
+const _parent = Symbol("parent");
+
+const _setAttributes = Symbol();
+
+const _validator = Symbol();
+
+let uid = 0;
+
+class XFAObject {
+  constructor(nsId, name, hasChildren = false) {
+    this[$namespaceId] = nsId;
+    this[$nodeName] = name;
+    this[_hasChildren] = hasChildren;
+    this[_parent] = null;
+    this[_children] = [];
+    this[$uid] = `${name}${uid++}`;
+  }
+
+  [$onChild](child) {
+    if (!this[_hasChildren] || !this[$onChildCheck](child)) {
+      return false;
+    }
+
+    const name = child[$nodeName];
+    const node = this[name];
+
+    if (node instanceof XFAObjectArray) {
+      if (node.push(child)) {
+        this[$appendChild](child);
+        return true;
+      }
+    } else {
+      if (node !== null) {
+        this[$removeChild](node);
+      }
+
+      this[name] = child;
+      this[$appendChild](child);
+      return true;
+    }
+
+    let id = "";
+
+    if (this.id) {
+      id = ` (id: ${this.id})`;
+    } else if (this.name) {
+      id = ` (name: ${this.name} ${this.h.value})`;
+    }
+
+    (0, _util.warn)(`XFA - node "${this[$nodeName]}"${id} has already enough "${name}"!`);
+    return false;
+  }
+
+  [$onChildCheck](child) {
+    return this.hasOwnProperty(child[$nodeName]) && child[$namespaceId] === this[$namespaceId];
+  }
+
+  [$setId](ids) {
+    if (this.id && this[$namespaceId] === _namespaces.NamespaceIds.template.id) {
+      ids.set(this.id, this);
+    }
+  }
+
+  [$appendChild](child) {
+    child[_parent] = this;
+
+    this[_children].push(child);
+  }
+
+  [$removeChild](child) {
+    const i = this[_children].indexOf(child);
+
+    this[_children].splice(i, 1);
+  }
+
+  [$hasSettableValue]() {
+    return this.hasOwnProperty("value");
+  }
+
+  [$setValue](_) {}
+
+  [$onText](_) {}
+
+  [$finalize]() {}
+
+  [$clean](builder) {
+    delete this[_hasChildren];
+
+    if (this[$cleanup]) {
+      builder.clean(this[$cleanup]);
+      delete this[$cleanup];
+    }
+  }
+
+  [$hasItem]() {
+    return false;
+  }
+
+  [$indexOf](child) {
+    return this[_children].indexOf(child);
+  }
+
+  [$insertAt](i, child) {
+    child[_parent] = this;
+
+    this[_children].splice(i, 0, child);
+  }
+
+  [$isTransparent]() {
+    return this.name === "";
+  }
+
+  [$lastAttribute]() {
+    return "";
+  }
+
+  [$text]() {
+    if (this[_children].length === 0) {
+      return this[$content];
+    }
+
+    return this[_children].map(c => c[$text]()).join("");
+  }
+
+  get [_attributeNames]() {
+    const proto = Object.getPrototypeOf(this);
+
+    if (!proto._attributes) {
+      const attributes = proto._attributes = new Set();
+
+      for (const name of Object.getOwnPropertyNames(this)) {
+        if (this[name] === null || this[name] instanceof XFAObject || this[name] instanceof XFAObjectArray) {
+          break;
+        }
+
+        attributes.add(name);
+      }
+    }
+
+    return (0, _util.shadow)(this, _attributeNames, proto._attributes);
+  }
+
+  [$isDescendent](parent) {
+    let node = this;
+
+    while (node) {
+      if (node === parent) {
+        return true;
+      }
+
+      node = node[$getParent]();
+    }
+
+    return false;
+  }
+
+  [$getParent]() {
+    return this[_parent];
+  }
+
+  [$getChildren](name = null) {
+    if (!name) {
+      return this[_children];
+    }
+
+    return this[name];
+  }
+
+  [$dump]() {
+    const dumped = Object.create(null);
+
+    if (this[$content]) {
+      dumped.$content = this[$content];
+    }
+
+    for (const name of Object.getOwnPropertyNames(this)) {
+      const value = this[name];
+
+      if (value === null) {
+        continue;
+      }
+
+      if (value instanceof XFAObject) {
+        dumped[name] = value[$dump]();
+      } else if (value instanceof XFAObjectArray) {
+        if (!value.isEmpty()) {
+          dumped[name] = value.dump();
+        }
+      } else {
+        dumped[name] = value;
+      }
+    }
+
+    return dumped;
+  }
+
+  [$toStyle]() {
+    return null;
+  }
+
+  [$toHTML]() {
+    return null;
+  }
+
+  [$childrenToHTML]({
+    filter = null,
+    include = true
+  }) {
+    const res = [];
+    this[$getChildren]().forEach(node => {
+      if (!filter || include === filter.has(node[$nodeName])) {
+        const html = node[$toHTML]();
+
+        if (html) {
+          res.push(html);
+        }
+      }
+    });
+    return res;
+  }
+
+  [$setSetAttributes](attributes) {
+    if (attributes.use || attributes.id) {
+      this[_setAttributes] = new Set(Object.keys(attributes));
+    }
+  }
+
+  [_getUnsetAttributes](protoAttributes) {
+    const allAttr = this[_attributeNames];
+    const setAttr = this[_setAttributes];
+    return [...protoAttributes].filter(x => allAttr.has(x) && !setAttr.has(x));
+  }
+
+  [$resolvePrototypes](ids, ancestors = new Set()) {
+    for (const child of this[_children]) {
+      const proto = child[_getPrototype](ids, ancestors);
+
+      if (proto) {
+        child[_applyPrototype](proto, ids, ancestors);
+      } else {
+        child[$resolvePrototypes](ids, ancestors);
+      }
+    }
+  }
+
+  [_getPrototype](ids, ancestors) {
+    const {
+      use
+    } = this;
+
+    if (use && use.startsWith("#")) {
+      const id = use.slice(1);
+      const proto = ids.get(id);
+      this.use = "";
+
+      if (!proto) {
+        (0, _util.warn)(`XFA - Invalid prototype id: ${id}.`);
+        return null;
+      }
+
+      if (proto[$nodeName] !== this[$nodeName]) {
+        (0, _util.warn)(`XFA - Incompatible prototype: ${proto[$nodeName]} !== ${this[$nodeName]}.`);
+        return null;
+      }
+
+      if (ancestors.has(proto)) {
+        (0, _util.warn)(`XFA - Cycle detected in prototypes use.`);
+        return null;
+      }
+
+      ancestors.add(proto);
+
+      const protoProto = proto[_getPrototype](ids, ancestors);
+
+      if (!protoProto) {
+        ancestors.delete(proto);
+        return proto;
+      }
+
+      proto[_applyPrototype](protoProto, ids, ancestors);
+
+      ancestors.delete(proto);
+      return proto;
+    }
+
+    return null;
+  }
+
+  [_applyPrototype](proto, ids, ancestors) {
+    if (ancestors.has(proto)) {
+      (0, _util.warn)(`XFA - Cycle detected in prototypes use.`);
+      return;
+    }
+
+    if (!this[$content] && proto[$content]) {
+      this[$content] = proto[$content];
+    }
+
+    const newAncestors = new Set(ancestors);
+    newAncestors.add(proto);
+
+    for (const unsetAttrName of this[_getUnsetAttributes](proto[_setAttributes])) {
+      this[unsetAttrName] = proto[unsetAttrName];
+
+      if (this[_setAttributes]) {
+        this[_setAttributes].add(unsetAttrName);
+      }
+    }
+
+    for (const name of Object.getOwnPropertyNames(this)) {
+      if (this[_attributeNames].has(name)) {
+        continue;
+      }
+
+      const value = this[name];
+      const protoValue = proto[name];
+
+      if (value instanceof XFAObjectArray) {
+        for (const child of value[_children]) {
+          child[$resolvePrototypes](ids, ancestors);
+        }
+
+        for (let i = value[_children].length, ii = protoValue[_children].length; i < ii; i++) {
+          const child = proto[_children][i][$clone]();
+
+          if (value.push(child)) {
+            child[_parent] = this;
+
+            this[_children].push(child);
+
+            child[$resolvePrototypes](ids, newAncestors);
+          } else {
+            break;
+          }
+        }
+
+        continue;
+      }
+
+      if (value !== null) {
+        value[$resolvePrototypes](ids, ancestors);
+        continue;
+      }
+
+      if (protoValue !== null) {
+        const child = protoValue[$clone]();
+        child[_parent] = this;
+        this[name] = child;
+
+        this[_children].push(child);
+
+        child[$resolvePrototypes](ids, newAncestors);
+      }
+    }
+  }
+
+  static [_cloneAttribute](obj) {
+    if (Array.isArray(obj)) {
+      return obj.map(x => XFAObject[_cloneAttribute](x));
+    }
+
+    if (obj instanceof Object) {
+      return Object.assign({}, obj);
+    }
+
+    return obj;
+  }
+
+  [$clone]() {
+    const clone = Object.create(Object.getPrototypeOf(this));
+
+    for (const $symbol of Object.getOwnPropertySymbols(this)) {
+      try {
+        clone[$symbol] = this[$symbol];
+      } catch (_) {
+        (0, _util.shadow)(clone, $symbol, this[$symbol]);
+      }
+    }
+
+    clone[_children] = [];
+
+    for (const name of Object.getOwnPropertyNames(this)) {
+      if (this[_attributeNames].has(name)) {
+        clone[name] = XFAObject[_cloneAttribute](this[name]);
+        continue;
+      }
+
+      const value = this[name];
+
+      if (value instanceof XFAObjectArray) {
+        clone[name] = new XFAObjectArray(value[_max]);
+      } else {
+        clone[name] = null;
+      }
+    }
+
+    for (const child of this[_children]) {
+      const name = child[$nodeName];
+      const clonedChild = child[$clone]();
+
+      clone[_children].push(clonedChild);
+
+      clonedChild[_parent] = clone;
+
+      if (clone[name] === null) {
+        clone[name] = clonedChild;
+      } else {
+        clone[name][_children].push(clonedChild);
+      }
+    }
+
+    return clone;
+  }
+
+  [$getChildren](name = null) {
+    if (!name) {
+      return this[_children];
+    }
+
+    return this[_children].filter(c => c[$nodeName] === name);
+  }
+
+  [$getChildrenByClass](name) {
+    return this[name];
+  }
+
+  [$getChildrenByName](name, allTransparent, first = true) {
+    return Array.from(this[$getChildrenByNameIt](name, allTransparent, first));
+  }
+
+  *[$getChildrenByNameIt](name, allTransparent, first = true) {
+    if (name === "parent") {
+      yield this[_parent];
+      return;
+    }
+
+    for (const child of this[_children]) {
+      if (child[$nodeName] === name) {
+        yield child;
+      }
+
+      if (child.name === name) {
+        yield child;
+      }
+
+      if (allTransparent || child[$isTransparent]()) {
+        yield* child[$getChildrenByNameIt](name, allTransparent, false);
+      }
+    }
+
+    if (first && this[_attributeNames].has(name)) {
+      yield new XFAAttribute(this, name, this[name]);
+    }
+  }
+
+}
+
+exports.XFAObject = XFAObject;
+
+class XFAObjectArray {
+  constructor(max = Infinity) {
+    this[_max] = max;
+    this[_children] = [];
+  }
+
+  push(child) {
+    const len = this[_children].length;
+
+    if (len <= this[_max]) {
+      this[_children].push(child);
+
+      return true;
+    }
+
+    (0, _util.warn)(`XFA - node "${child[$nodeName]}" accepts no more than ${this[_max]} children`);
+    return false;
+  }
+
+  isEmpty() {
+    return this[_children].length === 0;
+  }
+
+  dump() {
+    return this[_children].length === 1 ? this[_children][0][$dump]() : this[_children].map(x => x[$dump]());
+  }
+
+  [$clone]() {
+    const clone = new XFAObjectArray(this[_max]);
+    clone[_children] = this[_children].map(c => c[$clone]());
+    return clone;
+  }
+
+  get children() {
+    return this[_children];
+  }
+
+  clear() {
+    this[_children].length = 0;
+  }
+
+}
+
+exports.XFAObjectArray = XFAObjectArray;
+
+class XFAAttribute {
+  constructor(node, name, value) {
+    this[_parent] = node;
+    this[$nodeName] = name;
+    this[$content] = value;
+    this[$consumed] = false;
+  }
+
+  [$getParent]() {
+    return this[_parent];
+  }
+
+  [$isDataValue]() {
+    return true;
+  }
+
+  [$text]() {
+    return this[$content];
+  }
+
+  [$isDescendent](parent) {
+    return this[_parent] === parent || this[_parent][$isDescendent](parent);
+  }
+
+}
+
+exports.XFAAttribute = XFAAttribute;
+
+class XmlObject extends XFAObject {
+  constructor(nsId, name, attributes = {}) {
+    super(nsId, name);
+    this[$content] = "";
+    this[_dataValue] = null;
+
+    if (name !== "#text") {
+      const map = new Map();
+      this[_attributes] = map;
+
+      for (const [attrName, value] of Object.entries(attributes)) {
+        map.set(attrName, new XFAAttribute(this, attrName, value));
+      }
+
+      if (attributes.hasOwnProperty($nsAttributes)) {
+        const dataNode = attributes[$nsAttributes].xfa.dataNode;
+
+        if (dataNode !== undefined) {
+          if (dataNode === "dataGroup") {
+            this[_dataValue] = false;
+          } else if (dataNode === "dataValue") {
+            this[_dataValue] = true;
+          }
+        }
+      }
+    }
+
+    this[$consumed] = false;
+  }
+
+  [$onChild](child) {
+    if (this[$content]) {
+      const node = new XmlObject(this[$namespaceId], "#text");
+      this[$appendChild](node);
+      node[$content] = this[$content];
+      this[$content] = "";
+    }
+
+    this[$appendChild](child);
+    return true;
+  }
+
+  [$onText](str) {
+    this[$content] += str;
+  }
+
+  [$finalize]() {
+    if (this[$content] && this[_children].length > 0) {
+      const node = new XmlObject(this[$namespaceId], "#text");
+      this[$appendChild](node);
+      node[$content] = this[$content];
+      delete this[$content];
+    }
+  }
+
+  [$toHTML]() {
+    if (this[$nodeName] === "#text") {
+      return {
+        name: "#text",
+        value: this[$content]
+      };
+    }
+
+    return null;
+  }
+
+  [$getChildren](name = null) {
+    if (!name) {
+      return this[_children];
+    }
+
+    return this[_children].filter(c => c[$nodeName] === name);
+  }
+
+  [$getChildrenByClass](name) {
+    const value = this[_attributes].get(name);
+
+    if (value !== undefined) {
+      return value;
+    }
+
+    return this[$getChildren](name);
+  }
+
+  *[$getChildrenByNameIt](name, allTransparent) {
+    const value = this[_attributes].get(name);
+
+    if (value) {
+      yield value;
+    }
+
+    for (const child of this[_children]) {
+      if (child[$nodeName] === name) {
+        yield child;
+      }
+
+      if (allTransparent) {
+        yield* child[$getChildrenByNameIt](name, allTransparent);
+      }
+    }
+  }
+
+  *[$getAttributeIt](name, skipConsumed) {
+    const value = this[_attributes].get(name);
+
+    if (value && (!skipConsumed || !value[$consumed])) {
+      yield value;
+    }
+
+    for (const child of this[_children]) {
+      yield* child[$getAttributeIt](name, skipConsumed);
+    }
+  }
+
+  *[$getRealChildrenByNameIt](name, allTransparent, skipConsumed) {
+    for (const child of this[_children]) {
+      if (child[$nodeName] === name && (!skipConsumed || !child[$consumed])) {
+        yield child;
+      }
+
+      if (allTransparent) {
+        yield* child[$getRealChildrenByNameIt](name, allTransparent, skipConsumed);
+      }
+    }
+  }
+
+  [$isDataValue]() {
+    if (this[_dataValue] === null) {
+      return this[_children].length === 0;
+    }
+
+    return this[_dataValue];
+  }
+
+  [$dump]() {
+    const dumped = Object.create(null);
+
+    if (this[$content]) {
+      dumped.$content = this[$content];
+    }
+
+    dumped.$name = this[$nodeName];
+    dumped.children = [];
+
+    for (const child of this[_children]) {
+      dumped.children.push(child[$dump]());
+    }
+
+    dumped.attributes = Object.create(null);
+
+    for (const [name, value] of this[_attributes]) {
+      dumped.attributes[name] = value[$content];
+    }
+
+    return dumped;
+  }
+
+}
+
+exports.XmlObject = XmlObject;
+
+class ContentObject extends XFAObject {
+  constructor(nsId, name) {
+    super(nsId, name);
+    this[$content] = "";
+  }
+
+  [$onText](text) {
+    this[$content] += text;
+  }
+
+  [$finalize]() {}
+
+}
+
+exports.ContentObject = ContentObject;
+
+class OptionObject extends ContentObject {
+  constructor(nsId, name, options) {
+    super(nsId, name);
+    this[_options] = options;
+  }
+
+  [$finalize]() {
+    this[$content] = (0, _utils.getKeyword)({
+      data: this[$content],
+      defaultValue: this[_options][0],
+      validate: k => this[_options].includes(k)
+    });
+  }
+
+  [$clean](builder) {
+    super[$clean](builder);
+    delete this[_options];
+  }
+
+}
+
+exports.OptionObject = OptionObject;
+
+class StringObject extends ContentObject {
+  [$finalize]() {
+    this[$content] = this[$content].trim();
+  }
+
+}
+
+exports.StringObject = StringObject;
+
+class IntegerObject extends ContentObject {
+  constructor(nsId, name, defaultValue, validator) {
+    super(nsId, name);
+    this[_defaultValue] = defaultValue;
+    this[_validator] = validator;
+  }
+
+  [$finalize]() {
+    this[$content] = (0, _utils.getInteger)({
+      data: this[$content],
+      defaultValue: this[_defaultValue],
+      validate: this[_validator]
+    });
+  }
+
+  [$clean](builder) {
+    super[$clean](builder);
+    delete this[_defaultValue];
+    delete this[_validator];
+  }
+
+}
+
+exports.IntegerObject = IntegerObject;
+
+class Option01 extends IntegerObject {
+  constructor(nsId, name) {
+    super(nsId, name, 0, n => n === 1);
+  }
+
+}
+
+exports.Option01 = Option01;
+
+class Option10 extends IntegerObject {
+  constructor(nsId, name) {
+    super(nsId, name, 1, n => n === 0);
+  }
+
+}
+
+exports.Option10 = Option10;
+
+/***/ }),
+/* 51 */
+/***/ ((__unused_webpack_module, exports) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports.getBBox = getBBox;
+exports.getColor = getColor;
+exports.getFloat = getFloat;
+exports.getInteger = getInteger;
+exports.getKeyword = getKeyword;
+exports.getMeasurement = getMeasurement;
+exports.getRatio = getRatio;
+exports.getRelevant = getRelevant;
+exports.getStringOption = getStringOption;
+const dimConverters = {
+  pt: x => x,
+  cm: x => x / 2.54 * 72,
+  mm: x => x / (10 * 2.54) * 72,
+  in: x => x * 72
+};
+const measurementPattern = /([+-]?[0-9]+\.?[0-9]*)(.*)/;
+
+function getInteger({
+  data,
+  defaultValue,
+  validate
+}) {
+  if (!data) {
+    return defaultValue;
+  }
+
+  data = data.trim();
+  const n = parseInt(data, 10);
+
+  if (!isNaN(n) && validate(n)) {
+    return n;
+  }
+
+  return defaultValue;
+}
+
+function getFloat({
+  data,
+  defaultValue,
+  validate
+}) {
+  if (!data) {
+    return defaultValue;
+  }
+
+  data = data.trim();
+  const n = parseFloat(data);
+
+  if (!isNaN(n) && validate(n)) {
+    return n;
+  }
+
+  return defaultValue;
+}
+
+function getKeyword({
+  data,
+  defaultValue,
+  validate
+}) {
+  if (!data) {
+    return defaultValue;
+  }
+
+  data = data.trim();
+
+  if (validate(data)) {
+    return data;
+  }
+
+  return defaultValue;
+}
+
+function getStringOption(data, options) {
+  return getKeyword({
+    data,
+    defaultValue: options[0],
+    validate: k => options.includes(k)
+  });
+}
+
+function getMeasurement(str, def = "0") {
+  def = def || "0";
+
+  if (!str) {
+    return getMeasurement(def);
+  }
+
+  const match = str.trim().match(measurementPattern);
+
+  if (!match) {
+    return getMeasurement(def);
+  }
+
+  const [, valueStr, unit] = match;
+  const value = parseFloat(valueStr);
+
+  if (isNaN(value)) {
+    return getMeasurement(def);
+  }
+
+  if (value === 0) {
+    return 0;
+  }
+
+  const conv = dimConverters[unit];
+
+  if (conv) {
+    return conv(value);
+  }
+
+  return value;
+}
+
+function getRatio(data) {
+  if (!data) {
+    return {
+      num: 1,
+      den: 1
+    };
+  }
+
+  const ratio = data.trim().split(/\s*:\s*/).map(x => parseFloat(x)).filter(x => !isNaN(x));
+
+  if (ratio.length === 1) {
+    ratio.push(1);
+  }
+
+  if (ratio.length === 0) {
+    return {
+      num: 1,
+      den: 1
+    };
+  }
+
+  const [num, den] = ratio;
+  return {
+    num,
+    den
+  };
+}
+
+function getRelevant(data) {
+  if (!data) {
+    return [];
+  }
+
+  return data.trim().split(/\s+/).map(e => {
+    return {
+      excluded: e[0] === "-",
+      viewname: e.substring(1)
+    };
+  });
+}
+
+function getColor(data, def = [0, 0, 0]) {
+  let [r, g, b] = def;
+
+  if (!data) {
+    return {
+      r,
+      g,
+      b
+    };
+  }
+
+  const color = data.trim().split(/\s*,\s*/).map(c => Math.min(Math.max(0, parseInt(c.trim(), 10)), 
255)).map(c => isNaN(c) ? 0 : c);
+
+  if (color.length < 3) {
+    return {
+      r,
+      g,
+      b
+    };
+  }
+
+  [r, g, b] = color;
+  return {
+    r,
+    g,
+    b
+  };
+}
+
+function getBBox(data) {
+  const def = -1;
+
+  if (!data) {
+    return {
+      x: def,
+      y: def,
+      width: def,
+      height: def
+    };
+  }
+
+  const bbox = data.trim().split(/\s*,\s*/).map(m => getMeasurement(m, "-1"));
+
+  if (bbox.length < 4 || bbox[2] < 0 || bbox[3] < 0) {
+    return {
+      x: def,
+      y: def,
+      width: def,
+      height: def
+    };
+  }
+
+  const [x, y, width, height] = bbox;
+  return {
+    x,
+    y,
+    width,
+    height
+  };
+}
+
+/***/ }),
+/* 52 */
+/***/ ((__unused_webpack_module, exports) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports.NamespaceIds = exports.$buildXFAObject = void 0;
+const $buildXFAObject = Symbol();
+exports.$buildXFAObject = $buildXFAObject;
+const NamespaceIds = {
+  config: {
+    id: 0,
+    check: ns => ns.startsWith("http://www.xfa.org/schema/xci/";)
+  },
+  connectionSet: {
+    id: 1,
+    check: ns => ns.startsWith("http://www.xfa.org/schema/xfa-connection-set/";)
+  },
+  datasets: {
+    id: 2,
+    check: ns => ns.startsWith("http://www.xfa.org/schema/xfa-data/";)
+  },
+  form: {
+    id: 3,
+    check: ns => ns.startsWith("http://www.xfa.org/schema/xfa-form/";)
+  },
+  localeSet: {
+    id: 4,
+    check: ns => ns.startsWith("http://www.xfa.org/schema/xfa-locale-set/";)
+  },
+  pdf: {
+    id: 5,
+    check: ns => ns === "http://ns.adobe.com/xdp/pdf/";
+  },
+  signature: {
+    id: 6,
+    check: ns => ns === "http://www.w3.org/2000/09/xmldsig#";
+  },
+  sourceSet: {
+    id: 7,
+    check: ns => ns.startsWith("http://www.xfa.org/schema/xfa-source-set/";)
+  },
+  stylesheet: {
+    id: 8,
+    check: ns => ns === "http://www.w3.org/1999/XSL/Transform";
+  },
+  template: {
+    id: 9,
+    check: ns => ns.startsWith("http://www.xfa.org/schema/xfa-template/";)
+  },
+  xdc: {
+    id: 10,
+    check: ns => ns.startsWith("http://www.xfa.org/schema/xdc/";)
+  },
+  xdp: {
+    id: 11,
+    check: ns => ns === "http://ns.adobe.com/xdp/";
+  },
+  xfdf: {
+    id: 12,
+    check: ns => ns === "http://ns.adobe.com/xfdf/";
+  },
+  xhtml: {
+    id: 13,
+    check: ns => ns === "http://www.w3.org/1999/xhtml";
+  },
+  xmpmeta: {
+    id: 14,
+    check: ns => ns === "http://ns.adobe.com/xmpmeta/";
+  }
+};
+exports.NamespaceIds = NamespaceIds;
+
+/***/ }),
+/* 53 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports.Binder = void 0;
+
+var _xfa_object = __w_pdfjs_require__(50);
+
+var _template = __w_pdfjs_require__(54);
+
+var _som = __w_pdfjs_require__(56);
+
+var _namespaces = __w_pdfjs_require__(52);
+
+var _util = __w_pdfjs_require__(2);
+
+function createText(content) {
+  const node = new _template.Text({});
+  node[_xfa_object.$content] = content;
+  return node;
+}
+
+class Binder {
+  constructor(root) {
+    this.root = root;
+    this.datasets = root.datasets;
+
+    if (root.datasets && root.datasets.data) {
+      this.emptyMerge = false;
+      this.data = root.datasets.data;
+    } else {
+      this.emptyMerge = true;
+      this.data = new _xfa_object.XmlObject(_namespaces.NamespaceIds.datasets.id, "data");
+    }
+
+    this.root.form = this.form = root.template[_xfa_object.$clone]();
+  }
+
+  _isConsumeData() {
+    return !this.emptyMerge && this._mergeMode;
+  }
+
+  _isMatchTemplate() {
+    return !this._isConsumeData();
+  }
+
+  bind() {
+    this._bindElement(this.form, this.data);
+
+    return this.form;
+  }
+
+  getData() {
+    return this.data;
+  }
+
+  _bindValue(formNode, data, picture) {
+    if (formNode[_xfa_object.$hasSettableValue]()) {
+      if (data[_xfa_object.$isDataValue]()) {
+        const value = data[_xfa_object.$content].trim();
+
+        formNode[_xfa_object.$setValue](createText(value));
+
+        formNode[_xfa_object.$data] = data;
+      } else if (formNode instanceof _template.Field && formNode.ui && formNode.ui.choiceList && 
formNode.ui.choiceList.open === "multiSelect") {
+        const value = data[_xfa_object.$getChildren]().map(child => 
child[_xfa_object.$content].trim()).join("\n");
+
+        formNode[_xfa_object.$setValue](createText(value));
+
+        formNode[_xfa_object.$data] = data;
+      } else if (this._isConsumeData()) {
+        (0, _util.warn)(`XFA - Nodes haven't the same type.`);
+      }
+    } else if (!data[_xfa_object.$isDataValue]() || this._isMatchTemplate()) {
+      this._bindElement(formNode, data);
+
+      formNode[_xfa_object.$data] = data;
+    } else {
+      (0, _util.warn)(`XFA - Nodes haven't the same type.`);
+    }
+  }
+
+  _findDataByNameToConsume(name, dataNode, global) {
+    if (!name) {
+      return null;
+    }
+
+    let generator, match;
+
+    for (let i = 0; i < 3; i++) {
+      generator = dataNode[_xfa_object.$getRealChildrenByNameIt](name, false, true);
+      match = generator.next().value;
+
+      if (match) {
+        return match;
+      }
+
+      if (dataNode[_xfa_object.$namespaceId] === _namespaces.NamespaceIds.datasets.id && 
dataNode[_xfa_object.$nodeName] === "data") {
+        break;
+      }
+
+      dataNode = dataNode[_xfa_object.$getParent]();
+    }
+
+    if (!global) {
+      return null;
+    }
+
+    generator = this.datasets[_xfa_object.$getRealChildrenByNameIt](name, false, false);
+
+    while (true) {
+      match = generator.next().value;
+
+      if (!match) {
+        break;
+      }
+
+      if (match[_xfa_object.$global]) {
+        return match;
+      }
+    }
+
+    generator = this.data[_xfa_object.$getAttributeIt](name, true);
+    match = generator.next().value;
+
+    if (match && match[_xfa_object.$isDataValue]()) {
+      return match;
+    }
+
+    return null;
+  }
+
+  _setProperties(formNode, dataNode) {
+    if (!formNode.hasOwnProperty("setProperty")) {
+      return;
+    }
+
+    for (const {
+      ref,
+      target,
+      connection
+    } of formNode.setProperty.children) {
+      if (connection) {
+        continue;
+      }
+
+      if (!ref) {
+        continue;
+      }
+
+      const [node] = (0, _som.searchNode)(this.root, dataNode, ref, false, false);
+
+      if (!node) {
+        (0, _util.warn)(`XFA - Invalid reference: ${ref}.`);
+        continue;
+      }
+
+      if (!node[_xfa_object.$isDescendent](this.data)) {
+        (0, _util.warn)(`XFA - Invalid node: must be a data node.`);
+        continue;
+      }
+
+      const [targetNode] = (0, _som.searchNode)(this.root, formNode, target, false, false);
+
+      if (!targetNode) {
+        (0, _util.warn)(`XFA - Invalid target: ${target}.`);
+        continue;
+      }
+
+      if (!targetNode[_xfa_object.$isDescendent](formNode)) {
+        (0, _util.warn)(`XFA - Invalid target: must be a property or subproperty.`);
+        continue;
+      }
+
+      const targetParent = targetNode[_xfa_object.$getParent]();
+
+      if (targetNode instanceof _template.SetProperty || targetParent instanceof _template.SetProperty) {
+        (0, _util.warn)(`XFA - Invalid target: cannot be a setProperty or one of its properties.`);
+        continue;
+      }
+
+      if (targetNode instanceof _template.BindItems || targetParent instanceof _template.BindItems) {
+        (0, _util.warn)(`XFA - Invalid target: cannot be a bindItems or one of its properties.`);
+        continue;
+      }
+
+      const content = node[_xfa_object.$text]();
+
+      const name = targetNode[_xfa_object.$nodeName];
+
+      if (targetNode instanceof _xfa_object.XFAAttribute) {
+        const attrs = Object.create(null);
+        attrs[name] = content;
+        const obj = Reflect.construct(Object.getPrototypeOf(targetParent).constructor, [attrs]);
+        targetParent[name] = obj[name];
+        continue;
+      }
+
+      if (!targetNode.hasOwnProperty(_xfa_object.$content)) {
+        (0, _util.warn)(`XFA - Invalid node to use in setProperty`);
+        continue;
+      }
+
+      targetNode[_xfa_object.$data] = node;
+      targetNode[_xfa_object.$content] = content;
+
+      targetNode[_xfa_object.$finalize]();
+    }
+  }
+
+  _bindItems(formNode, dataNode) {
+    if (!formNode.hasOwnProperty("items") || !formNode.hasOwnProperty("bindItems") || 
formNode.bindItems.isEmpty()) {
+      return;
+    }
+
+    for (const item of formNode.items.children) {
+      formNode[_xfa_object.$removeChild](item);
+    }
+
+    formNode.items.clear();
+    const labels = new _template.Items({});
+    const values = new _template.Items({});
+
+    formNode[_xfa_object.$appendChild](labels);
+
+    formNode.items.push(labels);
+
+    formNode[_xfa_object.$appendChild](values);
+
+    formNode.items.push(values);
+
+    for (const {
+      ref,
+      labelRef,
+      valueRef,
+      connection
+    } of formNode.bindItems.children) {
+      if (connection) {
+        continue;
+      }
+
+      if (!ref) {
+        continue;
+      }
+
+      const nodes = (0, _som.searchNode)(this.root, dataNode, ref, false, false);
+
+      if (!nodes) {
+        (0, _util.warn)(`XFA - Invalid reference: ${ref}.`);
+        continue;
+      }
+
+      for (const node of nodes) {
+        if (!node[_xfa_object.$isDescendent](this.datasets)) {
+          (0, _util.warn)(`XFA - Invalid ref (${ref}): must be a datasets child.`);
+          continue;
+        }
+
+        const [labelNode] = (0, _som.searchNode)(this.root, node, labelRef, true, false);
+
+        if (!labelNode) {
+          (0, _util.warn)(`XFA - Invalid label: ${labelRef}.`);
+          continue;
+        }
+
+        if (!labelNode[_xfa_object.$isDescendent](this.datasets)) {
+          (0, _util.warn)(`XFA - Invalid label: must be a datasets child.`);
+          continue;
+        }
+
+        const [valueNode] = (0, _som.searchNode)(this.root, node, valueRef, true, false);
+
+        if (!valueNode) {
+          (0, _util.warn)(`XFA - Invalid value: ${valueRef}.`);
+          continue;
+        }
+
+        if (!valueNode[_xfa_object.$isDescendent](this.datasets)) {
+          (0, _util.warn)(`XFA - Invalid value: must be a datasets child.`);
+          continue;
+        }
+
+        const label = createText(labelNode[_xfa_object.$text]());
+        const value = createText(valueNode[_xfa_object.$text]());
+
+        labels[_xfa_object.$appendChild](label);
+
+        labels.text.push(label);
+
+        values[_xfa_object.$appendChild](value);
+
+        values.text.push(value);
+      }
+    }
+  }
+
+  _bindOccurrences(formNode, matches, picture) {
+    let baseClone;
+
+    if (matches.length > 1) {
+      baseClone = formNode[_xfa_object.$clone]();
+    }
+
+    this._bindValue(formNode, matches[0], picture);
+
+    this._setProperties(formNode, matches[0]);
+
+    this._bindItems(formNode, matches[0]);
+
+    if (matches.length === 1) {
+      return;
+    }
+
+    const parent = formNode[_xfa_object.$getParent]();
+
+    const name = formNode[_xfa_object.$nodeName];
+
+    const pos = parent[_xfa_object.$indexOf](formNode);
+
+    for (let i = 1, ii = matches.length; i < ii; i++) {
+      const match = matches[i];
+
+      const clone = baseClone[_xfa_object.$clone]();
+
+      clone.occur.min = 1;
+      clone.occur.max = 1;
+      clone.occur.initial = 1;
+      parent[name].push(clone);
+
+      parent[_xfa_object.$insertAt](pos + i, clone);
+
+      this._bindValue(clone, match, picture);
+
+      this._setProperties(clone, match);
+
+      this._bindItems(clone, match);
+    }
+  }
+
+  _createOccurrences(formNode) {
+    if (!this.emptyMerge) {
+      return;
+    }
+
+    const {
+      occur
+    } = formNode;
+
+    if (!occur || occur.initial <= 1) {
+      return;
+    }
+
+    const parent = formNode[_xfa_object.$getParent]();
+
+    const name = formNode[_xfa_object.$nodeName];
+
+    for (let i = 0, ii = occur.initial; i < ii; i++) {
+      const clone = formNode[_xfa_object.$clone]();
+
+      clone.occur.min = 1;
+      clone.occur.max = 1;
+      clone.occur.initial = 1;
+      parent[name].push(clone);
+
+      parent[_xfa_object.$appendChild](clone);
+    }
+  }
+
+  _getOccurInfo(formNode) {
+    const {
+      occur
+    } = formNode;
+    const dataName = formNode.name;
+
+    if (!occur || !dataName) {
+      return [1, 1];
+    }
+
+    const max = occur.max === -1 ? Infinity : occur.max;
+    return [occur.min, max];
+  }
+
+  _bindElement(formNode, dataNode) {
+    const uselessNodes = [];
+
+    this._createOccurrences(formNode);
+
+    for (const child of formNode[_xfa_object.$getChildren]()) {
+      if (child[_xfa_object.$data]) {
+        continue;
+      }
+
+      if (this._mergeMode === undefined && child[_xfa_object.$nodeName] === "subform") {
+        this._mergeMode = child.mergeMode === "consumeData";
+      }
+
+      let global = false;
+      let picture = null;
+      let ref = null;
+      let match = null;
+
+      if (child.bind) {
+        switch (child.bind.match) {
+          case "none":
+            continue;
+
+          case "global":
+            global = true;
+            break;
+
+          case "dataRef":
+            if (!child.bind.ref) {
+              (0, _util.warn)(`XFA - ref is empty in node ${child[_xfa_object.$nodeName]}.`);
+              continue;
+            }
+
+            ref = child.bind.ref;
+            break;
+
+          default:
+            break;
+        }
+
+        if (child.bind.picture) {
+          picture = child.bind.picture[_xfa_object.$content];
+        }
+      }
+
+      const [min, max] = this._getOccurInfo(child);
+
+      if (ref) {
+        match = (0, _som.searchNode)(this.root, dataNode, ref, true, false);
+
+        if (match === null) {
+          match = (0, _som.createDataNode)(this.data, dataNode, ref);
+
+          if (this._isConsumeData()) {
+            match[_xfa_object.$consumed] = true;
+          }
+
+          match = [match];
+        } else {
+          if (this._isConsumeData()) {
+            match = match.filter(node => !node[_xfa_object.$consumed]);
+          }
+
+          if (match.length > max) {
+            match = match.slice(0, max);
+          } else if (match.length === 0) {
+            match = null;
+          }
+
+          if (match && this._isConsumeData()) {
+            match.forEach(node => {
+              node[_xfa_object.$consumed] = true;
+            });
+          }
+        }
+      } else {
+        if (!child.name) {
+          this._bindElement(child, dataNode);
+
+          continue;
+        }
+
+        if (this._isConsumeData()) {
+          const matches = [];
+
+          while (matches.length < max) {
+            const found = this._findDataByNameToConsume(child.name, dataNode, global);
+
+            if (!found) {
+              break;
+            }
+
+            found[_xfa_object.$consumed] = true;
+            matches.push(found);
+          }
+
+          match = matches.length > 0 ? matches : null;
+        } else {
+          match = dataNode[_xfa_object.$getRealChildrenByNameIt](child.name, false, false).next().value;
+
+          if (!match) {
+            match = new _xfa_object.XmlObject(dataNode[_xfa_object.$namespaceId], child.name);
+
+            dataNode[_xfa_object.$appendChild](match);
+          }
+
+          match = [match];
+        }
+      }
+
+      if (match) {
+        if (match.length < min) {
+          (0, _util.warn)(`XFA - Must have at least ${min} occurrences: 
${formNode[_xfa_object.$nodeName]}.`);
+          continue;
+        }
+
+        this._bindOccurrences(child, match, picture);
+      } else if (min > 0) {
+        this._bindElement(child, dataNode);
+      } else {
+        uselessNodes.push(child);
+      }
+    }
+
+    uselessNodes.forEach(node => node[_xfa_object.$getParent]()[_xfa_object.$removeChild](node));
+  }
+
+}
+
+exports.Binder = Binder;
+
+/***/ }),
+/* 54 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports.Value = exports.Text = exports.TemplateNamespace = exports.Template = exports.SetProperty = 
exports.Items = exports.Field = exports.BindItems = void 0;
+
+var _xfa_object = __w_pdfjs_require__(50);
+
+var _namespaces = __w_pdfjs_require__(52);
+
+var _utils = __w_pdfjs_require__(51);
+
+var _html_utils = __w_pdfjs_require__(55);
+
+var _util = __w_pdfjs_require__(2);
+
+const TEMPLATE_NS_ID = _namespaces.NamespaceIds.template.id;
+
+function _setValue(templateNode, value) {
+  if (!templateNode.value) {
+    const nodeValue = new Value({});
+
+    templateNode[_xfa_object.$appendChild](nodeValue);
+
+    templateNode.value = nodeValue;
+  }
+
+  templateNode.value[_xfa_object.$setValue](value);
+}
+
+class AppearanceFilter extends _xfa_object.StringObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "appearanceFilter");
+    this.id = attributes.id || "";
+    this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]);
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+  }
+
+}
+
+class Arc extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "arc", true);
+    this.circular = (0, _utils.getInteger)({
+      data: attributes.circular,
+      defaultValue: 0,
+      validate: x => x === 1
+    });
+    this.hand = (0, _utils.getStringOption)(attributes.hand, ["even", "left", "right"]);
+    this.id = attributes.id || "";
+    this.startAngle = (0, _utils.getFloat)({
+      data: attributes.startAngle,
+      defaultValue: 0,
+      validate: x => true
+    });
+    this.sweepAngle = (0, _utils.getFloat)({
+      data: attributes.sweepAngle,
+      defaultValue: 360,
+      validate: x => true
+    });
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.edge = null;
+    this.fill = null;
+  }
+
+}
+
+class Area extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "area", true);
+    this.colSpan = (0, _utils.getInteger)({
+      data: attributes.colSpan,
+      defaultValue: 1,
+      validate: n => n >= 1
+    });
+    this.id = attributes.id || "";
+    this.name = attributes.name || "";
+    this.relevant = (0, _utils.getRelevant)(attributes.relevant);
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.x = (0, _utils.getMeasurement)(attributes.x, "0pt");
+    this.y = (0, _utils.getMeasurement)(attributes.y, "0pt");
+    this.desc = null;
+    this.extras = null;
+    this.area = new _xfa_object.XFAObjectArray();
+    this.draw = new _xfa_object.XFAObjectArray();
+    this.exObject = new _xfa_object.XFAObjectArray();
+    this.exclGroup = new _xfa_object.XFAObjectArray();
+    this.field = new _xfa_object.XFAObjectArray();
+    this.subform = new _xfa_object.XFAObjectArray();
+    this.subformSet = new _xfa_object.XFAObjectArray();
+  }
+
+  [_xfa_object.$isTransparent]() {
+    return true;
+  }
+
+}
+
+class Assist extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "assist", true);
+    this.id = attributes.id || "";
+    this.role = attributes.role || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.speak = null;
+    this.toolTip = null;
+  }
+
+}
+
+class Barcode extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "barcode", true);
+    this.charEncoding = (0, _utils.getKeyword)({
+      data: attributes.charEncoding ? attributes.charEncoding.toLowerCase() : "",
+      defaultValue: "",
+      validate: k => ["utf-8", "big-five", "fontspecific", "gbk", "gb-18030", "gb-2312", "ksc-5601", "none", 
"shift-jis", "ucs-2", "utf-16"].includes(k) || k.match(/iso-8859-[0-9]{2}/)
+    });
+    this.checksum = (0, _utils.getStringOption)(attributes.checksum, ["none", "1mod10", "1mod10_1mod11", 
"2mod10", "auto"]);
+    this.dataColumnCount = (0, _utils.getInteger)({
+      data: attributes.dataColumnCount,
+      defaultValue: -1,
+      validate: x => x >= 0
+    });
+    this.dataLength = (0, _utils.getInteger)({
+      data: attributes.dataLength,
+      defaultValue: -1,
+      validate: x => x >= 0
+    });
+    this.dataPrep = (0, _utils.getStringOption)(attributes.dataPrep, ["none", "flateCompress"]);
+    this.dataRowCount = (0, _utils.getInteger)({
+      data: attributes.dataRowCount,
+      defaultValue: -1,
+      validate: x => x >= 0
+    });
+    this.endChar = attributes.endChar || "";
+    this.errorCorrectionLevel = (0, _utils.getInteger)({
+      data: attributes.errorCorrectionLevel,
+      defaultValue: -1,
+      validate: x => x >= 0 && x <= 8
+    });
+    this.id = attributes.id || "";
+    this.moduleHeight = (0, _utils.getMeasurement)(attributes.moduleHeight, "5mm");
+    this.moduleWidth = (0, _utils.getMeasurement)(attributes.moduleWidth, "0.25mm");
+    this.printCheckDigit = (0, _utils.getInteger)({
+      data: attributes.printCheckDigit,
+      defaultValue: 0,
+      validate: x => x === 1
+    });
+    this.rowColumnRatio = (0, _utils.getRatio)(attributes.rowColumnRatio);
+    this.startChar = attributes.startChar || "";
+    this.textLocation = (0, _utils.getStringOption)(attributes.textLocation, ["below", "above", 
"aboveEmbedded", "belowEmbedded", "none"]);
+    this.truncate = (0, _utils.getInteger)({
+      data: attributes.truncate,
+      defaultValue: 0,
+      validate: x => x === 1
+    });
+    this.type = (0, _utils.getStringOption)(attributes.type ? attributes.type.toLowerCase() : "", ["aztec", 
"codabar", "code2of5industrial", "code2of5interleaved", "code2of5matrix", "code2of5standard", "code3of9", 
"code3of9extended", "code11", "code49", "code93", "code128", "code128a", "code128b", "code128c", 
"code128sscc", "datamatrix", "ean8", "ean8add2", "ean8add5", "ean13", "ean13add2", "ean13add5", "ean13pwcd", 
"fim", "logmars", "maxicode", "msi", "pdf417", "pdf417macro", "plessey", "postauscust2", "postauscust3", 
"postausreplypaid", "postausstandard", "postukrm4scc", "postusdpbc", "postusimb", "postusstandard", 
"postus5zip", "qrcode", "rfid", "rss14", "rss14expanded", "rss14limited", "rss14stacked", "rss14stackedomni", 
"rss14truncated", "telepen", "ucc128", "ucc128random", "ucc128sscc", "upca", "upcaadd2", "upcaadd5", 
"upcapwcd", "upce", "upceadd2", "upceadd5", "upcean2", "upcean5", "upsmaxicode"]);
+    this.upsMode = (0, _utils.getStringOption)(attributes.upsMode, ["usCarrier", "internationalCarrier", 
"secureSymbol", "standardSymbol"]);
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.wideNarrowRatio = (0, _utils.getRatio)(attributes.wideNarrowRatio);
+    this.encrypt = null;
+    this.extras = null;
+  }
+
+}
+
+class Bind extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "bind", true);
+    this.match = (0, _utils.getStringOption)(attributes.match, ["once", "dataRef", "global", "none"]);
+    this.ref = attributes.ref || "";
+    this.picture = null;
+  }
+
+}
+
+class BindItems extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "bindItems");
+    this.connection = attributes.connection || "";
+    this.labelRef = attributes.labelRef || "";
+    this.ref = attributes.ref || "";
+    this.valueRef = attributes.valueRef || "";
+  }
+
+}
+
+exports.BindItems = BindItems;
+
+class Bookend extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "bookend");
+    this.id = attributes.id || "";
+    this.leader = attributes.leader || "";
+    this.trailer = attributes.trailer || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+  }
+
+}
+
+class BooleanElement extends _xfa_object.Option01 {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "boolean");
+    this.id = attributes.id || "";
+    this.name = attributes.name || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+  }
+
+  [_xfa_object.$toHTML]() {
+    return this[_xfa_object.$content] === 1;
+  }
+
+}
+
+class Border extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "border", true);
+    this.break = (0, _utils.getStringOption)(attributes.break, ["close", "open"]);
+    this.hand = (0, _utils.getStringOption)(attributes.hand, ["even", "left", "right"]);
+    this.id = attributes.id || "";
+    this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", 
"invisible"]);
+    this.relevant = (0, _utils.getRelevant)(attributes.relevant);
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.corner = new _xfa_object.XFAObjectArray(4);
+    this.edge = new _xfa_object.XFAObjectArray(4);
+    this.extras = null;
+    this.fill = null;
+    this.margin = null;
+  }
+
+  [_xfa_object.$toStyle](widths, margins) {
+    const edgeStyles = this.edge.children.map(node => node[_xfa_object.$toStyle]());
+    const cornerStyles = this.edge.children.map(node => node[_xfa_object.$toStyle]());
+    let style;
+
+    if (this.margin) {
+      style = this.margin[_xfa_object.$toStyle]();
+
+      if (margins) {
+        margins.push(this.margin.topInset, this.margin.rightInset, this.margin.bottomInset, 
this.margin.leftInset);
+      }
+    } else {
+      style = Object.create(null);
+
+      if (margins) {
+        margins.push(0, 0, 0, 0);
+      }
+    }
+
+    if (this.fill) {
+      Object.assign(style, this.fill[_xfa_object.$toStyle]());
+    }
+
+    if (edgeStyles.length > 0) {
+      if (widths) {
+        this.edge.children.forEach(node => widths.push(node.thickness));
+
+        if (widths.length < 4) {
+          const last = widths[widths.length - 1];
+
+          for (let i = widths.length; i < 4; i++) {
+            widths.push(last);
+          }
+        }
+      }
+
+      if (edgeStyles.length === 2 || edgeStyles.length === 3) {
+        const last = edgeStyles[edgeStyles.length - 1];
+
+        for (let i = edgeStyles.length; i < 4; i++) {
+          edgeStyles.push(last);
+        }
+      }
+
+      style.borderWidth = edgeStyles.map(s => s.width).join(" ");
+      style.borderColor = edgeStyles.map(s => s.color).join(" ");
+      style.borderStyle = edgeStyles.map(s => s.style).join(" ");
+    } else {
+      if (widths) {
+        widths.push(0, 0, 0, 0);
+      }
+    }
+
+    if (cornerStyles.length > 0) {
+      if (cornerStyles.length === 2 || cornerStyles.length === 3) {
+        const last = cornerStyles[cornerStyles.length - 1];
+
+        for (let i = cornerStyles.length; i < 4; i++) {
+          cornerStyles.push(last);
+        }
+      }
+
+      style.borderRadius = cornerStyles.map(s => s.radius).join(" ");
+    }
+
+    switch (this.presence) {
+      case "invisible":
+      case "hidden":
+        style.borderStyle = "";
+        break;
+
+      case "inactive":
+        style.borderStyle = "none";
+        break;
+    }
+
+    return style;
+  }
+
+}
+
+class Break extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "break", true);
+    this.after = (0, _utils.getStringOption)(attributes.after, ["auto", "contentArea", "pageArea", 
"pageEven", "pageOdd"]);
+    this.afterTarget = attributes.afterTarget || "";
+    this.before = (0, _utils.getStringOption)(attributes.before, ["auto", "contentArea", "pageArea", 
"pageEven", "pageOdd"]);
+    this.beforeTarget = attributes.beforeTarget || "";
+    this.bookendLeader = attributes.bookendLeader || "";
+    this.bookendTrailer = attributes.bookendTrailer || "";
+    this.id = attributes.id || "";
+    this.overflowLeader = attributes.overflowLeader || "";
+    this.overflowTarget = attributes.overflowTarget || "";
+    this.overflowTrailer = attributes.overflowTrailer || "";
+    this.startNew = (0, _utils.getInteger)({
+      data: attributes.startNew,
+      defaultValue: 0,
+      validate: x => x === 1
+    });
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.extras = null;
+  }
+
+}
+
+class BreakAfter extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "breakAfter", true);
+    this.id = attributes.id || "";
+    this.leader = attributes.leader || "";
+    this.startNew = (0, _utils.getInteger)({
+      data: attributes.startNew,
+      defaultValue: 0,
+      validate: x => x === 1
+    });
+    this.target = attributes.target || "";
+    this.targetType = (0, _utils.getStringOption)(attributes.targetType, ["auto", "contentArea", "pageArea", 
"pageEven", "pageOdd"]);
+    this.trailer = attributes.trailer || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.script = null;
+  }
+
+}
+
+class BreakBefore extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "breakBefore", true);
+    this.id = attributes.id || "";
+    this.leader = attributes.leader || "";
+    this.startNew = (0, _utils.getInteger)({
+      data: attributes.startNew,
+      defaultValue: 0,
+      validate: x => x === 1
+    });
+    this.target = attributes.target || "";
+    this.targetType = (0, _utils.getStringOption)(attributes.targetType, ["auto", "contentArea", "pageArea", 
"pageEven", "pageOdd"]);
+    this.trailer = attributes.trailer || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.script = null;
+  }
+
+}
+
+class Button extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "button", true);
+    this.highlight = (0, _utils.getStringOption)(attributes.highlight, ["inverted", "none", "outline", 
"push"]);
+    this.id = attributes.id || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.extras = null;
+  }
+
+  [_xfa_object.$toHTML]() {
+    return {
+      name: "button",
+      attributes: {
+        class: "xfaButton",
+        style: {}
+      }
+    };
+  }
+
+}
+
+class Calculate extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "calculate", true);
+    this.id = attributes.id || "";
+    this.override = (0, _utils.getStringOption)(attributes.override, ["disabled", "error", "ignore", 
"warning"]);
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.extras = null;
+    this.message = null;
+    this.script = null;
+  }
+
+}
+
+class Caption extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "caption", true);
+    this.id = attributes.id || "";
+    this.placement = (0, _utils.getStringOption)(attributes.placement, ["left", "bottom", "inline", "right", 
"top"]);
+    this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", 
"invisible"]);
+    this.reserve = (0, _utils.getMeasurement)(attributes.reserve);
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.extras = null;
+    this.font = null;
+    this.margin = null;
+    this.para = null;
+    this.value = null;
+  }
+
+  [_xfa_object.$setValue](value) {
+    _setValue(this, value);
+  }
+
+  [_xfa_object.$toHTML]() {
+    if (!this.value) {
+      return null;
+    }
+
+    const value = this.value[_xfa_object.$toHTML]();
+
+    if (!value) {
+      return null;
+    }
+
+    const children = [];
+
+    if (typeof value === "string") {
+      children.push({
+        name: "#text",
+        value
+      });
+    } else {
+      children.push(value);
+    }
+
+    const style = (0, _html_utils.toStyle)(this, "font", "margin", "para", "visibility");
+
+    switch (this.placement) {
+      case "left":
+      case "right":
+        style.minWidth = (0, _html_utils.measureToString)(this.reserve);
+        break;
+
+      case "top":
+      case "bottom":
+        style.minHeight = (0, _html_utils.measureToString)(this.reserve);
+        break;
+    }
+
+    return {
+      name: "div",
+      attributes: {
+        style
+      },
+      children
+    };
+  }
+
+}
+
+class Certificate extends _xfa_object.StringObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "certificate");
+    this.id = attributes.id || "";
+    this.name = attributes.name || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+  }
+
+}
+
+class Certificates extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "certificates", true);
+    this.credentialServerPolicy = (0, _utils.getStringOption)(attributes.credentialServerPolicy, 
["optional", "required"]);
+    this.id = attributes.id || "";
+    this.url = attributes.url || "";
+    this.urlPolicy = attributes.urlPolicy || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.encryption = null;
+    this.issuers = null;
+    this.keyUsage = null;
+    this.oids = null;
+    this.signing = null;
+    this.subjectDNs = null;
+  }
+
+}
+
+class CheckButton extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "checkButton", true);
+    this.id = attributes.id || "";
+    this.mark = (0, _utils.getStringOption)(attributes.mark, ["default", "check", "circle", "cross", 
"diamond", "square", "star"]);
+    this.shape = (0, _utils.getStringOption)(attributes.shape, ["square", "round"]);
+    this.size = (0, _utils.getMeasurement)(attributes.size, "10pt");
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.border = null;
+    this.extras = null;
+    this.margin = null;
+  }
+
+  [_xfa_object.$toHTML]() {
+    const style = (0, _html_utils.toStyle)(this, "border", "margin");
+    const size = (0, _html_utils.measureToString)(this.size);
+    style.width = style.height = size;
+    let mark, radius;
+
+    if (this.shape === "square") {
+      mark = "■";
+      radius = "10%";
+    } else {
+      mark = "●";
+      radius = "50%";
+    }
+
+    if (!style.borderRadius) {
+      style.borderRadius = radius;
+    }
+
+    if (this.mark !== "default") {
+      switch (this.mark) {
+        case "check":
+          mark = "✓";
+          break;
+
+        case "circle":
+          mark = "●";
+          break;
+
+        case "cross":
+          mark = "✕";
+          break;
+
+        case "diamond":
+          mark = "♦";
+          break;
+
+        case "square":
+          mark = "■";
+          break;
+
+        case "star":
+          mark = "★";
+          break;
+      }
+    }
+
+    if (size !== "10px") {
+      style.fontSize = size;
+      style.lineHeight = size;
+      style.width = size;
+      style.height = size;
+    }
+
+    return {
+      name: "label",
+      attributes: {
+        class: "xfaLabel"
+      },
+      children: [{
+        name: "input",
+        attributes: {
+          class: "xfaCheckbox",
+          type: "checkbox"
+        }
+      }, {
+        name: "span",
+        attributes: {
+          class: "xfaCheckboxMark",
+          mark,
+          style
+        }
+      }]
+    };
+  }
+
+}
+
+class ChoiceList extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "choiceList", true);
+    this.commitOn = (0, _utils.getStringOption)(attributes.commitOn, ["select", "exit"]);
+    this.id = attributes.id || "";
+    this.open = (0, _utils.getStringOption)(attributes.open, ["userControl", "always", "multiSelect", 
"onEntry"]);
+    this.textEntry = (0, _utils.getInteger)({
+      data: attributes.textEntry,
+      defaultValue: 0,
+      validate: x => x === 1
+    });
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.border = null;
+    this.extras = null;
+    this.margin = null;
+  }
+
+  [_xfa_object.$toHTML]() {
+    const style = (0, _html_utils.toStyle)(this, "border", "margin");
+    return {
+      name: "label",
+      attributes: {
+        class: "xfaLabel"
+      },
+      children: [{
+        name: "select",
+        attributes: {
+          class: "xfaSxelect",
+          multiple: this.open === "multiSelect",
+          style
+        }
+      }]
+    };
+  }
+
+}
+
+class Color extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "color", true);
+    this.cSpace = (0, _utils.getStringOption)(attributes.cSpace, ["SRGB"]);
+    this.id = attributes.id || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.value = (0, _utils.getColor)(attributes.value);
+    this.extras = null;
+  }
+
+  [_xfa_object.$hasSettableValue]() {
+    return false;
+  }
+
+  [_xfa_object.$toStyle]() {
+    return _util.Util.makeHexColor(this.value.r, this.value.g, this.value.b);
+  }
+
+}
+
+class Comb extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "comb");
+    this.id = attributes.id || "";
+    this.numberOfCells = (0, _utils.getInteger)({
+      data: attributes.numberOfCells,
+      defaultValue: 0,
+      validate: x => x >= 0
+    });
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+  }
+
+}
+
+class Connect extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "connect", true);
+    this.connection = attributes.connection || "";
+    this.id = attributes.id || "";
+    this.ref = attributes.ref || "";
+    this.usage = (0, _utils.getStringOption)(attributes.usage, ["exportAndImport", "exportOnly", 
"importOnly"]);
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.picture = null;
+  }
+
+}
+
+class ContentArea extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "contentArea", true);
+    this.h = (0, _utils.getMeasurement)(attributes.h);
+    this.id = attributes.id || "";
+    this.name = attributes.name || "";
+    this.relevant = (0, _utils.getRelevant)(attributes.relevant);
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.w = (0, _utils.getMeasurement)(attributes.w);
+    this.x = (0, _utils.getMeasurement)(attributes.x, "0pt");
+    this.y = (0, _utils.getMeasurement)(attributes.y, "0pt");
+    this.desc = null;
+    this.extras = null;
+  }
+
+  [_xfa_object.$toHTML]() {
+    const left = (0, _html_utils.measureToString)(this.x);
+    const top = (0, _html_utils.measureToString)(this.y);
+    const style = {
+      position: "absolute",
+      left,
+      top,
+      width: (0, _html_utils.measureToString)(this.w),
+      height: (0, _html_utils.measureToString)(this.h)
+    };
+    return {
+      name: "div",
+      children: [],
+      attributes: {
+        style,
+        class: "xfaContentarea",
+        id: this[_xfa_object.$uid]
+      }
+    };
+  }
+
+}
+
+class Corner extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "corner", true);
+    this.id = attributes.id || "";
+    this.inverted = (0, _utils.getInteger)({
+      data: attributes.inverted,
+      defaultValue: 0,
+      validate: x => x === 1
+    });
+    this.join = (0, _utils.getStringOption)(attributes.join, ["square", "round"]);
+    this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", 
"invisible"]);
+    this.radius = (0, _utils.getMeasurement)(attributes.radius);
+    this.stroke = (0, _utils.getStringOption)(attributes.stroke, ["solid", "dashDot", "dashDotDot", 
"dashed", "dotted", "embossed", "etched", "lowered", "raised"]);
+    this.thickness = (0, _utils.getMeasurement)(attributes.thickness, "0.5pt");
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.color = null;
+    this.extras = null;
+  }
+
+  [_xfa_object.$toStyle]() {
+    const style = (0, _html_utils.toStyle)(this, "visibility");
+    style.radius = (0, _html_utils.measureToString)(this.radius);
+    return style;
+  }
+
+}
+
+class DateElement extends _xfa_object.ContentObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "date");
+    this.id = attributes.id || "";
+    this.name = attributes.name || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+  }
+
+  [_xfa_object.$finalize]() {
+    this[_xfa_object.$content] = new Date(this[_xfa_object.$content].trim());
+  }
+
+  [_xfa_object.$toHTML]() {
+    return this[_xfa_object.$content].toString();
+  }
+
+}
+
+class DateTime extends _xfa_object.ContentObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "dateTime");
+    this.id = attributes.id || "";
+    this.name = attributes.name || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+  }
+
+  [_xfa_object.$finalize]() {
+    this[_xfa_object.$content] = new Date(this[_xfa_object.$content].trim());
+  }
+
+  [_xfa_object.$toHTML]() {
+    return this[_xfa_object.$content].toString();
+  }
+
+}
+
+class DateTimeEdit extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "dateTimeEdit", true);
+    this.hScrollPolicy = (0, _utils.getStringOption)(attributes.hScrollPolicy, ["auto", "off", "on"]);
+    this.id = attributes.id || "";
+    this.picker = (0, _utils.getStringOption)(attributes.picker, ["host", "none"]);
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.border = null;
+    this.comb = null;
+    this.extras = null;
+    this.margin = null;
+  }
+
+  [_xfa_object.$toHTML]() {
+    const style = (0, _html_utils.toStyle)(this, "border", "font", "margin");
+    const html = {
+      name: "input",
+      attributes: {
+        type: "text",
+        class: "xfaTextfield",
+        style
+      }
+    };
+    return {
+      name: "label",
+      attributes: {
+        class: "xfaLabel"
+      },
+      children: [html]
+    };
+  }
+
+}
+
+class Decimal extends _xfa_object.ContentObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "decimal");
+    this.fracDigits = (0, _utils.getInteger)({
+      data: attributes.fracDigits,
+      defaultValue: 2,
+      validate: x => true
+    });
+    this.id = attributes.id || "";
+    this.leadDigits = (0, _utils.getInteger)({
+      data: attributes.leadDigits,
+      defaultValue: -1,
+      validate: x => true
+    });
+    this.name = attributes.name || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+  }
+
+  [_xfa_object.$finalize]() {
+    const number = parseFloat(this[_xfa_object.$content].trim());
+    this[_xfa_object.$content] = isNaN(number) ? null : number;
+  }
+
+  [_xfa_object.$toHTML]() {
+    return this[_xfa_object.$content] !== null ? this[_xfa_object.$content].toString() : "";
+  }
+
+}
+
+class DefaultUi extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "defaultUi", true);
+    this.id = attributes.id || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.extras = null;
+  }
+
+}
+
+class Desc extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "desc", true);
+    this.id = attributes.id || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.boolean = new _xfa_object.XFAObjectArray();
+    this.date = new _xfa_object.XFAObjectArray();
+    this.dateTime = new _xfa_object.XFAObjectArray();
+    this.decimal = new _xfa_object.XFAObjectArray();
+    this.exData = new _xfa_object.XFAObjectArray();
+    this.float = new _xfa_object.XFAObjectArray();
+    this.image = new _xfa_object.XFAObjectArray();
+    this.integer = new _xfa_object.XFAObjectArray();
+    this.text = new _xfa_object.XFAObjectArray();
+    this.time = new _xfa_object.XFAObjectArray();
+  }
+
+}
+
+class DigestMethod extends _xfa_object.OptionObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "digestMethod", ["", "SHA1", "SHA256", "SHA512", "RIPEMD160"]);
+    this.id = attributes.id || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+  }
+
+}
+
+class DigestMethods extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "digestMethods", true);
+    this.id = attributes.id || "";
+    this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]);
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.digestMethod = new _xfa_object.XFAObjectArray();
+  }
+
+}
+
+class Draw extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "draw", true);
+    this.anchorType = (0, _utils.getStringOption)(attributes.anchorType, ["topLeft", "bottomCenter", 
"bottomLeft", "bottomRight", "middleCenter", "middleLeft", "middleRight", "topCenter", "topRight"]);
+    this.colSpan = (0, _utils.getInteger)({
+      data: attributes.colSpan,
+      defaultValue: 1,
+      validate: x => x >= 1
+    });
+    this.h = attributes.h ? (0, _utils.getMeasurement)(attributes.h) : "";
+    this.hAlign = (0, _utils.getStringOption)(attributes.hAlign, ["left", "center", "justify", "justifyAll", 
"radix", "right"]);
+    this.id = attributes.id || "";
+    this.locale = attributes.locale || "";
+    this.maxH = (0, _utils.getMeasurement)(attributes.maxH, "0pt");
+    this.maxW = (0, _utils.getMeasurement)(attributes.maxW, "0pt");
+    this.minH = (0, _utils.getMeasurement)(attributes.minH, "0pt");
+    this.minW = (0, _utils.getMeasurement)(attributes.minW, "0pt");
+    this.name = attributes.name || "";
+    this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", 
"invisible"]);
+    this.relevant = (0, _utils.getRelevant)(attributes.relevant);
+    this.rotate = (0, _utils.getInteger)({
+      data: attributes.rotate,
+      defaultValue: 0,
+      validate: x => x % 90 === 0
+    });
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.w = attributes.w ? (0, _utils.getMeasurement)(attributes.w) : "";
+    this.x = (0, _utils.getMeasurement)(attributes.x, "0pt");
+    this.y = (0, _utils.getMeasurement)(attributes.y, "0pt");
+    this.assist = null;
+    this.border = null;
+    this.caption = null;
+    this.desc = null;
+    this.extras = null;
+    this.font = null;
+    this.keep = null;
+    this.margin = null;
+    this.para = null;
+    this.traversal = null;
+    this.ui = null;
+    this.value = null;
+    this.setProperty = new _xfa_object.XFAObjectArray();
+  }
+
+  [_xfa_object.$setValue](value) {
+    _setValue(this, value);
+  }
+
+  [_xfa_object.$toHTML]() {
+    if (!this.value) {
+      return null;
+    }
+
+    const style = (0, _html_utils.toStyle)(this, "font", "dimensions", "position", "presence", "rotate", 
"anchorType");
+    const clazz = ["xfaDraw"];
+
+    if (this.font) {
+      clazz.push("xfaFont");
+    }
+
+    const attributes = {
+      style,
+      id: this[_xfa_object.$uid],
+      class: clazz.join(" ")
+    };
+
+    if (this.name) {
+      attributes.xfaName = this.name;
+    }
+
+    return {
+      name: "div",
+      attributes,
+      children: []
+    };
+  }
+
+}
+
+class Edge extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "edge", true);
+    this.cap = (0, _utils.getStringOption)(attributes.cap, ["square", "butt", "round"]);
+    this.id = attributes.id || "";
+    this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", 
"invisible"]);
+    this.stroke = (0, _utils.getStringOption)(attributes.stroke, ["solid", "dashDot", "dashDotDot", 
"dashed", "dotted", "embossed", "etched", "lowered", "raised"]);
+    this.thickness = (0, _utils.getMeasurement)(attributes.thickness, "0.5pt");
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.color = null;
+    this.extras = null;
+  }
+
+  [_xfa_object.$toStyle]() {
+    const style = (0, _html_utils.toStyle)(this, "visibility");
+    Object.assign(style, {
+      linecap: this.cap,
+      width: (0, _html_utils.measureToString)(this.thickness),
+      color: this.color ? this.color[_xfa_object.$toHTML]() : "#000000",
+      style: ""
+    });
+
+    if (this.presence !== "visible") {
+      style.style = "none";
+    } else {
+      switch (this.stroke) {
+        case "solid":
+          style.style = "solid";
+          break;
+
+        case "dashDot":
+          style.style = "dashed";
+          break;
+
+        case "dashDotDot":
+          style.style = "dashed";
+          break;
+
+        case "dashed":
+          style.style = "dashed";
+          break;
+
+        case "dotted":
+          style.style = "dotted";
+          break;
+
+        case "embossed":
+          style.style = "ridge";
+          break;
+
+        case "etched":
+          style.style = "groove";
+          break;
+
+        case "lowered":
+          style.style = "inset";
+          break;
+
+        case "raised":
+          style.style = "outset";
+          break;
+      }
+    }
+
+    return style;
+  }
+
+}
+
+class Encoding extends _xfa_object.OptionObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "encoding", ["adbe.x509.rsa_sha1", "adbe.pkcs7.detached", "adbe.pkcs7.sha1"]);
+    this.id = attributes.id || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+  }
+
+}
+
+class Encodings extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "encodings", true);
+    this.id = attributes.id || "";
+    this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]);
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.encoding = new _xfa_object.XFAObjectArray();
+  }
+
+}
+
+class Encrypt extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "encrypt", true);
+    this.id = attributes.id || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.certificate = null;
+  }
+
+}
+
+class EncryptData extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "encryptData", true);
+    this.id = attributes.id || "";
+    this.operation = (0, _utils.getStringOption)(attributes.operation, ["encrypt", "decrypt"]);
+    this.target = attributes.target || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.filter = null;
+    this.manifest = null;
+  }
+
+}
+
+class Encryption extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "encryption", true);
+    this.id = attributes.id || "";
+    this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]);
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.certificate = new _xfa_object.XFAObjectArray();
+  }
+
+}
+
+class EncryptionMethod extends _xfa_object.OptionObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "encryptionMethod", ["", "AES256-CBC", "TRIPLEDES-CBC", "AES128-CBC", 
"AES192-CBC"]);
+    this.id = attributes.id || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+  }
+
+}
+
+class EncryptionMethods extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "encryptionMethods", true);
+    this.id = attributes.id || "";
+    this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]);
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.encryptionMethod = new _xfa_object.XFAObjectArray();
+  }
+
+}
+
+class Event extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "event", true);
+    this.activity = (0, _utils.getStringOption)(attributes.activity, ["click", "change", "docClose", 
"docReady", "enter", "exit", "full", "indexChange", "initialize", "mouseDown", "mouseEnter", "mouseExit", 
"mouseUp", "postExecute", "postOpen", "postPrint", "postSave", "postSign", "postSubmit", "preExecute", 
"preOpen", "prePrint", "preSave", "preSign", "preSubmit", "ready", "validationState"]);
+    this.id = attributes.id || "";
+    this.listen = (0, _utils.getStringOption)(attributes.listen, ["refOnly", "refAndDescendents"]);
+    this.name = attributes.name || "";
+    this.ref = attributes.ref || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.extras = null;
+    this.encryptData = null;
+    this.execute = null;
+    this.script = null;
+    this.signData = null;
+    this.submit = null;
+  }
+
+}
+
+class ExData extends _xfa_object.ContentObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "exData");
+    this.contentType = attributes.contentType || "";
+    this.href = attributes.href || "";
+    this.id = attributes.id || "";
+    this.maxLength = (0, _utils.getInteger)({
+      data: attributes.maxLength,
+      defaultValue: -1,
+      validate: x => x >= -1
+    });
+    this.name = attributes.name || "";
+    this.rid = attributes.rid || "";
+    this.transferEncoding = (0, _utils.getStringOption)(attributes.transferEncoding, ["none", "base64", 
"package"]);
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+  }
+
+  [_xfa_object.$onChild](child) {
+    if (this.contentType === "text/html" && child[_xfa_object.$namespaceId] === 
_namespaces.NamespaceIds.xhtml.id) {
+      this[_xfa_object.$content] = child;
+      return true;
+    }
+
+    if (this.contentType === "text/xml") {
+      this[_xfa_object.$content] = child;
+      return true;
+    }
+
+    return false;
+  }
+
+}
+
+class ExObject extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "exObject", true);
+    this.archive = attributes.archive || "";
+    this.classId = attributes.classId || "";
+    this.codeBase = attributes.codeBase || "";
+    this.codeType = attributes.codeType || "";
+    this.id = attributes.id || "";
+    this.name = attributes.name || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.extras = null;
+    this.boolean = new _xfa_object.XFAObjectArray();
+    this.date = new _xfa_object.XFAObjectArray();
+    this.dateTime = new _xfa_object.XFAObjectArray();
+    this.decimal = new _xfa_object.XFAObjectArray();
+    this.exData = new _xfa_object.XFAObjectArray();
+    this.exObject = new _xfa_object.XFAObjectArray();
+    this.float = new _xfa_object.XFAObjectArray();
+    this.image = new _xfa_object.XFAObjectArray();
+    this.integer = new _xfa_object.XFAObjectArray();
+    this.text = new _xfa_object.XFAObjectArray();
+    this.time = new _xfa_object.XFAObjectArray();
+  }
+
+}
+
+class ExclGroup extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "exclGroup", true);
+    this.access = (0, _utils.getStringOption)(attributes.access, ["open", "nonInteractive", "protected", 
"readOnly"]);
+    this.accessKey = attributes.accessKey || "";
+    this.anchorType = (0, _utils.getStringOption)(attributes.anchorType, ["topLeft", "bottomCenter", 
"bottomLeft", "bottomRight", "middleCenter", "middleLeft", "middleRight", "topCenter", "topRight"]);
+    this.colSpan = (0, _utils.getInteger)({
+      data: attributes.colSpan,
+      defaultValue: 1,
+      validate: x => x >= 1
+    });
+    this.h = attributes.h ? (0, _utils.getMeasurement)(attributes.h) : "";
+    this.hAlign = (0, _utils.getStringOption)(attributes.hAlign, ["left", "center", "justify", "justifyAll", 
"radix", "right"]);
+    this.id = attributes.id || "";
+    this.layout = (0, _utils.getStringOption)(attributes.layout, ["position", "lr-tb", "rl-row", "rl-tb", 
"row", "table", "tb"]);
+    this.maxH = (0, _utils.getMeasurement)(attributes.maxH, "0pt");
+    this.maxW = (0, _utils.getMeasurement)(attributes.maxW, "0pt");
+    this.minH = (0, _utils.getMeasurement)(attributes.minH, "0pt");
+    this.minW = (0, _utils.getMeasurement)(attributes.minW, "0pt");
+    this.name = attributes.name || "";
+    this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", 
"invisible"]);
+    this.relevant = (0, _utils.getRelevant)(attributes.relevant);
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.w = attributes.w ? (0, _utils.getMeasurement)(attributes.w) : "";
+    this.x = (0, _utils.getMeasurement)(attributes.x, "0pt");
+    this.y = (0, _utils.getMeasurement)(attributes.y, "0pt");
+    this.assist = null;
+    this.bind = null;
+    this.border = null;
+    this.calculate = null;
+    this.caption = null;
+    this.desc = null;
+    this.extras = null;
+    this.margin = null;
+    this.para = null;
+    this.traversal = null;
+    this.validate = null;
+    this.connect = new _xfa_object.XFAObjectArray();
+    this.event = new _xfa_object.XFAObjectArray();
+    this.field = new _xfa_object.XFAObjectArray();
+    this.setProperty = new _xfa_object.XFAObjectArray();
+  }
+
+  [_xfa_object.$hasSettableValue]() {
+    return true;
+  }
+
+  [_xfa_object.$setValue](value) {
+    for (const field of this.field.children) {
+      if (!field.value) {
+        const nodeValue = new Value({});
+
+        field[_xfa_object.$appendChild](nodeValue);
+
+        field.value = nodeValue;
+      }
+
+      const nodeBoolean = new BooleanElement({});
+      nodeBoolean[_xfa_object.$content] = 0;
+
+      for (const item of field.items.children) {
+        if (item[_xfa_object.$hasItem](value)) {
+          nodeBoolean[_xfa_object.$content] = 1;
+          break;
+        }
+      }
+
+      field.value[_xfa_object.$setValue](nodeBoolean);
+    }
+  }
+
+  [_xfa_object.$toHTML]() {
+    if (!this.value) {
+      return null;
+    }
+
+    const style = (0, _html_utils.toStyle)(this, "dimensions", "position", "anchorType");
+    const attributes = {
+      style,
+      id: this[_xfa_object.$uid],
+      class: "xfaExclgroup"
+    };
+
+    const children = this[_xfa_object.$childrenToHTML]({
+      filter: new Set(["field"]),
+      include: true
+    });
+
+    return {
+      name: "div",
+      attributes,
+      children
+    };
+  }
+
+}
+
+class Execute extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "execute");
+    this.connection = attributes.connection || "";
+    this.executeType = (0, _utils.getStringOption)(attributes.executeType, ["import", "remerge"]);
+    this.id = attributes.id || "";
+    this.runAt = (0, _utils.getStringOption)(attributes.runAt, ["client", "both", "server"]);
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+  }
+
+}
+
+class Extras extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "extras", true);
+    this.id = attributes.id || "";
+    this.name = attributes.name || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.boolean = new _xfa_object.XFAObjectArray();
+    this.date = new _xfa_object.XFAObjectArray();
+    this.dateTime = new _xfa_object.XFAObjectArray();
+    this.decimal = new _xfa_object.XFAObjectArray();
+    this.exData = new _xfa_object.XFAObjectArray();
+    this.extras = new _xfa_object.XFAObjectArray();
+    this.float = new _xfa_object.XFAObjectArray();
+    this.image = new _xfa_object.XFAObjectArray();
+    this.integer = new _xfa_object.XFAObjectArray();
+    this.text = new _xfa_object.XFAObjectArray();
+    this.time = new _xfa_object.XFAObjectArray();
+  }
+
+}
+
+class Field extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "field", true);
+    this.access = (0, _utils.getStringOption)(attributes.access, ["open", "nonInteractive", "protected", 
"readOnly"]);
+    this.accessKey = attributes.accessKey || "";
+    this.anchorType = (0, _utils.getStringOption)(attributes.anchorType, ["topLeft", "bottomCenter", 
"bottomLeft", "bottomRight", "middleCenter", "middleLeft", "middleRight", "topCenter", "topRight"]);
+    this.colSpan = (0, _utils.getInteger)({
+      data: attributes.colSpan,
+      defaultValue: 1,
+      validate: x => x >= 1
+    });
+    this.h = attributes.h ? (0, _utils.getMeasurement)(attributes.h) : "";
+    this.hAlign = (0, _utils.getStringOption)(attributes.hAlign, ["left", "center", "justify", "justifyAll", 
"radix", "right"]);
+    this.id = attributes.id || "";
+    this.locale = attributes.locale || "";
+    this.maxH = (0, _utils.getMeasurement)(attributes.maxH, "0pt");
+    this.maxW = (0, _utils.getMeasurement)(attributes.maxW, "0pt");
+    this.minH = (0, _utils.getMeasurement)(attributes.minH, "0pt");
+    this.minW = (0, _utils.getMeasurement)(attributes.minW, "0pt");
+    this.name = attributes.name || "";
+    this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", 
"invisible"]);
+    this.relevant = (0, _utils.getRelevant)(attributes.relevant);
+    this.rotate = (0, _utils.getInteger)({
+      data: attributes.rotate,
+      defaultValue: 0,
+      validate: x => x % 90 === 0
+    });
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.w = attributes.w ? (0, _utils.getMeasurement)(attributes.w) : "";
+    this.x = (0, _utils.getMeasurement)(attributes.x, "0pt");
+    this.y = (0, _utils.getMeasurement)(attributes.y, "0pt");
+    this.assist = null;
+    this.bind = null;
+    this.border = null;
+    this.calculate = null;
+    this.caption = null;
+    this.desc = null;
+    this.extras = null;
+    this.font = null;
+    this.format = null;
+    this.items = new _xfa_object.XFAObjectArray(2);
+    this.keep = null;
+    this.margin = null;
+    this.para = null;
+    this.traversal = null;
+    this.ui = null;
+    this.validate = null;
+    this.value = null;
+    this.bindItems = new _xfa_object.XFAObjectArray();
+    this.connect = new _xfa_object.XFAObjectArray();
+    this.event = new _xfa_object.XFAObjectArray();
+    this.setProperty = new _xfa_object.XFAObjectArray();
+  }
+
+  [_xfa_object.$setValue](value) {
+    _setValue(this, value);
+  }
+
+  [_xfa_object.$toHTML]() {
+    if (!this.ui) {
+      return null;
+    }
+
+    const style = (0, _html_utils.toStyle)(this, "font", "dimensions", "position", "rotate", "anchorType", 
"presence");
+    const borderWidths = [];
+    const marginWidths = [];
+
+    if (this.border) {
+      Object.assign(style, this.border[_xfa_object.$toStyle](borderWidths, marginWidths));
+    }
+
+    if (this.margin) {
+      style.paddingTop = (0, _html_utils.measureToString)(this.margin.topInset - borderWidths[0] - 
marginWidths[0]);
+      style.paddingRight = (0, _html_utils.measureToString)(this.margin.rightInset - borderWidths[1] - 
marginWidths[1]);
+      style.paddingBottom = (0, _html_utils.measureToString)(this.margin.bottomInset - borderWidths[2] - 
marginWidths[2]);
+      style.paddingLeft = (0, _html_utils.measureToString)(this.margin.leftInset - borderWidths[3] - 
marginWidths[3]);
+    } else {
+      style.paddingTop = (0, _html_utils.measureToString)(-borderWidths[0] - marginWidths[0]);
+      style.paddingRight = (0, _html_utils.measureToString)(-borderWidths[1] - marginWidths[1]);
+      style.paddingBottom = (0, _html_utils.measureToString)(-borderWidths[2] - marginWidths[2]);
+      style.paddingLeft = (0, _html_utils.measureToString)(-borderWidths[3] - marginWidths[3]);
+    }
+
+    const clazz = ["xfaField"];
+
+    if (this.font) {
+      clazz.push("xfaFont");
+    }
+
+    const attributes = {
+      style,
+      id: this[_xfa_object.$uid],
+      class: clazz.join(" ")
+    };
+
+    if (this.name) {
+      attributes.xfaName = this.name;
+    }
+
+    const children = [];
+    const html = {
+      name: "div",
+      attributes,
+      children
+    };
+    const ui = this.ui ? this.ui[_xfa_object.$toHTML]() : null;
+
+    if (!ui) {
+      return html;
+    }
+
+    if (!ui.attributes.style) {
+      ui.attributes.style = Object.create(null);
+    }
+
+    children.push(ui);
+
+    if (this.value && ui.name !== "button") {
+      ui.children[0].attributes.value = this.value[_xfa_object.$toHTML]();
+    }
+
+    const caption = this.caption ? this.caption[_xfa_object.$toHTML]() : null;
+
+    if (!caption) {
+      return html;
+    }
+
+    if (ui.name === "button") {
+      ui.attributes.style.background = style.color;
+      delete style.color;
+
+      if (caption.name === "div") {
+        caption.name = "span";
+      }
+
+      ui.children = [caption];
+      return html;
+    }
+
+    ui.children.splice(0, 0, caption);
+
+    switch (this.caption.placement) {
+      case "left":
+        ui.attributes.style.flexDirection = "row";
+        break;
+
+      case "right":
+        ui.attributes.style.flexDirection = "row-reverse";
+        break;
+
+      case "top":
+        ui.attributes.style.flexDirection = "column";
+        break;
+
+      case "bottom":
+        ui.attributes.style.flexDirection = "column-reverse";
+        break;
+
+      case "inline":
+        delete ui.attributes.class;
+        caption.attributes.style.float = "left";
+        break;
+    }
+
+    return html;
+  }
+
+}
+
+exports.Field = Field;
+
+class Fill extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "fill", true);
+    this.id = attributes.id || "";
+    this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", 
"invisible"]);
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.color = null;
+    this.extras = null;
+    this.linear = null;
+    this.pattern = null;
+    this.radial = null;
+    this.solid = null;
+    this.stipple = null;
+  }
+
+  [_xfa_object.$toStyle]() {
+    for (const name of Object.getOwnPropertyNames(this)) {
+      if (name === "extras" || name === "color") {
+        continue;
+      }
+
+      const obj = this[name];
+
+      if (!(obj instanceof _xfa_object.XFAObject)) {
+        continue;
+      }
+
+      return {
+        color: obj[_xfa_object.$toStyle](this.color)
+      };
+    }
+
+    return {
+      color: this.color ? this.color[_xfa_object.$toStyle]() : "#000000"
+    };
+  }
+
+}
+
+class Filter extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "filter", true);
+    this.addRevocationInfo = (0, _utils.getStringOption)(attributes.addRevocationInfo, ["", "required", 
"optional", "none"]);
+    this.id = attributes.id || "";
+    this.name = attributes.name || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.version = (0, _utils.getInteger)({
+      data: this.version,
+      defaultValue: 5,
+      validate: x => x >= 1 && x <= 5
+    });
+    this.appearanceFilter = null;
+    this.certificates = null;
+    this.digestMethods = null;
+    this.encodings = null;
+    this.encryptionMethods = null;
+    this.handler = null;
+    this.lockDocument = null;
+    this.mdp = null;
+    this.reasons = null;
+    this.timeStamp = null;
+  }
+
+}
+
+class Float extends _xfa_object.ContentObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "float");
+    this.id = attributes.id || "";
+    this.name = attributes.name || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+  }
+
+  [_xfa_object.$finalize]() {
+    const number = parseFloat(this[_xfa_object.$content].trim());
+    this[_xfa_object.$content] = isNaN(number) ? null : number;
+  }
+
+  [_xfa_object.$toHTML]() {
+    return this[_xfa_object.$content] !== null ? this[_xfa_object.$content].toString() : "";
+  }
+
+}
+
+class Font extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "font", true);
+    this.baselineShift = (0, _utils.getMeasurement)(attributes.baselineShift);
+    this.fontHorizontalScale = (0, _utils.getFloat)({
+      data: attributes.fontHorizontalScale,
+      defaultValue: 100,
+      validate: x => x >= 0
+    });
+    this.fontVerticalScale = (0, _utils.getFloat)({
+      data: attributes.fontVerticalScale,
+      defaultValue: 100,
+      validate: x => x >= 0
+    });
+    this.id = attributes.id || "";
+    this.kerningMode = (0, _utils.getStringOption)(attributes.kerningMode, ["none", "pair"]);
+    this.letterSpacing = (0, _utils.getMeasurement)(attributes.letterSpacing, "0");
+    this.lineThrough = (0, _utils.getInteger)({
+      data: attributes.lineThrough,
+      defaultValue: 0,
+      validate: x => x === 1 || x === 2
+    });
+    this.lineThroughPeriod = (0, _utils.getStringOption)(attributes.lineThroughPeriod, ["all", "word"]);
+    this.overline = (0, _utils.getInteger)({
+      data: attributes.overline,
+      defaultValue: 0,
+      validate: x => x === 1 || x === 2
+    });
+    this.overlinePeriod = (0, _utils.getStringOption)(attributes.overlinePeriod, ["all", "word"]);
+    this.posture = (0, _utils.getStringOption)(attributes.posture, ["normal", "italic"]);
+    this.size = (0, _utils.getMeasurement)(attributes.size, "10pt");
+    this.typeface = attributes.typeface || "";
+    this.underline = (0, _utils.getInteger)({
+      data: attributes.underline,
+      defaultValue: 0,
+      validate: x => x === 1 || x === 2
+    });
+    this.underlinePeriod = (0, _utils.getStringOption)(attributes.underlinePeriod, ["all", "word"]);
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.weight = (0, _utils.getStringOption)(attributes.weight, ["normal", "bold"]);
+    this.extras = null;
+    this.fill = null;
+  }
+
+  [_xfa_object.$toStyle]() {
+    const style = (0, _html_utils.toStyle)(this, "fill");
+
+    if (style.color) {
+      if (!style.color.startsWith("#")) {
+        style.backgroundClip = "text";
+        style.background = style.color;
+        style.color = "transparent";
+      } else if (style.color === "#000000") {
+        delete style.color;
+      }
+    }
+
+    if (this.baselineShift) {
+      style.verticalAlign = (0, _html_utils.measureToString)(this.baselineShift);
+    }
+
+    if (this.kerningMode !== "none") {
+      style.fontKerning = "normal";
+    }
+
+    if (this.letterSpacing) {
+      style.letterSpacing = (0, _html_utils.measureToString)(this.letterSpacing);
+    }
+
+    if (this.lineThrough !== 0) {
+      style.textDecoration = "line-through";
+
+      if (this.lineThrough === 2) {
+        style.textDecorationStyle = "double";
+      }
+    }
+
+    if (this.overline !== 0) {
+      style.textDecoration = "overline";
+
+      if (this.overline === 2) {
+        style.textDecorationStyle = "double";
+      }
+    }
+
+    if (this.posture !== "normal") {
+      style.fontStyle = this.posture;
+    }
+
+    const fontSize = (0, _html_utils.measureToString)(this.size);
+
+    if (fontSize !== "10px") {
+      style.fontSize = fontSize;
+    }
+
+    style.fontFamily = this.typeface;
+
+    if (this.underline !== 0) {
+      style.textDecoration = "underline";
+
+      if (this.underline === 2) {
+        style.textDecorationStyle = "double";
+      }
+    }
+
+    if (this.weight !== "normal") {
+      style.fontWeight = this.weight;
+    }
+
+    return style;
+  }
+
+}
+
+class Format extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "format", true);
+    this.id = attributes.id || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.extras = null;
+    this.picture = null;
+  }
+
+}
+
+class Handler extends _xfa_object.StringObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "handler");
+    this.id = attributes.id || "";
+    this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]);
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+  }
+
+}
+
+class Hyphenation extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "hyphenation");
+    this.excludeAllCaps = (0, _utils.getInteger)({
+      data: attributes.excludeAllCaps,
+      defaultValue: 0,
+      validate: x => x === 1
+    });
+    this.excludeInitialCap = (0, _utils.getInteger)({
+      data: attributes.excludeInitialCap,
+      defaultValue: 0,
+      validate: x => x === 1
+    });
+    this.hyphenate = (0, _utils.getInteger)({
+      data: attributes.hyphenate,
+      defaultValue: 0,
+      validate: x => x === 1
+    });
+    this.id = attributes.id || "";
+    this.pushCharacterCount = (0, _utils.getInteger)({
+      data: attributes.pushCharacterCount,
+      defaultValue: 3,
+      validate: x => x >= 0
+    });
+    this.remainCharacterCount = (0, _utils.getInteger)({
+      data: attributes.remainCharacterCount,
+      defaultValue: 3,
+      validate: x => x >= 0
+    });
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.wordCharacterCount = (0, _utils.getInteger)({
+      data: attributes.wordCharacterCount,
+      defaultValue: 7,
+      validate: x => x >= 0
+    });
+  }
+
+}
+
+class Image extends _xfa_object.StringObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "image");
+    this.aspect = (0, _utils.getStringOption)(attributes.aspect, ["fit", "actual", "height", "none", 
"width"]);
+    this.contentType = attributes.contentType || "";
+    this.href = attributes.href || "";
+    this.id = attributes.id || "";
+    this.name = attributes.name || "";
+    this.transferEncoding = (0, _utils.getStringOption)(attributes.transferEncoding, ["base64", "none", 
"package"]);
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+  }
+
+  [_xfa_object.$toHTML]() {
+    const html = {
+      name: "img",
+      attributes: {
+        style: {}
+      }
+    };
+
+    if (this.href) {
+      html.attributes.src = new URL(this.href);
+      return html;
+    }
+
+    if (this.transferEncoding === "base64") {
+      const buffer = Uint8Array.from(atob(this[_xfa_object.$content]), c => c.charCodeAt(0));
+      const blob = new Blob([buffer], {
+        type: this.contentType
+      });
+      html.attributes.src = URL.createObjectURL(blob);
+      return html;
+    }
+
+    return null;
+  }
+
+}
+
+class ImageEdit extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "imageEdit", true);
+    this.data = (0, _utils.getStringOption)(attributes.data, ["link", "embed"]);
+    this.id = attributes.id || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.border = null;
+    this.extras = null;
+    this.margin = null;
+  }
+
+}
+
+class Integer extends _xfa_object.ContentObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "integer");
+    this.id = attributes.id || "";
+    this.name = attributes.name || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+  }
+
+  [_xfa_object.$finalize]() {
+    const number = parseInt(this[_xfa_object.$content].trim(), 10);
+    this[_xfa_object.$content] = isNaN(number) ? null : number;
+  }
+
+  [_xfa_object.$toHTML]() {
+    return this[_xfa_object.$content] !== null ? this[_xfa_object.$content].toString() : "";
+  }
+
+}
+
+class Issuers extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "issuers", true);
+    this.id = attributes.id || "";
+    this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]);
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.certificate = new _xfa_object.XFAObjectArray();
+  }
+
+}
+
+class Items extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "items", true);
+    this.id = attributes.id || "";
+    this.name = attributes.name || "";
+    this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", 
"invisible"]);
+    this.ref = attributes.ref || "";
+    this.save = (0, _utils.getInteger)({
+      data: attributes.save,
+      defaultValue: 0,
+      validate: x => x === 1
+    });
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.boolean = new _xfa_object.XFAObjectArray();
+    this.date = new _xfa_object.XFAObjectArray();
+    this.dateTime = new _xfa_object.XFAObjectArray();
+    this.decimal = new _xfa_object.XFAObjectArray();
+    this.exData = new _xfa_object.XFAObjectArray();
+    this.float = new _xfa_object.XFAObjectArray();
+    this.image = new _xfa_object.XFAObjectArray();
+    this.integer = new _xfa_object.XFAObjectArray();
+    this.text = new _xfa_object.XFAObjectArray();
+    this.time = new _xfa_object.XFAObjectArray();
+  }
+
+  [_xfa_object.$hasItem](value) {
+    return this.hasOwnProperty(value[_xfa_object.$nodeName]) && 
this[value[_xfa_object.$nodeName]].children.some(node => node[_xfa_object.$content] === 
value[_xfa_object.$content]);
+  }
+
+}
+
+exports.Items = Items;
+
+class Keep extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "keep", true);
+    this.id = attributes.id || "";
+    const options = ["none", "contentArea", "pageArea"];
+    this.intact = (0, _utils.getStringOption)(attributes.intact, options);
+    this.next = (0, _utils.getStringOption)(attributes.next, options);
+    this.previous = (0, _utils.getStringOption)(attributes.previous, options);
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.extras = null;
+  }
+
+}
+
+class KeyUsage extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "keyUsage");
+    const options = ["", "yes", "no"];
+    this.crlSign = (0, _utils.getStringOption)(attributes.crlSign, options);
+    this.dataEncipherment = (0, _utils.getStringOption)(attributes.dataEncipherment, options);
+    this.decipherOnly = (0, _utils.getStringOption)(attributes.decipherOnly, options);
+    this.digitalSignature = (0, _utils.getStringOption)(attributes.digitalSignature, options);
+    this.encipherOnly = (0, _utils.getStringOption)(attributes.encipherOnly, options);
+    this.id = attributes.id || "";
+    this.keyAgreement = (0, _utils.getStringOption)(attributes.keyAgreement, options);
+    this.keyCertSign = (0, _utils.getStringOption)(attributes.keyCertSign, options);
+    this.keyEncipherment = (0, _utils.getStringOption)(attributes.keyEncipherment, options);
+    this.nonRepudiation = (0, _utils.getStringOption)(attributes.nonRepudiation, options);
+    this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]);
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+  }
+
+}
+
+class Line extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "line", true);
+    this.hand = (0, _utils.getStringOption)(attributes.hand, ["even", "left", "right"]);
+    this.id = attributes.id || "";
+    this.slope = (0, _utils.getStringOption)(attributes.slope, ["\\", "/"]);
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.edge = null;
+  }
+
+}
+
+class Linear extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "linear", true);
+    this.id = attributes.id || "";
+    this.type = (0, _utils.getStringOption)(attributes.type, ["toRight", "toBottom", "toLeft", "toTop"]);
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.color = null;
+    this.extras = null;
+  }
+
+  [_xfa_object.$toStyle](startColor) {
+    startColor = startColor ? startColor[_xfa_object.$toStyle]() : "#FFFFFF";
+    const transf = this.type.replace(/([RBLT])/, " $1").toLowerCase();
+    const endColor = this.color ? this.color[_xfa_object.$toStyle]() : "#000000";
+    return `linear-gradient(${transf}, ${startColor}, ${endColor})`;
+  }
+
+}
+
+class LockDocument extends _xfa_object.ContentObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "lockDocument");
+    this.id = attributes.id || "";
+    this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]);
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+  }
+
+  [_xfa_object.$finalize]() {
+    this[_xfa_object.$content] = (0, _utils.getStringOption)(this[_xfa_object.$content], ["auto", "0", "1"]);
+  }
+
+}
+
+class Manifest extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "manifest", true);
+    this.action = (0, _utils.getStringOption)(attributes.action, ["include", "all", "exclude"]);
+    this.id = attributes.id || "";
+    this.name = attributes.name || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.extras = null;
+    this.ref = new _xfa_object.XFAObjectArray();
+  }
+
+}
+
+class Margin extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "margin", true);
+    this.bottomInset = (0, _utils.getMeasurement)(attributes.bottomInset, "0");
+    this.id = attributes.id || "";
+    this.leftInset = (0, _utils.getMeasurement)(attributes.leftInset, "0");
+    this.rightInset = (0, _utils.getMeasurement)(attributes.rightInset, "0");
+    this.topInset = (0, _utils.getMeasurement)(attributes.topInset, "0");
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.extras = null;
+  }
+
+  [_xfa_object.$toStyle]() {
+    return {
+      marginLeft: (0, _html_utils.measureToString)(this.leftInset),
+      marginRight: (0, _html_utils.measureToString)(this.rightInset),
+      marginTop: (0, _html_utils.measureToString)(this.topInset),
+      marginBottom: (0, _html_utils.measureToString)(this.bottomInset)
+    };
+  }
+
+}
+
+class Mdp extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "mdp");
+    this.id = attributes.id || "";
+    this.permissions = (0, _utils.getInteger)({
+      data: attributes.permissions,
+      defaultValue: 2,
+      validate: x => x === 1 || x === 3
+    });
+    this.signatureType = (0, _utils.getStringOption)(attributes.signatureType, ["filler", "author"]);
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+  }
+
+}
+
+class Medium extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "medium");
+    this.id = attributes.id || "";
+    this.imagingBBox = (0, _utils.getBBox)(attributes.imagingBBox);
+    this.long = (0, _utils.getMeasurement)(attributes.long);
+    this.orientation = (0, _utils.getStringOption)(attributes.orientation, ["portrait", "landscape"]);
+    this.short = (0, _utils.getMeasurement)(attributes.short);
+    this.stock = attributes.stock || "";
+    this.trayIn = (0, _utils.getStringOption)(attributes.trayIn, ["auto", "delegate", "pageFront"]);
+    this.trayOut = (0, _utils.getStringOption)(attributes.trayOut, ["auto", "delegate"]);
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+  }
+
+}
+
+class Message extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "message", true);
+    this.id = attributes.id || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.text = new _xfa_object.XFAObjectArray();
+  }
+
+}
+
+class NumericEdit extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "numericEdit", true);
+    this.hScrollPolicy = (0, _utils.getStringOption)(attributes.hScrollPolicy, ["auto", "off", "on"]);
+    this.id = attributes.id || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.border = null;
+    this.comb = null;
+    this.extras = null;
+    this.margin = null;
+  }
+
+  [_xfa_object.$toHTML]() {
+    const style = (0, _html_utils.toStyle)(this, "border", "font", "margin");
+    const html = {
+      name: "input",
+      attributes: {
+        type: "text",
+        class: "xfaTextfield",
+        style
+      }
+    };
+    return {
+      name: "label",
+      attributes: {
+        class: "xfaLabel"
+      },
+      children: [html]
+    };
+  }
+
+}
+
+class Occur extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "occur", true);
+    this.id = attributes.id || "";
+    this.initial = (0, _utils.getInteger)({
+      data: attributes.initial,
+      defaultValue: 1,
+      validate: x => true
+    });
+    this.max = (0, _utils.getInteger)({
+      data: attributes.max,
+      defaultValue: 1,
+      validate: x => true
+    });
+    this.min = (0, _utils.getInteger)({
+      data: attributes.min,
+      defaultValue: 1,
+      validate: x => true
+    });
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.extras = null;
+  }
+
+}
+
+class Oid extends _xfa_object.StringObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "oid");
+    this.id = attributes.id || "";
+    this.name = attributes.name || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+  }
+
+}
+
+class Oids extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "oids", true);
+    this.id = attributes.id || "";
+    this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]);
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.oid = new _xfa_object.XFAObjectArray();
+  }
+
+}
+
+class Overflow extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "overflow");
+    this.id = attributes.id || "";
+    this.leader = attributes.leader || "";
+    this.target = attributes.target || "";
+    this.trailer = attributes.trailer || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+  }
+
+}
+
+class PageArea extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "pageArea", true);
+    this.blankOrNotBlank = (0, _utils.getStringOption)(attributes.blankOrNotBlank, ["any", "blank", 
"notBlank"]);
+    this.id = attributes.id || "";
+    this.initialNumber = (0, _utils.getInteger)({
+      data: attributes.initialNumber,
+      defaultValue: 1,
+      validate: x => true
+    });
+    this.name = attributes.name || "";
+    this.numbered = (0, _utils.getInteger)({
+      data: attributes.numbered,
+      defaultValue: 1,
+      validate: x => true
+    });
+    this.oddOrEven = (0, _utils.getStringOption)(attributes.oddOrEven, ["any", "even", "odd"]);
+    this.pagePosition = (0, _utils.getStringOption)(attributes.pagePosition, ["any", "first", "last", 
"only", "rest"]);
+    this.relevant = (0, _utils.getRelevant)(attributes.relevant);
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.desc = null;
+    this.extras = null;
+    this.medium = null;
+    this.occur = null;
+    this.area = new _xfa_object.XFAObjectArray();
+    this.contentArea = new _xfa_object.XFAObjectArray();
+    this.draw = new _xfa_object.XFAObjectArray();
+    this.exclGroup = new _xfa_object.XFAObjectArray();
+    this.field = new _xfa_object.XFAObjectArray();
+    this.subform = new _xfa_object.XFAObjectArray();
+  }
+
+  [_xfa_object.$toHTML]() {
+    if (this.contentArea.children.length === 0) {
+      return null;
+    }
+
+    const children = this[_xfa_object.$childrenToHTML]({
+      filter: new Set(["area", "draw", "field", "subform", "contentArea"]),
+      include: true
+    });
+
+    const contentArea = children.find(node => node.attributes.class === "xfaContentarea");
+    const style = Object.create(null);
+
+    if (this.medium && this.medium.short && this.medium.long) {
+      style.width = (0, _html_utils.measureToString)(this.medium.short);
+      style.height = (0, _html_utils.measureToString)(this.medium.long);
+    } else {}
+
+    return {
+      name: "div",
+      children,
+      attributes: {
+        id: this[_xfa_object.$uid],
+        style
+      },
+      contentArea
+    };
+  }
+
+}
+
+class PageSet extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "pageSet", true);
+    this.duplexImposition = (0, _utils.getStringOption)(attributes.duplexImposition, ["longEdge", 
"shortEdge"]);
+    this.id = attributes.id || "";
+    this.name = attributes.name || "";
+    this.relation = (0, _utils.getStringOption)(attributes.relation, ["orderedOccurrence", 
"duplexPaginated", "simplexPaginated"]);
+    this.relevant = (0, _utils.getRelevant)(attributes.relevant);
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.extras = null;
+    this.occur = null;
+    this.pageArea = new _xfa_object.XFAObjectArray();
+    this.pageSet = new _xfa_object.XFAObjectArray();
+  }
+
+  [_xfa_object.$toHTML]() {
+    return {
+      name: "div",
+      children: this[_xfa_object.$childrenToHTML]({
+        filter: new Set(["pageArea", "pageSet"]),
+        include: true
+      }),
+      attributes: {
+        id: this[_xfa_object.$uid]
+      }
+    };
+  }
+
+}
+
+class Para extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "para", true);
+    this.hAlign = (0, _utils.getStringOption)(attributes.hAlign, ["left", "center", "justify", "justifyAll", 
"radix", "right"]);
+    this.id = attributes.id || "";
+    this.lineHeight = (0, _utils.getMeasurement)(attributes.lineHeight, "0pt");
+    this.marginLeft = (0, _utils.getMeasurement)(attributes.marginLeft, "0");
+    this.marginRight = (0, _utils.getMeasurement)(attributes.marginRight, "0");
+    this.orphans = (0, _utils.getInteger)({
+      data: attributes.orphans,
+      defaultValue: 0,
+      validate: x => x >= 0
+    });
+    this.preserve = attributes.preserve || "";
+    this.radixOffset = (0, _utils.getMeasurement)(attributes.radixOffset, "0");
+    this.spaceAbove = (0, _utils.getMeasurement)(attributes.spaceAbove, "0");
+    this.spaceBelow = (0, _utils.getMeasurement)(attributes.spaceBelow, "0");
+    this.tabDefault = attributes.tabDefault ? (0, _utils.getMeasurement)(this.tabDefault) : null;
+    this.tabStops = (attributes.tabStops || "").trim().split(/\s+/).map((x, i) => i % 2 === 1 ? (0, 
_utils.getMeasurement)(x) : x);
+    this.textIndent = (0, _utils.getMeasurement)(attributes.textIndent, "0");
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.vAlign = (0, _utils.getStringOption)(attributes.vAlign, ["top", "bottom", "middle"]);
+    this.widows = (0, _utils.getInteger)({
+      data: attributes.widows,
+      defaultValue: 0,
+      validate: x => x >= 0
+    });
+    this.hyphenation = null;
+  }
+
+  [_xfa_object.$toHTML]() {
+    const style = {
+      marginLeft: (0, _html_utils.measureToString)(this.marginLeft),
+      marginRight: (0, _html_utils.measureToString)(this.marginRight),
+      paddingTop: (0, _html_utils.measureToString)(this.spaceAbove),
+      paddingBottom: (0, _html_utils.measureToString)(this.spaceBelow),
+      textIndent: (0, _html_utils.measureToString)(this.textIndent),
+      verticalAlign: this.vAlign
+    };
+
+    if (this.lineHeight.value >= 0) {
+      style.lineHeight = (0, _html_utils.measureToString)(this.lineHeight);
+    }
+
+    if (this.tabDefault) {
+      style.tabSize = (0, _html_utils.measureToString)(this.tabDefault);
+    }
+
+    if (this.tabStops.length > 0) {}
+
+    if (this.hyphenatation) {
+      Object.assign(style, this.hyphenatation[_xfa_object.$toHTML]());
+    }
+
+    return style;
+  }
+
+}
+
+class PasswordEdit extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "passwordEdit", true);
+    this.hScrollPolicy = (0, _utils.getStringOption)(attributes.hScrollPolicy, ["auto", "off", "on"]);
+    this.id = attributes.id || "";
+    this.passwordChar = attributes.passwordChar || "*";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.border = null;
+    this.extras = null;
+    this.margin = null;
+  }
+
+}
+
+class Pattern extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "pattern", true);
+    this.id = attributes.id || "";
+    this.type = (0, _utils.getStringOption)(attributes.type, ["crossHatch", "crossDiagonal", "diagonalLeft", 
"diagonalRight", "horizontal", "vertical"]);
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.color = null;
+    this.extras = null;
+  }
+
+  [_xfa_object.$toStyle](startColor) {
+    startColor = startColor ? startColor[_xfa_object.$toStyle]() : "#FFFFFF";
+    const endColor = this.color ? this.color[_xfa_object.$toStyle]() : "#000000";
+    const width = 5;
+    const cmd = "repeating-linear-gradient";
+    const colors = `${startColor},${startColor} ${width}px,${endColor} ${width}px,${endColor} ${2 * 
width}px`;
+
+    switch (this.type) {
+      case "crossHatch":
+        return `${cmd}(to top,${colors}) ${cmd}(to right,${colors})`;
+
+      case "crossDiagonal":
+        return `${cmd}(45deg,${colors}) ${cmd}(-45deg,${colors})`;
+
+      case "diagonalLeft":
+        return `${cmd}(45deg,${colors})`;
+
+      case "diagonalRight":
+        return `${cmd}(-45deg,${colors})`;
+
+      case "horizontal":
+        return `${cmd}(to top,${colors})`;
+
+      case "vertical":
+        return `${cmd}(to right,${colors})`;
+    }
+
+    return "";
+  }
+
+}
+
+class Picture extends _xfa_object.StringObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "picture");
+    this.id = attributes.id || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+  }
+
+}
+
+class Proto extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "proto", true);
+    this.appearanceFilter = new _xfa_object.XFAObjectArray();
+    this.arc = new _xfa_object.XFAObjectArray();
+    this.area = new _xfa_object.XFAObjectArray();
+    this.assist = new _xfa_object.XFAObjectArray();
+    this.barcode = new _xfa_object.XFAObjectArray();
+    this.bindItems = new _xfa_object.XFAObjectArray();
+    this.bookend = new _xfa_object.XFAObjectArray();
+    this.boolean = new _xfa_object.XFAObjectArray();
+    this.border = new _xfa_object.XFAObjectArray();
+    this.break = new _xfa_object.XFAObjectArray();
+    this.breakAfter = new _xfa_object.XFAObjectArray();
+    this.breakBefore = new _xfa_object.XFAObjectArray();
+    this.button = new _xfa_object.XFAObjectArray();
+    this.calculate = new _xfa_object.XFAObjectArray();
+    this.caption = new _xfa_object.XFAObjectArray();
+    this.certificate = new _xfa_object.XFAObjectArray();
+    this.certificates = new _xfa_object.XFAObjectArray();
+    this.checkButton = new _xfa_object.XFAObjectArray();
+    this.choiceList = new _xfa_object.XFAObjectArray();
+    this.color = new _xfa_object.XFAObjectArray();
+    this.comb = new _xfa_object.XFAObjectArray();
+    this.connect = new _xfa_object.XFAObjectArray();
+    this.contentArea = new _xfa_object.XFAObjectArray();
+    this.corner = new _xfa_object.XFAObjectArray();
+    this.date = new _xfa_object.XFAObjectArray();
+    this.dateTime = new _xfa_object.XFAObjectArray();
+    this.dateTimeEdit = new _xfa_object.XFAObjectArray();
+    this.decimal = new _xfa_object.XFAObjectArray();
+    this.defaultUi = new _xfa_object.XFAObjectArray();
+    this.desc = new _xfa_object.XFAObjectArray();
+    this.digestMethod = new _xfa_object.XFAObjectArray();
+    this.digestMethods = new _xfa_object.XFAObjectArray();
+    this.draw = new _xfa_object.XFAObjectArray();
+    this.edge = new _xfa_object.XFAObjectArray();
+    this.encoding = new _xfa_object.XFAObjectArray();
+    this.encodings = new _xfa_object.XFAObjectArray();
+    this.encrypt = new _xfa_object.XFAObjectArray();
+    this.encryptData = new _xfa_object.XFAObjectArray();
+    this.encryption = new _xfa_object.XFAObjectArray();
+    this.encryptionMethod = new _xfa_object.XFAObjectArray();
+    this.encryptionMethods = new _xfa_object.XFAObjectArray();
+    this.event = new _xfa_object.XFAObjectArray();
+    this.exData = new _xfa_object.XFAObjectArray();
+    this.exObject = new _xfa_object.XFAObjectArray();
+    this.exclGroup = new _xfa_object.XFAObjectArray();
+    this.execute = new _xfa_object.XFAObjectArray();
+    this.extras = new _xfa_object.XFAObjectArray();
+    this.field = new _xfa_object.XFAObjectArray();
+    this.fill = new _xfa_object.XFAObjectArray();
+    this.filter = new _xfa_object.XFAObjectArray();
+    this.float = new _xfa_object.XFAObjectArray();
+    this.font = new _xfa_object.XFAObjectArray();
+    this.format = new _xfa_object.XFAObjectArray();
+    this.handler = new _xfa_object.XFAObjectArray();
+    this.hyphenation = new _xfa_object.XFAObjectArray();
+    this.image = new _xfa_object.XFAObjectArray();
+    this.imageEdit = new _xfa_object.XFAObjectArray();
+    this.integer = new _xfa_object.XFAObjectArray();
+    this.issuers = new _xfa_object.XFAObjectArray();
+    this.items = new _xfa_object.XFAObjectArray();
+    this.keep = new _xfa_object.XFAObjectArray();
+    this.keyUsage = new _xfa_object.XFAObjectArray();
+    this.line = new _xfa_object.XFAObjectArray();
+    this.linear = new _xfa_object.XFAObjectArray();
+    this.lockDocument = new _xfa_object.XFAObjectArray();
+    this.manifest = new _xfa_object.XFAObjectArray();
+    this.margin = new _xfa_object.XFAObjectArray();
+    this.mdp = new _xfa_object.XFAObjectArray();
+    this.medium = new _xfa_object.XFAObjectArray();
+    this.message = new _xfa_object.XFAObjectArray();
+    this.numericEdit = new _xfa_object.XFAObjectArray();
+    this.occur = new _xfa_object.XFAObjectArray();
+    this.oid = new _xfa_object.XFAObjectArray();
+    this.oids = new _xfa_object.XFAObjectArray();
+    this.overflow = new _xfa_object.XFAObjectArray();
+    this.pageArea = new _xfa_object.XFAObjectArray();
+    this.pageSet = new _xfa_object.XFAObjectArray();
+    this.para = new _xfa_object.XFAObjectArray();
+    this.passwordEdit = new _xfa_object.XFAObjectArray();
+    this.pattern = new _xfa_object.XFAObjectArray();
+    this.picture = new _xfa_object.XFAObjectArray();
+    this.radial = new _xfa_object.XFAObjectArray();
+    this.reason = new _xfa_object.XFAObjectArray();
+    this.reasons = new _xfa_object.XFAObjectArray();
+    this.rectangle = new _xfa_object.XFAObjectArray();
+    this.ref = new _xfa_object.XFAObjectArray();
+    this.script = new _xfa_object.XFAObjectArray();
+    this.setProperty = new _xfa_object.XFAObjectArray();
+    this.signData = new _xfa_object.XFAObjectArray();
+    this.signature = new _xfa_object.XFAObjectArray();
+    this.signing = new _xfa_object.XFAObjectArray();
+    this.solid = new _xfa_object.XFAObjectArray();
+    this.speak = new _xfa_object.XFAObjectArray();
+    this.stipple = new _xfa_object.XFAObjectArray();
+    this.subform = new _xfa_object.XFAObjectArray();
+    this.subformSet = new _xfa_object.XFAObjectArray();
+    this.subjectDN = new _xfa_object.XFAObjectArray();
+    this.subjectDNs = new _xfa_object.XFAObjectArray();
+    this.submit = new _xfa_object.XFAObjectArray();
+    this.text = new _xfa_object.XFAObjectArray();
+    this.textEdit = new _xfa_object.XFAObjectArray();
+    this.time = new _xfa_object.XFAObjectArray();
+    this.timeStamp = new _xfa_object.XFAObjectArray();
+    this.toolTip = new _xfa_object.XFAObjectArray();
+    this.traversal = new _xfa_object.XFAObjectArray();
+    this.traverse = new _xfa_object.XFAObjectArray();
+    this.ui = new _xfa_object.XFAObjectArray();
+    this.validate = new _xfa_object.XFAObjectArray();
+    this.value = new _xfa_object.XFAObjectArray();
+    this.variables = new _xfa_object.XFAObjectArray();
+  }
+
+}
+
+class Radial extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "radial", true);
+    this.id = attributes.id || "";
+    this.type = (0, _utils.getStringOption)(attributes.type, ["toEdge", "toCenter"]);
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.color = null;
+    this.extras = null;
+  }
+
+  [_xfa_object.$toStyle](startColor) {
+    startColor = startColor ? startColor[_xfa_object.$toStyle]() : "#FFFFFF";
+    const endColor = this.color ? this.color[_xfa_object.$toStyle]() : "#000000";
+    const colors = this.type === "toEdge" ? `${startColor},${endColor}` : `${endColor},${startColor}`;
+    return `radial-gradient(circle to center, ${colors})`;
+  }
+
+}
+
+class Reason extends _xfa_object.StringObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "reason");
+    this.id = attributes.id || "";
+    this.name = attributes.name || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+  }
+
+}
+
+class Reasons extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "reasons", true);
+    this.id = attributes.id || "";
+    this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]);
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.reason = new _xfa_object.XFAObjectArray();
+  }
+
+}
+
+class Rectangle extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "rectangle", true);
+    this.hand = (0, _utils.getStringOption)(attributes.hand, ["even", "left", "right"]);
+    this.id = attributes.id || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.corner = new _xfa_object.XFAObjectArray(4);
+    this.edge = new _xfa_object.XFAObjectArray(4);
+    this.fill = null;
+  }
+
+}
+
+class RefElement extends _xfa_object.StringObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "ref");
+    this.id = attributes.id || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+  }
+
+}
+
+class Script extends _xfa_object.StringObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "script");
+    this.binding = attributes.binding || "";
+    this.contentType = attributes.contentType || "";
+    this.id = attributes.id || "";
+    this.name = attributes.name || "";
+    this.runAt = (0, _utils.getStringOption)(attributes.runAt, ["client", "both", "server"]);
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+  }
+
+}
+
+class SetProperty extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "setProperty");
+    this.connection = attributes.connection || "";
+    this.ref = attributes.ref || "";
+    this.target = attributes.target || "";
+  }
+
+}
+
+exports.SetProperty = SetProperty;
+
+class SignData extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "signData", true);
+    this.id = attributes.id || "";
+    this.operation = (0, _utils.getStringOption)(attributes.operation, ["sign", "clear", "verify"]);
+    this.ref = attributes.ref || "";
+    this.target = attributes.target || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.filter = null;
+    this.manifest = null;
+  }
+
+}
+
+class Signature extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "signature", true);
+    this.id = attributes.id || "";
+    this.type = (0, _utils.getStringOption)(attributes.type, ["PDF1.3", "PDF1.6"]);
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.border = null;
+    this.extras = null;
+    this.filter = null;
+    this.manifest = null;
+    this.margin = null;
+  }
+
+}
+
+class Signing extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "signing", true);
+    this.id = attributes.id || "";
+    this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]);
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.certificate = new _xfa_object.XFAObjectArray();
+  }
+
+}
+
+class Solid extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "solid", true);
+    this.id = attributes.id || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.extras = null;
+  }
+
+  [_xfa_object.$toStyle](startColor) {
+    return startColor ? startColor[_xfa_object.$toStyle]() : "#FFFFFF";
+  }
+
+}
+
+class Speak extends _xfa_object.StringObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "speak");
+    this.disable = (0, _utils.getInteger)({
+      data: attributes.disable,
+      defaultValue: 0,
+      validate: x => x === 1
+    });
+    this.id = attributes.id || "";
+    this.priority = (0, _utils.getStringOption)(attributes.priority, ["custom", "caption", "name", 
"toolTip"]);
+    this.rid = attributes.rid || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+  }
+
+}
+
+class Stipple extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "stipple", true);
+    this.id = attributes.id || "";
+    this.rate = (0, _utils.getInteger)({
+      data: attributes.rate,
+      defaultValue: 50,
+      validate: x => x >= 0 && x <= 100
+    });
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.color = null;
+    this.extras = null;
+  }
+
+  [_xfa_object.$toStyle](bgColor) {
+    const alpha = this.rate / 100;
+    return _util.Util.makeHexColor(Math.round(bgColor.value.r * (1 - alpha) + this.value.r * alpha), 
Math.round(bgColor.value.g * (1 - alpha) + this.value.g * alpha), Math.round(bgColor.value.b * (1 - alpha) + 
this.value.b * alpha));
+  }
+
+}
+
+class Subform extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "subform", true);
+    this.access = (0, _utils.getStringOption)(attributes.access, ["open", "nonInteractive", "protected", 
"readOnly"]);
+    this.allowMacro = (0, _utils.getInteger)({
+      data: attributes.allowMacro,
+      defaultValue: 0,
+      validate: x => x === 1
+    });
+    this.anchorType = (0, _utils.getStringOption)(attributes.anchorType, ["topLeft", "bottomCenter", 
"bottomLeft", "bottomRight", "middleCenter", "middleLeft", "middleRight", "topCenter", "topRight"]);
+    this.colSpan = (0, _utils.getInteger)({
+      data: attributes.colSpan,
+      defaultValue: 1,
+      validate: x => x >= 1
+    });
+    this.columnWidths = (attributes.columnWidths || "").trim().split(/\s+/).map(x => x === "-1" ? -1 : (0, 
_utils.getMeasurement)(x));
+    this.h = attributes.h ? (0, _utils.getMeasurement)(attributes.h) : "";
+    this.hAlign = (0, _utils.getStringOption)(attributes.hAlign, ["left", "center", "justify", "justifyAll", 
"radix", "right"]);
+    this.id = attributes.id || "";
+    this.layout = (0, _utils.getStringOption)(attributes.layout, ["position", "lr-tb", "rl-row", "rl-tb", 
"row", "table", "tb"]);
+    this.locale = attributes.locale || "";
+    this.maxH = (0, _utils.getMeasurement)(attributes.maxH, "0pt");
+    this.maxW = (0, _utils.getMeasurement)(attributes.maxW, "0pt");
+    this.mergeMode = (0, _utils.getStringOption)(attributes.mergeMode, ["consumeData", "matchTemplate"]);
+    this.minH = (0, _utils.getMeasurement)(attributes.minH, "0pt");
+    this.minW = (0, _utils.getMeasurement)(attributes.minW, "0pt");
+    this.name = attributes.name || "";
+    this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", 
"invisible"]);
+    this.relevant = (0, _utils.getRelevant)(attributes.relevant);
+    this.restoreState = (0, _utils.getStringOption)(attributes.restoreState, ["manual", "auto"]);
+    this.scope = (0, _utils.getStringOption)(attributes.scope, ["name", "none"]);
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.w = attributes.w ? (0, _utils.getMeasurement)(attributes.w) : "";
+    this.x = (0, _utils.getMeasurement)(attributes.x, "0pt");
+    this.y = (0, _utils.getMeasurement)(attributes.y, "0pt");
+    this.assist = null;
+    this.bind = null;
+    this.bookend = null;
+    this.border = null;
+    this.break = null;
+    this.calculate = null;
+    this.desc = null;
+    this.extras = null;
+    this.keep = null;
+    this.margin = null;
+    this.occur = null;
+    this.overflow = null;
+    this.pageSet = null;
+    this.para = null;
+    this.traversal = null;
+    this.validate = null;
+    this.variables = null;
+    this.area = new _xfa_object.XFAObjectArray();
+    this.breakAfter = new _xfa_object.XFAObjectArray();
+    this.breakBefore = new _xfa_object.XFAObjectArray();
+    this.connect = new _xfa_object.XFAObjectArray();
+    this.draw = new _xfa_object.XFAObjectArray();
+    this.event = new _xfa_object.XFAObjectArray();
+    this.exObject = new _xfa_object.XFAObjectArray();
+    this.exclGroup = new _xfa_object.XFAObjectArray();
+    this.field = new _xfa_object.XFAObjectArray();
+    this.proto = new _xfa_object.XFAObjectArray();
+    this.setProperty = new _xfa_object.XFAObjectArray();
+    this.subform = new _xfa_object.XFAObjectArray();
+    this.subformSet = new _xfa_object.XFAObjectArray();
+  }
+
+  [_xfa_object.$toHTML]() {
+    this[_xfa_object.$extra] = Object.create(null);
+
+    const parent = this[_xfa_object.$getParent]();
+
+    let page = null;
+
+    if (parent[_xfa_object.$nodeName] === "template") {
+      if (this.pageSet !== null) {
+        this[_xfa_object.$extra].pageNumber = 0;
+      } else {
+        (0, _util.warn)("XFA - No pageSet in root subform");
+      }
+    } else if (parent[_xfa_object.$extra] && parent[_xfa_object.$extra].pageNumber !== undefined) {
+      const pageNumber = parent[_xfa_object.$extra].pageNumber;
+      const pageAreas = parent.pageSet.pageArea.children;
+      parent[_xfa_object.$extra].pageNumber = (parent[_xfa_object.$extra].pageNumber + 1) % pageAreas.length;
+      page = pageAreas[pageNumber][_xfa_object.$toHTML]();
+    }
+
+    const style = (0, _html_utils.toStyle)(this, "dimensions", "position", "presence");
+    const clazz = ["xfaSubform"];
+    const cl = (0, _html_utils.layoutClass)(this);
+
+    if (cl) {
+      clazz.push(cl);
+    }
+
+    const attributes = {
+      style,
+      id: this[_xfa_object.$uid],
+      class: clazz.join(" ")
+    };
+
+    if (this.name) {
+      attributes.xfaName = this.name;
+    }
+
+    const children = this[_xfa_object.$childrenToHTML]({
+      filter: new Set(["area", "draw", "field", "subform", "subformSet"]),
+      include: true
+    });
+
+    const html = {
+      name: "div",
+      attributes,
+      children
+    };
+
+    if (page) {
+      page.contentArea.children.push(html);
+      delete page.contentArea;
+      return page;
+    }
+
+    return html;
+  }
+
+}
+
+class SubformSet extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "subformSet", true);
+    this.id = attributes.id || "";
+    this.name = attributes.name || "";
+    this.relation = (0, _utils.getStringOption)(attributes.relation, ["ordered", "choice", "unordered"]);
+    this.relevant = (0, _utils.getRelevant)(attributes.relevant);
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.bookend = null;
+    this.break = null;
+    this.desc = null;
+    this.extras = null;
+    this.occur = null;
+    this.overflow = null;
+    this.breakAfter = new _xfa_object.XFAObjectArray();
+    this.breakBefore = new _xfa_object.XFAObjectArray();
+    this.subform = new _xfa_object.XFAObjectArray();
+    this.subformSet = new _xfa_object.XFAObjectArray();
+  }
+
+}
+
+class SubjectDN extends _xfa_object.ContentObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "subjectDN");
+    this.delimiter = attributes.delimiter || ",";
+    this.id = attributes.id || "";
+    this.name = attributes.name || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+  }
+
+  [_xfa_object.$finalize]() {
+    this[_xfa_object.$content] = new Map(this[_xfa_object.$content].split(this.delimiter).map(kv => {
+      kv = kv.split("=", 2);
+      kv[0] = kv[0].trim();
+      return kv;
+    }));
+  }
+
+}
+
+class SubjectDNs extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "subjectDNs", true);
+    this.id = attributes.id || "";
+    this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]);
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.subjectDN = new _xfa_object.XFAObjectArray();
+  }
+
+}
+
+class Submit extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "submit", true);
+    this.embedPDF = (0, _utils.getInteger)({
+      data: attributes.embedPDF,
+      defaultValue: 0,
+      validate: x => x === 1
+    });
+    this.format = (0, _utils.getStringOption)(attributes.format, ["xdp", "formdata", "pdf", "urlencoded", 
"xfd", "xml"]);
+    this.id = attributes.id || "";
+    this.target = attributes.target || "";
+    this.textEncoding = (0, _utils.getKeyword)({
+      data: attributes.textEncoding ? attributes.textEncoding.toLowerCase() : "",
+      defaultValue: "",
+      validate: k => ["utf-8", "big-five", "fontspecific", "gbk", "gb-18030", "gb-2312", "ksc-5601", "none", 
"shift-jis", "ucs-2", "utf-16"].includes(k) || k.match(/iso-8859-[0-9]{2}/)
+    });
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.xdpContent = attributes.xdpContent || "";
+    this.encrypt = null;
+    this.encryptData = new _xfa_object.XFAObjectArray();
+    this.signData = new _xfa_object.XFAObjectArray();
+  }
+
+}
+
+class Template extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "template", true);
+    this.baseProfile = (0, _utils.getStringOption)(attributes.baseProfile, ["full", "interactiveForms"]);
+    this.extras = null;
+    this.subform = new _xfa_object.XFAObjectArray();
+  }
+
+  [_xfa_object.$finalize]() {
+    if (this.subform.children.length === 0) {
+      (0, _util.warn)("XFA - No subforms in template node.");
+    }
+
+    if (this.subform.children.length >= 2) {
+      (0, _util.warn)("XFA - Several subforms in template node: please file a bug.");
+    }
+  }
+
+  [_xfa_object.$toHTML]() {
+    if (this.subform.children.length > 0) {
+      return this.subform.children[0][_xfa_object.$toHTML]();
+    }
+
+    return {
+      name: "div",
+      children: []
+    };
+  }
+
+}
+
+exports.Template = Template;
+
+class Text extends _xfa_object.ContentObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "text");
+    this.id = attributes.id || "";
+    this.maxChars = (0, _utils.getInteger)({
+      data: attributes.maxChars,
+      defaultValue: 0,
+      validate: x => x >= 0
+    });
+    this.name = attributes.name || "";
+    this.rid = attributes.rid || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+  }
+
+  [_xfa_object.$onChild](child) {
+    if (child[_xfa_object.$namespaceId] === _namespaces.NamespaceIds.xhtml.id) {
+      this[_xfa_object.$content] = child;
+      return true;
+    }
+
+    (0, _util.warn)(`XFA - Invalid content in Text: ${child[_xfa_object.$nodeName]}.`);
+    return false;
+  }
+
+  [_xfa_object.$toHTML]() {
+    if (typeof this[_xfa_object.$content] === "string") {
+      return this[_xfa_object.$content];
+    }
+
+    return this[_xfa_object.$content][_xfa_object.$toHTML]();
+  }
+
+}
+
+exports.Text = Text;
+
+class TextEdit extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "textEdit", true);
+    this.allowRichText = (0, _utils.getInteger)({
+      data: attributes.allowRichText,
+      defaultValue: 0,
+      validate: x => x === 1
+    });
+    this.hScrollPolicy = (0, _utils.getStringOption)(attributes.hScrollPolicy, ["auto", "off", "on"]);
+    this.id = attributes.id || "";
+    this.multiLine = (0, _utils.getInteger)({
+      data: attributes.multiLine,
+      defaultValue: 1,
+      validate: x => x === 0
+    });
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.vScrollPolicy = (0, _utils.getStringOption)(attributes.vScrollPolicy, ["auto", "off", "on"]);
+    this.border = null;
+    this.comb = null;
+    this.extras = null;
+    this.margin = null;
+  }
+
+  [_xfa_object.$toHTML]() {
+    const style = (0, _html_utils.toStyle)(this, "border", "font", "margin");
+    let html;
+
+    if (this.multiline === 1) {
+      html = {
+        name: "textarea",
+        attributes: {
+          style
+        }
+      };
+    } else {
+      html = {
+        name: "input",
+        attributes: {
+          type: "text",
+          class: "xfaTextfield",
+          style
+        }
+      };
+    }
+
+    return {
+      name: "label",
+      attributes: {
+        class: "xfaLabel"
+      },
+      children: [html]
+    };
+  }
+
+}
+
+class Time extends _xfa_object.StringObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "time");
+    this.id = attributes.id || "";
+    this.name = attributes.name || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+  }
+
+  [_xfa_object.$finalize]() {
+    this[_xfa_object.$content] = new Date(this[_xfa_object.$content]);
+  }
+
+  [_xfa_object.$toHTML]() {
+    return this[_xfa_object.$content].toString();
+  }
+
+}
+
+class TimeStamp extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "timeStamp");
+    this.id = attributes.id || "";
+    this.server = attributes.server || "";
+    this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]);
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+  }
+
+}
+
+class ToolTip extends _xfa_object.StringObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "toolTip");
+    this.id = attributes.id || "";
+    this.rid = attributes.rid || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+  }
+
+}
+
+class Traversal extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "traversal", true);
+    this.id = attributes.id || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.extras = null;
+    this.traverse = new _xfa_object.XFAObjectArray();
+  }
+
+}
+
+class Traverse extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "traverse", true);
+    this.id = attributes.id || "";
+    this.operation = (0, _utils.getStringOption)(attributes.operation, ["next", "back", "down", "first", 
"left", "right", "up"]);
+    this.ref = attributes.ref || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.extras = null;
+    this.script = null;
+  }
+
+  get name() {
+    return this.operation;
+  }
+
+  [_xfa_object.$isTransparent]() {
+    return false;
+  }
+
+}
+
+class Ui extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "ui", true);
+    this.id = attributes.id || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.extras = null;
+    this.picture = null;
+    this.barcode = null;
+    this.button = null;
+    this.checkButton = null;
+    this.choiceList = null;
+    this.dateTimeEdit = null;
+    this.defaultUi = null;
+    this.imageEdit = null;
+    this.numericEdit = null;
+    this.passwordEdit = null;
+    this.signature = null;
+    this.textEdit = null;
+  }
+
+  [_xfa_object.$toHTML]() {
+    for (const name of Object.getOwnPropertyNames(this)) {
+      if (name === "extras" || name === "picture") {
+        continue;
+      }
+
+      const obj = this[name];
+
+      if (!(obj instanceof _xfa_object.XFAObject)) {
+        continue;
+      }
+
+      return obj[_xfa_object.$toHTML]();
+    }
+
+    return null;
+  }
+
+}
+
+class Validate extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "validate", true);
+    this.formatTest = (0, _utils.getStringOption)(attributes.formatTest, ["warning", "disabled", "error"]);
+    this.id = attributes.id || "";
+    this.nullTest = (0, _utils.getStringOption)(attributes.nullTest, ["disabled", "error", "warning"]);
+    this.scriptTest = (0, _utils.getStringOption)(attributes.scriptTest, ["error", "disabled", "warning"]);
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.extras = null;
+    this.message = null;
+    this.picture = null;
+    this.script = null;
+  }
+
+}
+
+class Value extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "value", true);
+    this.id = attributes.id || "";
+    this.override = (0, _utils.getInteger)({
+      data: attributes.override,
+      defaultValue: 0,
+      validate: x => x === 1
+    });
+    this.relevant = (0, _utils.getRelevant)(attributes.relevant);
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.arc = null;
+    this.boolean = null;
+    this.date = null;
+    this.dateTime = null;
+    this.decimal = null;
+    this.exData = null;
+    this.float = null;
+    this.image = null;
+    this.integer = null;
+    this.line = null;
+    this.rectangle = null;
+    this.text = null;
+    this.time = null;
+  }
+
+  [_xfa_object.$setValue](value) {
+    const valueName = value[_xfa_object.$nodeName];
+
+    if (this[valueName] !== null) {
+      this[valueName][_xfa_object.$content] = value[_xfa_object.$content];
+      return;
+    }
+
+    for (const name of Object.getOwnPropertyNames(this)) {
+      const obj = this[name];
+
+      if (obj instanceof _xfa_object.XFAObject) {
+        this[name] = null;
+
+        this[_xfa_object.$removeChild](obj);
+      }
+    }
+
+    this[value[_xfa_object.$nodeName]] = value;
+
+    this[_xfa_object.$appendChild](value);
+  }
+
+  [_xfa_object.$toHTML]() {
+    for (const name of Object.getOwnPropertyNames(this)) {
+      const obj = this[name];
+
+      if (!(obj instanceof _xfa_object.XFAObject)) {
+        continue;
+      }
+
+      return obj[_xfa_object.$toHTML]();
+    }
+
+    return null;
+  }
+
+}
+
+exports.Value = Value;
+
+class Variables extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(TEMPLATE_NS_ID, "variables", true);
+    this.id = attributes.id || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+    this.boolean = new _xfa_object.XFAObjectArray();
+    this.date = new _xfa_object.XFAObjectArray();
+    this.dateTime = new _xfa_object.XFAObjectArray();
+    this.decimal = new _xfa_object.XFAObjectArray();
+    this.exData = new _xfa_object.XFAObjectArray();
+    this.float = new _xfa_object.XFAObjectArray();
+    this.image = new _xfa_object.XFAObjectArray();
+    this.integer = new _xfa_object.XFAObjectArray();
+    this.manifest = new _xfa_object.XFAObjectArray();
+    this.script = new _xfa_object.XFAObjectArray();
+    this.text = new _xfa_object.XFAObjectArray();
+    this.time = new _xfa_object.XFAObjectArray();
+  }
+
+  [_xfa_object.$isTransparent]() {
+    return true;
+  }
+
+}
+
+class TemplateNamespace {
+  static [_namespaces.$buildXFAObject](name, attributes) {
+    if (TemplateNamespace.hasOwnProperty(name)) {
+      const node = TemplateNamespace[name](attributes);
+
+      node[_xfa_object.$setSetAttributes](attributes);
+
+      return node;
+    }
+
+    return undefined;
+  }
+
+  static appearanceFilter(attrs) {
+    return new AppearanceFilter(attrs);
+  }
+
+  static arc(attrs) {
+    return new Arc(attrs);
+  }
+
+  static area(attrs) {
+    return new Area(attrs);
+  }
+
+  static assist(attrs) {
+    return new Assist(attrs);
+  }
+
+  static barcode(attrs) {
+    return new Barcode(attrs);
+  }
+
+  static bind(attrs) {
+    return new Bind(attrs);
+  }
+
+  static bindItems(attrs) {
+    return new BindItems(attrs);
+  }
+
+  static bookend(attrs) {
+    return new Bookend(attrs);
+  }
+
+  static boolean(attrs) {
+    return new BooleanElement(attrs);
+  }
+
+  static border(attrs) {
+    return new Border(attrs);
+  }
+
+  static break(attrs) {
+    return new Break(attrs);
+  }
+
+  static breakAfter(attrs) {
+    return new BreakAfter(attrs);
+  }
+
+  static breakBefore(attrs) {
+    return new BreakBefore(attrs);
+  }
+
+  static button(attrs) {
+    return new Button(attrs);
+  }
+
+  static calculate(attrs) {
+    return new Calculate(attrs);
+  }
+
+  static caption(attrs) {
+    return new Caption(attrs);
+  }
+
+  static certificate(attrs) {
+    return new Certificate(attrs);
+  }
+
+  static certificates(attrs) {
+    return new Certificates(attrs);
+  }
+
+  static checkButton(attrs) {
+    return new CheckButton(attrs);
+  }
+
+  static choiceList(attrs) {
+    return new ChoiceList(attrs);
+  }
+
+  static color(attrs) {
+    return new Color(attrs);
+  }
+
+  static comb(attrs) {
+    return new Comb(attrs);
+  }
+
+  static connect(attrs) {
+    return new Connect(attrs);
+  }
+
+  static contentArea(attrs) {
+    return new ContentArea(attrs);
+  }
+
+  static corner(attrs) {
+    return new Corner(attrs);
+  }
+
+  static date(attrs) {
+    return new DateElement(attrs);
+  }
+
+  static dateTime(attrs) {
+    return new DateTime(attrs);
+  }
+
+  static dateTimeEdit(attrs) {
+    return new DateTimeEdit(attrs);
+  }
+
+  static decimal(attrs) {
+    return new Decimal(attrs);
+  }
+
+  static defaultUi(attrs) {
+    return new DefaultUi(attrs);
+  }
+
+  static desc(attrs) {
+    return new Desc(attrs);
+  }
+
+  static digestMethod(attrs) {
+    return new DigestMethod(attrs);
+  }
+
+  static digestMethods(attrs) {
+    return new DigestMethods(attrs);
+  }
+
+  static draw(attrs) {
+    return new Draw(attrs);
+  }
+
+  static edge(attrs) {
+    return new Edge(attrs);
+  }
+
+  static encoding(attrs) {
+    return new Encoding(attrs);
+  }
+
+  static encodings(attrs) {
+    return new Encodings(attrs);
+  }
+
+  static encrypt(attrs) {
+    return new Encrypt(attrs);
+  }
+
+  static encryptData(attrs) {
+    return new EncryptData(attrs);
+  }
+
+  static encryption(attrs) {
+    return new Encryption(attrs);
+  }
+
+  static encryptionMethod(attrs) {
+    return new EncryptionMethod(attrs);
+  }
+
+  static encryptionMethods(attrs) {
+    return new EncryptionMethods(attrs);
+  }
+
+  static event(attrs) {
+    return new Event(attrs);
+  }
+
+  static exData(attrs) {
+    return new ExData(attrs);
+  }
+
+  static exObject(attrs) {
+    return new ExObject(attrs);
+  }
+
+  static exclGroup(attrs) {
+    return new ExclGroup(attrs);
+  }
+
+  static execute(attrs) {
+    return new Execute(attrs);
+  }
+
+  static extras(attrs) {
+    return new Extras(attrs);
+  }
+
+  static field(attrs) {
+    return new Field(attrs);
+  }
+
+  static fill(attrs) {
+    return new Fill(attrs);
+  }
+
+  static filter(attrs) {
+    return new Filter(attrs);
+  }
+
+  static float(attrs) {
+    return new Float(attrs);
+  }
+
+  static font(attrs) {
+    return new Font(attrs);
+  }
+
+  static format(attrs) {
+    return new Format(attrs);
+  }
+
+  static handler(attrs) {
+    return new Handler(attrs);
+  }
+
+  static hyphenation(attrs) {
+    return new Hyphenation(attrs);
+  }
+
+  static image(attrs) {
+    return new Image(attrs);
+  }
+
+  static imageEdit(attrs) {
+    return new ImageEdit(attrs);
+  }
+
+  static integer(attrs) {
+    return new Integer(attrs);
+  }
+
+  static issuers(attrs) {
+    return new Issuers(attrs);
+  }
+
+  static items(attrs) {
+    return new Items(attrs);
+  }
+
+  static keep(attrs) {
+    return new Keep(attrs);
+  }
+
+  static keyUsage(attrs) {
+    return new KeyUsage(attrs);
+  }
+
+  static line(attrs) {
+    return new Line(attrs);
+  }
+
+  static linear(attrs) {
+    return new Linear(attrs);
+  }
+
+  static lockDocument(attrs) {
+    return new LockDocument(attrs);
+  }
+
+  static manifest(attrs) {
+    return new Manifest(attrs);
+  }
+
+  static margin(attrs) {
+    return new Margin(attrs);
+  }
+
+  static mdp(attrs) {
+    return new Mdp(attrs);
+  }
+
+  static medium(attrs) {
+    return new Medium(attrs);
+  }
+
+  static message(attrs) {
+    return new Message(attrs);
+  }
+
+  static numericEdit(attrs) {
+    return new NumericEdit(attrs);
+  }
+
+  static occur(attrs) {
+    return new Occur(attrs);
+  }
+
+  static oid(attrs) {
+    return new Oid(attrs);
+  }
+
+  static oids(attrs) {
+    return new Oids(attrs);
+  }
+
+  static overflow(attrs) {
+    return new Overflow(attrs);
+  }
+
+  static pageArea(attrs) {
+    return new PageArea(attrs);
+  }
+
+  static pageSet(attrs) {
+    return new PageSet(attrs);
+  }
+
+  static para(attrs) {
+    return new Para(attrs);
+  }
+
+  static passwordEdit(attrs) {
+    return new PasswordEdit(attrs);
+  }
+
+  static pattern(attrs) {
+    return new Pattern(attrs);
+  }
+
+  static picture(attrs) {
+    return new Picture(attrs);
+  }
+
+  static proto(attrs) {
+    return new Proto(attrs);
+  }
+
+  static radial(attrs) {
+    return new Radial(attrs);
+  }
+
+  static reason(attrs) {
+    return new Reason(attrs);
+  }
+
+  static reasons(attrs) {
+    return new Reasons(attrs);
+  }
+
+  static rectangle(attrs) {
+    return new Rectangle(attrs);
+  }
+
+  static ref(attrs) {
+    return new RefElement(attrs);
+  }
+
+  static script(attrs) {
+    return new Script(attrs);
+  }
+
+  static setProperty(attrs) {
+    return new SetProperty(attrs);
+  }
+
+  static signData(attrs) {
+    return new SignData(attrs);
+  }
+
+  static signature(attrs) {
+    return new Signature(attrs);
+  }
+
+  static signing(attrs) {
+    return new Signing(attrs);
+  }
+
+  static solid(attrs) {
+    return new Solid(attrs);
+  }
+
+  static speak(attrs) {
+    return new Speak(attrs);
+  }
+
+  static stipple(attrs) {
+    return new Stipple(attrs);
+  }
+
+  static subform(attrs) {
+    return new Subform(attrs);
+  }
+
+  static subformSet(attrs) {
+    return new SubformSet(attrs);
+  }
+
+  static subjectDN(attrs) {
+    return new SubjectDN(attrs);
+  }
+
+  static subjectDNs(attrs) {
+    return new SubjectDNs(attrs);
+  }
+
+  static submit(attrs) {
+    return new Submit(attrs);
+  }
+
+  static template(attrs) {
+    return new Template(attrs);
+  }
+
+  static text(attrs) {
+    return new Text(attrs);
+  }
+
+  static textEdit(attrs) {
+    return new TextEdit(attrs);
+  }
+
+  static time(attrs) {
+    return new Time(attrs);
+  }
+
+  static timeStamp(attrs) {
+    return new TimeStamp(attrs);
+  }
+
+  static toolTip(attrs) {
+    return new ToolTip(attrs);
+  }
+
+  static traversal(attrs) {
+    return new Traversal(attrs);
+  }
+
+  static traverse(attrs) {
+    return new Traverse(attrs);
+  }
+
+  static ui(attrs) {
+    return new Ui(attrs);
+  }
+
+  static validate(attrs) {
+    return new Validate(attrs);
+  }
+
+  static value(attrs) {
+    return new Value(attrs);
+  }
+
+  static variables(attrs) {
+    return new Variables(attrs);
+  }
+
+}
+
+exports.TemplateNamespace = TemplateNamespace;
+
+/***/ }),
+/* 55 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports.layoutClass = layoutClass;
+exports.measureToString = measureToString;
+exports.toStyle = toStyle;
+
+var _xfa_object = __w_pdfjs_require__(50);
+
+var _util = __w_pdfjs_require__(2);
+
+function measureToString(m) {
+  if (typeof m === "string") {
+    return "0px";
+  }
+
+  return Number.isInteger(m) ? `${m}px` : `${m.toFixed(2)}px`;
+}
+
+const converters = {
+  anchorType(node, style) {
+    if (!("transform" in style)) {
+      style.transform = "";
+    }
+
+    switch (node.anchorType) {
+      case "bottomCenter":
+        style.transform += "translate(-50%, -100%)";
+        break;
+
+      case "bottomLeft":
+        style.transform += "translate(0,-100%)";
+        break;
+
+      case "bottomRight":
+        style.transform += "translate(-100%,-100%)";
+        break;
+
+      case "middleCenter":
+        style.transform += "translate(-50%,-50%)";
+        break;
+
+      case "middleLeft":
+        style.transform += "translate(0,-50%)";
+        break;
+
+      case "middleRight":
+        style.transform += "translate(-100%,-50%)";
+        break;
+
+      case "topCenter":
+        style.transform += "translate(-50%,0)";
+        break;
+
+      case "topRight":
+        style.transform += "translate(-100%,0)";
+        break;
+    }
+  },
+
+  dimensions(node, style) {
+    if (node.w) {
+      style.width = measureToString(node.w);
+    } else {
+      style.width = "auto";
+
+      if (node.maxW > 0) {
+        style.maxWidth = measureToString(node.maxW);
+      }
+
+      style.minWidth = measureToString(node.minW);
+    }
+
+    if (node.h) {
+      style.height = measureToString(node.h);
+    } else {
+      style.height = "auto";
+
+      if (node.maxH > 0) {
+        style.maxHeight = measureToString(node.maxH);
+      }
+
+      style.minHeight = measureToString(node.minH);
+    }
+  },
+
+  position(node, style) {
+    const parent = node[_xfa_object.$getParent]();
+
+    if (parent && parent.layout && parent.layout !== "position") {
+      return;
+    }
+
+    style.position = "absolute";
+    style.left = measureToString(node.x);
+    style.top = measureToString(node.y);
+  },
+
+  rotate(node, style) {
+    if (node.rotate) {
+      if (!("transform" in style)) {
+        style.transform = "";
+      }
+
+      style.transform += `rotate(-${node.rotate}deg)`;
+      style.transformOrigin = "top left";
+    }
+  },
+
+  presence(node, style) {
+    switch (node.presence) {
+      case "invisible":
+        style.visibility = "hidden";
+        break;
+
+      case "hidden":
+      case "inactive":
+        style.display = "none";
+        break;
+    }
+  }
+
+};
+
+function layoutClass(node) {
+  switch (node.layout) {
+    case "position":
+      return "xfaPosition";
+
+    case "lr-tb":
+      return "xfaLrTb";
+
+    case "rl-row":
+      return "xfaRlRow";
+
+    case "rl-tb":
+      return "xfaRlTb";
+
+    case "row":
+      return "xfaRow";
+
+    case "table":
+      return "xfaTable";
+
+    case "tb":
+      return "xfaTb";
+
+    default:
+      return "xfaPosition";
+  }
+}
+
+function toStyle(node, ...names) {
+  const style = Object.create(null);
+
+  for (const name of names) {
+    const value = node[name];
+
+    if (value === null) {
+      continue;
+    }
+
+    if (value instanceof _xfa_object.XFAObject) {
+      const newStyle = value[_xfa_object.$toStyle]();
+
+      if (newStyle) {
+        Object.assign(style, newStyle);
+      } else {
+        (0, _util.warn)(`(DEBUG) - XFA - style for ${name} not implemented yet`);
+      }
+
+      continue;
+    }
+
+    if (converters.hasOwnProperty(name)) {
+      converters[name](node, style);
+    }
+  }
+
+  return style;
+}
+
+/***/ }),
+/* 56 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports.createDataNode = createDataNode;
+exports.searchNode = searchNode;
+
+var _xfa_object = __w_pdfjs_require__(50);
+
+var _util = __w_pdfjs_require__(2);
+
+const namePattern = /^[^.[]+/;
+const indexPattern = /^[^\]]+/;
+const operators = {
+  dot: 0,
+  dotDot: 1,
+  dotHash: 2,
+  dotBracket: 3,
+  dotParen: 4
+};
+const shortcuts = new Map([["$data", (root, current) => root.datasets.data], ["$template", (root, current) 
=> root.template], ["$connectionSet", (root, current) => root.connectionSet], ["$form", (root, current) => 
root.form], ["$layout", (root, current) => root.layout], ["$host", (root, current) => root.host], 
["$dataWindow", (root, current) => root.dataWindow], ["$event", (root, current) => root.event], ["!", (root, 
current) => root.datasets], ["$xfa", (root, current) => root], ["xfa", (root, current) => root], ["$", (root, 
current) => current]]);
+const somCache = new WeakMap();
+
+function parseIndex(index) {
+  index = index.trim();
+
+  if (index === "*") {
+    return Infinity;
+  }
+
+  return parseInt(index, 10) || 0;
+}
+
+function parseExpression(expr, dotDotAllowed) {
+  let match = expr.match(namePattern);
+
+  if (!match) {
+    return null;
+  }
+
+  let [name] = match;
+  const parsed = [{
+    name,
+    cacheName: "." + name,
+    index: 0,
+    js: null,
+    formCalc: null,
+    operator: operators.dot
+  }];
+  let pos = name.length;
+
+  while (pos < expr.length) {
+    const spos = pos;
+    const char = expr.charAt(pos++);
+
+    if (char === "[") {
+      match = expr.slice(pos).match(indexPattern);
+
+      if (!match) {
+        (0, _util.warn)("XFA - Invalid index in SOM expression");
+        return null;
+      }
+
+      parsed[parsed.length - 1].index = parseIndex(match[0]);
+      pos += match[0].length + 1;
+      continue;
+    }
+
+    let operator;
+
+    switch (expr.charAt(pos)) {
+      case ".":
+        if (!dotDotAllowed) {
+          return null;
+        }
+
+        pos++;
+        operator = operators.dotDot;
+        break;
+
+      case "#":
+        pos++;
+        operator = operators.dotHash;
+        break;
+
+      case "[":
+        operator = operators.dotBracket;
+        break;
+
+      case "(":
+        operator = operators.dotParen;
+        break;
+
+      default:
+        operator = operators.dot;
+        break;
+    }
+
+    match = expr.slice(pos).match(namePattern);
+
+    if (!match) {
+      break;
+    }
+
+    [name] = match;
+    pos += name.length;
+    parsed.push({
+      name,
+      cacheName: expr.slice(spos, pos),
+      operator,
+      index: 0,
+      js: null,
+      formCalc: null
+    });
+  }
+
+  return parsed;
+}
+
+function searchNode(root, container, expr, dotDotAllowed = true, useCache = true) {
+  const parsed = parseExpression(expr, dotDotAllowed);
+
+  if (!parsed) {
+    return null;
+  }
+
+  const fn = shortcuts.get(parsed[0].name);
+  let i = 0;
+  let isQualified;
+
+  if (fn) {
+    isQualified = true;
+    root = [fn(root, container)];
+    i = 1;
+  } else {
+    isQualified = container === null;
+    root = [container || root];
+  }
+
+  for (let ii = parsed.length; i < ii; i++) {
+    const {
+      name,
+      cacheName,
+      operator,
+      index
+    } = parsed[i];
+    const nodes = [];
+
+    for (const node of root) {
+      if (!(node instanceof _xfa_object.XFAObject)) {
+        continue;
+      }
+
+      let children, cached;
+
+      if (useCache) {
+        cached = somCache.get(node);
+
+        if (!cached) {
+          cached = new Map();
+          somCache.set(node, cached);
+        }
+
+        children = cached.get(cacheName);
+      }
+
+      if (!children) {
+        switch (operator) {
+          case operators.dot:
+            children = node[_xfa_object.$getChildrenByName](name, false);
+            break;
+
+          case operators.dotDot:
+            children = node[_xfa_object.$getChildrenByName](name, true);
+            break;
+
+          case operators.dotHash:
+            children = node[_xfa_object.$getChildrenByClass](name);
+
+            if (children instanceof _xfa_object.XFAObjectArray) {
+              children = children.children;
+            } else {
+              children = [children];
+            }
+
+            break;
+
+          default:
+            break;
+        }
+
+        if (useCache) {
+          cached.set(cacheName, children);
+        }
+      }
+
+      if (children.length > 0) {
+        nodes.push(children);
+      }
+    }
+
+    if (nodes.length === 0 && !isQualified && i === 0) {
+      const parent = container[_xfa_object.$getParent]();
+
+      container = parent;
+
+      if (!container) {
+        return null;
+      }
+
+      i = -1;
+      root = [container];
+      continue;
+    }
+
+    if (isFinite(index)) {
+      root = nodes.filter(node => index < node.length).map(node => node[index]);
+    } else {
+      root = nodes.reduce((acc, node) => acc.concat(node), []);
+    }
+  }
+
+  if (root.length === 0) {
+    return null;
+  }
+
+  return root;
+}
+
+function createNodes(root, path) {
+  let node = null;
+
+  for (const {
+    name,
+    index
+  } of path) {
+    for (let i = 0; i <= index; i++) {
+      node = new _xfa_object.XmlObject(root[_xfa_object.$namespaceId], name);
+
+      root[_xfa_object.$appendChild](node);
+    }
+
+    root = node;
+  }
+
+  return node;
+}
+
+function createDataNode(root, container, expr) {
+  const parsed = parseExpression(expr);
+
+  if (!parsed) {
+    return null;
+  }
+
+  if (parsed.some(x => x.operator === operators.dotDot)) {
+    return null;
+  }
+
+  const fn = shortcuts.get(parsed[0].name);
+  let i = 0;
+
+  if (fn) {
+    root = fn(root, container);
+    i = 1;
+  } else {
+    root = container || root;
+  }
+
+  for (let ii = parsed.length; i < ii; i++) {
+    const {
+      cacheName,
+      index
+    } = parsed[i];
+
+    if (!isFinite(index)) {
+      parsed[i].index = 0;
+      return createNodes(root, parsed.slice(i));
+    }
+
+    const cached = somCache.get(root);
+
+    if (!cached) {
+      (0, _util.warn)(`XFA - createDataNode must be called after searchNode.`);
+      return null;
+    }
+
+    const children = cached.get(cacheName);
+
+    if (children.length === 0) {
+      return createNodes(root, parsed.slice(i));
+    }
+
+    if (index < children.length) {
+      const child = children[index];
+
+      if (!(child instanceof _xfa_object.XFAObject)) {
+        (0, _util.warn)(`XFA - Cannot create a node.`);
+        return null;
+      }
+
+      root = child;
+    } else {
+      parsed[i].index = children.length - index;
+      return createNodes(root, parsed.slice(i));
+    }
+  }
+
+  return null;
+}
+
+/***/ }),
+/* 57 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports.XFAParser = void 0;
+
+var _xfa_object = __w_pdfjs_require__(50);
+
+var _xml_parser = __w_pdfjs_require__(26);
+
+var _builder = __w_pdfjs_require__(58);
+
+var _util = __w_pdfjs_require__(2);
+
+class XFAParser extends _xml_parser.XMLParserBase {
+  constructor() {
+    super();
+    this._builder = new _builder.Builder();
+    this._stack = [];
+    this._ids = new Map();
+    this._current = this._builder.buildRoot(this._ids);
+    this._errorCode = _xml_parser.XMLParserErrorCode.NoError;
+    this._whiteRegex = /^\s+$/;
+  }
+
+  parse(data) {
+    this.parseXml(data);
+
+    if (this._errorCode !== _xml_parser.XMLParserErrorCode.NoError) {
+      return undefined;
+    }
+
+    this._current[_xfa_object.$finalize]();
+
+    return this._current.element;
+  }
+
+  onText(text) {
+    if (this._whiteRegex.test(text)) {
+      return;
+    }
+
+    this._current[_xfa_object.$onText](text.trim());
+  }
+
+  onCdata(text) {
+    this._current[_xfa_object.$onText](text);
+  }
+
+  _mkAttributes(attributes, tagName) {
+    let namespace = null;
+    let prefixes = null;
+    const attributeObj = Object.create({});
+
+    for (const {
+      name,
+      value
+    } of attributes) {
+      if (name === "xmlns") {
+        if (!namespace) {
+          namespace = value;
+        } else {
+          (0, _util.warn)(`XFA - multiple namespace definition in <${tagName}>`);
+        }
+      } else if (name.startsWith("xmlns:")) {
+        const prefix = name.substring("xmlns:".length);
+
+        if (!prefixes) {
+          prefixes = [];
+        }
+
+        prefixes.push({
+          prefix,
+          value
+        });
+      } else {
+        const i = name.indexOf(":");
+
+        if (i === -1) {
+          attributeObj[name] = value;
+        } else {
+          let nsAttrs = attributeObj[_xfa_object.$nsAttributes];
+
+          if (!nsAttrs) {
+            nsAttrs = attributeObj[_xfa_object.$nsAttributes] = Object.create(null);
+          }
+
+          const [ns, attrName] = [name.slice(0, i), name.slice(i + 1)];
+          let attrs = nsAttrs[ns];
+
+          if (!attrs) {
+            attrs = nsAttrs[ns] = Object.create(null);
+          }
+
+          attrs[attrName] = value;
+        }
+      }
+    }
+
+    return [namespace, prefixes, attributeObj];
+  }
+
+  _getNameAndPrefix(name) {
+    const i = name.indexOf(":");
+
+    if (i === -1) {
+      return [name, null];
+    }
+
+    return [name.substring(i + 1), name.substring(0, i)];
+  }
+
+  onBeginElement(tagName, attributes, isEmpty) {
+    const [namespace, prefixes, attributesObj] = this._mkAttributes(attributes, tagName);
+
+    const [name, nsPrefix] = this._getNameAndPrefix(tagName);
+
+    const node = this._builder.build({
+      nsPrefix,
+      name,
+      attributes: attributesObj,
+      namespace,
+      prefixes
+    });
+
+    if (isEmpty) {
+      node[_xfa_object.$finalize]();
+
+      if (this._current[_xfa_object.$onChild](node)) {
+        node[_xfa_object.$setId](this._ids);
+      }
+
+      node[_xfa_object.$clean](this._builder);
+
+      return;
+    }
+
+    this._stack.push(this._current);
+
+    this._current = node;
+  }
+
+  onEndElement(name) {
+    const node = this._current;
+
+    node[_xfa_object.$finalize]();
+
+    this._current = this._stack.pop();
+
+    if (this._current[_xfa_object.$onChild](node)) {
+      node[_xfa_object.$setId](this._ids);
+    }
+
+    node[_xfa_object.$clean](this._builder);
+  }
+
+  onError(code) {
+    this._errorCode = code;
+  }
+
+}
+
+exports.XFAParser = XFAParser;
+
+/***/ }),
+/* 58 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports.Builder = void 0;
+
+var _namespaces = __w_pdfjs_require__(52);
+
+var _xfa_object = __w_pdfjs_require__(50);
+
+var _setup = __w_pdfjs_require__(59);
+
+var _template = __w_pdfjs_require__(54);
+
+var _unknown = __w_pdfjs_require__(68);
+
+var _util = __w_pdfjs_require__(2);
+
+const _ids = Symbol();
+
+class Root extends _xfa_object.XFAObject {
+  constructor(ids) {
+    super(-1, "root", Object.create(null));
+    this.element = null;
+    this[_ids] = ids;
+  }
+
+  [_xfa_object.$onChild](child) {
+    this.element = child;
+    return true;
+  }
+
+  [_xfa_object.$finalize]() {
+    super[_xfa_object.$finalize]();
+
+    if (this.element.template instanceof _template.Template) {
+      this.element.template[_xfa_object.$resolvePrototypes](this[_ids]);
+    }
+  }
+
+}
+
+class Empty extends _xfa_object.XFAObject {
+  constructor() {
+    super(-1, "", Object.create(null));
+  }
+
+  [_xfa_object.$onChild](_) {
+    return false;
+  }
+
+}
+
+class Builder {
+  constructor() {
+    this._namespaceStack = [];
+    this._namespacePrefixes = new Map();
+    this._namespaces = new Map();
+    this._nextNsId = Math.max(...Object.values(_namespaces.NamespaceIds).map(({
+      id
+    }) => id));
+    this._currentNamespace = new _unknown.UnknownNamespace(++this._nextNsId);
+  }
+
+  buildRoot(ids) {
+    return new Root(ids);
+  }
+
+  build({
+    nsPrefix,
+    name,
+    attributes,
+    namespace,
+    prefixes
+  }) {
+    const hasNamespaceDef = namespace !== null;
+
+    if (hasNamespaceDef) {
+      this._namespaceStack.push(this._currentNamespace);
+
+      this._currentNamespace = this._searchNamespace(namespace);
+    }
+
+    if (prefixes) {
+      this._addNamespacePrefix(prefixes);
+    }
+
+    if (attributes.hasOwnProperty(_xfa_object.$nsAttributes)) {
+      const dataTemplate = _setup.NamespaceSetUp.datasets;
+      const nsAttrs = attributes[_xfa_object.$nsAttributes];
+      let xfaAttrs = null;
+
+      for (const [ns, attrs] of Object.entries(nsAttrs)) {
+        const nsToUse = this._getNamespaceToUse(ns);
+
+        if (nsToUse === dataTemplate) {
+          xfaAttrs = {
+            xfa: attrs
+          };
+          break;
+        }
+      }
+
+      if (xfaAttrs) {
+        attributes[_xfa_object.$nsAttributes] = xfaAttrs;
+      } else {
+        delete attributes[_xfa_object.$nsAttributes];
+      }
+    }
+
+    const namespaceToUse = this._getNamespaceToUse(nsPrefix);
+
+    const node = namespaceToUse && namespaceToUse[_namespaces.$buildXFAObject](name, attributes) || new 
Empty();
+
+    if (hasNamespaceDef || prefixes) {
+      node[_xfa_object.$cleanup] = {
+        hasNamespace: hasNamespaceDef,
+        prefixes
+      };
+    }
+
+    return node;
+  }
+
+  _searchNamespace(nsName) {
+    let ns = this._namespaces.get(nsName);
+
+    if (ns) {
+      return ns;
+    }
+
+    for (const [name, {
+      check
+    }] of Object.entries(_namespaces.NamespaceIds)) {
+      if (check(nsName)) {
+        ns = _setup.NamespaceSetUp[name];
+
+        if (ns) {
+          this._namespaces.set(nsName, ns);
+
+          return ns;
+        }
+
+        break;
+      }
+    }
+
+    ns = new _unknown.UnknownNamespace(++this._nextNsId);
+
+    this._namespaces.set(nsName, ns);
+
+    return ns;
+  }
+
+  _addNamespacePrefix(prefixes) {
+    for (const {
+      prefix,
+      value
+    } of prefixes) {
+      const namespace = this._searchNamespace(value);
+
+      let prefixStack = this._namespacePrefixes.get(prefix);
+
+      if (!prefixStack) {
+        prefixStack = [];
+
+        this._namespacePrefixes.set(prefix, prefixStack);
+      }
+
+      prefixStack.push(namespace);
+    }
+  }
+
+  _getNamespaceToUse(prefix) {
+    if (!prefix) {
+      return this._currentNamespace;
+    }
+
+    const prefixStack = this._namespacePrefixes.get(prefix);
+
+    if (prefixStack && prefixStack.length > 0) {
+      return prefixStack[prefixStack.length - 1];
+    }
+
+    (0, _util.warn)(`Unknown namespace prefix: ${prefix}.`);
+    return null;
+  }
+
+  clean(data) {
+    const {
+      hasNamespace,
+      prefixes
+    } = data;
+
+    if (hasNamespace) {
+      this._currentNamespace = this._namespaceStack.pop();
+    }
+
+    if (prefixes) {
+      prefixes.forEach(({
+        prefix
+      }) => {
+        this._namespacePrefixes.get(prefix).pop();
+      });
+    }
+  }
+
+}
+
+exports.Builder = Builder;
+
+/***/ }),
+/* 59 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports.NamespaceSetUp = void 0;
+
+var _config = __w_pdfjs_require__(60);
+
+var _connection_set = __w_pdfjs_require__(61);
+
+var _datasets = __w_pdfjs_require__(62);
+
+var _locale_set = __w_pdfjs_require__(63);
+
+var _signature = __w_pdfjs_require__(64);
+
+var _stylesheet = __w_pdfjs_require__(65);
+
+var _template = __w_pdfjs_require__(54);
+
+var _xdp = __w_pdfjs_require__(66);
+
+var _xhtml = __w_pdfjs_require__(67);
+
+const NamespaceSetUp = {
+  config: _config.ConfigNamespace,
+  connection: _connection_set.ConnectionSetNamespace,
+  datasets: _datasets.DatasetsNamespace,
+  localeSet: _locale_set.LocaleSetNamespace,
+  signature: _signature.SignatureNamespace,
+  stylesheet: _stylesheet.StylesheetNamespace,
+  template: _template.TemplateNamespace,
+  xdp: _xdp.XdpNamespace,
+  xhtml: _xhtml.XhtmlNamespace
+};
+exports.NamespaceSetUp = NamespaceSetUp;
+
+/***/ }),
+/* 60 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports.ConfigNamespace = void 0;
+
+var _namespaces = __w_pdfjs_require__(52);
+
+var _xfa_object = __w_pdfjs_require__(50);
+
+var _utils = __w_pdfjs_require__(51);
+
+var _util = __w_pdfjs_require__(2);
+
+const CONFIG_NS_ID = _namespaces.NamespaceIds.config.id;
+
+class Acrobat extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "acrobat", true);
+    this.acrobat7 = null;
+    this.autoSave = null;
+    this.common = null;
+    this.validate = null;
+    this.validateApprovalSignatures = null;
+    this.submitUrl = new _xfa_object.XFAObjectArray();
+  }
+
+}
+
+class Acrobat7 extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "acrobat7", true);
+    this.dynamicRender = null;
+  }
+
+}
+
+class ADBE_JSConsole extends _xfa_object.OptionObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "ADBE_JSConsole", ["delegate", "Enable", "Disable"]);
+  }
+
+}
+
+class ADBE_JSDebugger extends _xfa_object.OptionObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "ADBE_JSDebugger", ["delegate", "Enable", "Disable"]);
+  }
+
+}
+
+class AddSilentPrint extends _xfa_object.Option01 {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "addSilentPrint");
+  }
+
+}
+
+class AddViewerPreferences extends _xfa_object.Option01 {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "addViewerPreferences");
+  }
+
+}
+
+class AdjustData extends _xfa_object.Option10 {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "adjustData");
+  }
+
+}
+
+class AdobeExtensionLevel extends _xfa_object.IntegerObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "adobeExtensionLevel", 0, n => n >= 1 && n <= 8);
+  }
+
+}
+
+class Agent extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "agent", true);
+    this.name = attributes.name ? attributes.name.trim() : "";
+    this.common = new _xfa_object.XFAObjectArray();
+  }
+
+}
+
+class AlwaysEmbed extends _xfa_object.ContentObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "alwaysEmbed");
+  }
+
+}
+
+class Amd extends _xfa_object.StringObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "amd");
+  }
+
+}
+
+class Area extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "area");
+    this.level = (0, _utils.getInteger)({
+      data: attributes.level,
+      defaultValue: 0,
+      validator: n => n >= 1 && n <= 3
+    });
+    this.name = (0, _utils.getStringOption)(attributes.name, ["", "barcode", "coreinit", "deviceDriver", 
"font", "general", "layout", "merge", "script", "signature", "sourceSet", "templateCache"]);
+  }
+
+}
+
+class Attributes extends _xfa_object.OptionObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "attributes", ["preserve", "delegate", "ignore"]);
+  }
+
+}
+
+class AutoSave extends _xfa_object.OptionObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "autoSave", ["disabled", "enabled"]);
+  }
+
+}
+
+class Base extends _xfa_object.StringObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "base");
+  }
+
+}
+
+class BatchOutput extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "batchOutput");
+    this.format = (0, _utils.getStringOption)(attributes.format, ["none", "concat", "zip", "zipCompress"]);
+  }
+
+}
+
+class BehaviorOverride extends _xfa_object.ContentObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "behaviorOverride");
+  }
+
+  [_xfa_object.$finalize]() {
+    this[_xfa_object.$content] = new Map(this[_xfa_object.$content].trim().split(/\s+/).filter(x => !!x && 
x.include(":")).map(x => x.split(":", 2)));
+  }
+
+}
+
+class Cache extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "cache", true);
+    this.templateCache = null;
+  }
+
+}
+
+class Change extends _xfa_object.Option01 {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "change");
+  }
+
+}
+
+class Common extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "common", true);
+    this.data = null;
+    this.locale = null;
+    this.localeSet = null;
+    this.messaging = null;
+    this.suppressBanner = null;
+    this.template = null;
+    this.validationMessaging = null;
+    this.versionControl = null;
+    this.log = new _xfa_object.XFAObjectArray();
+  }
+
+}
+
+class Compress extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "compress");
+    this.scope = (0, _utils.getStringOption)(attributes.scope, ["imageOnly", "document"]);
+  }
+
+}
+
+class CompressLogicalStructure extends _xfa_object.Option01 {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "compressLogicalStructure");
+  }
+
+}
+
+class CompressObjectStream extends _xfa_object.Option10 {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "compressObjectStream");
+  }
+
+}
+
+class Compression extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "compression", true);
+    this.compressLogicalStructure = null;
+    this.compressObjectStream = null;
+    this.level = null;
+    this.type = null;
+  }
+
+}
+
+class Config extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "config", true);
+    this.acrobat = null;
+    this.present = null;
+    this.trace = null;
+    this.agent = new _xfa_object.XFAObjectArray();
+  }
+
+}
+
+class Conformance extends _xfa_object.OptionObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "conformance", ["A", "B"]);
+  }
+
+}
+
+class ContentCopy extends _xfa_object.Option01 {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "contentCopy");
+  }
+
+}
+
+class Copies extends _xfa_object.IntegerObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "copies", 1, n => n >= 1);
+  }
+
+}
+
+class Creator extends _xfa_object.StringObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "creator");
+  }
+
+}
+
+class CurrentPage extends _xfa_object.IntegerObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "currentPage", 0, n => n >= 0);
+  }
+
+}
+
+class Data extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "data", true);
+    this.adjustData = null;
+    this.attributes = null;
+    this.incrementalLoad = null;
+    this.outputXSL = null;
+    this.range = null;
+    this.record = null;
+    this.startNode = null;
+    this.uri = null;
+    this.window = null;
+    this.xsl = null;
+    this.excludeNS = new _xfa_object.XFAObjectArray();
+    this.transform = new _xfa_object.XFAObjectArray();
+  }
+
+}
+
+class Debug extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "debug", true);
+    this.uri = null;
+  }
+
+}
+
+class DefaultTypeface extends _xfa_object.ContentObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "defaultTypeface");
+    this.writingScript = (0, _utils.getStringOption)(attributes.writingScript, ["*", "Arabic", "Cyrillic", 
"EastEuropeanRoman", "Greek", "Hebrew", "Japanese", "Korean", "Roman", "SimplifiedChinese", "Thai", 
"TraditionalChinese", "Vietnamese"]);
+  }
+
+}
+
+class Destination extends _xfa_object.OptionObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "destination", ["pdf", "pcl", "ps", "webClient", "zpl"]);
+  }
+
+}
+
+class DocumentAssembly extends _xfa_object.Option01 {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "documentAssembly");
+  }
+
+}
+
+class Driver extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "driver", true);
+    this.name = attributes.name ? attributes.name.trim() : "";
+    this.fontInfo = null;
+    this.xdc = null;
+  }
+
+}
+
+class DuplexOption extends _xfa_object.OptionObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "duplexOption", ["simplex", "duplexFlipLongEdge", "duplexFlipShortEdge"]);
+  }
+
+}
+
+class DynamicRender extends _xfa_object.OptionObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "dynamicRender", ["forbidden", "required"]);
+  }
+
+}
+
+class Embed extends _xfa_object.Option01 {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "embed");
+  }
+
+}
+
+class Encrypt extends _xfa_object.Option01 {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "encrypt");
+  }
+
+}
+
+class Encryption extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "encryption", true);
+    this.encrypt = null;
+    this.encryptionLevel = null;
+    this.permissions = null;
+  }
+
+}
+
+class EncryptionLevel extends _xfa_object.OptionObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "encryptionLevel", ["40bit", "128bit"]);
+  }
+
+}
+
+class Enforce extends _xfa_object.StringObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "enforce");
+  }
+
+}
+
+class Equate extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "equate");
+    this.force = (0, _utils.getInteger)({
+      data: attributes.force,
+      defaultValue: 1,
+      validator: n => n === 0
+    });
+    this.from = attributes.from || "";
+    this.to = attributes.to || "";
+  }
+
+}
+
+class EquateRange extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "equateRange");
+    this.from = attributes.from || "";
+    this.to = attributes.to || "";
+    this._unicodeRange = attributes.unicodeRange || "";
+  }
+
+  get unicodeRange() {
+    const ranges = [];
+    const unicodeRegex = /U\+([0-9a-fA-F]+)/;
+    const unicodeRange = this._unicodeRange;
+
+    for (let range of unicodeRange.split(",").map(x => x.trim()).filter(x => !!x)) {
+      range = range.split("-", 2).map(x => {
+        const found = x.match(unicodeRegex);
+
+        if (!found) {
+          return 0;
+        }
+
+        return parseInt(found[1], 16);
+      });
+
+      if (range.length === 1) {
+        range.push(range[0]);
+      }
+
+      ranges.push(range);
+    }
+
+    return (0, _util.shadow)(this, "unicodeRange", ranges);
+  }
+
+}
+
+class Exclude extends _xfa_object.ContentObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "exclude");
+  }
+
+  [_xfa_object.$finalize]() {
+    this[_xfa_object.$content] = this[_xfa_object.$content].trim().split(/\s+/).filter(x => x && 
["calculate", "close", "enter", "exit", "initialize", "ready", "validate"].includes(x));
+  }
+
+}
+
+class ExcludeNS extends _xfa_object.StringObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "excludeNS");
+  }
+
+}
+
+class FlipLabel extends _xfa_object.OptionObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "flipLabel", ["usePrinterSetting", "on", "off"]);
+  }
+
+}
+
+class FontInfo extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "fontInfo", true);
+    this.embed = null;
+    this.map = null;
+    this.subsetBelow = null;
+    this.alwaysEmbed = new _xfa_object.XFAObjectArray();
+    this.defaultTypeface = new _xfa_object.XFAObjectArray();
+    this.neverEmbed = new _xfa_object.XFAObjectArray();
+  }
+
+}
+
+class FormFieldFilling extends _xfa_object.Option01 {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "formFieldFilling");
+  }
+
+}
+
+class GroupParent extends _xfa_object.StringObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "groupParent");
+  }
+
+}
+
+class IfEmpty extends _xfa_object.OptionObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "ifEmpty", ["dataValue", "dataGroup", "ignore", "remove"]);
+  }
+
+}
+
+class IncludeXDPContent extends _xfa_object.StringObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "includeXDPContent");
+  }
+
+}
+
+class IncrementalLoad extends _xfa_object.OptionObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "incrementalLoad", ["none", "forwardOnly"]);
+  }
+
+}
+
+class IncrementalMerge extends _xfa_object.Option01 {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "incrementalMerge");
+  }
+
+}
+
+class Interactive extends _xfa_object.Option01 {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "interactive");
+  }
+
+}
+
+class Jog extends _xfa_object.OptionObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "jog", ["usePrinterSetting", "none", "pageSet"]);
+  }
+
+}
+
+class LabelPrinter extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "labelPrinter", true);
+    this.name = (0, _utils.getStringOption)(attributes.name, ["zpl", "dpl", "ipl", "tcpl"]);
+    this.batchOutput = null;
+    this.flipLabel = null;
+    this.fontInfo = null;
+    this.xdc = null;
+  }
+
+}
+
+class Layout extends _xfa_object.OptionObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "layout", ["paginate", "panel"]);
+  }
+
+}
+
+class Level extends _xfa_object.IntegerObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "level", 0, n => n > 0);
+  }
+
+}
+
+class Linearized extends _xfa_object.Option01 {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "linearized");
+  }
+
+}
+
+class Locale extends _xfa_object.StringObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "locale");
+  }
+
+}
+
+class LocaleSet extends _xfa_object.StringObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "localeSet");
+  }
+
+}
+
+class Log extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "log", true);
+    this.mode = null;
+    this.threshold = null;
+    this.to = null;
+    this.uri = null;
+  }
+
+}
+
+class MapElement extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "map", true);
+    this.equate = new _xfa_object.XFAObjectArray();
+    this.equateRange = new _xfa_object.XFAObjectArray();
+  }
+
+}
+
+class MediumInfo extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "mediumInfo", true);
+    this.map = null;
+  }
+
+}
+
+class Message extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "message", true);
+    this.msgId = null;
+    this.severity = null;
+  }
+
+}
+
+class Messaging extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "messaging", true);
+    this.message = new _xfa_object.XFAObjectArray();
+  }
+
+}
+
+class Mode extends _xfa_object.OptionObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "mode", ["append", "overwrite"]);
+  }
+
+}
+
+class ModifyAnnots extends _xfa_object.Option01 {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "modifyAnnots");
+  }
+
+}
+
+class MsgId extends _xfa_object.IntegerObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "msgId", 1, n => n >= 1);
+  }
+
+}
+
+class NameAttr extends _xfa_object.StringObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "nameAttr");
+  }
+
+}
+
+class NeverEmbed extends _xfa_object.ContentObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "neverEmbed");
+  }
+
+}
+
+class NumberOfCopies extends _xfa_object.IntegerObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "numberOfCopies", null, n => n >= 2 && n <= 5);
+  }
+
+}
+
+class OpenAction extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "openAction", true);
+    this.destination = null;
+  }
+
+}
+
+class Output extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "output", true);
+    this.to = null;
+    this.type = null;
+    this.uri = null;
+  }
+
+}
+
+class OutputBin extends _xfa_object.StringObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "outputBin");
+  }
+
+}
+
+class OutputXSL extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "outputXSL", true);
+    this.uri = null;
+  }
+
+}
+
+class Overprint extends _xfa_object.OptionObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "overprint", ["none", "both", "draw", "field"]);
+  }
+
+}
+
+class Packets extends _xfa_object.StringObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "packets");
+  }
+
+  [_xfa_object.$finalize]() {
+    if (this[_xfa_object.$content] === "*") {
+      return;
+    }
+
+    this[_xfa_object.$content] = this[_xfa_object.$content].trim().split(/\s+/).filter(x => ["config", 
"datasets", "template", "xfdf", "xslt"].includes(x));
+  }
+
+}
+
+class PageOffset extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "pageOffset");
+    this.x = (0, _utils.getInteger)({
+      data: attributes.x,
+      defaultValue: "useXDCSetting",
+      validator: n => true
+    });
+    this.y = (0, _utils.getInteger)({
+      data: attributes.y,
+      defaultValue: "useXDCSetting",
+      validator: n => true
+    });
+  }
+
+}
+
+class PageRange extends _xfa_object.StringObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "pageRange");
+  }
+
+  [_xfa_object.$finalize]() {
+    const numbers = this[_xfa_object.$content].trim().split(/\s+/).map(x => parseInt(x, 10));
+
+    const ranges = [];
+
+    for (let i = 0, ii = numbers.length; i < ii; i += 2) {
+      ranges.push(numbers.slice(i, i + 2));
+    }
+
+    this[_xfa_object.$content] = ranges;
+  }
+
+}
+
+class Pagination extends _xfa_object.OptionObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "pagination", ["simplex", "duplexShortEdge", "duplexLongEdge"]);
+  }
+
+}
+
+class PaginationOverride extends _xfa_object.OptionObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "paginationOverride", ["none", "forceDuplex", "forceDuplexLongEdge", 
"forceDuplexShortEdge", "forceSimplex"]);
+  }
+
+}
+
+class Part extends _xfa_object.IntegerObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "part", 1, n => false);
+  }
+
+}
+
+class Pcl extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "pcl", true);
+    this.name = attributes.name || "";
+    this.batchOutput = null;
+    this.fontInfo = null;
+    this.jog = null;
+    this.mediumInfo = null;
+    this.outputBin = null;
+    this.pageOffset = null;
+    this.staple = null;
+    this.xdc = null;
+  }
+
+}
+
+class Pdf extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "pdf", true);
+    this.name = attributes.name || "";
+    this.adobeExtensionLevel = null;
+    this.batchOutput = null;
+    this.compression = null;
+    this.creator = null;
+    this.encryption = null;
+    this.fontInfo = null;
+    this.interactive = null;
+    this.linearized = null;
+    this.openAction = null;
+    this.pdfa = null;
+    this.producer = null;
+    this.renderPolicy = null;
+    this.scriptModel = null;
+    this.silentPrint = null;
+    this.submitFormat = null;
+    this.tagged = null;
+    this.version = null;
+    this.viewerPreferences = null;
+    this.xdc = null;
+  }
+
+}
+
+class Pdfa extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "pdfa", true);
+    this.amd = null;
+    this.conformance = null;
+    this.includeXDPContent = null;
+    this.part = null;
+  }
+
+}
+
+class Permissions extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "permissions", true);
+    this.accessibleContent = null;
+    this.change = null;
+    this.contentCopy = null;
+    this.documentAssembly = null;
+    this.formFieldFilling = null;
+    this.modifyAnnots = null;
+    this.plaintextMetadata = null;
+    this.print = null;
+    this.printHighQuality = null;
+  }
+
+}
+
+class PickTrayByPDFSize extends _xfa_object.Option01 {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "pickTrayByPDFSize");
+  }
+
+}
+
+class Picture extends _xfa_object.StringObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "picture");
+  }
+
+}
+
+class PlaintextMetadata extends _xfa_object.Option01 {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "plaintextMetadata");
+  }
+
+}
+
+class Presence extends _xfa_object.OptionObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "presence", ["preserve", "dissolve", "dissolveStructure", "ignore", "remove"]);
+  }
+
+}
+
+class Present extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "present", true);
+    this.behaviorOverride = null;
+    this.cache = null;
+    this.common = null;
+    this.copies = null;
+    this.destination = null;
+    this.incrementalMerge = null;
+    this.layout = null;
+    this.output = null;
+    this.overprint = null;
+    this.pagination = null;
+    this.paginationOverride = null;
+    this.script = null;
+    this.validate = null;
+    this.xdp = null;
+    this.driver = new _xfa_object.XFAObjectArray();
+    this.labelPrinter = new _xfa_object.XFAObjectArray();
+    this.pcl = new _xfa_object.XFAObjectArray();
+    this.pdf = new _xfa_object.XFAObjectArray();
+    this.ps = new _xfa_object.XFAObjectArray();
+    this.submitUrl = new _xfa_object.XFAObjectArray();
+    this.webClient = new _xfa_object.XFAObjectArray();
+    this.zpl = new _xfa_object.XFAObjectArray();
+  }
+
+}
+
+class Print extends _xfa_object.Option01 {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "print");
+  }
+
+}
+
+class PrintHighQuality extends _xfa_object.Option01 {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "printHighQuality");
+  }
+
+}
+
+class PrintScaling extends _xfa_object.OptionObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "printScaling", ["appdefault", "noScaling"]);
+  }
+
+}
+
+class PrinterName extends _xfa_object.StringObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "printerName");
+  }
+
+}
+
+class Producer extends _xfa_object.StringObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "producer");
+  }
+
+}
+
+class Ps extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "ps", true);
+    this.name = attributes.name || "";
+    this.batchOutput = null;
+    this.fontInfo = null;
+    this.jog = null;
+    this.mediumInfo = null;
+    this.outputBin = null;
+    this.staple = null;
+    this.xdc = null;
+  }
+
+}
+
+class Range extends _xfa_object.ContentObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "range");
+  }
+
+  [_xfa_object.$finalize]() {
+    this[_xfa_object.$content] = this[_xfa_object.$content].trim().split(/\s*,\s*/, 2).map(range => 
range.split("-").map(x => parseInt(x.trim(), 10))).filter(range => range.every(x => !isNaN(x))).map(range => {
+      if (range.length === 1) {
+        range.push(range[0]);
+      }
+
+      return range;
+    });
+  }
+
+}
+
+class Record extends _xfa_object.ContentObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "record");
+  }
+
+  [_xfa_object.$finalize]() {
+    this[_xfa_object.$content] = this[_xfa_object.$content].trim();
+    const n = parseInt(this[_xfa_object.$content], 10);
+
+    if (!isNaN(n) && n >= 0) {
+      this[_xfa_object.$content] = n;
+    }
+  }
+
+}
+
+class Relevant extends _xfa_object.ContentObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "relevant");
+  }
+
+  [_xfa_object.$finalize]() {
+    this[_xfa_object.$content] = this[_xfa_object.$content].trim().split(/\s+/);
+  }
+
+}
+
+class Rename extends _xfa_object.ContentObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "rename");
+  }
+
+  [_xfa_object.$finalize]() {
+    this[_xfa_object.$content] = this[_xfa_object.$content].trim();
+
+    if (this[_xfa_object.$content].toLowerCase().startsWith("xml") || this[_xfa_object.$content].match(new 
RegExp("[\\p{L}_][\\p{L}\\d._\\p{M}-]*", "u"))) {
+      (0, _util.warn)("XFA - Rename: invalid XFA name");
+    }
+  }
+
+}
+
+class RenderPolicy extends _xfa_object.OptionObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "renderPolicy", ["server", "client"]);
+  }
+
+}
+
+class RunScripts extends _xfa_object.OptionObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "runScripts", ["both", "client", "none", "server"]);
+  }
+
+}
+
+class Script extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "script", true);
+    this.currentPage = null;
+    this.exclude = null;
+    this.runScripts = null;
+  }
+
+}
+
+class ScriptModel extends _xfa_object.OptionObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "scriptModel", ["XFA", "none"]);
+  }
+
+}
+
+class Severity extends _xfa_object.OptionObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "severity", ["ignore", "error", "information", "trace", "warning"]);
+  }
+
+}
+
+class SilentPrint extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "silentPrint", true);
+    this.addSilentPrint = null;
+    this.printerName = null;
+  }
+
+}
+
+class Staple extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "staple");
+    this.mode = (0, _utils.getStringOption)(attributes.mode, ["usePrinterSetting", "on", "off"]);
+  }
+
+}
+
+class StartNode extends _xfa_object.StringObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "startNode");
+  }
+
+}
+
+class StartPage extends _xfa_object.IntegerObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "startPage", 0, n => true);
+  }
+
+}
+
+class SubmitFormat extends _xfa_object.OptionObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "submitFormat", ["html", "delegate", "fdf", "xml", "pdf"]);
+  }
+
+}
+
+class SubmitUrl extends _xfa_object.StringObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "submitUrl");
+  }
+
+}
+
+class SubsetBelow extends _xfa_object.IntegerObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "subsetBelow", 100, n => n >= 0 && n <= 100);
+  }
+
+}
+
+class SuppressBanner extends _xfa_object.Option01 {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "suppressBanner");
+  }
+
+}
+
+class Tagged extends _xfa_object.Option01 {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "tagged");
+  }
+
+}
+
+class Template extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "template", true);
+    this.base = null;
+    this.relevant = null;
+    this.startPage = null;
+    this.uri = null;
+    this.xsl = null;
+  }
+
+}
+
+class Threshold extends _xfa_object.OptionObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "threshold", ["trace", "error", "information", "warning"]);
+  }
+
+}
+
+class To extends _xfa_object.OptionObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "to", ["null", "memory", "stderr", "stdout", "system", "uri"]);
+  }
+
+}
+
+class TemplateCache extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "templateCache");
+    this.maxEntries = (0, _utils.getInteger)({
+      data: attributes.maxEntries,
+      defaultValue: 5,
+      validator: n => n >= 0
+    });
+  }
+
+}
+
+class Trace extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "trace", true);
+    this.area = new _xfa_object.XFAObjectArray();
+  }
+
+}
+
+class Transform extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "transform", true);
+    this.groupParent = null;
+    this.ifEmpty = null;
+    this.nameAttr = null;
+    this.picture = null;
+    this.presence = null;
+    this.rename = null;
+    this.whitespace = null;
+  }
+
+}
+
+class Type extends _xfa_object.OptionObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "type", ["none", "ascii85", "asciiHex", "ccittfax", "flate", "lzw", "runLength", 
"native", "xdp", "mergedXDP"]);
+  }
+
+}
+
+class Uri extends _xfa_object.StringObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "uri");
+  }
+
+}
+
+class Validate extends _xfa_object.OptionObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "validate", ["preSubmit", "prePrint", "preExecute", "preSave"]);
+  }
+
+}
+
+class ValidateApprovalSignatures extends _xfa_object.ContentObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "validateApprovalSignatures");
+  }
+
+  [_xfa_object.$finalize]() {
+    this[_xfa_object.$content] = this[_xfa_object.$content].trim().split(/\s+/).filter(x => ["docReady", 
"postSign"].includes(x));
+  }
+
+}
+
+class ValidationMessaging extends _xfa_object.OptionObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "validationMessaging", ["allMessagesIndividually", "allMessagesTogether", 
"firstMessageOnly", "noMessages"]);
+  }
+
+}
+
+class Version extends _xfa_object.OptionObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "version", ["1.7", "1.6", "1.5", "1.4", "1.3", "1.2"]);
+  }
+
+}
+
+class VersionControl extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "VersionControl");
+    this.outputBelow = (0, _utils.getStringOption)(attributes.outputBelow, ["warn", "error", "update"]);
+    this.sourceAbove = (0, _utils.getStringOption)(attributes.sourceAbove, ["warn", "error"]);
+    this.sourceBelow = (0, _utils.getStringOption)(attributes.sourceBelow, ["update", "maintain"]);
+  }
+
+}
+
+class ViewerPreferences extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "viewerPreferences", true);
+    this.ADBE_JSConsole = null;
+    this.ADBE_JSDebugger = null;
+    this.addViewerPreferences = null;
+    this.duplexOption = null;
+    this.enforce = null;
+    this.numberOfCopies = null;
+    this.pageRange = null;
+    this.pickTrayByPDFSize = null;
+    this.printScaling = null;
+  }
+
+}
+
+class WebClient extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "webClient", true);
+    this.name = attributes.name ? attributes.name.trim() : "";
+    this.fontInfo = null;
+    this.xdc = null;
+  }
+
+}
+
+class Whitespace extends _xfa_object.OptionObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "whitespace", ["preserve", "ltrim", "normalize", "rtrim", "trim"]);
+  }
+
+}
+
+class Window extends _xfa_object.ContentObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "window");
+  }
+
+  [_xfa_object.$finalize]() {
+    const pair = this[_xfa_object.$content].trim().split(/\s*,\s*/, 2).map(x => parseInt(x, 10));
+
+    if (pair.some(x => isNaN(x))) {
+      this[_xfa_object.$content] = [0, 0];
+      return;
+    }
+
+    if (pair.length === 1) {
+      pair.push(pair[0]);
+    }
+
+    this[_xfa_object.$content] = pair;
+  }
+
+}
+
+class Xdc extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "xdc", true);
+    this.uri = new _xfa_object.XFAObjectArray();
+    this.xsl = new _xfa_object.XFAObjectArray();
+  }
+
+}
+
+class Xdp extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "xdp", true);
+    this.packets = null;
+  }
+
+}
+
+class Xsl extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "xsl", true);
+    this.debug = null;
+    this.uri = null;
+  }
+
+}
+
+class Zpl extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONFIG_NS_ID, "zpl", true);
+    this.name = attributes.name ? attributes.name.trim() : "";
+    this.batchOutput = null;
+    this.flipLabel = null;
+    this.fontInfo = null;
+    this.xdc = null;
+  }
+
+}
+
+class ConfigNamespace {
+  static [_namespaces.$buildXFAObject](name, attributes) {
+    if (ConfigNamespace.hasOwnProperty(name)) {
+      return ConfigNamespace[name](attributes);
+    }
+
+    return undefined;
+  }
+
+  static acrobat(attrs) {
+    return new Acrobat(attrs);
+  }
+
+  static acrobat7(attrs) {
+    return new Acrobat7(attrs);
+  }
+
+  static ADBE_JSConsole(attrs) {
+    return new ADBE_JSConsole(attrs);
+  }
+
+  static ADBE_JSDebugger(attrs) {
+    return new ADBE_JSDebugger(attrs);
+  }
+
+  static addSilentPrint(attrs) {
+    return new AddSilentPrint(attrs);
+  }
+
+  static addViewerPreferences(attrs) {
+    return new AddViewerPreferences(attrs);
+  }
+
+  static adjustData(attrs) {
+    return new AdjustData(attrs);
+  }
+
+  static adobeExtensionLevel(attrs) {
+    return new AdobeExtensionLevel(attrs);
+  }
+
+  static agent(attrs) {
+    return new Agent(attrs);
+  }
+
+  static alwaysEmbed(attrs) {
+    return new AlwaysEmbed(attrs);
+  }
+
+  static amd(attrs) {
+    return new Amd(attrs);
+  }
+
+  static area(attrs) {
+    return new Area(attrs);
+  }
+
+  static attributes(attrs) {
+    return new Attributes(attrs);
+  }
+
+  static autoSave(attrs) {
+    return new AutoSave(attrs);
+  }
+
+  static base(attrs) {
+    return new Base(attrs);
+  }
+
+  static batchOutput(attrs) {
+    return new BatchOutput(attrs);
+  }
+
+  static behaviorOverride(attrs) {
+    return new BehaviorOverride(attrs);
+  }
+
+  static cache(attrs) {
+    return new Cache(attrs);
+  }
+
+  static change(attrs) {
+    return new Change(attrs);
+  }
+
+  static common(attrs) {
+    return new Common(attrs);
+  }
+
+  static compress(attrs) {
+    return new Compress(attrs);
+  }
+
+  static compressLogicalStructure(attrs) {
+    return new CompressLogicalStructure(attrs);
+  }
+
+  static compressObjectStream(attrs) {
+    return new CompressObjectStream(attrs);
+  }
+
+  static compression(attrs) {
+    return new Compression(attrs);
+  }
+
+  static config(attrs) {
+    return new Config(attrs);
+  }
+
+  static conformance(attrs) {
+    return new Conformance(attrs);
+  }
+
+  static contentCopy(attrs) {
+    return new ContentCopy(attrs);
+  }
+
+  static copies(attrs) {
+    return new Copies(attrs);
+  }
+
+  static creator(attrs) {
+    return new Creator(attrs);
+  }
+
+  static currentPage(attrs) {
+    return new CurrentPage(attrs);
+  }
+
+  static data(attrs) {
+    return new Data(attrs);
+  }
+
+  static debug(attrs) {
+    return new Debug(attrs);
+  }
+
+  static defaultTypeface(attrs) {
+    return new DefaultTypeface(attrs);
+  }
+
+  static destination(attrs) {
+    return new Destination(attrs);
+  }
+
+  static documentAssembly(attrs) {
+    return new DocumentAssembly(attrs);
+  }
+
+  static driver(attrs) {
+    return new Driver(attrs);
+  }
+
+  static duplexOption(attrs) {
+    return new DuplexOption(attrs);
+  }
+
+  static dynamicRender(attrs) {
+    return new DynamicRender(attrs);
+  }
+
+  static embed(attrs) {
+    return new Embed(attrs);
+  }
+
+  static encrypt(attrs) {
+    return new Encrypt(attrs);
+  }
+
+  static encryption(attrs) {
+    return new Encryption(attrs);
+  }
+
+  static encryptionLevel(attrs) {
+    return new EncryptionLevel(attrs);
+  }
+
+  static enforce(attrs) {
+    return new Enforce(attrs);
+  }
+
+  static equate(attrs) {
+    return new Equate(attrs);
+  }
+
+  static equateRange(attrs) {
+    return new EquateRange(attrs);
+  }
+
+  static exclude(attrs) {
+    return new Exclude(attrs);
+  }
+
+  static excludeNS(attrs) {
+    return new ExcludeNS(attrs);
+  }
+
+  static flipLabel(attrs) {
+    return new FlipLabel(attrs);
+  }
+
+  static fontInfo(attrs) {
+    return new FontInfo(attrs);
+  }
+
+  static formFieldFilling(attrs) {
+    return new FormFieldFilling(attrs);
+  }
+
+  static groupParent(attrs) {
+    return new GroupParent(attrs);
+  }
+
+  static ifEmpty(attrs) {
+    return new IfEmpty(attrs);
+  }
+
+  static includeXDPContent(attrs) {
+    return new IncludeXDPContent(attrs);
+  }
+
+  static incrementalLoad(attrs) {
+    return new IncrementalLoad(attrs);
+  }
+
+  static incrementalMerge(attrs) {
+    return new IncrementalMerge(attrs);
+  }
+
+  static interactive(attrs) {
+    return new Interactive(attrs);
+  }
+
+  static jog(attrs) {
+    return new Jog(attrs);
+  }
+
+  static labelPrinter(attrs) {
+    return new LabelPrinter(attrs);
+  }
+
+  static layout(attrs) {
+    return new Layout(attrs);
+  }
+
+  static level(attrs) {
+    return new Level(attrs);
+  }
+
+  static linearized(attrs) {
+    return new Linearized(attrs);
+  }
+
+  static locale(attrs) {
+    return new Locale(attrs);
+  }
+
+  static localeSet(attrs) {
+    return new LocaleSet(attrs);
+  }
+
+  static log(attrs) {
+    return new Log(attrs);
+  }
+
+  static map(attrs) {
+    return new MapElement(attrs);
+  }
+
+  static mediumInfo(attrs) {
+    return new MediumInfo(attrs);
+  }
+
+  static message(attrs) {
+    return new Message(attrs);
+  }
+
+  static messaging(attrs) {
+    return new Messaging(attrs);
+  }
+
+  static mode(attrs) {
+    return new Mode(attrs);
+  }
+
+  static modifyAnnots(attrs) {
+    return new ModifyAnnots(attrs);
+  }
+
+  static msgId(attrs) {
+    return new MsgId(attrs);
+  }
+
+  static nameAttr(attrs) {
+    return new NameAttr(attrs);
+  }
+
+  static neverEmbed(attrs) {
+    return new NeverEmbed(attrs);
+  }
+
+  static numberOfCopies(attrs) {
+    return new NumberOfCopies(attrs);
+  }
+
+  static openAction(attrs) {
+    return new OpenAction(attrs);
+  }
+
+  static output(attrs) {
+    return new Output(attrs);
+  }
+
+  static outputBin(attrs) {
+    return new OutputBin(attrs);
+  }
+
+  static outputXSL(attrs) {
+    return new OutputXSL(attrs);
+  }
+
+  static overprint(attrs) {
+    return new Overprint(attrs);
+  }
+
+  static packets(attrs) {
+    return new Packets(attrs);
+  }
+
+  static pageOffset(attrs) {
+    return new PageOffset(attrs);
+  }
+
+  static pageRange(attrs) {
+    return new PageRange(attrs);
+  }
+
+  static pagination(attrs) {
+    return new Pagination(attrs);
+  }
+
+  static paginationOverride(attrs) {
+    return new PaginationOverride(attrs);
+  }
+
+  static part(attrs) {
+    return new Part(attrs);
+  }
+
+  static pcl(attrs) {
+    return new Pcl(attrs);
+  }
+
+  static pdf(attrs) {
+    return new Pdf(attrs);
+  }
+
+  static pdfa(attrs) {
+    return new Pdfa(attrs);
+  }
+
+  static permissions(attrs) {
+    return new Permissions(attrs);
+  }
+
+  static pickTrayByPDFSize(attrs) {
+    return new PickTrayByPDFSize(attrs);
+  }
+
+  static picture(attrs) {
+    return new Picture(attrs);
+  }
+
+  static plaintextMetadata(attrs) {
+    return new PlaintextMetadata(attrs);
+  }
+
+  static presence(attrs) {
+    return new Presence(attrs);
+  }
+
+  static present(attrs) {
+    return new Present(attrs);
+  }
+
+  static print(attrs) {
+    return new Print(attrs);
+  }
+
+  static printHighQuality(attrs) {
+    return new PrintHighQuality(attrs);
+  }
+
+  static printScaling(attrs) {
+    return new PrintScaling(attrs);
+  }
+
+  static printerName(attrs) {
+    return new PrinterName(attrs);
+  }
+
+  static producer(attrs) {
+    return new Producer(attrs);
+  }
+
+  static ps(attrs) {
+    return new Ps(attrs);
+  }
+
+  static range(attrs) {
+    return new Range(attrs);
+  }
+
+  static record(attrs) {
+    return new Record(attrs);
+  }
+
+  static relevant(attrs) {
+    return new Relevant(attrs);
+  }
+
+  static rename(attrs) {
+    return new Rename(attrs);
+  }
+
+  static renderPolicy(attrs) {
+    return new RenderPolicy(attrs);
+  }
+
+  static runScripts(attrs) {
+    return new RunScripts(attrs);
+  }
+
+  static script(attrs) {
+    return new Script(attrs);
+  }
+
+  static scriptModel(attrs) {
+    return new ScriptModel(attrs);
+  }
+
+  static severity(attrs) {
+    return new Severity(attrs);
+  }
+
+  static silentPrint(attrs) {
+    return new SilentPrint(attrs);
+  }
+
+  static staple(attrs) {
+    return new Staple(attrs);
+  }
+
+  static startNode(attrs) {
+    return new StartNode(attrs);
+  }
+
+  static startPage(attrs) {
+    return new StartPage(attrs);
+  }
+
+  static submitFormat(attrs) {
+    return new SubmitFormat(attrs);
+  }
+
+  static submitUrl(attrs) {
+    return new SubmitUrl(attrs);
+  }
+
+  static subsetBelow(attrs) {
+    return new SubsetBelow(attrs);
+  }
+
+  static suppressBanner(attrs) {
+    return new SuppressBanner(attrs);
+  }
+
+  static tagged(attrs) {
+    return new Tagged(attrs);
+  }
+
+  static template(attrs) {
+    return new Template(attrs);
+  }
+
+  static templateCache(attrs) {
+    return new TemplateCache(attrs);
+  }
+
+  static threshold(attrs) {
+    return new Threshold(attrs);
+  }
+
+  static to(attrs) {
+    return new To(attrs);
+  }
+
+  static trace(attrs) {
+    return new Trace(attrs);
+  }
+
+  static transform(attrs) {
+    return new Transform(attrs);
+  }
+
+  static type(attrs) {
+    return new Type(attrs);
+  }
+
+  static uri(attrs) {
+    return new Uri(attrs);
+  }
+
+  static validate(attrs) {
+    return new Validate(attrs);
+  }
+
+  static validateApprovalSignatures(attrs) {
+    return new ValidateApprovalSignatures(attrs);
+  }
+
+  static validationMessaging(attrs) {
+    return new ValidationMessaging(attrs);
+  }
+
+  static version(attrs) {
+    return new Version(attrs);
+  }
+
+  static versionControl(attrs) {
+    return new VersionControl(attrs);
+  }
+
+  static viewerPreferences(attrs) {
+    return new ViewerPreferences(attrs);
+  }
+
+  static webClient(attrs) {
+    return new WebClient(attrs);
+  }
+
+  static whitespace(attrs) {
+    return new Whitespace(attrs);
+  }
+
+  static window(attrs) {
+    return new Window(attrs);
+  }
+
+  static xdc(attrs) {
+    return new Xdc(attrs);
+  }
+
+  static xdp(attrs) {
+    return new Xdp(attrs);
+  }
+
+  static xsl(attrs) {
+    return new Xsl(attrs);
+  }
+
+  static zpl(attrs) {
+    return new Zpl(attrs);
+  }
+
+}
+
+exports.ConfigNamespace = ConfigNamespace;
+
+/***/ }),
+/* 61 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports.ConnectionSetNamespace = void 0;
+
+var _namespaces = __w_pdfjs_require__(52);
+
+var _xfa_object = __w_pdfjs_require__(50);
+
+const CONNECTION_SET_NS_ID = _namespaces.NamespaceIds.connectionSet.id;
+
+class ConnectionSet extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONNECTION_SET_NS_ID, "connectionSet", true);
+    this.wsdlConnection = new _xfa_object.XFAObjectArray();
+    this.xmlConnection = new _xfa_object.XFAObjectArray();
+    this.xsdConnection = new _xfa_object.XFAObjectArray();
+  }
+
+}
+
+class EffectiveInputPolicy extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONNECTION_SET_NS_ID, "effectiveInputPolicy");
+    this.id = attributes.id || "";
+    this.name = attributes.name || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+  }
+
+}
+
+class EffectiveOutputPolicy extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONNECTION_SET_NS_ID, "effectiveOutputPolicy");
+    this.id = attributes.id || "";
+    this.name = attributes.name || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+  }
+
+}
+
+class Operation extends _xfa_object.StringObject {
+  constructor(attributes) {
+    super(CONNECTION_SET_NS_ID, "operation");
+    this.id = attributes.id || "";
+    this.input = attributes.input || "";
+    this.name = attributes.name || "";
+    this.output = attributes.output || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+  }
+
+}
+
+class RootElement extends _xfa_object.StringObject {
+  constructor(attributes) {
+    super(CONNECTION_SET_NS_ID, "rootElement");
+    this.id = attributes.id || "";
+    this.name = attributes.name || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+  }
+
+}
+
+class SoapAction extends _xfa_object.StringObject {
+  constructor(attributes) {
+    super(CONNECTION_SET_NS_ID, "soapAction");
+    this.id = attributes.id || "";
+    this.name = attributes.name || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+  }
+
+}
+
+class SoapAddress extends _xfa_object.StringObject {
+  constructor(attributes) {
+    super(CONNECTION_SET_NS_ID, "soapAddress");
+    this.id = attributes.id || "";
+    this.name = attributes.name || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+  }
+
+}
+
+class Uri extends _xfa_object.StringObject {
+  constructor(attributes) {
+    super(CONNECTION_SET_NS_ID, "uri");
+    this.id = attributes.id || "";
+    this.name = attributes.name || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+  }
+
+}
+
+class WsdlAddress extends _xfa_object.StringObject {
+  constructor(attributes) {
+    super(CONNECTION_SET_NS_ID, "wsdlAddress");
+    this.id = attributes.id || "";
+    this.name = attributes.name || "";
+    this.use = attributes.use || "";
+    this.usehref = attributes.usehref || "";
+  }
+
+}
+
+class WsdlConnection extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONNECTION_SET_NS_ID, "wsdlConnection", true);
+    this.dataDescription = attributes.dataDescription || "";
+    this.name = attributes.name || "";
+    this.effectiveInputPolicy = null;
+    this.effectiveOutputPolicy = null;
+    this.operation = null;
+    this.soapAction = null;
+    this.soapAddress = null;
+    this.wsdlAddress = null;
+  }
+
+}
+
+class XmlConnection extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONNECTION_SET_NS_ID, "xmlConnection", true);
+    this.dataDescription = attributes.dataDescription || "";
+    this.name = attributes.name || "";
+    this.uri = null;
+  }
+
+}
+
+class XsdConnection extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(CONNECTION_SET_NS_ID, "xsdConnection", true);
+    this.dataDescription = attributes.dataDescription || "";
+    this.name = attributes.name || "";
+    this.rootElement = null;
+    this.uri = null;
+  }
+
+}
+
+class ConnectionSetNamespace {
+  static [_namespaces.$buildXFAObject](name, attributes) {
+    if (ConnectionSetNamespace.hasOwnProperty(name)) {
+      return ConnectionSetNamespace[name](attributes);
+    }
+
+    return undefined;
+  }
+
+  static connectionSet(attrs) {
+    return new ConnectionSet(attrs);
+  }
+
+  static effectiveInputPolicy(attrs) {
+    return new EffectiveInputPolicy(attrs);
+  }
+
+  static effectiveOutputPolicy(attrs) {
+    return new EffectiveOutputPolicy(attrs);
+  }
+
+  static operation(attrs) {
+    return new Operation(attrs);
+  }
+
+  static rootElement(attrs) {
+    return new RootElement(attrs);
+  }
+
+  static soapAction(attrs) {
+    return new SoapAction(attrs);
+  }
+
+  static soapAddress(attrs) {
+    return new SoapAddress(attrs);
+  }
+
+  static uri(attrs) {
+    return new Uri(attrs);
+  }
+
+  static wsdlAddress(attrs) {
+    return new WsdlAddress(attrs);
+  }
+
+  static wsdlConnection(attrs) {
+    return new WsdlConnection(attrs);
+  }
+
+  static xmlConnection(attrs) {
+    return new XmlConnection(attrs);
+  }
+
+  static xsdConnection(attrs) {
+    return new XsdConnection(attrs);
+  }
+
+}
+
+exports.ConnectionSetNamespace = ConnectionSetNamespace;
+
+/***/ }),
+/* 62 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports.DatasetsNamespace = void 0;
+
+var _xfa_object = __w_pdfjs_require__(50);
+
+var _namespaces = __w_pdfjs_require__(52);
+
+const DATASETS_NS_ID = _namespaces.NamespaceIds.datasets.id;
+
+class Data extends _xfa_object.XmlObject {
+  constructor(attributes) {
+    super(DATASETS_NS_ID, "data", attributes);
+  }
+
+}
+
+class Datasets extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(DATASETS_NS_ID, "datasets", true);
+    this.data = null;
+    this.Signature = null;
+  }
+
+  [_xfa_object.$onChild](child) {
+    const name = child[_xfa_object.$nodeName];
+
+    if (name === "data" && child[_xfa_object.$namespaceId] === DATASETS_NS_ID || name === "Signature" && 
child[_xfa_object.$namespaceId] === _namespaces.NamespaceIds.signature.id) {
+      this[name] = child;
+    } else {
+      child[_xfa_object.$global] = true;
+    }
+
+    this[_xfa_object.$appendChild](child);
+  }
+
+}
+
+class DatasetsNamespace {
+  static [_namespaces.$buildXFAObject](name, attributes) {
+    if (DatasetsNamespace.hasOwnProperty(name)) {
+      return DatasetsNamespace[name](attributes);
+    }
+
+    return undefined;
+  }
+
+  static datasets(attributes) {
+    return new Datasets(attributes);
+  }
+
+  static data(attributes) {
+    return new Data(attributes);
+  }
+
+}
+
+exports.DatasetsNamespace = DatasetsNamespace;
+
+/***/ }),
+/* 63 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports.LocaleSetNamespace = void 0;
+
+var _namespaces = __w_pdfjs_require__(52);
+
+var _xfa_object = __w_pdfjs_require__(50);
+
+var _utils = __w_pdfjs_require__(51);
+
+const LOCALE_SET_NS_ID = _namespaces.NamespaceIds.localeSet.id;
+
+class CalendarSymbols extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(LOCALE_SET_NS_ID, "calendarSymbols", true);
+    this.name = "gregorian";
+    this.dayNames = new _xfa_object.XFAObjectArray(2);
+    this.eraNames = null;
+    this.meridiemNames = null;
+    this.monthNames = new _xfa_object.XFAObjectArray(2);
+  }
+
+}
+
+class CurrencySymbol extends _xfa_object.StringObject {
+  constructor(attributes) {
+    super(LOCALE_SET_NS_ID, "currencySymbol");
+    this.name = (0, _utils.getStringOption)(attributes.name, ["symbol", "isoname", "decimal"]);
+  }
+
+}
+
+class CurrencySymbols extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(LOCALE_SET_NS_ID, "currencySymbols", true);
+    this.currencySymbol = new _xfa_object.XFAObjectArray(3);
+  }
+
+}
+
+class DatePattern extends _xfa_object.StringObject {
+  constructor(attributes) {
+    super(LOCALE_SET_NS_ID, "datePattern");
+    this.name = (0, _utils.getStringOption)(attributes.name, ["full", "long", "med", "short"]);
+  }
+
+}
+
+class DatePatterns extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(LOCALE_SET_NS_ID, "datePatterns", true);
+    this.datePattern = new _xfa_object.XFAObjectArray(4);
+  }
+
+}
+
+class DateTimeSymbols extends _xfa_object.ContentObject {
+  constructor(attributes) {
+    super(LOCALE_SET_NS_ID, "dateTimeSymbols");
+  }
+
+}
+
+class Day extends _xfa_object.StringObject {
+  constructor(attributes) {
+    super(LOCALE_SET_NS_ID, "day");
+  }
+
+}
+
+class DayNames extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(LOCALE_SET_NS_ID, "dayNames", true);
+    this.abbr = (0, _utils.getInteger)({
+      data: attributes.abbr,
+      defaultValue: 0,
+      validate: x => x === 1
+    });
+    this.day = new _xfa_object.XFAObjectArray(7);
+  }
+
+}
+
+class Era extends _xfa_object.StringObject {
+  constructor(attributes) {
+    super(LOCALE_SET_NS_ID, "era");
+  }
+
+}
+
+class EraNames extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(LOCALE_SET_NS_ID, "eraNames", true);
+    this.era = new _xfa_object.XFAObjectArray(2);
+  }
+
+}
+
+class Locale extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(LOCALE_SET_NS_ID, "locale", true);
+    this.desc = attributes.desc || "";
+    this.name = "isoname";
+    this.calendarSymbols = null;
+    this.currencySymbols = null;
+    this.datePatterns = null;
+    this.dateTimeSymbols = null;
+    this.numberPatterns = null;
+    this.numberSymbols = null;
+    this.timePatterns = null;
+    this.typeFaces = null;
+  }
+
+}
+
+class LocaleSet extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(LOCALE_SET_NS_ID, "localeSet", true);
+    this.locale = new _xfa_object.XFAObjectArray();
+  }
+
+}
+
+class Meridiem extends _xfa_object.StringObject {
+  constructor(attributes) {
+    super(LOCALE_SET_NS_ID, "meridiem");
+  }
+
+}
+
+class MeridiemNames extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(LOCALE_SET_NS_ID, "meridiemNames", true);
+    this.meridiem = new _xfa_object.XFAObjectArray(2);
+  }
+
+}
+
+class Month extends _xfa_object.StringObject {
+  constructor(attributes) {
+    super(LOCALE_SET_NS_ID, "month");
+  }
+
+}
+
+class MonthNames extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(LOCALE_SET_NS_ID, "monthNames", true);
+    this.abbr = (0, _utils.getInteger)({
+      data: attributes.abbr,
+      defaultValue: 0,
+      validate: x => x === 1
+    });
+    this.month = new _xfa_object.XFAObjectArray(12);
+  }
+
+}
+
+class NumberPattern extends _xfa_object.StringObject {
+  constructor(attributes) {
+    super(LOCALE_SET_NS_ID, "numberPattern");
+    this.name = (0, _utils.getStringOption)(attributes.name, ["full", "long", "med", "short"]);
+  }
+
+}
+
+class NumberPatterns extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(LOCALE_SET_NS_ID, "numberPatterns", true);
+    this.numberPattern = new _xfa_object.XFAObjectArray(4);
+  }
+
+}
+
+class NumberSymbol extends _xfa_object.StringObject {
+  constructor(attributes) {
+    super(LOCALE_SET_NS_ID, "numberSymbol");
+    this.name = (0, _utils.getStringOption)(attributes.name, ["decimal", "grouping", "percent", "minus", 
"zero"]);
+  }
+
+}
+
+class NumberSymbols extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(LOCALE_SET_NS_ID, "numberSymbols", true);
+    this.numberSymbol = new _xfa_object.XFAObjectArray(5);
+  }
+
+}
+
+class TimePattern extends _xfa_object.StringObject {
+  constructor(attributes) {
+    super(LOCALE_SET_NS_ID, "timePattern");
+    this.name = (0, _utils.getStringOption)(attributes.name, ["full", "long", "med", "short"]);
+  }
+
+}
+
+class TimePatterns extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(LOCALE_SET_NS_ID, "timePatterns", true);
+    this.timePattern = new _xfa_object.XFAObjectArray(4);
+  }
+
+}
+
+class TypeFace extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(LOCALE_SET_NS_ID, "typeFace", true);
+    this.name = attributes.name | "";
+  }
+
+}
+
+class TypeFaces extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(LOCALE_SET_NS_ID, "typeFaces", true);
+    this.typeFace = new _xfa_object.XFAObjectArray();
+  }
+
+}
+
+class LocaleSetNamespace {
+  static [_namespaces.$buildXFAObject](name, attributes) {
+    if (LocaleSetNamespace.hasOwnProperty(name)) {
+      return LocaleSetNamespace[name](attributes);
+    }
+
+    return undefined;
+  }
+
+  static calendarSymbols(attrs) {
+    return new CalendarSymbols(attrs);
+  }
+
+  static currencySymbol(attrs) {
+    return new CurrencySymbol(attrs);
+  }
+
+  static currencySymbols(attrs) {
+    return new CurrencySymbols(attrs);
+  }
+
+  static datePattern(attrs) {
+    return new DatePattern(attrs);
+  }
+
+  static datePatterns(attrs) {
+    return new DatePatterns(attrs);
+  }
+
+  static dateTimeSymbols(attrs) {
+    return new DateTimeSymbols(attrs);
+  }
+
+  static day(attrs) {
+    return new Day(attrs);
+  }
+
+  static dayNames(attrs) {
+    return new DayNames(attrs);
+  }
+
+  static era(attrs) {
+    return new Era(attrs);
+  }
+
+  static eraNames(attrs) {
+    return new EraNames(attrs);
+  }
+
+  static locale(attrs) {
+    return new Locale(attrs);
+  }
+
+  static localeSet(attrs) {
+    return new LocaleSet(attrs);
+  }
+
+  static meridiem(attrs) {
+    return new Meridiem(attrs);
+  }
+
+  static meridiemNames(attrs) {
+    return new MeridiemNames(attrs);
+  }
+
+  static month(attrs) {
+    return new Month(attrs);
+  }
+
+  static monthNames(attrs) {
+    return new MonthNames(attrs);
+  }
+
+  static numberPattern(attrs) {
+    return new NumberPattern(attrs);
+  }
+
+  static numberPatterns(attrs) {
+    return new NumberPatterns(attrs);
+  }
+
+  static numberSymbol(attrs) {
+    return new NumberSymbol(attrs);
+  }
+
+  static numberSymbols(attrs) {
+    return new NumberSymbols(attrs);
+  }
+
+  static timePattern(attrs) {
+    return new TimePattern(attrs);
+  }
+
+  static timePatterns(attrs) {
+    return new TimePatterns(attrs);
+  }
+
+  static typeFace(attrs) {
+    return new TypeFace(attrs);
+  }
+
+  static typeFaces(attrs) {
+    return new TypeFaces(attrs);
+  }
+
+}
+
+exports.LocaleSetNamespace = LocaleSetNamespace;
+
+/***/ }),
+/* 64 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports.SignatureNamespace = void 0;
 
-      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] = isIndexed ? (dmax - dmin) / max : dmax - dmin;
-        this.decodeAddends[j] = isIndexed ? dmin : max * dmin;
-      }
-    }
+var _namespaces = __w_pdfjs_require__(52);
 
-    if (smask) {
-      this.smask = new PDFImage({
-        xref,
-        res,
-        image: smask,
-        isInline,
-        pdfFunctionFactory,
-        localColorSpaceCache
-      });
-    } else if (mask) {
-      if ((0, _primitives.isStream)(mask)) {
-        var maskDict = mask.dict,
-            imageMask = maskDict.get("ImageMask", "IM");
+var _xfa_object = __w_pdfjs_require__(50);
 
-        if (!imageMask) {
-          (0, _util.warn)("Ignoring /Mask in image without /ImageMask.");
-        } else {
-          this.mask = new PDFImage({
-            xref,
-            res,
-            image: mask,
-            isInline,
-            isMask: true,
-            pdfFunctionFactory,
-            localColorSpaceCache
-          });
-        }
-      } else {
-        this.mask = mask;
-      }
-    }
+const SIGNATURE_NS_ID = _namespaces.NamespaceIds.signature.id;
+
+class Signature extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(SIGNATURE_NS_ID, "signature", true);
   }
 
-  static async buildImage({
-    xref,
-    res,
-    image,
-    isInline = false,
-    pdfFunctionFactory,
-    localColorSpaceCache
-  }) {
-    const imageData = image;
-    let smaskData = null;
-    let maskData = null;
-    const smask = image.dict.get("SMask");
-    const mask = image.dict.get("Mask");
+}
 
-    if (smask) {
-      smaskData = smask;
-    } else if (mask) {
-      if ((0, _primitives.isStream)(mask) || Array.isArray(mask)) {
-        maskData = mask;
-      } else {
-        (0, _util.warn)("Unsupported mask format.");
-      }
+class SignatureNamespace {
+  static [_namespaces.$buildXFAObject](name, attributes) {
+    if (SignatureNamespace.hasOwnProperty(name)) {
+      return SignatureNamespace[name](attributes);
     }
 
-    return new PDFImage({
-      xref,
-      res,
-      image: imageData,
-      isInline,
-      smask: smaskData,
-      mask: maskData,
-      pdfFunctionFactory,
-      localColorSpaceCache
-    });
+    return undefined;
   }
 
-  static createMask({
-    imgArray,
-    width,
-    height,
-    imageIsFromDecodeStream,
-    inverseDecode
-  }) {
-    var computedLength = (width + 7 >> 3) * height;
-    var actualLength = imgArray.byteLength;
-    var haveFullData = computedLength === actualLength;
-    var data, i;
+  static signature(attributes) {
+    return new Signature(attributes);
+  }
 
-    if (imageIsFromDecodeStream && (!inverseDecode || haveFullData)) {
-      data = imgArray;
-    } else if (!inverseDecode) {
-      data = new Uint8ClampedArray(actualLength);
-      data.set(imgArray);
-    } else {
-      data = new Uint8ClampedArray(computedLength);
-      data.set(imgArray);
+}
 
-      for (i = actualLength; i < computedLength; i++) {
-        data[i] = 0xff;
-      }
-    }
+exports.SignatureNamespace = SignatureNamespace;
 
-    if (inverseDecode) {
-      for (i = 0; i < actualLength; i++) {
-        data[i] ^= 0xff;
-      }
+/***/ }),
+/* 65 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports.StylesheetNamespace = void 0;
+
+var _namespaces = __w_pdfjs_require__(52);
+
+var _xfa_object = __w_pdfjs_require__(50);
+
+const STYLESHEET_NS_ID = _namespaces.NamespaceIds.stylesheet.id;
+
+class Stylesheet extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(STYLESHEET_NS_ID, "stylesheet", true);
+  }
+
+}
+
+class StylesheetNamespace {
+  static [_namespaces.$buildXFAObject](name, attributes) {
+    if (StylesheetNamespace.hasOwnProperty(name)) {
+      return StylesheetNamespace[name](attributes);
     }
 
-    return {
-      data,
-      width,
-      height
-    };
+    return undefined;
   }
 
-  get drawWidth() {
-    return Math.max(this.width, this.smask && this.smask.width || 0, this.mask && this.mask.width || 0);
+  static stylesheet(attributes) {
+    return new Stylesheet(attributes);
   }
 
-  get drawHeight() {
-    return Math.max(this.height, this.smask && this.smask.height || 0, this.mask && this.mask.height || 0);
+}
+
+exports.StylesheetNamespace = StylesheetNamespace;
+
+/***/ }),
+/* 66 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports.XdpNamespace = void 0;
+
+var _namespaces = __w_pdfjs_require__(52);
+
+var _xfa_object = __w_pdfjs_require__(50);
+
+const XDP_NS_ID = _namespaces.NamespaceIds.xdp.id;
+
+class Xdp extends _xfa_object.XFAObject {
+  constructor(attributes) {
+    super(XDP_NS_ID, "xdp", true);
+    this.uuid = attributes.uuid || "";
+    this.timeStamp = attributes.timeStamp || "";
+    this.config = null;
+    this.connectionSet = null;
+    this.datasets = null;
+    this.localeSet = null;
+    this.stylesheet = new _xfa_object.XFAObjectArray();
+    this.template = null;
   }
 
-  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;
+  [_xfa_object.$onChildCheck](child) {
+    const ns = _namespaces.NamespaceIds[child[_xfa_object.$nodeName]];
+    return ns && child[_xfa_object.$namespaceId] === ns.id;
+  }
 
-    if (bpc === 1) {
-      for (i = 0, ii = buffer.length; i < ii; i++) {
-        buffer[i] = +!buffer[i];
-      }
+}
 
-      return;
+class XdpNamespace {
+  static [_namespaces.$buildXFAObject](name, attributes) {
+    if (XdpNamespace.hasOwnProperty(name)) {
+      return XdpNamespace[name](attributes);
     }
 
-    var index = 0;
+    return undefined;
+  }
 
-    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++;
-      }
-    }
+  static xdp(attributes) {
+    return new Xdp(attributes);
   }
 
-  getComponents(buffer) {
-    var bpc = this.bpc;
+}
 
-    if (bpc === 8) {
-      return buffer;
-    }
+exports.XdpNamespace = XdpNamespace;
 
-    var width = this.width;
-    var height = this.height;
-    var numComps = this.numComps;
-    var length = width * height * numComps;
-    var bufferPos = 0;
-    let output;
+/***/ }),
+/* 67 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-    if (bpc <= 8) {
-      output = new Uint8Array(length);
-    } else if (bpc <= 16) {
-      output = new Uint16Array(length);
-    } else {
-      output = new Uint32Array(length);
-    }
 
-    var rowComps = width * numComps;
-    var max = (1 << bpc) - 1;
-    var i = 0,
-        ii,
-        buf;
 
-    if (bpc === 1) {
-      var mask, loop1End, loop2End;
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports.XhtmlNamespace = void 0;
 
-      for (var j = 0; j < height; j++) {
-        loop1End = i + (rowComps & ~7);
-        loop2End = i + rowComps;
+var _namespaces = __w_pdfjs_require__(52);
 
-        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;
-        }
+var _xfa_object = __w_pdfjs_require__(50);
 
-        if (i < loop2End) {
-          buf = buffer[bufferPos++];
-          mask = 128;
+const XHTML_NS_ID = _namespaces.NamespaceIds.xhtml.id;
+const VALID_STYLES = new Set(["color", "font", "font-family", "font-size", "font-stretch", "font-style", 
"font-weight", "margin", "margin-bottom", "margin-left", "margin-right", "margin-top", "letter-spacing", 
"line-height", "orphans", "page-break-after", "page-break-before", "page-break-inside", "tab-interval", 
"tab-stop", "text-decoration", "text-indent", "vertical-align", "widows", "kerning-mode", 
"xfa-font-horizontal-scale", "xfa-font-vertical-scale", "xfa-tab-stops"]);
 
-          while (i < loop2End) {
-            output[i++] = +!!(buf & mask);
-            mask >>= 1;
-          }
-        }
-      }
-    } else {
-      var bits = 0;
-      buf = 0;
+function checkStyle(style) {
+  if (!style) {
+    return "";
+  }
 
-      for (i = 0, ii = length; i < ii; ++i) {
-        if (i % rowComps === 0) {
-          buf = 0;
-          bits = 0;
-        }
+  return style.trim().split(/\s*;\s*/).filter(s => !!s).map(s => s.split(/\s*:\s*/, 2)).filter(([key]) => 
VALID_STYLES.has(key)).map(kv => kv.join(":")).join(";");
+}
 
-        while (bits < bpc) {
-          buf = buf << 8 | buffer[bufferPos++];
-          bits += 8;
-        }
+class A extends _xfa_object.XmlObject {
+  constructor(attributes) {
+    super(XHTML_NS_ID, "a");
+    this.href = attributes.href || "";
+    this.style = checkStyle(attributes.style);
+  }
 
-        var remainingBits = bits - bpc;
-        let value = buf >> remainingBits;
+}
 
-        if (value < 0) {
-          value = 0;
-        } else if (value > max) {
-          value = max;
-        }
+class B extends _xfa_object.XmlObject {
+  constructor(attributes) {
+    super(XHTML_NS_ID, "b");
+    this.style = checkStyle(attributes.style);
+  }
 
-        output[i] = value;
-        buf = buf & (1 << remainingBits) - 1;
-        bits = remainingBits;
-      }
-    }
+}
 
-    return output;
+class Body extends _xfa_object.XmlObject {
+  constructor(attributes) {
+    super(XHTML_NS_ID, "body");
+    this.style = checkStyle(attributes.style);
   }
 
-  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 Uint8ClampedArray(sw * sh);
-      smask.fillGrayBuffer(alphaBuf);
+class Br extends _xfa_object.XmlObject {
+  constructor(attributes) {
+    super(XHTML_NS_ID, "br");
+    this.style = checkStyle(attributes.style);
+  }
 
-      if (sw !== width || sh !== height) {
-        alphaBuf = resizeImageMask(alphaBuf, smask.bpc, sw, sh, width, height);
-      }
-    } else if (mask) {
-      if (mask instanceof PDFImage) {
-        sw = mask.width;
-        sh = mask.height;
-        alphaBuf = new Uint8ClampedArray(sw * sh);
-        mask.numComps = 1;
-        mask.fillGrayBuffer(alphaBuf);
+  [_xfa_object.$text]() {
+    return "\n";
+  }
 
-        for (i = 0, ii = sw * sh; i < ii; ++i) {
-          alphaBuf[i] = 255 - alphaBuf[i];
-        }
+}
 
-        if (sw !== width || sh !== height) {
-          alphaBuf = resizeImageMask(alphaBuf, mask.bpc, sw, sh, width, height);
-        }
-      } else if (Array.isArray(mask)) {
-        alphaBuf = new Uint8ClampedArray(width * height);
-        var numComps = this.numComps;
+class Html extends _xfa_object.XmlObject {
+  constructor(attributes) {
+    super(XHTML_NS_ID, "html");
+    this.style = checkStyle(attributes.style);
+  }
 
-        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;
+class I extends _xfa_object.XmlObject {
+  constructor(attributes) {
+    super(XHTML_NS_ID, "i");
+    this.style = checkStyle(attributes.style);
+  }
 
-            if (color < mask[maskOffset] || color > mask[maskOffset + 1]) {
-              opacity = 255;
-              break;
-            }
-          }
+}
 
-          alphaBuf[i] = opacity;
-        }
-      } else {
-        throw new _util.FormatError("Unknown mask format.");
-      }
-    }
+class Li extends _xfa_object.XmlObject {
+  constructor(attributes) {
+    super(XHTML_NS_ID, "li");
+    this.style = checkStyle(attributes.style);
+  }
 
-    if (alphaBuf) {
-      for (i = 0, j = 3, ii = width * actualHeight; i < ii; ++i, j += 4) {
-        rgbaBuf[j] = alphaBuf[i];
-      }
-    } else {
-      for (i = 0, j = 3, ii = width * actualHeight; i < ii; ++i, j += 4) {
-        rgbaBuf[j] = 255;
-      }
-    }
+}
+
+class Ol extends _xfa_object.XmlObject {
+  constructor(attributes) {
+    super(XHTML_NS_ID, "ol");
+    this.style = checkStyle(attributes.style);
   }
 
-  undoPreblend(buffer, width, height) {
-    var matte = this.smask && this.smask.matte;
+}
 
-    if (!matte) {
-      return;
-    }
+class P extends _xfa_object.XmlObject {
+  constructor(attributes) {
+    super(XHTML_NS_ID, "p");
+    this.style = checkStyle(attributes.style);
+  }
 
-    var matteRgb = this.colorSpace.getRgb(matte, 0);
-    var matteR = matteRgb[0];
-    var matteG = matteRgb[1];
-    var matteB = matteRgb[2];
-    var length = width * height * 4;
+}
 
-    for (var i = 0; i < length; i += 4) {
-      var alpha = buffer[i + 3];
+class Span extends _xfa_object.XmlObject {
+  constructor(attributes) {
+    super(XHTML_NS_ID, "span");
+    this.style = checkStyle(attributes.style);
+  }
 
-      if (alpha === 0) {
-        buffer[i] = 255;
-        buffer[i + 1] = 255;
-        buffer[i + 2] = 255;
-        continue;
-      }
+}
 
-      var k = 255 / alpha;
-      buffer[i] = (buffer[i] - matteR) * k + matteR;
-      buffer[i + 1] = (buffer[i + 1] - matteG) * k + matteG;
-      buffer[i + 2] = (buffer[i + 2] - matteB) * k + matteB;
-    }
+class Sub extends _xfa_object.XmlObject {
+  constructor(attributes) {
+    super(XHTML_NS_ID, "sub");
+    this.style = checkStyle(attributes.style);
   }
 
-  createImageData(forceRGBA = false) {
-    var drawWidth = this.drawWidth;
-    var drawHeight = this.drawHeight;
-    var imgData = {
-      width: drawWidth,
-      height: drawHeight,
-      kind: 0,
-      data: null
-    };
-    var numComps = this.numComps;
-    var originalWidth = this.width;
-    var originalHeight = this.height;
-    var bpc = this.bpc;
-    var rowBytes = originalWidth * numComps * bpc + 7 >> 3;
-    var imgArray;
+}
 
-    if (!forceRGBA) {
-      var kind;
+class Sup extends _xfa_object.XmlObject {
+  constructor(attributes) {
+    super(XHTML_NS_ID, "sup");
+    this.style = checkStyle(attributes.style);
+  }
 
-      if (this.colorSpace.name === "DeviceGray" && bpc === 1) {
-        kind = _util.ImageKind.GRAYSCALE_1BPP;
-      } else if (this.colorSpace.name === "DeviceRGB" && bpc === 8 && !this.needsDecode) {
-        kind = _util.ImageKind.RGB_24BPP;
-      }
+}
 
-      if (kind && !this.smask && !this.mask && drawWidth === originalWidth && drawHeight === originalHeight) 
{
-        imgData.kind = kind;
-        imgArray = this.getImageBytes(originalHeight * rowBytes);
+class Ul extends _xfa_object.XmlObject {
+  constructor(attributes) {
+    super(XHTML_NS_ID, "ul");
+    this.style = checkStyle(attributes.style);
+  }
 
-        if (this.image instanceof _stream.DecodeStream) {
-          imgData.data = imgArray;
-        } else {
-          var newArray = new Uint8ClampedArray(imgArray.length);
-          newArray.set(imgArray);
-          imgData.data = newArray;
-        }
+}
 
-        if (this.needsDecode) {
-          (0, _util.assert)(kind === _util.ImageKind.GRAYSCALE_1BPP, "PDFImage.createImageData: The image 
must be grayscale.");
-          var buffer = imgData.data;
+class XhtmlNamespace {
+  static [_namespaces.$buildXFAObject](name, attributes) {
+    if (XhtmlNamespace.hasOwnProperty(name)) {
+      return XhtmlNamespace[name](attributes);
+    }
 
-          for (var i = 0, ii = buffer.length; i < ii; i++) {
-            buffer[i] ^= 0xff;
-          }
-        }
+    return undefined;
+  }
 
-        return imgData;
-      }
+  static a(attributes) {
+    return new A(attributes);
+  }
 
-      if (this.image instanceof _jpeg_stream.JpegStream && !this.smask && !this.mask) {
-        let imageLength = originalHeight * rowBytes;
+  static b(attributes) {
+    return new B(attributes);
+  }
 
-        switch (this.colorSpace.name) {
-          case "DeviceGray":
-            imageLength *= 3;
+  static body(attributes) {
+    return new Body(attributes);
+  }
 
-          case "DeviceRGB":
-          case "DeviceCMYK":
-            imgData.kind = _util.ImageKind.RGB_24BPP;
-            imgData.data = this.getImageBytes(imageLength, drawWidth, drawHeight, true);
-            return imgData;
-        }
-      }
-    }
+  static br(attributes) {
+    return new Br(attributes);
+  }
 
-    imgArray = this.getImageBytes(originalHeight * rowBytes);
-    var actualHeight = 0 | imgArray.length / rowBytes * drawHeight / originalHeight;
-    var comps = this.getComponents(imgArray);
-    var alpha01, maybeUndoPreblend;
+  static html(attributes) {
+    return new Html(attributes);
+  }
 
-    if (!forceRGBA && !this.smask && !this.mask) {
-      imgData.kind = _util.ImageKind.RGB_24BPP;
-      imgData.data = new Uint8ClampedArray(drawWidth * drawHeight * 3);
-      alpha01 = 0;
-      maybeUndoPreblend = false;
-    } else {
-      imgData.kind = _util.ImageKind.RGBA_32BPP;
-      imgData.data = new Uint8ClampedArray(drawWidth * drawHeight * 4);
-      alpha01 = 1;
-      maybeUndoPreblend = true;
-      this.fillOpacity(imgData.data, drawWidth, drawHeight, actualHeight, comps);
-    }
+  static i(attributes) {
+    return new I(attributes);
+  }
 
-    if (this.needsDecode) {
-      this.decodeBuffer(comps);
-    }
+  static li(attributes) {
+    return new Li(attributes);
+  }
 
-    this.colorSpace.fillRgb(imgData.data, originalWidth, originalHeight, drawWidth, drawHeight, 
actualHeight, bpc, comps, alpha01);
+  static ol(attributes) {
+    return new Ol(attributes);
+  }
 
-    if (maybeUndoPreblend) {
-      this.undoPreblend(imgData.data, drawWidth, actualHeight);
-    }
+  static p(attributes) {
+    return new P(attributes);
+  }
 
-    return imgData;
+  static span(attributes) {
+    return new Span(attributes);
   }
 
-  fillGrayBuffer(buffer) {
-    var numComps = this.numComps;
+  static sub(attributes) {
+    return new Sub(attributes);
+  }
 
-    if (numComps !== 1) {
-      throw new _util.FormatError(`Reading gray scale from a color image: ${numComps}`);
-    }
+  static sup(attributes) {
+    return new Sup(attributes);
+  }
 
-    var width = this.width;
-    var height = this.height;
-    var bpc = this.bpc;
-    var rowBytes = width * numComps * bpc + 7 >> 3;
-    var imgArray = this.getImageBytes(height * rowBytes);
-    var comps = this.getComponents(imgArray);
-    var i, length;
+  static ul(attributes) {
+    return new Ul(attributes);
+  }
 
-    if (bpc === 1) {
-      length = width * height;
+}
 
-      if (this.needsDecode) {
-        for (i = 0; i < length; ++i) {
-          buffer[i] = comps[i] - 1 & 255;
-        }
-      } else {
-        for (i = 0; i < length; ++i) {
-          buffer[i] = -comps[i] & 255;
-        }
-      }
+exports.XhtmlNamespace = XhtmlNamespace;
 
-      return;
-    }
+/***/ }),
+/* 68 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-    if (this.needsDecode) {
-      this.decodeBuffer(comps);
-    }
 
-    length = width * height;
-    var scale = 255 / ((1 << bpc) - 1);
 
-    for (i = 0; i < length; ++i) {
-      buffer[i] = scale * comps[i];
-    }
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports.UnknownNamespace = void 0;
+
+var _namespaces = __w_pdfjs_require__(52);
+
+var _xfa_object = __w_pdfjs_require__(50);
+
+class UnknownNamespace {
+  constructor(nsId) {
+    this.namespaceId = nsId;
   }
 
-  getImageBytes(length, drawWidth, drawHeight, forceRGB = false) {
-    this.image.reset();
-    this.image.drawWidth = drawWidth || this.width;
-    this.image.drawHeight = drawHeight || this.height;
-    this.image.forceRGB = !!forceRGB;
-    return this.image.getBytes(length, true);
+  [_namespaces.$buildXFAObject](name, attributes) {
+    return new _xfa_object.XmlObject(this.namespaceId, name, attributes);
   }
 
 }
 
-exports.PDFImage = PDFImage;
+exports.UnknownNamespace = UnknownNamespace;
 
 /***/ }),
-/* 46 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/* 69 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.MessageHandler = void 0;
 
 var _util = __w_pdfjs_require__(2);
@@ -47480,15 +65056,14 @@ class MessageHandler {
 exports.MessageHandler = MessageHandler;
 
 /***/ }),
-/* 47 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/* 70 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.PDFWorkerStream = void 0;
 
 var _util = __w_pdfjs_require__(2);
@@ -47633,6 +65208,86 @@ class PDFWorkerStreamRangeReader {
 }
 
 /***/ })
-/******/ ]);
+/******/       ]);
+/************************************************************************/
+/******/       // The module cache
+/******/       var __webpack_module_cache__ = {};
+/******/       
+/******/       // The require function
+/******/       function __w_pdfjs_require__(moduleId) {
+/******/               // Check if module is in cache
+/******/               var cachedModule = __webpack_module_cache__[moduleId];
+/******/               if (cachedModule !== undefined) {
+/******/                       return cachedModule.exports;
+/******/               }
+/******/               // Create a new module (and put it into the cache)
+/******/               var module = __webpack_module_cache__[moduleId] = {
+/******/                       // no module.id needed
+/******/                       // no module.loaded needed
+/******/                       exports: {}
+/******/               };
+/******/       
+/******/               // Execute the module function
+/******/               __webpack_modules__[moduleId](module, module.exports, __w_pdfjs_require__);
+/******/       
+/******/               // Return the exports of the module
+/******/               return module.exports;
+/******/       }
+/******/       
+/************************************************************************/
+/******/       /* webpack/runtime/define property getters */
+/******/       (() => {
+/******/               // define getter functions for harmony exports
+/******/               __w_pdfjs_require__.d = (exports, definition) => {
+/******/                       for(var key in definition) {
+/******/                               if(__w_pdfjs_require__.o(definition, key) && 
!__w_pdfjs_require__.o(exports, key)) {
+/******/                                       Object.defineProperty(exports, key, { enumerable: true, get: 
definition[key] });
+/******/                               }
+/******/                       }
+/******/               };
+/******/       })();
+/******/       
+/******/       /* webpack/runtime/hasOwnProperty shorthand */
+/******/       (() => {
+/******/               __w_pdfjs_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, 
prop))
+/******/       })();
+/******/       
+/******/       /* webpack/runtime/make namespace object */
+/******/       (() => {
+/******/               // define __esModule on exports
+/******/               __w_pdfjs_require__.r = (exports) => {
+/******/                       if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/                               Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' 
});
+/******/                       }
+/******/                       Object.defineProperty(exports, '__esModule', { value: true });
+/******/               };
+/******/       })();
+/******/       
+/************************************************************************/
+var __webpack_exports__ = {};
+// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the 
chunk.
+(() => {
+var exports = __webpack_exports__;
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+Object.defineProperty(exports, "WorkerMessageHandler", ({
+  enumerable: true,
+  get: function () {
+    return _worker.WorkerMessageHandler;
+  }
+}));
+
+var _worker = __w_pdfjs_require__(1);
+
+const pdfjsVersion = '2.8.335';
+const pdfjsBuild = '228adbf67';
+})();
+
+/******/       return __webpack_exports__;
+/******/ })()
+;
 });
 //# sourceMappingURL=pdf.worker.js.map
\ No newline at end of file
diff --git a/third-party/pdfjs/epiphany-pdfjs-changes.patch b/third-party/pdfjs/epiphany-pdfjs-changes.patch
index 69f488516..eefde370e 100644
--- a/third-party/pdfjs/epiphany-pdfjs-changes.patch
+++ b/third-party/pdfjs/epiphany-pdfjs-changes.patch
@@ -1,13 +1,14 @@
-diff -urN web2/viewer.css web/viewer.css
---- web2/viewer.css    2020-09-03 23:18:08.000000000 +0200
-+++ web/viewer.css     2021-04-05 11:25:24.181448360 +0200
+diff --git a/third-party/pdfjs/web/viewer.css b/third-party/pdfjs/web/viewer.css
+index 9616f67cd..04c4516e8 100644
+--- a/third-party/pdfjs/web/viewer.css
++++ b/third-party/pdfjs/web/viewer.css
 @@ -1,4 +1,5 @@
  /* Copyright 2014 Mozilla Foundation
 + * Modifications made for Epiphany by Jan-Michael Brummer <jan brummer tabos org>
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
-@@ -2361,6 +2362,7 @@
+@@ -1491,6 +1492,7 @@ html[dir="rtl"] .dropdownToolbarButton::after {
  }
  
  .dropdownToolbarButton > select {
@@ -15,7 +16,7 @@ diff -urN web2/viewer.css web/viewer.css
    width: 162px;
    height: 28px;
    font-size: 12px;
-@@ -3132,6 +3134,7 @@
+@@ -1852,6 +1854,7 @@ html[dir="rtl"] .toolbarField[type="checkbox"] {
  }
  
  .toolbarField.pageNumber {
@@ -23,18 +24,11 @@ diff -urN web2/viewer.css web/viewer.css
    -moz-appearance: textfield; /* hides the spinner in moz */
    min-width: 16px;
    text-align: right;
-diff -urN web2/viewer.html web/viewer.html
---- web2/viewer.html   2020-09-03 23:18:08.000000000 +0200
-+++ web/viewer.html    2021-04-05 11:25:24.181448360 +0200
-@@ -1,6 +1,7 @@
- <!DOCTYPE html>
- <!--
- Copyright 2012 Mozilla Foundation
-+Modifications made for Epiphany by Jan-Michael Brummer <jan brummer tabos org>
- 
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
-@@ -21,14 +22,14 @@
+diff --git a/third-party/pdfjs/web/viewer.html b/third-party/pdfjs/web/viewer.html
+index a6144010e..379e73482 100644
+--- a/third-party/pdfjs/web/viewer.html
++++ b/third-party/pdfjs/web/viewer.html
+@@ -21,14 +21,14 @@ Adobe CMap resources are covered by their own copyright but the same license:
  See https://github.com/adobe-type-tools/cmap-resources
  -->
  <html dir="ltr" mozdisallowselectionprint>
@@ -51,7 +45,7 @@ diff -urN web2/viewer.html web/viewer.html
      <link rel="stylesheet" href="viewer.css">
  
  
-@@ -124,7 +125,7 @@
+@@ -136,7 +136,7 @@ See https://github.com/adobe-type-tools/cmap-resources
                <span data-l10n-id="download_label">Download</span>
              </button>
  
@@ -60,7 +54,7 @@ diff -urN web2/viewer.html web/viewer.html
                <span data-l10n-id="bookmark_label">Current View</span>
              </a>
  
-@@ -226,7 +227,7 @@
+@@ -238,7 +238,7 @@ See https://github.com/adobe-type-tools/cmap-resources
                  <button id="download" class="toolbarButton download hiddenMediumView" title="Download" 
tabindex="34" data-l10n-id="download">
                    <span data-l10n-id="download_label">Download</span>
                  </button>
@@ -69,18 +63,19 @@ diff -urN web2/viewer.html web/viewer.html
                    <span data-l10n-id="bookmark_label">Current View</span>
                  </a>
  
-diff -urN web2/viewer.js web/viewer.js
---- web2/viewer.js     2020-09-03 23:18:20.000000000 +0200
-+++ web/viewer.js      2021-04-05 11:25:24.184448405 +0200
+diff --git a/third-party/pdfjs/web/viewer.js b/third-party/pdfjs/web/viewer.js
+index 5382c3673..28d471e17 100644
+--- a/third-party/pdfjs/web/viewer.js
++++ b/third-party/pdfjs/web/viewer.js
 @@ -3,6 +3,7 @@
   * Javascript code in this page
   *
-  * Copyright 2020 Mozilla Foundation
+  * Copyright 2021 Mozilla Foundation
 + * Modifications made for Epiphany by Jan-Michael Brummer <jan brummer tabos org>
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
-@@ -1973,8 +1974,7 @@
+@@ -2254,8 +2255,7 @@ function webViewerInitialized() {
    let file;
    const queryString = document.location.search.substring(1);
    const params = (0, _ui_utils.parseQueryString)(queryString);
@@ -90,13 +85,13 @@ diff -urN web2/viewer.js web/viewer.js
    const fileInput = document.createElement("input");
    fileInput.id = appConfig.openFileInputName;
    fileInput.className = "fileInput";
-@@ -1982,12 +1982,8 @@
+@@ -2263,12 +2263,8 @@ function webViewerInitialized() {
    fileInput.oncontextmenu = _ui_utils.noContextMenuHandler;
    document.body.appendChild(fileInput);
  
 -  if (!window.File || !window.FileReader || !window.FileList || !window.Blob) {
--    appConfig.toolbar.openFile.setAttribute("hidden", "true");
--    appConfig.secondaryToolbar.openFileButton.setAttribute("hidden", "true");
+-    appConfig.toolbar.openFile.hidden = true;
+-    appConfig.secondaryToolbar.openFileButton.hidden = true;
 -  } else {
 -    fileInput.value = null;
 -  }
@@ -105,7 +100,7 @@ diff -urN web2/viewer.js web/viewer.js
  
    fileInput.addEventListener("change", function (evt) {
      const files = evt.target.files;
-@@ -2049,8 +2045,18 @@
+@@ -2330,8 +2326,18 @@ function webViewerInitialized() {
      }
    }, true);
  
@@ -123,21 +118,14 @@ diff -urN web2/viewer.js web/viewer.js
 +    PDFViewerApplication.open(array);
 +    PDFViewerApplication.setTitleUsingUrl(file_name);
    } catch (reason) {
-     PDFViewerApplication.l10n.get("loading_error", null, "An error occurred while loading the 
PDF.").then(msg => {
-       PDFViewerApplication.error(msg, reason);
-@@ -6877,6 +6883,8 @@
+     PDFViewerApplication.l10n.get("loading_error").then(msg => {
+       PDFViewerApplication._documentError(msg, reason);
+@@ -6404,6 +6410,8 @@ class PDFHistory {
        }
      }
  
-+    // FIXME: This currently breaks Epiphany due to rewriting history with baseUrl
-+    return;
++// FIXME: This currently breaks Epiphany due to rewriting history with baseUrl
++return;
      if (shouldReplace) {
        window.history.replaceState(newState, "", newUrl);
      } else {
-@@ -13897,4 +13905,4 @@
- 
- /***/ })
- /******/ ]);
--//# sourceMappingURL=viewer.js.map
-\ Kein Zeilenumbruch am Dateiende.
-+//# sourceMappingURL=viewer.js.map
diff --git a/third-party/pdfjs/pdfjs.gresource.xml b/third-party/pdfjs/pdfjs.gresource.xml
index 9845e7483..4b2e78f97 100644
--- a/third-party/pdfjs/pdfjs.gresource.xml
+++ b/third-party/pdfjs/pdfjs.gresource.xml
@@ -2,369 +2,337 @@
 <gresources>
        <gresource prefix="/org/gnome/epiphany/pdfjs">
                <file compressed="true">build/pdf.js</file>
+               <file compressed="true">build/pdf.sandbox.js</file>
                <file compressed="true">build/pdf.worker.js</file>
                <file compressed="true">web/compressed.tracemonkey-pldi-09.pdf</file>
                <file compressed="true">web/debugger.js</file>
+               <file compressed="true">web/viewer.js</file>
                <file compressed="true">web/viewer.css</file>
                <file compressed="true">web/viewer.html</file>
-               <file compressed="true">web/viewer.js</file>
-               <file compressed="true">web/images/annotation-paragraph.svg</file>
-               <file compressed="true">web/images/annotation-note.svg</file>
-               <file compressed="true">web/images/annotation-noicon.svg</file>
-               <file compressed="true">web/images/loading-icon.gif</file>
+               <file compressed="true">web/cmaps/78-EUC-H.bcmap</file>
+               <file compressed="true">web/cmaps/78-EUC-V.bcmap</file>
+               <file compressed="true">web/cmaps/78-H.bcmap</file>
+               <file compressed="true">web/cmaps/78-RKSJ-H.bcmap</file>
+               <file compressed="true">web/cmaps/78-RKSJ-V.bcmap</file>
+               <file compressed="true">web/cmaps/78-V.bcmap</file>
+               <file compressed="true">web/cmaps/78ms-RKSJ-H.bcmap</file>
+               <file compressed="true">web/cmaps/78ms-RKSJ-V.bcmap</file>
+               <file compressed="true">web/cmaps/83pv-RKSJ-H.bcmap</file>
+               <file compressed="true">web/cmaps/90ms-RKSJ-H.bcmap</file>
+               <file compressed="true">web/cmaps/90ms-RKSJ-V.bcmap</file>
+               <file compressed="true">web/cmaps/90msp-RKSJ-H.bcmap</file>
+               <file compressed="true">web/cmaps/90msp-RKSJ-V.bcmap</file>
+               <file compressed="true">web/cmaps/90pv-RKSJ-H.bcmap</file>
+               <file compressed="true">web/cmaps/90pv-RKSJ-V.bcmap</file>
+               <file compressed="true">web/cmaps/Add-H.bcmap</file>
+               <file compressed="true">web/cmaps/Add-RKSJ-H.bcmap</file>
+               <file compressed="true">web/cmaps/Add-RKSJ-V.bcmap</file>
+               <file compressed="true">web/cmaps/Add-V.bcmap</file>
+               <file compressed="true">web/cmaps/Adobe-CNS1-0.bcmap</file>
+               <file compressed="true">web/cmaps/Adobe-CNS1-1.bcmap</file>
+               <file compressed="true">web/cmaps/Adobe-CNS1-2.bcmap</file>
+               <file compressed="true">web/cmaps/Adobe-CNS1-3.bcmap</file>
+               <file compressed="true">web/cmaps/Adobe-CNS1-4.bcmap</file>
+               <file compressed="true">web/cmaps/Adobe-CNS1-5.bcmap</file>
+               <file compressed="true">web/cmaps/Adobe-CNS1-6.bcmap</file>
+               <file compressed="true">web/cmaps/Adobe-CNS1-UCS2.bcmap</file>
+               <file compressed="true">web/cmaps/Adobe-GB1-0.bcmap</file>
+               <file compressed="true">web/cmaps/Adobe-GB1-1.bcmap</file>
+               <file compressed="true">web/cmaps/Adobe-GB1-2.bcmap</file>
+               <file compressed="true">web/cmaps/Adobe-GB1-3.bcmap</file>
+               <file compressed="true">web/cmaps/Adobe-GB1-4.bcmap</file>
+               <file compressed="true">web/cmaps/Adobe-GB1-5.bcmap</file>
+               <file compressed="true">web/cmaps/Adobe-GB1-UCS2.bcmap</file>
+               <file compressed="true">web/cmaps/Adobe-Japan1-0.bcmap</file>
+               <file compressed="true">web/cmaps/Adobe-Japan1-1.bcmap</file>
+               <file compressed="true">web/cmaps/Adobe-Japan1-2.bcmap</file>
+               <file compressed="true">web/cmaps/Adobe-Japan1-3.bcmap</file>
+               <file compressed="true">web/cmaps/Adobe-Japan1-4.bcmap</file>
+               <file compressed="true">web/cmaps/Adobe-Japan1-5.bcmap</file>
+               <file compressed="true">web/cmaps/Adobe-Japan1-6.bcmap</file>
+               <file compressed="true">web/cmaps/Adobe-Japan1-UCS2.bcmap</file>
+               <file compressed="true">web/cmaps/Adobe-Korea1-0.bcmap</file>
+               <file compressed="true">web/cmaps/Adobe-Korea1-1.bcmap</file>
+               <file compressed="true">web/cmaps/Adobe-Korea1-2.bcmap</file>
+               <file compressed="true">web/cmaps/Adobe-Korea1-UCS2.bcmap</file>
+               <file compressed="true">web/cmaps/B5-H.bcmap</file>
+               <file compressed="true">web/cmaps/B5-V.bcmap</file>
+               <file compressed="true">web/cmaps/B5pc-H.bcmap</file>
+               <file compressed="true">web/cmaps/B5pc-V.bcmap</file>
+               <file compressed="true">web/cmaps/CNS-EUC-H.bcmap</file>
+               <file compressed="true">web/cmaps/CNS-EUC-V.bcmap</file>
+               <file compressed="true">web/cmaps/CNS1-H.bcmap</file>
+               <file compressed="true">web/cmaps/CNS1-V.bcmap</file>
+               <file compressed="true">web/cmaps/CNS2-H.bcmap</file>
+               <file compressed="true">web/cmaps/CNS2-V.bcmap</file>
+               <file compressed="true">web/cmaps/ETHK-B5-H.bcmap</file>
+               <file compressed="true">web/cmaps/ETHK-B5-V.bcmap</file>
+               <file compressed="true">web/cmaps/ETen-B5-H.bcmap</file>
+               <file compressed="true">web/cmaps/ETen-B5-V.bcmap</file>
+               <file compressed="true">web/cmaps/ETenms-B5-H.bcmap</file>
+               <file compressed="true">web/cmaps/ETenms-B5-V.bcmap</file>
+               <file compressed="true">web/cmaps/EUC-H.bcmap</file>
+               <file compressed="true">web/cmaps/EUC-V.bcmap</file>
+               <file compressed="true">web/cmaps/Ext-H.bcmap</file>
+               <file compressed="true">web/cmaps/Ext-RKSJ-H.bcmap</file>
+               <file compressed="true">web/cmaps/Ext-RKSJ-V.bcmap</file>
+               <file compressed="true">web/cmaps/Ext-V.bcmap</file>
+               <file compressed="true">web/cmaps/GB-EUC-H.bcmap</file>
+               <file compressed="true">web/cmaps/GB-EUC-V.bcmap</file>
+               <file compressed="true">web/cmaps/GB-H.bcmap</file>
+               <file compressed="true">web/cmaps/GB-V.bcmap</file>
+               <file compressed="true">web/cmaps/GBK-EUC-H.bcmap</file>
+               <file compressed="true">web/cmaps/GBK-EUC-V.bcmap</file>
+               <file compressed="true">web/cmaps/GBK2K-H.bcmap</file>
+               <file compressed="true">web/cmaps/GBK2K-V.bcmap</file>
+               <file compressed="true">web/cmaps/GBKp-EUC-H.bcmap</file>
+               <file compressed="true">web/cmaps/GBKp-EUC-V.bcmap</file>
+               <file compressed="true">web/cmaps/GBT-EUC-H.bcmap</file>
+               <file compressed="true">web/cmaps/GBT-EUC-V.bcmap</file>
+               <file compressed="true">web/cmaps/GBT-H.bcmap</file>
+               <file compressed="true">web/cmaps/GBT-V.bcmap</file>
+               <file compressed="true">web/cmaps/GBTpc-EUC-H.bcmap</file>
+               <file compressed="true">web/cmaps/GBTpc-EUC-V.bcmap</file>
+               <file compressed="true">web/cmaps/GBpc-EUC-H.bcmap</file>
+               <file compressed="true">web/cmaps/GBpc-EUC-V.bcmap</file>
+               <file compressed="true">web/cmaps/H.bcmap</file>
+               <file compressed="true">web/cmaps/HKdla-B5-H.bcmap</file>
+               <file compressed="true">web/cmaps/HKdla-B5-V.bcmap</file>
+               <file compressed="true">web/cmaps/HKdlb-B5-H.bcmap</file>
+               <file compressed="true">web/cmaps/HKdlb-B5-V.bcmap</file>
+               <file compressed="true">web/cmaps/HKgccs-B5-H.bcmap</file>
+               <file compressed="true">web/cmaps/HKgccs-B5-V.bcmap</file>
+               <file compressed="true">web/cmaps/HKm314-B5-H.bcmap</file>
+               <file compressed="true">web/cmaps/HKm314-B5-V.bcmap</file>
+               <file compressed="true">web/cmaps/HKm471-B5-H.bcmap</file>
+               <file compressed="true">web/cmaps/HKm471-B5-V.bcmap</file>
+               <file compressed="true">web/cmaps/HKscs-B5-H.bcmap</file>
+               <file compressed="true">web/cmaps/HKscs-B5-V.bcmap</file>
+               <file compressed="true">web/cmaps/Hankaku.bcmap</file>
+               <file compressed="true">web/cmaps/Hiragana.bcmap</file>
+               <file compressed="true">web/cmaps/KSC-EUC-H.bcmap</file>
+               <file compressed="true">web/cmaps/KSC-EUC-V.bcmap</file>
+               <file compressed="true">web/cmaps/KSC-H.bcmap</file>
+               <file compressed="true">web/cmaps/KSC-Johab-H.bcmap</file>
+               <file compressed="true">web/cmaps/KSC-Johab-V.bcmap</file>
+               <file compressed="true">web/cmaps/KSC-V.bcmap</file>
+               <file compressed="true">web/cmaps/KSCms-UHC-H.bcmap</file>
+               <file compressed="true">web/cmaps/KSCms-UHC-HW-H.bcmap</file>
+               <file compressed="true">web/cmaps/KSCms-UHC-HW-V.bcmap</file>
+               <file compressed="true">web/cmaps/KSCms-UHC-V.bcmap</file>
+               <file compressed="true">web/cmaps/KSCpc-EUC-H.bcmap</file>
+               <file compressed="true">web/cmaps/KSCpc-EUC-V.bcmap</file>
+               <file compressed="true">web/cmaps/Katakana.bcmap</file>
+               <file compressed="true">web/cmaps/LICENSE</file>
+               <file compressed="true">web/cmaps/NWP-H.bcmap</file>
+               <file compressed="true">web/cmaps/NWP-V.bcmap</file>
+               <file compressed="true">web/cmaps/RKSJ-H.bcmap</file>
+               <file compressed="true">web/cmaps/RKSJ-V.bcmap</file>
+               <file compressed="true">web/cmaps/Roman.bcmap</file>
+               <file compressed="true">web/cmaps/UniCNS-UCS2-H.bcmap</file>
+               <file compressed="true">web/cmaps/UniCNS-UCS2-V.bcmap</file>
+               <file compressed="true">web/cmaps/UniCNS-UTF16-H.bcmap</file>
+               <file compressed="true">web/cmaps/UniCNS-UTF16-V.bcmap</file>
+               <file compressed="true">web/cmaps/UniCNS-UTF32-H.bcmap</file>
+               <file compressed="true">web/cmaps/UniCNS-UTF32-V.bcmap</file>
+               <file compressed="true">web/cmaps/UniCNS-UTF8-H.bcmap</file>
+               <file compressed="true">web/cmaps/UniCNS-UTF8-V.bcmap</file>
+               <file compressed="true">web/cmaps/UniGB-UCS2-H.bcmap</file>
+               <file compressed="true">web/cmaps/UniGB-UCS2-V.bcmap</file>
+               <file compressed="true">web/cmaps/UniGB-UTF16-H.bcmap</file>
+               <file compressed="true">web/cmaps/UniGB-UTF16-V.bcmap</file>
+               <file compressed="true">web/cmaps/UniGB-UTF32-H.bcmap</file>
+               <file compressed="true">web/cmaps/UniGB-UTF32-V.bcmap</file>
+               <file compressed="true">web/cmaps/UniGB-UTF8-H.bcmap</file>
+               <file compressed="true">web/cmaps/UniGB-UTF8-V.bcmap</file>
+               <file compressed="true">web/cmaps/UniJIS-UCS2-H.bcmap</file>
+               <file compressed="true">web/cmaps/UniJIS-UCS2-HW-H.bcmap</file>
+               <file compressed="true">web/cmaps/UniJIS-UCS2-HW-V.bcmap</file>
+               <file compressed="true">web/cmaps/UniJIS-UCS2-V.bcmap</file>
+               <file compressed="true">web/cmaps/UniJIS-UTF16-H.bcmap</file>
+               <file compressed="true">web/cmaps/UniJIS-UTF16-V.bcmap</file>
+               <file compressed="true">web/cmaps/UniJIS-UTF32-H.bcmap</file>
+               <file compressed="true">web/cmaps/UniJIS-UTF32-V.bcmap</file>
+               <file compressed="true">web/cmaps/UniJIS-UTF8-H.bcmap</file>
+               <file compressed="true">web/cmaps/UniJIS-UTF8-V.bcmap</file>
+               <file compressed="true">web/cmaps/UniJIS2004-UTF16-H.bcmap</file>
+               <file compressed="true">web/cmaps/UniJIS2004-UTF16-V.bcmap</file>
+               <file compressed="true">web/cmaps/UniJIS2004-UTF32-H.bcmap</file>
+               <file compressed="true">web/cmaps/UniJIS2004-UTF32-V.bcmap</file>
+               <file compressed="true">web/cmaps/UniJIS2004-UTF8-H.bcmap</file>
+               <file compressed="true">web/cmaps/UniJIS2004-UTF8-V.bcmap</file>
+               <file compressed="true">web/cmaps/UniJISPro-UCS2-HW-V.bcmap</file>
+               <file compressed="true">web/cmaps/UniJISPro-UCS2-V.bcmap</file>
+               <file compressed="true">web/cmaps/UniJISPro-UTF8-V.bcmap</file>
+               <file compressed="true">web/cmaps/UniJISX0213-UTF32-H.bcmap</file>
+               <file compressed="true">web/cmaps/UniJISX0213-UTF32-V.bcmap</file>
+               <file compressed="true">web/cmaps/UniJISX02132004-UTF32-H.bcmap</file>
+               <file compressed="true">web/cmaps/UniJISX02132004-UTF32-V.bcmap</file>
+               <file compressed="true">web/cmaps/UniKS-UCS2-H.bcmap</file>
+               <file compressed="true">web/cmaps/UniKS-UCS2-V.bcmap</file>
+               <file compressed="true">web/cmaps/UniKS-UTF16-H.bcmap</file>
+               <file compressed="true">web/cmaps/UniKS-UTF16-V.bcmap</file>
+               <file compressed="true">web/cmaps/UniKS-UTF32-H.bcmap</file>
+               <file compressed="true">web/cmaps/UniKS-UTF32-V.bcmap</file>
+               <file compressed="true">web/cmaps/UniKS-UTF8-H.bcmap</file>
+               <file compressed="true">web/cmaps/UniKS-UTF8-V.bcmap</file>
+               <file compressed="true">web/cmaps/V.bcmap</file>
+               <file compressed="true">web/cmaps/WP-Symbol.bcmap</file>
                <file compressed="true">web/images/annotation-check.svg</file>
-               <file compressed="true">web/images/annotation-key.svg</file>
+               <file compressed="true">web/images/annotation-comment.svg</file>
                <file compressed="true">web/images/annotation-help.svg</file>
-               <file compressed="true">web/images/grabbing.cur</file>
                <file compressed="true">web/images/annotation-insert.svg</file>
-               <file compressed="true">web/images/annotation-comment.svg</file>
-               <file compressed="true">web/images/grab.cur</file>
+               <file compressed="true">web/images/annotation-key.svg</file>
                <file compressed="true">web/images/annotation-newparagraph.svg</file>
-               <file compressed="true">web/images/findbarButton-next-dark.svg</file>
+               <file compressed="true">web/images/annotation-noicon.svg</file>
+               <file compressed="true">web/images/annotation-note.svg</file>
+               <file compressed="true">web/images/annotation-paragraph.svg</file>
                <file compressed="true">web/images/findbarButton-next.svg</file>
-               <file compressed="true">web/images/findbarButton-previous-dark.svg</file>
                <file compressed="true">web/images/findbarButton-previous.svg</file>
+               <file compressed="true">web/images/grab.cur</file>
+               <file compressed="true">web/images/grabbing.cur</file>
                <file compressed="true">web/images/loading-dark.svg</file>
+               <file compressed="true">web/images/loading-icon.gif</file>
                <file compressed="true">web/images/loading.svg</file>
-               <file compressed="true">web/images/secondaryToolbarButton-documentProperties-dark.svg</file>
                <file compressed="true">web/images/secondaryToolbarButton-documentProperties.svg</file>
-               <file compressed="true">web/images/secondaryToolbarButton-firstPage-dark.svg</file>
                <file compressed="true">web/images/secondaryToolbarButton-firstPage.svg</file>
-               <file compressed="true">web/images/secondaryToolbarButton-handTool-dark.svg</file>
                <file compressed="true">web/images/secondaryToolbarButton-handTool.svg</file>
-               <file compressed="true">web/images/secondaryToolbarButton-lastPage-dark.svg</file>
                <file compressed="true">web/images/secondaryToolbarButton-lastPage.svg</file>
-               <file compressed="true">web/images/secondaryToolbarButton-rotateCcw-dark.svg</file>
                <file compressed="true">web/images/secondaryToolbarButton-rotateCcw.svg</file>
-               <file compressed="true">web/images/secondaryToolbarButton-rotateCw-dark.svg</file>
                <file compressed="true">web/images/secondaryToolbarButton-rotateCw.svg</file>
-               <file compressed="true">web/images/secondaryToolbarButton-scrollHorizontal-dark.svg</file>
                <file compressed="true">web/images/secondaryToolbarButton-scrollHorizontal.svg</file>
-               <file compressed="true">web/images/secondaryToolbarButton-scrollVertical-dark.svg</file>
                <file compressed="true">web/images/secondaryToolbarButton-scrollVertical.svg</file>
-               <file compressed="true">web/images/secondaryToolbarButton-scrollWrapped-dark.svg</file>
                <file compressed="true">web/images/secondaryToolbarButton-scrollWrapped.svg</file>
-               <file compressed="true">web/images/secondaryToolbarButton-selectTool-dark.svg</file>
                <file compressed="true">web/images/secondaryToolbarButton-selectTool.svg</file>
-               <file compressed="true">web/images/secondaryToolbarButton-spreadEven-dark.svg</file>
                <file compressed="true">web/images/secondaryToolbarButton-spreadEven.svg</file>
-               <file compressed="true">web/images/secondaryToolbarButton-spreadNone-dark.svg</file>
                <file compressed="true">web/images/secondaryToolbarButton-spreadNone.svg</file>
-               <file compressed="true">web/images/secondaryToolbarButton-spreadOdd-dark.svg</file>
                <file compressed="true">web/images/secondaryToolbarButton-spreadOdd.svg</file>
                <file compressed="true">web/images/shadow.png</file>
-               <file compressed="true">web/images/toolbarButton-bookmark-dark.svg</file>
                <file compressed="true">web/images/toolbarButton-bookmark.svg</file>
-               <file compressed="true">web/images/toolbarButton-download-dark.svg</file>
+               <file compressed="true">web/images/toolbarButton-currentOutlineItem.svg</file>
                <file compressed="true">web/images/toolbarButton-download.svg</file>
-               <file compressed="true">web/images/toolbarButton-menuArrow-dark.svg</file>
                <file compressed="true">web/images/toolbarButton-menuArrow.svg</file>
-               <file compressed="true">web/images/toolbarButton-openFile-dark.svg</file>
                <file compressed="true">web/images/toolbarButton-openFile.svg</file>
-               <file compressed="true">web/images/toolbarButton-pageDown-dark.svg</file>
                <file compressed="true">web/images/toolbarButton-pageDown.svg</file>
-               <file compressed="true">web/images/toolbarButton-pageUp-dark.svg</file>
                <file compressed="true">web/images/toolbarButton-pageUp.svg</file>
-               <file compressed="true">web/images/toolbarButton-presentationMode-dark.svg</file>
                <file compressed="true">web/images/toolbarButton-presentationMode.svg</file>
-               <file compressed="true">web/images/toolbarButton-print-dark.svg</file>
                <file compressed="true">web/images/toolbarButton-print.svg</file>
-               <file compressed="true">web/images/toolbarButton-search-dark.svg</file>
                <file compressed="true">web/images/toolbarButton-search.svg</file>
-               <file compressed="true">web/images/toolbarButton-secondaryToolbarToggle-dark.svg</file>
                <file compressed="true">web/images/toolbarButton-secondaryToolbarToggle.svg</file>
-               <file compressed="true">web/images/toolbarButton-sidebarToggle-dark.svg</file>
                <file compressed="true">web/images/toolbarButton-sidebarToggle.svg</file>
-               <file compressed="true">web/images/toolbarButton-viewAttachments-dark.svg</file>
                <file compressed="true">web/images/toolbarButton-viewAttachments.svg</file>
-               <file compressed="true">web/images/toolbarButton-viewLayers-dark.svg</file>
                <file compressed="true">web/images/toolbarButton-viewLayers.svg</file>
-               <file compressed="true">web/images/toolbarButton-viewOutline-dark.svg</file>
                <file compressed="true">web/images/toolbarButton-viewOutline.svg</file>
-               <file compressed="true">web/images/toolbarButton-viewThumbnail-dark.svg</file>
                <file compressed="true">web/images/toolbarButton-viewThumbnail.svg</file>
-               <file compressed="true">web/images/toolbarButton-zoomIn-dark.svg</file>
                <file compressed="true">web/images/toolbarButton-zoomIn.svg</file>
-               <file compressed="true">web/images/toolbarButton-zoomOut-dark.svg</file>
                <file compressed="true">web/images/toolbarButton-zoomOut.svg</file>
-               <file compressed="true">web/images/treeitem-collapsed-dark.svg</file>
                <file compressed="true">web/images/treeitem-collapsed.svg</file>
-               <file compressed="true">web/images/treeitem-expanded-dark.svg</file>
                <file compressed="true">web/images/treeitem-expanded.svg</file>
                <file compressed="true">web/locale/locale.properties</file>
-               <file compressed="true">web/locale/nn-NO/viewer.properties</file>
-               <file compressed="true">web/locale/uk/viewer.properties</file>
-               <file compressed="true">web/locale/ia/viewer.properties</file>
-               <file compressed="true">web/locale/de/viewer.properties</file>
-               <file compressed="true">web/locale/ko/viewer.properties</file>
+               <file compressed="true">web/locale/ach/viewer.properties</file>
+               <file compressed="true">web/locale/af/viewer.properties</file>
+               <file compressed="true">web/locale/an/viewer.properties</file>
+               <file compressed="true">web/locale/ar/viewer.properties</file>
+               <file compressed="true">web/locale/ast/viewer.properties</file>
+               <file compressed="true">web/locale/az/viewer.properties</file>
                <file compressed="true">web/locale/be/viewer.properties</file>
-               <file compressed="true">web/locale/ur/viewer.properties</file>
+               <file compressed="true">web/locale/bg/viewer.properties</file>
+               <file compressed="true">web/locale/bn/viewer.properties</file>
+               <file compressed="true">web/locale/bo/viewer.properties</file>
+               <file compressed="true">web/locale/br/viewer.properties</file>
+               <file compressed="true">web/locale/brx/viewer.properties</file>
+               <file compressed="true">web/locale/bs/viewer.properties</file>
+               <file compressed="true">web/locale/ca/viewer.properties</file>
+               <file compressed="true">web/locale/cak/viewer.properties</file>
+               <file compressed="true">web/locale/ckb/viewer.properties</file>
+               <file compressed="true">web/locale/cs/viewer.properties</file>
+               <file compressed="true">web/locale/cy/viewer.properties</file>
+               <file compressed="true">web/locale/da/viewer.properties</file>
+               <file compressed="true">web/locale/de/viewer.properties</file>
                <file compressed="true">web/locale/dsb/viewer.properties</file>
-               <file compressed="true">web/locale/es-MX/viewer.properties</file>
-               <file compressed="true">web/locale/nb-NO/viewer.properties</file>
-               <file compressed="true">web/locale/fi/viewer.properties</file>
-               <file compressed="true">web/locale/ast/viewer.properties</file>
-               <file compressed="true">web/locale/fa/viewer.properties</file>
-               <file compressed="true">web/locale/zh-CN/viewer.properties</file>
-               <file compressed="true">web/locale/te/viewer.properties</file>
-               <file compressed="true">web/locale/si/viewer.properties</file>
-               <file compressed="true">web/locale/son/viewer.properties</file>
-               <file compressed="true">web/locale/es-ES/viewer.properties</file>
-               <file compressed="true">web/locale/sv-SE/viewer.properties</file>
-               <file compressed="true">web/locale/ms/viewer.properties</file>
-               <file compressed="true">web/locale/ach/viewer.properties</file>
-               <file compressed="true">web/locale/sq/viewer.properties</file>
-               <file compressed="true">web/locale/ka/viewer.properties</file>
-               <file compressed="true">web/locale/gl/viewer.properties</file>
+               <file compressed="true">web/locale/el/viewer.properties</file>
                <file compressed="true">web/locale/en-CA/viewer.properties</file>
-               <file compressed="true">web/locale/hy-AM/viewer.properties</file>
-               <file compressed="true">web/locale/et/viewer.properties</file>
-               <file compressed="true">web/locale/ta/viewer.properties</file>
+               <file compressed="true">web/locale/en-GB/viewer.properties</file>
+               <file compressed="true">web/locale/en-US/viewer.properties</file>
                <file compressed="true">web/locale/eo/viewer.properties</file>
-               <file compressed="true">web/locale/da/viewer.properties</file>
+               <file compressed="true">web/locale/es-AR/viewer.properties</file>
                <file compressed="true">web/locale/es-CL/viewer.properties</file>
-               <file compressed="true">web/locale/kab/viewer.properties</file>
-               <file compressed="true">web/locale/hr/viewer.properties</file>
-               <file compressed="true">web/locale/lt/viewer.properties</file>
-               <file compressed="true">web/locale/ltg/viewer.properties</file>
+               <file compressed="true">web/locale/es-ES/viewer.properties</file>
+               <file compressed="true">web/locale/es-MX/viewer.properties</file>
+               <file compressed="true">web/locale/et/viewer.properties</file>
+               <file compressed="true">web/locale/eu/viewer.properties</file>
+               <file compressed="true">web/locale/fa/viewer.properties</file>
+               <file compressed="true">web/locale/ff/viewer.properties</file>
+               <file compressed="true">web/locale/fi/viewer.properties</file>
+               <file compressed="true">web/locale/fr/viewer.properties</file>
+               <file compressed="true">web/locale/fy-NL/viewer.properties</file>
+               <file compressed="true">web/locale/ga-IE/viewer.properties</file>
                <file compressed="true">web/locale/gd/viewer.properties</file>
-               <file compressed="true">web/locale/vi/viewer.properties</file>
-               <file compressed="true">web/locale/af/viewer.properties</file>
-               <file compressed="true">web/locale/sk/viewer.properties</file>
-               <file compressed="true">web/locale/ro/viewer.properties</file>
-               <file compressed="true">web/locale/hsb/viewer.properties</file>
-               <file compressed="true">web/locale/pt-PT/viewer.properties</file>
-               <file compressed="true">web/locale/kk/viewer.properties</file>
+               <file compressed="true">web/locale/gl/viewer.properties</file>
+               <file compressed="true">web/locale/gn/viewer.properties</file>
+               <file compressed="true">web/locale/gu-IN/viewer.properties</file>
+               <file compressed="true">web/locale/he/viewer.properties</file>
                <file compressed="true">web/locale/hi-IN/viewer.properties</file>
+               <file compressed="true">web/locale/hr/viewer.properties</file>
+               <file compressed="true">web/locale/hsb/viewer.properties</file>
+               <file compressed="true">web/locale/hu/viewer.properties</file>
+               <file compressed="true">web/locale/hy-AM/viewer.properties</file>
+               <file compressed="true">web/locale/hye/viewer.properties</file>
+               <file compressed="true">web/locale/ia/viewer.properties</file>
                <file compressed="true">web/locale/id/viewer.properties</file>
-               <file compressed="true">web/locale/tl/viewer.properties</file>
-               <file compressed="true">web/locale/gu-IN/viewer.properties</file>
-               <file compressed="true">web/locale/cak/viewer.properties</file>
-               <file compressed="true">web/locale/es-AR/viewer.properties</file>
-               <file compressed="true">web/locale/sr/viewer.properties</file>
-               <file compressed="true">web/locale/meh/viewer.properties</file>
-               <file compressed="true">web/locale/trs/viewer.properties</file>
                <file compressed="true">web/locale/is/viewer.properties</file>
-               <file compressed="true">web/locale/fy-NL/viewer.properties</file>
+               <file compressed="true">web/locale/it/viewer.properties</file>
+               <file compressed="true">web/locale/ja/viewer.properties</file>
+               <file compressed="true">web/locale/ka/viewer.properties</file>
+               <file compressed="true">web/locale/kab/viewer.properties</file>
+               <file compressed="true">web/locale/kk/viewer.properties</file>
                <file compressed="true">web/locale/km/viewer.properties</file>
-               <file compressed="true">web/locale/ar/viewer.properties</file>
-               <file compressed="true">web/locale/fr/viewer.properties</file>
-               <file compressed="true">web/locale/lo/viewer.properties</file>
-               <file compressed="true">web/locale/pt-BR/viewer.properties</file>
-               <file compressed="true">web/locale/nl/viewer.properties</file>
-               <file compressed="true">web/locale/rm/viewer.properties</file>
-               <file compressed="true">web/locale/mr/viewer.properties</file>
-               <file compressed="true">web/locale/mk/viewer.properties</file>
-               <file compressed="true">web/locale/pl/viewer.properties</file>
-               <file compressed="true">web/locale/xh/viewer.properties</file>
-               <file compressed="true">web/locale/bn/viewer.properties</file>
-               <file compressed="true">web/locale/br/viewer.properties</file>
-               <file compressed="true">web/locale/en-GB/viewer.properties</file>
                <file compressed="true">web/locale/kn/viewer.properties</file>
-               <file compressed="true">web/locale/cy/viewer.properties</file>
-               <file compressed="true">web/locale/brx/viewer.properties</file>
-               <file compressed="true">web/locale/zh-TW/viewer.properties</file>
+               <file compressed="true">web/locale/ko/viewer.properties</file>
                <file compressed="true">web/locale/lij/viewer.properties</file>
-               <file compressed="true">web/locale/ga-IE/viewer.properties</file>
-               <file compressed="true">web/locale/ne-NP/viewer.properties</file>
-               <file compressed="true">web/locale/az/viewer.properties</file>
-               <file compressed="true">web/locale/hu/viewer.properties</file>
-               <file compressed="true">web/locale/el/viewer.properties</file>
-               <file compressed="true">web/locale/gn/viewer.properties</file>
-               <file compressed="true">web/locale/cs/viewer.properties</file>
-               <file compressed="true">web/locale/ff/viewer.properties</file>
-               <file compressed="true">web/locale/pa-IN/viewer.properties</file>
-               <file compressed="true">web/locale/sl/viewer.properties</file>
+               <file compressed="true">web/locale/lo/viewer.properties</file>
+               <file compressed="true">web/locale/lt/viewer.properties</file>
+               <file compressed="true">web/locale/ltg/viewer.properties</file>
                <file compressed="true">web/locale/lv/viewer.properties</file>
-               <file compressed="true">web/locale/ja/viewer.properties</file>
-               <file compressed="true">web/locale/ru/viewer.properties</file>
-               <file compressed="true">web/locale/ca/viewer.properties</file>
-               <file compressed="true">web/locale/wo/viewer.properties</file>
-               <file compressed="true">web/locale/it/viewer.properties</file>
-               <file compressed="true">web/locale/tr/viewer.properties</file>
-               <file compressed="true">web/locale/en-US/viewer.properties</file>
-               <file compressed="true">web/locale/an/viewer.properties</file>
+               <file compressed="true">web/locale/meh/viewer.properties</file>
+               <file compressed="true">web/locale/mk/viewer.properties</file>
+               <file compressed="true">web/locale/mr/viewer.properties</file>
+               <file compressed="true">web/locale/ms/viewer.properties</file>
                <file compressed="true">web/locale/my/viewer.properties</file>
-               <file compressed="true">web/locale/he/viewer.properties</file>
-               <file compressed="true">web/locale/eu/viewer.properties</file>
-               <file compressed="true">web/locale/bg/viewer.properties</file>
-               <file compressed="true">web/locale/bo/viewer.properties</file>
-               <file compressed="true">web/locale/uz/viewer.properties</file>
+               <file compressed="true">web/locale/nb-NO/viewer.properties</file>
+               <file compressed="true">web/locale/ne-NP/viewer.properties</file>
+               <file compressed="true">web/locale/nl/viewer.properties</file>
+               <file compressed="true">web/locale/nn-NO/viewer.properties</file>
                <file compressed="true">web/locale/oc/viewer.properties</file>
-               <file compressed="true">web/locale/th/viewer.properties</file>
-               <file compressed="true">web/locale/bs/viewer.properties</file>
-               <file compressed="true">web/locale/hye/viewer.properties</file>
+               <file compressed="true">web/locale/pa-IN/viewer.properties</file>
+               <file compressed="true">web/locale/pl/viewer.properties</file>
+               <file compressed="true">web/locale/pt-BR/viewer.properties</file>
+               <file compressed="true">web/locale/pt-PT/viewer.properties</file>
+               <file compressed="true">web/locale/rm/viewer.properties</file>
+               <file compressed="true">web/locale/ro/viewer.properties</file>
+               <file compressed="true">web/locale/ru/viewer.properties</file>
                <file compressed="true">web/locale/scn/viewer.properties</file>
-               <file compressed="true">web/locale/ckb/viewer.properties</file>
+               <file compressed="true">web/locale/si/viewer.properties</file>
+               <file compressed="true">web/locale/sk/viewer.properties</file>
+               <file compressed="true">web/locale/sl/viewer.properties</file>
+               <file compressed="true">web/locale/son/viewer.properties</file>
+               <file compressed="true">web/locale/sq/viewer.properties</file>
+               <file compressed="true">web/locale/sr/viewer.properties</file>
+               <file compressed="true">web/locale/sv-SE/viewer.properties</file>
                <file compressed="true">web/locale/szl/viewer.properties</file>
-               <file compressed="true">web/cmaps/B5pc-H.bcmap</file>
-               <file compressed="true">web/cmaps/UniCNS-UTF16-V.bcmap</file>
-               <file compressed="true">web/cmaps/UniJISPro-UCS2-HW-V.bcmap</file>
-               <file compressed="true">web/cmaps/Adobe-Japan1-4.bcmap</file>
-               <file compressed="true">web/cmaps/Add-RKSJ-V.bcmap</file>
-               <file compressed="true">web/cmaps/ETen-B5-H.bcmap</file>
-               <file compressed="true">web/cmaps/B5-V.bcmap</file>
-               <file compressed="true">web/cmaps/Adobe-Korea1-2.bcmap</file>
-               <file compressed="true">web/cmaps/UniJISPro-UTF8-V.bcmap</file>
-               <file compressed="true">web/cmaps/UniKS-UTF8-V.bcmap</file>
-               <file compressed="true">web/cmaps/Adobe-Japan1-0.bcmap</file>
-               <file compressed="true">web/cmaps/Adobe-GB1-1.bcmap</file>
-               <file compressed="true">web/cmaps/ETenms-B5-V.bcmap</file>
-               <file compressed="true">web/cmaps/Adobe-CNS1-UCS2.bcmap</file>
-               <file compressed="true">web/cmaps/90pv-RKSJ-V.bcmap</file>
-               <file compressed="true">web/cmaps/B5pc-V.bcmap</file>
-               <file compressed="true">web/cmaps/UniGB-UTF16-V.bcmap</file>
-               <file compressed="true">web/cmaps/B5-H.bcmap</file>
-               <file compressed="true">web/cmaps/HKgccs-B5-H.bcmap</file>
-               <file compressed="true">web/cmaps/KSC-Johab-H.bcmap</file>
-               <file compressed="true">web/cmaps/UniKS-UCS2-V.bcmap</file>
-               <file compressed="true">web/cmaps/Adobe-CNS1-5.bcmap</file>
-               <file compressed="true">web/cmaps/Add-V.bcmap</file>
-               <file compressed="true">web/cmaps/GBT-V.bcmap</file>
-               <file compressed="true">web/cmaps/UniCNS-UTF32-V.bcmap</file>
-               <file compressed="true">web/cmaps/Hankaku.bcmap</file>
-               <file compressed="true">web/cmaps/78-EUC-H.bcmap</file>
-               <file compressed="true">web/cmaps/UniKS-UTF32-H.bcmap</file>
-               <file compressed="true">web/cmaps/UniKS-UCS2-H.bcmap</file>
-               <file compressed="true">web/cmaps/UniGB-UTF8-V.bcmap</file>
-               <file compressed="true">web/cmaps/V.bcmap</file>
-               <file compressed="true">web/cmaps/Adobe-Japan1-UCS2.bcmap</file>
-               <file compressed="true">web/cmaps/EUC-H.bcmap</file>
-               <file compressed="true">web/cmaps/UniKS-UTF8-H.bcmap</file>
-               <file compressed="true">web/cmaps/KSCms-UHC-HW-H.bcmap</file>
-               <file compressed="true">web/cmaps/78ms-RKSJ-V.bcmap</file>
-               <file compressed="true">web/cmaps/Adobe-GB1-2.bcmap</file>
-               <file compressed="true">web/cmaps/KSCpc-EUC-H.bcmap</file>
-               <file compressed="true">web/cmaps/Adobe-GB1-0.bcmap</file>
-               <file compressed="true">web/cmaps/UniJIS-UTF8-H.bcmap</file>
-               <file compressed="true">web/cmaps/UniCNS-UTF8-V.bcmap</file>
-               <file compressed="true">web/cmaps/UniCNS-UTF32-H.bcmap</file>
-               <file compressed="true">web/cmaps/HKscs-B5-V.bcmap</file>
-               <file compressed="true">web/cmaps/Adobe-GB1-4.bcmap</file>
-               <file compressed="true">web/cmaps/KSC-Johab-V.bcmap</file>
-               <file compressed="true">web/cmaps/Ext-RKSJ-V.bcmap</file>
-               <file compressed="true">web/cmaps/UniJIS-UCS2-HW-H.bcmap</file>
-               <file compressed="true">web/cmaps/GBTpc-EUC-H.bcmap</file>
-               <file compressed="true">web/cmaps/UniJIS2004-UTF32-V.bcmap</file>
-               <file compressed="true">web/cmaps/UniCNS-UTF8-H.bcmap</file>
-               <file compressed="true">web/cmaps/78-V.bcmap</file>
-               <file compressed="true">web/cmaps/UniJIS2004-UTF8-V.bcmap</file>
-               <file compressed="true">web/cmaps/UniGB-UTF8-H.bcmap</file>
-               <file compressed="true">web/cmaps/GBpc-EUC-V.bcmap</file>
-               <file compressed="true">web/cmaps/HKdlb-B5-V.bcmap</file>
-               <file compressed="true">web/cmaps/UniCNS-UTF16-H.bcmap</file>
-               <file compressed="true">web/cmaps/Adobe-Korea1-1.bcmap</file>
-               <file compressed="true">web/cmaps/Adobe-CNS1-1.bcmap</file>
-               <file compressed="true">web/cmaps/Adobe-GB1-3.bcmap</file>
-               <file compressed="true">web/cmaps/GBT-EUC-V.bcmap</file>
-               <file compressed="true">web/cmaps/GBT-EUC-H.bcmap</file>
-               <file compressed="true">web/cmaps/Adobe-CNS1-3.bcmap</file>
-               <file compressed="true">web/cmaps/Hiragana.bcmap</file>
-               <file compressed="true">web/cmaps/UniGB-UCS2-H.bcmap</file>
-               <file compressed="true">web/cmaps/UniJIS-UCS2-HW-V.bcmap</file>
-               <file compressed="true">web/cmaps/Add-RKSJ-H.bcmap</file>
-               <file compressed="true">web/cmaps/UniKS-UTF16-V.bcmap</file>
-               <file compressed="true">web/cmaps/78-H.bcmap</file>
-               <file compressed="true">web/cmaps/RKSJ-V.bcmap</file>
-               <file compressed="true">web/cmaps/UniJIS2004-UTF16-V.bcmap</file>
-               <file compressed="true">web/cmaps/GBT-H.bcmap</file>
-               <file compressed="true">web/cmaps/KSC-H.bcmap</file>
-               <file compressed="true">web/cmaps/CNS2-V.bcmap</file>
-               <file compressed="true">web/cmaps/GBKp-EUC-V.bcmap</file>
-               <file compressed="true">web/cmaps/HKm314-B5-V.bcmap</file>
-               <file compressed="true">web/cmaps/Adobe-GB1-5.bcmap</file>
-               <file compressed="true">web/cmaps/Adobe-CNS1-6.bcmap</file>
-               <file compressed="true">web/cmaps/KSC-EUC-H.bcmap</file>
-               <file compressed="true">web/cmaps/90ms-RKSJ-V.bcmap</file>
-               <file compressed="true">web/cmaps/NWP-V.bcmap</file>
-               <file compressed="true">web/cmaps/GB-H.bcmap</file>
-               <file compressed="true">web/cmaps/GBpc-EUC-H.bcmap</file>
-               <file compressed="true">web/cmaps/KSCms-UHC-H.bcmap</file>
-               <file compressed="true">web/cmaps/83pv-RKSJ-H.bcmap</file>
-               <file compressed="true">web/cmaps/78-EUC-V.bcmap</file>
-               <file compressed="true">web/cmaps/HKm471-B5-V.bcmap</file>
-               <file compressed="true">web/cmaps/UniKS-UTF16-H.bcmap</file>
-               <file compressed="true">web/cmaps/UniJIS-UTF8-V.bcmap</file>
-               <file compressed="true">web/cmaps/CNS1-H.bcmap</file>
-               <file compressed="true">web/cmaps/ETHK-B5-V.bcmap</file>
-               <file compressed="true">web/cmaps/UniJIS-UTF16-V.bcmap</file>
-               <file compressed="true">web/cmaps/UniJIS-UTF32-H.bcmap</file>
-               <file compressed="true">web/cmaps/UniJISPro-UCS2-V.bcmap</file>
-               <file compressed="true">web/cmaps/Ext-RKSJ-H.bcmap</file>
-               <file compressed="true">web/cmaps/GB-V.bcmap</file>
-               <file compressed="true">web/cmaps/GB-EUC-H.bcmap</file>
-               <file compressed="true">web/cmaps/GBK-EUC-H.bcmap</file>
-               <file compressed="true">web/cmaps/Adobe-Korea1-UCS2.bcmap</file>
-               <file compressed="true">web/cmaps/GBKp-EUC-H.bcmap</file>
-               <file compressed="true">web/cmaps/Add-H.bcmap</file>
-               <file compressed="true">web/cmaps/UniKS-UTF32-V.bcmap</file>
-               <file compressed="true">web/cmaps/78-RKSJ-V.bcmap</file>
-               <file compressed="true">web/cmaps/WP-Symbol.bcmap</file>
-               <file compressed="true">web/cmaps/HKdla-B5-H.bcmap</file>
-               <file compressed="true">web/cmaps/UniJISX0213-UTF32-V.bcmap</file>
-               <file compressed="true">web/cmaps/UniJIS2004-UTF8-H.bcmap</file>
-               <file compressed="true">web/cmaps/90msp-RKSJ-V.bcmap</file>
-               <file compressed="true">web/cmaps/CNS1-V.bcmap</file>
-               <file compressed="true">web/cmaps/RKSJ-H.bcmap</file>
-               <file compressed="true">web/cmaps/GBTpc-EUC-V.bcmap</file>
-               <file compressed="true">web/cmaps/Ext-H.bcmap</file>
-               <file compressed="true">web/cmaps/GBK-EUC-V.bcmap</file>
-               <file compressed="true">web/cmaps/ETHK-B5-H.bcmap</file>
-               <file compressed="true">web/cmaps/UniGB-UTF16-H.bcmap</file>
-               <file compressed="true">web/cmaps/KSC-EUC-V.bcmap</file>
-               <file compressed="true">web/cmaps/UniJISX02132004-UTF32-H.bcmap</file>
-               <file compressed="true">web/cmaps/Ext-V.bcmap</file>
-               <file compressed="true">web/cmaps/UniJIS2004-UTF16-H.bcmap</file>
-               <file compressed="true">web/cmaps/90msp-RKSJ-H.bcmap</file>
-               <file compressed="true">web/cmaps/Roman.bcmap</file>
-               <file compressed="true">web/cmaps/Adobe-Japan1-1.bcmap</file>
-               <file compressed="true">web/cmaps/KSCms-UHC-HW-V.bcmap</file>
-               <file compressed="true">web/cmaps/UniJIS-UTF16-H.bcmap</file>
-               <file compressed="true">web/cmaps/Adobe-Japan1-3.bcmap</file>
-               <file compressed="true">web/cmaps/NWP-H.bcmap</file>
-               <file compressed="true">web/cmaps/LICENSE</file>
-               <file compressed="true">web/cmaps/ETen-B5-V.bcmap</file>
-               <file compressed="true">web/cmaps/EUC-V.bcmap</file>
-               <file compressed="true">web/cmaps/HKgccs-B5-V.bcmap</file>
-               <file compressed="true">web/cmaps/CNS-EUC-H.bcmap</file>
-               <file compressed="true">web/cmaps/CNS-EUC-V.bcmap</file>
-               <file compressed="true">web/cmaps/UniJISX0213-UTF32-H.bcmap</file>
-               <file compressed="true">web/cmaps/HKdlb-B5-H.bcmap</file>
-               <file compressed="true">web/cmaps/KSC-V.bcmap</file>
-               <file compressed="true">web/cmaps/HKdla-B5-V.bcmap</file>
-               <file compressed="true">web/cmaps/UniJIS2004-UTF32-H.bcmap</file>
-               <file compressed="true">web/cmaps/GB-EUC-V.bcmap</file>
-               <file compressed="true">web/cmaps/UniGB-UCS2-V.bcmap</file>
-               <file compressed="true">web/cmaps/Adobe-Japan1-2.bcmap</file>
-               <file compressed="true">web/cmaps/78ms-RKSJ-H.bcmap</file>
-               <file compressed="true">web/cmaps/HKscs-B5-H.bcmap</file>
-               <file compressed="true">web/cmaps/H.bcmap</file>
-               <file compressed="true">web/cmaps/HKm471-B5-H.bcmap</file>
-               <file compressed="true">web/cmaps/KSCpc-EUC-V.bcmap</file>
-               <file compressed="true">web/cmaps/Katakana.bcmap</file>
-               <file compressed="true">web/cmaps/UniJIS-UCS2-V.bcmap</file>
-               <file compressed="true">web/cmaps/UniJISX02132004-UTF32-V.bcmap</file>
-               <file compressed="true">web/cmaps/UniGB-UTF32-V.bcmap</file>
-               <file compressed="true">web/cmaps/Adobe-GB1-UCS2.bcmap</file>
-               <file compressed="true">web/cmaps/ETenms-B5-H.bcmap</file>
-               <file compressed="true">web/cmaps/90ms-RKSJ-H.bcmap</file>
-               <file compressed="true">web/cmaps/UniGB-UTF32-H.bcmap</file>
-               <file compressed="true">web/cmaps/HKm314-B5-H.bcmap</file>
-               <file compressed="true">web/cmaps/Adobe-CNS1-0.bcmap</file>
-               <file compressed="true">web/cmaps/Adobe-CNS1-2.bcmap</file>
-               <file compressed="true">web/cmaps/Adobe-Japan1-5.bcmap</file>
-               <file compressed="true">web/cmaps/90pv-RKSJ-H.bcmap</file>
-               <file compressed="true">web/cmaps/KSCms-UHC-V.bcmap</file>
-               <file compressed="true">web/cmaps/Adobe-CNS1-4.bcmap</file>
-               <file compressed="true">web/cmaps/GBK2K-V.bcmap</file>
-               <file compressed="true">web/cmaps/GBK2K-H.bcmap</file>
-               <file compressed="true">web/cmaps/UniJIS-UTF32-V.bcmap</file>
-               <file compressed="true">web/cmaps/Adobe-Japan1-6.bcmap</file>
-               <file compressed="true">web/cmaps/UniCNS-UCS2-H.bcmap</file>
-               <file compressed="true">web/cmaps/78-RKSJ-H.bcmap</file>
-               <file compressed="true">web/cmaps/UniCNS-UCS2-V.bcmap</file>
-               <file compressed="true">web/cmaps/CNS2-H.bcmap</file>
-               <file compressed="true">web/cmaps/Adobe-Korea1-0.bcmap</file>
-               <file compressed="true">web/cmaps/UniJIS-UCS2-H.bcmap</file>
+               <file compressed="true">web/locale/ta/viewer.properties</file>
+               <file compressed="true">web/locale/te/viewer.properties</file>
+               <file compressed="true">web/locale/th/viewer.properties</file>
+               <file compressed="true">web/locale/tl/viewer.properties</file>
+               <file compressed="true">web/locale/tr/viewer.properties</file>
+               <file compressed="true">web/locale/trs/viewer.properties</file>
+               <file compressed="true">web/locale/uk/viewer.properties</file>
+               <file compressed="true">web/locale/ur/viewer.properties</file>
+               <file compressed="true">web/locale/uz/viewer.properties</file>
+               <file compressed="true">web/locale/vi/viewer.properties</file>
+               <file compressed="true">web/locale/wo/viewer.properties</file>
+               <file compressed="true">web/locale/xh/viewer.properties</file>
+               <file compressed="true">web/locale/zh-CN/viewer.properties</file>
+               <file compressed="true">web/locale/zh-TW/viewer.properties</file>
        </gresource>
 </gresources>
diff --git a/third-party/pdfjs/web/debugger.js b/third-party/pdfjs/web/debugger.js
index 500522d84..b6f7d1638 100644
--- a/third-party/pdfjs/web/debugger.js
+++ b/third-party/pdfjs/web/debugger.js
@@ -115,7 +115,7 @@ var FontInspector = (function FontInspectorClosure() {
       name.textContent = fontName;
       var download = document.createElement("a");
       if (url) {
-        url = /url\(['"]?([^\)"']+)/.exec(url);
+        url = /url\(['"]?([^)"']+)/.exec(url);
         download.href = url[1];
       } else if (fontObj.data) {
         download.href = URL.createObjectURL(
@@ -201,7 +201,7 @@ var StepperManager = (function StepperManagerClosure() {
     create: function create(pageIndex) {
       var debug = document.createElement("div");
       debug.id = "stepper" + pageIndex;
-      debug.setAttribute("hidden", true);
+      debug.hidden = true;
       debug.className = "stepper";
       stepperDiv.appendChild(debug);
       var b = document.createElement("option");
@@ -224,11 +224,7 @@ var StepperManager = (function StepperManagerClosure() {
       }
       for (i = 0; i < steppers.length; ++i) {
         var stepper = steppers[i];
-        if (stepper.pageIndex === pageIndex) {
-          stepper.panel.removeAttribute("hidden");
-        } else {
-          stepper.panel.setAttribute("hidden", true);
-        }
+        stepper.panel.hidden = stepper.pageIndex !== pageIndex;
       }
       var options = stepperChooser.options;
       for (i = 0; i < options.length; ++i) {
@@ -381,7 +377,6 @@ var Stepper = (function StepperClosure() {
         line.appendChild(c("td", JSON.stringify(simplifyArgs(decArgs))));
       }
       if (operatorsToDisplay < operatorList.fnArray.length) {
-        line = c("tr");
         var lastCell = c("td", "...");
         lastCell.colspan = 4;
         chunk.appendChild(lastCell);
@@ -609,15 +604,10 @@ window.PDFBug = (function PDFBugClosure() {
       activePanel = index;
       var tools = this.tools;
       for (var j = 0; j < tools.length; ++j) {
-        if (j === index) {
-          buttons[j].setAttribute("class", "active");
-          tools[j].active = true;
-          tools[j].panel.removeAttribute("hidden");
-        } else {
-          buttons[j].setAttribute("class", "");
-          tools[j].active = false;
-          tools[j].panel.setAttribute("hidden", "true");
-        }
+        var isActive = j === index;
+        buttons[j].classList.toggle("active", isActive);
+        tools[j].active = isActive;
+        tools[j].panel.hidden = !isActive;
       }
     },
   };
diff --git a/third-party/pdfjs/web/images/toolbarButton-currentOutlineItem.svg 
b/third-party/pdfjs/web/images/toolbarButton-currentOutlineItem.svg
new file mode 100644
index 000000000..c1c72b208
--- /dev/null
+++ b/third-party/pdfjs/web/images/toolbarButton-currentOutlineItem.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg"; height="16" width="16"><path d="m14 9h-6c-1.3 0-1.3 2 0 2h6c1.3 0 
1.3-2 0-2zm-5.2-8h-3.8c-1.3 0-1.3 2 0 2h1.7zm-6.8 0c-1 0-1.3 1-0.7 1.7 0.7 0.6 1.7 0.3 1.7-0.7 
0-0.5-0.4-1-1-1zm3 8c-1 0-1.3 1-0.7 1.7 0.6 0.6 1.7 0.2 1.7-0.7 0-0.5-0.4-1-1-1zm0.3-4h-0.3c-1.4 0-1.4 2 0 
2h2.3zm-3.3 0c-0.9 0-1.4 1-0.7 1.7 0.7 0.6 1.7 0.2 1.7-0.7 0-0.6-0.5-1-1-1zm12 8h-9c-1.3 0-1.3 2 0 2h9c1.3 0 
1.3-2 0-2zm-12 0c-1 0-1.3 1-0.7 1.7 0.7 0.6 1.7 0.2 1.7-0.712 0-0.5-0.4-1-1-1z"/><path d="m7.37 4.838 
3.93-3.911v2.138h3.629v3.546h-3.629v2.138l-3.93-3.911"/></svg>
\ No newline at end of file
diff --git a/third-party/pdfjs/web/locale/ach/viewer.properties 
b/third-party/pdfjs/web/locale/ach/viewer.properties
index 46e36fb7e..cd327d520 100644
--- a/third-party/pdfjs/web/locale/ach/viewer.properties
+++ b/third-party/pdfjs/web/locale/ach/viewer.properties
@@ -185,7 +185,6 @@ page_scale_actual=Dite kikome
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Bal
 loading_error=Bal otime kun cano PDF.
 invalid_file_error=Pwail me PDF ma pe atir onyo obale woko.
 missing_file_error=Pwail me PDF tye ka rem.
diff --git a/third-party/pdfjs/web/locale/af/viewer.properties 
b/third-party/pdfjs/web/locale/af/viewer.properties
index c7d6c42b4..2d471bbaf 100644
--- a/third-party/pdfjs/web/locale/af/viewer.properties
+++ b/third-party/pdfjs/web/locale/af/viewer.properties
@@ -162,7 +162,6 @@ page_scale_actual=Werklike grootte
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Fout
 loading_error='n Fout het voorgekom met die laai van die PDF.
 invalid_file_error=Ongeldige of korrupte PDF-lêer.
 missing_file_error=PDF-lêer is weg.
diff --git a/third-party/pdfjs/web/locale/an/viewer.properties 
b/third-party/pdfjs/web/locale/an/viewer.properties
index 7e3504c77..ccbefc95e 100644
--- a/third-party/pdfjs/web/locale/an/viewer.properties
+++ b/third-party/pdfjs/web/locale/an/viewer.properties
@@ -42,7 +42,7 @@ print_label=Imprentar
 download.title=Descargar
 download_label=Descargar
 bookmark.title=Vista actual (copiar u ubrir en una nueva finestra)
-bookmark_label=Anvista actual
+bookmark_label=Vista actual
 
 # Secondary toolbar and context menu
 tools.title=Ferramientas
@@ -65,6 +65,20 @@ cursor_text_select_tool_label=Ferramienta de selección de texto
 cursor_hand_tool.title=Activar la ferramienta man
 cursor_hand_tool_label=Ferramienta man
 
+scroll_vertical.title=Usar lo desplazamiento vertical
+scroll_vertical_label=Desplazamiento vertical
+scroll_horizontal.title=Usar lo desplazamiento horizontal
+scroll_horizontal_label=Desplazamiento horizontal
+scroll_wrapped.title=Activaar lo desplazamiento contino
+scroll_wrapped_label=Desplazamiento contino
+
+spread_none.title=No unir vistas de pachinas
+spread_none_label=Una pachina nomás
+spread_odd.title=Mostrar vista de pachinas, con as impars a la zurda
+spread_odd_label=Doble pachina, impar a la zurda
+spread_even.title=Amostrar vista de pachinas, con as pars a la zurda
+spread_even_label=Doble pachina, para a la zurda
+
 # Document properties dialog box
 document_properties.title=Propiedatz d'o documento...
 document_properties_label=Propiedatz d'o documento...
@@ -89,6 +103,28 @@ document_properties_creator=Creyador:
 document_properties_producer=Creyador de PDF:
 document_properties_version=Versión de PDF:
 document_properties_page_count=Numero de pachinas:
+document_properties_page_size=Mida de pachina:
+document_properties_page_size_unit_inches=pulgadas
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=vertical
+document_properties_page_size_orientation_landscape=horizontal
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Carta
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} x {{height}} {{unit}} {{orientation}}
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} x {{height}} {{unit}} {{name}}, {{orientation}}
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Vista web rapida:
+document_properties_linearized_yes=Sí
+document_properties_linearized_no=No
 document_properties_close=Zarrar
 
 print_progress_message=Se ye preparando la documentación pa imprentar…
@@ -102,16 +138,22 @@ print_progress_close=Cancelar
 # tooltips)
 toggle_sidebar.title=Amostrar u amagar a barra lateral
 toggle_sidebar_notification.title=Cambiar barra lateral (lo documento contiene esquema/adchuntos)
+toggle_sidebar_notification2.title=Cambiar barra lateral (lo documento contiene esquema/adchuntos/capas)
 toggle_sidebar_label=Amostrar a barra lateral
 document_outline.title=Amostrar esquema d'o documento (fer doble clic pa expandir/compactar totz los items)
 document_outline_label=Esquema d'o documento
 attachments.title=Amostrar os adchuntos
 attachments_label=Adchuntos
+layers.title=Amostrar capas (doble clic para reiniciar totas las capas a lo estau per defecto)
+layers_label=Capas
 thumbs.title=Amostrar as miniaturas
 thumbs_label=Miniaturas
 findbar.title=Trobar en o documento
 findbar_label=Trobar
 
+additional_layers=Capas adicionals
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Pachina {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
 # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
 # number.
@@ -129,8 +171,30 @@ find_next.title=Trobar a siguient coincidencia d'a frase
 find_next_label=Siguient
 find_highlight=Resaltar-lo tot
 find_match_case_label=Coincidencia de mayusclas/minusclas
+find_entire_word_label=Parolas completas
 find_reached_top=S'ha plegau a l'inicio d'o documento, se contina dende baixo
 find_reached_bottom=S'ha plegau a la fin d'o documento, se contina dende alto
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} de {{total}} coincidencia
+find_match_count[two]={{current}} de {{total}} coincidencias
+find_match_count[few]={{current}} de {{total}} coincidencias
+find_match_count[many]={{current}} de {{total}} coincidencias
+find_match_count[other]={{current}} de {{total}} coincidencias
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Mas de {{limit}} coincidencias
+find_match_count_limit[one]=Mas de {{limit}} coincidencias
+find_match_count_limit[two]=Mas que {{limit}} coincidencias
+find_match_count_limit[few]=Mas que {{limit}} coincidencias
+find_match_count_limit[many]=Mas que {{limit}} coincidencias
+find_match_count_limit[other]=Mas que {{limit}} coincidencias
 find_not_found=No s'ha trobau a frase
 
 # Error panel labels
@@ -162,12 +226,15 @@ page_scale_actual=Grandaria actual
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Error
 loading_error=S'ha produciu una error en cargar o PDF.
 invalid_file_error=O PDF no ye valido u ye estorbau.
 missing_file_error=No i ha fichero PDF.
 unexpected_response_error=Respuesta a lo servicio inasperada.
 
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
 # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
 # "{{type}}" will be replaced with an annotation type from a list defined in
 # the PDF spec (32000-1:2008 Table 169 – Annotation types).
diff --git a/third-party/pdfjs/web/locale/ar/viewer.properties 
b/third-party/pdfjs/web/locale/ar/viewer.properties
index cffa8bec5..440eed6b9 100644
--- a/third-party/pdfjs/web/locale/ar/viewer.properties
+++ b/third-party/pdfjs/web/locale/ar/viewer.properties
@@ -47,12 +47,12 @@ bookmark_label=المنظور الحالي
 # Secondary toolbar and context menu
 tools.title=الأدوات
 tools_label=الأدوات
-first_page.title=اذهب إلى الصفحة الأولى
-first_page.label=اذهب إلى الصفحة الأولى
-first_page_label=اذهب إلى الصفحة الأولى
-last_page.title=اذهب إلى الصفحة الأخيرة
-last_page.label=اذهب إلى الصفحة الأخيرة
-last_page_label=اذهب إلى الصفحة الأخيرة
+first_page.title=انتقل إلى الصفحة الأولى
+first_page.label=انتقل إلى الصفحة الأولى
+first_page_label=انتقل إلى الصفحة الأولى
+last_page.title=انتقل إلى الصفحة الأخيرة
+last_page.label=انتقل إلى الصفحة الأخيرة
+last_page_label=انتقل إلى الصفحة الأخيرة
 page_rotate_cw.title=أدر باتجاه عقارب الساعة
 page_rotate_cw.label=أدر باتجاه عقارب الساعة
 page_rotate_cw_label=أدر باتجاه عقارب الساعة
@@ -138,16 +138,22 @@ print_progress_close=ألغِ
 # tooltips)
 toggle_sidebar.title=بدّل ظهور الشريط الجانبي
 toggle_sidebar_notification.title=بدّل ظهور الشريط الجانبي (يحتوي المستند على مخطط أو مرفقات)
+toggle_sidebar_notification2.title=بدّل ظهور الشريط الجانبي (يحتوي المستند على مخطط أو مرفقات أو طبقات)
 toggle_sidebar_label=بدّل ظهور الشريط الجانبي
 document_outline.title=اعرض فهرس المستند (نقر مزدوج لتمديد أو تقليص كل العناصر)
 document_outline_label=مخطط المستند
 attachments.title=اعرض المرفقات
 attachments_label=المُرفقات
+layers.title=اعرض الطبقات (انقر مرتين لتصفير كل الطبقات إلى الحالة المبدئية)
+layers_label=‏‏الطبقات
 thumbs.title=اعرض مُصغرات
 thumbs_label=مُصغّرات
 findbar.title=ابحث في المستند
 findbar_label=ابحث
 
+additional_layers=الطبقات الإضافية
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=صفحة {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
 # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
 # number.
@@ -220,7 +226,6 @@ page_scale_actual=الحجم الفعلي
 page_scale_percent={{scale}}٪
 
 # Loading indicator messages
-loading_error_indicator=عطل
 loading_error=حدث عطل أثناء تحميل ملف PDF.
 invalid_file_error=ملف PDF تالف أو غير صحيح.
 missing_file_error=ملف PDF غير موجود.
diff --git a/third-party/pdfjs/web/locale/ast/viewer.properties 
b/third-party/pdfjs/web/locale/ast/viewer.properties
index 5f6d5e7c0..f33ad6763 100644
--- a/third-party/pdfjs/web/locale/ast/viewer.properties
+++ b/third-party/pdfjs/web/locale/ast/viewer.properties
@@ -28,65 +28,32 @@ of_pages=de {{pagesCount}}
 # respectively a number representing the total number of pages in the document.
 page_of_pages=({{pageNumber}} de {{pagesCount}})
 
-zoom_out.title=Reducir
-zoom_out_label=Reducir
-zoom_in.title=Aumentar
-zoom_in_label=Aumentar
-zoom.title=Tamañu
-open_file.title=Abrir ficheru
-open_file_label=Abrir
-print.title=Imprentar
-print_label=Imprentar
-download.title=Descargar
-download_label=Descargar
-bookmark.title=Vista actual (copiar o abrir nuna nueva ventana)
 bookmark_label=Vista actual
 
 # Secondary toolbar and context menu
 tools.title=Ferramientes
 tools_label=Ferramientes
-first_page.title=Dir a la primer páxina
-first_page.label=Dir a la primer páxina
-first_page_label=Dir a la primer páxina
-last_page.title=Dir a la postrer páxina
-last_page.label=Dir a la cabera páxina
-last_page_label=Dir a la postrer páxina
-page_rotate_cw.title=Xirar en sen horariu
-page_rotate_cw_label=Xirar en sen horariu
-page_rotate_ccw.title=Xirar en sen antihorariu
-page_rotate_ccw_label=Xirar en sen antihorariu
 
 
 scroll_vertical_label=Desplazamientu vertical
 scroll_horizontal_label=Desplazamientu horizontal
+scroll_wrapped_label=Desplazamientu continuu
 
 
 # Document properties dialog box
-document_properties.title=Propiedaes del documentu…
-document_properties_label=Propiedaes del documentu…
-document_properties_file_name=Nome de ficheru:
-document_properties_file_size=Tamañu de ficheru:
 # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
 # will be replaced by the PDF file size in kilobytes, respectively in bytes.
 document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
 # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
 # will be replaced by the PDF file size in megabytes, respectively in bytes.
 document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
-document_properties_title=Títulu:
-document_properties_author=Autor:
-document_properties_subject=Asuntu:
-document_properties_keywords=Pallabres clave:
-document_properties_creation_date=Data de creación:
-document_properties_modification_date=Data de modificación:
 # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
 # will be replaced by the creation/modification date, and time, of the PDF file.
 document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Creador:
-document_properties_producer=Productor PDF:
-document_properties_version=Versión PDF:
-document_properties_page_count=Númberu de páxines:
 document_properties_page_size_unit_inches=in
 document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=vertical
+document_properties_page_size_orientation_landscape=horizontal
 document_properties_page_size_name_a3=A3
 document_properties_page_size_name_a4=A4
 # LOCALIZATION NOTE (document_properties_page_size_dimension_string):
@@ -101,48 +68,24 @@ document_properties_page_size_dimension_name_string={{width}} × {{height}} {{un
 # the document; usually called "Fast Web View" in English locales of Adobe software.
 document_properties_linearized_yes=Sí
 document_properties_linearized_no=Non
-document_properties_close=Zarrar
 
-print_progress_message=Tresnando documentu pa imprentar…
 # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
 # a numerical per cent value.
 print_progress_percent={{progress}}%
-print_progress_close=Encaboxar
 
 # Tooltips and alt text for side panel toolbar buttons
 # (the _label strings are alt text for the buttons, the .title strings are
 # tooltips)
-toggle_sidebar.title=Camudar barra llateral
-toggle_sidebar_label=Camudar barra llateral
-document_outline.title=Amosar esquema del documentu (duble clic pa espander/contrayer tolos elementos)
-document_outline_label=Esquema del documentu
-attachments.title=Amosar axuntos
-attachments_label=Axuntos
-thumbs.title=Amosar miniatures
-thumbs_label=Miniatures
-findbar.title=Guetar nel documentu
-findbar_label=Guetar
 
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 # Thumbnails panel item (tooltip and alt text for images)
 # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
 # number.
-thumb_page_title=Páxina {{page}}
 # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
 # number.
-thumb_page_canvas=Miniatura de la páxina {{page}}
 
 # Find panel button title and messages
-find_input.title=Guetar
-find_input.placeholder=Guetar nel documentu…
-find_previous.title=Alcontrar l'anterior apaición de la fras
-find_previous_label=Anterior
-find_next.title=Alcontrar la siguiente apaición d'esta fras
-find_next_label=Siguiente
-find_highlight=Remarcar toos
-find_match_case_label=Coincidencia de mayús./minús.
-find_entire_word_label=Pallabres enteres
-find_reached_top=Algamóse'l principiu del documentu, siguir dende'l final
-find_reached_bottom=Algamóse'l final del documentu, siguir dende'l principiu
+find_entire_word_label=Pallabres completes
 # LOCALIZATION NOTE (find_match_count): The supported plural forms are
 # [one|two|few|many|other], with [other] as the default value.
 # "{{current}}" and "{{total}}" will be replaced by a number representing the
@@ -151,56 +94,47 @@ find_reached_bottom=Algamóse'l final del documentu, siguir dende'l principiu
 # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
 # [zero|one|two|few|many|other], with [other] as the default value.
 # "{{limit}}" will be replaced by a numerical value.
-find_not_found=Frase non atopada
+find_match_count_limit[zero]=Más de {{limit}} coincidencies
+find_match_count_limit[one]=Más de {{limit}} coincidencia
+find_match_count_limit[two]=Más de {{limit}} coincidencies
+find_match_count_limit[few]=Más de {{limit}} coincidencies
+find_match_count_limit[many]=Más de {{limit}} coincidencies
+find_match_count_limit[other]=Más de {{limit}} coincidencies
 
 # Error panel labels
 error_more_info=Más información
 error_less_info=Menos información
-error_close=Zarrar
 # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
 # replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
+error_version_info=PDF.js v{{version}} (compilación: {{build}})
 # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
 # english string describing the error.
 error_message=Mensaxe: {{message}}
 # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
 # trace.
-error_stack=Pila: {{stack}}
 # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
 error_file=Ficheru: {{file}}
 # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
 error_line=Llinia: {{line}}
-rendering_error=Hebo un fallu al renderizar la páxina.
 
 # Predefined zoom values
-page_scale_width=Anchor de la páxina
-page_scale_fit=Axuste de la páxina
-page_scale_auto=Tamañu automáticu
-page_scale_actual=Tamañu actual
+page_scale_auto=Zoom automáticu
+page_scale_actual=Tamañu real
 # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
 # numerical scale value.
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Fallu
-loading_error=Hebo un fallu al cargar el PDF.
-invalid_file_error=Ficheru PDF inválidu o corruptu.
-missing_file_error=Nun hai ficheru PDF.
-unexpected_response_error=Rempuesta inesperada del sirvidor.
+loading_error=Asocedió un fallu mentanto se cargaba'l PDF.
 
 # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
 # replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
 
 # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
 # "{{type}}" will be replaced with an annotation type from a list defined in
 # the PDF spec (32000-1:2008 Table 169 – Annotation types).
 # Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[Anotación {{type}}]
-password_label=Introduz la contraseña p'abrir esti ficheru PDF
-password_invalid=Contraseña non válida. Vuelvi a intentalo.
-password_ok=Aceutar
+password_ok=Aceptar
 password_cancel=Encaboxar
 
-printing_not_supported=Alvertencia: La imprentación entá nun ta sofitada dafechu nesti restolador.
-printing_not_ready=Avisu: Esti PDF nun se cargó completamente pa poder imprentase.
-web_fonts_disabled=Les fontes web tán desactivaes: ye imposible usar les fontes PDF embebíes.
diff --git a/third-party/pdfjs/web/locale/az/viewer.properties 
b/third-party/pdfjs/web/locale/az/viewer.properties
index 8f61d9641..b692fc256 100644
--- a/third-party/pdfjs/web/locale/az/viewer.properties
+++ b/third-party/pdfjs/web/locale/az/viewer.properties
@@ -39,8 +39,8 @@ open_file.title=Fayl Aç
 open_file_label=Aç
 print.title=Yazdır
 print_label=Yazdır
-download.title=Yüklə
-download_label=Yüklə
+download.title=Endir
+download_label=Endir
 bookmark.title=Hazırkı görünüş (köçür və ya yeni pəncərədə aç)
 bookmark_label=Hazırkı görünüş
 
@@ -138,16 +138,20 @@ print_progress_close=Ləğv et
 # tooltips)
 toggle_sidebar.title=Yan Paneli Aç/Bağla
 toggle_sidebar_notification.title=Yan paneli çevir (sənəddə icmal/bağlama var)
+toggle_sidebar_notification2.title=Yan paneli çevir (sənəddə icmal/bağlamalar/laylar mövcuddur)
 toggle_sidebar_label=Yan Paneli Aç/Bağla
 document_outline.title=Sənədin eskizini göstər (bütün bəndləri açmaq/yığmaq üçün iki dəfə klikləyin)
 document_outline_label=Sənəd strukturu
 attachments.title=Bağlamaları göstər
 attachments_label=Bağlamalar
+layers.title=Layları göstər (bütün layları ilkin halına sıfırlamaq üçün iki dəfə klikləyin)
+layers_label=Laylar
 thumbs.title=Kiçik şəkilləri göstər
 thumbs_label=Kiçik şəkillər
 findbar.title=Sənəddə Tap
 findbar_label=Tap
 
+additional_layers=Əlavə laylar
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas=Səhifə {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
@@ -222,7 +226,6 @@ page_scale_actual=Hazırkı Həcm
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Səhv
 loading_error=PDF yüklenərkən bir səhv yarandı.
 invalid_file_error=Səhv və ya zədələnmiş olmuş PDF fayl.
 missing_file_error=PDF fayl yoxdur.
diff --git a/third-party/pdfjs/web/locale/be/viewer.properties 
b/third-party/pdfjs/web/locale/be/viewer.properties
index 6ac719288..90478d764 100644
--- a/third-party/pdfjs/web/locale/be/viewer.properties
+++ b/third-party/pdfjs/web/locale/be/viewer.properties
@@ -138,16 +138,22 @@ print_progress_close=Скасаваць
 # tooltips)
 toggle_sidebar.title=Паказаць/схаваць бакавую панэль
 toggle_sidebar_notification.title=Паказаць/схаваць бакавую панэль (дакумент мае змест/укладанні)
+toggle_sidebar_notification2.title=Паказаць/схаваць бакавую панэль (дакумент мае змест/укладанні/пласты)
 toggle_sidebar_label=Паказаць/схаваць бакавую панэль
 document_outline.title=Паказаць структуру дакумента (двайная пстрычка, каб разгарнуць /згарнуць усе элементы)
 document_outline_label=Структура дакумента
 attachments.title=Паказаць далучэнні
 attachments_label=Далучэнні
+layers.title=Паказаць пласты (двойчы пстрыкніце, каб скінуць усе пласты да прадвызначанага стану)
+layers_label=Пласты
 thumbs.title=Паказ мініяцюр
 thumbs_label=Мініяцюры
+current_outline_item.title=Знайсці бягучы элемент структуры
+current_outline_item_label=Бягучы элемент структуры
 findbar.title=Пошук у дакуменце
 findbar_label=Знайсці
 
+additional_layers=Дадатковыя пласты
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas=Старонка {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
@@ -222,7 +228,6 @@ page_scale_actual=Сапраўдны памер
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Памылка
 loading_error=Здарылася памылка падчас загрузкі PDF.
 invalid_file_error=Няспраўны або пашкоджаны файл PDF.
 missing_file_error=Адсутны файл PDF.
diff --git a/third-party/pdfjs/web/locale/bg/viewer.properties 
b/third-party/pdfjs/web/locale/bg/viewer.properties
index b93e3d1e4..d6007e8f1 100644
--- a/third-party/pdfjs/web/locale/bg/viewer.properties
+++ b/third-party/pdfjs/web/locale/bg/viewer.properties
@@ -220,7 +220,6 @@ page_scale_actual=Действителен размер
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Грешка
 loading_error=Получи се грешка при зареждане на PDF-а.
 invalid_file_error=Невалиден или повреден PDF файл.
 missing_file_error=Липсващ PDF файл.
diff --git a/third-party/pdfjs/web/locale/bn/viewer.properties 
b/third-party/pdfjs/web/locale/bn/viewer.properties
index c106df10c..aa5483f12 100644
--- a/third-party/pdfjs/web/locale/bn/viewer.properties
+++ b/third-party/pdfjs/web/locale/bn/viewer.properties
@@ -220,7 +220,6 @@ page_scale_actual=প্রকৃত আকার
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=ত্রুটি
 loading_error=পিডিএফ লোড করার সময় ত্রুটি দেখা দিয়েছে।
 invalid_file_error=অকার্যকর অথবা ক্ষতিগ্রস্ত পিডিএফ ফাইল।
 missing_file_error=নিখোঁজ PDF ফাইল।
diff --git a/third-party/pdfjs/web/locale/bo/viewer.properties 
b/third-party/pdfjs/web/locale/bo/viewer.properties
index 3ffa84819..f9e7b982c 100644
--- a/third-party/pdfjs/web/locale/bo/viewer.properties
+++ b/third-party/pdfjs/web/locale/bo/viewer.properties
@@ -220,7 +220,6 @@ page_scale_actual=Actual Size
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Error
 loading_error=An error occurred while loading the PDF.
 invalid_file_error=Invalid or corrupted PDF file.
 missing_file_error=Missing PDF file.
diff --git a/third-party/pdfjs/web/locale/br/viewer.properties 
b/third-party/pdfjs/web/locale/br/viewer.properties
index 9add9a432..90f91b91f 100644
--- a/third-party/pdfjs/web/locale/br/viewer.properties
+++ b/third-party/pdfjs/web/locale/br/viewer.properties
@@ -82,27 +82,27 @@ spread_even_label=Pajennoù par
 # Document properties dialog box
 document_properties.title=Perzhioù an teul…
 document_properties_label=Perzhioù an teul…
-document_properties_file_name=Anv restr :
-document_properties_file_size=Ment ar restr :
+document_properties_file_name=Anv restr:
+document_properties_file_size=Ment ar restr:
 # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
 # will be replaced by the PDF file size in kilobytes, respectively in bytes.
 document_properties_kb={{size_kb}} Ke ({{size_b}} eizhbit)
 # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
 # will be replaced by the PDF file size in megabytes, respectively in bytes.
 document_properties_mb={{size_mb}} Me ({{size_b}} eizhbit)
-document_properties_title=Titl :
-document_properties_author=Aozer :
-document_properties_subject=Danvez :
-document_properties_keywords=Gerioù-alc'hwez :
-document_properties_creation_date=Deiziad krouiñ :
-document_properties_modification_date=Deiziad kemmañ :
+document_properties_title=Titl:
+document_properties_author=Aozer:
+document_properties_subject=Danvez:
+document_properties_keywords=Gerioù-alc'hwez:
+document_properties_creation_date=Deiziad krouiñ:
+document_properties_modification_date=Deiziad kemmañ:
 # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
 # will be replaced by the creation/modification date, and time, of the PDF file.
 document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Krouer :
-document_properties_producer=Kenderc'her PDF :
-document_properties_version=Handelv PDF :
-document_properties_page_count=Niver a bajennoù :
+document_properties_creator=Krouer:
+document_properties_producer=Kenderc'her PDF:
+document_properties_version=Handelv PDF:
+document_properties_page_count=Niver a bajennoù:
 document_properties_page_size=Ment ar bajenn:
 document_properties_page_size_unit_inches=in
 document_properties_page_size_unit_millimeters=mm
@@ -138,11 +138,13 @@ print_progress_close=Nullañ
 # tooltips)
 toggle_sidebar.title=Diskouez/kuzhat ar varrenn gostez
 toggle_sidebar_notification.title=Trec'haoliñ ar verrenn-gostez (ur steuñv pe stagadennoù a zo en teul)
+toggle_sidebar_notification2.title=Trec'haoliñ ar varrenn-gostez (ur steuñv pe stagadennoù a zo en teul)
 toggle_sidebar_label=Diskouez/kuzhat ar varrenn gostez
 document_outline.title=Diskouez steuñv an teul (daouglikit evit brasaat/bihanaat an holl elfennoù)
 document_outline_label=Sinedoù an teuliad
 attachments.title=Diskouez ar c'henstagadurioù
 attachments_label=Kenstagadurioù
+layers_label=Gwiskadoù
 thumbs.title=Diskouez ar melvennoù
 thumbs_label=Melvennoù
 findbar.title=Klask e-barzh an teuliad
@@ -199,17 +201,17 @@ error_less_info=Nebeutoc'h a ditouroù
 error_close=Serriñ
 # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
 # replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js handelv {{version}} (kempunadur : {{build}})
+error_version_info=PDF.js handelv {{version}} (kempunadur: {{build}})
 # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
 # english string describing the error.
-error_message=Kemennadenn : {{message}}
+error_message=Kemennadenn: {{message}}
 # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
 # trace.
-error_stack=Torn : {{stack}}
+error_stack=Torn: {{stack}}
 # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Restr : {{file}}
+error_file=Restr: {{file}}
 # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Linenn : {{line}}
+error_line=Linenn: {{line}}
 rendering_error=Degouezhet ez eus bet ur fazi e-pad skrammañ ar bajennad.
 
 # Predefined zoom values
@@ -222,7 +224,6 @@ page_scale_actual=Ment wir
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Fazi
 loading_error=Degouezhet ez eus bet ur fazi e-pad kargañ ar PDF.
 invalid_file_error=Restr PDF didalvoudek pe kontronet.
 missing_file_error=Restr PDF o vankout.
@@ -242,6 +243,6 @@ password_invalid=Ger-tremen didalvoudek. Klaskit en-dro mar plij.
 password_ok=Mat eo
 password_cancel=Nullañ
 
-printing_not_supported=Kemenn : N'eo ket skoret penn-da-benn ar moullañ gant ar merdeer-mañ.
-printing_not_ready=Kemenn : N'hall ket bezañ moullet ar restr PDF rak n'eo ket karget penn-da-benn.
-web_fonts_disabled=Diweredekaet eo an nodrezhoù web : n'haller ket arverañ an nodrezhoù PDF enframmet.
+printing_not_supported=Kemenn: N'eo ket skoret penn-da-benn ar moullañ gant ar merdeer-mañ.
+printing_not_ready=Kemenn: N'hall ket bezañ moullet ar restr PDF rak n'eo ket karget penn-da-benn.
+web_fonts_disabled=Diweredekaet eo an nodrezhoù web: n'haller ket arverañ an nodrezhoù PDF enframmet.
diff --git a/third-party/pdfjs/web/locale/brx/viewer.properties 
b/third-party/pdfjs/web/locale/brx/viewer.properties
index cd3656380..7e88fd234 100644
--- a/third-party/pdfjs/web/locale/brx/viewer.properties
+++ b/third-party/pdfjs/web/locale/brx/viewer.properties
@@ -185,7 +185,6 @@ page_scale_actual=थार महर
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=गोरोन्थि
 loading_error=PDF ल'ड खालामनाय समाव मोनसे गोरोन्थि जाबाय।
 invalid_file_error=बाहायजायै एबा गाज्रि जानाय PDF फाइल
 missing_file_error=गोमानाय PDF फाइल
diff --git a/third-party/pdfjs/web/locale/bs/viewer.properties 
b/third-party/pdfjs/web/locale/bs/viewer.properties
index e5346cb0c..36f8433f2 100644
--- a/third-party/pdfjs/web/locale/bs/viewer.properties
+++ b/third-party/pdfjs/web/locale/bs/viewer.properties
@@ -179,7 +179,6 @@ page_scale_actual=Stvarna veličina
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Greška
 loading_error=Došlo je do greške prilikom učitavanja PDF-a.
 invalid_file_error=Neispravan ili oštećen PDF fajl.
 missing_file_error=Nedostaje PDF fajl.
diff --git a/third-party/pdfjs/web/locale/ca/viewer.properties 
b/third-party/pdfjs/web/locale/ca/viewer.properties
index ac6fb779f..596189d65 100644
--- a/third-party/pdfjs/web/locale/ca/viewer.properties
+++ b/third-party/pdfjs/web/locale/ca/viewer.properties
@@ -138,16 +138,22 @@ print_progress_close=Cancel·la
 # tooltips)
 toggle_sidebar.title=Mostra/amaga la barra lateral
 toggle_sidebar_notification.title=Mostra/amaga la barra lateral (el document conté un esquema o adjuncions)
+toggle_sidebar_notification2.title=Mostra/amaga la barra lateral (el document conté un esquema, adjuncions o 
capes)
 toggle_sidebar_label=Mostra/amaga la barra lateral
 document_outline.title=Mostra l'esquema del document (doble clic per ampliar/reduir tots els elements)
-document_outline_label=Contorn del document
+document_outline_label=Esquema del document
 attachments.title=Mostra les adjuncions
 attachments_label=Adjuncions
+layers.title=Mostra les capes (doble clic per restablir totes les capes al seu estat per defecte)
+layers_label=Capes
 thumbs.title=Mostra les miniatures
 thumbs_label=Miniatures
+current_outline_item.title=Cerca l'element d'esquema actual
+current_outline_item_label=Element d'esquema actual
 findbar.title=Cerca al document
 findbar_label=Cerca
 
+additional_layers=Capes addicionals
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas=Pàgina {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
@@ -213,7 +219,7 @@ error_line=Línia: {{line}}
 rendering_error=S'ha produït un error mentre es renderitzava la pàgina.
 
 # Predefined zoom values
-page_scale_width=Amplària de la pàgina
+page_scale_width=Amplada de la pàgina
 page_scale_fit=Ajusta la pàgina
 page_scale_auto=Zoom automàtic
 page_scale_actual=Mida real
@@ -222,7 +228,6 @@ page_scale_actual=Mida real
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Error
 loading_error=S'ha produït un error en carregar el PDF.
 invalid_file_error=El fitxer PDF no és vàlid o està malmès.
 missing_file_error=Falta el fitxer PDF.
diff --git a/third-party/pdfjs/web/locale/cak/viewer.properties 
b/third-party/pdfjs/web/locale/cak/viewer.properties
index d4eae51a8..4710d5620 100644
--- a/third-party/pdfjs/web/locale/cak/viewer.properties
+++ b/third-party/pdfjs/web/locale/cak/viewer.properties
@@ -138,16 +138,22 @@ print_progress_close=Tiq'at
 # tooltips)
 toggle_sidebar.title=Tijal ri ajxikin kajtz'ik
 toggle_sidebar_notification.title=Tik'ex ri ajxikin yuqkajtz'ik (ri wuj eruk'wan taq ruchi'/taqoj taq 
yakb'äl)
+toggle_sidebar_notification2.title=Tik'ex ri ajxikin yuqkajtz'ik (ri wuj eruk'wan taq ruchi'/taqo/kuchuj)
 toggle_sidebar_label=Tijal ri ajxikin kajtz'ik
 document_outline.title=Tik'ut pe ruch'akulal wuj (kamul-pitz'oj richin nirik'/nich'utinirisäx ronojel 
ruch'akulal)
 document_outline_label=Ruch'akulal wuj
 attachments.title=Kek'ut pe ri taq taqoj
 attachments_label=Taq taqoj
+layers.title=Kek'ut taq Kuchuj (ka'i'-pitz' richin yetzolïx ronojel ri taq kuchuj e k'o wi)
+layers_label=Taq kuchuj
 thumbs.title=Kek'ut pe taq ch'utiq
 thumbs_label=Koköj
+current_outline_item.title=Kekanöx  Taq Ch'akulal Kik'wan Chib'äl
+current_outline_item_label=Taq Ch'akulal Kik'wan Chib'äl
 findbar.title=Tikanöx chupam ri wuj
 findbar_label=Tikanöx
 
+additional_layers=Tz'aqat ta Kuchuj
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas=Ruxaq {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
@@ -222,7 +228,6 @@ page_scale_actual=Runimilem Wakami
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Sachoj
 loading_error=\u0020Xk'ulwachitäj jun sach'oj toq xnuk'ux ri PDF .
 invalid_file_error=Man oke ta o yujtajinäq ri PDF yakb'äl.
 missing_file_error=Man xilitäj ta ri PDF yakb'äl.
diff --git a/third-party/pdfjs/web/locale/ckb/viewer.properties 
b/third-party/pdfjs/web/locale/ckb/viewer.properties
index d1bed431b..309428313 100644
--- a/third-party/pdfjs/web/locale/ckb/viewer.properties
+++ b/third-party/pdfjs/web/locale/ckb/viewer.properties
@@ -13,6 +13,8 @@
 # limitations under the License.
 
 # Main toolbar buttons (tooltips and alt text for images)
+previous.title=پەڕەی پێشوو
+previous_label=پێشوو
 next.title=پەڕەی دوواتر
 next_label=دوواتر
 
@@ -20,92 +22,219 @@ next_label=دوواتر
 page.title=پەرە
 # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
 # representing the total number of pages in the document.
+of_pages=لە {{pagesCount}}
 # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
 # will be replaced by a number representing the currently visible page,
 # respectively a number representing the total number of pages in the document.
-
+page_of_pages=({{pageNumber}} لە {{pagesCount}})
+
+zoom_out.title=ڕۆچوونی
+zoom_out_label=ڕۆچوونی
+zoom_in.title=هێنانەپێش
+zoom_in_label=هێنانەپێش
+zoom.title=زووم
+presentation_mode.title=گۆڕین بۆ دۆخی پێشکەشکردن
+presentation_mode_label=دۆخی پێشکەشکردن
 open_file.title=پەڕگە بکەرەوە
 open_file_label=کردنەوە
 print.title=چاپکردن
+print_label=چاپکردن
 download.title=داگرتن
+download_label=داگرتن
+bookmark.title=پێشبینینی ئێستا(لەبەریبگرەوە یان پەنجەرەیەکی نوێ بکەرەوە)
+bookmark_label=پیشبینینی ئێستا
 
 # Secondary toolbar and context menu
 tools.title=ئامرازەکان
+tools_label=ئامرازەکان
 first_page.title=برۆ بۆ یەکەم پەڕە
-
-
+first_page.label=بڕۆ بۆ یەکەم پەڕە
+first_page_label=بڕۆ بۆ یەکەم پەڕە
+last_page.title=بڕۆ بۆ کۆتا پەڕە
+last_page.label=بڕۆ بۆ کۆتا پەڕە
+last_page_label=بڕۆ بۆ کۆتا پەڕە
+page_rotate_cw.title=ئاڕاستەی میلی کاتژمێر
+page_rotate_cw.label=ئاڕاستەی میلی کاتژمێر
+page_rotate_cw_label=ئاڕاستەی میلی کاتژمێر
+page_rotate_ccw.title=پێچەوانەی میلی کاتژمێر
+page_rotate_ccw.label=پێچەوانەی میلی کاتژمێر
+page_rotate_ccw_label=پێچەوانەی میلی کاتژمێر
+
+cursor_text_select_tool.title=توڵامرازی نیشانکەری دەق چالاک بکە
+cursor_text_select_tool_label=توڵامرازی نیشانکەری دەق
+cursor_hand_tool.title=توڵامرازی دەستی چالاک بکە
+cursor_hand_tool_label=توڵامرازی دەستی
+
+scroll_vertical.title=ناردنی ئەستوونی بەکاربێنە
+scroll_vertical_label=ناردنی ئەستوونی
+scroll_horizontal.title=ناردنی ئاسۆیی بەکاربێنە
+scroll_horizontal_label=ناردنی ئاسۆیی 
+scroll_wrapped.title=ناردنی لوولکراو بەکاربێنە
+scroll_wrapped_label=ناردنی لوولکراو 
 
 
 # Document properties dialog box
+document_properties.title=تایبەتمەندییەکانی بەڵگەنامە...
+document_properties_label=تایبەتمەندییەکانی بەڵگەنامە...
 document_properties_file_name=ناوی پەڕگە:
 document_properties_file_size=قەبارەی پەڕگە:
 # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
 # will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} کب ({{size_b}} بایت)
 # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
 # will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} مب ({{size_b}} بایت)
 document_properties_title=سەردێڕ:
 document_properties_author=نووسەر
+document_properties_subject=بابەت:
 document_properties_keywords=کلیلەوشە:
+document_properties_creation_date=بەرواری درووستکردن:
+document_properties_modification_date=بەرواری دەستکاریکردن:
 # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
 # will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=درووستکەر:
+document_properties_producer=بەرهەمهێنەری PDF:
+document_properties_version=وەشانی PDF:
+document_properties_page_count=ژمارەی پەرەکان:
+document_properties_page_size=قەبارەی پەڕە:
+document_properties_page_size_unit_inches=ئینچ
+document_properties_page_size_unit_millimeters=ملم
+document_properties_page_size_orientation_portrait=پۆرترەیت(درێژ)
+document_properties_page_size_orientation_landscape=پانیی
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=نامە
+document_properties_page_size_name_legal=یاسایی
 # LOCALIZATION NOTE (document_properties_page_size_dimension_string):
 # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
 # the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
 # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
 # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
 # the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, 
{{orientation}})
 # LOCALIZATION NOTE (document_properties_linearized): The linearization status of
 # the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=پیشاندانی وێبی خێرا:
+document_properties_linearized_yes=بەڵێ
+document_properties_linearized_no=نەخێر
 document_properties_close=داخستن
 
+print_progress_message=بەڵگەنامە ئامادەدەکرێت بۆ چاپکردن...
 # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
 # a numerical per cent value.
+print_progress_percent={{progress}}%
 print_progress_close=پاشگەزبوونەوە
 
 # Tooltips and alt text for side panel toolbar buttons
 # (the _label strings are alt text for the buttons, the .title strings are
 # tooltips)
+toggle_sidebar.title=لاتەنیشت پیشاندان/شاردنەوە
+toggle_sidebar_label=لاتەنیشت پیشاندان/شاردنەوە
+document_outline_label=سنووری چوارچێوە
+attachments.title=پاشکۆکان پیشان بدە
+attachments_label=پاشکۆکان
+layers_label=چینەکان
+thumbs.title=وێنۆچکە پیشان بدە
+thumbs_label=وێنۆچکە
+findbar.title=لە بەڵگەنامە بگەرێ
 findbar_label=دۆزینەوە
 
+additional_layers=چینی زیاتر
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=پەڕەی {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
 # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
 # number.
+thumb_page_title=پەڕەی {{page}}
 # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
 # number.
+thumb_page_canvas=وێنۆچکەی پەڕەی {{page}}
 
 # Find panel button title and messages
 find_input.title=دۆزینەوە
+find_input.placeholder=لە بەڵگەنامە بگەرێ...
+find_previous.title=هەبوونی پێشوو بدۆزرەوە لە ڕستەکەدا
+find_previous_label=پێشوو
+find_next.title=هەبوونی داهاتوو بدۆزەرەوە لە ڕستەکەدا
+find_next_label=دوواتر
+find_highlight=هەمووی نیشانە بکە
+find_match_case_label=دۆخی لەیەکچوون
+find_entire_word_label=هەموو وشەکان
+find_reached_top=گەشتیتە سەرەوەی بەڵگەنامە، لە خوارەوە دەستت پێکرد
+find_reached_bottom=گەشتیتە کۆتایی بەڵگەنامە. لەسەرەوە دەستت پێکرد
 # LOCALIZATION NOTE (find_match_count): The supported plural forms are
 # [one|two|few|many|other], with [other] as the default value.
 # "{{current}}" and "{{total}}" will be replaced by a number representing the
 # index of the currently active find result, respectively a number representing
 # the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} لە کۆی {{total}} لەیەکچوو
+find_match_count[two]={{current}} لە کۆی {{total}} لەیەکچوو
+find_match_count[few]={{current}} لە کۆی {{total}} لەیەکچوو
+find_match_count[many]={{current}} لە کۆی {{total}} لەیەکچوو
+find_match_count[other]={{current}} لە کۆی {{total}} لەیەکچوو
 # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
 # [zero|one|two|few|many|other], with [other] as the default value.
 # "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=زیاتر لە {{limit}} لەیەکچوو
+find_match_count_limit[one]=زیاتر لە {{limit}} لەیەکچوو
+find_match_count_limit[two]=زیاتر لە {{limit}} لەیەکچوو
+find_match_count_limit[few]=زیاتر لە {{limit}} لەیەکچوو
+find_match_count_limit[many]=زیاتر لە {{limit}} لەیەکچوو
+find_match_count_limit[other]=زیاتر لە {{limit}} لەیەکچوو
+find_not_found=نووسین نەدۆزرایەوە
 
 # Error panel labels
+error_more_info=زانیاری زیاتر
+error_less_info=زانیاری کەمتر
+error_close=داخستن
 # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
 # replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
 # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
 # english string describing the error.
+error_message=پەیام: {{message}}
 # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
 # trace.
+error_stack=لەسەریەک: {{stack}}
 # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=پەڕگە: {{file}}
 # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=هێڵ: {{line}}
+rendering_error=هەڵەیەک ڕوویدا لە کاتی پوختەکردنی (ڕێندەر) پەڕە.
 
 # Predefined zoom values
+page_scale_width=پانی پەڕە
+page_scale_fit=پڕبوونی پەڕە
+page_scale_auto=زوومی خۆکار
+page_scale_actual=قەبارەی ڕاستی
 # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
 # numerical scale value.
+page_scale_percent={{scale}}%
 
 # Loading indicator messages
+loading_error=هەڵەیەک ڕوویدا لە کاتی بارکردنی  PDF.
+invalid_file_error=پەڕگەی pdf تێکچووە یان نەگونجاوە.
+missing_file_error=پەڕگەی pdf بوونی نیە.
+unexpected_response_error=وەڵامی ڕاژەخوازی نەخوازراو.
 
 # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
 # replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
 
 # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
 # "{{type}}" will be replaced with an annotation type from a list defined in
 # the PDF spec (32000-1:2008 Table 169 – Annotation types).
 # Some common types are e.g.: "Check", "Text", "Comment", "Note"
-
+text_annotation_type.alt=[{{type}} سەرنج]
+password_label=وشەی تێپەڕ بنووسە بۆ کردنەوەی پەڕگەی pdf.
+password_invalid=وشەی تێپەڕ هەڵەیە. تکایە دووبارە هەوڵ بدەرەوە.
+password_ok=باشە
+password_cancel=پاشگەزبوونەوە
+
+printing_not_supported=ئاگاداربە: چاپکردن بە تەواوی پشتگیر ناکرێت لەم وێبگەڕە.
+printing_not_ready=ئاگاداربە: PDF بە تەواوی بارنەبووە بۆ چاپکردن.
+web_fonts_disabled=جۆرەپیتی وێب ناچالاکە: نەتوانی جۆرەپیتی تێخراوی ناو pdfـەکە بەکاربێت.
diff --git a/third-party/pdfjs/web/locale/cs/viewer.properties 
b/third-party/pdfjs/web/locale/cs/viewer.properties
index 646f410bb..6521dcaa3 100644
--- a/third-party/pdfjs/web/locale/cs/viewer.properties
+++ b/third-party/pdfjs/web/locale/cs/viewer.properties
@@ -138,16 +138,22 @@ print_progress_close=Zrušit
 # tooltips)
 toggle_sidebar.title=Postranní lišta
 toggle_sidebar_notification.title=Přepne postranní lištu (dokument obsahuje osnovu/přílohy)
+toggle_sidebar_notification2.title=Přepnout postranní lištu (dokument obsahuje osnovu/přílohy/vrstvy)
 toggle_sidebar_label=Postranní lišta
 document_outline.title=Zobrazí osnovu dokumentu (dvojité klepnutí rozbalí/sbalí všechny položky)
 document_outline_label=Osnova dokumentu
 attachments.title=Zobrazí přílohy
 attachments_label=Přílohy
+layers.title=Zobrazit vrstvy (poklepáním obnovíte všechny vrstvy do výchozího stavu)
+layers_label=Vrstvy
 thumbs.title=Zobrazí náhledy
 thumbs_label=Náhledy
+current_outline_item.title=Najít aktuální položku v osnově
+current_outline_item_label=Aktuální položka v osnově
 findbar.title=Najde v dokumentu
 findbar_label=Najít
 
+additional_layers=Další vrstvy
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas=Strana {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
@@ -222,7 +228,6 @@ page_scale_actual=Skutečná velikost
 page_scale_percent={{scale}} %
 
 # Loading indicator messages
-loading_error_indicator=Chyba
 loading_error=Při nahrávání PDF nastala chyba.
 invalid_file_error=Neplatný nebo chybný soubor PDF.
 missing_file_error=Chybí soubor PDF.
diff --git a/third-party/pdfjs/web/locale/cy/viewer.properties 
b/third-party/pdfjs/web/locale/cy/viewer.properties
index 16cda5fd7..76f3dfa55 100644
--- a/third-party/pdfjs/web/locale/cy/viewer.properties
+++ b/third-party/pdfjs/web/locale/cy/viewer.properties
@@ -138,16 +138,22 @@ print_progress_close=Diddymu
 # tooltips)
 toggle_sidebar.title=Toglo'r Bar Ochr
 toggle_sidebar_notification.title=Toglo'r Bar Ochr (mae'r ddogfen yn cynnwys outline/attachments)
+toggle_sidebar_notification2.title=Toglo'r Bar Ochr (mae'r ddogfen yn cynnwys amlinelliadau/atodiadau/haenau)
 toggle_sidebar_label=Toglo'r Bar Ochr
 document_outline.title=Dangos Amlinell Dogfen (clic dwbl i ymestyn/cau pob eitem)
 document_outline_label=Amlinelliad Dogfen
 attachments.title=Dangos Atodiadau
 attachments_label=Atodiadau
+layers.title=Dangos Haenau (cliciwch ddwywaith i ailosod yr holl haenau i'r cyflwr rhagosodedig)
+layers_label=Haenau
 thumbs.title=Dangos Lluniau Bach
 thumbs_label=Lluniau Bach
+current_outline_item.title=Canfod yr Eitem Amlinellol Gyfredol
+current_outline_item_label=Yr Eitem Amlinellol Gyfredol
 findbar.title=Canfod yn y Ddogfen
 findbar_label=Canfod
 
+additional_layers=Haenau Ychwanegol
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas=Tudalen {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
@@ -222,7 +228,6 @@ page_scale_actual=Maint Gwirioneddol
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Gwall
 loading_error=Digwyddodd gwall wrth lwytho'r PDF.
 invalid_file_error=Ffeil PDF annilys neu llwgr.
 missing_file_error=Ffeil PDF coll.
diff --git a/third-party/pdfjs/web/locale/da/viewer.properties 
b/third-party/pdfjs/web/locale/da/viewer.properties
index 38ed99d0b..25e6fa9d9 100644
--- a/third-party/pdfjs/web/locale/da/viewer.properties
+++ b/third-party/pdfjs/web/locale/da/viewer.properties
@@ -138,16 +138,22 @@ print_progress_close=Annuller
 # tooltips)
 toggle_sidebar.title=Slå sidepanel til eller fra
 toggle_sidebar_notification.title=Slå sidepanel til eller fra (dokumentet indeholder disposition/vedhæftede 
filer)
+toggle_sidebar_notification2.title=Slå sidepanel til eller fra (dokumentet indeholder disposition/vedhæftede 
filer/lag)
 toggle_sidebar_label=Slå sidepanel til eller fra
 document_outline.title=Vis dokumentets disposition (dobbeltklik for at vise/skjule alle elementer)
 document_outline_label=Dokument-disposition
 attachments.title=Vis vedhæftede filer
 attachments_label=Vedhæftede filer
+layers.title=Vis lag (dobbeltklik for at nulstille alle lag til standard-tilstanden)
+layers_label=Lag
 thumbs.title=Vis miniaturer
 thumbs_label=Miniaturer
+current_outline_item.title=Find det aktuelle dispositions-element
+current_outline_item_label=Aktuelt dispositions-element
 findbar.title=Find i dokument
 findbar_label=Find
 
+additional_layers=Yderligere lag
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas=Side {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
@@ -222,7 +228,6 @@ page_scale_actual=Faktisk størrelse
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Fejl
 loading_error=Der opstod en fejl ved indlæsning af PDF-filen.
 invalid_file_error=PDF-filen er ugyldig eller ødelagt.
 missing_file_error=Manglende PDF-fil.
diff --git a/third-party/pdfjs/web/locale/de/viewer.properties 
b/third-party/pdfjs/web/locale/de/viewer.properties
index 26b682ebe..f37d7f444 100644
--- a/third-party/pdfjs/web/locale/de/viewer.properties
+++ b/third-party/pdfjs/web/locale/de/viewer.properties
@@ -138,16 +138,22 @@ print_progress_close=Abbrechen
 # tooltips)
 toggle_sidebar.title=Sidebar umschalten
 toggle_sidebar_notification.title=Sidebar umschalten (Dokument enthält Dokumentstruktur/Anhänge)
+toggle_sidebar_notification2.title=Sidebar umschalten (Dokument enthält Dokumentstruktur/Anhänge/Ebenen)
 toggle_sidebar_label=Sidebar umschalten
 document_outline.title=Dokumentstruktur anzeigen (Doppelklicken, um alle Einträge aus- bzw. einzuklappen)
 document_outline_label=Dokumentstruktur
 attachments.title=Anhänge anzeigen
 attachments_label=Anhänge
+layers.title=Ebenen anzeigen (Doppelklicken, um alle Ebenen auf den Standardzustand zurückzusetzen)
+layers_label=Ebenen
 thumbs.title=Miniaturansichten anzeigen
 thumbs_label=Miniaturansichten
+current_outline_item.title=Aktuelles Struktur-Element finden
+current_outline_item_label=Aktuelles Struktur-Element
 findbar.title=Dokument durchsuchen
 findbar_label=Suchen
 
+additional_layers=Zusätzliche Ebenen
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas=Seite {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
@@ -222,7 +228,6 @@ page_scale_actual=Originalgröße
 page_scale_percent={{scale}} %
 
 # Loading indicator messages
-loading_error_indicator=Fehler
 loading_error=Beim Laden der PDF-Datei trat ein Fehler auf.
 invalid_file_error=Ungültige oder beschädigte PDF-Datei
 missing_file_error=Fehlende PDF-Datei
diff --git a/third-party/pdfjs/web/locale/dsb/viewer.properties 
b/third-party/pdfjs/web/locale/dsb/viewer.properties
index 468ccd745..41b142d51 100644
--- a/third-party/pdfjs/web/locale/dsb/viewer.properties
+++ b/third-party/pdfjs/web/locale/dsb/viewer.properties
@@ -138,16 +138,22 @@ print_progress_close=Pśetergnuś
 # tooltips)
 toggle_sidebar.title=Bócnicu pokazaś/schowaś
 toggle_sidebar_notification.title=Bocnicu pśešaltowaś (dokument wopśimujo pśeglěd/pśipiski)
+toggle_sidebar_notification2.title=Bocnicu pśešaltowaś (dokument rozrědowanje/pśipiski/warstwy wopśimujo)
 toggle_sidebar_label=Bócnicu pokazaś/schowaś
 document_outline.title=Dokumentowe naraźenje pokazaś (dwójne kliknjenje, aby se wšykne zapiski 
pokazali/schowali)
 document_outline_label=Dokumentowa struktura
 attachments.title=Pśidanki pokazaś
 attachments_label=Pśidanki
+layers.title=Warstwy pokazaś (klikniśo dwójcy, aby wšykne warstwy na standardny staw slědk stajił)
+layers_label=Warstwy
 thumbs.title=Miniatury pokazaś
 thumbs_label=Miniatury
+current_outline_item.title=Aktualny rozrědowański zapisk pytaś
+current_outline_item_label=Aktualny rozrědowański zapisk
 findbar.title=W dokumenśe pytaś
 findbar_label=Pytaś
 
+additional_layers=Dalšne warstwy
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas=Bok {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
@@ -222,7 +228,6 @@ page_scale_actual=Aktualna wjelikosć
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Zmólka
 loading_error=Pśi zacytowanju PDF jo zmólka nastała.
 invalid_file_error=Njepłaśiwa abo wobškóźona PDF-dataja.
 missing_file_error=Felujuca PDF-dataja.
diff --git a/third-party/pdfjs/web/locale/el/viewer.properties 
b/third-party/pdfjs/web/locale/el/viewer.properties
index 896bbeefc..e9b5c542e 100644
--- a/third-party/pdfjs/web/locale/el/viewer.properties
+++ b/third-party/pdfjs/web/locale/el/viewer.properties
@@ -105,7 +105,7 @@ document_properties_version=Έκδοση PDF:
 document_properties_page_count=Αριθμός σελίδων:
 document_properties_page_size=Μέγεθος σελίδας:
 document_properties_page_size_unit_inches=ίντσες
-document_properties_page_size_unit_millimeters=χιλιοστά
+document_properties_page_size_unit_millimeters=mm
 document_properties_page_size_orientation_portrait=κατακόρυφα
 document_properties_page_size_orientation_landscape=οριζόντια
 document_properties_page_size_name_a3=A3
@@ -131,23 +131,29 @@ print_progress_message=Προετοιμασία του εγγράφου για 
 # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
 # a numerical per cent value.
 print_progress_percent={{progress}}%
-print_progress_close=Άκυρο
+print_progress_close=Ακύρωση
 
 # Tooltips and alt text for side panel toolbar buttons
 # (the _label strings are alt text for the buttons, the .title strings are
 # tooltips)
 toggle_sidebar.title=(Απ)ενεργοποίηση πλευρικής στήλης
 toggle_sidebar_notification.title=(Απ)ενεργοποίηση πλευρικής στήλης (το έγγραφο περιέχει 
περίγραμμα/συνημμένα)
+toggle_sidebar_notification2.title=(Απ)ενεργοποίηση πλευρικής στήλης (το έγγραφο περιέχει 
περίγραμμα/συνημμένα/επίπεδα)
 toggle_sidebar_label=(Απ)ενεργοποίηση πλευρικής στήλης
 document_outline.title=Εμφάνιση διάρθρωσης εγγράφου (διπλό κλικ για ανάπτυξη/σύμπτυξη όλων των στοιχείων)
 document_outline_label=Διάρθρωση εγγράφου
 attachments.title=Προβολή συνημμένων
 attachments_label=Συνημμένα
+layers.title=Εμφάνιση επιπέδων (διπλό κλικ για επαναφορά όλων των επιπέδων στην προεπιλεγμένη κατάσταση)
+layers_label=Επίπεδα
 thumbs.title=Προβολή μικρογραφιών
 thumbs_label=Μικρογραφίες
+current_outline_item.title=Εύρεση τρέχοντος στοιχείου διάρθρωσης
+current_outline_item_label=Τρέχον στοιχείο διάρθρωσης
 findbar.title=Εύρεση στο έγγραφο
 findbar_label=Εύρεση
 
+additional_layers=Επιπρόσθετα επίπεδα
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas=Σελίδα {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
@@ -222,7 +228,6 @@ page_scale_actual=Πραγματικό μέγεθος
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Σφάλμα
 loading_error=Προέκυψε ένα σφάλμα κατά τη φόρτωση του PDF.
 invalid_file_error=Μη έγκυρο ή κατεστραμμένο αρχείο PDF.
 missing_file_error=Λείπει αρχείο PDF.
@@ -239,7 +244,7 @@ annotation_date_string={{date}}, {{time}}
 text_annotation_type.alt=[{{type}} Σχόλιο]
 password_label=Εισαγωγή κωδικού για το άνοιγμα του PDF αρχείου.
 password_invalid=Μη έγκυρος κωδικός. Προσπαθείστε ξανά.
-password_ok=ΟΚ
+password_ok=OK
 password_cancel=Ακύρωση
 
 printing_not_supported=Προειδοποίηση: Η εκτύπωση δεν υποστηρίζεται πλήρως από αυτόν τον περιηγητή.
diff --git a/third-party/pdfjs/web/locale/en-CA/viewer.properties 
b/third-party/pdfjs/web/locale/en-CA/viewer.properties
index 554a0e176..25eb4484e 100644
--- a/third-party/pdfjs/web/locale/en-CA/viewer.properties
+++ b/third-party/pdfjs/web/locale/en-CA/viewer.properties
@@ -56,9 +56,9 @@ last_page_label=Go to Last Page
 page_rotate_cw.title=Rotate Clockwise
 page_rotate_cw.label=Rotate Clockwise
 page_rotate_cw_label=Rotate Clockwise
-page_rotate_ccw.title=Rotate Anti-Clockwise
-page_rotate_ccw.label=Rotate Anti-Clockwise
-page_rotate_ccw_label=Rotate Anti-Clockwise
+page_rotate_ccw.title=Rotate Counterclockwise
+page_rotate_ccw.label=Rotate Counterclockwise
+page_rotate_ccw_label=Rotate Counterclockwise
 
 cursor_text_select_tool.title=Enable Text Selection Tool
 cursor_text_select_tool_label=Text Selection Tool
@@ -138,16 +138,22 @@ print_progress_close=Cancel
 # tooltips)
 toggle_sidebar.title=Toggle Sidebar
 toggle_sidebar_notification.title=Toggle Sidebar (document contains outline/attachments)
+toggle_sidebar_notification2.title=Toggle Sidebar (document contains outline/attachments/layers)
 toggle_sidebar_label=Toggle Sidebar
 document_outline.title=Show Document Outline (double-click to expand/collapse all items)
 document_outline_label=Document Outline
 attachments.title=Show Attachments
 attachments_label=Attachments
+layers.title=Show Layers (double-click to reset all layers to the default state)
+layers_label=Layers
 thumbs.title=Show Thumbnails
 thumbs_label=Thumbnails
+current_outline_item.title=Find Current Outline Item
+current_outline_item_label=Current Outline Item
 findbar.title=Find in Document
 findbar_label=Find
 
+additional_layers=Additional Layers
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas=Page {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
@@ -222,7 +228,6 @@ page_scale_actual=Actual Size
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Error
 loading_error=An error occurred while loading the PDF.
 invalid_file_error=Invalid or corrupted PDF file.
 missing_file_error=Missing PDF file.
diff --git a/third-party/pdfjs/web/locale/en-GB/viewer.properties 
b/third-party/pdfjs/web/locale/en-GB/viewer.properties
index 554a0e176..494e609a8 100644
--- a/third-party/pdfjs/web/locale/en-GB/viewer.properties
+++ b/third-party/pdfjs/web/locale/en-GB/viewer.properties
@@ -138,16 +138,22 @@ print_progress_close=Cancel
 # tooltips)
 toggle_sidebar.title=Toggle Sidebar
 toggle_sidebar_notification.title=Toggle Sidebar (document contains outline/attachments)
+toggle_sidebar_notification2.title=Toggle Sidebar (document contains outline/attachments/layers)
 toggle_sidebar_label=Toggle Sidebar
 document_outline.title=Show Document Outline (double-click to expand/collapse all items)
 document_outline_label=Document Outline
 attachments.title=Show Attachments
 attachments_label=Attachments
+layers.title=Show Layers (double-click to reset all layers to the default state)
+layers_label=Layers
 thumbs.title=Show Thumbnails
 thumbs_label=Thumbnails
+current_outline_item.title=Find Current Outline Item
+current_outline_item_label=Current Outline Item
 findbar.title=Find in Document
 findbar_label=Find
 
+additional_layers=Additional Layers
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas=Page {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
@@ -222,7 +228,6 @@ page_scale_actual=Actual Size
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Error
 loading_error=An error occurred while loading the PDF.
 invalid_file_error=Invalid or corrupted PDF file.
 missing_file_error=Missing PDF file.
diff --git a/third-party/pdfjs/web/locale/en-US/viewer.properties 
b/third-party/pdfjs/web/locale/en-US/viewer.properties
index d31103c00..5fe094b76 100644
--- a/third-party/pdfjs/web/locale/en-US/viewer.properties
+++ b/third-party/pdfjs/web/locale/en-US/viewer.properties
@@ -48,16 +48,12 @@ bookmark_label=Current View
 tools.title=Tools
 tools_label=Tools
 first_page.title=Go to First Page
-first_page.label=Go to First Page
 first_page_label=Go to First Page
 last_page.title=Go to Last Page
-last_page.label=Go to Last Page
 last_page_label=Go to Last Page
 page_rotate_cw.title=Rotate Clockwise
-page_rotate_cw.label=Rotate Clockwise
 page_rotate_cw_label=Rotate Clockwise
 page_rotate_ccw.title=Rotate Counterclockwise
-page_rotate_ccw.label=Rotate Counterclockwise
 page_rotate_ccw_label=Rotate Counterclockwise
 
 cursor_text_select_tool.title=Enable Text Selection Tool
@@ -147,12 +143,14 @@ layers.title=Show Layers (double-click to reset all layers to the default state)
 layers_label=Layers
 thumbs.title=Show Thumbnails
 thumbs_label=Thumbnails
+current_outline_item.title=Find Current Outline Item
+current_outline_item_label=Current Outline Item
 findbar.title=Find in Document
 findbar_label=Find
 
 additional_layers=Additional Layers
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=Page {{page}}
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Page {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
 # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
 # number.
@@ -225,7 +223,7 @@ page_scale_actual=Actual Size
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Error
+loading=Loading…
 loading_error=An error occurred while loading the PDF.
 invalid_file_error=Invalid or corrupted PDF file.
 missing_file_error=Missing PDF file.
diff --git a/third-party/pdfjs/web/locale/eo/viewer.properties 
b/third-party/pdfjs/web/locale/eo/viewer.properties
index 804bd9842..3a38340f2 100644
--- a/third-party/pdfjs/web/locale/eo/viewer.properties
+++ b/third-party/pdfjs/web/locale/eo/viewer.properties
@@ -138,16 +138,22 @@ print_progress_close=Nuligi
 # tooltips)
 toggle_sidebar.title=Montri/kaŝi flankan strion
 toggle_sidebar_notification.title=Montri/kaŝi flankan strion (la dokumento enhavas konturon/aneksaĵojn)
+toggle_sidebar_notification2.title=Montri/kaŝi flankan strion (la dokumento enhavas 
konturon/kunsendaĵojn/tavolojn)
 toggle_sidebar_label=Montri/kaŝi flankan strion
 document_outline.title=Montri la konturon de dokumento (alklaku duoble por faldi/malfaldi ĉiujn elementojn)
 document_outline_label=Konturo de dokumento
 attachments.title=Montri kunsendaĵojn
 attachments_label=Kunsendaĵojn
+layers.title=Montri tavolojn (duoble alklaku por remeti ĉiujn tavolojn en la norman staton)
+layers_label=Tavoloj
 thumbs.title=Montri miniaturojn
 thumbs_label=Miniaturoj
+current_outline_item.title=Trovi nunan konturan elementon
+current_outline_item_label=Nuna kontura elemento
 findbar.title=Serĉi en dokumento
 findbar_label=Serĉi
 
+additional_layers=Aldonaj tavoloj
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas=Paĝo {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
@@ -222,7 +228,6 @@ page_scale_actual=Reala grando
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Eraro
 loading_error=Okazis eraro dum la ŝargado de la PDF dosiero.
 invalid_file_error=Nevalida aŭ difektita PDF dosiero.
 missing_file_error=Mankas dosiero PDF.
diff --git a/third-party/pdfjs/web/locale/es-AR/viewer.properties 
b/third-party/pdfjs/web/locale/es-AR/viewer.properties
index ca2c87ba6..5cf89ce27 100644
--- a/third-party/pdfjs/web/locale/es-AR/viewer.properties
+++ b/third-party/pdfjs/web/locale/es-AR/viewer.properties
@@ -138,16 +138,22 @@ print_progress_close=Cancelar
 # tooltips)
 toggle_sidebar.title=Alternar barra lateral
 toggle_sidebar_notification.title=Intercambiar barra lateral (el documento contiene esquema/adjuntos)
+toggle_sidebar_notification2.title=Alternar barra lateral (el documento contiene esquemas/adjuntos/capas)
 toggle_sidebar_label=Alternar barra lateral
 document_outline.title=Mostrar esquema del documento (doble clic para expandir/colapsar todos los ítems)
 document_outline_label=Esquema del documento
 attachments.title=Mostrar adjuntos
 attachments_label=Adjuntos
+layers.title=Mostrar capas (doble clic para restablecer todas las capas al estado predeterminado)
+layers_label=Capas
 thumbs.title=Mostrar miniaturas
 thumbs_label=Miniaturas
+current_outline_item.title=Buscar elemento de esquema actual
+current_outline_item_label=Elemento de esquema actual
 findbar.title=Buscar en documento
 findbar_label=Buscar
 
+additional_layers=Capas adicionales
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas=Página {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
@@ -222,7 +228,6 @@ page_scale_actual=Tamaño real
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Error
 loading_error=Ocurrió un error al cargar el PDF.
 invalid_file_error=Archivo PDF no válido o cocrrupto.
 missing_file_error=Archivo PDF faltante.
diff --git a/third-party/pdfjs/web/locale/es-CL/viewer.properties 
b/third-party/pdfjs/web/locale/es-CL/viewer.properties
index b6ac40939..e5bcb2ec0 100644
--- a/third-party/pdfjs/web/locale/es-CL/viewer.properties
+++ b/third-party/pdfjs/web/locale/es-CL/viewer.properties
@@ -138,16 +138,22 @@ print_progress_close=Cancelar
 # tooltips)
 toggle_sidebar.title=Barra lateral
 toggle_sidebar_notification.title=Cambiar barra lateral (índice de contenidos del documento/adjuntos)
+toggle_sidebar_notification2.title=Cambiar barra lateral (índice de contenidos del documento/adjuntos/capas)
 toggle_sidebar_label=Mostrar u ocultar la barra lateral
 document_outline.title=Mostrar esquema del documento (doble clic para expandir/contraer todos los elementos)
 document_outline_label=Esquema del documento
 attachments.title=Mostrar adjuntos
 attachments_label=Adjuntos
+layers.title=Mostrar capas (doble clic para restablecer todas las capas al estado predeterminado)
+layers_label=Capas
 thumbs.title=Mostrar miniaturas
 thumbs_label=Miniaturas
+current_outline_item.title=Buscar elemento de esquema actual
+current_outline_item_label=Elemento de esquema actual
 findbar.title=Buscar en el documento
 findbar_label=Buscar
 
+additional_layers=Capas adicionales
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas=Página {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
@@ -222,7 +228,6 @@ page_scale_actual=Tamaño actual
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Error
 loading_error=Ocurrió un error al cargar el PDF.
 invalid_file_error=Archivo PDF inválido o corrupto.
 missing_file_error=Falta el archivo PDF.
diff --git a/third-party/pdfjs/web/locale/es-ES/viewer.properties 
b/third-party/pdfjs/web/locale/es-ES/viewer.properties
index 75e5f0ad4..4a64217ba 100644
--- a/third-party/pdfjs/web/locale/es-ES/viewer.properties
+++ b/third-party/pdfjs/web/locale/es-ES/viewer.properties
@@ -138,16 +138,22 @@ print_progress_close=Cancelar
 # tooltips)
 toggle_sidebar.title=Cambiar barra lateral
 toggle_sidebar_notification.title=Alternar panel lateral (el documento contiene un esquema o adjuntos)
+toggle_sidebar_notification2.title=Alternar barra lateral (el documento contiene esquemas/adjuntos/capas)
 toggle_sidebar_label=Cambiar barra lateral
 document_outline.title=Mostrar resumen del documento (doble clic para expandir/contraer todos los elementos)
 document_outline_label=Resumen de documento
 attachments.title=Mostrar adjuntos
 attachments_label=Adjuntos
+layers.title=Mostrar capas (doble clic para restablecer todas las capas al estado predeterminado)
+layers_label=Capas
 thumbs.title=Mostrar miniaturas
 thumbs_label=Miniaturas
+current_outline_item.title=Encontrar elemento de esquema actual
+current_outline_item_label=Elemento de esquema actual
 findbar.title=Buscar en el documento
 findbar_label=Buscar
 
+additional_layers=Capas adicionales
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas=Página {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
@@ -222,7 +228,6 @@ page_scale_actual=Tamaño real
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Error
 loading_error=Ocurrió un error al cargar el PDF.
 invalid_file_error=Fichero PDF no válido o corrupto.
 missing_file_error=No hay fichero PDF.
diff --git a/third-party/pdfjs/web/locale/es-MX/viewer.properties 
b/third-party/pdfjs/web/locale/es-MX/viewer.properties
index 5098ad195..7c8206264 100644
--- a/third-party/pdfjs/web/locale/es-MX/viewer.properties
+++ b/third-party/pdfjs/web/locale/es-MX/viewer.properties
@@ -138,16 +138,20 @@ print_progress_close=Cancelar
 # tooltips)
 toggle_sidebar.title=Cambiar barra lateral
 toggle_sidebar_notification.title=Cambiar barra lateral (índice de contenidos del documento/adjuntos)
+toggle_sidebar_notification2.title=Alternar barra lateral (el documento contiene esquemas/adjuntos/capas)
 toggle_sidebar_label=Cambiar barra lateral
 document_outline.title=Mostrar esquema del documento (doble clic para expandir/contraer todos los elementos)
 document_outline_label=Esquema del documento
 attachments.title=Mostrar adjuntos
 attachments_label=Adjuntos
+layers.title=Mostrar capas (doble clic para restablecer todas las capas al estado predeterminado)
+layers_label=Capas
 thumbs.title=Mostrar miniaturas
 thumbs_label=Miniaturas
 findbar.title=Buscar en el documento
 findbar_label=Buscar
 
+additional_layers=Capas adicionales
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas=Página {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
@@ -222,7 +226,6 @@ page_scale_actual=Tamaño real
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Error
 loading_error=Un error ocurrió al cargar el PDF.
 invalid_file_error=Archivo PDF invalido o dañado.
 missing_file_error=Archivo PDF no encontrado.
diff --git a/third-party/pdfjs/web/locale/et/viewer.properties 
b/third-party/pdfjs/web/locale/et/viewer.properties
index 97f2c9bd7..a2de15bbe 100644
--- a/third-party/pdfjs/web/locale/et/viewer.properties
+++ b/third-party/pdfjs/web/locale/et/viewer.properties
@@ -220,7 +220,6 @@ page_scale_actual=Tegelik suurus
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Viga
 loading_error=PDFi laadimisel esines viga.
 invalid_file_error=Vigane või rikutud PDF-fail.
 missing_file_error=PDF-fail puudub.
diff --git a/third-party/pdfjs/web/locale/eu/viewer.properties 
b/third-party/pdfjs/web/locale/eu/viewer.properties
index 5700d6019..160656974 100644
--- a/third-party/pdfjs/web/locale/eu/viewer.properties
+++ b/third-party/pdfjs/web/locale/eu/viewer.properties
@@ -138,16 +138,22 @@ print_progress_close=Utzi
 # tooltips)
 toggle_sidebar.title=Txandakatu alboko barra
 toggle_sidebar_notification.title=Txandakatu alboko barra (dokumentuak eskema/eranskinak ditu)
+toggle_sidebar_notification2.title=Txandakatu alboko barra (dokumentuak eskema/eranskinak/geruzak ditu)
 toggle_sidebar_label=Txandakatu alboko barra
 document_outline.title=Erakutsi dokumentuaren eskema (klik bikoitza elementu guztiak zabaltzeko/tolesteko)
 document_outline_label=Dokumentuaren eskema
 attachments.title=Erakutsi eranskinak
 attachments_label=Eranskinak
+layers.title=Erakutsi geruzak (klik bikoitza geruza guztiak egoera lehenetsira berrezartzeko)
+layers_label=Geruzak
 thumbs.title=Erakutsi koadro txikiak
 thumbs_label=Koadro txikiak
+current_outline_item.title=Bilatu uneko eskemaren elementua
+current_outline_item_label=Uneko eskemaren elementua
 findbar.title=Bilatu dokumentuan
 findbar_label=Bilatu
 
+additional_layers=Geruza gehigarriak
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas={{page}}. orria
 # Thumbnails panel item (tooltip and alt text for images)
@@ -222,7 +228,6 @@ page_scale_actual=Benetako tamaina
 page_scale_percent=%{{scale}}
 
 # Loading indicator messages
-loading_error_indicator=Errorea
 loading_error=Errorea gertatu da PDFa kargatzean.
 invalid_file_error=PDF fitxategi baliogabe edo hondatua.
 missing_file_error=PDF fitxategia falta da.
diff --git a/third-party/pdfjs/web/locale/fa/viewer.properties 
b/third-party/pdfjs/web/locale/fa/viewer.properties
index 9886b39d2..dffe4670e 100644
--- a/third-party/pdfjs/web/locale/fa/viewer.properties
+++ b/third-party/pdfjs/web/locale/fa/viewer.properties
@@ -201,7 +201,6 @@ page_scale_actual=اندازه واقعی‌
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=خطا
 loading_error=هنگام بارگیری پرونده PDF خطایی رخ داد.
 invalid_file_error=پرونده PDF نامعتبر یامعیوب می‌باشد.
 missing_file_error=پرونده PDF یافت نشد.
diff --git a/third-party/pdfjs/web/locale/ff/viewer.properties 
b/third-party/pdfjs/web/locale/ff/viewer.properties
index 0a081021b..d494fbfd0 100644
--- a/third-party/pdfjs/web/locale/ff/viewer.properties
+++ b/third-party/pdfjs/web/locale/ff/viewer.properties
@@ -220,7 +220,6 @@ page_scale_actual=Ɓetol Jaati
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Juumre
 loading_error=Juumre waɗii tuma nde loowata PDF oo.
 invalid_file_error=Fiilde PDF moƴƴaani walla jiibii.
 missing_file_error=Fiilde PDF ena ŋakki.
diff --git a/third-party/pdfjs/web/locale/fi/viewer.properties 
b/third-party/pdfjs/web/locale/fi/viewer.properties
index 38c40a395..454e6e823 100644
--- a/third-party/pdfjs/web/locale/fi/viewer.properties
+++ b/third-party/pdfjs/web/locale/fi/viewer.properties
@@ -138,16 +138,22 @@ print_progress_close=Peruuta
 # tooltips)
 toggle_sidebar.title=Näytä/piilota sivupaneeli
 toggle_sidebar_notification.title=Näytä/piilota sivupaneeli (dokumentissa on sisällys tai liitteitä)
+toggle_sidebar_notification2.title=Näytä/piilota sivupaneeli (dokumentissa on sisällys/liitteitä/tasoja)
 toggle_sidebar_label=Näytä/piilota sivupaneeli
 document_outline.title=Näytä dokumentin sisällys (laajenna tai kutista kohdat kaksoisnapsauttamalla)
 document_outline_label=Dokumentin sisällys
 attachments.title=Näytä liitteet
 attachments_label=Liitteet
+layers.title=Näytä tasot (kaksoisnapsauta palauttaaksesi kaikki tasot oletustilaan)
+layers_label=Tasot
 thumbs.title=Näytä pienoiskuvat
 thumbs_label=Pienoiskuvat
+current_outline_item.title=Etsi nykyinen sisällyksen kohta
+current_outline_item_label=Nykyinen sisällyksen kohta
 findbar.title=Etsi dokumentista
 findbar_label=Etsi
 
+additional_layers=Lisätasot
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas=Sivu {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
@@ -222,7 +228,6 @@ page_scale_actual=Todellinen koko
 page_scale_percent={{scale}} %
 
 # Loading indicator messages
-loading_error_indicator=Virhe
 loading_error=Tapahtui virhe ladattaessa PDF-tiedostoa.
 invalid_file_error=Virheellinen tai vioittunut PDF-tiedosto.
 missing_file_error=Puuttuva PDF-tiedosto.
diff --git a/third-party/pdfjs/web/locale/fr/viewer.properties 
b/third-party/pdfjs/web/locale/fr/viewer.properties
index 589a4185c..32290a0ad 100644
--- a/third-party/pdfjs/web/locale/fr/viewer.properties
+++ b/third-party/pdfjs/web/locale/fr/viewer.properties
@@ -138,16 +138,22 @@ print_progress_close=Annuler
 # tooltips)
 toggle_sidebar.title=Afficher/Masquer le panneau latéral
 toggle_sidebar_notification.title=Afficher/Masquer le panneau latéral (le document contient des 
signets/pièces jointes)
+toggle_sidebar_notification2.title=Afficher/Masquer le panneau latéral (le document contient des 
signets/pièces jointes/calques)
 toggle_sidebar_label=Afficher/Masquer le panneau latéral
 document_outline.title=Afficher les signets du document (double-cliquer pour développer/réduire tous les 
éléments)
 document_outline_label=Signets du document
 attachments.title=Afficher les pièces jointes
 attachments_label=Pièces jointes
+layers.title=Afficher les calques (double-cliquer pour réinitialiser tous les calques à l’état par défaut)
+layers_label=Calques
 thumbs.title=Afficher les vignettes
 thumbs_label=Vignettes
+current_outline_item.title=Trouver l’élément de plan actuel
+current_outline_item_label=Élément de plan actuel
 findbar.title=Rechercher dans le document
 findbar_label=Rechercher
 
+additional_layers=Calques additionnels
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas=Page {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
@@ -222,7 +228,6 @@ page_scale_actual=Taille réelle
 page_scale_percent={{scale}} %
 
 # Loading indicator messages
-loading_error_indicator=Erreur
 loading_error=Une erreur s’est produite lors du chargement du fichier PDF.
 invalid_file_error=Fichier PDF invalide ou corrompu.
 missing_file_error=Fichier PDF manquant.
diff --git a/third-party/pdfjs/web/locale/fy-NL/viewer.properties 
b/third-party/pdfjs/web/locale/fy-NL/viewer.properties
index 5a506540b..1d2f055bb 100644
--- a/third-party/pdfjs/web/locale/fy-NL/viewer.properties
+++ b/third-party/pdfjs/web/locale/fy-NL/viewer.properties
@@ -22,7 +22,7 @@ next_label=Folgjende
 page.title=Side
 # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
 # representing the total number of pages in the document.
-of_pages=fa {{pagesCount}}
+of_pages=fan {{pagesCount}}
 # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
 # will be replaced by a number representing the currently visible page,
 # respectively a number representing the total number of pages in the document.
@@ -138,16 +138,22 @@ print_progress_close=Annulearje
 # tooltips)
 toggle_sidebar.title=Sidebalke yn-/útskeakelje
 toggle_sidebar_notification.title=Sidebalke yn-/útskeakelje (dokumint befettet outline/bylagen)
+toggle_sidebar_notification2.title=Sidebalke yn-/útskeakelje (dokumint befettet oersjoch/bylagen/lagen)
 toggle_sidebar_label=Sidebalke yn-/útskeakelje
 document_outline.title=Dokumintoersjoch toane (dûbelklik om alle items út/yn te klappen)
 document_outline_label=Dokumintoersjoch
 attachments.title=Bylagen toane
 attachments_label=Bylagen
+layers.title=Lagen toane (dûbelklik om alle lagen nei de standertsteat werom te setten)
+layers_label=Lagen
 thumbs.title=Foarbylden toane
 thumbs_label=Foarbylden
+current_outline_item.title=Aktueel item yn ynhâldsopjefte sykje
+current_outline_item_label=Aktueel item yn ynhâldsopjefte
 findbar.title=Sykje yn dokumint
 findbar_label=Sykje
 
+additional_layers=Oanfoljende lagen
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas=Side {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
@@ -222,7 +228,6 @@ page_scale_actual=Werklike grutte
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Flater
 loading_error=Der is in flater bard by it laden fan de PDF.
 invalid_file_error=Ynfalide of korruptearre PDF-bestân.
 missing_file_error=PDF-bestân ûntbrekt.
diff --git a/third-party/pdfjs/web/locale/ga-IE/viewer.properties 
b/third-party/pdfjs/web/locale/ga-IE/viewer.properties
index f606e81b0..dab541743 100644
--- a/third-party/pdfjs/web/locale/ga-IE/viewer.properties
+++ b/third-party/pdfjs/web/locale/ga-IE/viewer.properties
@@ -162,7 +162,6 @@ page_scale_actual=Fíormhéid
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Earráid
 loading_error=Tharla earráid agus an cháipéis PDF á lódáil.
 invalid_file_error=Comhad neamhbhailí nó truaillithe PDF.
 missing_file_error=Comhad PDF ar iarraidh.
diff --git a/third-party/pdfjs/web/locale/gd/viewer.properties 
b/third-party/pdfjs/web/locale/gd/viewer.properties
index af4433e3f..ac5cff17b 100644
--- a/third-party/pdfjs/web/locale/gd/viewer.properties
+++ b/third-party/pdfjs/web/locale/gd/viewer.properties
@@ -148,6 +148,7 @@ thumbs_label=Dealbhagan
 findbar.title=Lorg san sgrìobhainn
 findbar_label=Lorg
 
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 # Thumbnails panel item (tooltip and alt text for images)
 # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
 # number.
@@ -220,12 +221,14 @@ page_scale_actual=Am fìor-mheud
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Mearachd
 loading_error=Thachair mearachd rè luchdadh a' PDF.
 invalid_file_error=Faidhle PDF a tha mì-dhligheach no coirbte.
 missing_file_error=Faidhle PDF a tha a dhìth.
 unexpected_response_error=Freagairt on fhrithealaiche ris nach robh dùil.
 
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+
 # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
 # "{{type}}" will be replaced with an annotation type from a list defined in
 # the PDF spec (32000-1:2008 Table 169 – Annotation types).
@@ -233,7 +236,7 @@ unexpected_response_error=Freagairt on fhrithealaiche ris nach robh dùil.
 text_annotation_type.alt=[Nòtachadh {{type}}]
 password_label=Cuir a-steach am facal-faire gus am faidhle PDF seo fhosgladh.
 password_invalid=Tha am facal-faire cearr. Nach fheuch thu ris a-rithist?
-password_ok=Ceart ma-tha
+password_ok=Ceart ma-thà
 password_cancel=Sguir dheth
 
 printing_not_supported=Rabhadh: Chan eil am brabhsair seo a' cur làn-taic ri clò-bhualadh.
diff --git a/third-party/pdfjs/web/locale/gl/viewer.properties 
b/third-party/pdfjs/web/locale/gl/viewer.properties
index c3a30fecd..7662efe62 100644
--- a/third-party/pdfjs/web/locale/gl/viewer.properties
+++ b/third-party/pdfjs/web/locale/gl/viewer.properties
@@ -138,16 +138,22 @@ print_progress_close=Cancelar
 # tooltips)
 toggle_sidebar.title=Amosar/agochar a barra lateral
 toggle_sidebar_notification.title=Amosar/agochar a barra lateral (o documento contén un esquema ou anexos)
+toggle_sidebar_notification2.title=Alternar barra lateral (o documento contén esquema/anexos/capas)
 toggle_sidebar_label=Amosar/agochar a barra lateral
 document_outline.title=Amosar o esquema do documento (prema dúas veces para expandir/contraer todos os 
elementos)
 document_outline_label=Esquema do documento
 attachments.title=Amosar anexos
 attachments_label=Anexos
+layers.title=Mostrar capas (prema dúas veces para restaurar todas as capas o estado predeterminado)
+layers_label=Capas
 thumbs.title=Amosar miniaturas
 thumbs_label=Miniaturas
+current_outline_item.title=Atopar o elemento delimitado actualmente
+current_outline_item_label=Elemento delimitado actualmente
 findbar.title=Atopar no documento
 findbar_label=Atopar
 
+additional_layers=Capas adicionais
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas=Páxina {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
@@ -222,7 +228,6 @@ page_scale_actual=Tamaño actual
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Erro
 loading_error=Produciuse un erro ao cargar o PDF.
 invalid_file_error=Ficheiro PDF danado ou non válido.
 missing_file_error=Falta o ficheiro PDF.
diff --git a/third-party/pdfjs/web/locale/gn/viewer.properties 
b/third-party/pdfjs/web/locale/gn/viewer.properties
index 4b893971d..26143b569 100644
--- a/third-party/pdfjs/web/locale/gn/viewer.properties
+++ b/third-party/pdfjs/web/locale/gn/viewer.properties
@@ -138,16 +138,22 @@ print_progress_close=Heja
 # tooltips)
 toggle_sidebar.title=Tenda yke moambue
 toggle_sidebar_notification.title=Embojopyru tenda ykegua (kuatia oguereko kora/marandurenda moirũha)
+toggle_sidebar_notification2.title=Embojopyru tenda ykegua (kuatia oguereko kuaakaha/moirũha/ñuãha)
 toggle_sidebar_label=Tenda yke moambue
 document_outline.title=Ehechauka kuatia rape (eikutu mokõi jey embotuicha/emomichĩ hag̃ua opavavete 
mba’epuru)
 document_outline_label=Kuatia apopyre
 attachments.title=Moirũha jehechauka
 attachments_label=Moirũha
+layers.title=Ehechauka ñuãha (eikutu jo’a emomba’apo hag̃ua opaite ñuãha tekoypýpe)
+layers_label=Ñuãha
 thumbs.title=Mba’emirĩ jehechauka
 thumbs_label=Mba’emirĩ
+current_outline_item.title=Eheka mba’epuru ag̃aguaitéva
+current_outline_item_label=Mba’epuru ag̃aguaitéva
 findbar.title=Kuatiápe jeheka
 findbar_label=Juhu
 
+additional_layers=Ñuãha moirũguáva
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas=Kuatiarogue {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
@@ -222,7 +228,6 @@ page_scale_actual=Tuichakue ag̃agua
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Oĩvaíva
 loading_error=Oiko jejavy PDF oñemyeñyhẽnguévo.
 invalid_file_error=PDF marandurenda ndoikóiva térã ivaipyréva.
 missing_file_error=Ndaipóri PDF marandurenda
diff --git a/third-party/pdfjs/web/locale/gu-IN/viewer.properties 
b/third-party/pdfjs/web/locale/gu-IN/viewer.properties
index 579c068d9..07aba6956 100644
--- a/third-party/pdfjs/web/locale/gu-IN/viewer.properties
+++ b/third-party/pdfjs/web/locale/gu-IN/viewer.properties
@@ -220,7 +220,6 @@ page_scale_actual=ચોક્કસ માપ
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=ભૂલ
 loading_error=ભૂલ ઉદ્ભવી જ્યારે PDF ને લાવી રહ્યા હોય.
 invalid_file_error=અયોગ્ય અથવા ભાંગેલ PDF ફાઇલ.
 missing_file_error=ગુમ થયેલ PDF ફાઇલ.
diff --git a/third-party/pdfjs/web/locale/he/viewer.properties 
b/third-party/pdfjs/web/locale/he/viewer.properties
index 066478921..ef19e9e38 100644
--- a/third-party/pdfjs/web/locale/he/viewer.properties
+++ b/third-party/pdfjs/web/locale/he/viewer.properties
@@ -137,17 +137,23 @@ print_progress_close=ביטול
 # (the _label strings are alt text for the buttons, the .title strings are
 # tooltips)
 toggle_sidebar.title=הצגה/הסתרה של סרגל הצד
-toggle_sidebar_notification.title=החלפת תצוגת סרגל צד (מסמך שמכיל מתאר/צרופות)
+toggle_sidebar_notification.title=החלפת תצוגת סרגל צד (מסמך שמכיל תוכן עניינים/קבצים מצורפים)
+toggle_sidebar_notification2.title=החלפת תצוגת סרגל צד (מסמך שמכיל תוכן עניינים/קבצים מצורפים/שכבות)
 toggle_sidebar_label=הצגה/הסתרה של סרגל הצד
-document_outline.title=הצגת מתאר מסמך (לחיצה כפולה כדי להרחיב או לצמצם את כל הפריטים)
-document_outline_label=מתאר מסמך
+document_outline.title=הצגת תוכן העניינים של המסמך (לחיצה כפולה כדי להרחיב או לצמצם את כל הפריטים)
+document_outline_label=תוכן העניינים של המסמך
 attachments.title=הצגת צרופות
 attachments_label=צרופות
+layers.title=הצגת שכבות (יש ללחוץ לחיצה כפולה כדי לאפס את כל השכבות למצב ברירת המחדל)
+layers_label=שכבות
 thumbs.title=הצגת תצוגה מקדימה
 thumbs_label=תצוגה מקדימה
+current_outline_item.title=מציאת פריט תוכן העניינים הנוכחי
+current_outline_item_label=פריט תוכן העניינים הנוכחי
 findbar.title=חיפוש במסמך
 findbar_label=חיפוש
 
+additional_layers=שכבות נוספות
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas=עמוד {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
@@ -222,7 +228,6 @@ page_scale_actual=גודל אמיתי
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=שגיאה
 loading_error=אירעה שגיאה בעת טעינת ה־PDF.
 invalid_file_error=קובץ PDF פגום או לא תקין.
 missing_file_error=קובץ PDF חסר.
@@ -243,5 +248,5 @@ password_ok=אישור
 password_cancel=ביטול
 
 printing_not_supported=אזהרה: הדפסה אינה נתמכת במלואה בדפדפן זה.
-printing_not_ready=אזהרה: ה־PDF לא ניתן לחלוטין עד מצב שמאפשר הדפסה.
+printing_not_ready=אזהרה: מסמך ה־PDF לא נטען לחלוטין עד מצב שמאפשר הדפסה.
 web_fonts_disabled=גופני רשת מנוטרלים: לא ניתן להשתמש בגופני PDF מוטבעים.
diff --git a/third-party/pdfjs/web/locale/hi-IN/viewer.properties 
b/third-party/pdfjs/web/locale/hi-IN/viewer.properties
index 6a49a9a98..9ce8872c9 100644
--- a/third-party/pdfjs/web/locale/hi-IN/viewer.properties
+++ b/third-party/pdfjs/web/locale/hi-IN/viewer.properties
@@ -218,7 +218,6 @@ page_scale_actual=वास्तविक आकार
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=त्रुटि
 loading_error=PDF लोड करते समय एक त्रुटि हुई.
 invalid_file_error=अमान्य या भ्रष्ट PDF फ़ाइल.
 missing_file_error=\u0020अनुपस्थित PDF फ़ाइल.
diff --git a/third-party/pdfjs/web/locale/hr/viewer.properties 
b/third-party/pdfjs/web/locale/hr/viewer.properties
index bfe10f808..d045a7d5c 100644
--- a/third-party/pdfjs/web/locale/hr/viewer.properties
+++ b/third-party/pdfjs/web/locale/hr/viewer.properties
@@ -137,17 +137,23 @@ print_progress_close=Odustani
 # (the _label strings are alt text for the buttons, the .title strings are
 # tooltips)
 toggle_sidebar.title=Prikaži/sakrij bočnu traku
-toggle_sidebar_notification.title=Prikazivanje i sklanjanje bočne trake (dokument sadrži konturu/privitke)
+toggle_sidebar_notification.title=Prikazivanje i sklanjanje bočne trake (dokument sadrži strukturu/privitke)
+toggle_sidebar_notification2.title=Prikazivanje i sklanjanje bočne trake (dokument sadrži 
strukturu/privitke/slojeve)
 toggle_sidebar_label=Prikaži/sakrij bočnu traku
 document_outline.title=Prikaži strukturu dokumenta (dvostruki klik za rasklapanje/sklapanje svih stavki)
 document_outline_label=Struktura dokumenta
 attachments.title=Prikaži privitke
 attachments_label=Privitci
+layers.title=Prikaži slojeve (dvoklik za vraćanje svih slojeva u zadano stanje)
+layers_label=Slojevi
 thumbs.title=Prikaži minijature
 thumbs_label=Minijature
-findbar.title=Traži u dokumentu
-findbar_label=Traži
+current_outline_item.title=Pronađi trenutačni element strukture
+current_outline_item_label=Trenutačni element strukture
+findbar.title=Pronađi u dokumentu
+findbar_label=Pronađi
 
+additional_layers=Dodatni slojevi
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas=Stranica br. {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
@@ -159,8 +165,8 @@ thumb_page_title=Stranica {{page}}
 thumb_page_canvas=Minijatura stranice {{page}}
 
 # Find panel button title and messages
-find_input.title=Traži
-find_input.placeholder=Traži u dokumentu…
+find_input.title=Pronađi
+find_input.placeholder=Pronađi u dokumentu …
 find_previous.title=Pronađi prethodno pojavljivanje ovog izraza
 find_previous_label=Prethodno
 find_next.title=Pronađi sljedeće pojavljivanje ovog izraza
@@ -222,7 +228,6 @@ page_scale_actual=Stvarna veličina
 page_scale_percent={{scale}} %
 
 # Loading indicator messages
-loading_error_indicator=Greška
 loading_error=Došlo je do greške pri učitavanju PDF-a.
 invalid_file_error=Neispravna ili oštećena PDF datoteka.
 missing_file_error=Nedostaje PDF datoteka.
diff --git a/third-party/pdfjs/web/locale/hsb/viewer.properties 
b/third-party/pdfjs/web/locale/hsb/viewer.properties
index 9ba3c15a2..d14060369 100644
--- a/third-party/pdfjs/web/locale/hsb/viewer.properties
+++ b/third-party/pdfjs/web/locale/hsb/viewer.properties
@@ -138,16 +138,22 @@ print_progress_close=Přetorhnyć
 # tooltips)
 toggle_sidebar.title=Bóčnicu pokazać/schować
 toggle_sidebar_notification.title=Bóčnicu přepinać (dokument wobsahuje wobrys/přiwěški)
+toggle_sidebar_notification2.title=Bóčnicu přepinać (dokument rozrjad/přiwěški/woršty wobsahuje)
 toggle_sidebar_label=Bóčnicu pokazać/schować
 document_outline.title=Dokumentowy naćisk pokazać (dwójne kliknjenje, zo bychu so wšě zapiski 
pokazali/schowali)
 document_outline_label=Dokumentowa struktura
 attachments.title=Přiwěški pokazać
 attachments_label=Přiwěški
+layers.title=Woršty pokazać (klikńće dwójce, zo byšće wšě woršty na standardny staw wróćo stajił)
+layers_label=Woršty
 thumbs.title=Miniatury pokazać
 thumbs_label=Miniatury
+current_outline_item.title=Aktualny rozrjadowy zapisk pytać
+current_outline_item_label=Aktualny rozrjadowy zapisk
 findbar.title=W dokumenće pytać
 findbar_label=Pytać
 
+additional_layers=Dalše woršty
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas=Strona {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
@@ -222,7 +228,6 @@ page_scale_actual=Aktualna wulkosć
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Zmylk
 loading_error=Při začitowanju PDF je zmylk wustupił.
 invalid_file_error=Njepłaćiwa abo wobškodźena PDF-dataja.
 missing_file_error=Falowaca PDF-dataja.
diff --git a/third-party/pdfjs/web/locale/hu/viewer.properties 
b/third-party/pdfjs/web/locale/hu/viewer.properties
index 88c1d0796..7dbc8d5ce 100644
--- a/third-party/pdfjs/web/locale/hu/viewer.properties
+++ b/third-party/pdfjs/web/locale/hu/viewer.properties
@@ -138,16 +138,22 @@ print_progress_close=Mégse
 # tooltips)
 toggle_sidebar.title=Oldalsáv be/ki
 toggle_sidebar_notification.title=Oldalsáv be/ki (a dokumentum vázlatot/mellékleteket tartalmaz)
+toggle_sidebar_notification2.title=Oldalsáv be/ki (a dokumentum vázlatot/mellékleteket/rétegeket tartalmaz)
 toggle_sidebar_label=Oldalsáv be/ki
 document_outline.title=Dokumentum megjelenítése online (dupla kattintás minden elem 
kinyitásához/összecsukásához)
 document_outline_label=Dokumentumvázlat
 attachments.title=Mellékletek megjelenítése
 attachments_label=Van melléklet
+layers.title=Rétegek megjelenítése (dupla kattintás az összes réteg alapértelmezett állapotra 
visszaállításához)
+layers_label=Rétegek
 thumbs.title=Bélyegképek megjelenítése
 thumbs_label=Bélyegképek
+current_outline_item.title=Jelenlegi vázlatelem megkeresése
+current_outline_item_label=Jelenlegi vázlatelem
 findbar.title=Keresés a dokumentumban
 findbar_label=Keresés
 
+additional_layers=További rétegek
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas={{page}}. oldal
 # Thumbnails panel item (tooltip and alt text for images)
@@ -222,7 +228,6 @@ page_scale_actual=Valódi méret
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Hiba
 loading_error=Hiba történt a PDF betöltésekor.
 invalid_file_error=Érvénytelen vagy sérült PDF fájl.
 missing_file_error=Hiányzó PDF fájl.
diff --git a/third-party/pdfjs/web/locale/hy-AM/viewer.properties 
b/third-party/pdfjs/web/locale/hy-AM/viewer.properties
index 09394f7d8..282cd2d75 100644
--- a/third-party/pdfjs/web/locale/hy-AM/viewer.properties
+++ b/third-party/pdfjs/web/locale/hy-AM/viewer.properties
@@ -222,7 +222,6 @@ page_scale_actual=Իրական չափը
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Սխալ
 loading_error=Սխալ՝ PDF ֆայլը բացելիս։
 invalid_file_error=Սխալ կամ վնասված PDF ֆայլ:
 missing_file_error=PDF ֆայլը բացակայում է:
diff --git a/third-party/pdfjs/web/locale/hye/viewer.properties 
b/third-party/pdfjs/web/locale/hye/viewer.properties
index 80d43019e..55f1617cf 100644
--- a/third-party/pdfjs/web/locale/hye/viewer.properties
+++ b/third-party/pdfjs/web/locale/hye/viewer.properties
@@ -77,6 +77,7 @@ spread_none_label=Չկայ կոնտեքստ
 spread_odd.title=Միացէք էջի կոնտեքստին սկսելով՝ կենտ համարակալուած էջերով
 spread_odd_label=Տարաւրինակ կոնտեքստ
 spread_even.title=Միացէք էջի կոնտեքստին սկսելով՝ զոյգ համարակալուած էջերով
+spread_even_label=Հաւասար վերածածկեր
 
 # Document properties dialog box
 document_properties.title=Փաստաթղթի հատկութիւնները…
@@ -137,16 +138,22 @@ print_progress_close=Չեղարկել
 # tooltips)
 toggle_sidebar.title=Փոխարկել կողային վահանակը
 toggle_sidebar_notification.title=Փոխարկել կողային վահանակը (փաստաթուղթը պարունակում է ուրուագիծ/կցորդ)
+toggle_sidebar_notification2.title=Փոխանջատել կողմնասիւնը (փաստաթուղթը պարունակում է 
ուրուագիծ/կցորդներ/շերտեր)
 toggle_sidebar_label=Փոխարկել կողային վահանակը
 document_outline.title=Ցուցադրել փաստաթղթի ուրուագիծը (կրկնակի սեղմէք՝ միաւորները ընդարձակելու/կոծկելու 
համար)
 document_outline_label=Փաստաթղթի ուրուագիծ
 attachments.title=Ցուցադրել կցորդները
 attachments_label=Կցորդներ
+layers.title=Ցուցադրել շերտերը (կրկնահպել վերակայելու բոլոր շերտերը սկզբնադիր վիճակի)
+layers_label=Շերտեր
 thumbs.title=Ցուցադրել մանրապատկերը
 thumbs_label=Մանրապատկեր
+current_outline_item.title=Գտէք ընթացիկ գծագրման տարրը
+current_outline_item_label=Ընթացիկ գծագրման տարր
 findbar.title=Գտնել փաստաթղթում
 findbar_label=Որոնում
 
+additional_layers=Լրացուցիչ շերտեր
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas=Էջ {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
@@ -212,7 +219,7 @@ error_line=Տողը. {{line}}
 rendering_error=Սխալ է տեղի ունեցել էջի մեկնաբանման ժամանակ
 
 # Predefined zoom values
-page_scale_width=Էջի լայնքը
+page_scale_width=Էջի լայնութիւն
 page_scale_fit=Հարմարեցնել էջը
 page_scale_auto=Ինքնաշխատ խոշորացում
 page_scale_actual=Իրական չափը
@@ -221,7 +228,6 @@ page_scale_actual=Իրական չափը
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Սխալ
 loading_error=PDF նիշքը բացելիս սխալ է տեղի ունեցել։
 invalid_file_error=Սխալ կամ վնասուած PDF նիշք։
 missing_file_error=PDF նիշքը բացակաիւմ է։
diff --git a/third-party/pdfjs/web/locale/ia/viewer.properties 
b/third-party/pdfjs/web/locale/ia/viewer.properties
index 167547adc..ff46b7efa 100644
--- a/third-party/pdfjs/web/locale/ia/viewer.properties
+++ b/third-party/pdfjs/web/locale/ia/viewer.properties
@@ -138,16 +138,22 @@ print_progress_close=Cancellar
 # tooltips)
 toggle_sidebar.title=Monstrar/celar le barra lateral
 toggle_sidebar_notification.title=Monstrar/celar le barra lateral (le documento contine 
structura/attachamentos)
+toggle_sidebar_notification2.title=Monstrar/celar le barra lateral (le documento contine 
structura/attachamentos/stratos)
 toggle_sidebar_label=Monstrar/celar le barra lateral
 document_outline.title=Monstrar le schema del documento (clic duple pro expander/contraher tote le elementos)
 document_outline_label=Schema del documento
 attachments.title=Monstrar le annexos
 attachments_label=Annexos
+layers.title=Monstrar stratos (clicca duple pro remontar tote le stratos al stato predefinite)
+layers_label=Stratos
 thumbs.title=Monstrar le vignettes
 thumbs_label=Vignettes
+current_outline_item.title=Trovar le elemento de structura actual
+current_outline_item_label=Elemento de structura actual
 findbar.title=Cercar in le documento
 findbar_label=Cercar
 
+additional_layers=Altere stratos
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas=Pagina {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
@@ -213,7 +219,7 @@ error_line=Linea: {{line}}
 rendering_error=Un error occurreva durante que on processava le pagina.
 
 # Predefined zoom values
-page_scale_width=Largessa pagina plen
+page_scale_width=Plen largor del pagina
 page_scale_fit=Pagina integre
 page_scale_auto=Zoom automatic
 page_scale_actual=Dimension actual
@@ -222,7 +228,6 @@ page_scale_actual=Dimension actual
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Error
 loading_error=Un error occurreva durante que on cargava le file PDF.
 invalid_file_error=File PDF corrumpite o non valide.
 missing_file_error=File PDF mancante.
diff --git a/third-party/pdfjs/web/locale/id/viewer.properties 
b/third-party/pdfjs/web/locale/id/viewer.properties
index b9b9a730b..c415452f3 100644
--- a/third-party/pdfjs/web/locale/id/viewer.properties
+++ b/third-party/pdfjs/web/locale/id/viewer.properties
@@ -138,16 +138,22 @@ print_progress_close=Batalkan
 # tooltips)
 toggle_sidebar.title=Aktif/Nonaktifkan Bilah Samping
 toggle_sidebar_notification.title=Aktif/Nonaktifkan Bilah Samping (dokumen berisi kerangka/lampiran)
+toggle_sidebar_notification2.title=Aktif/Nonaktifkan Bilah Samping (dokumen berisi kerangka/lampiran/lapisan)
 toggle_sidebar_label=Aktif/Nonaktifkan Bilah Samping
 document_outline.title=Tampilkan Kerangka Dokumen (klik ganda untuk membentangkan/menciutkan semua item)
 document_outline_label=Kerangka Dokumen
 attachments.title=Tampilkan Lampiran
 attachments_label=Lampiran
+layers.title=Tampilkan Lapisan (klik ganda untuk mengatur ulang semua lapisan ke keadaan baku)
+layers_label=Lapisan
 thumbs.title=Tampilkan Miniatur
 thumbs_label=Miniatur
+current_outline_item.title=Cari Butir Ikhtisar Saat Ini
+current_outline_item_label=Butir Ikhtisar Saat Ini
 findbar.title=Temukan di Dokumen
 findbar_label=Temukan
 
+additional_layers=Lapisan Tambahan
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas=Laman {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
@@ -222,7 +228,6 @@ page_scale_actual=Ukuran Asli
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Galat
 loading_error=Galat terjadi saat memuat PDF.
 invalid_file_error=Berkas PDF tidak valid atau rusak.
 missing_file_error=Berkas PDF tidak ada.
diff --git a/third-party/pdfjs/web/locale/is/viewer.properties 
b/third-party/pdfjs/web/locale/is/viewer.properties
index 72dc8acd6..032db7603 100644
--- a/third-party/pdfjs/web/locale/is/viewer.properties
+++ b/third-party/pdfjs/web/locale/is/viewer.properties
@@ -217,7 +217,6 @@ page_scale_actual=Raunstærð
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Villa
 loading_error=Villa kom upp við að hlaða inn PDF.
 invalid_file_error=Ógild eða skemmd PDF skrá.
 missing_file_error=Vantar PDF skrá.
diff --git a/third-party/pdfjs/web/locale/it/viewer.properties 
b/third-party/pdfjs/web/locale/it/viewer.properties
index 87c4050d8..2a3bfde16 100644
--- a/third-party/pdfjs/web/locale/it/viewer.properties
+++ b/third-party/pdfjs/web/locale/it/viewer.properties
@@ -114,17 +114,24 @@ print_progress_close = Annulla
 
 toggle_sidebar.title = Attiva/disattiva barra laterale
 toggle_sidebar_notification.title = Attiva/disattiva barra laterale (il documento contiene 
struttura/allegati)
+toggle_sidebar_notification2.title = Attiva/disattiva barra laterale (il documento contiene 
struttura/allegati/livelli)
 toggle_sidebar_label = Attiva/disattiva barra laterale
 document_outline.title = Visualizza la struttura del documento (doppio clic per visualizzare/comprimere 
tutti gli elementi)
 document_outline_label = Struttura documento
 attachments.title = Visualizza allegati
 attachments_label = Allegati
+layers.title = Visualizza livelli (doppio clic per ripristinare tutti i livelli allo stato predefinito)
+layers_label = Livelli
 thumbs.title = Mostra le miniature
 thumbs_label = Miniature
+current_outline_item.title = Trova elemento struttura corrente
+current_outline_item_label = Elemento struttura corrente
 findbar.title = Trova nel documento
 findbar_label = Trova
 
+additional_layers = Livelli aggiuntivi
 page_canvas = Pagina {{page}}
+page_landmark = Pagina {{page}}
 thumb_page_title = Pagina {{page}}
 thumb_page_canvas = Miniatura della pagina {{page}}
 
@@ -170,7 +177,7 @@ page_scale_auto = Zoom automatico
 page_scale_actual = Dimensioni effettive
 page_scale_percent = {{scale}}%
 
-loading_error_indicator = Errore
+loading = Caricamento in corso…
 loading_error = Si è verificato un errore durante il caricamento del PDF.
 invalid_file_error = File PDF non valido o danneggiato.
 missing_file_error = File PDF non disponibile.
diff --git a/third-party/pdfjs/web/locale/ja/viewer.properties 
b/third-party/pdfjs/web/locale/ja/viewer.properties
index 95732a07f..df612b45d 100644
--- a/third-party/pdfjs/web/locale/ja/viewer.properties
+++ b/third-party/pdfjs/web/locale/ja/viewer.properties
@@ -138,16 +138,22 @@ print_progress_close=キャンセル
 # tooltips)
 toggle_sidebar.title=サイドバー表示を切り替えます
 toggle_sidebar_notification.title=サイドバー表示を切り替えます (文書に含まれるアウトライン / 添付)
+toggle_sidebar_notification2.title=サイドバー表示を切り替えます (文書に含まれるアウトライン / 添付 / レイヤー)
 toggle_sidebar_label=サイドバーの切り替え
 document_outline.title=文書の目次を表示します (ダブルクリックで項目を開閉します)
 document_outline_label=文書の目次
 attachments.title=添付ファイルを表示します
 attachments_label=添付ファイル
+layers.title=レイヤーを表示します (ダブルクリックですべてのレイヤーが初期状態に戻ります)
+layers_label=レイヤー
 thumbs.title=縮小版を表示します
 thumbs_label=縮小版
+current_outline_item.title=現在のアウトライン項目を検索
+current_outline_item_label=現在のアウトライン項目
 findbar.title=文書内を検索します
 findbar_label=検索
 
+additional_layers=追加レイヤー
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas={{page}} ページ
 # Thumbnails panel item (tooltip and alt text for images)
@@ -222,7 +228,6 @@ page_scale_actual=実際のサイズ
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=エラー
 loading_error=PDF の読み込み中にエラーが発生しました。
 invalid_file_error=無効または破損した PDF ファイル。
 missing_file_error=PDF ファイルが見つかりません。
@@ -245,4 +250,3 @@ password_cancel=キャンセル
 printing_not_supported=警告: このブラウザーでは印刷が完全にサポートされていません。
 printing_not_ready=警告: PDF を印刷するための読み込みが終了していません。
 web_fonts_disabled=ウェブフォントが無効になっています: 埋め込まれた PDF のフォントを使用できません。
-document_colors_not_allowed=PDF 文書は、ウェブページが指定した配色を使用することができません: 'ウェブページが指定した配色' はブラウザーで無効になっています。
diff --git a/third-party/pdfjs/web/locale/ka/viewer.properties 
b/third-party/pdfjs/web/locale/ka/viewer.properties
index 86e91bbd1..9fbf08399 100644
--- a/third-party/pdfjs/web/locale/ka/viewer.properties
+++ b/third-party/pdfjs/web/locale/ka/viewer.properties
@@ -91,18 +91,18 @@ document_properties_kb={{size_kb}} კბ ({{size_b}} ბაიტი)
 # will be replaced by the PDF file size in megabytes, respectively in bytes.
 document_properties_mb={{size_mb}} მბ ({{size_b}} ბაიტი)
 document_properties_title=სათაური:
-document_properties_author=შემდგენი:
+document_properties_author=შემქმნელი:
 document_properties_subject=თემა:
 document_properties_keywords=საკვანძო სიტყვები:
-document_properties_creation_date=შექმნის თარიღი:
-document_properties_modification_date=ჩასწორების თარიღი:
+document_properties_creation_date=შექმნის დრო:
+document_properties_modification_date=ჩასწორების დრო:
 # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
 # will be replaced by the creation/modification date, and time, of the PDF file.
 document_properties_date_string={{date}}, {{time}}
-document_properties_creator=შემქმნელი:
-document_properties_producer=PDF-შემქმნელი:
+document_properties_creator=გამომშვები:
+document_properties_producer=PDF-გამომშვები:
 document_properties_version=PDF-ვერსია:
-document_properties_page_count=გვერდების რაოდენობა:
+document_properties_page_count=გვერდები:
 document_properties_page_size=გვერდის ზომა:
 document_properties_page_size_unit_inches=დუიმი
 document_properties_page_size_unit_millimeters=მმ
@@ -137,17 +137,23 @@ print_progress_close=გაუქმება
 # (the _label strings are alt text for the buttons, the .title strings are
 # tooltips)
 toggle_sidebar.title=გვერდითა ზოლის გამოჩენა/დამალვა
-toggle_sidebar_notification.title=გვერდითა ზოლის ჩართვა/გამორთვა (დოკუმენტი შეიცავს სარჩევს/დანართს)
+toggle_sidebar_notification.title=გვერდითა ზოლის გამოჩენა (შეიცავს სარჩევს/დანართს)
+toggle_sidebar_notification2.title=გვერდითი ზოლის გამოჩენა (შეიცავს სარჩევს/დანართს/ფენებს)
 toggle_sidebar_label=გვერდითა ზოლის გამოჩენა/დამალვა
-document_outline.title=დოკუმენტის სარჩევის ჩვენება (ორჯერ დაწკაპებით ყველა ელემენტის ჩამოშლა/აკეცვა)
+document_outline.title=დოკუმენტის სარჩევის ჩვენება (ორმაგი წკაპით თითოეულის ჩამოშლა/აკეცვა)
 document_outline_label=დოკუმენტის სარჩევი
 attachments.title=დანართების ჩვენება
 attachments_label=დანართები
+layers.title=ფენების გამოჩენა (ორმაგი წკაპით ყველა ფენის ნაგულისხმევზე დაბრუნება)
+layers_label=ფენები
 thumbs.title=შეთვალიერება
 thumbs_label=ესკიზები
+current_outline_item.title=მიმდინარე გვერდის მონახვა სარჩევში
+current_outline_item_label=მიმდინარე გვერდი სარჩევში
 findbar.title=პოვნა დოკუმენტში
 findbar_label=ძიება
 
+additional_layers=დამატებითი ფენები
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas=გვერდი {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
@@ -222,7 +228,6 @@ page_scale_actual=საწყისი ზომა
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=შეცდომა
 loading_error=შეცდომა, PDF-ფაილის ჩატვირთვისას.
 invalid_file_error=არამართებული ან დაზიანებული PDF-ფაილი.
 missing_file_error=ნაკლული PDF-ფაილი.
diff --git a/third-party/pdfjs/web/locale/kab/viewer.properties 
b/third-party/pdfjs/web/locale/kab/viewer.properties
index a6f07f169..310b2e472 100644
--- a/third-party/pdfjs/web/locale/kab/viewer.properties
+++ b/third-party/pdfjs/web/locale/kab/viewer.properties
@@ -39,7 +39,7 @@ open_file.title=Ldi Afaylu
 open_file_label=Ldi
 print.title=Siggez
 print_label=Siggez
-download.title=Sider
+download.title=Sader
 download_label=Azdam
 bookmark.title=Timeẓri tamirant (nɣel neɣ ldi ɣef usfaylu amaynut)
 bookmark_label=Askan amiran
@@ -102,7 +102,7 @@ document_properties_date_string={{date}}, {{time}}
 document_properties_creator=Yerna-t:
 document_properties_producer=Afecku n uselket PDF:
 document_properties_version=Lqem PDF:
-document_properties_page_count=Amḍan n isebtar:
+document_properties_page_count=Amḍan n yisebtar:
 document_properties_page_size=Tuγzi n usebter:
 document_properties_page_size_unit_inches=deg
 document_properties_page_size_unit_millimeters=mm
@@ -138,16 +138,22 @@ print_progress_close=Sefsex
 # tooltips)
 toggle_sidebar.title=Sken/Fer agalis adisan
 toggle_sidebar_notification.title=Ffer/Sken agalis adisan (isemli yegber aɣawas/imeddayen)
+toggle_sidebar_notification2.title=Ffer/Sekn agalis adisan (isemli yegber aɣawas/ticeqqufin yeddan/tissiwin)
 toggle_sidebar_label=Sken/Fer agalis adisan
 document_outline.title=Sken isemli (Senned snat tikal i wesemɣer/Afneẓ n iferdisen meṛṛa)
 document_outline_label=Isɣalen n isebtar
 attachments.title=Sken ticeqqufin yeddan
 attachments_label=Ticeqqufin yeddan
+layers.title=Skeen tissiwin (sit sin yiberdan i uwennez n meṛṛa tissiwin ɣer waddad amezwer)
+layers_label=Tissiwin
 thumbs.title=Sken tanfult.
 thumbs_label=Tinfulin
+current_outline_item.title=Af-d aferdis n uɣawas amiran
+current_outline_item_label=Aferdis n uɣawas amiran
 findbar.title=Nadi deg isemli
 findbar_label=Nadi
 
+additional_layers=Tissiwin-nniḍen
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas=Asebter {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
@@ -222,7 +228,6 @@ page_scale_actual=Teɣzi tilawt
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Error
 loading_error=Teḍra-d tuccḍa deg alluy n PDF:
 invalid_file_error=Afaylu PDF arameɣtu neɣ yexṣeṛ.
 missing_file_error=Ulac afaylu PDF.
diff --git a/third-party/pdfjs/web/locale/kk/viewer.properties 
b/third-party/pdfjs/web/locale/kk/viewer.properties
index afd679ac7..6e3228477 100644
--- a/third-party/pdfjs/web/locale/kk/viewer.properties
+++ b/third-party/pdfjs/web/locale/kk/viewer.properties
@@ -138,16 +138,22 @@ print_progress_close=Бас тарту
 # tooltips)
 toggle_sidebar.title=Бүйір панелін көрсету/жасыру
 toggle_sidebar_notification.title=Бүйір панелін көрсету/жасыру (құжатта құрылымы/салынымдар бар)
+toggle_sidebar_notification2.title=Бүйір панелін көрсету/жасыру (құжатта құрылымы/салынымдар/қабаттар бар)
 toggle_sidebar_label=Бүйір панелін көрсету/жасыру
 document_outline.title=Құжат құрылымын көрсету (барлық нәрселерді жазық қылу/жинау үшін қос шерту керек)
 document_outline_label=Құжат құрамасы
 attachments.title=Салынымдарды көрсету
 attachments_label=Салынымдар
+layers.title=Қабаттарды көрсету (барлық қабаттарды бастапқы күйге келтіру үшін екі рет шертіңіз)
+layers_label=Қабаттар
 thumbs.title=Кіші көріністерді көрсету
 thumbs_label=Кіші көріністер
+current_outline_item.title=Құрылымның ағымдағы элементін табу
+current_outline_item_label=Құрылымның ағымдағы элементі
 findbar.title=Құжаттан табу
 findbar_label=Табу
 
+additional_layers=Қосымша қабаттар
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas=Бет {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
@@ -222,7 +228,6 @@ page_scale_actual=Нақты өлшемі
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Қате
 loading_error=PDF жүктеу кезінде қате кетті.
 invalid_file_error=Зақымдалған немесе қате PDF файл.
 missing_file_error=PDF файлы жоқ.
diff --git a/third-party/pdfjs/web/locale/km/viewer.properties 
b/third-party/pdfjs/web/locale/km/viewer.properties
index 8615e8389..b59d7fa11 100644
--- a/third-party/pdfjs/web/locale/km/viewer.properties
+++ b/third-party/pdfjs/web/locale/km/viewer.properties
@@ -65,6 +65,8 @@ cursor_text_select_tool_label=ឧបករណ៍​ជ្រើស​អត្
 cursor_hand_tool.title=បើក​ឧបករណ៍​ដៃ
 cursor_hand_tool_label=ឧបករណ៍​ដៃ
 
+
+
 # Document properties dialog box
 document_properties.title=លក្ខណ​សម្បត្តិ​ឯកសារ…
 document_properties_label=លក្ខណ​សម្បត្តិ​ឯកសារ…
@@ -89,6 +91,25 @@ document_properties_creator=អ្នក​បង្កើត៖
 document_properties_producer=កម្មវិធី​បង្កើត PDF ៖
 document_properties_version=កំណែ PDF ៖
 document_properties_page_count=ចំនួន​ទំព័រ៖
+document_properties_page_size_unit_inches=អ៊ីញ
+document_properties_page_size_unit_millimeters=មម
+document_properties_page_size_orientation_portrait=បញ្ឈរ
+document_properties_page_size_orientation_landscape=ផ្តេក
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=សំបុត្រ
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, 
{{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized_yes=បាទ/ចាស
+document_properties_linearized_no=ទេ
 document_properties_close=បិទ
 
 print_progress_message=កំពុង​រៀបចំ​ឯកសារ​សម្រាប់​បោះពុម្ព…
@@ -112,6 +133,7 @@ thumbs_label=រួបភាព​តូចៗ
 findbar.title=រក​នៅ​ក្នុង​ឯកសារ
 findbar_label=រក
 
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 # Thumbnails panel item (tooltip and alt text for images)
 # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
 # number.
@@ -131,6 +153,14 @@ find_highlight=បន្លិច​ទាំងអស់
 find_match_case_label=ករណី​ដំណូច
 find_reached_top=បាន​បន្ត​ពី​ខាង​ក្រោម ទៅ​ដល់​ខាង​​លើ​នៃ​ឯកសារ
 find_reached_bottom=បាន​បន្ត​ពី​ខាងលើ ទៅដល់​ចុង​​នៃ​ឯកសារ
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
 find_not_found=រក​មិន​ឃើញ​ពាក្យ ឬ​ឃ្លា
 
 # Error panel labels
@@ -162,12 +192,14 @@ page_scale_actual=ទំហំ​ជាក់ស្ដែង
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=កំហុស
 loading_error=មាន​កំហុស​បាន​កើតឡើង​ពេល​កំពុង​ផ្ទុក PDF ។
 invalid_file_error=ឯកសារ PDF ខូច ឬ​មិន​ត្រឹមត្រូវ ។
 missing_file_error=បាត់​ឯកសារ PDF
 unexpected_response_error=ការ​ឆ្លើយ​តម​ម៉ាស៊ីន​មេ​ដែល​មិន​បាន​រំពឹង។
 
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+
 # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
 # "{{type}}" will be replaced with an annotation type from a list defined in
 # the PDF spec (32000-1:2008 Table 169 – Annotation types).
diff --git a/third-party/pdfjs/web/locale/kn/viewer.properties 
b/third-party/pdfjs/web/locale/kn/viewer.properties
index b37a71c2e..a5ba38a94 100644
--- a/third-party/pdfjs/web/locale/kn/viewer.properties
+++ b/third-party/pdfjs/web/locale/kn/viewer.properties
@@ -171,7 +171,6 @@ page_scale_actual=ನಿಜವಾದ ಗಾತ್ರ
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=ದೋಷ
 loading_error=PDF ಅನ್ನು ಲೋಡ್ ಮಾಡುವಾಗ ಒಂದು ದೋಷ ಎದುರಾಗಿದೆ.
 invalid_file_error=ಅಮಾನ್ಯವಾದ ಅಥವ ಹಾಳಾದ PDF ಕಡತ.
 missing_file_error=PDF ಕಡತ ಇಲ್ಲ.
diff --git a/third-party/pdfjs/web/locale/ko/viewer.properties 
b/third-party/pdfjs/web/locale/ko/viewer.properties
index 727f8d5c9..5ff42af6d 100644
--- a/third-party/pdfjs/web/locale/ko/viewer.properties
+++ b/third-party/pdfjs/web/locale/ko/viewer.properties
@@ -69,14 +69,14 @@ scroll_vertical.title=세로 스크롤 사용
 scroll_vertical_label=세로 스크롤
 scroll_horizontal.title=가로 스크롤 사용
 scroll_horizontal_label=가로 스크롤
-scroll_wrapped.title=감싼 스크롤 사용
-scroll_wrapped_label=감싼 스크롤
+scroll_wrapped.title=래핑(자동 줄 바꿈) 스크롤 사용
+scroll_wrapped_label=래핑 스크롤
 
-spread_none.title=펼쳐진 페이지를 합치지 않음
+spread_none.title=한 페이지 보기
 spread_none_label=펼쳐짐 없음
-spread_odd.title=홀수 페이지로 시작하게 펼쳐진 페이지 합침
+spread_odd.title=홀수 페이지로 시작하는 두 페이지 보기
 spread_odd_label=홀수 펼쳐짐
-spread_even.title=짝수 페이지로 시작하게 펼쳐진 페이지 합침
+spread_even.title=짝수 페이지로 시작하는 두 페이지 보기
 spread_even_label=짝수 펼쳐짐
 
 # Document properties dialog box
@@ -138,16 +138,22 @@ print_progress_close=취소
 # tooltips)
 toggle_sidebar.title=탐색창 표시/숨기기
 toggle_sidebar_notification.title=탐색창 표시/숨기기 (문서에 아웃라인/첨부파일 포함됨)
+toggle_sidebar_notification2.title=탐색창 표시/숨기기 (문서에 아웃라인/첨부파일/레이어 포함됨)
 toggle_sidebar_label=탐색창 표시/숨기기
-document_outline.title=문서 아웃라인 보기(더블 클릭해서 모든 항목 펼치기/접기)
+document_outline.title=문서 아웃라인 보기 (더블 클릭해서 모든 항목 펼치기/접기)
 document_outline_label=문서 아웃라인
 attachments.title=첨부파일 보기
 attachments_label=첨부파일
+layers.title=레이어 보기 (더블 클릭해서 모든 레이어를 기본 상태로 재설정)
+layers_label=레이어
 thumbs.title=미리보기
 thumbs_label=미리보기
+current_outline_item.title=현재 아웃라인 항목 찾기
+current_outline_item_label=현재 아웃라인 항목
 findbar.title=검색
 findbar_label=검색
 
+additional_layers=추가 레이어
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas={{page}} 페이지
 # Thumbnails panel item (tooltip and alt text for images)
@@ -213,16 +219,15 @@ error_line=줄 번호: {{line}}
 rendering_error=페이지를 렌더링하는 동안 오류가 발생했습니다.
 
 # Predefined zoom values
-page_scale_width=페이지 너비에 맞춤
-page_scale_fit=페이지에 맞춤
-page_scale_auto=자동 맞춤
-page_scale_actual=실제 크기에 맞춤
+page_scale_width=페이지 너비에 맞추기
+page_scale_fit=페이지에 맞추기
+page_scale_auto=자동
+page_scale_actual=실제 크기
 # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
 # numerical scale value.
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=오류
 loading_error=PDF를 로드하는 동안 오류가 발생했습니다.
 invalid_file_error=잘못되었거나 손상된 PDF 파일.
 missing_file_error=PDF 파일 없음.
diff --git a/third-party/pdfjs/web/locale/lij/viewer.properties 
b/third-party/pdfjs/web/locale/lij/viewer.properties
index 0cfa7d27f..b9dc27364 100644
--- a/third-party/pdfjs/web/locale/lij/viewer.properties
+++ b/third-party/pdfjs/web/locale/lij/viewer.properties
@@ -220,7 +220,6 @@ page_scale_actual=Dimenscioin efetive
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Erô
 loading_error=S'é verificou 'n'erô itno caregamento do PDF.
 invalid_file_error=O schedaio PDF o l'é no valido ò aroinou.
 missing_file_error=O schedaio PDF o no gh'é.
diff --git a/third-party/pdfjs/web/locale/lo/viewer.properties 
b/third-party/pdfjs/web/locale/lo/viewer.properties
index 00d3309c0..9b8fe6379 100644
--- a/third-party/pdfjs/web/locale/lo/viewer.properties
+++ b/third-party/pdfjs/web/locale/lo/viewer.properties
@@ -139,7 +139,6 @@ rendering_error=ມີຂໍ້ຜິດພາດເກີດຂື້ນຂະ
 # numerical scale value.
 
 # Loading indicator messages
-loading_error_indicator=ຂໍ້ຜິດພາດ
 loading_error=ມີຂໍ້ຜິດພາດເກີດຂື້ນຂະນະທີ່ກຳລັງໂຫລດ PDF.
 invalid_file_error=ໄຟລ໌ PDF ບໍ່ຖືກຕ້ອງຫລືເສຍຫາຍ.
 
diff --git a/third-party/pdfjs/web/locale/lt/viewer.properties 
b/third-party/pdfjs/web/locale/lt/viewer.properties
index daa76787c..312a23db2 100644
--- a/third-party/pdfjs/web/locale/lt/viewer.properties
+++ b/third-party/pdfjs/web/locale/lt/viewer.properties
@@ -72,12 +72,12 @@ scroll_horizontal_label=Horizontalus slinkimas
 scroll_wrapped.title=Naudoti išklotą slinkimą
 scroll_wrapped_label=Išklotas slinkimas
 
-spread_none.title=Nesujungti puslapių sklaidų
-spread_none_label=Be sklaidų
-spread_odd.title=Sujungti puslapių sklaidas pradedant nelyginiais puslapiais
-spread_odd_label=Nelyginės sklaidos
-spread_even.title=Sujungti puslapių sklaidas pradedant lyginiais puslapiais
-spread_even_label=Lyginės sklaidos
+spread_none.title=Nejungti puslapių į dvilapius
+spread_none_label=Be dvilapių
+spread_odd.title=Sujungti į dvilapius pradedant nelyginiais puslapiais
+spread_odd_label=Nelyginiai dvilapiai
+spread_even.title=Sujungti į dvilapius pradedant lyginiais puslapiais
+spread_even_label=Lyginiai dvilapiai
 
 # Document properties dialog box
 document_properties.title=Dokumento savybės…
@@ -138,16 +138,22 @@ print_progress_close=Atsisakyti
 # tooltips)
 toggle_sidebar.title=Rodyti / slėpti šoninį polangį
 toggle_sidebar_notification.title=Parankinė (dokumentas turi struktūrą / priedų)
+toggle_sidebar_notification2.title=Parankinė (dokumentas turi struktūrą / priedų / sluoksnių)
 toggle_sidebar_label=Šoninis polangis
 document_outline.title=Rodyti dokumento struktūrą (spustelėkite dukart norėdami išplėsti/suskleisti visus 
elementus)
 document_outline_label=Dokumento struktūra
 attachments.title=Rodyti priedus
 attachments_label=Priedai
+layers.title=Rodyti sluoksnius (spustelėkite dukart, norėdami atstatyti visus sluoksnius į numatytąją būseną)
+layers_label=Sluoksniai
 thumbs.title=Rodyti puslapių miniatiūras
 thumbs_label=Miniatiūros
+current_outline_item.title=Rasti dabartinį struktūros elementą
+current_outline_item_label=Dabartinis struktūros elementas
 findbar.title=Ieškoti dokumente
 findbar_label=Rasti
 
+additional_layers=Papildomi sluoksniai
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas={{page}} puslapis
 # Thumbnails panel item (tooltip and alt text for images)
@@ -222,7 +228,6 @@ page_scale_actual=Tikras dydis
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Klaida
 loading_error=Įkeliant PDF failą įvyko klaida.
 invalid_file_error=Tai nėra PDF failas arba jis yra sugadintas.
 missing_file_error=PDF failas nerastas.
diff --git a/third-party/pdfjs/web/locale/ltg/viewer.properties 
b/third-party/pdfjs/web/locale/ltg/viewer.properties
index 4fffa864d..87996ef19 100644
--- a/third-party/pdfjs/web/locale/ltg/viewer.properties
+++ b/third-party/pdfjs/web/locale/ltg/viewer.properties
@@ -198,7 +198,6 @@ page_scale_actual=Patīsais izmārs
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Klaida
 loading_error=Īluodejūt PDF nūtyka klaida.
 invalid_file_error=Nadereigs voi būjuots PDF fails.
 missing_file_error=PDF fails nav atrosts.
diff --git a/third-party/pdfjs/web/locale/lv/viewer.properties 
b/third-party/pdfjs/web/locale/lv/viewer.properties
index b6d6ad38f..c69db7507 100644
--- a/third-party/pdfjs/web/locale/lv/viewer.properties
+++ b/third-party/pdfjs/web/locale/lv/viewer.properties
@@ -220,7 +220,6 @@ page_scale_actual=Patiesais izmērs
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Kļūda
 loading_error=Ielādējot PDF notika kļūda.
 invalid_file_error=Nederīgs vai bojāts PDF fails.
 missing_file_error=PDF fails nav atrasts.
diff --git a/third-party/pdfjs/web/locale/mk/viewer.properties 
b/third-party/pdfjs/web/locale/mk/viewer.properties
index c1b091ed6..b7d027a23 100644
--- a/third-party/pdfjs/web/locale/mk/viewer.properties
+++ b/third-party/pdfjs/web/locale/mk/viewer.properties
@@ -128,7 +128,6 @@ page_scale_actual=Вистинска големина
 # numerical scale value.
 
 # Loading indicator messages
-loading_error_indicator=Грешка
 loading_error=Настана грешка при вчитувањето на PDF-от.
 invalid_file_error=Невалидна или корумпирана PDF датотека.
 missing_file_error=Недостасува PDF документ.
diff --git a/third-party/pdfjs/web/locale/mr/viewer.properties 
b/third-party/pdfjs/web/locale/mr/viewer.properties
index b33646f51..b3da755e4 100644
--- a/third-party/pdfjs/web/locale/mr/viewer.properties
+++ b/third-party/pdfjs/web/locale/mr/viewer.properties
@@ -212,7 +212,6 @@ page_scale_actual=प्रत्यक्ष आकार
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=त्रुटी
 loading_error=PDF लोड करतेवेळी त्रुटी आढळली.
 invalid_file_error=अवैध किंवा दोषीत PDF फाइल.
 missing_file_error=न आढळणारी PDF फाइल.
diff --git a/third-party/pdfjs/web/locale/ms/viewer.properties 
b/third-party/pdfjs/web/locale/ms/viewer.properties
index 61f155397..7769f3465 100644
--- a/third-party/pdfjs/web/locale/ms/viewer.properties
+++ b/third-party/pdfjs/web/locale/ms/viewer.properties
@@ -220,7 +220,6 @@ page_scale_actual=Saiz Sebenar
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Ralat
 loading_error=Masalah berlaku semasa menuatkan sebuah PDF.
 invalid_file_error=Tidak sah atau fail PDF rosak.
 missing_file_error=Fail PDF Hilang.
diff --git a/third-party/pdfjs/web/locale/my/viewer.properties 
b/third-party/pdfjs/web/locale/my/viewer.properties
index 3e6f2c305..da7e220b6 100644
--- a/third-party/pdfjs/web/locale/my/viewer.properties
+++ b/third-party/pdfjs/web/locale/my/viewer.properties
@@ -176,7 +176,6 @@ page_scale_actual=အမှန်တကယ်ရှိတဲ့ အရွယ်
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=အမှား
 loading_error=PDF ဖိုင် ကိုဆွဲတင်နေချိန်မှာ အမှားတစ်ခုတွေ့ရပါတယ်။
 invalid_file_error=မရသော သို့ ပျက်နေသော PDF ဖိုင်
 missing_file_error=PDF ပျောက်ဆုံး
diff --git a/third-party/pdfjs/web/locale/nb-NO/viewer.properties 
b/third-party/pdfjs/web/locale/nb-NO/viewer.properties
index 47b209048..e632d10f5 100644
--- a/third-party/pdfjs/web/locale/nb-NO/viewer.properties
+++ b/third-party/pdfjs/web/locale/nb-NO/viewer.properties
@@ -138,16 +138,22 @@ print_progress_close=Avbryt
 # tooltips)
 toggle_sidebar.title=Slå av/på sidestolpe
 toggle_sidebar_notification.title=Vis/gjem sidestolpe (dokumentet inneholder oversikt/vedlegg)
+toggle_sidebar_notification2.title=Vis/gjem sidestolpe (dokumentet inneholder oversikt/vedlegg/lag)
 toggle_sidebar_label=Slå av/på sidestolpe
 document_outline.title=Vis dokumentdisposisjonen (dobbeltklikk for å utvide/skjule alle elementer)
 document_outline_label=Dokumentdisposisjon
 attachments.title=Vis vedlegg
 attachments_label=Vedlegg
+layers.title=Vis lag (dobbeltklikk for å tilbakestille alle lag til standardtilstand)
+layers_label=Lag
 thumbs.title=Vis miniatyrbilde
 thumbs_label=Miniatyrbilde
+current_outline_item.title=Finn gjeldende disposisjonselement
+current_outline_item_label=Gjeldende disposisjonselement
 findbar.title=Finn i dokumentet
 findbar_label=Finn
 
+additional_layers=Ytterligere lag
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas=Side {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
@@ -222,7 +228,6 @@ page_scale_actual=Virkelig størrelse
 page_scale_percent={{scale}} %
 
 # Loading indicator messages
-loading_error_indicator=Feil
 loading_error=En feil oppstod ved lasting av PDF.
 invalid_file_error=Ugyldig eller skadet PDF-fil.
 missing_file_error=Manglende PDF-fil.
diff --git a/third-party/pdfjs/web/locale/ne-NP/viewer.properties 
b/third-party/pdfjs/web/locale/ne-NP/viewer.properties
index 3bf8ed8f3..7baf6056d 100644
--- a/third-party/pdfjs/web/locale/ne-NP/viewer.properties
+++ b/third-party/pdfjs/web/locale/ne-NP/viewer.properties
@@ -162,7 +162,6 @@ page_scale_actual=वास्तविक आकार
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=त्रुटि
 loading_error=यो PDF लोड गर्दा एउटा त्रुटि देखापर्‍यो।
 invalid_file_error=अवैध वा दुषित PDF फाइल।
 missing_file_error=हराईरहेको PDF फाइल।
diff --git a/third-party/pdfjs/web/locale/nl/viewer.properties 
b/third-party/pdfjs/web/locale/nl/viewer.properties
index b37f1abf5..d15407cf9 100644
--- a/third-party/pdfjs/web/locale/nl/viewer.properties
+++ b/third-party/pdfjs/web/locale/nl/viewer.properties
@@ -138,16 +138,22 @@ print_progress_close=Annuleren
 # tooltips)
 toggle_sidebar.title=Zijbalk in-/uitschakelen
 toggle_sidebar_notification.title=Zijbalk in-/uitschakelen (document bevat overzicht/bijlagen)
+toggle_sidebar_notification2.title=Zijbalk in-/uitschakelen (document bevat overzicht/bijlagen/lagen)
 toggle_sidebar_label=Zijbalk in-/uitschakelen
 document_outline.title=Documentoverzicht tonen (dubbelklik om alle items uit/samen te vouwen)
 document_outline_label=Documentoverzicht
 attachments.title=Bijlagen tonen
 attachments_label=Bijlagen
+layers.title=Lagen tonen (dubbelklik om alle lagen naar de standaardstatus terug te zetten)
+layers_label=Lagen
 thumbs.title=Miniaturen tonen
 thumbs_label=Miniaturen
+current_outline_item.title=Huidig item in inhoudsopgave zoeken
+current_outline_item_label=Huidig item in inhoudsopgave
 findbar.title=Zoeken in document
 findbar_label=Zoeken
 
+additional_layers=Aanvullende lagen
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas=Pagina {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
@@ -222,7 +228,6 @@ page_scale_actual=Werkelijke grootte
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Fout
 loading_error=Er is een fout opgetreden bij het laden van de PDF.
 invalid_file_error=Ongeldig of beschadigd PDF-bestand.
 missing_file_error=PDF-bestand ontbreekt. 
diff --git a/third-party/pdfjs/web/locale/nn-NO/viewer.properties 
b/third-party/pdfjs/web/locale/nn-NO/viewer.properties
index c9bac1010..f8702065c 100644
--- a/third-party/pdfjs/web/locale/nn-NO/viewer.properties
+++ b/third-party/pdfjs/web/locale/nn-NO/viewer.properties
@@ -138,16 +138,22 @@ print_progress_close=Avbryt
 # tooltips)
 toggle_sidebar.title=Slå av/på sidestolpe
 toggle_sidebar_notification.title=Vis/gøym sidestolpen (dokumentet inneheld oversikt/vedlegg)
+toggle_sidebar_notification2.title=Vis/gøym sidestolpe (dokumentet inneheld oversikt/vedlegg/lag)
 toggle_sidebar_label=Slå av/på sidestolpe
 document_outline.title=Vis dokumentdisposisjonen (dobbelklikk for å utvide/gøyme alle elementa)
 document_outline_label=Dokumentdisposisjon
 attachments.title=Vis vedlegg
 attachments_label=Vedlegg
+layers.title=Vis lag (dobbeltklikk for å tilbakestille alle lag til standardtilstand)
+layers_label=Lag
 thumbs.title=Vis miniatyrbilde
 thumbs_label=Miniatyrbilde
+current_outline_item.title=Finn gjeldande disposisjonselement
+current_outline_item_label=Gjeldande disposisjonselement
 findbar.title=Finn i dokumentet
 findbar_label=Finn
 
+additional_layers=Ytterlegare lag
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas=Side {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
@@ -222,7 +228,6 @@ page_scale_actual=Verkeleg storleik
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Feil
 loading_error=Ein feil oppstod ved lasting av PDF.
 invalid_file_error=Ugyldig eller korrupt PDF-fil.
 missing_file_error=Manglande PDF-fil.
diff --git a/third-party/pdfjs/web/locale/oc/viewer.properties 
b/third-party/pdfjs/web/locale/oc/viewer.properties
index b1c6a3a0c..026849686 100644
--- a/third-party/pdfjs/web/locale/oc/viewer.properties
+++ b/third-party/pdfjs/web/locale/oc/viewer.properties
@@ -106,7 +106,7 @@ document_properties_page_count=Nombre de paginas :
 document_properties_page_size=Talha de la pagina :
 document_properties_page_size_unit_inches=in
 document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=retrait
+document_properties_page_size_orientation_portrait=retrach
 document_properties_page_size_orientation_landscape=païsatge
 document_properties_page_size_name_a3=A3
 document_properties_page_size_name_a4=A4
@@ -138,16 +138,22 @@ print_progress_close=Anullar
 # tooltips)
 toggle_sidebar.title=Afichar/amagar lo panèl lateral
 toggle_sidebar_notification.title=Afichar/amagar lo panèl lateral (lo document conten esquèmas/pèças juntas)
+toggle_sidebar_notification2.title=Afichar/amagar lo panèl lateral (lo document conten esquèmas/pèças 
juntas/calques)
 toggle_sidebar_label=Afichar/amagar lo panèl lateral
 document_outline.title=Mostrar los esquèmas del document (dobleclicar per espandre/reduire totes los 
elements)
 document_outline_label=Marcapaginas del document
 attachments.title=Visualizar las pèças juntas
 attachments_label=Pèças juntas
+layers.title=Afichar los calques (doble-clicar per reïnicializar totes los calques a l’estat per defaut)
+layers_label=Calques
 thumbs.title=Afichar las vinhetas
 thumbs_label=Vinhetas
+current_outline_item.title=Trobar l’element de plan actual
+current_outline_item_label=Element de plan actual
 findbar.title=Cercar dins lo document
 findbar_label=Recercar
 
+additional_layers=Calques suplementaris
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas=Pagina {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
@@ -210,7 +216,7 @@ error_stack=Pila : {{stack}}
 error_file=Fichièr : {{file}}
 # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
 error_line=Linha : {{line}}
-rendering_error=Una error s'es produita pendent l'afichatge de la pagina.
+rendering_error=Una error s'es producha pendent l'afichatge de la pagina.
 
 # Predefined zoom values
 page_scale_width=Largor plena
@@ -222,8 +228,7 @@ page_scale_actual=Talha vertadièra
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Error
-loading_error=Una error s'es produita pendent lo cargament del fichièr PDF.
+loading_error=Una error s'es producha pendent lo cargament del fichièr PDF.
 invalid_file_error=Fichièr PDF invalid o corromput.
 missing_file_error=Fichièr PDF mancant.
 unexpected_response_error=Responsa de servidor imprevista.
diff --git a/third-party/pdfjs/web/locale/pa-IN/viewer.properties 
b/third-party/pdfjs/web/locale/pa-IN/viewer.properties
index 0ab56319e..dcfaa5182 100644
--- a/third-party/pdfjs/web/locale/pa-IN/viewer.properties
+++ b/third-party/pdfjs/web/locale/pa-IN/viewer.properties
@@ -74,8 +74,10 @@ scroll_wrapped_label=ਸਮੇਟਿਆ ਸਰਕਾਉਣਾ
 
 spread_none.title=ਸਫ਼ਾ ਫੈਲਾਅ ਵਿੱਚ ਸ਼ਾਮਲ ਨਾ ਹੋਵੋ
 spread_none_label=ਕੋਈ ਫੈਲਾਅ ਨਹੀਂ
-spread_odd.title=ਅਜੀਬ-ਨੰਬਰ ਵਾਲੇ ਪੰਨਿਆਂ ਨਾਲ ਸ਼ੁਰੂ ਹੋਣ ਵਾਲੇ ਪੰਨੇ ਸਪਰਸ਼ਾਂ ਵਿੱਚ ਸ਼ਾਮਲ ਹੋਵੋ
-spread_even.title=ਜਿਸਤ ਨੰਬਰ ਵਾਲੇ ਸਫ਼ਿਆਂ ਨਾਲ ਸ਼ੁਰੂ ਹੋਣ ਵਾਲੇ ਸਫਿਆਂ ਵਿੱਚ ਸ਼ਾਮਲ ਹੋਵੋ
+spread_odd.title=ਟਾਂਕ ਅੰਕ ਵਾਲੇ ਸਫ਼ਿਆਂ ਨਾਲ ਸ਼ੁਰੂ ਹੋਣ ਵਾਲੇ ਸਫਿਆਂ ਵਿੱਚ ਸ਼ਾਮਲ ਹੋਵੋ
+spread_odd_label=ਟਾਂਕ ਫੈਲਾਅ
+spread_even.title=ਜਿਸਤ ਅੰਕ ਵਾਲੇ ਸਫ਼ਿਆਂ ਨਾਲ ਸ਼ੁਰੂ ਹੋਣ ਵਾਲੇ ਸਫਿਆਂ ਵਿੱਚ ਸ਼ਾਮਲ ਹੋਵੋ
+spread_even_label=ਜਿਸਤ ਫੈਲਾਅ
 
 # Document properties dialog box
 document_properties.title=…ਦਸਤਾਵੇਜ਼ ਦੀ ਵਿਸ਼ੇਸ਼ਤਾ
@@ -136,16 +138,22 @@ print_progress_close=ਰੱਦ ਕਰੋ
 # tooltips)
 toggle_sidebar.title=ਬਾਹੀ ਬਦਲੋ
 toggle_sidebar_notification.title=ਬਾਹੀ ਨੂੰ ਬਦਲੋ (ਦਸਤਾਵੇਜ਼ ਖਾਕਾ/ਅਟੈਚਮੈਂਟਾਂ ਰੱਖਦਾ ਹੈ)
+toggle_sidebar_notification2.title=ਬਾਹੀ ਨੂੰ ਬਦਲੋ (ਦਸਤਾਵੇਜ਼ ਖਾਕਾ/ਅਟੈਚਮੈਂਟ/ਪਰਤਾਂ ਰੱਖਦਾ ਹੈ)
 toggle_sidebar_label=ਬਾਹੀ ਬਦਲੋ
 document_outline.title=ਦਸਤਾਵੇਜ਼ ਖਾਕਾ ਦਿਖਾਓ (ਸਾਰੀਆਂ ਆਈਟਮਾਂ ਨੂੰ ਫੈਲਾਉਣ/ਸਮੇਟਣ ਲਈ ਦੋ ਵਾਰ ਕਲਿੱਕ ਕਰੋ)
 document_outline_label=ਦਸਤਾਵੇਜ਼ ਖਾਕਾ
 attachments.title=ਅਟੈਚਮੈਂਟ ਵੇਖਾਓ
 attachments_label=ਅਟੈਚਮੈਂਟਾਂ
+layers.title=ਪਰਤਾਂ ਵੇਖਾਓ (ਸਾਰੀਆਂ ਪਰਤਾਂ ਨੂੰ ਮੂਲ ਹਾਲਤ ਉੱਤੇ ਮੁੜ-ਸੈੱਟ ਕਰਨ ਲਈ ਦੋ ਵਾਰ ਕਲਿੱਕ ਕਰੋ)
+layers_label=ਪਰਤਾਂ
 thumbs.title=ਥੰਮਨੇਲ ਨੂੰ ਵੇਖਾਓ
 thumbs_label=ਥੰਮਨੇਲ
+current_outline_item.title=ਮੌੌਜੂਦਾ ਖਾਕਾ ਚੀਜ਼ ਲੱਭੋ
+current_outline_item_label=ਮੌਜੂਦਾ ਖਾਕਾ ਚੀਜ਼
 findbar.title=ਦਸਤਾਵੇਜ਼ ਵਿੱਚ ਲੱਭੋ
 findbar_label=ਲੱਭੋ
 
+additional_layers=ਵਾਧੂ ਪਰਤਾਂ
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas=ਸਫ਼ਾ {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
@@ -220,7 +228,6 @@ page_scale_actual=ਆਟੋਮੈਟਿਕ ਆਕਾਰ
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=ਗਲਤੀ
 loading_error=PDF ਲੋਡ ਕਰਨ ਦੇ ਦੌਰਾਨ ਗਲਤੀ ਆਈ ਹੈ।
 invalid_file_error=ਗਲਤ ਜਾਂ ਨਿਕਾਰਾ PDF ਫਾਈਲ ਹੈ।
 missing_file_error=ਨਾ-ਮੌਜੂਦ PDF ਫਾਈਲ।
diff --git a/third-party/pdfjs/web/locale/pl/viewer.properties 
b/third-party/pdfjs/web/locale/pl/viewer.properties
index cf170c8d2..cb31a5fa2 100644
--- a/third-party/pdfjs/web/locale/pl/viewer.properties
+++ b/third-party/pdfjs/web/locale/pl/viewer.properties
@@ -138,16 +138,22 @@ print_progress_close=Anuluj
 # tooltips)
 toggle_sidebar.title=Przełącz panel boczny
 toggle_sidebar_notification.title=Przełącz panel boczny (dokument zawiera konspekt/załączniki)
+toggle_sidebar_notification2.title=Przełącz panel boczny (dokument zawiera konspekt/załączniki/warstwy)
 toggle_sidebar_label=Przełącz panel boczny
 document_outline.title=Konspekt dokumentu (podwójne kliknięcie rozwija lub zwija wszystkie pozycje)
 document_outline_label=Konspekt dokumentu
 attachments.title=Załączniki
 attachments_label=Załączniki
+layers.title=Warstwy (podwójne kliknięcie przywraca wszystkie warstwy do stanu domyślnego)
+layers_label=Warstwy
 thumbs.title=Miniatury
 thumbs_label=Miniatury
+current_outline_item.title=Znajdź bieżący element konspektu
+current_outline_item_label=Bieżący element konspektu
 findbar.title=Znajdź w dokumencie
 findbar_label=Znajdź
 
+additional_layers=Dodatkowe warstwy
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas={{page}}. strona
 # Thumbnails panel item (tooltip and alt text for images)
@@ -222,7 +228,6 @@ page_scale_actual=Rozmiar oryginalny
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Błąd
 loading_error=Podczas wczytywania dokumentu PDF wystąpił błąd.
 invalid_file_error=Nieprawidłowy lub uszkodzony plik PDF.
 missing_file_error=Brak pliku PDF.
diff --git a/third-party/pdfjs/web/locale/pt-BR/viewer.properties 
b/third-party/pdfjs/web/locale/pt-BR/viewer.properties
index ca592b8f1..e091bf934 100644
--- a/third-party/pdfjs/web/locale/pt-BR/viewer.properties
+++ b/third-party/pdfjs/web/locale/pt-BR/viewer.properties
@@ -39,8 +39,8 @@ open_file.title=Abrir arquivo
 open_file_label=Abrir
 print.title=Imprimir
 print_label=Imprimir
-download.title=Download
-download_label=Download
+download.title=Baixar
+download_label=Baixar
 bookmark.title=Visão atual (copiar ou abrir em nova janela)
 bookmark_label=Visualização atual
 
@@ -62,15 +62,15 @@ page_rotate_ccw_label=Girar no sentido anti-horário
 
 cursor_text_select_tool.title=Ativar a ferramenta de seleção de texto
 cursor_text_select_tool_label=Ferramenta de seleção de texto
-cursor_hand_tool.title=Ativar ferramenta de mão
-cursor_hand_tool_label=Ferramenta de mão
+cursor_hand_tool.title=Ativar ferramenta de deslocamento
+cursor_hand_tool_label=Ferramenta de deslocamento
 
-scroll_vertical.title=Usar rolagem vertical
-scroll_vertical_label=Rolagem vertical
-scroll_horizontal.title=Usar rolagem horizontal
-scroll_horizontal_label=Rolagem horizontal
-scroll_wrapped.title=Usar rolagem contida
-scroll_wrapped_label=Rolagem contida
+scroll_vertical.title=Usar deslocamento vertical
+scroll_vertical_label=Deslocamento vertical
+scroll_horizontal.title=Usar deslocamento horizontal
+scroll_horizontal_label=Deslocamento horizontal
+scroll_wrapped.title=Usar deslocamento contido
+scroll_wrapped_label=Deslocamento contido
 
 spread_none.title=Não reagrupar páginas
 spread_none_label=Não estender
@@ -122,7 +122,7 @@ document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}}
 document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, 
{{orientation}})
 # LOCALIZATION NOTE (document_properties_linearized): The linearization status of
 # the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Visualização rápida da Web:
+document_properties_linearized=Exibição web rápida:
 document_properties_linearized_yes=Sim
 document_properties_linearized_no=Não
 document_properties_close=Fechar
@@ -136,18 +136,24 @@ print_progress_close=Cancelar
 # Tooltips and alt text for side panel toolbar buttons
 # (the _label strings are alt text for the buttons, the .title strings are
 # tooltips)
-toggle_sidebar.title=Alternar painel
-toggle_sidebar_notification.title=Alternar o painel (documento contém marcadores e anexos)
-toggle_sidebar_label=Alternar painel
-document_outline.title=Mostrar a estrutura do documento (duplo-clique para expandir/recolher todos os ítens)
+toggle_sidebar.title=Exibir/ocultar painel lateral
+toggle_sidebar_notification.title=Exibir/ocultar painel lateral (documento contém estrutura/anexos)
+toggle_sidebar_notification2.title=Exibir/ocultar painel (documento contém estrutura/anexos/camadas)
+toggle_sidebar_label=Exibir/ocultar painel
+document_outline.title=Mostrar a estrutura do documento (dê um duplo-clique para expandir/recolher todos os 
itens)
 document_outline_label=Estrutura do documento
 attachments.title=Mostrar anexos
 attachments_label=Anexos
+layers.title=Exibir camadas (duplo-clique para redefinir todas as camadas ao estado predefinido)
+layers_label=Camadas
 thumbs.title=Mostrar miniaturas
 thumbs_label=Miniaturas
+current_outline_item.title=Encontrar item atual da estrutura
+current_outline_item_label=Item atual da estrutura
 findbar.title=Procurar no documento
 findbar_label=Procurar
 
+additional_layers=Camadas adicionais
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas=Página {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
@@ -222,7 +228,6 @@ page_scale_actual=Tamanho real
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Erro
 loading_error=Ocorreu um erro ao carregar o PDF.
 invalid_file_error=Arquivo PDF corrompido ou inválido.
 missing_file_error=Arquivo PDF ausente.
diff --git a/third-party/pdfjs/web/locale/pt-PT/viewer.properties 
b/third-party/pdfjs/web/locale/pt-PT/viewer.properties
index 57f481416..437eaa489 100644
--- a/third-party/pdfjs/web/locale/pt-PT/viewer.properties
+++ b/third-party/pdfjs/web/locale/pt-PT/viewer.properties
@@ -138,16 +138,22 @@ print_progress_close=Cancelar
 # tooltips)
 toggle_sidebar.title=Alternar barra lateral
 toggle_sidebar_notification.title=Alternar barra lateral (documento contém contorno/anexos)
+toggle_sidebar_notification2.title=Alternar barra lateral (o documento contém contornos/anexos/camadas)
 toggle_sidebar_label=Alternar barra lateral
 document_outline.title=Mostrar esquema do documento (duplo clique para expandir/colapsar todos os itens)
 document_outline_label=Esquema do documento
 attachments.title=Mostrar anexos
 attachments_label=Anexos
+layers.title=Mostrar camadas (clique duas vezes para repor todas as camadas para o estado predefinido)
+layers_label=Camadas
 thumbs.title=Mostrar miniaturas
 thumbs_label=Miniaturas
+current_outline_item.title=Encontrar o item atualmente destacado
+current_outline_item_label=Item atualmente destacado
 findbar.title=Localizar em documento
 findbar_label=Localizar
 
+additional_layers=Camadas adicionais
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas=Página {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
@@ -222,7 +228,6 @@ page_scale_actual=Tamanho real
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Erro
 loading_error=Ocorreu um erro ao carregar o PDF.
 invalid_file_error=Ficheiro PDF inválido ou danificado.
 missing_file_error=Ficheiro PDF inexistente.
diff --git a/third-party/pdfjs/web/locale/rm/viewer.properties 
b/third-party/pdfjs/web/locale/rm/viewer.properties
index 8c8cab892..bb5fb0229 100644
--- a/third-party/pdfjs/web/locale/rm/viewer.properties
+++ b/third-party/pdfjs/web/locale/rm/viewer.properties
@@ -138,16 +138,22 @@ print_progress_close=Interrumper
 # tooltips)
 toggle_sidebar.title=Activar/deactivar la trav laterala
 toggle_sidebar_notification.title=Activar/deactivar la trav laterala (structura dal document/agiuntas)
+toggle_sidebar_notification2.title=Activar/deactivar la trav laterala (il document cuntegna structura dal 
document/agiuntas/nivels)
 toggle_sidebar_label=Activar/deactivar la trav laterala
 document_outline.title=Mussar la structura dal document (cliccar duas giadas per extender/cumprimer tut ils 
elements)
 document_outline_label=Structura dal document
 attachments.title=Mussar agiuntas
 attachments_label=Agiuntas
+layers.title=Mussar ils nivels (cliccar dubel per restaurar il stadi da standard da tut ils nivels)
+layers_label=Nivels
 thumbs.title=Mussar las miniaturas
 thumbs_label=Miniaturas
+current_outline_item.title=Tschertgar l'element da structura actual
+current_outline_item_label=Element da structura actual
 findbar.title=Tschertgar en il document
 findbar_label=Tschertgar
 
+additional_layers=Nivels supplementars
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas=Pagina {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
@@ -222,7 +228,6 @@ page_scale_actual=Grondezza actuala
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Errur
 loading_error=Ina errur è cumparida cun chargiar il PDF.
 invalid_file_error=Datoteca PDF nunvalida u donnegiada.
 missing_file_error=Datoteca PDF manconta.
diff --git a/third-party/pdfjs/web/locale/ro/viewer.properties 
b/third-party/pdfjs/web/locale/ro/viewer.properties
index 0e4fbf70e..e397c96b1 100644
--- a/third-party/pdfjs/web/locale/ro/viewer.properties
+++ b/third-party/pdfjs/web/locale/ro/viewer.properties
@@ -222,7 +222,6 @@ page_scale_actual=Mărime reală
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Eroare
 loading_error=A intervenit o eroare la încărcarea PDF-ului.
 invalid_file_error=Fișier PDF nevalid sau corupt.
 missing_file_error=Fișier PDF lipsă.
diff --git a/third-party/pdfjs/web/locale/ru/viewer.properties 
b/third-party/pdfjs/web/locale/ru/viewer.properties
index dd4ee4810..8c865d20d 100644
--- a/third-party/pdfjs/web/locale/ru/viewer.properties
+++ b/third-party/pdfjs/web/locale/ru/viewer.properties
@@ -138,16 +138,22 @@ print_progress_close=Отмена
 # tooltips)
 toggle_sidebar.title=Показать/скрыть боковую панель
 toggle_sidebar_notification.title=Показать/скрыть боковую панель (документ имеет содержание/вложения)
+toggle_sidebar_notification2.title=Показать/скрыть боковую панель (документ имеет содержание/вложения/слои)
 toggle_sidebar_label=Показать/скрыть боковую панель
 document_outline.title=Показать содержание документа (двойной щелчок, чтобы развернуть/свернуть все элементы)
 document_outline_label=Содержание документа
 attachments.title=Показать вложения
 attachments_label=Вложения
+layers.title=Показать слои (дважды щёлкните, чтобы сбросить все слои к состоянию по умолчанию)
+layers_label=Слои
 thumbs.title=Показать миниатюры
 thumbs_label=Миниатюры
+current_outline_item.title=Найти текущий элемент структуры
+current_outline_item_label=Текущий элемент структуры
 findbar.title=Найти в документе
 findbar_label=Найти
 
+additional_layers=Дополнительные слои
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas=Страница {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
@@ -222,7 +228,6 @@ page_scale_actual=Реальный размер
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Ошибка
 loading_error=При загрузке PDF произошла ошибка.
 invalid_file_error=Некорректный или повреждённый PDF-файл.
 missing_file_error=PDF-файл отсутствует.
@@ -244,4 +249,4 @@ password_cancel=Отмена
 
 printing_not_supported=Предупреждение: В этом браузере не полностью поддерживается печать.
 printing_not_ready=Предупреждение: PDF не полностью загружен для печати.
-web_fonts_disabled=Веб-шрифты отключены: невозможно использовать встроенные PDF-шрифты.
+web_fonts_disabled=Веб-шрифты отключены: не удалось задействовать встроенные PDF-шрифты.
diff --git a/third-party/pdfjs/web/locale/si/viewer.properties 
b/third-party/pdfjs/web/locale/si/viewer.properties
index 9a1d1e8bc..e4ac12549 100644
--- a/third-party/pdfjs/web/locale/si/viewer.properties
+++ b/third-party/pdfjs/web/locale/si/viewer.properties
@@ -186,7 +186,6 @@ page_scale_actual=නියමිත ප්‍රමාණය
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=දෝෂය
 loading_error=PDF පූරණය විමේදි දෝෂයක් හට ගැනුණි.
 invalid_file_error=දූශිත හෝ සාවද්‍ය PDF ගොනුව.
 missing_file_error=නැතිවූ PDF ගොනුව.
diff --git a/third-party/pdfjs/web/locale/sk/viewer.properties 
b/third-party/pdfjs/web/locale/sk/viewer.properties
index d86d77cfa..4be243903 100644
--- a/third-party/pdfjs/web/locale/sk/viewer.properties
+++ b/third-party/pdfjs/web/locale/sk/viewer.properties
@@ -138,16 +138,22 @@ print_progress_close=Zrušiť
 # tooltips)
 toggle_sidebar.title=Prepnúť bočný panel
 toggle_sidebar_notification.title=Prepnúť bočný panel (dokument obsahuje osnovu/prílohy)
+toggle_sidebar_notification2.title=Prepnúť bočný panel (dokument obsahuje osnovu/prílohy/vrstvy)
 toggle_sidebar_label=Prepnúť bočný panel
 document_outline.title=Zobraziť osnovu dokumentu (dvojitým kliknutím rozbalíte/zbalíte všetky položky)
 document_outline_label=Osnova dokumentu
 attachments.title=Zobraziť prílohy
 attachments_label=Prílohy
+layers.title=Zobraziť vrstvy (dvojitým kliknutím uvediete všetky vrstvy do pôvodného stavu)
+layers_label=Vrstvy
 thumbs.title=Zobraziť miniatúry
 thumbs_label=Miniatúry
+current_outline_item.title=Nájsť aktuálnu položku v osnove
+current_outline_item_label=Aktuálna položka v osnove
 findbar.title=Hľadať v dokumente
 findbar_label=Hľadať
 
+additional_layers=Ďalšie vrstvy
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas=Strana {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
@@ -194,7 +200,7 @@ find_match_count_limit[other]=Viac než {{limit}} výsledkov
 find_not_found=Výraz nebol nájdený
 
 # Error panel labels
-error_more_info=Viac informácií
+error_more_info=Ďalšie informácie
 error_less_info=Menej informácií
 error_close=Zavrieť
 # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
@@ -222,7 +228,6 @@ page_scale_actual=Skutočná veľkosť
 page_scale_percent={{scale}} %
 
 # Loading indicator messages
-loading_error_indicator=Chyba
 loading_error=Počas načítavania dokumentu PDF sa vyskytla chyba.
 invalid_file_error=Neplatný alebo poškodený súbor PDF.
 missing_file_error=Chýbajúci súbor PDF.
diff --git a/third-party/pdfjs/web/locale/sl/viewer.properties 
b/third-party/pdfjs/web/locale/sl/viewer.properties
index 25a5e9c50..9678b0324 100644
--- a/third-party/pdfjs/web/locale/sl/viewer.properties
+++ b/third-party/pdfjs/web/locale/sl/viewer.properties
@@ -138,16 +138,22 @@ print_progress_close=Prekliči
 # tooltips)
 toggle_sidebar.title=Preklopi stransko vrstico
 toggle_sidebar_notification.title=Preklopi stransko vrstico (dokument vsebuje oris/priponke)
+toggle_sidebar_notification2.title=Preklopi stransko vrstico (dokument vsebuje oris/priponke/plasti)
 toggle_sidebar_label=Preklopi stransko vrstico
 document_outline.title=Prikaži oris dokumenta (dvokliknite za razširitev/strnitev vseh predmetov)
 document_outline_label=Oris dokumenta
 attachments.title=Prikaži priponke
 attachments_label=Priponke
+layers.title=Prikaži plasti (dvokliknite za ponastavitev vseh plasti na privzeto stanje)
+layers_label=Plasti
 thumbs.title=Prikaži sličice
 thumbs_label=Sličice
+current_outline_item.title=Najdi trenutni predmet orisa
+current_outline_item_label=Trenutni predmet orisa
 findbar.title=Iskanje po dokumentu
 findbar_label=Najdi
 
+additional_layers=Dodatne plasti
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas=Stran {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
@@ -222,7 +228,6 @@ page_scale_actual=Dejanska velikost
 page_scale_percent={{scale}} %
 
 # Loading indicator messages
-loading_error_indicator=Napaka
 loading_error=Med nalaganjem datoteke PDF je prišlo do napake.
 invalid_file_error=Neveljavna ali pokvarjena datoteka PDF.
 missing_file_error=Ni datoteke PDF.
diff --git a/third-party/pdfjs/web/locale/son/viewer.properties 
b/third-party/pdfjs/web/locale/son/viewer.properties
index 683ed14d4..df2bd1009 100644
--- a/third-party/pdfjs/web/locale/son/viewer.properties
+++ b/third-party/pdfjs/web/locale/son/viewer.properties
@@ -158,7 +158,6 @@ page_scale_actual=Adadu cimi
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Firka
 loading_error=Firka bangay kaŋ PDF goo ma zumandi.
 invalid_file_error=PDF tuku laala wala laybante.
 missing_file_error=PDF tuku kumante.
diff --git a/third-party/pdfjs/web/locale/sq/viewer.properties 
b/third-party/pdfjs/web/locale/sq/viewer.properties
index f0710af5f..dbed4c27f 100644
--- a/third-party/pdfjs/web/locale/sq/viewer.properties
+++ b/third-party/pdfjs/web/locale/sq/viewer.properties
@@ -131,16 +131,20 @@ print_progress_close=Anuloje
 # tooltips)
 toggle_sidebar.title=Shfaqni/Fshihni Anështyllën
 toggle_sidebar_notification.title=Shfaqni Anështyllën (dokumenti përmban përvijim/bashkëngjitje)
+toggle_sidebar_notification2.title=Hap/Mbyll Anështylë (dokumenti përmban përvijim/nashkëngjitje/shtresa)
 toggle_sidebar_label=Shfaq/Fshih Anështyllën
 document_outline.title=Shfaqni Përvijim Dokumenti (dyklikoni që të shfaqen/fshihen krejt elementët)
 document_outline_label=Përvijim Dokumenti
 attachments.title=Shfaqni Bashkëngjitje
 attachments_label=Bashkëngjitje
+layers.title=Shfaq Shtresa (dyklikoni që të rikthehen krejt shtresat në gjendjen e tyre parazgjedhje)
+layers_label=Shtresa
 thumbs.title=Shfaqni Miniatura
 thumbs_label=Miniatura
 findbar.title=Gjeni në Dokument
 findbar_label=Gjej
 
+additional_layers=Shtresa Shtesë
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas=Faqja {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
@@ -215,7 +219,6 @@ page_scale_actual=Madhësia Faktike
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Gabim
 loading_error=Ndodhi një gabim gjatë ngarkimit të PDF-së.
 invalid_file_error=Kartelë PDF e pavlefshme ose e dëmtuar.
 missing_file_error=Kartelë PDF që mungon.
diff --git a/third-party/pdfjs/web/locale/sr/viewer.properties 
b/third-party/pdfjs/web/locale/sr/viewer.properties
index 8c4e92411..581da478e 100644
--- a/third-party/pdfjs/web/locale/sr/viewer.properties
+++ b/third-party/pdfjs/web/locale/sr/viewer.properties
@@ -138,16 +138,22 @@ print_progress_close=Откажи
 # tooltips)
 toggle_sidebar.title=Прикажи додатну палету
 toggle_sidebar_notification.title=Прикажи додатну траку (докуменат садржи оквире/прилоге)
+toggle_sidebar_notification2.title=Прикажи/сакриј бочну траку (документ садржи контуру/прилоге/слојеве)
 toggle_sidebar_label=Прикажи додатну палету
 document_outline.title=Прикажи контуру документа (дупли клик за проширење/скупљање елемената)
 document_outline_label=Контура документа
 attachments.title=Прикажи прилоге
 attachments_label=Прилози
+layers.title=Прикажи слојеве (дупли клик за враћање свих слојева у подразумевано стање)
+layers_label=Слојеви
 thumbs.title=Прикажи сличице
 thumbs_label=Сличице
+current_outline_item.title=Пронађите тренутни елемент структуре
+current_outline_item_label=Тренутна контура
 findbar.title=Пронађи у документу
 findbar_label=Пронађи
 
+additional_layers=Додатни слојеви
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas=Страница {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
@@ -222,7 +228,6 @@ page_scale_actual=Стварна величина
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Грешка
 loading_error=Дошло је до грешке приликом учитавања PDF-а.
 invalid_file_error=PDF датотека је оштећена или је неисправна.
 missing_file_error=PDF датотека није пронађена.
diff --git a/third-party/pdfjs/web/locale/sv-SE/viewer.properties 
b/third-party/pdfjs/web/locale/sv-SE/viewer.properties
index 7c75281c3..69e053901 100644
--- a/third-party/pdfjs/web/locale/sv-SE/viewer.properties
+++ b/third-party/pdfjs/web/locale/sv-SE/viewer.properties
@@ -137,22 +137,25 @@ print_progress_close=Avbryt
 # (the _label strings are alt text for the buttons, the .title strings are
 # tooltips)
 toggle_sidebar.title=Visa/dölj sidofält
-toggle_sidebar_notification2.title=Visa/dölj sidofält (dokument innehåller översikt/bilagor/lager)
+toggle_sidebar_notification.title=Visa/dölj sidofält (dokument innehåller översikt/bilagor)
+toggle_sidebar_notification2.title=Växla sidofält (dokumentet innehåller dokumentstruktur/bilagor/lager)
 toggle_sidebar_label=Visa/dölj sidofält
 document_outline.title=Visa dokumentdisposition (dubbelklicka för att expandera/komprimera alla objekt)
 document_outline_label=Dokumentöversikt
 attachments.title=Visa Bilagor
 attachments_label=Bilagor
-layers.title=Visa lager (dubbelklicka för att återställa alla lager till ursrungligt läge)
+layers.title=Visa lager (dubbelklicka för att återställa alla lager till standardläge)
 layers_label=Lager
 thumbs.title=Visa miniatyrer
 thumbs_label=Miniatyrer
+current_outline_item.title=Hitta aktuellt dispositionsobjekt
+current_outline_item_label=Aktuellt dispositionsobjekt
 findbar.title=Sök i dokument
 findbar_label=Sök
 
 additional_layers=Ytterligare lager
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=Sida {{page}}
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Sida {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
 # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
 # number.
@@ -225,7 +228,7 @@ page_scale_actual=Verklig storlek
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Fel
+loading=Laddar…
 loading_error=Ett fel uppstod vid laddning av PDF-filen.
 invalid_file_error=Ogiltig eller korrupt PDF-fil.
 missing_file_error=Saknad PDF-fil.
diff --git a/third-party/pdfjs/web/locale/szl/viewer.properties 
b/third-party/pdfjs/web/locale/szl/viewer.properties
index 282c59509..ea709b7cc 100644
--- a/third-party/pdfjs/web/locale/szl/viewer.properties
+++ b/third-party/pdfjs/web/locale/szl/viewer.properties
@@ -138,16 +138,20 @@ print_progress_close=Pociep
 # tooltips)
 toggle_sidebar.title=Przełōncz posek na rancie
 toggle_sidebar_notification.title=Przełōncz posek na rancie (dokumynt mo struktura/przidowki)
+toggle_sidebar_notification2.title=Przełōncz posek na rancie (dokumynt mo struktura/przidowki/warstwy)
 toggle_sidebar_label=Przełōncz posek na rancie
-document_outline.title=Pokoż struktura dokumyntu (tuplowane klikniyncie rozszyrzo/swijo wszyskie elymynty)
+document_outline.title=Pokoż struktura dokumyntu (tuplowane klikniyncie rozszyrzo/swijo wszyskie elymynta)
 document_outline_label=Struktura dokumyntu
 attachments.title=Pokoż przidowki
 attachments_label=Przidowki
+layers.title=Pokoż warstwy (tuplowane klikniyncie resetuje wszyskie warstwy do bazowego stanu)
+layers_label=Warstwy
 thumbs.title=Pokoż miniatury
 thumbs_label=Miniatury
 findbar.title=Znojdź w dokumyncie
 findbar_label=Znojdź
 
+additional_layers=Nadbytnie warstwy
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas=Strōna {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
@@ -222,7 +226,6 @@ page_scale_actual=Aktualno srogość
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Feler
 loading_error=Przi ladowaniu PDFa pokozoł sie feler.
 invalid_file_error=Zły abo felerny zbiōr PDF.
 missing_file_error=Chybio zbioru PDF.
diff --git a/third-party/pdfjs/web/locale/ta/viewer.properties 
b/third-party/pdfjs/web/locale/ta/viewer.properties
index 669ba0c56..179c93405 100644
--- a/third-party/pdfjs/web/locale/ta/viewer.properties
+++ b/third-party/pdfjs/web/locale/ta/viewer.properties
@@ -179,7 +179,6 @@ page_scale_actual=உண்மையான அளவு
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=பிழை
 loading_error=PDF ஐ ஏற்றும் போது ஒரு பிழை ஏற்பட்டது.
 invalid_file_error=செல்லுபடியாகாத அல்லது சிதைந்த PDF கோப்பு.
 missing_file_error=PDF கோப்பு காணவில்லை.
diff --git a/third-party/pdfjs/web/locale/te/viewer.properties 
b/third-party/pdfjs/web/locale/te/viewer.properties
index 498b64c8d..014d102df 100644
--- a/third-party/pdfjs/web/locale/te/viewer.properties
+++ b/third-party/pdfjs/web/locale/te/viewer.properties
@@ -130,11 +130,15 @@ document_outline.title=పత్రము రూపము చూపించు
 document_outline_label=పత్రము అవుట్‌లైన్
 attachments.title=అనుబంధాలు చూపు
 attachments_label=అనుబంధాలు
+layers_label=పొరలు
 thumbs.title=థంబ్‌నైల్స్ చూపు
 thumbs_label=థంబ్‌నైల్స్
 findbar.title=పత్రములో కనుగొనుము
 findbar_label=కనుగొను
 
+additional_layers=అదనపు పొరలు
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=పేజి {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
 # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
 # number.
@@ -196,7 +200,6 @@ page_scale_actual=యథార్ధ పరిమాణం
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=దోషం
 loading_error=PDF లోడవుచున్నప్పుడు ఒక దోషం ఎదురైంది.
 invalid_file_error=చెల్లని లేదా పాడైన PDF ఫైలు.
 missing_file_error=దొరకని PDF ఫైలు.
diff --git a/third-party/pdfjs/web/locale/th/viewer.properties 
b/third-party/pdfjs/web/locale/th/viewer.properties
index a4ef7db14..1a4347c50 100644
--- a/third-party/pdfjs/web/locale/th/viewer.properties
+++ b/third-party/pdfjs/web/locale/th/viewer.properties
@@ -138,16 +138,22 @@ print_progress_close=ยกเลิก
 # tooltips)
 toggle_sidebar.title=เปิด/ปิดแถบข้าง
 toggle_sidebar_notification.title=เปิด/ปิดแถบข้าง (เอกสารมีเค้าร่าง/ไฟล์แนบ)
+toggle_sidebar_notification2.title=เปิด/ปิดแถบข้าง (เอกสารมีเค้าร่าง/ไฟล์แนบ/เลเยอร์)
 toggle_sidebar_label=เปิด/ปิดแถบข้าง
 document_outline.title=แสดงเค้าร่างเอกสาร (คลิกสองครั้งเพื่อขยาย/ยุบรายการทั้งหมด)
 document_outline_label=เค้าร่างเอกสาร
 attachments.title=แสดงไฟล์แนบ
 attachments_label=ไฟล์แนบ
+layers.title=แสดงเลเยอร์ (คลิกสองครั้งเพื่อรีเซ็ตเลเยอร์ทั้งหมดเป็นสถานะเริ่มต้น)
+layers_label=เลเยอร์
 thumbs.title=แสดงภาพขนาดย่อ
 thumbs_label=ภาพขนาดย่อ
+current_outline_item.title=ค้นหารายการเค้าร่างปัจจุบัน
+current_outline_item_label=รายการเค้าร่างปัจจุบัน
 findbar.title=ค้นหาในเอกสาร
 findbar_label=ค้นหา
 
+additional_layers=เลเยอร์เพิ่มเติม
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas=หน้า {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
@@ -222,7 +228,6 @@ page_scale_actual=ขนาดจริง
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=ข้อผิดพลาด
 loading_error=เกิดข้อผิดพลาดขณะโหลด PDF
 invalid_file_error=ไฟล์ PDF ไม่ถูกต้องหรือเสียหาย
 missing_file_error=ไฟล์ PDF หายไป
diff --git a/third-party/pdfjs/web/locale/tl/viewer.properties 
b/third-party/pdfjs/web/locale/tl/viewer.properties
index 0209da154..9b1a15e17 100644
--- a/third-party/pdfjs/web/locale/tl/viewer.properties
+++ b/third-party/pdfjs/web/locale/tl/viewer.properties
@@ -33,14 +33,14 @@ zoom_out_label=Paliitin
 zoom_in.title=Palakihin
 zoom_in_label=Palakihin
 zoom.title=Mag-zoom
-presentation_mode.title=Switch to Presentation Mode
+presentation_mode.title=Lumipat sa Presentation Mode
 presentation_mode_label=Presentation Mode
 open_file.title=Magbukas ng file
 open_file_label=Buksan
 print.title=i-Print
 print_label=i-Print
-download.title=Download
-download_label=Download
+download.title=i-Download
+download_label=i-Download
 bookmark.title=Kasalukuyang tingin (kopyahin o buksan sa bagong window)
 bookmark_label=Kasalukuyang tingin
 
@@ -53,35 +53,35 @@ first_page_label=Pumunta sa Unang Pahina
 last_page.title=Pumunta sa Huling Pahina
 last_page.label=Pumunta sa Huling Pahina
 last_page_label=Pumunta sa Huling Pahina
-page_rotate_cw.title=Paikutin ang Clockwise
-page_rotate_cw.label=Paikutin ang Clockwise
-page_rotate_cw_label=Paikutin ang Clockwise
-page_rotate_ccw.title=Paikutin ang Counterclockwise
-page_rotate_ccw.label=Paikutin ang Counterclockwise
-page_rotate_ccw_label=Paikutin ang Counterclockwise
-
-cursor_text_select_tool.title=Enable Text Selection Tool
+page_rotate_cw.title=Paikutin Pakanan
+page_rotate_cw.label=Paikutin Pakanan
+page_rotate_cw_label=Paikutin Pakanan
+page_rotate_ccw.title=Paikutin Pakaliwa
+page_rotate_ccw.label=Paikutin Pakaliwa
+page_rotate_ccw_label=Paikutin Pakaliwa
+
+cursor_text_select_tool.title=I-enable ang Text Selection Tool
 cursor_text_select_tool_label=Text Selection Tool
-cursor_hand_tool.title=Enable Hand Tool
+cursor_hand_tool.title=I-enable ang Hand Tool
 cursor_hand_tool_label=Hand Tool
 
-scroll_vertical.title=Use Vertical Scrolling
+scroll_vertical.title=Gumamit ng Vertical Scrolling
 scroll_vertical_label=Vertical Scrolling
-scroll_horizontal.title=Use Horizontal Scrolling
+scroll_horizontal.title=Gumamit ng Horizontal Scrolling
 scroll_horizontal_label=Horizontal Scrolling
-scroll_wrapped.title=Use Wrapped Scrolling
+scroll_wrapped.title=Gumamit ng Wrapped Scrolling
 scroll_wrapped_label=Wrapped Scrolling
 
-spread_none.title=Do not join page spreads
+spread_none.title=Huwag pagsamahin ang mga page spread
 spread_none_label=No Spreads
 spread_odd.title=Join page spreads starting with odd-numbered pages
-spread_odd_label=Odd Spreads
-spread_even.title=Join page spreads starting with even-numbered pages
-spread_even_label=Even Spreads
+spread_odd_label=Mga Odd Spread
+spread_even.title=Pagsamahin ang mga page spread na nagsisimula sa mga even-numbered na pahina
+spread_even_label=Mga Even Spread
 
 # Document properties dialog box
-document_properties.title=Document Properties…
-document_properties_label=Document Properties…
+document_properties.title=Mga Katangian ng Dokumento…
+document_properties_label=Mga Katangian ng Dokumento…
 document_properties_file_name=File name:
 document_properties_file_size=File size:
 # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
@@ -91,23 +91,23 @@ document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
 # will be replaced by the PDF file size in megabytes, respectively in bytes.
 document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
 document_properties_title=Pamagat:
-document_properties_author=May Akda:
-document_properties_subject=Subject:
+document_properties_author=May-akda:
+document_properties_subject=Paksa:
 document_properties_keywords=Mga keyword:
-document_properties_creation_date=Creation Date:
-document_properties_modification_date=Modification Date:
+document_properties_creation_date=Petsa ng Pagkakagawa:
+document_properties_modification_date=Petsa ng Pagkakabago:
 # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
 # will be replaced by the creation/modification date, and time, of the PDF file.
 document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Creator:
+document_properties_creator=Tagalikha:
 document_properties_producer=PDF Producer:
 document_properties_version=PDF Version:
-document_properties_page_count=Page Count:
-document_properties_page_size=Page Size:
-document_properties_page_size_unit_inches=in
+document_properties_page_count=Bilang ng Pahina:
+document_properties_page_size=Laki ng Pahina:
+document_properties_page_size_unit_inches=pulgada
 document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=portrait
-document_properties_page_size_orientation_landscape=landscape
+document_properties_page_size_orientation_portrait=patayo
+document_properties_page_size_orientation_landscape=pahiga
 document_properties_page_size_name_a3=A3
 document_properties_page_size_name_a4=A4
 document_properties_page_size_name_letter=Letter
@@ -127,7 +127,7 @@ document_properties_linearized_yes=Oo
 document_properties_linearized_no=Hindi
 document_properties_close=Isara
 
-print_progress_message=Preparing document for printing…
+print_progress_message=Inihahanda ang dokumento para sa pag-print…
 # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
 # a numerical per cent value.
 print_progress_percent={{progress}}%
@@ -136,18 +136,22 @@ print_progress_close=Kanselahin
 # Tooltips and alt text for side panel toolbar buttons
 # (the _label strings are alt text for the buttons, the .title strings are
 # tooltips)
-toggle_sidebar.title=Toggle Sidebar
-toggle_sidebar_notification.title=Toggle Sidebar (document contains outline/attachments)
-toggle_sidebar_label=Toggle Sidebar
-document_outline.title=Show Document Outline (double-click to expand/collapse all items)
-document_outline_label=Document Outline
-attachments.title=Show Attachments
-attachments_label=Attachments
-thumbs.title=Ipakita ang mga Thumbnails
-thumbs_label=Thumbnails
-findbar.title=Find in Document
+toggle_sidebar.title=Ipakita/Itago ang Sidebar
+toggle_sidebar_notification.title=Ipakita/Itago ang Sidebar (nagtataglay ang dokumento ng balangkas/mga 
attachment)
+toggle_sidebar_notification2.title=Ipakita/Itago ang Sidebar (nagtataglay ang dokumento ng balangkas/mga 
attachment/mga layer)
+toggle_sidebar_label=Ipakita/Itago ang Sidebar
+document_outline.title=Ipakita ang Document Outline (mag-double-click para i-expand/collapse ang laman)
+document_outline_label=Balangkas ng Dokumento
+attachments.title=Ipakita ang mga Attachment
+attachments_label=Mga attachment
+layers.title=Ipakita ang mga Layer (mag-double click para mareset ang lahat ng layer sa orihinal na estado)
+layers_label=Mga layer
+thumbs.title=Ipakita ang mga Thumbnail
+thumbs_label=Mga thumbnail
+findbar.title=Hanapin sa Dokumento
 findbar_label=Hanapin
 
+additional_layers=Mga Karagdagang Layer
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas=Pahina {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
@@ -160,43 +164,43 @@ thumb_page_canvas=Thumbnail ng Pahina {{page}}
 
 # Find panel button title and messages
 find_input.title=Hanapin
-find_input.placeholder=Find in document…
+find_input.placeholder=Hanapin sa dokumento…
 find_previous.title=Hanapin ang nakaraang pangyayari ng parirala
-find_previous_label=Nakaraang
+find_previous_label=Nakaraan
 find_next.title=Hanapin ang susunod na pangyayari ng parirala
 find_next_label=Susunod
 find_highlight=I-highlight lahat
-find_match_case_label=Match case
-find_entire_word_label=Whole words
-find_reached_top=Reached top of document, continued from bottom
-find_reached_bottom=Reached end of document, continued from top
+find_match_case_label=Itugma ang case
+find_entire_word_label=Buong salita
+find_reached_top=Naabot na ang tuktok ng dokumento, ipinagpatuloy mula sa ilalim
+find_reached_bottom=Naabot na ang dulo ng dokumento, ipinagpatuloy mula sa tuktok
 # LOCALIZATION NOTE (find_match_count): The supported plural forms are
 # [one|two|few|many|other], with [other] as the default value.
 # "{{current}}" and "{{total}}" will be replaced by a number representing the
 # index of the currently active find result, respectively a number representing
 # the total number of matches in the document.
 find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} of {{total}} match
-find_match_count[two]={{current}} of {{total}} matches
-find_match_count[few]={{current}} of {{total}} matches
-find_match_count[many]={{current}} of {{total}} matches
-find_match_count[other]={{current}} of {{total}} matches
+find_match_count[one]={{current}} ng {{total}} tugma
+find_match_count[two]={{current}} ng {{total}} tugma
+find_match_count[few]={{current}} ng {{total}} tugma
+find_match_count[many]={{current}} ng {{total}} tugma
+find_match_count[other]={{current}} ng {{total}} tugma
 # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
 # [zero|one|two|few|many|other], with [other] as the default value.
 # "{{limit}}" will be replaced by a numerical value.
 find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=More than {{limit}} matches
-find_match_count_limit[one]=More than {{limit}} match
-find_match_count_limit[two]=More than {{limit}} matches
-find_match_count_limit[few]=More than {{limit}} matches
-find_match_count_limit[many]=More than {{limit}} matches
-find_match_count_limit[other]=More than {{limit}} matches
-find_not_found=Hindi nakita ang prasko
+find_match_count_limit[zero]=Higit sa {{limit}} tugma
+find_match_count_limit[one]=Higit sa {{limit}} tugma
+find_match_count_limit[two]=Higit sa {{limit}} tugma
+find_match_count_limit[few]=Higit sa {{limit}} tugma
+find_match_count_limit[many]=Higit sa {{limit}} tugma
+find_match_count_limit[other]=Higit sa {{limit}} tugma
+find_not_found=Hindi natagpuan ang parirala
 
 # Error panel labels
 error_more_info=Karagdagang Impormasyon
 error_less_info=Mas Kaunting Impormasyon
-error_close=Sarado
+error_close=Isara
 # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
 # replaced by the PDF.JS version and build ID.
 error_version_info=PDF.js v{{version}} (build: {{build}})
@@ -210,11 +214,11 @@ error_stack=Stack: {{stack}}
 error_file=File: {{file}}
 # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
 error_line=Linya: {{line}}
-rendering_error=May naganap na pagkakamali habang pagsasalin sa pahina.
+rendering_error=Nagkaproblema habang nirerender ang pahina.
 
 # Predefined zoom values
 page_scale_width=Lapad ng Pahina
-page_scale_fit=ang pahina ay angkop
+page_scale_fit=Pagkasyahin ang Pahina
 page_scale_auto=Automatic Zoom
 page_scale_actual=Totoong sukat
 # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
@@ -222,9 +226,8 @@ page_scale_actual=Totoong sukat
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Error
-loading_error=May maling nangyari habang kinakarga ang PDF.
-invalid_file_error=Di-wasto o masira ang PDF file.
+loading_error=Nagkaproblema habang niloload ang PDF.
+invalid_file_error=Di-wasto o sira ang PDF file.
 missing_file_error=Nawawalang PDF file.
 unexpected_response_error=Hindi inaasahang tugon ng server.
 
@@ -238,10 +241,10 @@ annotation_date_string={{date}}, {{time}}
 # Some common types are e.g.: "Check", "Text", "Comment", "Note"
 text_annotation_type.alt=[{{type}} Annotation]
 password_label=Ipasok ang password upang buksan ang PDF file na ito.
-password_invalid=Invalid password. Please try again.
+password_invalid=Maling password. Subukan uli.
 password_ok=OK
 password_cancel=Kanselahin
 
-printing_not_supported=Warning: Printing is not fully supported by this browser.
-printing_not_ready=Warning: The PDF is not fully loaded for printing.
-web_fonts_disabled=Web fonts are disabled: unable to use embedded PDF fonts.
+printing_not_supported=Babala: Hindi pa ganap na suportado ang pag-print sa browser na ito.
+printing_not_ready=Babala: Hindi ganap na nabuksan ang PDF para sa pag-print.
+web_fonts_disabled=Naka-disable ang mga Web font: hindi kayang gamitin ang mga naka-embed na PDF font.
diff --git a/third-party/pdfjs/web/locale/tr/viewer.properties 
b/third-party/pdfjs/web/locale/tr/viewer.properties
index b189186c2..ed6d8eb49 100644
--- a/third-party/pdfjs/web/locale/tr/viewer.properties
+++ b/third-party/pdfjs/web/locale/tr/viewer.properties
@@ -138,16 +138,22 @@ print_progress_close=İptal
 # tooltips)
 toggle_sidebar.title=Kenar çubuğunu aç/kapat
 toggle_sidebar_notification.title=Kenar çubuğunu aç/kapat (Belge ana hat/ekler içeriyor)
+toggle_sidebar_notification2.title=Kenar çubuğunu aç/kapat (Belge ana hat/ekler/katmanlar içeriyor)
 toggle_sidebar_label=Kenar çubuğunu aç/kapat
 document_outline.title=Belge ana hatlarını göster (Tüm öğeleri genişletmek/daraltmak için çift tıklayın)
 document_outline_label=Belge ana hatları
 attachments.title=Ekleri göster
 attachments_label=Ekler
+layers.title=Katmanları göster (tüm katmanları varsayılan duruma sıfırlamak için çift tıklayın)
+layers_label=Katmanlar
 thumbs.title=Küçük resimleri göster
 thumbs_label=Küçük resimler
+current_outline_item.title=Mevcut ana hat öğesini bul
+current_outline_item_label=Mevcut ana hat öğesi
 findbar.title=Belgede bul
 findbar_label=Bul
 
+additional_layers=Ek katmanlar
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas=Sayfa {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
@@ -222,7 +228,6 @@ page_scale_actual=Gerçek boyut
 page_scale_percent=%{{scale}}
 
 # Loading indicator messages
-loading_error_indicator=Hata
 loading_error=PDF yüklenirken bir hata oluştu.
 invalid_file_error=Geçersiz veya bozulmuş PDF dosyası.
 missing_file_error=PDF dosyası eksik.
diff --git a/third-party/pdfjs/web/locale/trs/viewer.properties 
b/third-party/pdfjs/web/locale/trs/viewer.properties
index 65252f7fe..75e1f2fa0 100644
--- a/third-party/pdfjs/web/locale/trs/viewer.properties
+++ b/third-party/pdfjs/web/locale/trs/viewer.properties
@@ -199,7 +199,6 @@ page_scale_actual=Dàj yàchi akuan' nín
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Nitaj si hua hue'ej
 
 # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
 # replaced by the modification date, and time, of the annotation.
diff --git a/third-party/pdfjs/web/locale/uk/viewer.properties 
b/third-party/pdfjs/web/locale/uk/viewer.properties
index 7b3a69c55..e834e0c25 100644
--- a/third-party/pdfjs/web/locale/uk/viewer.properties
+++ b/third-party/pdfjs/web/locale/uk/viewer.properties
@@ -138,16 +138,22 @@ print_progress_close=Скасувати
 # tooltips)
 toggle_sidebar.title=Бічна панель
 toggle_sidebar_notification.title=Перемкнути бічну панель (документ має вміст/вкладення)
+toggle_sidebar_notification2.title=Перемкнути бічну панель (документ містить ескіз/вкладення/шари)
 toggle_sidebar_label=Перемкнути бічну панель
 document_outline.title=Показати схему документу (подвійний клік для розгортання/згортання елементів)
 document_outline_label=Схема документа
 attachments.title=Показати прикріплення
 attachments_label=Прикріплення
+layers.title=Показати шари (двічі клацніть, щоб скинути всі шари до типового стану)
+layers_label=Шари
 thumbs.title=Показувати ескізи
 thumbs_label=Ескізи
+current_outline_item.title=Знайти поточний елемент змісту
+current_outline_item_label=Поточний елемент змісту
 findbar.title=Знайти в документі
-findbar_label=Пошук
+findbar_label=Знайти
 
+additional_layers=Додаткові шари
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas=Сторінка {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
@@ -222,7 +228,6 @@ page_scale_actual=Дійсний розмір
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Помилка
 loading_error=Під час завантаження PDF сталася помилка.
 invalid_file_error=Недійсний або пошкоджений PDF-файл.
 missing_file_error=Відсутній PDF-файл.
diff --git a/third-party/pdfjs/web/locale/ur/viewer.properties 
b/third-party/pdfjs/web/locale/ur/viewer.properties
index 162ca1475..15f563176 100644
--- a/third-party/pdfjs/web/locale/ur/viewer.properties
+++ b/third-party/pdfjs/web/locale/ur/viewer.properties
@@ -216,7 +216,6 @@ page_scale_actual=اصل سائز
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=نقص
 loading_error=PDF لوڈ کرتے وقت نقص آ گیا۔
 invalid_file_error=ناجائز یا خراب PDF مسل
 missing_file_error=PDF مسل غائب ہے۔
diff --git a/third-party/pdfjs/web/locale/uz/viewer.properties 
b/third-party/pdfjs/web/locale/uz/viewer.properties
index 6ad24319e..000e07719 100644
--- a/third-party/pdfjs/web/locale/uz/viewer.properties
+++ b/third-party/pdfjs/web/locale/uz/viewer.properties
@@ -148,7 +148,6 @@ page_scale_actual=Haqiqiy hajmi
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Xato
 loading_error=PDF yuklanayotganda xato yuz berdi.
 invalid_file_error=Xato yoki buzuq PDF fayli.
 missing_file_error=PDF fayl kerak.
diff --git a/third-party/pdfjs/web/locale/vi/viewer.properties 
b/third-party/pdfjs/web/locale/vi/viewer.properties
index 64ae6e3a2..f0b38fe5d 100644
--- a/third-party/pdfjs/web/locale/vi/viewer.properties
+++ b/third-party/pdfjs/web/locale/vi/viewer.properties
@@ -138,16 +138,22 @@ print_progress_close=Hủy bỏ
 # tooltips)
 toggle_sidebar.title=Bật/Tắt thanh lề
 toggle_sidebar_notification.title=Bật tắt thanh lề (tài liệu bao gồm bản phác thảo/tập tin đính kèm)
+toggle_sidebar_notification2.title=Bật tắt thanh lề (tài liệu bao gồm bản phác thảo/tập tin đính kèm/lớp)
 toggle_sidebar_label=Bật/Tắt thanh lề
 document_outline.title=Hiện tài liệu phác thảo (nhấp đúp vào để mở rộng/thu gọn tất cả các mục)
 document_outline_label=Bản phác tài liệu
 attachments.title=Hiện nội dung đính kèm
 attachments_label=Nội dung đính kèm
+layers.title=Hiển thị các lớp (nhấp đúp để đặt lại tất cả các lớp về trạng thái mặc định)
+layers_label=Lớp
 thumbs.title=Hiển thị ảnh thu nhỏ
 thumbs_label=Ảnh thu nhỏ
+current_outline_item.title=Tìm mục phác thảo hiện tại
+current_outline_item_label=Mục phác thảo hiện tại
 findbar.title=Tìm trong tài liệu
 findbar_label=Tìm
 
+additional_layers=Các lớp bổ sung
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas=Trang {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
@@ -222,7 +228,6 @@ page_scale_actual=Kích thước thực
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Lỗi
 loading_error=Lỗi khi tải tài liệu PDF.
 invalid_file_error=Tập tin PDF hỏng hoặc không hợp lệ.
 missing_file_error=Thiếu tập tin PDF.
diff --git a/third-party/pdfjs/web/locale/wo/viewer.properties 
b/third-party/pdfjs/web/locale/wo/viewer.properties
index 38c7bc184..17b7214a1 100644
--- a/third-party/pdfjs/web/locale/wo/viewer.properties
+++ b/third-party/pdfjs/web/locale/wo/viewer.properties
@@ -109,7 +109,6 @@ page_scale_actual=Dayo bi am
 # numerical scale value.
 
 # Loading indicator messages
-loading_error_indicator=Njumte
 loading_error=Am na njumte ci yebum dencukaay PDF bi.
 invalid_file_error=Dencukaay PDF bi baaxul walla mu sankar.
 
diff --git a/third-party/pdfjs/web/locale/xh/viewer.properties 
b/third-party/pdfjs/web/locale/xh/viewer.properties
index 52cd75e5b..a5c40dbb7 100644
--- a/third-party/pdfjs/web/locale/xh/viewer.properties
+++ b/third-party/pdfjs/web/locale/xh/viewer.properties
@@ -162,7 +162,6 @@ page_scale_actual=Ubungakanani bokwenene
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=Imposiso
 loading_error=Imposiso yenzekile xa kulayishwa i-PDF.
 invalid_file_error=Ifayile ye-PDF engeyiyo okanye eyonakalisiweyo.
 missing_file_error=Ifayile ye-PDF edukileyo.
diff --git a/third-party/pdfjs/web/locale/zh-CN/viewer.properties 
b/third-party/pdfjs/web/locale/zh-CN/viewer.properties
index 214c746f1..f7a43287d 100644
--- a/third-party/pdfjs/web/locale/zh-CN/viewer.properties
+++ b/third-party/pdfjs/web/locale/zh-CN/viewer.properties
@@ -138,16 +138,22 @@ print_progress_close=取消
 # tooltips)
 toggle_sidebar.title=切换侧栏
 toggle_sidebar_notification.title=切换侧栏(文档所含的大纲/附件)
+toggle_sidebar_notification2.title=切换侧栏(文档所含的大纲/附件/图层)
 toggle_sidebar_label=切换侧栏
 document_outline.title=显示文档大纲(双击展开/折叠所有项)
 document_outline_label=文档大纲
 attachments.title=显示附件
 attachments_label=附件
+layers.title=显示图层(双击即可将所有图层重置为默认状态)
+layers_label=图层
 thumbs.title=显示缩略图
 thumbs_label=缩略图
+current_outline_item.title=查找当前大纲项目
+current_outline_item_label=当前大纲项目
 findbar.title=在文档中查找
 findbar_label=查找
 
+additional_layers=其他图层
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas=页码 {{page}}
 # Thumbnails panel item (tooltip and alt text for images)
@@ -222,7 +228,6 @@ page_scale_actual=实际大小
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=错误
 loading_error=载入 PDF 时发生错误。
 invalid_file_error=无效或损坏的 PDF 文件。
 missing_file_error=缺少 PDF 文件。
diff --git a/third-party/pdfjs/web/locale/zh-TW/viewer.properties 
b/third-party/pdfjs/web/locale/zh-TW/viewer.properties
index 55626cabd..8116cd6f8 100644
--- a/third-party/pdfjs/web/locale/zh-TW/viewer.properties
+++ b/third-party/pdfjs/web/locale/zh-TW/viewer.properties
@@ -41,7 +41,7 @@ print.title=列印
 print_label=列印
 download.title=下載
 download_label=下載
-bookmark.title=目前檢視的內容(複製或開啟於新視窗)
+bookmark.title=目前畫面(複製或開啟於新視窗)
 bookmark_label=目前檢視
 
 # Secondary toolbar and context menu
@@ -138,16 +138,22 @@ print_progress_close=取消
 # tooltips)
 toggle_sidebar.title=切換側邊欄
 toggle_sidebar_notification.title=切換側邊攔(文件包含大綱或附件)
+toggle_sidebar_notification2.title=切換側邊欄(包含大綱、附件、圖層的文件)
 toggle_sidebar_label=切換側邊欄
 document_outline.title=顯示文件大綱(雙擊展開/摺疊所有項目)
 document_outline_label=文件大綱
 attachments.title=顯示附件
 attachments_label=附件
+layers.title=顯示圖層(滑鼠雙擊即可將所有圖層重設為預設狀態)
+layers_label=圖層
 thumbs.title=顯示縮圖
 thumbs_label=縮圖
+current_outline_item.title=尋找目前的大綱項目
+current_outline_item_label=目前的大綱項目
 findbar.title=在文件中尋找
 findbar_label=尋找
 
+additional_layers=其他圖層
 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
 page_canvas=第 {{page}} 頁
 # Thumbnails panel item (tooltip and alt text for images)
@@ -222,7 +228,6 @@ page_scale_actual=實際大小
 page_scale_percent={{scale}}%
 
 # Loading indicator messages
-loading_error_indicator=錯誤
 loading_error=載入 PDF 時發生錯誤。
 invalid_file_error=無效或毀損的 PDF 檔案。
 missing_file_error=找不到 PDF 檔案。
diff --git a/third-party/pdfjs/web/viewer.css b/third-party/pdfjs/web/viewer.css
index 21af9931d..9616f67cd 100644
--- a/third-party/pdfjs/web/viewer.css
+++ b/third-party/pdfjs/web/viewer.css
@@ -1,5 +1,4 @@
 /* Copyright 2014 Mozilla Foundation
- * Modifications made for Epiphany by Jan-Michael Brummer <jan brummer tabos org>
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -41,15 +40,15 @@
 }
 
 .textLayer .highlight.begin {
-  border-radius: 4px 0px 0px 4px;
+  border-radius: 4px 0 0 4px;
 }
 
 .textLayer .highlight.end {
-  border-radius: 0px 4px 4px 0px;
+  border-radius: 0 4px 4px 0;
 }
 
 .textLayer .highlight.middle {
-  border-radius: 0px;
+  border-radius: 0;
 }
 
 .textLayer .highlight.selected {
@@ -67,25 +66,25 @@
 .textLayer .endOfContent {
   display: block;
   position: absolute;
-  left: 0px;
+  left: 0;
   top: 100%;
-  right: 0px;
-  bottom: 0px;
+  right: 0;
+  bottom: 0;
   z-index: -1;
   cursor: default;
   -webkit-user-select: none;
      -moz-user-select: none;
-      -ms-user-select: none;
           user-select: none;
 }
 
 .textLayer .endOfContent.active {
-  top: 0px;
+  top: 0;
 }
 
 
 .annotationLayer section {
   position: absolute;
+  text-align: initial;
 }
 
 .annotationLayer .linkAnnotation > a,
@@ -102,7 +101,7 @@
 .annotationLayer .buttonWidgetAnnotation.pushButton > a:hover {
   opacity: 0.2;
   background: rgba(255, 255, 0, 1);
-  box-shadow: 0px 2px 10px rgba(255, 255, 0, 1);
+  box-shadow: 0 2px 10px rgba(255, 255, 0, 1);
 }
 
 .annotationLayer .textAnnotation img {
@@ -231,13 +230,14 @@
   z-index: 200;
   max-width: 20em;
   background-color: rgba(255, 255, 153, 1);
-  box-shadow: 0px 2px 5px rgba(136, 136, 136, 1);
+  box-shadow: 0 2px 5px rgba(136, 136, 136, 1);
   border-radius: 2px;
   padding: 6px;
   margin-left: 5px;
   cursor: pointer;
   font: message-box;
   font-size: 9px;
+  white-space: normal;
   word-wrap: break-word;
 }
 
@@ -277,6 +277,184 @@
   cursor: pointer;
 }
 
+*/* Copyright 2021 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.
+ */
+
+.xfaLayer {
+  position: absolute;
+  top: 0;
+  left: 0;
+  z-index: 200;
+  transform-origin: 0 0;
+}
+
+.xfaLayer * {
+  color: inherit;
+  font: inherit;
+  -webkit-font-kerning: inherit;
+          font-kerning: inherit;
+  letter-spacing: inherit;
+  text-align: inherit;
+  text-decoration: inherit;
+  vertical-align: inherit;
+  box-sizing: border-box;
+}
+
+.xfaFont {
+  color: black;
+  font-weight: normal;
+  -webkit-font-kerning: none;
+          font-kerning: none;
+  font-size: 10px;
+  font-style: normal;
+  letter-spacing: 0;
+  text-decoration: none;
+  vertical-align: 0;
+}
+
+.xfaDraw {
+  z-index: 200;
+}
+
+.xfaExclgroup {
+  z-index: 300;
+}
+
+.xfaField {
+  z-index: 300;
+}
+
+.xfaSubform {
+  z-index: 100;
+}
+
+.xfaLabel {
+  display: flex;
+  flex-direction: row;
+  align-items: center;
+  width: 100%;
+  height: 100%;
+}
+
+.xfaCaption {
+  flex: 1 1 auto;
+}
+
+.xfaTextfield,
+.xfaSelect {
+  width: 100%;
+  height: 100%;
+  flex: 1 1 auto;
+  border: none;
+}
+
+.xfaLabel > input[type="checkbox"] {
+  /* Use this trick to make the checkbox invisible but
+       but still focusable. */
+  position: absolute;
+  left: -99999px;
+}
+
+.xfaLabel > input[type="checkbox"]:focus + .xfaCheckboxMark {
+  box-shadow: 0 0 5px rgba(0, 0, 0, 0.7);
+}
+
+.xfaCheckboxMark {
+  cursor: pointer;
+  flex: 0 0 auto;
+  border-style: solid;
+  border-width: 2px;
+  border-color: #8f8f9d;
+  font-size: 10px;
+  line-height: 10px;
+  width: 10px;
+  height: 10px;
+  text-align: center;
+  vertical-align: middle;
+  display: flex;
+  flex-direction: row;
+  align-items: center;
+}
+
+.xfaCheckbox:checked + .xfaCheckboxMark::after {
+  content: attr(mark);
+}
+
+.xfaButton {
+  cursor: pointer;
+  width: 100%;
+  height: 100%;
+  border: none;
+  text-align: center;
+}
+
+.xfaButton:hover {
+  background: Highlight;
+}
+
+.xfaLrTb,
+.xfaRlTb,
+.xfaTb,
+.xfaPosition {
+  display: block;
+}
+
+.xfaPosition {
+  position: relative;
+}
+
+.xfaValignMiddle {
+  display: flex;
+  align-items: center;
+}
+
+.xfaLrTb > div {
+  display: inline;
+  float: left;
+}
+
+.xfaRlTb > div {
+  display: inline;
+  float: right;
+}
+
+.xfaTable {
+  display: flex;
+  flex-direction: column;
+}
+
+.xfaTable .xfaRow {
+  display: flex;
+  flex-direction: row;
+  flex: 1 1 auto;
+}
+
+.xfaTable .xfaRow > div {
+  flex: 1 1 auto;
+}
+
+.xfaTable .xfaRlRow {
+  display: flex;
+  flex-direction: row-reverse;
+  flex: 1;
+}
+
+.xfaTable .xfaRlRow > div {
+  flex: 1;
+}
+
 .pdfViewer .canvasWrapper {
   overflow: hidden;
 }
@@ -285,7 +463,7 @@
   direction: ltr;
   width: 816px;
   height: 1056px;
-  margin: 1px auto -8px auto;
+  margin: 1px auto -8px;
   position: relative;
   overflow: visible;
   border: 9px solid transparent;
@@ -296,7 +474,7 @@
 }
 
 .pdfViewer.removePageBorders .page {
-  margin: 0px auto 10px auto;
+  margin: 0 auto 10px;
   border: none;
 }
 
@@ -387,10 +565,6 @@
   margin-right: auto;
 }
 
-.pdfPresentationMode:-ms-fullscreen .pdfViewer .page {
-  margin-bottom: 100% !important;
-}
-
 .pdfPresentationMode:-webkit-full-screen .pdfViewer .page {
   margin-bottom: 100%;
   border: 0;
@@ -410,6 +584,7 @@
   --sidebar-width: 200px;
   --sidebar-transition-duration: 200ms;
   --sidebar-transition-timing-function: ease;
+  --loadingBar-end-offset: 0;
 
   --toolbar-icon-opacity: 0.7;
   --doorhanger-icon-opacity: 0.9;
@@ -422,22 +597,25 @@
   --progressBar-indeterminate-blend-color: rgba(116, 177, 239, 1);
   --scrollbar-color: auto;
   --scrollbar-bg-color: auto;
+  --toolbar-icon-bg-color: rgba(0, 0, 0, 1);
 
-  --sidebar-bg-color: rgba(245, 246, 247, 1);
+  --sidebar-narrow-bg-color: rgba(237, 237, 240, 0.9);
+  --sidebar-toolbar-bg-color: rgba(245, 246, 247, 1);
   --toolbar-bg-color: rgba(249, 249, 250, 1);
   --toolbar-border-color: rgba(204, 204, 204, 1);
   --button-hover-color: rgba(221, 222, 223, 1);
   --toggled-btn-bg-color: rgba(0, 0, 0, 0.3);
+  --toggled-hover-active-btn-color: rgba(0, 0, 0, 0.4);
   --dropdown-btn-bg-color: rgba(215, 215, 219, 1);
   --separator-color: rgba(0, 0, 0, 0.3);
   --field-color: rgba(6, 6, 6, 1);
   --field-bg-color: rgba(255, 255, 255, 1);
   --field-border-color: rgba(187, 187, 188, 1);
   --findbar-nextprevious-btn-bg-color: rgba(227, 228, 230, 1);
-  --outline-color: rgba(0, 0, 0, 0.8);
-  --outline-hover-color: rgba(0, 0, 0, 0.9);
-  --outline-active-color: rgba(0, 0, 0, 0.08);
-  --outline-active-bg-color: rgba(0, 0, 0, 1);
+  --treeitem-color: rgba(0, 0, 0, 0.8);
+  --treeitem-hover-color: rgba(0, 0, 0, 0.9);
+  --treeitem-selected-color: rgba(0, 0, 0, 0.9);
+  --treeitem-selected-bg-color: rgba(0, 0, 0, 0.25);
   --sidebaritem-bg-color: rgba(0, 0, 0, 0.15);
   --doorhanger-bg-color: rgba(255, 255, 255, 1);
   --doorhanger-border-color: rgba(12, 12, 13, 0.2);
@@ -465,6 +643,7 @@
   --toolbarButton-viewOutline-icon: url(images/toolbarButton-viewOutline.svg);
   --toolbarButton-viewAttachments-icon: url(images/toolbarButton-viewAttachments.svg);
   --toolbarButton-viewLayers-icon: url(images/toolbarButton-viewLayers.svg);
+  --toolbarButton-currentOutlineItem-icon: url(images/toolbarButton-currentOutlineItem.svg);
   --toolbarButton-search-icon: url(images/toolbarButton-search.svg);
   --findbarButton-previous-icon: url(images/findbarButton-previous.svg);
   --findbarButton-next-icon: url(images/findbarButton-next.svg);
@@ -493,22 +672,25 @@
     --progressBar-indeterminate-blend-color: rgba(20, 68, 133, 1);
     --scrollbar-color: rgba(121, 121, 123, 1);
     --scrollbar-bg-color: rgba(35, 35, 39, 1);
+    --toolbar-icon-bg-color: rgba(255, 255, 255, 1);
 
-    --sidebar-bg-color: rgba(50, 50, 52, 1);
+    --sidebar-narrow-bg-color: rgba(42, 42, 46, 0.9);
+    --sidebar-toolbar-bg-color: rgba(50, 50, 52, 1);
     --toolbar-bg-color: rgba(56, 56, 61, 1);
     --toolbar-border-color: rgba(12, 12, 13, 1);
     --button-hover-color: rgba(102, 102, 103, 1);
     --toggled-btn-bg-color: rgba(0, 0, 0, 0.3);
+    --toggled-hover-active-btn-color: rgba(0, 0, 0, 0.4);
     --dropdown-btn-bg-color: rgba(74, 74, 79, 1);
     --separator-color: rgba(0, 0, 0, 0.3);
     --field-color: rgba(250, 250, 250, 1);
     --field-bg-color: rgba(64, 64, 68, 1);
     --field-border-color: rgba(115, 115, 115, 1);
     --findbar-nextprevious-btn-bg-color: rgba(89, 89, 89, 1);
-    --outline-color: rgba(255, 255, 255, 0.8);
-    --outline-hover-color: rgba(255, 255, 255, 0.9);
-    --outline-active-color: rgba(255, 255, 255, 0.08);
-    --outline-active-bg-color: rgba(255, 255, 255, 1);
+    --treeitem-color: rgba(255, 255, 255, 0.8);
+    --treeitem-hover-color: rgba(255, 255, 255, 0.9);
+    --treeitem-selected-color: rgba(255, 255, 255, 0.9);
+    --treeitem-selected-bg-color: rgba(255, 255, 255, 0.25);
     --sidebaritem-bg-color: rgba(255, 255, 255, 0.15);
     --doorhanger-bg-color: rgba(74, 74, 79, 1);
     --doorhanger-border-color: rgba(39, 39, 43, 1);
@@ -517,41 +699,10 @@
     --overlay-button-bg-color: rgba(92, 92, 97, 1);
     --overlay-button-hover-color: rgba(115, 115, 115, 1);
 
+    /* This image is used in <input> elements, which unfortunately means that
+     * the `mask-image` approach used with all of the other images doesn't work
+     * here; hence why we still have two versions of this particular image. */
     --loading-icon: url(images/loading-dark.svg);
-    --treeitem-expanded-icon: url(images/treeitem-expanded-dark.svg);
-    --treeitem-collapsed-icon: url(images/treeitem-collapsed-dark.svg);
-    --toolbarButton-menuArrow-icon: url(images/toolbarButton-menuArrow-dark.svg);
-    --toolbarButton-sidebarToggle-icon: url(images/toolbarButton-sidebarToggle-dark.svg);
-    --toolbarButton-secondaryToolbarToggle-icon: url(images/toolbarButton-secondaryToolbarToggle-dark.svg);
-    --toolbarButton-pageUp-icon: url(images/toolbarButton-pageUp-dark.svg);
-    --toolbarButton-pageDown-icon: url(images/toolbarButton-pageDown-dark.svg);
-    --toolbarButton-zoomOut-icon: url(images/toolbarButton-zoomOut-dark.svg);
-    --toolbarButton-zoomIn-icon: url(images/toolbarButton-zoomIn-dark.svg);
-    --toolbarButton-presentationMode-icon: url(images/toolbarButton-presentationMode-dark.svg);
-    --toolbarButton-print-icon: url(images/toolbarButton-print-dark.svg);
-    --toolbarButton-openFile-icon: url(images/toolbarButton-openFile-dark.svg);
-    --toolbarButton-download-icon: url(images/toolbarButton-download-dark.svg);
-    --toolbarButton-bookmark-icon: url(images/toolbarButton-bookmark-dark.svg);
-    --toolbarButton-viewThumbnail-icon: url(images/toolbarButton-viewThumbnail-dark.svg);
-    --toolbarButton-viewOutline-icon: url(images/toolbarButton-viewOutline-dark.svg);
-    --toolbarButton-viewAttachments-icon: url(images/toolbarButton-viewAttachments-dark.svg);
-    --toolbarButton-viewLayers-icon: url(images/toolbarButton-viewLayers-dark.svg);
-    --toolbarButton-search-icon: url(images/toolbarButton-search-dark.svg);
-    --findbarButton-previous-icon: url(images/findbarButton-previous-dark.svg);
-    --findbarButton-next-icon: url(images/findbarButton-next-dark.svg);
-    --secondaryToolbarButton-firstPage-icon: url(images/secondaryToolbarButton-firstPage-dark.svg);
-    --secondaryToolbarButton-lastPage-icon: url(images/secondaryToolbarButton-lastPage-dark.svg);
-    --secondaryToolbarButton-rotateCcw-icon: url(images/secondaryToolbarButton-rotateCcw-dark.svg);
-    --secondaryToolbarButton-rotateCw-icon: url(images/secondaryToolbarButton-rotateCw-dark.svg);
-    --secondaryToolbarButton-selectTool-icon: url(images/secondaryToolbarButton-selectTool-dark.svg);
-    --secondaryToolbarButton-handTool-icon: url(images/secondaryToolbarButton-handTool-dark.svg);
-    --secondaryToolbarButton-scrollVertical-icon: url(images/secondaryToolbarButton-scrollVertical-dark.svg);
-    --secondaryToolbarButton-scrollHorizontal-icon: 
url(images/secondaryToolbarButton-scrollHorizontal-dark.svg);
-    --secondaryToolbarButton-scrollWrapped-icon: url(images/secondaryToolbarButton-scrollWrapped-dark.svg);
-    --secondaryToolbarButton-spreadNone-icon: url(images/secondaryToolbarButton-spreadNone-dark.svg);
-    --secondaryToolbarButton-spreadOdd-icon: url(images/secondaryToolbarButton-spreadOdd-dark.svg);
-    --secondaryToolbarButton-spreadEven-icon: url(images/secondaryToolbarButton-spreadEven-dark.svg);
-    --secondaryToolbarButton-documentProperties-icon: 
url(images/secondaryToolbarButton-documentProperties-dark.svg);
   }
 }
 
@@ -570,172 +721,16 @@ html {
 body {
   height: 100%;
   width: 100%;
-  background-color: rgba(237, 237, 240, 1);
-  background-color: var(--body-bg-color);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  body {
-  background-color: rgba(42, 42, 46, 1);
   background-color: var(--body-bg-color);
-  }
-}
-
-body {
-  font: message-box;
-  outline: none;
-  scrollbar-color: auto auto;
-  scrollbar-color: var(--scrollbar-color) var(--scrollbar-bg-color);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  body {
-  scrollbar-color: rgba(121, 121, 123, 1) rgba(35, 35, 39, 1);
-  scrollbar-color: var(--scrollbar-color) var(--scrollbar-bg-color);
-  }
-}
-
-@media (prefers-color-scheme: dark) {
-
-  body {
-  scrollbar-color: rgba(121, 121, 123, 1) rgba(35, 35, 39, 1);
-  scrollbar-color: var(--scrollbar-color) var(--scrollbar-bg-color);
-  }
-}
-
-@media (prefers-color-scheme: dark) {
-
-  body {
-  scrollbar-color: rgba(121, 121, 123, 1) rgba(35, 35, 39, 1);
-  scrollbar-color: var(--scrollbar-color) var(--scrollbar-bg-color);
-  }
-}
-
-@media (prefers-color-scheme: dark) {
-
-  body {
-  scrollbar-color: rgba(121, 121, 123, 1) rgba(35, 35, 39, 1);
-  scrollbar-color: var(--scrollbar-color) var(--scrollbar-bg-color);
-  }
-}
-
-input {
-  font: message-box;
-  outline: none;
-  scrollbar-color: auto auto;
-  scrollbar-color: var(--scrollbar-color) var(--scrollbar-bg-color);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  input {
-  scrollbar-color: rgba(121, 121, 123, 1) rgba(35, 35, 39, 1);
-  scrollbar-color: var(--scrollbar-color) var(--scrollbar-bg-color);
-  }
-}
-
-@media (prefers-color-scheme: dark) {
-
-  input {
-  scrollbar-color: rgba(121, 121, 123, 1) rgba(35, 35, 39, 1);
-  scrollbar-color: var(--scrollbar-color) var(--scrollbar-bg-color);
-  }
-}
-
-@media (prefers-color-scheme: dark) {
-
-  input {
-  scrollbar-color: rgba(121, 121, 123, 1) rgba(35, 35, 39, 1);
-  scrollbar-color: var(--scrollbar-color) var(--scrollbar-bg-color);
-  }
-}
-
-@media (prefers-color-scheme: dark) {
-
-  input {
-  scrollbar-color: rgba(121, 121, 123, 1) rgba(35, 35, 39, 1);
-  scrollbar-color: var(--scrollbar-color) var(--scrollbar-bg-color);
-  }
-}
-
-button {
-  font: message-box;
-  outline: none;
-  scrollbar-color: auto auto;
-  scrollbar-color: var(--scrollbar-color) var(--scrollbar-bg-color);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  button {
-  scrollbar-color: rgba(121, 121, 123, 1) rgba(35, 35, 39, 1);
-  scrollbar-color: var(--scrollbar-color) var(--scrollbar-bg-color);
-  }
-}
-
-@media (prefers-color-scheme: dark) {
-
-  button {
-  scrollbar-color: rgba(121, 121, 123, 1) rgba(35, 35, 39, 1);
-  scrollbar-color: var(--scrollbar-color) var(--scrollbar-bg-color);
-  }
-}
-
-@media (prefers-color-scheme: dark) {
-
-  button {
-  scrollbar-color: rgba(121, 121, 123, 1) rgba(35, 35, 39, 1);
-  scrollbar-color: var(--scrollbar-color) var(--scrollbar-bg-color);
-  }
-}
-
-@media (prefers-color-scheme: dark) {
-
-  button {
-  scrollbar-color: rgba(121, 121, 123, 1) rgba(35, 35, 39, 1);
-  scrollbar-color: var(--scrollbar-color) var(--scrollbar-bg-color);
-  }
 }
 
+body,
+input,
+button,
 select {
   font: message-box;
   outline: none;
-  scrollbar-color: auto auto;
-  scrollbar-color: var(--scrollbar-color) var(--scrollbar-bg-color);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  select {
-  scrollbar-color: rgba(121, 121, 123, 1) rgba(35, 35, 39, 1);
-  scrollbar-color: var(--scrollbar-color) var(--scrollbar-bg-color);
-  }
-}
-
-@media (prefers-color-scheme: dark) {
-
-  select {
-  scrollbar-color: rgba(121, 121, 123, 1) rgba(35, 35, 39, 1);
-  scrollbar-color: var(--scrollbar-color) var(--scrollbar-bg-color);
-  }
-}
-
-@media (prefers-color-scheme: dark) {
-
-  select {
-  scrollbar-color: rgba(121, 121, 123, 1) rgba(35, 35, 39, 1);
-  scrollbar-color: var(--scrollbar-color) var(--scrollbar-bg-color);
-  }
-}
-
-@media (prefers-color-scheme: dark) {
-
-  select {
-  scrollbar-color: rgba(121, 121, 123, 1) rgba(35, 35, 39, 1);
   scrollbar-color: var(--scrollbar-color) var(--scrollbar-bg-color);
-  }
 }
 
 .hidden {
@@ -748,22 +743,12 @@ select {
 .pdfViewer.enablePermissions .textLayer > span {
   -webkit-user-select: none !important;
      -moz-user-select: none !important;
-      -ms-user-select: none !important;
           user-select: none !important;
   cursor: not-allowed;
 }
 
-#viewerContainer.pdfPresentationMode:-ms-fullscreen {
-  top: 0px !important;
-  overflow: hidden !important;
-}
-
-#viewerContainer.pdfPresentationMode:-ms-fullscreen::-ms-backdrop {
-  background-color: rgba(0, 0, 0, 1);
-}
-
 #viewerContainer.pdfPresentationMode:-webkit-full-screen {
-  top: 0px;
+  top: 0;
   border-top: 2px solid rgba(0, 0, 0, 0);
   background-color: rgba(0, 0, 0, 1);
   width: 100%;
@@ -775,7 +760,7 @@ select {
 }
 
 #viewerContainer.pdfPresentationMode:-moz-full-screen {
-  top: 0px;
+  top: 0;
   border-top: 2px solid rgba(0, 0, 0, 0);
   background-color: rgba(0, 0, 0, 1);
   width: 100%;
@@ -786,20 +771,8 @@ select {
        user-select: none;
 }
 
-#viewerContainer.pdfPresentationMode:-ms-fullscreen {
-  top: 0px;
-  border-top: 2px solid rgba(0, 0, 0, 0);
-  background-color: rgba(0, 0, 0, 1);
-  width: 100%;
-  height: 100%;
-  overflow: hidden;
-  cursor: none;
-  -ms-user-select: none;
-      user-select: none;
-}
-
 #viewerContainer.pdfPresentationMode:fullscreen {
-  top: 0px;
+  top: 0;
   border-top: 2px solid rgba(0, 0, 0, 0);
   background-color: rgba(0, 0, 0, 1);
   width: 100%;
@@ -808,7 +781,6 @@ select {
   cursor: none;
   -webkit-user-select: none;
      -moz-user-select: none;
-      -ms-user-select: none;
           user-select: none;
 }
 
@@ -820,10 +792,6 @@ select {
   display: none;
 }
 
-.pdfPresentationMode:-ms-fullscreen a:not(.internalLink) {
-  display: none;
-}
-
 .pdfPresentationMode:fullscreen a:not(.internalLink) {
   display: none;
 }
@@ -836,10 +804,6 @@ select {
   cursor: none;
 }
 
-.pdfPresentationMode:-ms-fullscreen .textLayer > span {
-  cursor: none;
-}
-
 .pdfPresentationMode:fullscreen .textLayer > span {
   cursor: none;
 }
@@ -859,38 +823,28 @@ select {
   position: absolute;
   top: 32px;
   bottom: 0;
-  width: 200px;
   width: var(--sidebar-width);
   visibility: hidden;
   z-index: 100;
   border-top: 1px solid rgba(51, 51, 51, 1);
-  transition-duration: 200ms;
   transition-duration: var(--sidebar-transition-duration);
-  transition-timing-function: ease;
   transition-timing-function: var(--sidebar-transition-timing-function);
 }
 html[dir="ltr"] #sidebarContainer {
   transition-property: left;
-  left: -200px;
   left: calc(0px - var(--sidebar-width));
 }
 html[dir="rtl"] #sidebarContainer {
   transition-property: right;
-  right: -200px;
   right: calc(0px - var(--sidebar-width));
 }
 
-.loadingInProgress #sidebarContainer {
-  top: 36px;
-}
-
 #outerContainer.sidebarResizing #sidebarContainer {
   /* Improve responsiveness and avoid visual glitches when the sidebar is resized. */
   transition-duration: 0s;
   /* Prevent e.g. the thumbnails being selected when the sidebar is resized. */
   -webkit-user-select: none;
      -moz-user-select: none;
-      -ms-user-select: none;
           user-select: none;
 }
 
@@ -899,10 +853,10 @@ html[dir="rtl"] #sidebarContainer {
   visibility: visible;
 }
 html[dir="ltr"] #outerContainer.sidebarOpen #sidebarContainer {
-  left: 0px;
+  left: 0;
 }
 html[dir="rtl"] #outerContainer.sidebarOpen #sidebarContainer {
-  right: 0px;
+  right: 0;
 }
 
 #mainContainer {
@@ -943,9 +897,7 @@ html[dir="rtl"] #sidebarContent {
   outline: none;
 }
 #viewerContainer:not(.pdfPresentationMode) {
-  transition-duration: 200ms;
   transition-duration: var(--sidebar-transition-duration);
-  transition-timing-function: ease;
   transition-timing-function: var(--sidebar-transition-timing-function);
 }
 
@@ -958,14 +910,12 @@ html[dir="ltr"]
   #outerContainer.sidebarOpen
   #viewerContainer:not(.pdfPresentationMode) {
   transition-property: left;
-  left: 200px;
   left: var(--sidebar-width);
 }
 html[dir="rtl"]
   #outerContainer.sidebarOpen
   #viewerContainer:not(.pdfPresentationMode) {
   transition-property: right;
-  right: 200px;
   right: var(--sidebar-width);
 }
 
@@ -984,16 +934,7 @@ html[dir="rtl"]
 #toolbarSidebar {
   width: 100%;
   height: 32px;
-  background-color: rgba(245, 246, 247, 1);
-  background-color: var(--sidebar-bg-color);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  #toolbarSidebar {
-  background-color: rgba(50, 50, 52, 1);
-  background-color: var(--sidebar-bg-color);
-  }
+  background-color: var(--sidebar-toolbar-bg-color);
 }
 html[dir="ltr"] #toolbarSidebar {
   box-shadow: inset -1px 0 0 rgba(0, 0, 0, 0.25), 0 1px 0 rgba(0, 0, 0, 0.15),
@@ -1011,6 +952,13 @@ html[dir="rtl"] #toolbarSidebar .toolbarButton {
   margin-left: 2px !important;
 }
 
+html[dir="ltr"] #toolbarSidebarRight .toolbarButton {
+  margin-right: 3px !important;
+}
+html[dir="rtl"] #toolbarSidebarRight .toolbarButton {
+  margin-left: 3px !important;
+}
+
 #sidebarResizer {
   position: absolute;
   top: 0;
@@ -1026,145 +974,49 @@ html[dir="rtl"] #sidebarResizer {
   left: -6px;
 }
 
-#toolbarContainer {
-  position: relative;
-  height: 32px;
-  background-color: rgba(249, 249, 250, 1);
-  background-color: var(--toolbar-bg-color);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  #toolbarContainer {
-  background-color: rgba(56, 56, 61, 1);
-  background-color: var(--toolbar-bg-color);
-  }
-}
-
-.findbar {
-  position: relative;
-  height: 32px;
-  background-color: rgba(249, 249, 250, 1);
-  background-color: var(--toolbar-bg-color);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .findbar {
-  background-color: rgba(56, 56, 61, 1);
-  background-color: var(--toolbar-bg-color);
-  }
-}
-
+#toolbarContainer,
+.findbar,
 .secondaryToolbar {
   position: relative;
   height: 32px;
-  background-color: rgba(249, 249, 250, 1);
-  background-color: var(--toolbar-bg-color);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .secondaryToolbar {
-  background-color: rgba(56, 56, 61, 1);
   background-color: var(--toolbar-bg-color);
-  }
-}
-html[dir="ltr"] #toolbarContainer {
-  box-shadow: 0 1px 0 rgba(204, 204, 204, 1);
-  box-shadow: 0 1px 0 var(--toolbar-border-color);
-}
-@media (prefers-color-scheme: dark) {
-
-  html[dir="ltr"] #toolbarContainer {
-  box-shadow: 0 1px 0 rgba(12, 12, 13, 1);
-  box-shadow: 0 1px 0 var(--toolbar-border-color);
-  }
-}
-.findbar {
-  box-shadow: 0 1px 0 rgba(204, 204, 204, 1);
-  box-shadow: 0 1px 0 var(--toolbar-border-color);
-}
-@media (prefers-color-scheme: dark) {
-
-  .findbar {
-  box-shadow: 0 1px 0 rgba(12, 12, 13, 1);
-  box-shadow: 0 1px 0 var(--toolbar-border-color);
-  }
-}
-.secondaryToolbar {
-  box-shadow: 0 1px 0 rgba(204, 204, 204, 1);
   box-shadow: 0 1px 0 var(--toolbar-border-color);
 }
-@media (prefers-color-scheme: dark) {
-
-  .secondaryToolbar {
-  box-shadow: 0 1px 0 rgba(12, 12, 13, 1);
-  box-shadow: 0 1px 0 var(--toolbar-border-color);
-  }
-}
-html[dir="rtl"] #toolbarContainer {
-  box-shadow: 0 1px 0 rgba(204, 204, 204, 1);
-  box-shadow: 0 1px 0 var(--toolbar-border-color);
-}
-@media (prefers-color-scheme: dark) {
-
-  html[dir="rtl"] #toolbarContainer {
-  box-shadow: 0 1px 0 rgba(12, 12, 13, 1);
-  box-shadow: 0 1px 0 var(--toolbar-border-color);
-  }
-}
-.findbar {
-  box-shadow: 0 1px 0 rgba(204, 204, 204, 1);
-  box-shadow: 0 1px 0 var(--toolbar-border-color);
-}
-@media (prefers-color-scheme: dark) {
-
-  .findbar {
-  box-shadow: 0 1px 0 rgba(12, 12, 13, 1);
-  box-shadow: 0 1px 0 var(--toolbar-border-color);
-  }
-}
-.secondaryToolbar {
-  box-shadow: 0 1px 0 rgba(204, 204, 204, 1);
-  box-shadow: 0 1px 0 var(--toolbar-border-color);
-}
-@media (prefers-color-scheme: dark) {
-
-  .secondaryToolbar {
-  box-shadow: 0 1px 0 rgba(12, 12, 13, 1);
-  box-shadow: 0 1px 0 var(--toolbar-border-color);
-  }
-}
 
 #toolbarViewer {
   height: 32px;
 }
 
 #loadingBar {
-  position: relative;
-  width: 100%;
+  position: absolute;
   height: 4px;
-  background-color: rgba(237, 237, 240, 1);
   background-color: var(--body-bg-color);
-  border-bottom: 1px solid rgba(204, 204, 204, 1);
   border-bottom: 1px solid var(--toolbar-border-color);
-}
-
-@media (prefers-color-scheme: dark) {
 
-  #loadingBar {
-  border-bottom: 1px solid rgba(12, 12, 13, 1);
-  border-bottom: 1px solid var(--toolbar-border-color);
-  }
+  transition-duration: var(--sidebar-transition-duration);
+  transition-timing-function: var(--sidebar-transition-timing-function);
+}
+html[dir="ltr"] #loadingBar {
+  transition-property: left;
+  left: 0;
+  right: var(--loadingBar-end-offset);
+}
+html[dir="rtl"] #loadingBar {
+  transition-property: right;
+  left: var(--loadingBar-end-offset);
+  right: 0;
 }
 
-@media (prefers-color-scheme: dark) {
+html[dir="ltr"] #outerContainer.sidebarOpen #loadingBar {
+  left: var(--sidebar-width);
+}
+html[dir="rtl"] #outerContainer.sidebarOpen #loadingBar {
+  right: var(--sidebar-width);
+}
 
-  #loadingBar {
-  background-color: rgba(42, 42, 46, 1);
-  background-color: var(--body-bg-color);
-  }
+#outerContainer.sidebarResizing #loadingBar {
+  /* Improve responsiveness and avoid visual glitches when the sidebar is resized. */
+  transition-duration: 0s;
 }
 
 #loadingBar .progress {
@@ -1173,20 +1025,11 @@ html[dir="rtl"] #toolbarContainer {
   left: 0;
   width: 0%;
   height: 100%;
-  background-color: rgba(10, 132, 255, 1);
   background-color: var(--progressBar-color);
   overflow: hidden;
   transition: width 200ms;
 }
 
-@media (prefers-color-scheme: dark) {
-
-  #loadingBar .progress {
-  background-color: rgba(0, 96, 223, 1);
-  background-color: var(--progressBar-color);
-  }
-}
-
 @-webkit-keyframes progressIndeterminate {
   0% {
     left: -142px;
@@ -1206,34 +1049,16 @@ html[dir="rtl"] #toolbarContainer {
 }
 
 #loadingBar .progress.indeterminate {
-  background-color: rgba(221, 221, 222, 1);
   background-color: var(--progressBar-indeterminate-bg-color);
   transition: none;
 }
 
-@media (prefers-color-scheme: dark) {
-
-  #loadingBar .progress.indeterminate {
-  background-color: rgba(40, 40, 43, 1);
-  background-color: var(--progressBar-indeterminate-bg-color);
-  }
-}
-
 #loadingBar .progress.indeterminate .glimmer {
   position: absolute;
   top: 0;
   left: 0;
   height: 100%;
   width: calc(100% + 150px);
-  background: repeating-linear-gradient(
-    135deg,
-    rgba(116, 177, 239, 1) 0,
-    rgba(221, 221, 222, 1) 5px,
-    rgba(221, 221, 222, 1) 45px,
-    rgba(10, 132, 255, 1) 55px,
-    rgba(10, 132, 255, 1) 95px,
-    rgba(116, 177, 239, 1) 100px
-  );
   background: repeating-linear-gradient(
     135deg,
     var(--progressBar-indeterminate-blend-color) 0,
@@ -1247,222 +1072,6 @@ html[dir="rtl"] #toolbarContainer {
           animation: progressIndeterminate 1s linear infinite;
 }
 
-@media (prefers-color-scheme: dark) {
-
-  #loadingBar .progress.indeterminate .glimmer {
-  background: repeating-linear-gradient(
-    135deg,
-    rgba(20, 68, 133, 1) 0,
-    rgba(40, 40, 43, 1) 5px,
-    rgba(40, 40, 43, 1) 45px,
-    rgba(0, 96, 223, 1) 55px,
-    rgba(0, 96, 223, 1) 95px,
-    rgba(20, 68, 133, 1) 100px
-  );
-  background: repeating-linear-gradient(
-    135deg,
-    var(--progressBar-indeterminate-blend-color) 0,
-    var(--progressBar-indeterminate-bg-color) 5px,
-    var(--progressBar-indeterminate-bg-color) 45px,
-    var(--progressBar-color) 55px,
-    var(--progressBar-color) 95px,
-    var(--progressBar-indeterminate-blend-color) 100px
-  );
-  }
-}
-
-@media (prefers-color-scheme: dark) {
-
-  #loadingBar .progress.indeterminate .glimmer {
-  background: repeating-linear-gradient(
-    135deg,
-    rgba(20, 68, 133, 1) 0,
-    rgba(40, 40, 43, 1) 5px,
-    rgba(40, 40, 43, 1) 45px,
-    rgba(0, 96, 223, 1) 55px,
-    rgba(0, 96, 223, 1) 95px,
-    rgba(20, 68, 133, 1) 100px
-  );
-  background: repeating-linear-gradient(
-    135deg,
-    var(--progressBar-indeterminate-blend-color) 0,
-    var(--progressBar-indeterminate-bg-color) 5px,
-    var(--progressBar-indeterminate-bg-color) 45px,
-    var(--progressBar-color) 55px,
-    var(--progressBar-color) 95px,
-    var(--progressBar-indeterminate-blend-color) 100px
-  );
-  }
-}
-
-@media (prefers-color-scheme: dark) {
-
-  #loadingBar .progress.indeterminate .glimmer {
-  background: repeating-linear-gradient(
-    135deg,
-    rgba(20, 68, 133, 1) 0,
-    rgba(40, 40, 43, 1) 5px,
-    rgba(40, 40, 43, 1) 45px,
-    rgba(0, 96, 223, 1) 55px,
-    rgba(0, 96, 223, 1) 95px,
-    rgba(20, 68, 133, 1) 100px
-  );
-  background: repeating-linear-gradient(
-    135deg,
-    var(--progressBar-indeterminate-blend-color) 0,
-    var(--progressBar-indeterminate-bg-color) 5px,
-    var(--progressBar-indeterminate-bg-color) 45px,
-    var(--progressBar-color) 55px,
-    var(--progressBar-color) 95px,
-    var(--progressBar-indeterminate-blend-color) 100px
-  );
-  }
-}
-
-@media (prefers-color-scheme: dark) {
-
-  #loadingBar .progress.indeterminate .glimmer {
-  background: repeating-linear-gradient(
-    135deg,
-    rgba(20, 68, 133, 1) 0,
-    rgba(40, 40, 43, 1) 5px,
-    rgba(40, 40, 43, 1) 45px,
-    rgba(0, 96, 223, 1) 55px,
-    rgba(0, 96, 223, 1) 95px,
-    rgba(20, 68, 133, 1) 100px
-  );
-  background: repeating-linear-gradient(
-    135deg,
-    var(--progressBar-indeterminate-blend-color) 0,
-    var(--progressBar-indeterminate-bg-color) 5px,
-    var(--progressBar-indeterminate-bg-color) 45px,
-    var(--progressBar-color) 55px,
-    var(--progressBar-color) 95px,
-    var(--progressBar-indeterminate-blend-color) 100px
-  );
-  }
-}
-
-@media (prefers-color-scheme: dark) {
-
-  #loadingBar .progress.indeterminate .glimmer {
-  background: repeating-linear-gradient(
-    135deg,
-    rgba(20, 68, 133, 1) 0,
-    rgba(40, 40, 43, 1) 5px,
-    rgba(40, 40, 43, 1) 45px,
-    rgba(0, 96, 223, 1) 55px,
-    rgba(0, 96, 223, 1) 95px,
-    rgba(20, 68, 133, 1) 100px
-  );
-  background: repeating-linear-gradient(
-    135deg,
-    var(--progressBar-indeterminate-blend-color) 0,
-    var(--progressBar-indeterminate-bg-color) 5px,
-    var(--progressBar-indeterminate-bg-color) 45px,
-    var(--progressBar-color) 55px,
-    var(--progressBar-color) 95px,
-    var(--progressBar-indeterminate-blend-color) 100px
-  );
-  }
-}
-
-@media (prefers-color-scheme: dark) {
-
-  #loadingBar .progress.indeterminate .glimmer {
-  background: repeating-linear-gradient(
-    135deg,
-    rgba(20, 68, 133, 1) 0,
-    rgba(40, 40, 43, 1) 5px,
-    rgba(40, 40, 43, 1) 45px,
-    rgba(0, 96, 223, 1) 55px,
-    rgba(0, 96, 223, 1) 95px,
-    rgba(20, 68, 133, 1) 100px
-  );
-  background: repeating-linear-gradient(
-    135deg,
-    var(--progressBar-indeterminate-blend-color) 0,
-    var(--progressBar-indeterminate-bg-color) 5px,
-    var(--progressBar-indeterminate-bg-color) 45px,
-    var(--progressBar-color) 55px,
-    var(--progressBar-color) 95px,
-    var(--progressBar-indeterminate-blend-color) 100px
-  );
-  }
-}
-
-@media (prefers-color-scheme: dark) {
-
-  #loadingBar .progress.indeterminate .glimmer {
-  background: repeating-linear-gradient(
-    135deg,
-    rgba(20, 68, 133, 1) 0,
-    rgba(40, 40, 43, 1) 5px,
-    rgba(40, 40, 43, 1) 45px,
-    rgba(0, 96, 223, 1) 55px,
-    rgba(0, 96, 223, 1) 95px,
-    rgba(20, 68, 133, 1) 100px
-  );
-  background: repeating-linear-gradient(
-    135deg,
-    var(--progressBar-indeterminate-blend-color) 0,
-    var(--progressBar-indeterminate-bg-color) 5px,
-    var(--progressBar-indeterminate-bg-color) 45px,
-    var(--progressBar-color) 55px,
-    var(--progressBar-color) 95px,
-    var(--progressBar-indeterminate-blend-color) 100px
-  );
-  }
-}
-
-@media (prefers-color-scheme: dark) {
-
-  #loadingBar .progress.indeterminate .glimmer {
-  background: repeating-linear-gradient(
-    135deg,
-    rgba(20, 68, 133, 1) 0,
-    rgba(40, 40, 43, 1) 5px,
-    rgba(40, 40, 43, 1) 45px,
-    rgba(0, 96, 223, 1) 55px,
-    rgba(0, 96, 223, 1) 95px,
-    rgba(20, 68, 133, 1) 100px
-  );
-  background: repeating-linear-gradient(
-    135deg,
-    var(--progressBar-indeterminate-blend-color) 0,
-    var(--progressBar-indeterminate-bg-color) 5px,
-    var(--progressBar-indeterminate-bg-color) 45px,
-    var(--progressBar-color) 55px,
-    var(--progressBar-color) 95px,
-    var(--progressBar-indeterminate-blend-color) 100px
-  );
-  }
-}
-
-@media (prefers-color-scheme: dark) {
-
-  #loadingBar .progress.indeterminate .glimmer {
-  background: repeating-linear-gradient(
-    135deg,
-    rgba(20, 68, 133, 1) 0,
-    rgba(40, 40, 43, 1) 5px,
-    rgba(40, 40, 43, 1) 45px,
-    rgba(0, 96, 223, 1) 55px,
-    rgba(0, 96, 223, 1) 95px,
-    rgba(20, 68, 133, 1) 100px
-  );
-  background: repeating-linear-gradient(
-    135deg,
-    var(--progressBar-indeterminate-blend-color) 0,
-    var(--progressBar-indeterminate-bg-color) 5px,
-    var(--progressBar-indeterminate-bg-color) 45px,
-    var(--progressBar-color) 55px,
-    var(--progressBar-color) 95px,
-    var(--progressBar-indeterminate-blend-color) 100px
-  );
-  }
-}
-
 .findbar,
 .secondaryToolbar {
   top: 32px;
@@ -1470,8 +1079,8 @@ html[dir="rtl"] #toolbarContainer {
   z-index: 10000;
   height: auto;
   min-width: 16px;
-  padding: 0px 4px 0px 4px;
-  margin: 4px 2px 4px 2px;
+  padding: 0 4px;
+  margin: 4px 2px;
   color: rgba(217, 217, 217, 1);
   font-size: 12px;
   line-height: 14px;
@@ -1481,16 +1090,7 @@ html[dir="rtl"] #toolbarContainer {
 
 .findbar {
   min-width: 300px;
-  background-color: rgba(249, 249, 250, 1);
-  background-color: var(--toolbar-bg-color);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .findbar {
-  background-color: rgba(56, 56, 61, 1);
   background-color: var(--toolbar-bg-color);
-  }
 }
 .findbar > div {
   height: 32px;
@@ -1508,103 +1108,42 @@ html[dir="rtl"] .findbar {
   right: 64px;
 }
 
-html[dir="ltr"] .findbar .splitToolbarButton {
-  margin-left: 0px;
-  margin-top: 3px;
-}
-
-html[dir="rtl"] .findbar .splitToolbarButton {
-  margin-right: 0px;
+.findbar .splitToolbarButton {
   margin-top: 3px;
 }
-
-.findbar .splitToolbarButton .findNext {
-  width: 29px;
-}
-
-html[dir="ltr"] .findbar .splitToolbarButton .findNext {
-  border-right: 1px solid rgba(187, 187, 188, 1);
-  border-right: 1px solid var(--field-border-color);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  html[dir="ltr"] .findbar .splitToolbarButton .findNext {
-  border-right: 1px solid rgba(115, 115, 115, 1);
-  border-right: 1px solid var(--field-border-color);
-  }
-}
-
-html[dir="rtl"] .findbar .splitToolbarButton .findNext {
-  border-left: 1px solid rgba(187, 187, 188, 1);
-  border-left: 1px solid var(--field-border-color);
+html[dir="ltr"] .findbar .splitToolbarButton {
+  margin-left: 0;
+  margin-right: 5px;
 }
-
-@media (prefers-color-scheme: dark) {
-
-  html[dir="rtl"] .findbar .splitToolbarButton .findNext {
-  border-left: 1px solid rgba(115, 115, 115, 1);
-  border-left: 1px solid var(--field-border-color);
-  }
+html[dir="rtl"] .findbar .splitToolbarButton {
+  margin-left: 5px;
+  margin-right: 0;
 }
 
-.findbar .splitToolbarButton .toolbarButton {
-  background-color: rgba(227, 228, 230, 1);
+.findbar .splitToolbarButton > .toolbarButton {
   background-color: var(--findbar-nextprevious-btn-bg-color);
-  border-radius: 0px;
+  border-radius: 0;
   height: 26px;
-  border-top: 1px solid rgba(187, 187, 188, 1);
   border-top: 1px solid var(--field-border-color);
-  border-bottom: 1px solid rgba(187, 187, 188, 1);
-  border-bottom: 1px solid var(--field-border-color);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .findbar .splitToolbarButton .toolbarButton {
-  border-bottom: 1px solid rgba(115, 115, 115, 1);
   border-bottom: 1px solid var(--field-border-color);
-  }
 }
 
-@media (prefers-color-scheme: dark) {
-
-  .findbar .splitToolbarButton .toolbarButton {
-  border-top: 1px solid rgba(115, 115, 115, 1);
-  border-top: 1px solid var(--field-border-color);
-  }
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .findbar .splitToolbarButton .toolbarButton {
-  background-color: rgba(89, 89, 89, 1);
-  background-color: var(--findbar-nextprevious-btn-bg-color);
-  }
-}
-
-.findbar .splitToolbarButton .toolbarButton::before {
+.findbar .splitToolbarButton > .toolbarButton::before {
   top: 5px;
 }
 
-html[dir="ltr"] .findbar .splitToolbarButton > .findPrevious {
-  border-radius: 0;
+.findbar .splitToolbarButton > .findNext {
+  width: 29px;
 }
 html[dir="ltr"] .findbar .splitToolbarButton > .findNext {
-  border-bottom-left-radius: 0;
   border-bottom-right-radius: 2px;
-  border-top-left-radius: 0;
   border-top-right-radius: 2px;
-}
-
-html[dir="rtl"] .findbar .splitToolbarButton > .findPrevious {
-  border-radius: 0;
+  border-right: 1px solid var(--field-border-color);
 }
 html[dir="rtl"] .findbar .splitToolbarButton > .findNext {
   border-bottom-left-radius: 2px;
-  border-bottom-right-radius: 0;
   border-top-left-radius: 2px;
-  border-top-right-radius: 0;
+  border-left: 1px solid var(--field-border-color);
 }
 
 .findbar input[type="checkbox"] {
@@ -1614,59 +1153,27 @@ html[dir="rtl"] .findbar .splitToolbarButton > .findNext {
 .findbar label {
   -webkit-user-select: none;
      -moz-user-select: none;
-      -ms-user-select: none;
           user-select: none;
 }
 
-.findbar label:hover {
-  background-color: rgba(221, 222, 223, 1);
-  background-color: var(--button-hover-color);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .findbar label:hover {
-  background-color: rgba(102, 102, 103, 1);
-  background-color: var(--button-hover-color);
-  }
-}
-
+.findbar label:hover,
 .findbar input:focus + label {
-  background-color: rgba(221, 222, 223, 1);
-  background-color: var(--button-hover-color);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .findbar input:focus + label {
-  background-color: rgba(102, 102, 103, 1);
   background-color: var(--button-hover-color);
-  }
 }
 
 html[dir="ltr"] #findInput {
   border-top-right-radius: 0;
   border-bottom-right-radius: 0;
 }
-
 html[dir="rtl"] #findInput {
   border-top-left-radius: 0;
   border-bottom-left-radius: 0;
 }
 
 .findbar .toolbarField[type="checkbox"]:checked + .toolbarLabel {
-  background-color: rgba(0, 0, 0, 0.3) !important;
   background-color: var(--toggled-btn-bg-color) !important;
 }
 
-@media (prefers-color-scheme: dark) {
-
-  .findbar .toolbarField[type="checkbox"]:checked + .toolbarLabel {
-  background-color: rgba(0, 0, 0, 0.3) !important;
-  background-color: var(--toggled-btn-bg-color) !important;
-  }
-}
-
 #findInput {
   width: 200px;
 }
@@ -1676,47 +1183,27 @@ html[dir="rtl"] #findInput {
 #findInput::-moz-placeholder {
   font-style: normal;
 }
-#findInput:-ms-input-placeholder {
-  font-style: normal;
-}
-#findInput::-ms-input-placeholder {
-  font-style: normal;
-}
 #findInput::placeholder {
   font-style: normal;
 }
 #findInput[data-status="pending"] {
-  background-image: url(images/loading.svg);
   background-image: var(--loading-icon);
   background-repeat: no-repeat;
   background-position: 98%;
 }
-@media (prefers-color-scheme: dark) {
-
-  #findInput[data-status="pending"] {
-  background-image: url(images/loading-dark.svg);
-  background-image: var(--loading-icon);
-  }
-}
 html[dir="rtl"] #findInput[data-status="pending"] {
   background-position: 3px;
 }
+#findInput[data-status="notFound"] {
+  background-color: rgba(255, 102, 102, 1);
+}
 
 .secondaryToolbar {
-  padding: 6px 0 10px 0;
+  padding: 6px 0 10px;
   height: auto;
   z-index: 30000;
-  background-color: rgba(255, 255, 255, 1);
   background-color: var(--doorhanger-bg-color);
 }
-
-@media (prefers-color-scheme: dark) {
-
-  .secondaryToolbar {
-  background-color: rgba(74, 74, 79, 1);
-  background-color: var(--doorhanger-bg-color);
-  }
-}
 html[dir="ltr"] .secondaryToolbar {
   right: 4px;
 }
@@ -1732,45 +1219,16 @@ html[dir="rtl"] .secondaryToolbar {
   margin-bottom: -4px;
 }
 
-#secondaryToolbarButtonContainer.hiddenScrollModeButtons > .scrollModeButtons,
-#secondaryToolbarButtonContainer.hiddenSpreadModeButtons > .spreadModeButtons {
-  display: none !important;
-}
-
-.doorHanger {
-  border-radius: 2px;
-  box-shadow: 0 1px 5px rgba(12, 12, 13, 0.2),
-    0 0 0 1px rgba(12, 12, 13, 0.2);
-  box-shadow: 0 1px 5px var(--doorhanger-border-color),
-    0 0 0 1px var(--doorhanger-border-color);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .doorHanger {
-  box-shadow: 0 1px 5px rgba(39, 39, 43, 1),
-    0 0 0 1px rgba(39, 39, 43, 1);
-  box-shadow: 0 1px 5px var(--doorhanger-border-color),
-    0 0 0 1px var(--doorhanger-border-color);
-  }
+#secondaryToolbarButtonContainer.hiddenScrollModeButtons > .scrollModeButtons,
+#secondaryToolbarButtonContainer.hiddenSpreadModeButtons > .spreadModeButtons {
+  display: none !important;
 }
 
+.doorHanger,
 .doorHangerRight {
   border-radius: 2px;
-  box-shadow: 0 1px 5px rgba(12, 12, 13, 0.2),
-    0 0 0 1px rgba(12, 12, 13, 0.2);
-  box-shadow: 0 1px 5px var(--doorhanger-border-color),
-    0 0 0 1px var(--doorhanger-border-color);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .doorHangerRight {
-  box-shadow: 0 1px 5px rgba(39, 39, 43, 1),
-    0 0 0 1px rgba(39, 39, 43, 1);
   box-shadow: 0 1px 5px var(--doorhanger-border-color),
     0 0 0 1px var(--doorhanger-border-color);
-  }
 }
 .doorHanger:after,
 .doorHanger:before,
@@ -1789,51 +1247,16 @@ html[dir="rtl"] .secondaryToolbar {
   border-width: 8px;
 }
 .doorHanger:after {
-  border-bottom-color: rgba(249, 249, 250, 1);
-  border-bottom-color: var(--toolbar-bg-color);
-}
-@media (prefers-color-scheme: dark) {
-
-  .doorHanger:after {
-  border-bottom-color: rgba(56, 56, 61, 1);
   border-bottom-color: var(--toolbar-bg-color);
-  }
 }
 .doorHangerRight:after {
-  border-bottom-color: rgba(255, 255, 255, 1);
-  border-bottom-color: var(--doorhanger-bg-color);
-}
-@media (prefers-color-scheme: dark) {
-
-  .doorHangerRight:after {
-  border-bottom-color: rgba(74, 74, 79, 1);
   border-bottom-color: var(--doorhanger-bg-color);
-  }
-}
-.doorHanger:before {
-  border-bottom-color: rgba(12, 12, 13, 0.2);
-  border-bottom-color: var(--doorhanger-border-color);
-  border-width: 9px;
-}
-@media (prefers-color-scheme: dark) {
-
-  .doorHanger:before {
-  border-bottom-color: rgba(39, 39, 43, 1);
-  border-bottom-color: var(--doorhanger-border-color);
-  }
 }
+.doorHanger:before,
 .doorHangerRight:before {
-  border-bottom-color: rgba(12, 12, 13, 0.2);
   border-bottom-color: var(--doorhanger-border-color);
   border-width: 9px;
 }
-@media (prefers-color-scheme: dark) {
-
-  .doorHangerRight:before {
-  border-bottom-color: rgba(39, 39, 43, 1);
-  border-bottom-color: var(--doorhanger-border-color);
-  }
-}
 
 html[dir="ltr"] .doorHanger:after,
 html[dir="rtl"] .doorHangerRight:after {
@@ -1874,10 +1297,6 @@ html[dir="ltr"] .doorHangerRight:before {
   display: none;
 }
 
-#findInput.notFound {
-  background-color: rgba(255, 102, 102, 1);
-}
-
 #toolbarViewerMiddle {
   position: absolute;
   left: 50%;
@@ -1885,16 +1304,22 @@ html[dir="ltr"] .doorHangerRight:before {
 }
 
 html[dir="ltr"] #toolbarViewerLeft,
-html[dir="rtl"] #toolbarViewerRight {
+html[dir="rtl"] #toolbarViewerRight,
+html[dir="ltr"] #toolbarSidebarLeft,
+html[dir="rtl"] #toolbarSidebarRight {
   float: left;
 }
 html[dir="ltr"] #toolbarViewerRight,
-html[dir="rtl"] #toolbarViewerLeft {
+html[dir="rtl"] #toolbarViewerLeft,
+html[dir="ltr"] #toolbarSidebarRight,
+html[dir="rtl"] #toolbarSidebarLeft {
   float: right;
 }
 html[dir="ltr"] #toolbarViewerLeft > *,
 html[dir="ltr"] #toolbarViewerMiddle > *,
 html[dir="ltr"] #toolbarViewerRight > *,
+html[dir="ltr"] #toolbarSidebarLeft *,
+html[dir="ltr"] #toolbarSidebarRight *,
 html[dir="ltr"] .findbar * {
   position: relative;
   float: left;
@@ -1902,25 +1327,21 @@ html[dir="ltr"] .findbar * {
 html[dir="rtl"] #toolbarViewerLeft > *,
 html[dir="rtl"] #toolbarViewerMiddle > *,
 html[dir="rtl"] #toolbarViewerRight > *,
+html[dir="rtl"] #toolbarSidebarLeft *,
+html[dir="rtl"] #toolbarSidebarRight *,
 html[dir="rtl"] .findbar * {
   position: relative;
   float: right;
 }
 
-html[dir="ltr"] .splitToolbarButton {
-  margin: 2px 2px 0;
-  display: inline-block;
-}
-html[dir="rtl"] .splitToolbarButton {
+.splitToolbarButton {
   margin: 2px 2px 0;
   display: inline-block;
 }
 html[dir="ltr"] .splitToolbarButton > .toolbarButton {
-  border-radius: 2px;
   float: left;
 }
 html[dir="rtl"] .splitToolbarButton > .toolbarButton {
-  border-radius: 2px;
   float: right;
 }
 
@@ -1933,41 +1354,12 @@ html[dir="rtl"] .splitToolbarButton > .toolbarButton {
   height: 28px;
 }
 .overlayButton {
-  background-color: rgba(12, 12, 13, 0.1);
-  background-color: var(--overlay-button-bg-color);
-}
-@media (prefers-color-scheme: dark) {
-
-  .overlayButton {
-  background-color: rgba(92, 92, 97, 1);
   background-color: var(--overlay-button-bg-color);
-  }
-}
-
-.overlayButton:hover {
-  background-color: rgba(12, 12, 13, 0.3);
-  background-color: var(--overlay-button-hover-color);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .overlayButton:hover {
-  background-color: rgba(115, 115, 115, 1);
-  background-color: var(--overlay-button-hover-color);
-  }
 }
 
+.overlayButton:hover,
 .overlayButton:focus {
-  background-color: rgba(12, 12, 13, 0.3);
-  background-color: var(--overlay-button-hover-color);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .overlayButton:focus {
-  background-color: rgba(115, 115, 115, 1);
   background-color: var(--overlay-button-hover-color);
-  }
 }
 
 .toolbarButton > span {
@@ -1987,120 +1379,40 @@ html[dir="rtl"] .splitToolbarButton > .toolbarButton {
   margin: 0;
 }
 
-.splitToolbarButton > .toolbarButton:hover {
-  background-color: rgba(221, 222, 223, 1);
-  background-color: var(--button-hover-color);
-  z-index: 199;
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .splitToolbarButton > .toolbarButton:hover {
-  background-color: rgba(102, 102, 103, 1);
-  background-color: var(--button-hover-color);
-  }
-}
-
-.splitToolbarButton > .toolbarButton:focus {
-  background-color: rgba(221, 222, 223, 1);
-  background-color: var(--button-hover-color);
-  z-index: 199;
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .splitToolbarButton > .toolbarButton:focus {
-  background-color: rgba(102, 102, 103, 1);
-  background-color: var(--button-hover-color);
-  }
-}
-
-.dropdownToolbarButton:hover {
-  background-color: rgba(221, 222, 223, 1);
-  background-color: var(--button-hover-color);
-  z-index: 199;
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .dropdownToolbarButton:hover {
-  background-color: rgba(102, 102, 103, 1);
-  background-color: var(--button-hover-color);
-  }
-}
-
-.toolbarButton.textButton:hover {
-  background-color: rgba(221, 222, 223, 1);
-  background-color: var(--button-hover-color);
-  z-index: 199;
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .toolbarButton.textButton:hover {
-  background-color: rgba(102, 102, 103, 1);
-  background-color: var(--button-hover-color);
-  }
-}
-
+.splitToolbarButton > .toolbarButton:hover,
+.splitToolbarButton > .toolbarButton:focus,
+.dropdownToolbarButton:hover,
+.toolbarButton.textButton:hover,
 .toolbarButton.textButton:focus {
-  background-color: rgba(221, 222, 223, 1);
   background-color: var(--button-hover-color);
   z-index: 199;
 }
-
-@media (prefers-color-scheme: dark) {
-
-  .toolbarButton.textButton:focus {
-  background-color: rgba(102, 102, 103, 1);
-  background-color: var(--button-hover-color);
-  }
-}
 .splitToolbarButton > .toolbarButton {
   position: relative;
 }
 html[dir="ltr"] .splitToolbarButton > .toolbarButton:first-child,
 html[dir="rtl"] .splitToolbarButton > .toolbarButton:last-child {
-  position: relative;
   margin: 0;
 }
 html[dir="ltr"] .splitToolbarButton > .toolbarButton:last-child,
 html[dir="rtl"] .splitToolbarButton > .toolbarButton:first-child {
-  position: relative;
   margin: 0;
 }
 .splitToolbarButtonSeparator {
   padding: 10px 0;
   width: 1px;
-  background-color: rgba(0, 0, 0, 0.3);
   background-color: var(--separator-color);
   z-index: 99;
   display: inline-block;
   margin: 4px 0;
 }
-@media (prefers-color-scheme: dark) {
-
-  .splitToolbarButtonSeparator {
-  background-color: rgba(0, 0, 0, 0.3);
-  background-color: var(--separator-color);
-  }
-}
 
 .findbar .splitToolbarButtonSeparator {
-  background-color: rgba(187, 187, 188, 1);
   background-color: var(--field-border-color);
   margin: 0;
   padding: 13px 0;
 }
 
-@media (prefers-color-scheme: dark) {
-
-  .findbar .splitToolbarButtonSeparator {
-  background-color: rgba(115, 115, 115, 1);
-  background-color: var(--field-border-color);
-  }
-}
-
 html[dir="ltr"] .splitToolbarButtonSeparator {
   float: left;
 }
@@ -2108,121 +1420,25 @@ html[dir="rtl"] .splitToolbarButtonSeparator {
   float: right;
 }
 
-.toolbarButton {
-  min-width: 16px;
-  padding: 2px 6px 0;
-  border: none;
-  border-radius: 2px;
-  color: rgba(12, 12, 13, 1);
-  color: var(--main-color);
-  font-size: 12px;
-  line-height: 14px;
-  -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
-  /* Opera does not support user-select, use <... unselectable="on"> instead */
-  cursor: default;
-  box-sizing: border-box;
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .toolbarButton {
-  color: rgba(249, 249, 250, 1);
-  color: var(--main-color);
-  }
-}
-
-.dropdownToolbarButton {
-  min-width: 16px;
-  padding: 2px 6px 0;
-  border: none;
-  border-radius: 2px;
-  color: rgba(12, 12, 13, 1);
-  color: var(--main-color);
-  font-size: 12px;
-  line-height: 14px;
-  -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
-  /* Opera does not support user-select, use <... unselectable="on"> instead */
-  cursor: default;
-  box-sizing: border-box;
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .dropdownToolbarButton {
-  color: rgba(249, 249, 250, 1);
-  color: var(--main-color);
-  }
-}
-
-.secondaryToolbarButton {
-  min-width: 16px;
-  padding: 2px 6px 0;
-  border: none;
-  border-radius: 2px;
-  color: rgba(12, 12, 13, 1);
-  color: var(--main-color);
-  font-size: 12px;
-  line-height: 14px;
-  -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
-  /* Opera does not support user-select, use <... unselectable="on"> instead */
-  cursor: default;
-  box-sizing: border-box;
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .secondaryToolbarButton {
-  color: rgba(249, 249, 250, 1);
-  color: var(--main-color);
-  }
-}
-
+.toolbarButton,
+.dropdownToolbarButton,
+.secondaryToolbarButton,
 .overlayButton {
   min-width: 16px;
+  margin: 2px 1px;
   padding: 2px 6px 0;
   border: none;
   border-radius: 2px;
-  color: rgba(12, 12, 13, 1);
   color: var(--main-color);
   font-size: 12px;
   line-height: 14px;
   -webkit-user-select: none;
      -moz-user-select: none;
-      -ms-user-select: none;
           user-select: none;
-  /* Opera does not support user-select, use <... unselectable="on"> instead */
   cursor: default;
   box-sizing: border-box;
 }
 
-@media (prefers-color-scheme: dark) {
-
-  .overlayButton {
-  color: rgba(249, 249, 250, 1);
-  color: var(--main-color);
-  }
-}
-
-html[dir="ltr"] .toolbarButton,
-html[dir="ltr"] .overlayButton,
-html[dir="ltr"] .dropdownToolbarButton {
-  margin: 2px 1px;
-}
-html[dir="rtl"] .toolbarButton,
-html[dir="rtl"] .overlayButton,
-html[dir="rtl"] .dropdownToolbarButton {
-  margin: 2px 1px;
-}
-
 html[dir="ltr"] #toolbarViewerLeft > .toolbarButton:first-child,
 html[dir="rtl"] #toolbarViewerRight > .toolbarButton:last-child {
   margin-left: 2px;
@@ -2232,127 +1448,40 @@ html[dir="ltr"] #toolbarViewerRight > .toolbarButton:last-child,
 html[dir="rtl"] #toolbarViewerLeft > .toolbarButton:first-child {
   margin-right: 2px;
 }
-.toolbarButton:hover {
-  background-color: rgba(221, 222, 223, 1);
-  background-color: var(--button-hover-color);
-}
-@media (prefers-color-scheme: dark) {
-
-  .toolbarButton:hover {
-  background-color: rgba(102, 102, 103, 1);
-  background-color: var(--button-hover-color);
-  }
-}
+.toolbarButton:hover,
 .toolbarButton:focus {
-  background-color: rgba(221, 222, 223, 1);
-  background-color: var(--button-hover-color);
-}
-@media (prefers-color-scheme: dark) {
-
-  .toolbarButton:focus {
-  background-color: rgba(102, 102, 103, 1);
   background-color: var(--button-hover-color);
-  }
-}
-.secondaryToolbarButton:hover {
-  background-color: rgba(237, 237, 237, 1);
-  background-color: var(--doorhanger-hover-color);
-}
-@media (prefers-color-scheme: dark) {
-
-  .secondaryToolbarButton:hover {
-  background-color: rgba(93, 94, 98, 1);
-  background-color: var(--doorhanger-hover-color);
-  }
 }
+.secondaryToolbarButton:hover,
 .secondaryToolbarButton:focus {
-  background-color: rgba(237, 237, 237, 1);
-  background-color: var(--doorhanger-hover-color);
-}
-@media (prefers-color-scheme: dark) {
-
-  .secondaryToolbarButton:focus {
-  background-color: rgba(93, 94, 98, 1);
   background-color: var(--doorhanger-hover-color);
-  }
-}
-
-.toolbarButton.toggled {
-  background-color: rgba(0, 0, 0, 0.3);
-  background-color: var(--toggled-btn-bg-color);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .toolbarButton.toggled {
-  background-color: rgba(0, 0, 0, 0.3);
-  background-color: var(--toggled-btn-bg-color);
-  }
-}
-
-.splitToolbarButton.toggled > .toolbarButton.toggled {
-  background-color: rgba(0, 0, 0, 0.3);
-  background-color: var(--toggled-btn-bg-color);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .splitToolbarButton.toggled > .toolbarButton.toggled {
-  background-color: rgba(0, 0, 0, 0.3);
-  background-color: var(--toggled-btn-bg-color);
-  }
 }
 
+.toolbarButton.toggled,
+.splitToolbarButton.toggled > .toolbarButton.toggled,
 .secondaryToolbarButton.toggled {
-  background-color: rgba(0, 0, 0, 0.3);
-  background-color: var(--toggled-btn-bg-color);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .secondaryToolbarButton.toggled {
-  background-color: rgba(0, 0, 0, 0.3);
   background-color: var(--toggled-btn-bg-color);
-  }
 }
 
 .toolbarButton.toggled:hover:active,
 .splitToolbarButton.toggled > .toolbarButton.toggled:hover:active,
 .secondaryToolbarButton.toggled:hover:active {
-  background-color: rgba(0, 0, 0, 0.4);
+  background-color: var(--toggled-hover-active-btn-color);
 }
 
 .dropdownToolbarButton {
   width: 140px;
-  padding: 0;
-  overflow: hidden;
-  background-color: rgba(215, 215, 219, 1);
-  background-color: var(--dropdown-btn-bg-color);
-  margin-top: 2px !important;
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .dropdownToolbarButton {
-  background-color: rgba(74, 74, 79, 1);
+  padding: 0;
+  overflow: hidden;
   background-color: var(--dropdown-btn-bg-color);
-  }
+  margin-top: 2px !important;
 }
 .dropdownToolbarButton::after {
-  position: absolute;
-  display: inline-block;
   top: 6px;
-  content: url(images/toolbarButton-menuArrow.svg);
-  content: var(--toolbarButton-menuArrow-icon);
   pointer-events: none;
-  max-width: 16px;
-}
-@media (prefers-color-scheme: dark) {
 
-  .dropdownToolbarButton::after {
-  content: url(images/toolbarButton-menuArrow-dark.svg);
-  content: var(--toolbarButton-menuArrow-icon);
-  }
+  -webkit-mask-image: var(--toolbarButton-menuArrow-icon);
+  mask-image: var(--toolbarButton-menuArrow-icon);
 }
 html[dir="ltr"] .dropdownToolbarButton::after {
   right: 7px;
@@ -2362,33 +1491,14 @@ html[dir="rtl"] .dropdownToolbarButton::after {
 }
 
 .dropdownToolbarButton > select {
-  -webkit-appearance: none;
   width: 162px;
   height: 28px;
   font-size: 12px;
-  color: rgba(12, 12, 13, 1);
   color: var(--main-color);
   margin: 0;
   padding: 1px 0 2px;
   border: none;
-  background-color: rgba(215, 215, 219, 1);
-  background-color: var(--dropdown-btn-bg-color);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .dropdownToolbarButton > select {
-  background-color: rgba(74, 74, 79, 1);
   background-color: var(--dropdown-btn-bg-color);
-  }
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .dropdownToolbarButton > select {
-  color: rgba(249, 249, 250, 1);
-  color: var(--main-color);
-  }
 }
 html[dir="ltr"] .dropdownToolbarButton > select {
   padding-left: 4px;
@@ -2397,41 +1507,15 @@ html[dir="rtl"] .dropdownToolbarButton > select {
   padding-right: 4px;
 }
 .dropdownToolbarButton > select:hover {
-  background-color: rgba(221, 222, 223, 1);
-  background-color: var(--button-hover-color);
-}
-@media (prefers-color-scheme: dark) {
-
-  .dropdownToolbarButton > select:hover {
-  background-color: rgba(102, 102, 103, 1);
   background-color: var(--button-hover-color);
-  }
 }
 
 .dropdownToolbarButton > select:focus {
-  background-color: rgba(221, 222, 223, 1);
-  background-color: var(--button-hover-color);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .dropdownToolbarButton > select:focus {
-  background-color: rgba(102, 102, 103, 1);
   background-color: var(--button-hover-color);
-  }
 }
 
 .dropdownToolbarButton > select > option {
-  background: rgba(255, 255, 255, 1);
-  background: var(--doorhanger-bg-color);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .dropdownToolbarButton > select > option {
-  background: rgba(74, 74, 79, 1);
   background: var(--doorhanger-bg-color);
-  }
 }
 
 #customScaleOption {
@@ -2448,42 +1532,33 @@ html[dir="rtl"] .dropdownToolbarButton > select {
   height: 1px;
 }
 
-html[dir="ltr"] #findPrevious {
-  margin-left: 0;
-}
-html[dir="ltr"] #findNext {
-  margin-right: 3px;
-}
+.toolbarButton::before,
+.secondaryToolbarButton::before,
+.dropdownToolbarButton::after,
+.treeItemToggler::before {
+  /* All matching images have a size of 16x16
+   * All relevant containers have a size of 28x28 */
+  position: absolute;
+  display: inline-block;
+  width: 16px;
+  height: 16px;
 
-html[dir="rtl"] #findPrevious {
-  margin-right: 0;
-}
-html[dir="rtl"] #findNext {
-  margin-left: 3px;
+  content: "";
+  background-color: var(--toolbar-icon-bg-color);
+  -webkit-mask-size: cover;
+  mask-size: cover;
 }
 
 .toolbarButton::before {
-  opacity: 0.7;
   opacity: var(--toolbar-icon-opacity);
   top: 6px;
+  left: 6px;
 }
 
 .secondaryToolbarButton::before {
-  opacity: 0.9;
   opacity: var(--doorhanger-icon-opacity);
   top: 5px;
 }
-
-.toolbarButton::before,
-.secondaryToolbarButton::before {
-  /* All matching images have a size of 16x16
-   * All relevant containers have a size of 28x28 */
-  position: absolute;
-  display: inline-block;
-  left: 6px;
-  max-width: 16px;
-}
-
 html[dir="ltr"] .secondaryToolbarButton::before {
   left: 12px;
 }
@@ -2492,229 +1567,73 @@ html[dir="rtl"] .secondaryToolbarButton::before {
 }
 
 .toolbarButton#sidebarToggle::before {
-  content: url(images/toolbarButton-sidebarToggle.svg);
-  content: var(--toolbarButton-sidebarToggle-icon);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .toolbarButton#sidebarToggle::before {
-  content: url(images/toolbarButton-sidebarToggle-dark.svg);
-  content: var(--toolbarButton-sidebarToggle-icon);
-  }
+  -webkit-mask-image: var(--toolbarButton-sidebarToggle-icon);
+  mask-image: var(--toolbarButton-sidebarToggle-icon);
 }
 html[dir="rtl"] .toolbarButton#sidebarToggle::before {
   transform: scaleX(-1);
 }
 
 .toolbarButton#secondaryToolbarToggle::before {
-  content: url(images/toolbarButton-secondaryToolbarToggle.svg);
-  content: var(--toolbarButton-secondaryToolbarToggle-icon);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .toolbarButton#secondaryToolbarToggle::before {
-  content: url(images/toolbarButton-secondaryToolbarToggle-dark.svg);
-  content: var(--toolbarButton-secondaryToolbarToggle-icon);
-  }
+  -webkit-mask-image: var(--toolbarButton-secondaryToolbarToggle-icon);
+  mask-image: var(--toolbarButton-secondaryToolbarToggle-icon);
 }
 html[dir="rtl"] .toolbarButton#secondaryToolbarToggle::before {
   transform: scaleX(-1);
 }
 
 .toolbarButton.findPrevious::before {
-  content: url(images/findbarButton-previous.svg);
-  content: var(--findbarButton-previous-icon);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .toolbarButton.findPrevious::before {
-  content: url(images/findbarButton-previous-dark.svg);
-  content: var(--findbarButton-previous-icon);
-  }
-}
-html[dir="rtl"] .toolbarButton.findPrevious::before {
-  transform: scaleX(-1);
+  -webkit-mask-image: var(--findbarButton-previous-icon);
+  mask-image: var(--findbarButton-previous-icon);
 }
 
 .toolbarButton.findNext::before {
-  content: url(images/findbarButton-next.svg);
-  content: var(--findbarButton-next-icon);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .toolbarButton.findNext::before {
-  content: url(images/findbarButton-next-dark.svg);
-  content: var(--findbarButton-next-icon);
-  }
-}
-html[dir="rtl"] .toolbarButton.findNext::before {
-  transform: scaleX(-1);
+  -webkit-mask-image: var(--findbarButton-next-icon);
+  mask-image: var(--findbarButton-next-icon);
 }
 
 .toolbarButton.pageUp::before {
-  content: url(images/toolbarButton-pageUp.svg);
-  content: var(--toolbarButton-pageUp-icon);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .toolbarButton.pageUp::before {
-  content: url(images/toolbarButton-pageUp-dark.svg);
-  content: var(--toolbarButton-pageUp-icon);
-  }
-}
-html[dir="rtl"] .toolbarButton.pageUp::before {
-  transform: scaleX(-1);
+  -webkit-mask-image: var(--toolbarButton-pageUp-icon);
+  mask-image: var(--toolbarButton-pageUp-icon);
 }
 
 .toolbarButton.pageDown::before {
-  content: url(images/toolbarButton-pageDown.svg);
-  content: var(--toolbarButton-pageDown-icon);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .toolbarButton.pageDown::before {
-  content: url(images/toolbarButton-pageDown-dark.svg);
-  content: var(--toolbarButton-pageDown-icon);
-  }
-}
-html[dir="rtl"] .toolbarButton.pageDown::before {
-  transform: scaleX(-1);
+  -webkit-mask-image: var(--toolbarButton-pageDown-icon);
+  mask-image: var(--toolbarButton-pageDown-icon);
 }
 
 .toolbarButton.zoomOut::before {
-  content: url(images/toolbarButton-zoomOut.svg);
-  content: var(--toolbarButton-zoomOut-icon);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .toolbarButton.zoomOut::before {
-  content: url(images/toolbarButton-zoomOut-dark.svg);
-  content: var(--toolbarButton-zoomOut-icon);
-  }
+  -webkit-mask-image: var(--toolbarButton-zoomOut-icon);
+  mask-image: var(--toolbarButton-zoomOut-icon);
 }
 
 .toolbarButton.zoomIn::before {
-  content: url(images/toolbarButton-zoomIn.svg);
-  content: var(--toolbarButton-zoomIn-icon);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .toolbarButton.zoomIn::before {
-  content: url(images/toolbarButton-zoomIn-dark.svg);
-  content: var(--toolbarButton-zoomIn-icon);
-  }
-}
-
-.toolbarButton.presentationMode::before {
-  content: url(images/toolbarButton-presentationMode.svg);
-  content: var(--toolbarButton-presentationMode-icon);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .toolbarButton.presentationMode::before {
-  content: url(images/toolbarButton-presentationMode-dark.svg);
-  content: var(--toolbarButton-presentationMode-icon);
-  }
+  -webkit-mask-image: var(--toolbarButton-zoomIn-icon);
+  mask-image: var(--toolbarButton-zoomIn-icon);
 }
 
+.toolbarButton.presentationMode::before,
 .secondaryToolbarButton.presentationMode::before {
-  content: url(images/toolbarButton-presentationMode.svg);
-  content: var(--toolbarButton-presentationMode-icon);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .secondaryToolbarButton.presentationMode::before {
-  content: url(images/toolbarButton-presentationMode-dark.svg);
-  content: var(--toolbarButton-presentationMode-icon);
-  }
-}
-
-.toolbarButton.print::before {
-  content: url(images/toolbarButton-print.svg);
-  content: var(--toolbarButton-print-icon);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .toolbarButton.print::before {
-  content: url(images/toolbarButton-print-dark.svg);
-  content: var(--toolbarButton-print-icon);
-  }
+  -webkit-mask-image: var(--toolbarButton-presentationMode-icon);
+  mask-image: var(--toolbarButton-presentationMode-icon);
 }
 
+.toolbarButton.print::before,
 .secondaryToolbarButton.print::before {
-  content: url(images/toolbarButton-print.svg);
-  content: var(--toolbarButton-print-icon);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .secondaryToolbarButton.print::before {
-  content: url(images/toolbarButton-print-dark.svg);
-  content: var(--toolbarButton-print-icon);
-  }
-}
-
-.toolbarButton.openFile::before {
-  content: url(images/toolbarButton-openFile.svg);
-  content: var(--toolbarButton-openFile-icon);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .toolbarButton.openFile::before {
-  content: url(images/toolbarButton-openFile-dark.svg);
-  content: var(--toolbarButton-openFile-icon);
-  }
+  -webkit-mask-image: var(--toolbarButton-print-icon);
+  mask-image: var(--toolbarButton-print-icon);
 }
 
+.toolbarButton.openFile::before,
 .secondaryToolbarButton.openFile::before {
-  content: url(images/toolbarButton-openFile.svg);
-  content: var(--toolbarButton-openFile-icon);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .secondaryToolbarButton.openFile::before {
-  content: url(images/toolbarButton-openFile-dark.svg);
-  content: var(--toolbarButton-openFile-icon);
-  }
-}
-
-.toolbarButton.download::before {
-  content: url(images/toolbarButton-download.svg);
-  content: var(--toolbarButton-download-icon);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .toolbarButton.download::before {
-  content: url(images/toolbarButton-download-dark.svg);
-  content: var(--toolbarButton-download-icon);
-  }
+  -webkit-mask-image: var(--toolbarButton-openFile-icon);
+  mask-image: var(--toolbarButton-openFile-icon);
 }
 
+.toolbarButton.download::before,
 .secondaryToolbarButton.download::before {
-  content: url(images/toolbarButton-download.svg);
-  content: var(--toolbarButton-download-icon);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .secondaryToolbarButton.download::before {
-  content: url(images/toolbarButton-download-dark.svg);
-  content: var(--toolbarButton-download-icon);
-  }
+  -webkit-mask-image: var(--toolbarButton-download-icon);
+  mask-image: var(--toolbarButton-download-icon);
 }
 
 .secondaryToolbarButton.bookmark {
@@ -2727,98 +1646,46 @@ html[dir="rtl"] .toolbarButton.pageDown::before {
   pointer-events: none;
 }
 
-.toolbarButton.bookmark::before {
-  content: url(images/toolbarButton-bookmark.svg);
-  content: var(--toolbarButton-bookmark-icon);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .toolbarButton.bookmark::before {
-  content: url(images/toolbarButton-bookmark-dark.svg);
-  content: var(--toolbarButton-bookmark-icon);
-  }
-}
-
+.toolbarButton.bookmark::before,
 .secondaryToolbarButton.bookmark::before {
-  content: url(images/toolbarButton-bookmark.svg);
-  content: var(--toolbarButton-bookmark-icon);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .secondaryToolbarButton.bookmark::before {
-  content: url(images/toolbarButton-bookmark-dark.svg);
-  content: var(--toolbarButton-bookmark-icon);
-  }
+  -webkit-mask-image: var(--toolbarButton-bookmark-icon);
+  mask-image: var(--toolbarButton-bookmark-icon);
 }
 
 #viewThumbnail.toolbarButton::before {
-  content: url(images/toolbarButton-viewThumbnail.svg);
-  content: var(--toolbarButton-viewThumbnail-icon);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  #viewThumbnail.toolbarButton::before {
-  content: url(images/toolbarButton-viewThumbnail-dark.svg);
-  content: var(--toolbarButton-viewThumbnail-icon);
-  }
+  -webkit-mask-image: var(--toolbarButton-viewThumbnail-icon);
+  mask-image: var(--toolbarButton-viewThumbnail-icon);
 }
 
 #viewOutline.toolbarButton::before {
-  content: url(images/toolbarButton-viewOutline.svg);
-  content: var(--toolbarButton-viewOutline-icon);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  #viewOutline.toolbarButton::before {
-  content: url(images/toolbarButton-viewOutline-dark.svg);
-  content: var(--toolbarButton-viewOutline-icon);
-  }
+  -webkit-mask-image: var(--toolbarButton-viewOutline-icon);
+  mask-image: var(--toolbarButton-viewOutline-icon);
 }
 html[dir="rtl"] #viewOutline.toolbarButton::before {
   transform: scaleX(-1);
 }
 
 #viewAttachments.toolbarButton::before {
-  content: url(images/toolbarButton-viewAttachments.svg);
-  content: var(--toolbarButton-viewAttachments-icon);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  #viewAttachments.toolbarButton::before {
-  content: url(images/toolbarButton-viewAttachments-dark.svg);
-  content: var(--toolbarButton-viewAttachments-icon);
-  }
+  -webkit-mask-image: var(--toolbarButton-viewAttachments-icon);
+  mask-image: var(--toolbarButton-viewAttachments-icon);
 }
 
 #viewLayers.toolbarButton::before {
-  content: url(images/toolbarButton-viewLayers.svg);
-  content: var(--toolbarButton-viewLayers-icon);
+  -webkit-mask-image: var(--toolbarButton-viewLayers-icon);
+  mask-image: var(--toolbarButton-viewLayers-icon);
 }
 
-@media (prefers-color-scheme: dark) {
-
-  #viewLayers.toolbarButton::before {
-  content: url(images/toolbarButton-viewLayers-dark.svg);
-  content: var(--toolbarButton-viewLayers-icon);
-  }
+#currentOutlineItem.toolbarButton::before {
+  -webkit-mask-image: var(--toolbarButton-currentOutlineItem-icon);
+  mask-image: var(--toolbarButton-currentOutlineItem-icon);
 }
-
-#viewFind.toolbarButton::before {
-  content: url(images/toolbarButton-search.svg);
-  content: var(--toolbarButton-search-icon);
+html[dir="rtl"] #currentOutlineItem.toolbarButton::before {
+  transform: scaleX(-1);
 }
 
-@media (prefers-color-scheme: dark) {
-
-  #viewFind.toolbarButton::before {
-  content: url(images/toolbarButton-search-dark.svg);
-  content: var(--toolbarButton-search-icon);
-  }
+#viewFind.toolbarButton::before {
+  -webkit-mask-image: var(--toolbarButton-search-icon);
+  mask-image: var(--toolbarButton-search-icon);
 }
 
 .toolbarButton.pdfSidebarNotification::after {
@@ -2842,7 +1709,7 @@ html[dir="rtl"] .toolbarButton.pdfSidebarNotification::after {
 .secondaryToolbarButton {
   position: relative;
   margin: 0;
-  padding: 0 0 1px 0;
+  padding: 0 0 1px;
   height: auto;
   min-height: 26px;
   width: auto;
@@ -2867,173 +1734,69 @@ html[dir="rtl"] .secondaryToolbarButton > span {
   padding-left: 4px;
 }
 
-.secondaryToolbarButton.firstPage::before {
-  content: url(images/secondaryToolbarButton-firstPage.svg);
-  content: var(--secondaryToolbarButton-firstPage-icon);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .secondaryToolbarButton.firstPage::before {
-  content: url(images/secondaryToolbarButton-firstPage-dark.svg);
-  content: var(--secondaryToolbarButton-firstPage-icon);
-  }
-}
-
-.secondaryToolbarButton.lastPage::before {
-  content: url(images/secondaryToolbarButton-lastPage.svg);
-  content: var(--secondaryToolbarButton-lastPage-icon);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .secondaryToolbarButton.lastPage::before {
-  content: url(images/secondaryToolbarButton-lastPage-dark.svg);
-  content: var(--secondaryToolbarButton-lastPage-icon);
-  }
-}
-
-.secondaryToolbarButton.rotateCcw::before {
-  content: url(images/secondaryToolbarButton-rotateCcw.svg);
-  content: var(--secondaryToolbarButton-rotateCcw-icon);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .secondaryToolbarButton.rotateCcw::before {
-  content: url(images/secondaryToolbarButton-rotateCcw-dark.svg);
-  content: var(--secondaryToolbarButton-rotateCcw-icon);
-  }
-}
-
-.secondaryToolbarButton.rotateCw::before {
-  content: url(images/secondaryToolbarButton-rotateCw.svg);
-  content: var(--secondaryToolbarButton-rotateCw-icon);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .secondaryToolbarButton.rotateCw::before {
-  content: url(images/secondaryToolbarButton-rotateCw-dark.svg);
-  content: var(--secondaryToolbarButton-rotateCw-icon);
-  }
-}
-
-.secondaryToolbarButton.selectTool::before {
-  content: url(images/secondaryToolbarButton-selectTool.svg);
-  content: var(--secondaryToolbarButton-selectTool-icon);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .secondaryToolbarButton.selectTool::before {
-  content: url(images/secondaryToolbarButton-selectTool-dark.svg);
-  content: var(--secondaryToolbarButton-selectTool-icon);
-  }
-}
-
-.secondaryToolbarButton.handTool::before {
-  content: url(images/secondaryToolbarButton-handTool.svg);
-  content: var(--secondaryToolbarButton-handTool-icon);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .secondaryToolbarButton.handTool::before {
-  content: url(images/secondaryToolbarButton-handTool-dark.svg);
-  content: var(--secondaryToolbarButton-handTool-icon);
-  }
-}
-
-.secondaryToolbarButton.scrollVertical::before {
-  content: url(images/secondaryToolbarButton-scrollVertical.svg);
-  content: var(--secondaryToolbarButton-scrollVertical-icon);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .secondaryToolbarButton.scrollVertical::before {
-  content: url(images/secondaryToolbarButton-scrollVertical-dark.svg);
-  content: var(--secondaryToolbarButton-scrollVertical-icon);
-  }
-}
-
-.secondaryToolbarButton.scrollHorizontal::before {
-  content: url(images/secondaryToolbarButton-scrollHorizontal.svg);
-  content: var(--secondaryToolbarButton-scrollHorizontal-icon);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .secondaryToolbarButton.scrollHorizontal::before {
-  content: url(images/secondaryToolbarButton-scrollHorizontal-dark.svg);
-  content: var(--secondaryToolbarButton-scrollHorizontal-icon);
-  }
+.secondaryToolbarButton.firstPage::before {
+  -webkit-mask-image: var(--secondaryToolbarButton-firstPage-icon);
+  mask-image: var(--secondaryToolbarButton-firstPage-icon);
 }
 
-.secondaryToolbarButton.scrollWrapped::before {
-  content: url(images/secondaryToolbarButton-scrollWrapped.svg);
-  content: var(--secondaryToolbarButton-scrollWrapped-icon);
+.secondaryToolbarButton.lastPage::before {
+  -webkit-mask-image: var(--secondaryToolbarButton-lastPage-icon);
+  mask-image: var(--secondaryToolbarButton-lastPage-icon);
 }
 
-@media (prefers-color-scheme: dark) {
-
-  .secondaryToolbarButton.scrollWrapped::before {
-  content: url(images/secondaryToolbarButton-scrollWrapped-dark.svg);
-  content: var(--secondaryToolbarButton-scrollWrapped-icon);
-  }
+.secondaryToolbarButton.rotateCcw::before {
+  -webkit-mask-image: var(--secondaryToolbarButton-rotateCcw-icon);
+  mask-image: var(--secondaryToolbarButton-rotateCcw-icon);
 }
 
-.secondaryToolbarButton.spreadNone::before {
-  content: url(images/secondaryToolbarButton-spreadNone.svg);
-  content: var(--secondaryToolbarButton-spreadNone-icon);
+.secondaryToolbarButton.rotateCw::before {
+  -webkit-mask-image: var(--secondaryToolbarButton-rotateCw-icon);
+  mask-image: var(--secondaryToolbarButton-rotateCw-icon);
 }
 
-@media (prefers-color-scheme: dark) {
-
-  .secondaryToolbarButton.spreadNone::before {
-  content: url(images/secondaryToolbarButton-spreadNone-dark.svg);
-  content: var(--secondaryToolbarButton-spreadNone-icon);
-  }
+.secondaryToolbarButton.selectTool::before {
+  -webkit-mask-image: var(--secondaryToolbarButton-selectTool-icon);
+  mask-image: var(--secondaryToolbarButton-selectTool-icon);
 }
 
-.secondaryToolbarButton.spreadOdd::before {
-  content: url(images/secondaryToolbarButton-spreadOdd.svg);
-  content: var(--secondaryToolbarButton-spreadOdd-icon);
+.secondaryToolbarButton.handTool::before {
+  -webkit-mask-image: var(--secondaryToolbarButton-handTool-icon);
+  mask-image: var(--secondaryToolbarButton-handTool-icon);
 }
 
-@media (prefers-color-scheme: dark) {
-
-  .secondaryToolbarButton.spreadOdd::before {
-  content: url(images/secondaryToolbarButton-spreadOdd-dark.svg);
-  content: var(--secondaryToolbarButton-spreadOdd-icon);
-  }
+.secondaryToolbarButton.scrollVertical::before {
+  -webkit-mask-image: var(--secondaryToolbarButton-scrollVertical-icon);
+  mask-image: var(--secondaryToolbarButton-scrollVertical-icon);
 }
 
-.secondaryToolbarButton.spreadEven::before {
-  content: url(images/secondaryToolbarButton-spreadEven.svg);
-  content: var(--secondaryToolbarButton-spreadEven-icon);
+.secondaryToolbarButton.scrollHorizontal::before {
+  -webkit-mask-image: var(--secondaryToolbarButton-scrollHorizontal-icon);
+  mask-image: var(--secondaryToolbarButton-scrollHorizontal-icon);
 }
 
-@media (prefers-color-scheme: dark) {
+.secondaryToolbarButton.scrollWrapped::before {
+  -webkit-mask-image: var(--secondaryToolbarButton-scrollWrapped-icon);
+  mask-image: var(--secondaryToolbarButton-scrollWrapped-icon);
+}
 
-  .secondaryToolbarButton.spreadEven::before {
-  content: url(images/secondaryToolbarButton-spreadEven-dark.svg);
-  content: var(--secondaryToolbarButton-spreadEven-icon);
-  }
+.secondaryToolbarButton.spreadNone::before {
+  -webkit-mask-image: var(--secondaryToolbarButton-spreadNone-icon);
+  mask-image: var(--secondaryToolbarButton-spreadNone-icon);
 }
 
-.secondaryToolbarButton.documentProperties::before {
-  content: url(images/secondaryToolbarButton-documentProperties.svg);
-  content: var(--secondaryToolbarButton-documentProperties-icon);
+.secondaryToolbarButton.spreadOdd::before {
+  -webkit-mask-image: var(--secondaryToolbarButton-spreadOdd-icon);
+  mask-image: var(--secondaryToolbarButton-spreadOdd-icon);
 }
 
-@media (prefers-color-scheme: dark) {
+.secondaryToolbarButton.spreadEven::before {
+  -webkit-mask-image: var(--secondaryToolbarButton-spreadEven-icon);
+  mask-image: var(--secondaryToolbarButton-spreadEven-icon);
+}
 
-  .secondaryToolbarButton.documentProperties::before {
-  content: url(images/secondaryToolbarButton-documentProperties-dark.svg);
-  content: var(--secondaryToolbarButton-documentProperties-icon);
-  }
+.secondaryToolbarButton.documentProperties::before {
+  -webkit-mask-image: var(--secondaryToolbarButton-documentProperties-icon);
+  mask-image: var(--secondaryToolbarButton-documentProperties-icon);
 }
 
 .verticalToolbarSeparator {
@@ -3041,16 +1804,7 @@ html[dir="rtl"] .secondaryToolbarButton > span {
   padding: 11px 0;
   margin: 5px 2px;
   width: 1px;
-  background-color: rgba(0, 0, 0, 0.3);
-  background-color: var(--separator-color);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .verticalToolbarSeparator {
-  background-color: rgba(0, 0, 0, 0.3);
   background-color: var(--separator-color);
-  }
 }
 html[dir="ltr"] .verticalToolbarSeparator {
   margin-left: 2px;
@@ -3061,64 +1815,28 @@ html[dir="rtl"] .verticalToolbarSeparator {
 
 .horizontalToolbarSeparator {
   display: block;
-  margin: 6px 0 5px 0;
+  margin: 6px 0 5px;
   height: 1px;
   width: 100%;
-  border-top: 1px solid rgba(222, 222, 222, 1);
-  border-top: 1px solid var(--doorhanger-separator-color);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .horizontalToolbarSeparator {
-  border-top: 1px solid rgba(92, 92, 97, 1);
   border-top: 1px solid var(--doorhanger-separator-color);
-  }
 }
 
 .toolbarField {
   padding: 4px 7px;
-  margin: 3px 0 3px 0;
+  margin: 3px 0;
   border-radius: 2px;
-  background-color: rgba(255, 255, 255, 1);
   background-color: var(--field-bg-color);
   background-clip: padding-box;
   border-width: 1px;
   border-style: solid;
-  border-color: rgba(187, 187, 188, 1);
   border-color: var(--field-border-color);
   box-shadow: none;
-  color: rgba(6, 6, 6, 1);
   color: var(--field-color);
   font-size: 12px;
   line-height: 16px;
   outline-style: none;
 }
 
-@media (prefers-color-scheme: dark) {
-
-  .toolbarField {
-  color: rgba(250, 250, 250, 1);
-  color: var(--field-color);
-  }
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .toolbarField {
-  border-color: rgba(115, 115, 115, 1);
-  border-color: var(--field-border-color);
-  }
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .toolbarField {
-  background-color: rgba(64, 64, 68, 1);
-  background-color: var(--field-bg-color);
-  }
-}
-
 .toolbarField[type="checkbox"] {
   opacity: 0;
   position: absolute !important;
@@ -3134,7 +1852,6 @@ html[dir="rtl"] .toolbarField[type="checkbox"] {
 }
 
 .toolbarField.pageNumber {
-  -webkit-appearance: none;
   -moz-appearance: textfield; /* hides the spinner in moz */
   min-width: 16px;
   text-align: right;
@@ -3142,20 +1859,11 @@ html[dir="rtl"] .toolbarField[type="checkbox"] {
 }
 
 .toolbarField.pageNumber.visiblePageIsLoading {
-  background-image: url(images/loading.svg);
   background-image: var(--loading-icon);
   background-repeat: no-repeat;
   background-position: 3px;
 }
 
-@media (prefers-color-scheme: dark) {
-
-  .toolbarField.pageNumber.visiblePageIsLoading {
-  background-image: url(images/loading-dark.svg);
-  background-image: var(--loading-icon);
-  }
-}
-
 .toolbarField.pageNumber::-webkit-inner-spin-button,
 .toolbarField.pageNumber::-webkit-outer-spin-button {
   -webkit-appearance: none;
@@ -3172,26 +1880,16 @@ html[dir="rtl"] .toolbarField[type="checkbox"] {
   margin: 2px;
   border: 1px solid rgba(0, 0, 0, 0);
   border-radius: 2px;
-  color: rgba(12, 12, 13, 1);
   color: var(--main-color);
   font-size: 12px;
   line-height: 14px;
   text-align: left;
   -webkit-user-select: none;
      -moz-user-select: none;
-      -ms-user-select: none;
           user-select: none;
   cursor: default;
 }
 
-@media (prefers-color-scheme: dark) {
-
-  .toolbarLabel {
-  color: rgba(249, 249, 250, 1);
-  color: var(--main-color);
-  }
-}
-
 html[dir="ltr"] #numPages.toolbarLabel {
   padding-left: 2px;
 }
@@ -3215,7 +1913,7 @@ html[dir="rtl"] #numPages.toolbarLabel {
 }
 
 .thumbnail {
-  margin: 0 10px 5px 10px;
+  margin: 0 10px 5px;
 }
 html[dir="ltr"] .thumbnail {
   float: left;
@@ -3234,7 +1932,7 @@ html[dir="rtl"] .thumbnail {
 
 .thumbnail:not([data-loaded]) {
   border: 1px dashed rgba(132, 132, 132, 1);
-  margin: -1px 9px 4px 9px;
+  margin: -1px 9px 4px;
 }
 
 .thumbnailImage {
@@ -3256,55 +1954,23 @@ a:focus > .thumbnail > .thumbnailSelectionRing > .thumbnailImage,
   opacity: 0.9;
 }
 
-a:focus > .thumbnail > .thumbnailSelectionRing {
-  background-color: rgba(0, 0, 0, 0.15);
-  background-color: var(--sidebaritem-bg-color);
-  background-clip: padding-box;
-  color: rgba(255, 255, 255, 0.9);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  a:focus > .thumbnail > .thumbnailSelectionRing {
-  background-color: rgba(255, 255, 255, 0.15);
-  background-color: var(--sidebaritem-bg-color);
-  }
-}
-
+a:focus > .thumbnail > .thumbnailSelectionRing,
 .thumbnail:hover > .thumbnailSelectionRing {
-  background-color: rgba(0, 0, 0, 0.15);
   background-color: var(--sidebaritem-bg-color);
   background-clip: padding-box;
   color: rgba(255, 255, 255, 0.9);
 }
 
-@media (prefers-color-scheme: dark) {
-
-  .thumbnail:hover > .thumbnailSelectionRing {
-  background-color: rgba(255, 255, 255, 0.15);
-  background-color: var(--sidebaritem-bg-color);
-  }
-}
-
 .thumbnail.selected > .thumbnailSelectionRing > .thumbnailImage {
   opacity: 1;
 }
 
 .thumbnail.selected > .thumbnailSelectionRing {
-  background-color: rgba(0, 0, 0, 0.15);
   background-color: var(--sidebaritem-bg-color);
   background-clip: padding-box;
   color: rgba(255, 255, 255, 1);
 }
 
-@media (prefers-color-scheme: dark) {
-
-  .thumbnail.selected > .thumbnailSelectionRing {
-  background-color: rgba(255, 255, 255, 0.15);
-  background-color: var(--sidebaritem-bg-color);
-  }
-}
-
 #outlineView,
 #attachmentsView,
 #layersView {
@@ -3317,7 +1983,6 @@ a:focus > .thumbnail > .thumbnailSelectionRing {
   -webkit-overflow-scrolling: touch;
   -webkit-user-select: none;
      -moz-user-select: none;
-      -ms-user-select: none;
           user-select: none;
 }
 
@@ -3340,25 +2005,15 @@ html[dir="rtl"] .treeItem > .treeItems {
   height: auto;
   margin-bottom: 1px;
   border-radius: 2px;
-  color: rgba(0, 0, 0, 0.8);
-  color: var(--outline-color);
+  color: var(--treeitem-color);
   font-size: 13px;
   line-height: 15px;
   -webkit-user-select: none;
      -moz-user-select: none;
-      -ms-user-select: none;
           user-select: none;
   white-space: normal;
   cursor: pointer;
 }
-
-@media (prefers-color-scheme: dark) {
-
-  .treeItem > a {
-  color: rgba(255, 255, 255, 0.8);
-  color: var(--outline-color);
-  }
-}
 html[dir="ltr"] .treeItem > a {
   padding: 2px 0 5px 4px;
 }
@@ -3383,30 +2038,12 @@ html[dir="rtl"] #layersView .treesItem > a > label {
   color: rgba(255, 255, 255, 0.5);
 }
 .treeItemToggler::before {
-  content: url(images/treeitem-expanded.svg);
-  content: var(--treeitem-expanded-icon);
-  display: inline-block;
-  position: absolute;
-  max-width: 16px;
-}
-@media (prefers-color-scheme: dark) {
-
-  .treeItemToggler::before {
-  content: url(images/treeitem-expanded-dark.svg);
-  content: var(--treeitem-expanded-icon);
-  }
+  -webkit-mask-image: var(--treeitem-expanded-icon);
+  mask-image: var(--treeitem-expanded-icon);
 }
 .treeItemToggler.treeItemsHidden::before {
-  content: url(images/treeitem-collapsed.svg);
-  content: var(--treeitem-collapsed-icon);
-  max-width: 16px;
-}
-@media (prefers-color-scheme: dark) {
-
-  .treeItemToggler.treeItemsHidden::before {
-  content: url(images/treeitem-collapsed-dark.svg);
-  content: var(--treeitem-collapsed-icon);
-  }
+  -webkit-mask-image: var(--treeitem-collapsed-icon);
+  mask-image: var(--treeitem-collapsed-icon);
 }
 html[dir="rtl"] .treeItemToggler.treeItemsHidden::before {
   transform: scaleX(-1);
@@ -3427,135 +2064,19 @@ html[dir="rtl"] .treeItemToggler::before {
   left: 4px;
 }
 
-.treeItemToggler:hover {
-  background-color: rgba(0, 0, 0, 0.15);
-  background-color: var(--sidebaritem-bg-color);
-  background-clip: padding-box;
-  border-radius: 2px;
-  color: rgba(0, 0, 0, 0.9);
-  color: var(--outline-hover-color);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .treeItemToggler:hover {
-  color: rgba(255, 255, 255, 0.9);
-  color: var(--outline-hover-color);
-  }
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .treeItemToggler:hover {
-  background-color: rgba(255, 255, 255, 0.15);
-  background-color: var(--sidebaritem-bg-color);
-  }
-}
-
-.treeItemToggler:hover + a {
-  background-color: rgba(0, 0, 0, 0.15);
-  background-color: var(--sidebaritem-bg-color);
-  background-clip: padding-box;
-  border-radius: 2px;
-  color: rgba(0, 0, 0, 0.9);
-  color: var(--outline-hover-color);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .treeItemToggler:hover + a {
-  color: rgba(255, 255, 255, 0.9);
-  color: var(--outline-hover-color);
-  }
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .treeItemToggler:hover + a {
-  background-color: rgba(255, 255, 255, 0.15);
-  background-color: var(--sidebaritem-bg-color);
-  }
-}
-
-.treeItemToggler:hover ~ .treeItems {
-  background-color: rgba(0, 0, 0, 0.15);
-  background-color: var(--sidebaritem-bg-color);
-  background-clip: padding-box;
-  border-radius: 2px;
-  color: rgba(0, 0, 0, 0.9);
-  color: var(--outline-hover-color);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .treeItemToggler:hover ~ .treeItems {
-  color: rgba(255, 255, 255, 0.9);
-  color: var(--outline-hover-color);
-  }
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .treeItemToggler:hover ~ .treeItems {
-  background-color: rgba(255, 255, 255, 0.15);
-  background-color: var(--sidebaritem-bg-color);
-  }
+.treeItem.selected > a {
+  background-color: var(--treeitem-selected-bg-color);
+  color: var(--treeitem-selected-color);
 }
 
+.treeItemToggler:hover,
+.treeItemToggler:hover + a,
+.treeItemToggler:hover ~ .treeItems,
 .treeItem > a:hover {
-  background-color: rgba(0, 0, 0, 0.15);
   background-color: var(--sidebaritem-bg-color);
   background-clip: padding-box;
   border-radius: 2px;
-  color: rgba(0, 0, 0, 0.9);
-  color: var(--outline-hover-color);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .treeItem > a:hover {
-  color: rgba(255, 255, 255, 0.9);
-  color: var(--outline-hover-color);
-  }
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .treeItem > a:hover {
-  background-color: rgba(255, 255, 255, 0.15);
-  background-color: var(--sidebaritem-bg-color);
-  }
-}
-
-.treeItem.selected {
-  background-color: rgba(0, 0, 0, 1);
-  background-color: var(--outline-active-bg-color);
-  background-clip: padding-box;
-  color: rgba(0, 0, 0, 0.08);
-  color: var(--outline-active-color);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .treeItem.selected {
-  color: rgba(255, 255, 255, 0.08);
-  color: var(--outline-active-color);
-  }
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .treeItem.selected {
-  background-color: rgba(255, 255, 255, 1);
-  background-color: var(--outline-active-bg-color);
-  }
-}
-
-.noResults {
-  font-size: 12px;
-  color: rgba(255, 255, 255, 0.8);
-  font-style: italic;
-  cursor: default;
+  color: var(--treeitem-hover-color);
 }
 
 /* TODO: file FF bug to support ::-moz-selection:window-inactive
@@ -3569,9 +2090,7 @@ html[dir="rtl"] .treeItemToggler::before {
 }
 
 #errorWrapper {
-  background: none repeat scroll 0 0 rgba(255, 74, 74, 1);
   background: none repeat scroll 0 0 var(--errorWrapper-bg-color);
-  color: rgba(12, 12, 13, 1);
   color: var(--main-color);
   left: 0;
   position: absolute;
@@ -3580,25 +2099,6 @@ html[dir="rtl"] .treeItemToggler::before {
   padding: 3px 6px;
 }
 
-@media (prefers-color-scheme: dark) {
-
-  #errorWrapper {
-  color: rgba(249, 249, 250, 1);
-  color: var(--main-color);
-  }
-}
-
-@media (prefers-color-scheme: dark) {
-
-  #errorWrapper {
-  background: none repeat scroll 0 0 rgba(199, 17, 17, 1);
-  background: none repeat scroll 0 0 var(--errorWrapper-bg-color);
-  }
-}
-.loadingInProgress #errorWrapper {
-  top: 37px;
-}
-
 #errorMessageLeft {
   float: left;
 }
@@ -3608,45 +2108,18 @@ html[dir="rtl"] .treeItemToggler::before {
 }
 
 #errorMoreInfo {
-  background-color: rgba(255, 255, 255, 1);
   background-color: var(--field-bg-color);
-  color: rgba(6, 6, 6, 1);
   color: var(--field-color);
-  border: 1px solid rgba(187, 187, 188, 1);
   border: 1px solid var(--field-border-color);
   padding: 3px;
   margin: 3px;
   width: 98%;
 }
 
-@media (prefers-color-scheme: dark) {
-
-  #errorMoreInfo {
-  border: 1px solid rgba(115, 115, 115, 1);
-  border: 1px solid var(--field-border-color);
-  }
-}
-
-@media (prefers-color-scheme: dark) {
-
-  #errorMoreInfo {
-  color: rgba(250, 250, 250, 1);
-  color: var(--field-color);
-  }
-}
-
-@media (prefers-color-scheme: dark) {
-
-  #errorMoreInfo {
-  background-color: rgba(64, 64, 68, 1);
-  background-color: var(--field-bg-color);
-  }
-}
-
 .overlayButton {
   width: auto;
-  margin: 3px 4px 2px 4px !important;
-  padding: 2px 11px 2px 11px;
+  margin: 3px 4px 2px !important;
+  padding: 2px 11px;
 }
 
 #overlayContainer {
@@ -3672,33 +2145,15 @@ html[dir="rtl"] .treeItemToggler::before {
   display: inline-block;
   padding: 15px;
   border-spacing: 4px;
-  color: rgba(12, 12, 13, 1);
   color: var(--main-color);
   font-size: 12px;
   line-height: 14px;
-  background-color: rgba(255, 255, 255, 1);
   background-color: var(--doorhanger-bg-color);
   border: 1px solid rgba(0, 0, 0, 0.5);
   border-radius: 4px;
   box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
 }
 
-@media (prefers-color-scheme: dark) {
-
-  #overlayContainer > .container > .dialog {
-  background-color: rgba(74, 74, 79, 1);
-  background-color: var(--doorhanger-bg-color);
-  }
-}
-
-@media (prefers-color-scheme: dark) {
-
-  #overlayContainer > .container > .dialog {
-  color: rgba(249, 249, 250, 1);
-  color: var(--main-color);
-  }
-}
-
 .dialog > .row {
   display: table-row;
 }
@@ -3713,19 +2168,10 @@ html[dir="rtl"] .treeItemToggler::before {
 
 .dialog .separator {
   display: block;
-  margin: 4px 0 4px 0;
+  margin: 4px 0;
   height: 1px;
   width: 100%;
-  background-color: rgba(0, 0, 0, 0.3);
-  background-color: var(--separator-color);
-}
-
-@media (prefers-color-scheme: dark) {
-
-  .dialog .separator {
-  background-color: rgba(0, 0, 0, 0.3);
   background-color: var(--separator-color);
-  }
 }
 
 .dialog .buttonRow {
@@ -3951,17 +2397,24 @@ html[dir="rtl"] #documentPropertiesOverlay .row > * {
   }
   /* wrapper around (scaled) print canvas elements */
   #printContainer > div {
-    position: relative;
-    top: 0;
-    left: 0;
-    width: 1px;
-    height: 1px;
-    overflow: visible;
     page-break-after: always;
     page-break-inside: avoid;
+
+    /* The wrapper always cover the whole page. */
+    height: 100%;
+    width: 100%;
+
+    display: flex;
+    flex-direction: column;
+    justify-content: center;
+    align-items: center;
   }
   #printContainer canvas,
   #printContainer img {
+    /* The intrinsic canvas / image size will make sure that we fit the page. */
+    max-width: 100%;
+    max-height: 100%;
+
     direction: ltr;
     display: block;
   }
@@ -3984,15 +2437,15 @@ html[dir="rtl"] #documentPropertiesOverlay .row > * {
 }
 
 @media all and (max-width: 840px) {
-  #sidebarContent {
-    background-color: rgba(0, 0, 0, 0.7);
+  #sidebarContainer {
+    background-color: var(--sidebar-narrow-bg-color);
   }
 
   html[dir="ltr"] #outerContainer.sidebarOpen #viewerContainer {
-    left: 0px !important;
+    left: 0 !important;
   }
   html[dir="rtl"] #outerContainer.sidebarOpen #viewerContainer {
-    right: 0px !important;
+    right: 0 !important;
   }
 
   #outerContainer .hiddenLargeView,
diff --git a/third-party/pdfjs/web/viewer.html b/third-party/pdfjs/web/viewer.html
index ed57f3f1c..fdfc173b0 100644
--- a/third-party/pdfjs/web/viewer.html
+++ b/third-party/pdfjs/web/viewer.html
@@ -1,7 +1,6 @@
 <!DOCTYPE html>
 <!--
 Copyright 2012 Mozilla Foundation
-Modifications made for Epiphany by Jan-Michael Brummer <jan brummer tabos org>
 
 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
@@ -42,24 +41,36 @@ See https://github.com/adobe-type-tools/cmap-resources
 
   </head>
 
-  <body tabindex="1" class="loadingInProgress">
+  <body tabindex="1">
     <div id="outerContainer">
 
       <div id="sidebarContainer">
         <div id="toolbarSidebar">
-          <div class="splitToolbarButton toggled">
-            <button id="viewThumbnail" class="toolbarButton toggled" title="Show Thumbnails" tabindex="2" 
data-l10n-id="thumbs">
-               <span data-l10n-id="thumbs_label">Thumbnails</span>
-            </button>
-            <button id="viewOutline" class="toolbarButton" title="Show Document Outline (double-click to 
expand/collapse all items)" tabindex="3" data-l10n-id="document_outline">
-               <span data-l10n-id="document_outline_label">Document Outline</span>
-            </button>
-            <button id="viewAttachments" class="toolbarButton" title="Show Attachments" tabindex="4" 
data-l10n-id="attachments">
-               <span data-l10n-id="attachments_label">Attachments</span>
-            </button>
-            <button id="viewLayers" class="toolbarButton" title="Show Layers (double-click to reset all 
layers to the default state)" tabindex="5" data-l10n-id="layers">
-               <span data-l10n-id="layers_label">Layers</span>
-            </button>
+          <div id="toolbarSidebarLeft">
+            <div class="splitToolbarButton toggled">
+              <button id="viewThumbnail" class="toolbarButton toggled" title="Show Thumbnails" tabindex="2" 
data-l10n-id="thumbs">
+                 <span data-l10n-id="thumbs_label">Thumbnails</span>
+              </button>
+              <button id="viewOutline" class="toolbarButton" title="Show Document Outline (double-click to 
expand/collapse all items)" tabindex="3" data-l10n-id="document_outline">
+                 <span data-l10n-id="document_outline_label">Document Outline</span>
+              </button>
+              <button id="viewAttachments" class="toolbarButton" title="Show Attachments" tabindex="4" 
data-l10n-id="attachments">
+                 <span data-l10n-id="attachments_label">Attachments</span>
+              </button>
+              <button id="viewLayers" class="toolbarButton" title="Show Layers (double-click to reset all 
layers to the default state)" tabindex="5" data-l10n-id="layers">
+                 <span data-l10n-id="layers_label">Layers</span>
+              </button>
+            </div>
+          </div>
+
+          <div id="toolbarSidebarRight">
+            <div id="outlineOptionsContainer" class="hidden">
+              <div class="verticalToolbarSeparator"></div>
+
+              <button id="currentOutlineItem" class="toolbarButton" disabled="disabled" title="Find Current 
Outline Item" tabindex="6" data-l10n-id="current_outline_item">
+                <span data-l10n-id="current_outline_item_label">Current Outline Item</span>
+              </button>
+            </div>
           </div>
         </div>
         <div id="sidebarContent">
@@ -72,7 +83,7 @@ See https://github.com/adobe-type-tools/cmap-resources
           <div id="layersView" class="hidden">
           </div>
         </div>
-        <div id="sidebarResizer" class="hidden"></div>
+        <div id="sidebarResizer"></div>
       </div>  <!-- sidebarContainer -->
 
       <div id="mainContainer">
@@ -125,7 +136,7 @@ See https://github.com/adobe-type-tools/cmap-resources
               <span data-l10n-id="download_label">Download</span>
             </button>
 
-            <a href="#" id="secondaryViewBookmark" class="secondaryToolbarButton bookmark hidden" 
title="Current view (copy or open in new window)" tabindex="55" data-l10n-id="bookmark">
+            <a href="#" id="secondaryViewBookmark" class="secondaryToolbarButton bookmark visibleSmallView" 
title="Current view (copy or open in new window)" tabindex="55" data-l10n-id="bookmark">
               <span data-l10n-id="bookmark_label">Current View</span>
             </a>
 
@@ -192,11 +203,11 @@ See https://github.com/adobe-type-tools/cmap-resources
           <div id="toolbarContainer">
             <div id="toolbarViewer">
               <div id="toolbarViewerLeft">
-                <button id="sidebarToggle" class="toolbarButton" title="Toggle Sidebar" tabindex="11" 
data-l10n-id="toggle_sidebar">
+                <button id="sidebarToggle" class="toolbarButton" title="Toggle Sidebar" tabindex="11" 
data-l10n-id="toggle_sidebar" aria-expanded="false" aria-controls="sidebarContainer">
                   <span data-l10n-id="toggle_sidebar_label">Toggle Sidebar</span>
                 </button>
                 <div class="toolbarButtonSpacer"></div>
-                <button id="viewFind" class="toolbarButton" title="Find in Document" tabindex="12" 
data-l10n-id="findbar">
+                <button id="viewFind" class="toolbarButton" title="Find in Document" tabindex="12" 
data-l10n-id="findbar" aria-expanded="false" aria-controls="findbar">
                   <span data-l10n-id="findbar_label">Find</span>
                 </button>
                 <div class="splitToolbarButton hiddenSmallView">
@@ -227,13 +238,13 @@ See https://github.com/adobe-type-tools/cmap-resources
                 <button id="download" class="toolbarButton download hiddenMediumView" title="Download" 
tabindex="34" data-l10n-id="download">
                   <span data-l10n-id="download_label">Download</span>
                 </button>
-                <a href="#" id="viewBookmark" class="toolbarButton bookmark hidden" title="Current view 
(copy or open in new window)" tabindex="35" data-l10n-id="bookmark">
+                <a href="#" id="viewBookmark" class="toolbarButton bookmark hiddenSmallView" title="Current 
view (copy or open in new window)" tabindex="35" data-l10n-id="bookmark">
                   <span data-l10n-id="bookmark_label">Current View</span>
                 </a>
 
                 <div class="verticalToolbarSeparator hiddenSmallView"></div>
 
-                <button id="secondaryToolbarToggle" class="toolbarButton" title="Tools" tabindex="36" 
data-l10n-id="tools">
+                <button id="secondaryToolbarToggle" class="toolbarButton" title="Tools" tabindex="36" 
data-l10n-id="tools" aria-expanded="false" aria-controls="secondaryToolbar">
                   <span data-l10n-id="tools_label">Tools</span>
                 </button>
               </div>
@@ -275,17 +286,6 @@ See https://github.com/adobe-type-tools/cmap-resources
           </div>
         </div>
 
-        <menu type="context" id="viewerContextMenu">
-          <menuitem id="contextFirstPage" label="First Page"
-                    data-l10n-id="first_page"></menuitem>
-          <menuitem id="contextLastPage" label="Last Page"
-                    data-l10n-id="last_page"></menuitem>
-          <menuitem id="contextPageRotateCw" label="Rotate Clockwise"
-                    data-l10n-id="page_rotate_cw"></menuitem>
-          <menuitem id="contextPageRotateCcw" label="Rotate Counter-Clockwise"
-                    data-l10n-id="page_rotate_ccw"></menuitem>
-        </menu>
-
         <div id="viewerContainer" tabindex="0">
           <div id="viewer" class="pdfViewer"></div>
         </div>
@@ -397,4 +397,3 @@ See https://github.com/adobe-type-tools/cmap-resources
     <div id="printContainer"></div>
   </body>
 </html>
-
diff --git a/third-party/pdfjs/web/viewer.js b/third-party/pdfjs/web/viewer.js
index 1d54e92c7..28d471e17 100644
--- a/third-party/pdfjs/web/viewer.js
+++ b/third-party/pdfjs/web/viewer.js
@@ -2,7 +2,7 @@
  * @licstart The following is the entire license notice for the
  * Javascript code in this page
  *
- * Copyright 2020 Mozilla Foundation
+ * Copyright 2021 Mozilla Foundation
  * Modifications made for Epiphany by Jan-Michael Brummer <jan brummer tabos org>
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -21,279 +21,330 @@
  * Javascript code in this page
  */
 
-/******/ (function(modules) { // webpackBootstrap
-/******/       // The module cache
-/******/       var installedModules = {};
-/******/
-/******/       // The require function
-/******/       function __webpack_require__(moduleId) {
-/******/
-/******/               // Check if module is in cache
-/******/               if(installedModules[moduleId]) {
-/******/                       return installedModules[moduleId].exports;
-/******/               }
-/******/               // Create a new module (and put it into the cache)
-/******/               var module = installedModules[moduleId] = {
-/******/                       i: moduleId,
-/******/                       l: false,
-/******/                       exports: {}
-/******/               };
-/******/
-/******/               // Execute the module function
-/******/               modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/               // Flag the module as loaded
-/******/               module.l = true;
-/******/
-/******/               // Return the exports of the module
-/******/               return module.exports;
-/******/       }
-/******/
-/******/
-/******/       // expose the modules object (__webpack_modules__)
-/******/       __webpack_require__.m = modules;
-/******/
-/******/       // expose the module cache
-/******/       __webpack_require__.c = installedModules;
-/******/
-/******/       // define getter function for harmony exports
-/******/       __webpack_require__.d = function(exports, name, getter) {
-/******/               if(!__webpack_require__.o(exports, name)) {
-/******/                       Object.defineProperty(exports, name, { enumerable: true, get: getter });
-/******/               }
-/******/       };
-/******/
-/******/       // define __esModule on exports
-/******/       __webpack_require__.r = function(exports) {
-/******/               if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
-/******/                       Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
-/******/               }
-/******/               Object.defineProperty(exports, '__esModule', { value: true });
-/******/       };
-/******/
-/******/       // create a fake namespace object
-/******/       // mode & 1: value is a module id, require it
-/******/       // mode & 2: merge all properties of value into the ns
-/******/       // mode & 4: return value when already ns object
-/******/       // mode & 8|1: behave like require
-/******/       __webpack_require__.t = function(value, mode) {
-/******/               if(mode & 1) value = __webpack_require__(value);
-/******/               if(mode & 8) return value;
-/******/               if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
-/******/               var ns = Object.create(null);
-/******/               __webpack_require__.r(ns);
-/******/               Object.defineProperty(ns, 'default', { enumerable: true, value: value });
-/******/               if(mode & 2 && typeof value != 'string') for(var key in value) 
__webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
-/******/               return ns;
-/******/       };
-/******/
-/******/       // getDefaultExport function for compatibility with non-harmony modules
-/******/       __webpack_require__.n = function(module) {
-/******/               var getter = module && module.__esModule ?
-/******/                       function getDefault() { return module['default']; } :
-/******/                       function getModuleExports() { return module; };
-/******/               __webpack_require__.d(getter, 'a', getter);
-/******/               return getter;
-/******/       };
-/******/
-/******/       // Object.prototype.hasOwnProperty.call
-/******/       __webpack_require__.o = function(object, property) { return 
Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/       // __webpack_public_path__
-/******/       __webpack_require__.p = "";
-/******/
-/******/
-/******/       // Load entry module and return exports
-/******/       return __webpack_require__(__webpack_require__.s = 0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports, __webpack_require__) {
+/******/ (() => { // webpackBootstrap
+/******/       "use strict";
+/******/       var __webpack_modules__ = ([
+/* 0 */,
+/* 1 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 
-"use strict";
 
 
-;
-let pdfjsWebApp, pdfjsWebAppOptions;
-{
-  pdfjsWebApp = __webpack_require__(1);
-  pdfjsWebAppOptions = __webpack_require__(3);
-}
-;
-{
-  __webpack_require__(35);
-}
-;
-{
-  __webpack_require__(40);
-}
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports.OptionKind = exports.AppOptions = void 0;
 
-function getViewerConfiguration() {
-  return {
-    appContainer: document.body,
-    mainContainer: document.getElementById("viewerContainer"),
-    viewerContainer: document.getElementById("viewer"),
-    eventBus: null,
-    toolbar: {
-      container: document.getElementById("toolbarViewer"),
-      numPages: document.getElementById("numPages"),
-      pageNumber: document.getElementById("pageNumber"),
-      scaleSelectContainer: document.getElementById("scaleSelectContainer"),
-      scaleSelect: document.getElementById("scaleSelect"),
-      customScaleOption: document.getElementById("customScaleOption"),
-      previous: document.getElementById("previous"),
-      next: document.getElementById("next"),
-      zoomIn: document.getElementById("zoomIn"),
-      zoomOut: document.getElementById("zoomOut"),
-      viewFind: document.getElementById("viewFind"),
-      openFile: document.getElementById("openFile"),
-      print: document.getElementById("print"),
-      presentationModeButton: document.getElementById("presentationMode"),
-      download: document.getElementById("download"),
-      viewBookmark: document.getElementById("viewBookmark")
-    },
-    secondaryToolbar: {
-      toolbar: document.getElementById("secondaryToolbar"),
-      toggleButton: document.getElementById("secondaryToolbarToggle"),
-      toolbarButtonContainer: document.getElementById("secondaryToolbarButtonContainer"),
-      presentationModeButton: document.getElementById("secondaryPresentationMode"),
-      openFileButton: document.getElementById("secondaryOpenFile"),
-      printButton: document.getElementById("secondaryPrint"),
-      downloadButton: document.getElementById("secondaryDownload"),
-      viewBookmarkButton: document.getElementById("secondaryViewBookmark"),
-      firstPageButton: document.getElementById("firstPage"),
-      lastPageButton: document.getElementById("lastPage"),
-      pageRotateCwButton: document.getElementById("pageRotateCw"),
-      pageRotateCcwButton: document.getElementById("pageRotateCcw"),
-      cursorSelectToolButton: document.getElementById("cursorSelectTool"),
-      cursorHandToolButton: document.getElementById("cursorHandTool"),
-      scrollVerticalButton: document.getElementById("scrollVertical"),
-      scrollHorizontalButton: document.getElementById("scrollHorizontal"),
-      scrollWrappedButton: document.getElementById("scrollWrapped"),
-      spreadNoneButton: document.getElementById("spreadNone"),
-      spreadOddButton: document.getElementById("spreadOdd"),
-      spreadEvenButton: document.getElementById("spreadEven"),
-      documentPropertiesButton: document.getElementById("documentProperties")
-    },
-    fullscreen: {
-      contextFirstPage: document.getElementById("contextFirstPage"),
-      contextLastPage: document.getElementById("contextLastPage"),
-      contextPageRotateCw: document.getElementById("contextPageRotateCw"),
-      contextPageRotateCcw: document.getElementById("contextPageRotateCcw")
-    },
-    sidebar: {
-      outerContainer: document.getElementById("outerContainer"),
-      viewerContainer: document.getElementById("viewerContainer"),
-      toggleButton: document.getElementById("sidebarToggle"),
-      thumbnailButton: document.getElementById("viewThumbnail"),
-      outlineButton: document.getElementById("viewOutline"),
-      attachmentsButton: document.getElementById("viewAttachments"),
-      layersButton: document.getElementById("viewLayers"),
-      thumbnailView: document.getElementById("thumbnailView"),
-      outlineView: document.getElementById("outlineView"),
-      attachmentsView: document.getElementById("attachmentsView"),
-      layersView: document.getElementById("layersView")
-    },
-    sidebarResizer: {
-      outerContainer: document.getElementById("outerContainer"),
-      resizer: document.getElementById("sidebarResizer")
-    },
-    findBar: {
-      bar: document.getElementById("findbar"),
-      toggleButton: document.getElementById("viewFind"),
-      findField: document.getElementById("findInput"),
-      highlightAllCheckbox: document.getElementById("findHighlightAll"),
-      caseSensitiveCheckbox: document.getElementById("findMatchCase"),
-      entireWordCheckbox: document.getElementById("findEntireWord"),
-      findMsg: document.getElementById("findMsg"),
-      findResultsCount: document.getElementById("findResultsCount"),
-      findPreviousButton: document.getElementById("findPrevious"),
-      findNextButton: document.getElementById("findNext")
-    },
-    passwordOverlay: {
-      overlayName: "passwordOverlay",
-      container: document.getElementById("passwordOverlay"),
-      label: document.getElementById("passwordText"),
-      input: document.getElementById("password"),
-      submitButton: document.getElementById("passwordSubmit"),
-      cancelButton: document.getElementById("passwordCancel")
-    },
-    documentProperties: {
-      overlayName: "documentPropertiesOverlay",
-      container: document.getElementById("documentPropertiesOverlay"),
-      closeButton: document.getElementById("documentPropertiesClose"),
-      fields: {
-        fileName: document.getElementById("fileNameField"),
-        fileSize: document.getElementById("fileSizeField"),
-        title: document.getElementById("titleField"),
-        author: document.getElementById("authorField"),
-        subject: document.getElementById("subjectField"),
-        keywords: document.getElementById("keywordsField"),
-        creationDate: document.getElementById("creationDateField"),
-        modificationDate: document.getElementById("modificationDateField"),
-        creator: document.getElementById("creatorField"),
-        producer: document.getElementById("producerField"),
-        version: document.getElementById("versionField"),
-        pageCount: document.getElementById("pageCountField"),
-        pageSize: document.getElementById("pageSizeField"),
-        linearized: document.getElementById("linearizedField")
-      }
-    },
-    errorWrapper: {
-      container: document.getElementById("errorWrapper"),
-      errorMessage: document.getElementById("errorMessage"),
-      closeButton: document.getElementById("errorClose"),
-      errorMoreInfo: document.getElementById("errorMoreInfo"),
-      moreInfoButton: document.getElementById("errorShowMore"),
-      lessInfoButton: document.getElementById("errorShowLess")
-    },
-    printContainer: document.getElementById("printContainer"),
-    openFileInputName: "fileInput",
-    debuggerScriptPath: "./debugger.js"
+var _viewer_compatibility = __webpack_require__(2);
+
+const OptionKind = {
+  VIEWER: 0x02,
+  API: 0x04,
+  WORKER: 0x08,
+  PREFERENCE: 0x80
+};
+exports.OptionKind = OptionKind;
+const defaultOptions = {
+  cursorToolOnLoad: {
+    value: 0,
+    kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+  },
+  defaultUrl: {
+    value: "compressed.tracemonkey-pldi-09.pdf",
+    kind: OptionKind.VIEWER
+  },
+  defaultZoomValue: {
+    value: "",
+    kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+  },
+  disableHistory: {
+    value: false,
+    kind: OptionKind.VIEWER
+  },
+  disablePageLabels: {
+    value: false,
+    kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+  },
+  enablePermissions: {
+    value: false,
+    kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+  },
+  enablePrintAutoRotate: {
+    value: true,
+    kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+  },
+  enableScripting: {
+    value: true,
+    kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+  },
+  enableWebGL: {
+    value: false,
+    kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+  },
+  externalLinkRel: {
+    value: "noopener noreferrer nofollow",
+    kind: OptionKind.VIEWER
+  },
+  externalLinkTarget: {
+    value: 0,
+    kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+  },
+  historyUpdateUrl: {
+    value: false,
+    kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+  },
+  ignoreDestinationZoom: {
+    value: false,
+    kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+  },
+  imageResourcesPath: {
+    value: "./images/",
+    kind: OptionKind.VIEWER
+  },
+  maxCanvasPixels: {
+    value: 16777216,
+    compatibility: _viewer_compatibility.viewerCompatibilityParams.maxCanvasPixels,
+    kind: OptionKind.VIEWER
+  },
+  pdfBugEnabled: {
+    value: false,
+    kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+  },
+  printResolution: {
+    value: 150,
+    kind: OptionKind.VIEWER
+  },
+  renderer: {
+    value: "canvas",
+    kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+  },
+  renderInteractiveForms: {
+    value: true,
+    kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+  },
+  sidebarViewOnLoad: {
+    value: -1,
+    kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+  },
+  scrollModeOnLoad: {
+    value: -1,
+    kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+  },
+  spreadModeOnLoad: {
+    value: -1,
+    kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+  },
+  textLayerMode: {
+    value: 1,
+    kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+  },
+  useOnlyCssZoom: {
+    value: false,
+    kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+  },
+  viewerCssTheme: {
+    value: 0,
+    kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+  },
+  viewOnLoad: {
+    value: 0,
+    kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+  },
+  cMapPacked: {
+    value: true,
+    kind: OptionKind.API
+  },
+  cMapUrl: {
+    value: "../web/cmaps/",
+    kind: OptionKind.API
+  },
+  disableAutoFetch: {
+    value: false,
+    kind: OptionKind.API + OptionKind.PREFERENCE
+  },
+  disableFontFace: {
+    value: false,
+    kind: OptionKind.API + OptionKind.PREFERENCE
+  },
+  disableRange: {
+    value: false,
+    kind: OptionKind.API + OptionKind.PREFERENCE
+  },
+  disableStream: {
+    value: false,
+    kind: OptionKind.API + OptionKind.PREFERENCE
+  },
+  docBaseUrl: {
+    value: "",
+    kind: OptionKind.API
+  },
+  enableXfa: {
+    value: false,
+    kind: OptionKind.API
+  },
+  fontExtraProperties: {
+    value: false,
+    kind: OptionKind.API
+  },
+  isEvalSupported: {
+    value: true,
+    kind: OptionKind.API
+  },
+  maxImageSize: {
+    value: -1,
+    kind: OptionKind.API
+  },
+  pdfBug: {
+    value: false,
+    kind: OptionKind.API
+  },
+  verbosity: {
+    value: 1,
+    kind: OptionKind.API
+  },
+  workerPort: {
+    value: null,
+    kind: OptionKind.WORKER
+  },
+  workerSrc: {
+    value: "../build/pdf.worker.js",
+    kind: OptionKind.WORKER
+  }
+};
+{
+  defaultOptions.disablePreferences = {
+    value: false,
+    kind: OptionKind.VIEWER
+  };
+  defaultOptions.locale = {
+    value: typeof navigator !== "undefined" ? navigator.language : "en-US",
+    kind: OptionKind.VIEWER
+  };
+  defaultOptions.sandboxBundleSrc = {
+    value: "../build/pdf.sandbox.js",
+    kind: OptionKind.VIEWER
   };
 }
+const userOptions = Object.create(null);
 
-function webViewerLoad() {
-  const config = getViewerConfiguration();
-  window.PDFViewerApplication = pdfjsWebApp.PDFViewerApplication;
-  window.PDFViewerApplicationOptions = pdfjsWebAppOptions.AppOptions;
-  const event = document.createEvent("CustomEvent");
-  event.initCustomEvent("webviewerloaded", true, true, {
-    source: window
-  });
+class AppOptions {
+  constructor() {
+    throw new Error("Cannot initialize AppOptions.");
+  }
 
-  try {
-    parent.document.dispatchEvent(event);
-  } catch (ex) {
-    console.error(`webviewerloaded: ${ex}`);
-    document.dispatchEvent(event);
+  static get(name) {
+    const userOption = userOptions[name];
+
+    if (userOption !== undefined) {
+      return userOption;
+    }
+
+    const defaultOption = defaultOptions[name];
+
+    if (defaultOption !== undefined) {
+      return defaultOption.compatibility ?? defaultOption.value;
+    }
+
+    return undefined;
+  }
+
+  static getAll(kind = null) {
+    const options = Object.create(null);
+
+    for (const name in defaultOptions) {
+      const defaultOption = defaultOptions[name];
+
+      if (kind) {
+        if ((kind & defaultOption.kind) === 0) {
+          continue;
+        }
+
+        if (kind === OptionKind.PREFERENCE) {
+          const value = defaultOption.value,
+                valueType = typeof value;
+
+          if (valueType === "boolean" || valueType === "string" || valueType === "number" && 
Number.isInteger(value)) {
+            options[name] = value;
+            continue;
+          }
+
+          throw new Error(`Invalid type for preference: ${name}`);
+        }
+      }
+
+      const userOption = userOptions[name];
+      options[name] = userOption !== undefined ? userOption : defaultOption.compatibility ?? 
defaultOption.value;
+    }
+
+    return options;
+  }
+
+  static set(name, value) {
+    userOptions[name] = value;
+  }
+
+  static setAll(options) {
+    for (const name in options) {
+      userOptions[name] = options[name];
+    }
+  }
+
+  static remove(name) {
+    delete userOptions[name];
   }
 
-  pdfjsWebApp.PDFViewerApplication.run(config);
 }
 
-if (document.readyState === "interactive" || document.readyState === "complete") {
-  webViewerLoad();
-} else {
-  document.addEventListener("DOMContentLoaded", webViewerLoad, true);
+exports.AppOptions = AppOptions;
+
+/***/ }),
+/* 2 */
+/***/ ((__unused_webpack_module, exports) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports.viewerCompatibilityParams = void 0;
+const compatibilityParams = Object.create(null);
+{
+  const userAgent = typeof navigator !== "undefined" && navigator.userAgent || "";
+  const platform = typeof navigator !== "undefined" && navigator.platform || "";
+  const maxTouchPoints = typeof navigator !== "undefined" && navigator.maxTouchPoints || 1;
+  const isAndroid = /Android/.test(userAgent);
+  const isIOS = /\b(iPad|iPhone|iPod)(?=;)/.test(userAgent) || platform === "MacIntel" && maxTouchPoints > 1;
+  const isIOSChrome = /CriOS/.test(userAgent);
+
+  (function checkOnBlobSupport() {
+    if (isIOSChrome) {
+      compatibilityParams.disableCreateObjectURL = true;
+    }
+  })();
+
+  (function checkCanvasSizeLimitation() {
+    if (isIOS || isAndroid) {
+      compatibilityParams.maxCanvasPixels = 5242880;
+    }
+  })();
 }
+const viewerCompatibilityParams = Object.freeze(compatibilityParams);
+exports.viewerCompatibilityParams = viewerCompatibilityParams;
 
 /***/ }),
-/* 1 */
-/***/ (function(module, exports, __webpack_require__) {
+/* 3 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
-exports.PDFPrintServiceFactory = exports.DefaultExternalServices = exports.PDFViewerApplication = void 0;
+}));
+exports.PDFViewerApplication = exports.PDFPrintServiceFactory = exports.DefaultExternalServices = void 0;
 
-var _ui_utils = __webpack_require__(2);
+var _ui_utils = __webpack_require__(4);
 
-var _app_options = __webpack_require__(3);
+var _app_options = __webpack_require__(1);
 
 var _pdfjsLib = __webpack_require__(5);
 
@@ -301,43 +352,45 @@ var _pdf_cursor_tools = __webpack_require__(6);
 
 var _pdf_rendering_queue = __webpack_require__(8);
 
-var _pdf_sidebar = __webpack_require__(9);
+var _overlay_manager = __webpack_require__(9);
+
+var _password_prompt = __webpack_require__(10);
 
-var _overlay_manager = __webpack_require__(10);
+var _pdf_attachment_viewer = __webpack_require__(11);
 
-var _password_prompt = __webpack_require__(11);
+var _pdf_document_properties = __webpack_require__(13);
 
-var _pdf_attachment_viewer = __webpack_require__(12);
+var _pdf_find_bar = __webpack_require__(14);
 
-var _pdf_document_properties = __webpack_require__(14);
+var _pdf_find_controller = __webpack_require__(15);
 
-var _pdf_find_bar = __webpack_require__(15);
+var _pdf_history = __webpack_require__(17);
 
-var _pdf_find_controller = __webpack_require__(16);
+var _pdf_layer_viewer = __webpack_require__(18);
 
-var _pdf_history = __webpack_require__(18);
+var _pdf_link_service = __webpack_require__(19);
 
-var _pdf_layer_viewer = __webpack_require__(19);
+var _pdf_outline_viewer = __webpack_require__(20);
 
-var _pdf_link_service = __webpack_require__(20);
+var _pdf_presentation_mode = __webpack_require__(21);
 
-var _pdf_outline_viewer = __webpack_require__(21);
+var _pdf_scripting_manager = __webpack_require__(22);
 
-var _pdf_presentation_mode = __webpack_require__(22);
+var _pdf_sidebar = __webpack_require__(23);
 
-var _pdf_sidebar_resizer = __webpack_require__(23);
+var _pdf_sidebar_resizer = __webpack_require__(24);
 
-var _pdf_thumbnail_viewer = __webpack_require__(24);
+var _pdf_thumbnail_viewer = __webpack_require__(25);
 
-var _pdf_viewer = __webpack_require__(26);
+var _pdf_viewer = __webpack_require__(27);
 
-var _secondary_toolbar = __webpack_require__(31);
+var _secondary_toolbar = __webpack_require__(34);
 
-var _toolbar = __webpack_require__(33);
+var _toolbar = __webpack_require__(36);
 
-var _viewer_compatibility = __webpack_require__(4);
+var _viewer_compatibility = __webpack_require__(2);
 
-var _view_history = __webpack_require__(34);
+var _view_history = __webpack_require__(37);
 
 const DEFAULT_SCALE_DELTA = 1.1;
 const DISABLE_AUTO_FETCH_LOADING_BAR_TIMEOUT = 5000;
@@ -349,6 +402,11 @@ const ViewOnLoad = {
   PREVIOUS: 0,
   INITIAL: 1
 };
+const ViewerCssTheme = {
+  AUTOMATIC: 0,
+  LIGHT: 1,
+  DARK: 2
+};
 const KNOWN_VERSIONS = ["1.0", "1.1", "1.2", "1.3", "1.4", "1.5", "1.6", "1.7", "1.8", "1.9", "2.0", "2.1", 
"2.2", "2.3"];
 const KNOWN_GENERATORS = ["acrobat distiller", "acrobat pdfwriter", "adobe livecycle", "adobe pdf library", 
"adobe photoshop", "ghostscript", "tcpdf", "cairo", "dvipdfm", "dvips", "pdftex", "pdfkit", "itext", 
"prince", "quarkxpress", "mac os x", "microsoft", "openoffice", "oracle", "luradocument", "pdf-xchange", 
"antenna house", "aspose.cells", "fpdf"];
 
@@ -363,7 +421,7 @@ class DefaultExternalServices {
 
   static initPassiveLoading(callbacks) {}
 
-  static fallback(data, callback) {}
+  static async fallback(data) {}
 
   static reportTelemetry(data) {}
 
@@ -379,6 +437,10 @@ class DefaultExternalServices {
     throw new Error("Not implemented: createL10n");
   }
 
+  static createScripting(options) {
+    throw new Error("Not implemented: createScripting");
+  }
+
   static get supportsIntegratedFind() {
     return (0, _pdfjsLib.shadow)(this, "supportsIntegratedFind", false);
   }
@@ -422,6 +484,7 @@ const PDFViewerApplication = {
   pdfAttachmentViewer: null,
   pdfLayerViewer: null,
   pdfCursorTools: null,
+  pdfScriptingManager: null,
   store: null,
   downloadManager: null,
   overlayManager: null,
@@ -436,17 +499,24 @@ const PDFViewerApplication = {
   url: "",
   baseUrl: "",
   externalServices: DefaultExternalServices,
-  _boundEvents: {},
-  contentDispositionFilename: null,
+  _boundEvents: Object.create(null),
+  documentInfo: null,
+  metadata: null,
+  _contentDispositionFilename: null,
+  _contentLength: null,
   triggerDelayedFallback: null,
   _saveInProgress: false,
   _wheelUnusedTicks: 0,
+  _idleCallbacks: new Set(),
 
   async initialize(appConfig) {
     this.preferences = this.externalServices.createPreferences();
     this.appConfig = appConfig;
     await this._readPreferences();
     await this._parseHashParameters();
+
+    this._forceCssTheme();
+
     await this._initializeL10n();
 
     if (this.isViewerEmbedded && _app_options.AppOptions.get("externalLinkTarget") === 
_pdfjsLib.LinkTarget.NONE) {
@@ -472,13 +542,9 @@ const PDFViewerApplication = {
     }
 
     try {
-      const prefs = await this.preferences.getAll();
-
-      for (const name in prefs) {
-        _app_options.AppOptions.set(name, prefs[name]);
-      }
+      _app_options.AppOptions.setAll(await this.preferences.getAll());
     } catch (reason) {
-      console.error(`_readPreferences: "${reason.message}".`);
+      console.error(`_readPreferences: "${reason?.message}".`);
     }
   },
 
@@ -557,6 +623,10 @@ const PDFViewerApplication = {
       _app_options.AppOptions.set("locale", hashParams.locale);
     }
 
+    if (waitOn.length === 0) {
+      return undefined;
+    }
+
     return Promise.all(waitOn).catch(reason => {
       console.error(`_parseHashParameters: "${reason.message}".`);
     });
@@ -570,6 +640,41 @@ const PDFViewerApplication = {
     document.getElementsByTagName("html")[0].dir = dir;
   },
 
+  _forceCssTheme() {
+    const cssTheme = _app_options.AppOptions.get("viewerCssTheme");
+
+    if (cssTheme === ViewerCssTheme.AUTOMATIC || !Object.values(ViewerCssTheme).includes(cssTheme)) {
+      return;
+    }
+
+    try {
+      const styleSheet = document.styleSheets[0];
+      const cssRules = styleSheet?.cssRules || [];
+
+      for (let i = 0, ii = cssRules.length; i < ii; i++) {
+        const rule = cssRules[i];
+
+        if (rule instanceof CSSMediaRule && rule.media?.[0] === "(prefers-color-scheme: dark)") {
+          if (cssTheme === ViewerCssTheme.LIGHT) {
+            styleSheet.deleteRule(i);
+            return;
+          }
+
+          const darkRules = /^@media \(prefers-color-scheme: dark\) 
{\n\s*([\w\s-.,:;/\\{}()]+)\n}$/.exec(rule.cssText);
+
+          if (darkRules?.[1]) {
+            styleSheet.deleteRule(i);
+            styleSheet.insertRule(darkRules[1], i);
+          }
+
+          return;
+        }
+      }
+    } catch (reason) {
+      console.error(`_forceCssTheme: "${reason?.message}".`);
+    }
+  },
+
   async _initializeViewerComponents() {
     const appConfig = this.appConfig;
     const eventBus = appConfig.eventBus || new _ui_utils.EventBus({
@@ -578,7 +683,7 @@ const PDFViewerApplication = {
     this.eventBus = eventBus;
     this.overlayManager = new _overlay_manager.OverlayManager();
     const pdfRenderingQueue = new _pdf_rendering_queue.PDFRenderingQueue();
-    pdfRenderingQueue.onIdle = this.cleanup.bind(this);
+    pdfRenderingQueue.onIdle = this._cleanup.bind(this);
     this.pdfRenderingQueue = pdfRenderingQueue;
     const pdfLinkService = new _pdf_link_service.PDFLinkService({
       eventBus,
@@ -594,6 +699,13 @@ const PDFViewerApplication = {
       eventBus
     });
     this.findController = findController;
+    const pdfScriptingManager = new _pdf_scripting_manager.PDFScriptingManager({
+      eventBus,
+      sandboxBundleSrc: _app_options.AppOptions.get("sandboxBundleSrc"),
+      scriptingFactory: this.externalServices,
+      docPropertiesLookup: this._scriptingDocProperties.bind(this)
+    });
+    this.pdfScriptingManager = pdfScriptingManager;
     const container = appConfig.mainContainer;
     const viewer = appConfig.viewerContainer;
     this.pdfViewer = new _pdf_viewer.PDFViewer({
@@ -604,6 +716,7 @@ const PDFViewerApplication = {
       linkService: pdfLinkService,
       downloadManager,
       findController,
+      scriptingManager: pdfScriptingManager,
       renderer: _app_options.AppOptions.get("renderer"),
       enableWebGL: _app_options.AppOptions.get("enableWebGL"),
       l10n: this.l10n,
@@ -612,10 +725,12 @@ const PDFViewerApplication = {
       renderInteractiveForms: _app_options.AppOptions.get("renderInteractiveForms"),
       enablePrintAutoRotate: _app_options.AppOptions.get("enablePrintAutoRotate"),
       useOnlyCssZoom: _app_options.AppOptions.get("useOnlyCssZoom"),
-      maxCanvasPixels: _app_options.AppOptions.get("maxCanvasPixels")
+      maxCanvasPixels: _app_options.AppOptions.get("maxCanvasPixels"),
+      enableScripting: _app_options.AppOptions.get("enableScripting")
     });
     pdfRenderingQueue.setViewer(this.pdfViewer);
     pdfLinkService.setViewer(this.pdfViewer);
+    pdfScriptingManager.setViewer(this.pdfViewer);
     this.pdfThumbnailViewer = new _pdf_thumbnail_viewer.PDFThumbnailViewer({
       container: appConfig.sidebar.thumbnailView,
       eventBus,
@@ -647,12 +762,11 @@ const PDFViewerApplication = {
       this.pdfPresentationMode = new _pdf_presentation_mode.PDFPresentationMode({
         container,
         pdfViewer: this.pdfViewer,
-        eventBus,
-        contextMenuItems: appConfig.fullscreen
+        eventBus
       });
     }
 
-    this.passwordPrompt = new _password_prompt.PasswordPrompt(appConfig.passwordOverlay, 
this.overlayManager, this.l10n);
+    this.passwordPrompt = new _password_prompt.PasswordPrompt(appConfig.passwordOverlay, 
this.overlayManager, this.l10n, this.isViewerEmbedded);
     this.pdfOutlineViewer = new _pdf_outline_viewer.PDFOutlineViewer({
       container: appConfig.sidebar.outlineView,
       eventBus,
@@ -743,20 +857,15 @@ const PDFViewerApplication = {
     this.pdfViewer.currentPageNumber = val;
   },
 
-  get printing() {
-    return !!this.printService;
-  },
-
   get supportsPrinting() {
     return PDFPrintServiceFactory.instance.supportsPrinting;
   },
 
   get supportsFullscreen() {
-    let support;
     const doc = document.documentElement;
-    support = !!(doc.requestFullscreen || doc.mozRequestFullScreen || doc.webkitRequestFullScreen || 
doc.msRequestFullscreen);
+    let support = !!(doc.requestFullscreen || doc.mozRequestFullScreen || doc.webkitRequestFullScreen);
 
-    if (document.fullscreenEnabled === false || document.mozFullScreenEnabled === false || 
document.webkitFullscreenEnabled === false || document.msFullscreenEnabled === false) {
+    if (document.fullscreenEnabled === false || document.mozFullScreenEnabled === false || 
document.webkitFullscreenEnabled === false) {
       support = false;
     }
 
@@ -787,7 +896,7 @@ const PDFViewerApplication = {
   setTitleUsingUrl(url = "") {
     this.url = url;
     this.baseUrl = url.split("#")[0];
-    let title = (0, _ui_utils.getPDFFileNameFromURL)(url, "");
+    let title = (0, _pdfjsLib.getPdfFilenameFromUrl)(url, "");
 
     if (!title) {
       try {
@@ -808,15 +917,44 @@ const PDFViewerApplication = {
     document.title = title;
   },
 
+  get _docFilename() {
+    return this._contentDispositionFilename || (0, _pdfjsLib.getPdfFilenameFromUrl)(this.url);
+  },
+
+  _cancelIdleCallbacks() {
+    if (!this._idleCallbacks.size) {
+      return;
+    }
+
+    for (const callback of this._idleCallbacks) {
+      window.cancelIdleCallback(callback);
+    }
+
+    this._idleCallbacks.clear();
+  },
+
   async close() {
-    const errorWrapper = this.appConfig.errorWrapper.container;
-    errorWrapper.setAttribute("hidden", "true");
+    this._unblockDocumentLoadEvent();
+
+    const {
+      container
+    } = this.appConfig.errorWrapper;
+    container.hidden = true;
 
     if (!this.pdfLoadingTask) {
-      return undefined;
+      return;
+    }
+
+    if (this.pdfDocument?.annotationStorage.size > 0 && this._annotationStorageModified) {
+      try {
+        await this.save({
+          sourceEventType: "save"
+        });
+      } catch (reason) {}
     }
 
-    const promise = this.pdfLoadingTask.destroy();
+    const promises = [];
+    promises.push(this.pdfLoadingTask.destroy());
     this.pdfLoadingTask = null;
 
     if (this.pdfDocument) {
@@ -833,9 +971,16 @@ const PDFViewerApplication = {
     this.downloadComplete = false;
     this.url = "";
     this.baseUrl = "";
-    this.contentDispositionFilename = null;
+    this.documentInfo = null;
+    this.metadata = null;
+    this._contentDispositionFilename = null;
+    this._contentLength = null;
     this.triggerDelayedFallback = null;
     this._saveInProgress = false;
+
+    this._cancelIdleCallbacks();
+
+    promises.push(this.pdfScriptingManager.destroyPromise);
     this.pdfSidebar.reset();
     this.pdfOutlineViewer.reset();
     this.pdfAttachmentViewer.reset();
@@ -856,7 +1001,7 @@ const PDFViewerApplication = {
       PDFBug.cleanup();
     }
 
-    return promise;
+    await Promise.all(promises);
   },
 
   async open(file, args) {
@@ -894,13 +1039,7 @@ const PDFViewerApplication = {
 
     if (args) {
       for (const key in args) {
-        const value = args[key];
-
-        if (key === "length") {
-          this.pdfDocumentProperties.setFileSize(value);
-        }
-
-        parameters[key] = value;
+        parameters[key] = args[key];
       }
     }
 
@@ -928,91 +1067,89 @@ const PDFViewerApplication = {
         return undefined;
       }
 
-      const message = exception && exception.message;
-      let loadingErrorMessage;
+      let key = "loading_error";
 
       if (exception instanceof _pdfjsLib.InvalidPDFException) {
-        loadingErrorMessage = this.l10n.get("invalid_file_error", null, "Invalid or corrupted PDF file.");
+        key = "invalid_file_error";
       } else if (exception instanceof _pdfjsLib.MissingPDFException) {
-        loadingErrorMessage = this.l10n.get("missing_file_error", null, "Missing PDF file.");
+        key = "missing_file_error";
       } else if (exception instanceof _pdfjsLib.UnexpectedResponseException) {
-        loadingErrorMessage = this.l10n.get("unexpected_response_error", null, "Unexpected server 
response.");
-      } else {
-        loadingErrorMessage = this.l10n.get("loading_error", null, "An error occurred while loading the 
PDF.");
+        key = "unexpected_response_error";
       }
 
-      return loadingErrorMessage.then(msg => {
-        this.error(msg, {
-          message
+      return this.l10n.get(key).then(msg => {
+        this._documentError(msg, {
+          message: exception?.message
         });
+
         throw exception;
       });
     });
   },
 
-  download({
-    sourceEventType = "download"
-  } = {}) {
-    function downloadByUrl() {
-      downloadManager.downloadUrl(url, filename);
+  _ensureDownloadComplete() {
+    if (this.pdfDocument && this.downloadComplete) {
+      return;
     }
 
-    const url = this.baseUrl;
-    const filename = this.contentDispositionFilename || (0, _ui_utils.getPDFFileNameFromURL)(this.url);
-    const downloadManager = this.downloadManager;
+    throw new Error("PDF document not downloaded.");
+  },
 
-    downloadManager.onerror = err => {
-      this.error(`PDF failed to download: ${err}`);
-    };
+  async download({
+    sourceEventType = "download"
+  } = {}) {
+    const url = this.baseUrl,
+          filename = this._docFilename;
 
-    if (!this.pdfDocument || !this.downloadComplete) {
-      downloadByUrl();
-      return;
-    }
+    try {
+      this._ensureDownloadComplete();
 
-    this.pdfDocument.getData().then(function (data) {
+      const data = await this.pdfDocument.getData();
       const blob = new Blob([data], {
         type: "application/pdf"
       });
-      downloadManager.download(blob, url, filename, sourceEventType);
-    }).catch(downloadByUrl);
+      await this.downloadManager.download(blob, url, filename, sourceEventType);
+    } catch (reason) {
+      await this.downloadManager.downloadUrl(url, filename);
+    }
   },
 
-  save({
+  async save({
     sourceEventType = "download"
   } = {}) {
     if (this._saveInProgress) {
       return;
     }
 
-    const url = this.baseUrl;
-    const filename = this.contentDispositionFilename || (0, _ui_utils.getPDFFileNameFromURL)(this.url);
-    const downloadManager = this.downloadManager;
-
-    downloadManager.onerror = err => {
-      this.error(`PDF failed to be saved: ${err}`);
-    };
+    this._saveInProgress = true;
+    await this.pdfScriptingManager.dispatchWillSave();
+    const url = this.baseUrl,
+          filename = this._docFilename;
 
-    if (!this.pdfDocument || !this.downloadComplete) {
-      this.download({
-        sourceEventType
-      });
-      return;
-    }
+    try {
+      this._ensureDownloadComplete();
 
-    this._saveInProgress = true;
-    this.pdfDocument.saveDocument(this.pdfDocument.annotationStorage).then(data => {
+      const data = await this.pdfDocument.saveDocument(this.pdfDocument.annotationStorage);
       const blob = new Blob([data], {
         type: "application/pdf"
       });
-      downloadManager.download(blob, url, filename, sourceEventType);
-    }).catch(() => {
-      this.download({
+      await this.downloadManager.download(blob, url, filename, sourceEventType);
+    } catch (reason) {
+      await this.download({
         sourceEventType
       });
-    }).finally(() => {
+    } finally {
+      await this.pdfScriptingManager.dispatchDidSave();
       this._saveInProgress = false;
-    });
+    }
+  },
+
+  downloadOrSave(options) {
+    if (this.pdfDocument?.annotationStorage.size > 0) {
+      this.save(options);
+    } else {
+      this.download(options);
+    }
   },
 
   _delayedFallback(featureId) {
@@ -1035,6 +1172,12 @@ const PDFViewerApplication = {
       featureId
     });
 
+    switch (featureId) {
+      case _pdfjsLib.UNSUPPORTED_FEATURES.errorFontLoadNative:
+      case _pdfjsLib.UNSUPPORTED_FEATURES.errorFontMissing:
+        return;
+    }
+
     if (this.fellback) {
       return;
     }
@@ -1043,56 +1186,62 @@ const PDFViewerApplication = {
     this.externalServices.fallback({
       featureId,
       url: this.baseUrl
-    }, function response(download) {
+    }).then(download => {
       if (!download) {
         return;
       }
 
-      PDFViewerApplication.download({
+      this.download({
         sourceEventType: "download"
       });
     });
   },
 
-  error(message, moreInfo) {
+  _documentError(message, moreInfo = null) {
+    this._unblockDocumentLoadEvent();
+
+    this._otherError(message, moreInfo);
+  },
+
+  _otherError(message, moreInfo = null) {
     const moreInfoText = [this.l10n.get("error_version_info", {
       version: _pdfjsLib.version || "?",
       build: _pdfjsLib.build || "?"
-    }, "PDF.js v{{version}} (build: {{build}})")];
+    })];
 
     if (moreInfo) {
       moreInfoText.push(this.l10n.get("error_message", {
         message: moreInfo.message
-      }, "Message: {{message}}"));
+      }));
 
       if (moreInfo.stack) {
         moreInfoText.push(this.l10n.get("error_stack", {
           stack: moreInfo.stack
-        }, "Stack: {{stack}}"));
+        }));
       } else {
         if (moreInfo.filename) {
           moreInfoText.push(this.l10n.get("error_file", {
             file: moreInfo.filename
-          }, "File: {{file}}"));
+          }));
         }
 
         if (moreInfo.lineNumber) {
           moreInfoText.push(this.l10n.get("error_line", {
             line: moreInfo.lineNumber
-          }, "Line: {{line}}"));
+          }));
         }
       }
     }
 
     const errorWrapperConfig = this.appConfig.errorWrapper;
     const errorWrapper = errorWrapperConfig.container;
-    errorWrapper.removeAttribute("hidden");
+    errorWrapper.hidden = false;
     const errorMessage = errorWrapperConfig.errorMessage;
     errorMessage.textContent = message;
     const closeButton = errorWrapperConfig.closeButton;
 
     closeButton.onclick = function () {
-      errorWrapper.setAttribute("hidden", "true");
+      errorWrapper.hidden = true;
     };
 
     const errorMoreInfo = errorWrapperConfig.errorMoreInfo;
@@ -1100,23 +1249,23 @@ const PDFViewerApplication = {
     const lessInfoButton = errorWrapperConfig.lessInfoButton;
 
     moreInfoButton.onclick = function () {
-      errorMoreInfo.removeAttribute("hidden");
-      moreInfoButton.setAttribute("hidden", "true");
-      lessInfoButton.removeAttribute("hidden");
+      errorMoreInfo.hidden = false;
+      moreInfoButton.hidden = true;
+      lessInfoButton.hidden = false;
       errorMoreInfo.style.height = errorMoreInfo.scrollHeight + "px";
     };
 
     lessInfoButton.onclick = function () {
-      errorMoreInfo.setAttribute("hidden", "true");
-      moreInfoButton.removeAttribute("hidden");
-      lessInfoButton.setAttribute("hidden", "true");
+      errorMoreInfo.hidden = true;
+      moreInfoButton.hidden = false;
+      lessInfoButton.hidden = true;
     };
 
     moreInfoButton.oncontextmenu = _ui_utils.noContextMenuHandler;
     lessInfoButton.oncontextmenu = _ui_utils.noContextMenuHandler;
     closeButton.oncontextmenu = _ui_utils.noContextMenuHandler;
-    moreInfoButton.removeAttribute("hidden");
-    lessInfoButton.setAttribute("hidden", "true");
+    moreInfoButton.hidden = false;
+    lessInfoButton.hidden = true;
     Promise.all(moreInfoText).then(parts => {
       errorMoreInfo.value = parts.join("\n");
     });
@@ -1150,7 +1299,10 @@ const PDFViewerApplication = {
 
   load(pdfDocument) {
     this.pdfDocument = pdfDocument;
-    pdfDocument.getDownloadInfo().then(() => {
+    pdfDocument.getDownloadInfo().then(({
+      length
+    }) => {
+      this._contentLength = length;
       this.downloadComplete = true;
       this.loadingBar.hide();
       firstPagePromise.then(() => {
@@ -1168,16 +1320,6 @@ const PDFViewerApplication = {
     baseDocumentUrl = null;
     this.pdfLinkService.setDocument(pdfDocument, baseDocumentUrl);
     this.pdfDocumentProperties.setDocument(pdfDocument, this.url);
-    const annotationStorage = pdfDocument.annotationStorage;
-
-    annotationStorage.onSetModified = function () {
-      window.addEventListener("beforeunload", beforeUnload);
-    };
-
-    annotationStorage.onResetModified = function () {
-      window.removeEventListener("beforeunload", beforeUnload);
-    };
-
     const pdfViewer = this.pdfViewer;
     pdfViewer.setDocument(pdfDocument);
     const {
@@ -1193,7 +1335,7 @@ const PDFViewerApplication = {
       scrollLeft: "0",
       scrollTop: "0",
       rotation: null,
-      sidebarView: _pdf_sidebar.SidebarView.UNKNOWN,
+      sidebarView: _ui_utils.SidebarView.UNKNOWN,
       scrollMode: _ui_utils.ScrollMode.UNKNOWN,
       spreadMode: _ui_utils.SpreadMode.UNKNOWN
     }).catch(() => {
@@ -1201,13 +1343,16 @@ const PDFViewerApplication = {
     });
     firstPagePromise.then(pdfPage => {
       this.loadingBar.setWidth(this.appConfig.viewerContainer);
+
+      this._initializeAnnotationStorageCallbacks(pdfDocument);
+
       Promise.all([_ui_utils.animationStarted, storedPromise, pageLayoutPromise, pageModePromise, 
openActionPromise]).then(async ([timeStamp, stored, pageLayout, pageMode, openAction]) => {
         const viewOnLoad = _app_options.AppOptions.get("viewOnLoad");
 
         this._initializePdfHistory({
           fingerprint: pdfDocument.fingerprint,
           viewOnLoad,
-          initialDest: openAction && openAction.dest
+          initialDest: openAction?.dest
         });
 
         const initialBookmark = this.initialBookmark;
@@ -1227,7 +1372,7 @@ const PDFViewerApplication = {
           hash = `page=${stored.page}&zoom=${zoom || stored.zoom},` + 
`${stored.scrollLeft},${stored.scrollTop}`;
           rotation = parseInt(stored.rotation, 10);
 
-          if (sidebarView === _pdf_sidebar.SidebarView.UNKNOWN) {
+          if (sidebarView === _ui_utils.SidebarView.UNKNOWN) {
             sidebarView = stored.sidebarView | 0;
           }
 
@@ -1240,12 +1385,12 @@ const PDFViewerApplication = {
           }
         }
 
-        if (pageMode && sidebarView === _pdf_sidebar.SidebarView.UNKNOWN) {
-          sidebarView = apiPageModeToSidebarView(pageMode);
+        if (pageMode && sidebarView === _ui_utils.SidebarView.UNKNOWN) {
+          sidebarView = (0, _ui_utils.apiPageModeToSidebarView)(pageMode);
         }
 
         if (pageLayout && spreadMode === _ui_utils.SpreadMode.UNKNOWN) {
-          spreadMode = apiPageLayoutToSpreadMode(pageLayout);
+          spreadMode = (0, _ui_utils.apiPageLayoutToSpreadMode)(pageLayout);
         }
 
         this.setInitialView(hash, {
@@ -1286,12 +1431,15 @@ const PDFViewerApplication = {
       });
     });
     pagesPromise.then(() => {
+      this._unblockDocumentLoadEvent();
+
       this._initializeAutoPrint(pdfDocument, openActionPromise);
     });
     onePageRendered.then(() => {
       pdfDocument.getOutline().then(outline => {
         this.pdfOutlineViewer.render({
-          outline
+          outline,
+          pdfDocument
         });
       });
       pdfDocument.getAttachments().then(attachments => {
@@ -1304,7 +1452,19 @@ const PDFViewerApplication = {
           optionalContentConfig,
           pdfDocument
         });
-      });
+      });
+
+      if ("requestIdleCallback" in window) {
+        const callback = window.requestIdleCallback(() => {
+          this._collectTelemetry(pdfDocument);
+
+          this._idleCallbacks.delete(callback);
+        }, {
+          timeout: 1000
+        });
+
+        this._idleCallbacks.add(callback);
+      }
     });
 
     this._initializePageLabels(pdfDocument);
@@ -1312,8 +1472,58 @@ const PDFViewerApplication = {
     this._initializeMetadata(pdfDocument);
   },
 
+  async _scriptingDocProperties(pdfDocument) {
+    if (!this.documentInfo) {
+      await new Promise(resolve => {
+        this.eventBus._on("metadataloaded", resolve, {
+          once: true
+        });
+      });
+
+      if (pdfDocument !== this.pdfDocument) {
+        return null;
+      }
+    }
+
+    if (!this._contentLength) {
+      await new Promise(resolve => {
+        this.eventBus._on("documentloaded", resolve, {
+          once: true
+        });
+      });
+
+      if (pdfDocument !== this.pdfDocument) {
+        return null;
+      }
+    }
+
+    return { ...this.documentInfo,
+      baseURL: this.baseUrl,
+      filesize: this._contentLength,
+      filename: this._docFilename,
+      metadata: this.metadata?.getRaw(),
+      authors: this.metadata?.get("dc:creator"),
+      numPages: this.pagesCount,
+      URL: this.url
+    };
+  },
+
+  async _collectTelemetry(pdfDocument) {
+    const markInfo = await this.pdfDocument.getMarkInfo();
+
+    if (pdfDocument !== this.pdfDocument) {
+      return;
+    }
+
+    const tagged = markInfo?.Marked || false;
+    this.externalServices.reportTelemetry({
+      type: "tagged",
+      tagged
+    });
+  },
+
   async _initializeAutoPrint(pdfDocument, openActionPromise) {
-    const [openAction, javaScript] = await Promise.all([openActionPromise, pdfDocument.getJavaScript()]);
+    const [openAction, javaScript] = await Promise.all([openActionPromise, !this.pdfViewer.enableScripting ? 
pdfDocument.getJavaScript() : null]);
 
     if (pdfDocument !== this.pdfDocument) {
       return;
@@ -1321,7 +1531,7 @@ const PDFViewerApplication = {
 
     let triggerAutoPrint = false;
 
-    if (openAction && openAction.action === "Print") {
+    if (openAction?.action === "Print") {
       triggerAutoPrint = true;
     }
 
@@ -1348,14 +1558,8 @@ const PDFViewerApplication = {
       }
     }
 
-    if (!this.supportsPrinting) {
-      return;
-    }
-
     if (triggerAutoPrint) {
-      setTimeout(function () {
-        window.print();
-      });
+      this.triggerPrinting();
     }
   },
 
@@ -1363,7 +1567,8 @@ const PDFViewerApplication = {
     const {
       info,
       metadata,
-      contentDispositionFilename
+      contentDispositionFilename,
+      contentLength
     } = await pdfDocument.getMetadata();
 
     if (pdfDocument !== this.pdfDocument) {
@@ -1372,16 +1577,11 @@ const PDFViewerApplication = {
 
     this.documentInfo = info;
     this.metadata = metadata;
-    this.contentDispositionFilename = contentDispositionFilename;
+    this._contentDispositionFilename ?? (this._contentDispositionFilename = contentDispositionFilename);
+    this._contentLength ?? (this._contentLength = contentLength);
     console.log(`PDF ${pdfDocument.fingerprint} [${info.PDFFormatVersion} ` + `${(info.Producer || 
"-").trim()} / ${(info.Creator || "-").trim()}] ` + `(PDF.js: ${_pdfjsLib.version || "-"}` + 
`${this.pdfViewer.enableWebGL ? " [WebGL]" : ""})`);
-    let pdfTitle;
-    const infoTitle = info && info.Title;
-
-    if (infoTitle) {
-      pdfTitle = infoTitle;
-    }
-
-    const metadataTitle = metadata && metadata.get("dc:title");
+    let pdfTitle = info?.Title;
+    const metadataTitle = metadata?.get("dc:title");
 
     if (metadataTitle) {
       if (metadataTitle !== "Untitled" && !/[\uFFF0-\uFFFF]/g.test(metadataTitle)) {
@@ -1395,7 +1595,7 @@ const PDFViewerApplication = {
       this.setTitle(contentDispositionFilename);
     }
 
-    if (info.IsXFAPresent && !info.IsAcroFormPresent) {
+    if (info.IsXFAPresent && !info.IsAcroFormPresent && !pdfDocument.isPureXfa) {
       console.warn("Warning: XFA is not supported");
 
       this._delayedFallback(_pdfjsLib.UNSUPPORTED_FEATURES.forms);
@@ -1420,7 +1620,7 @@ const PDFViewerApplication = {
           return false;
         }
 
-        generatorId = generator.replace(/[ .\-]/g, "_");
+        generatorId = generator.replace(/[ .-]/g, "_");
         return true;
       });
     }
@@ -1439,6 +1639,9 @@ const PDFViewerApplication = {
       generator: generatorId,
       formType
     });
+    this.eventBus.dispatch("metadataloaded", {
+      source: this
+    });
   },
 
   async _initializePageLabels(pdfDocument) {
@@ -1525,6 +1728,26 @@ const PDFViewerApplication = {
     }
   },
 
+  _initializeAnnotationStorageCallbacks(pdfDocument) {
+    if (pdfDocument !== this.pdfDocument) {
+      return;
+    }
+
+    const {
+      annotationStorage
+    } = pdfDocument;
+
+    annotationStorage.onSetModified = () => {
+      window.addEventListener("beforeunload", beforeUnload);
+      this._annotationStorageModified = true;
+    };
+
+    annotationStorage.onResetModified = () => {
+      window.removeEventListener("beforeunload", beforeUnload);
+      delete this._annotationStorageModified;
+    };
+  },
+
   setInitialView(storedHash, {
     rotation,
     sidebarView,
@@ -1569,40 +1792,39 @@ const PDFViewerApplication = {
     }
   },
 
-  cleanup() {
+  _cleanup() {
     if (!this.pdfDocument) {
       return;
     }
 
     this.pdfViewer.cleanup();
     this.pdfThumbnailViewer.cleanup();
-
-    if (this.pdfViewer.renderer !== _ui_utils.RendererType.SVG) {
-      this.pdfDocument.cleanup();
-    }
+    this.pdfDocument.cleanup(this.pdfViewer.renderer === _ui_utils.RendererType.SVG);
   },
 
   forceRendering() {
-    this.pdfRenderingQueue.printing = this.printing;
+    this.pdfRenderingQueue.printing = !!this.printService;
     this.pdfRenderingQueue.isThumbnailViewEnabled = this.pdfSidebar.isThumbnailViewVisible;
     this.pdfRenderingQueue.renderHighestPriority();
   },
 
   beforePrint() {
+    this.pdfScriptingManager.dispatchWillPrint();
+
     if (this.printService) {
       return;
     }
 
     if (!this.supportsPrinting) {
-      this.l10n.get("printing_not_supported", null, "Warning: Printing is not fully supported by this 
browser.").then(printMessage => {
-        this.error(printMessage);
+      this.l10n.get("printing_not_supported").then(msg => {
+        this._otherError(msg);
       });
       return;
     }
 
     if (!this.pdfViewer.pageViewsReady) {
-      this.l10n.get("printing_not_ready", null, "Warning: The PDF is not fully loaded for 
printing.").then(notReadyMessage => {
-        window.alert(notReadyMessage);
+      this.l10n.get("printing_not_ready").then(msg => {
+        window.alert(msg);
       });
       return;
     }
@@ -1623,6 +1845,8 @@ const PDFViewerApplication = {
   },
 
   afterPrint() {
+    this.pdfScriptingManager.dispatchDidPrint();
+
     if (this.printService) {
       this.printService.destroy();
       this.printService = null;
@@ -1636,12 +1860,7 @@ const PDFViewerApplication = {
   },
 
   rotatePages(delta) {
-    if (!this.pdfDocument) {
-      return;
-    }
-
-    const newRotation = (this.pdfViewer.pagesRotation + 360 + delta) % 360;
-    this.pdfViewer.pagesRotation = newRotation;
+    this.pdfViewer.pagesRotation += delta;
   },
 
   requestPresentationMode() {
@@ -1652,6 +1871,14 @@ const PDFViewerApplication = {
     this.pdfPresentationMode.request();
   },
 
+  triggerPrinting() {
+    if (!this.supportsPrinting) {
+      return;
+    }
+
+    window.print();
+  },
+
   bindEvents() {
     const {
       eventBus,
@@ -1736,6 +1963,14 @@ const PDFViewerApplication = {
 
     eventBus._on("updatefindcontrolstate", webViewerUpdateFindControlState);
 
+    if (_app_options.AppOptions.get("pdfBug")) {
+      _boundEvents.reportPageStatsPDFBug = reportPageStatsPDFBug;
+
+      eventBus._on("pagerendered", _boundEvents.reportPageStatsPDFBug);
+
+      eventBus._on("pagechanging", _boundEvents.reportPageStatsPDFBug);
+    }
+
     eventBus._on("fileinputchange", webViewerFileInputChange);
 
     eventBus._on("openfile", webViewerOpenFile);
@@ -1772,6 +2007,13 @@ const PDFViewerApplication = {
       });
     };
 
+    _boundEvents.windowUpdateFromSandbox = event => {
+      eventBus.dispatch("updatefromsandbox", {
+        source: window,
+        detail: event.detail
+      });
+    };
+
     window.addEventListener("visibilitychange", webViewerVisibilityChange);
     window.addEventListener("wheel", webViewerWheel, {
       passive: false
@@ -1786,6 +2028,7 @@ const PDFViewerApplication = {
     window.addEventListener("hashchange", _boundEvents.windowHashChange);
     window.addEventListener("beforeprint", _boundEvents.windowBeforePrint);
     window.addEventListener("afterprint", _boundEvents.windowAfterPrint);
+    window.addEventListener("updatefromsandbox", _boundEvents.windowUpdateFromSandbox);
   },
 
   unbindEvents() {
@@ -1870,6 +2113,14 @@ const PDFViewerApplication = {
 
     eventBus._off("updatefindcontrolstate", webViewerUpdateFindControlState);
 
+    if (_boundEvents.reportPageStatsPDFBug) {
+      eventBus._off("pagerendered", _boundEvents.reportPageStatsPDFBug);
+
+      eventBus._off("pagechanging", _boundEvents.reportPageStatsPDFBug);
+
+      _boundEvents.reportPageStatsPDFBug = null;
+    }
+
     eventBus._off("fileinputchange", webViewerFileInputChange);
 
     eventBus._off("openfile", webViewerOpenFile);
@@ -1896,10 +2147,12 @@ const PDFViewerApplication = {
     window.removeEventListener("hashchange", _boundEvents.windowHashChange);
     window.removeEventListener("beforeprint", _boundEvents.windowBeforePrint);
     window.removeEventListener("afterprint", _boundEvents.windowAfterPrint);
+    window.removeEventListener("updatefromsandbox", _boundEvents.windowUpdateFromSandbox);
     _boundEvents.windowResize = null;
     _boundEvents.windowHashChange = null;
     _boundEvents.windowBeforePrint = null;
     _boundEvents.windowAfterPrint = null;
+    _boundEvents.windowUpdateFromSandbox = null;
   },
 
   accumulateWheelTicks(ticks) {
@@ -1911,6 +2164,18 @@ const PDFViewerApplication = {
     const wholeTicks = Math.sign(this._wheelUnusedTicks) * Math.floor(Math.abs(this._wheelUnusedTicks));
     this._wheelUnusedTicks -= wholeTicks;
     return wholeTicks;
+  },
+
+  _unblockDocumentLoadEvent() {
+    if (document.blockUnblockOnload) {
+      document.blockUnblockOnload(false);
+    }
+
+    this._unblockDocumentLoadEvent = () => {};
+  },
+
+  get scriptingReady() {
+    return this.pdfScriptingManager.ready;
   }
 
 };
@@ -1940,10 +2205,9 @@ let validateFileURL;
         throw new Error("file origin does not match viewer's");
       }
     } catch (ex) {
-      const message = ex && ex.message;
-      PDFViewerApplication.l10n.get("loading_error", null, "An error occurred while loading the 
PDF.").then(loadingErrorMessage => {
-        PDFViewerApplication.error(loadingErrorMessage, {
-          message
+      PDFViewerApplication.l10n.get("loading_error").then(msg => {
+        PDFViewerApplication._documentError(msg, {
+          message: ex?.message
         });
       });
       throw ex;
@@ -1969,6 +2233,23 @@ function loadAndEnablePDFBug(enabledTabs) {
   });
 }
 
+function reportPageStatsPDFBug({
+  pageNumber
+}) {
+  if (typeof Stats === "undefined" || !Stats.enabled) {
+    return;
+  }
+
+  const pageView = PDFViewerApplication.pdfViewer.getPageView(pageNumber - 1);
+  const pageStats = pageView?.pdfPage?.stats;
+
+  if (!pageStats) {
+    return;
+  }
+
+  Stats.add(pageNumber, pageStats);
+}
+
 function webViewerInitialized() {
   const appConfig = PDFViewerApplication.appConfig;
   let file;
@@ -2018,7 +2299,7 @@ function webViewerInitialized() {
   if (!PDFViewerApplication.supportsDocumentFonts) {
     _app_options.AppOptions.set("disableFontFace", true);
 
-    PDFViewerApplication.l10n.get("web_fonts_disabled", null, "Web fonts are disabled: unable to use 
embedded PDF fonts.").then(msg => {
+    PDFViewerApplication.l10n.get("web_fonts_disabled").then(msg => {
       console.warn(msg);
     });
   }
@@ -2058,33 +2339,16 @@ function webViewerInitialized() {
     PDFViewerApplication.open(array);
     PDFViewerApplication.setTitleUsingUrl(file_name);
   } catch (reason) {
-    PDFViewerApplication.l10n.get("loading_error", null, "An error occurred while loading the 
PDF.").then(msg => {
-      PDFViewerApplication.error(msg, reason);
+    PDFViewerApplication.l10n.get("loading_error").then(msg => {
+      PDFViewerApplication._documentError(msg, reason);
     });
   }
 }
 
-let webViewerOpenFileViaURL;
-{
-  webViewerOpenFileViaURL = function (file) {
-    if (file && file.lastIndexOf("file:", 0) === 0) {
-      PDFViewerApplication.setTitleUsingUrl(file);
-      const xhr = new XMLHttpRequest();
-
-      xhr.onload = function () {
-        PDFViewerApplication.open(new Uint8Array(xhr.response));
-      };
-
-      xhr.open("GET", file);
-      xhr.responseType = "arraybuffer";
-      xhr.send();
-      return;
-    }
-
-    if (file) {
-      PDFViewerApplication.open(file);
-    }
-  };
+function webViewerOpenFileViaURL(file) {
+  if (file) {
+    PDFViewerApplication.open(file);
+  }
 }
 
 function webViewerResetPermissions() {
@@ -2099,37 +2363,33 @@ function webViewerResetPermissions() {
   appConfig.viewerContainer.classList.remove(ENABLE_PERMISSIONS_CLASS);
 }
 
-function webViewerPageRendered(evt) {
-  const pageNumber = evt.pageNumber;
-  const pageIndex = pageNumber - 1;
-  const pageView = PDFViewerApplication.pdfViewer.getPageView(pageIndex);
-
+function webViewerPageRendered({
+  pageNumber,
+  timestamp,
+  error
+}) {
   if (pageNumber === PDFViewerApplication.page) {
     PDFViewerApplication.toolbar.updateLoadingIndicatorState(false);
   }
 
-  if (!pageView) {
-    return;
-  }
-
   if (PDFViewerApplication.pdfSidebar.isThumbnailViewVisible) {
-    const thumbnailView = PDFViewerApplication.pdfThumbnailViewer.getThumbnail(pageIndex);
-    thumbnailView.setImage(pageView);
-  }
+    const pageView = PDFViewerApplication.pdfViewer.getPageView(pageNumber - 1);
+    const thumbnailView = PDFViewerApplication.pdfThumbnailViewer.getThumbnail(pageNumber - 1);
 
-  if (typeof Stats !== "undefined" && Stats.enabled && pageView.stats) {
-    Stats.add(pageNumber, pageView.stats);
+    if (pageView && thumbnailView) {
+      thumbnailView.setImage(pageView);
+    }
   }
 
-  if (pageView.error) {
-    PDFViewerApplication.l10n.get("rendering_error", null, "An error occurred while rendering the 
page.").then(msg => {
-      PDFViewerApplication.error(msg, pageView.error);
+  if (error) {
+    PDFViewerApplication.l10n.get("rendering_error").then(msg => {
+      PDFViewerApplication._otherError(msg, error);
     });
   }
 
   PDFViewerApplication.externalServices.reportTelemetry({
     type: "pageInfo",
-    timestamp: evt.timestamp
+    timestamp
   });
   PDFViewerApplication.pdfDocument.getStats().then(function (stats) {
     PDFViewerApplication.externalServices.reportTelemetry({
@@ -2146,24 +2406,24 @@ function webViewerPageMode({
 
   switch (mode) {
     case "thumbs":
-      view = _pdf_sidebar.SidebarView.THUMBS;
+      view = _ui_utils.SidebarView.THUMBS;
       break;
 
     case "bookmarks":
     case "outline":
-      view = _pdf_sidebar.SidebarView.OUTLINE;
+      view = _ui_utils.SidebarView.OUTLINE;
       break;
 
     case "attachments":
-      view = _pdf_sidebar.SidebarView.ATTACHMENTS;
+      view = _ui_utils.SidebarView.ATTACHMENTS;
       break;
 
     case "layers":
-      view = _pdf_sidebar.SidebarView.LAYERS;
+      view = _ui_utils.SidebarView.LAYERS;
       break;
 
     case "none":
-      view = _pdf_sidebar.SidebarView.NONE;
+      view = _ui_utils.SidebarView.NONE;
       break;
 
     default:
@@ -2188,10 +2448,7 @@ function webViewerNamedAction(evt) {
       break;
 
     case "Print":
-      if (PDFViewerApplication.supportsPrinting) {
-        webViewerPrint();
-      }
-
+      PDFViewerApplication.triggerPrinting();
       break;
 
     case "SaveAs":
@@ -2200,19 +2457,8 @@ function webViewerNamedAction(evt) {
   }
 }
 
-function webViewerPresentationModeChanged({
-  active,
-  switchInProgress
-}) {
-  let state = _ui_utils.PresentationModeState.NORMAL;
-
-  if (switchInProgress) {
-    state = _ui_utils.PresentationModeState.CHANGING;
-  } else if (active) {
-    state = _ui_utils.PresentationModeState.FULLSCREEN;
-  }
-
-  PDFViewerApplication.pdfViewer.presentationModeState = state;
+function webViewerPresentationModeChanged(evt) {
+  PDFViewerApplication.pdfViewer.presentationModeState = evt.state;
 }
 
 function webViewerSidebarViewChanged(evt) {
@@ -2242,7 +2488,7 @@ function webViewerUpdateViewarea(evt) {
   PDFViewerApplication.appConfig.toolbar.viewBookmark.href = href;
   PDFViewerApplication.appConfig.secondaryToolbar.viewBookmarkButton.href = href;
   const currentPage = PDFViewerApplication.pdfViewer.getPageView(PDFViewerApplication.page - 1);
-  const loading = currentPage.renderingState !== _pdf_rendering_queue.RenderingStates.FINISHED;
+  const loading = currentPage?.renderingState !== _pdf_rendering_queue.RenderingStates.FINISHED;
   PDFViewerApplication.toolbar.updateLoadingIndicatorState(loading);
 }
 
@@ -2298,7 +2544,7 @@ function webViewerHashchange(evt) {
 let webViewerFileInputChange, webViewerOpenFile;
 {
   webViewerFileInputChange = function (evt) {
-    if (PDFViewerApplication.pdfViewer && PDFViewerApplication.pdfViewer.isInPresentationMode) {
+    if (PDFViewerApplication.pdfViewer?.isInPresentationMode) {
       return;
     }
 
@@ -2328,10 +2574,10 @@ let webViewerFileInputChange, webViewerOpenFile;
     }
 
     const appConfig = PDFViewerApplication.appConfig;
-    appConfig.toolbar.viewBookmark.setAttribute("hidden", "true");
-    appConfig.secondaryToolbar.viewBookmarkButton.setAttribute("hidden", "true");
-    appConfig.toolbar.download.setAttribute("hidden", "true");
-    appConfig.secondaryToolbar.downloadButton.setAttribute("hidden", "true");
+    appConfig.toolbar.viewBookmark.hidden = true;
+    appConfig.secondaryToolbar.viewBookmarkButton.hidden = true;
+    appConfig.toolbar.download.hidden = true;
+    appConfig.secondaryToolbar.downloadButton.hidden = true;
   };
 
   webViewerOpenFile = function (evt) {
@@ -2345,27 +2591,19 @@ function webViewerPresentationMode() {
 }
 
 function webViewerPrint() {
-  window.print();
-}
-
-function webViewerDownloadOrSave(sourceEventType) {
-  if (PDFViewerApplication.pdfDocument && PDFViewerApplication.pdfDocument.annotationStorage.size > 0) {
-    PDFViewerApplication.save({
-      sourceEventType
-    });
-  } else {
-    PDFViewerApplication.download({
-      sourceEventType
-    });
-  }
+  PDFViewerApplication.triggerPrinting();
 }
 
 function webViewerDownload() {
-  webViewerDownloadOrSave("download");
+  PDFViewerApplication.downloadOrSave({
+    sourceEventType: "download"
+  });
 }
 
 function webViewerSave() {
-  webViewerDownloadOrSave("save");
+  PDFViewerApplication.downloadOrSave({
+    sourceEventType: "save"
+  });
 }
 
 function webViewerFirstPage() {
@@ -2381,11 +2619,11 @@ function webViewerLastPage() {
 }
 
 function webViewerNextPage() {
-  PDFViewerApplication.page++;
+  PDFViewerApplication.pdfViewer.nextPage();
 }
 
 function webViewerPreviousPage() {
-  PDFViewerApplication.page--;
+  PDFViewerApplication.pdfViewer.previousPage();
 }
 
 function webViewerZoomIn() {
@@ -2404,7 +2642,7 @@ function webViewerPageNumberChanged(evt) {
   const pdfViewer = PDFViewerApplication.pdfViewer;
 
   if (evt.value !== "") {
-    pdfViewer.currentPageLabel = evt.value;
+    PDFViewerApplication.pdfLinkService.goToPage(evt.value);
   }
 
   if (evt.value !== pdfViewer.currentPageNumber.toString() && evt.value !== pdfViewer.currentPageLabel) {
@@ -2501,21 +2739,15 @@ function webViewerRotationChanging(evt) {
   PDFViewerApplication.pdfViewer.currentPageNumber = evt.pageNumber;
 }
 
-function webViewerPageChanging(evt) {
-  const page = evt.pageNumber;
-  PDFViewerApplication.toolbar.setPageNumber(page, evt.pageLabel || null);
-  PDFViewerApplication.secondaryToolbar.setPageNumber(page);
+function webViewerPageChanging({
+  pageNumber,
+  pageLabel
+}) {
+  PDFViewerApplication.toolbar.setPageNumber(pageNumber, pageLabel);
+  PDFViewerApplication.secondaryToolbar.setPageNumber(pageNumber);
 
   if (PDFViewerApplication.pdfSidebar.isThumbnailViewVisible) {
-    PDFViewerApplication.pdfThumbnailViewer.scrollThumbnailIntoView(page);
-  }
-
-  if (typeof Stats !== "undefined" && Stats.enabled) {
-    const pageView = PDFViewerApplication.pdfViewer.getPageView(page - 1);
-
-    if (pageView && pageView.stats) {
-      Stats.add(page, pageView.stats);
-    }
+    PDFViewerApplication.pdfThumbnailViewer.scrollThumbnailIntoView(pageNumber);
   }
 }
 
@@ -2629,12 +2861,12 @@ function webViewerKeyDown(evt) {
       ensureViewerFocused = false;
   const cmd = (evt.ctrlKey ? 1 : 0) | (evt.altKey ? 2 : 0) | (evt.shiftKey ? 4 : 0) | (evt.metaKey ? 8 : 0);
   const pdfViewer = PDFViewerApplication.pdfViewer;
-  const isViewerInPresentationMode = pdfViewer && pdfViewer.isInPresentationMode;
+  const isViewerInPresentationMode = pdfViewer?.isInPresentationMode;
 
   if (cmd === 1 || cmd === 8 || cmd === 5 || cmd === 12) {
     switch (evt.keyCode) {
       case 70:
-        if (!PDFViewerApplication.supportsIntegratedFind) {
+        if (!PDFViewerApplication.supportsIntegratedFind && !evt.shiftKey) {
           PDFViewerApplication.findBar.open();
           handled = true;
         }
@@ -2760,10 +2992,10 @@ function webViewerKeyDown(evt) {
     return;
   }
 
-  const curElement = document.activeElement || document.querySelector(":focus");
-  const curElementTagName = curElement && curElement.tagName.toUpperCase();
+  const curElement = (0, _ui_utils.getActiveOrFocusedElement)();
+  const curElementTagName = curElement?.tagName.toUpperCase();
 
-  if (curElementTagName === "INPUT" || curElementTagName === "TEXTAREA" || curElementTagName === "SELECT" || 
curElement && curElement.isContentEditable) {
+  if (curElementTagName === "INPUT" || curElementTagName === "TEXTAREA" || curElementTagName === "SELECT" || 
curElement?.isContentEditable) {
     if (evt.keyCode !== 27) {
       return;
     }
@@ -2879,13 +3111,9 @@ function webViewerKeyDown(evt) {
 
     if (turnPage !== 0 && (!turnOnlyIfPageFit || pdfViewer.currentScaleValue === "page-fit")) {
       if (turnPage > 0) {
-        if (PDFViewerApplication.page < PDFViewerApplication.pagesCount) {
-          PDFViewerApplication.page++;
-        }
+        pdfViewer.nextPage();
       } else {
-        if (PDFViewerApplication.page > 1) {
-          PDFViewerApplication.page--;
-        }
+        pdfViewer.previousPage();
       }
 
       handled = true;
@@ -2934,45 +3162,6 @@ function beforeUnload(evt) {
   return false;
 }
 
-function apiPageLayoutToSpreadMode(layout) {
-  switch (layout) {
-    case "SinglePage":
-    case "OneColumn":
-      return _ui_utils.SpreadMode.NONE;
-
-    case "TwoColumnLeft":
-    case "TwoPageLeft":
-      return _ui_utils.SpreadMode.ODD;
-
-    case "TwoColumnRight":
-    case "TwoPageRight":
-      return _ui_utils.SpreadMode.EVEN;
-  }
-
-  return _ui_utils.SpreadMode.NONE;
-}
-
-function apiPageModeToSidebarView(mode) {
-  switch (mode) {
-    case "UseNone":
-      return _pdf_sidebar.SidebarView.NONE;
-
-    case "UseThumbs":
-      return _pdf_sidebar.SidebarView.THUMBS;
-
-    case "UseOutlines":
-      return _pdf_sidebar.SidebarView.OUTLINE;
-
-    case "UseAttachments":
-      return _pdf_sidebar.SidebarView.ATTACHMENTS;
-
-    case "UseOC":
-      return _pdf_sidebar.SidebarView.LAYERS;
-  }
-
-  return _pdf_sidebar.SidebarView.NONE;
-}
-
 const PDFPrintServiceFactory = {
   instance: {
     supportsPrinting: false,
@@ -2986,37 +3175,37 @@ const PDFPrintServiceFactory = {
 exports.PDFPrintServiceFactory = PDFPrintServiceFactory;
 
 /***/ }),
-/* 2 */
-/***/ (function(module, exports, __webpack_require__) {
+/* 4 */
+/***/ ((__unused_webpack_module, exports) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
+exports.apiPageLayoutToSpreadMode = apiPageLayoutToSpreadMode;
+exports.apiPageModeToSidebarView = apiPageModeToSidebarView;
+exports.approximateFraction = approximateFraction;
+exports.backtrackBeforeAllVisibleElements = backtrackBeforeAllVisibleElements;
+exports.binarySearchFirstItem = binarySearchFirstItem;
+exports.getActiveOrFocusedElement = getActiveOrFocusedElement;
+exports.getOutputScale = getOutputScale;
+exports.getPageSizeInches = getPageSizeInches;
+exports.getVisibleElements = getVisibleElements;
+exports.isPortraitOrientation = isPortraitOrientation;
 exports.isValidRotation = isValidRotation;
 exports.isValidScrollMode = isValidScrollMode;
 exports.isValidSpreadMode = isValidSpreadMode;
-exports.isPortraitOrientation = isPortraitOrientation;
-exports.clamp = clamp;
-exports.getPDFFileNameFromURL = getPDFFileNameFromURL;
+exports.moveToEndOfArray = moveToEndOfArray;
 exports.noContextMenuHandler = noContextMenuHandler;
+exports.normalizeWheelEventDelta = normalizeWheelEventDelta;
+exports.normalizeWheelEventDirection = normalizeWheelEventDirection;
 exports.parseQueryString = parseQueryString;
-exports.backtrackBeforeAllVisibleElements = backtrackBeforeAllVisibleElements;
-exports.getVisibleElements = getVisibleElements;
 exports.roundToDivide = roundToDivide;
-exports.getPageSizeInches = getPageSizeInches;
-exports.approximateFraction = approximateFraction;
-exports.getOutputScale = getOutputScale;
 exports.scrollIntoView = scrollIntoView;
-exports.watchScroll = watchScroll;
-exports.binarySearchFirstItem = binarySearchFirstItem;
-exports.normalizeWheelEventDirection = normalizeWheelEventDirection;
-exports.normalizeWheelEventDelta = normalizeWheelEventDelta;
 exports.waitOnEventOrTimeout = waitOnEventOrTimeout;
-exports.moveToEndOfArray = moveToEndOfArray;
-exports.WaitOnType = exports.animationStarted = exports.ProgressBar = exports.EventBus = exports.NullL10n = 
exports.SpreadMode = exports.ScrollMode = exports.TextLayerMode = exports.RendererType = 
exports.PresentationModeState = exports.VERTICAL_PADDING = exports.SCROLLBAR_PADDING = exports.MAX_AUTO_SCALE 
= exports.UNKNOWN_SCALE = exports.MAX_SCALE = exports.MIN_SCALE = exports.DEFAULT_SCALE = 
exports.DEFAULT_SCALE_VALUE = exports.CSS_UNITS = exports.AutoPrintRegExp = void 0;
+exports.watchScroll = watchScroll;
+exports.WaitOnType = exports.VERTICAL_PADDING = exports.UNKNOWN_SCALE = exports.TextLayerMode = 
exports.SpreadMode = exports.SidebarView = exports.ScrollMode = exports.SCROLLBAR_PADDING = 
exports.RendererType = exports.ProgressBar = exports.PresentationModeState = exports.MIN_SCALE = 
exports.MAX_SCALE = exports.MAX_AUTO_SCALE = exports.EventBus = exports.DEFAULT_SCALE_VALUE = 
exports.DEFAULT_SCALE = exports.CSS_UNITS = exports.AutoPrintRegExp = exports.animationStarted = void 0;
 const CSS_UNITS = 96.0 / 72.0;
 exports.CSS_UNITS = CSS_UNITS;
 const DEFAULT_SCALE_VALUE = "auto";
@@ -3035,6 +3224,7 @@ const SCROLLBAR_PADDING = 40;
 exports.SCROLLBAR_PADDING = SCROLLBAR_PADDING;
 const VERTICAL_PADDING = 5;
 exports.VERTICAL_PADDING = VERTICAL_PADDING;
+const LOADINGBAR_END_OFFSET_VAR = "--loadingBar-end-offset";
 const PresentationModeState = {
   UNKNOWN: 0,
   NORMAL: 1,
@@ -3042,6 +3232,15 @@ const PresentationModeState = {
   FULLSCREEN: 3
 };
 exports.PresentationModeState = PresentationModeState;
+const SidebarView = {
+  UNKNOWN: -1,
+  NONE: 0,
+  THUMBS: 1,
+  OUTLINE: 2,
+  ATTACHMENTS: 3,
+  LAYERS: 4
+};
+exports.SidebarView = SidebarView;
 const RendererType = {
   CANVAS: "canvas",
   SVG: "svg"
@@ -3070,37 +3269,9 @@ exports.SpreadMode = SpreadMode;
 const AutoPrintRegExp = /\bprint\s*\(/;
 exports.AutoPrintRegExp = AutoPrintRegExp;
 
-function formatL10nValue(text, args) {
-  if (!args) {
-    return text;
-  }
-
-  return text.replace(/\{\{\s*(\w+)\s*\}\}/g, (all, name) => {
-    return name in args ? args[name] : "{{" + name + "}}";
-  });
-}
-
-const NullL10n = {
-  async getLanguage() {
-    return "en-us";
-  },
-
-  async getDirection() {
-    return "ltr";
-  },
-
-  async get(property, args, fallback) {
-    return formatL10nValue(fallback, args);
-  },
-
-  async translate(element) {}
-
-};
-exports.NullL10n = NullL10n;
-
 function getOutputScale(ctx) {
   const devicePixelRatio = window.devicePixelRatio || 1;
-  const backingStoreRatio = ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || 
ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1;
+  const backingStoreRatio = ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || 
ctx.backingStorePixelRatio || 1;
   const pixelRatio = devicePixelRatio / backingStoreRatio;
   return {
     sx: pixelRatio,
@@ -3323,7 +3494,13 @@ function backtrackBeforeAllVisibleElements(index, views, top) {
   return index;
 }
 
-function getVisibleElements(scrollEl, views, sortByVisibility = false, horizontal = false) {
+function getVisibleElements({
+  scrollEl,
+  views,
+  sortByVisibility = false,
+  horizontal = false,
+  rtl = false
+}) {
   const top = scrollEl.scrollTop,
         bottom = top + scrollEl.clientHeight;
   const left = scrollEl.scrollLeft,
@@ -3335,15 +3512,16 @@ function getVisibleElements(scrollEl, views, sortByVisibility = false, horizonta
     return elementBottom > top;
   }
 
-  function isElementRightAfterViewLeft(view) {
+  function isElementNextAfterViewHorizontally(view) {
     const element = view.div;
-    const elementRight = element.offsetLeft + element.clientLeft + element.clientWidth;
-    return elementRight > left;
+    const elementLeft = element.offsetLeft + element.clientLeft;
+    const elementRight = elementLeft + element.clientWidth;
+    return rtl ? elementLeft < right : elementRight > left;
   }
 
   const visible = [],
         numViews = views.length;
-  let firstVisibleElementInd = numViews === 0 ? 0 : binarySearchFirstItem(views, horizontal ? 
isElementRightAfterViewLeft : isElementBottomAfterViewTop);
+  let firstVisibleElementInd = binarySearchFirstItem(views, horizontal ? isElementNextAfterViewHorizontally 
: isElementBottomAfterViewTop);
 
   if (firstVisibleElementInd > 0 && firstVisibleElementInd < numViews && !horizontal) {
     firstVisibleElementInd = backtrackBeforeAllVisibleElements(firstVisibleElementInd, views, top);
@@ -3375,13 +3553,16 @@ function getVisibleElements(scrollEl, views, sortByVisibility = false, horizonta
 
     const hiddenHeight = Math.max(0, top - currentHeight) + Math.max(0, viewBottom - bottom);
     const hiddenWidth = Math.max(0, left - currentWidth) + Math.max(0, viewRight - right);
-    const percent = (viewHeight - hiddenHeight) * (viewWidth - hiddenWidth) * 100 / viewHeight / viewWidth | 
0;
+    const fractionHeight = (viewHeight - hiddenHeight) / viewHeight,
+          fractionWidth = (viewWidth - hiddenWidth) / viewWidth;
+    const percent = fractionHeight * fractionWidth * 100 | 0;
     visible.push({
       id: view.id,
       x: currentWidth,
       y: currentHeight,
       view,
-      percent
+      percent,
+      widthPercent: fractionWidth * 100 | 0
     });
   }
 
@@ -3396,62 +3577,23 @@ function getVisibleElements(scrollEl, views, sortByVisibility = false, horizonta
         return -pc;
       }
 
-      return a.id - b.id;
-    });
-  }
-
-  return {
-    first,
-    last,
-    views: visible
-  };
-}
-
-function noContextMenuHandler(evt) {
-  evt.preventDefault();
-}
-
-function isDataSchema(url) {
-  let i = 0;
-  const ii = url.length;
-
-  while (i < ii && url[i].trim() === "") {
-    i++;
-  }
-
-  return url.substring(i, i + 5).toLowerCase() === "data:";
-}
-
-function getPDFFileNameFromURL(url, defaultFilename = "document.pdf") {
-  if (typeof url !== "string") {
-    return defaultFilename;
-  }
-
-  if (isDataSchema(url)) {
-    console.warn("getPDFFileNameFromURL: " + 'ignoring "data:" URL for performance reasons.');
-    return defaultFilename;
-  }
-
-  const reURI = /^(?:(?:[^:]+:)?\/\/[^\/]+)?([^?#]*)(\?[^#]*)?(#.*)?$/;
-  const reFilename = /[^\/?#=]+\.pdf\b(?!.*\.pdf\b)/i;
-  const splitURI = reURI.exec(url);
-  let suggestedFilename = reFilename.exec(splitURI[1]) || reFilename.exec(splitURI[2]) || 
reFilename.exec(splitURI[3]);
-
-  if (suggestedFilename) {
-    suggestedFilename = suggestedFilename[0];
-
-    if (suggestedFilename.includes("%")) {
-      try {
-        suggestedFilename = reFilename.exec(decodeURIComponent(suggestedFilename))[0];
-      } catch (ex) {}
-    }
+      return a.id - b.id;
+    });
   }
 
-  return suggestedFilename || defaultFilename;
+  return {
+    first,
+    last,
+    views: visible
+  };
+}
+
+function noContextMenuHandler(evt) {
+  evt.preventDefault();
 }
 
 function normalizeWheelEventDirection(evt) {
-  let delta = Math.sqrt(evt.deltaX * evt.deltaX + evt.deltaY * evt.deltaY);
+  let delta = Math.hypot(evt.deltaX, evt.deltaY);
   const angle = Math.atan2(evt.deltaY, evt.deltaX);
 
   if (-0.25 * Math.PI < angle && angle < 0.75 * Math.PI) {
@@ -3550,15 +3692,17 @@ class EventBus {
     this._listeners = Object.create(null);
   }
 
-  on(eventName, listener) {
+  on(eventName, listener, options = null) {
     this._on(eventName, listener, {
-      external: true
+      external: true,
+      once: options?.once
     });
   }
 
-  off(eventName, listener) {
+  off(eventName, listener, options = null) {
     this._off(eventName, listener, {
-      external: true
+      external: true,
+      once: options?.once
     });
   }
 
@@ -3571,16 +3715,17 @@ class EventBus {
 
     const args = Array.prototype.slice.call(arguments, 1);
     let externalListeners;
-    eventListeners.slice(0).forEach(function ({
+    eventListeners.slice(0).forEach(({
       listener,
-      external
-    }) {
-      if (external) {
-        if (!externalListeners) {
-          externalListeners = [];
-        }
+      external,
+      once
+    }) => {
+      if (once) {
+        this._off(eventName, listener);
+      }
 
-        externalListeners.push(listener);
+      if (external) {
+        (externalListeners || (externalListeners = [])).push(listener);
         return;
       }
 
@@ -3588,7 +3733,7 @@ class EventBus {
     });
 
     if (externalListeners) {
-      externalListeners.forEach(function (listener) {
+      externalListeners.forEach(listener => {
         listener.apply(null, args);
       });
       externalListeners = null;
@@ -3596,15 +3741,13 @@ class EventBus {
   }
 
   _on(eventName, listener, options = null) {
-    let eventListeners = this._listeners[eventName];
-
-    if (!eventListeners) {
-      this._listeners[eventName] = eventListeners = [];
-    }
+    var _this$_listeners;
 
+    const eventListeners = (_this$_listeners = this._listeners)[eventName] || (_this$_listeners[eventName] = 
[]);
     eventListeners.push({
       listener,
-      external: (options && options.external) === true
+      external: options?.external === true,
+      once: options?.once === true
     });
   }
 
@@ -3679,7 +3822,8 @@ class ProgressBar {
     const scrollbarWidth = container.offsetWidth - viewer.offsetWidth;
 
     if (scrollbarWidth > 0) {
-      this.bar.style.width = `calc(100% - ${scrollbarWidth}px)`;
+      const doc = document.documentElement;
+      doc.style.setProperty(LOADINGBAR_END_OFFSET_VAR, `${scrollbarWidth}px`);
     }
   }
 
@@ -3690,7 +3834,6 @@ class ProgressBar {
 
     this.visible = false;
     this.bar.classList.add("hidden");
-    document.body.classList.remove("loadingInProgress");
   }
 
   show() {
@@ -3699,7 +3842,6 @@ class ProgressBar {
     }
 
     this.visible = true;
-    document.body.classList.add("loadingInProgress");
     this.bar.classList.remove("hidden");
   }
 
@@ -3726,299 +3868,61 @@ function moveToEndOfArray(arr, condition) {
   }
 }
 
-/***/ }),
-/* 3 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.OptionKind = exports.AppOptions = void 0;
-
-var _viewer_compatibility = __webpack_require__(4);
-
-const OptionKind = {
-  VIEWER: 0x02,
-  API: 0x04,
-  WORKER: 0x08,
-  PREFERENCE: 0x80
-};
-exports.OptionKind = OptionKind;
-const defaultOptions = {
-  cursorToolOnLoad: {
-    value: 0,
-    kind: OptionKind.VIEWER + OptionKind.PREFERENCE
-  },
-  defaultUrl: {
-    value: "compressed.tracemonkey-pldi-09.pdf",
-    kind: OptionKind.VIEWER
-  },
-  defaultZoomValue: {
-    value: "",
-    kind: OptionKind.VIEWER + OptionKind.PREFERENCE
-  },
-  disableHistory: {
-    value: false,
-    kind: OptionKind.VIEWER
-  },
-  disablePageLabels: {
-    value: false,
-    kind: OptionKind.VIEWER + OptionKind.PREFERENCE
-  },
-  enablePermissions: {
-    value: false,
-    kind: OptionKind.VIEWER + OptionKind.PREFERENCE
-  },
-  enablePrintAutoRotate: {
-    value: false,
-    kind: OptionKind.VIEWER + OptionKind.PREFERENCE
-  },
-  enableWebGL: {
-    value: false,
-    kind: OptionKind.VIEWER + OptionKind.PREFERENCE
-  },
-  externalLinkRel: {
-    value: "noopener noreferrer nofollow",
-    kind: OptionKind.VIEWER
-  },
-  externalLinkTarget: {
-    value: 0,
-    kind: OptionKind.VIEWER + OptionKind.PREFERENCE
-  },
-  historyUpdateUrl: {
-    value: false,
-    kind: OptionKind.VIEWER + OptionKind.PREFERENCE
-  },
-  ignoreDestinationZoom: {
-    value: false,
-    kind: OptionKind.VIEWER + OptionKind.PREFERENCE
-  },
-  imageResourcesPath: {
-    value: "./images/",
-    kind: OptionKind.VIEWER
-  },
-  maxCanvasPixels: {
-    value: 16777216,
-    compatibility: _viewer_compatibility.viewerCompatibilityParams.maxCanvasPixels,
-    kind: OptionKind.VIEWER
-  },
-  pdfBugEnabled: {
-    value: false,
-    kind: OptionKind.VIEWER + OptionKind.PREFERENCE
-  },
-  printResolution: {
-    value: 150,
-    kind: OptionKind.VIEWER
-  },
-  renderer: {
-    value: "canvas",
-    kind: OptionKind.VIEWER + OptionKind.PREFERENCE
-  },
-  renderInteractiveForms: {
-    value: true,
-    kind: OptionKind.VIEWER + OptionKind.PREFERENCE
-  },
-  sidebarViewOnLoad: {
-    value: -1,
-    kind: OptionKind.VIEWER + OptionKind.PREFERENCE
-  },
-  scrollModeOnLoad: {
-    value: -1,
-    kind: OptionKind.VIEWER + OptionKind.PREFERENCE
-  },
-  spreadModeOnLoad: {
-    value: -1,
-    kind: OptionKind.VIEWER + OptionKind.PREFERENCE
-  },
-  textLayerMode: {
-    value: 1,
-    kind: OptionKind.VIEWER + OptionKind.PREFERENCE
-  },
-  useOnlyCssZoom: {
-    value: false,
-    kind: OptionKind.VIEWER + OptionKind.PREFERENCE
-  },
-  viewOnLoad: {
-    value: 0,
-    kind: OptionKind.VIEWER + OptionKind.PREFERENCE
-  },
-  cMapPacked: {
-    value: true,
-    kind: OptionKind.API
-  },
-  cMapUrl: {
-    value: "../web/cmaps/",
-    kind: OptionKind.API
-  },
-  disableAutoFetch: {
-    value: false,
-    kind: OptionKind.API + OptionKind.PREFERENCE
-  },
-  disableFontFace: {
-    value: false,
-    kind: OptionKind.API + OptionKind.PREFERENCE
-  },
-  disableRange: {
-    value: false,
-    kind: OptionKind.API + OptionKind.PREFERENCE
-  },
-  disableStream: {
-    value: false,
-    kind: OptionKind.API + OptionKind.PREFERENCE
-  },
-  docBaseUrl: {
-    value: "",
-    kind: OptionKind.API
-  },
-  fontExtraProperties: {
-    value: false,
-    kind: OptionKind.API
-  },
-  isEvalSupported: {
-    value: true,
-    kind: OptionKind.API
-  },
-  maxImageSize: {
-    value: -1,
-    kind: OptionKind.API
-  },
-  pdfBug: {
-    value: false,
-    kind: OptionKind.API
-  },
-  verbosity: {
-    value: 1,
-    kind: OptionKind.API
-  },
-  workerPort: {
-    value: null,
-    kind: OptionKind.WORKER
-  },
-  workerSrc: {
-    value: "../build/pdf.worker.js",
-    kind: OptionKind.WORKER
-  }
-};
-{
-  defaultOptions.disablePreferences = {
-    value: false,
-    kind: OptionKind.VIEWER
-  };
-  defaultOptions.locale = {
-    value: typeof navigator !== "undefined" ? navigator.language : "en-US",
-    kind: OptionKind.VIEWER
-  };
-}
-const userOptions = Object.create(null);
-
-class AppOptions {
-  constructor() {
-    throw new Error("Cannot initialize AppOptions.");
-  }
-
-  static get(name) {
-    const userOption = userOptions[name];
-
-    if (userOption !== undefined) {
-      return userOption;
-    }
-
-    const defaultOption = defaultOptions[name];
-
-    if (defaultOption !== undefined) {
-      return defaultOption.compatibility || defaultOption.value;
-    }
+function getActiveOrFocusedElement() {
+  let curRoot = document;
+  let curActiveOrFocused = curRoot.activeElement || curRoot.querySelector(":focus");
 
-    return undefined;
+  while (curActiveOrFocused?.shadowRoot) {
+    curRoot = curActiveOrFocused.shadowRoot;
+    curActiveOrFocused = curRoot.activeElement || curRoot.querySelector(":focus");
   }
 
-  static getAll(kind = null) {
-    const options = Object.create(null);
-
-    for (const name in defaultOptions) {
-      const defaultOption = defaultOptions[name];
-
-      if (kind) {
-        if ((kind & defaultOption.kind) === 0) {
-          continue;
-        }
-
-        if (kind === OptionKind.PREFERENCE) {
-          const value = defaultOption.value,
-                valueType = typeof value;
-
-          if (valueType === "boolean" || valueType === "string" || valueType === "number" && 
Number.isInteger(value)) {
-            options[name] = value;
-            continue;
-          }
-
-          throw new Error(`Invalid type for preference: ${name}`);
-        }
-      }
-
-      const userOption = userOptions[name];
-      options[name] = userOption !== undefined ? userOption : defaultOption.compatibility || 
defaultOption.value;
-    }
+  return curActiveOrFocused;
+}
 
-    return options;
-  }
+function apiPageLayoutToSpreadMode(layout) {
+  switch (layout) {
+    case "SinglePage":
+    case "OneColumn":
+      return SpreadMode.NONE;
 
-  static set(name, value) {
-    userOptions[name] = value;
-  }
+    case "TwoColumnLeft":
+    case "TwoPageLeft":
+      return SpreadMode.ODD;
 
-  static remove(name) {
-    delete userOptions[name];
+    case "TwoColumnRight":
+    case "TwoPageRight":
+      return SpreadMode.EVEN;
   }
 
+  return SpreadMode.NONE;
 }
 
-exports.AppOptions = AppOptions;
-
-/***/ }),
-/* 4 */
-/***/ (function(module, exports, __webpack_require__) {
+function apiPageModeToSidebarView(mode) {
+  switch (mode) {
+    case "UseNone":
+      return SidebarView.NONE;
 
-"use strict";
+    case "UseThumbs":
+      return SidebarView.THUMBS;
 
+    case "UseOutlines":
+      return SidebarView.OUTLINE;
 
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.viewerCompatibilityParams = void 0;
-const compatibilityParams = Object.create(null);
-{
-  const userAgent = typeof navigator !== "undefined" && navigator.userAgent || "";
-  const platform = typeof navigator !== "undefined" && navigator.platform || "";
-  const maxTouchPoints = typeof navigator !== "undefined" && navigator.maxTouchPoints || 1;
-  const isAndroid = /Android/.test(userAgent);
-  const isIE = /Trident/.test(userAgent);
-  const isIOS = /\b(iPad|iPhone|iPod)(?=;)/.test(userAgent) || platform === "MacIntel" && maxTouchPoints > 1;
-  const isIOSChrome = /CriOS/.test(userAgent);
+    case "UseAttachments":
+      return SidebarView.ATTACHMENTS;
 
-  (function checkOnBlobSupport() {
-    if (isIE || isIOSChrome) {
-      compatibilityParams.disableCreateObjectURL = true;
-    }
-  })();
+    case "UseOC":
+      return SidebarView.LAYERS;
+  }
 
-  (function checkCanvasSizeLimitation() {
-    if (isIOS || isAndroid) {
-      compatibilityParams.maxCanvasPixels = 5242880;
-    }
-  })();
+  return SidebarView.NONE;
 }
-const viewerCompatibilityParams = Object.freeze(compatibilityParams);
-exports.viewerCompatibilityParams = viewerCompatibilityParams;
 
 /***/ }),
 /* 5 */
-/***/ (function(module, exports, __webpack_require__) {
+/***/ ((module) => {
 
-"use strict";
 
 
 let pdfjsLib;
@@ -4033,18 +3937,19 @@ module.exports = pdfjsLib;
 
 /***/ }),
 /* 6 */
-/***/ (function(module, exports, __webpack_require__) {
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.PDFCursorTools = exports.CursorTool = void 0;
 
 var _grab_to_pan = __webpack_require__(7);
 
+var _ui_utils = __webpack_require__(4);
+
 const CursorTool = {
   SELECT: 0,
   HAND: 1,
@@ -4133,20 +4038,22 @@ class PDFCursorTools {
     });
 
     this.eventBus._on("presentationmodechanged", evt => {
-      if (evt.switchInProgress) {
-        return;
-      }
-
-      let previouslyActive;
+      switch (evt.state) {
+        case _ui_utils.PresentationModeState.FULLSCREEN:
+          {
+            const previouslyActive = this.active;
+            this.switchTool(CursorTool.SELECT);
+            this.activeBeforePresentationMode = previouslyActive;
+            break;
+          }
 
-      if (evt.active) {
-        previouslyActive = this.active;
-        this.switchTool(CursorTool.SELECT);
-        this.activeBeforePresentationMode = previouslyActive;
-      } else {
-        previouslyActive = this.activeBeforePresentationMode;
-        this.activeBeforePresentationMode = null;
-        this.switchTool(previouslyActive);
+        case _ui_utils.PresentationModeState.NORMAL:
+          {
+            const previouslyActive = this.activeBeforePresentationMode;
+            this.activeBeforePresentationMode = null;
+            this.switchTool(previouslyActive);
+            break;
+          }
       }
     });
   }
@@ -4157,14 +4064,13 @@ exports.PDFCursorTools = PDFCursorTools;
 
 /***/ }),
 /* 7 */
-/***/ (function(module, exports, __webpack_require__) {
+/***/ ((__unused_webpack_module, exports) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.GrabToPan = GrabToPan;
 
 function GrabToPan(options) {
@@ -4221,7 +4127,7 @@ GrabToPan.prototype = {
     }
   },
   ignoreTarget: function GrabToPan_ignoreTarget(node) {
-    return node[matchesSelector]("a[href], a[href] *, input, textarea, button, button *, select, option");
+    return node.matches("a[href], a[href] *, input, textarea, button, button *, select, option");
   },
   _onmousedown: function GrabToPan__onmousedown(event) {
     if (event.button !== 0 || this.ignoreTarget(event.target)) {
@@ -4287,32 +4193,16 @@ GrabToPan.prototype = {
     this.overlay.remove();
   }
 };
-let matchesSelector;
-["webkitM", "mozM", "msM", "oM", "m"].some(function (prefix) {
-  let name = prefix + "atches";
-
-  if (name in document.documentElement) {
-    matchesSelector = name;
-  }
-
-  name += "Selector";
-
-  if (name in document.documentElement) {
-    matchesSelector = name;
-  }
-
-  return matchesSelector;
-});
-const isNotIEorIsIE10plus = !document.documentMode || document.documentMode > 9;
-const chrome = window.chrome;
-const isChrome15OrOpera15plus = chrome && (chrome.webstore || chrome.app);
-const isSafari6plus = /Apple/.test(navigator.vendor) && 
/Version\/([6-9]\d*|[1-5]\d+)/.test(navigator.userAgent);
 
 function isLeftMouseReleased(event) {
-  if ("buttons" in event && isNotIEorIsIE10plus) {
+  if ("buttons" in event) {
     return !(event.buttons & 1);
   }
 
+  const chrome = window.chrome;
+  const isChrome15OrOpera15plus = chrome && (chrome.webstore || chrome.app);
+  const isSafari6plus = /Apple/.test(navigator.vendor) && 
/Version\/([6-9]\d*|[1-5]\d+)/.test(navigator.userAgent);
+
   if (isChrome15OrOpera15plus || isSafari6plus) {
     return event.which === 0;
   }
@@ -4322,15 +4212,17 @@ function isLeftMouseReleased(event) {
 
 /***/ }),
 /* 8 */
-/***/ (function(module, exports, __webpack_require__) {
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
-exports.PDFRenderingQueue = exports.RenderingStates = void 0;
+}));
+exports.RenderingStates = exports.PDFRenderingQueue = void 0;
+
+var _pdfjsLib = __webpack_require__(5);
+
 const CLEANUP_TIMEOUT = 30000;
 const RenderingStates = {
   INITIAL: 0,
@@ -4444,6 +4336,10 @@ class PDFRenderingQueue {
         view.draw().finally(() => {
           this.renderHighestPriority();
         }).catch(reason => {
+          if (reason instanceof _pdfjsLib.RenderingCancelledException) {
+            return;
+          }
+
           console.error(`renderView: "${reason}"`);
         });
         break;
@@ -4458,2838 +4354,3172 @@ exports.PDFRenderingQueue = PDFRenderingQueue;
 
 /***/ }),
 /* 9 */
-/***/ (function(module, exports, __webpack_require__) {
+/***/ ((__unused_webpack_module, exports) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
-exports.PDFSidebar = exports.SidebarView = void 0;
+}));
+exports.OverlayManager = void 0;
 
-var _ui_utils = __webpack_require__(2);
+class OverlayManager {
+  constructor() {
+    this._overlays = {};
+    this._active = null;
+    this._keyDownBound = this._keyDown.bind(this);
+  }
 
-var _pdf_rendering_queue = __webpack_require__(8);
+  get active() {
+    return this._active;
+  }
 
-const UI_NOTIFICATION_CLASS = "pdfSidebarNotification";
-const SidebarView = {
-  UNKNOWN: -1,
-  NONE: 0,
-  THUMBS: 1,
-  OUTLINE: 2,
-  ATTACHMENTS: 3,
-  LAYERS: 4
-};
-exports.SidebarView = SidebarView;
+  async register(name, element, callerCloseMethod = null, canForceClose = false) {
+    let container;
 
-class PDFSidebar {
-  constructor({
-    elements,
-    pdfViewer,
-    pdfThumbnailViewer,
-    eventBus,
-    l10n = _ui_utils.NullL10n,
-    disableNotification = false
-  }) {
-    this.isOpen = false;
-    this.active = SidebarView.THUMBS;
-    this.isInitialViewSet = false;
-    this.onToggled = null;
-    this.pdfViewer = pdfViewer;
-    this.pdfThumbnailViewer = pdfThumbnailViewer;
-    this.outerContainer = elements.outerContainer;
-    this.viewerContainer = elements.viewerContainer;
-    this.toggleButton = elements.toggleButton;
-    this.thumbnailButton = elements.thumbnailButton;
-    this.outlineButton = elements.outlineButton;
-    this.attachmentsButton = elements.attachmentsButton;
-    this.layersButton = elements.layersButton;
-    this.thumbnailView = elements.thumbnailView;
-    this.outlineView = elements.outlineView;
-    this.attachmentsView = elements.attachmentsView;
-    this.layersView = elements.layersView;
-    this.eventBus = eventBus;
+    if (!name || !element || !(container = element.parentNode)) {
+      throw new Error("Not enough parameters.");
+    } else if (this._overlays[name]) {
+      throw new Error("The overlay is already registered.");
+    }
+
+    this._overlays[name] = {
+      element,
+      container,
+      callerCloseMethod,
+      canForceClose
+    };
+  }
+
+  async unregister(name) {
+    if (!this._overlays[name]) {
+      throw new Error("The overlay does not exist.");
+    } else if (this._active === name) {
+      throw new Error("The overlay cannot be removed while it is active.");
+    }
+
+    delete this._overlays[name];
+  }
+
+  async open(name) {
+    if (!this._overlays[name]) {
+      throw new Error("The overlay does not exist.");
+    } else if (this._active) {
+      if (this._overlays[name].canForceClose) {
+        this._closeThroughCaller();
+      } else if (this._active === name) {
+        throw new Error("The overlay is already active.");
+      } else {
+        throw new Error("Another overlay is currently active.");
+      }
+    }
+
+    this._active = name;
+
+    this._overlays[this._active].element.classList.remove("hidden");
+
+    this._overlays[this._active].container.classList.remove("hidden");
+
+    window.addEventListener("keydown", this._keyDownBound);
+  }
+
+  async close(name) {
+    if (!this._overlays[name]) {
+      throw new Error("The overlay does not exist.");
+    } else if (!this._active) {
+      throw new Error("The overlay is currently not active.");
+    } else if (this._active !== name) {
+      throw new Error("Another overlay is currently active.");
+    }
+
+    this._overlays[this._active].container.classList.add("hidden");
+
+    this._overlays[this._active].element.classList.add("hidden");
+
+    this._active = null;
+    window.removeEventListener("keydown", this._keyDownBound);
+  }
+
+  _keyDown(evt) {
+    if (this._active && evt.keyCode === 27) {
+      this._closeThroughCaller();
+
+      evt.preventDefault();
+    }
+  }
+
+  _closeThroughCaller() {
+    if (this._overlays[this._active].callerCloseMethod) {
+      this._overlays[this._active].callerCloseMethod();
+    }
+
+    if (this._active) {
+      this.close(this._active);
+    }
+  }
+
+}
+
+exports.OverlayManager = OverlayManager;
+
+/***/ }),
+/* 10 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports.PasswordPrompt = void 0;
+
+var _pdfjsLib = __webpack_require__(5);
+
+class PasswordPrompt {
+  constructor(options, overlayManager, l10n, isViewerEmbedded = false) {
+    this.overlayName = options.overlayName;
+    this.container = options.container;
+    this.label = options.label;
+    this.input = options.input;
+    this.submitButton = options.submitButton;
+    this.cancelButton = options.cancelButton;
+    this.overlayManager = overlayManager;
     this.l10n = l10n;
-    this._disableNotification = disableNotification;
+    this._isViewerEmbedded = isViewerEmbedded;
+    this.updateCallback = null;
+    this.reason = null;
+    this.submitButton.addEventListener("click", this.verify.bind(this));
+    this.cancelButton.addEventListener("click", this.close.bind(this));
+    this.input.addEventListener("keydown", e => {
+      if (e.keyCode === 13) {
+        this.verify();
+      }
+    });
+    this.overlayManager.register(this.overlayName, this.container, this.close.bind(this), true);
+  }
 
-    this._addEventListeners();
+  async open() {
+    await this.overlayManager.open(this.overlayName);
+    const passwordIncorrect = this.reason === _pdfjsLib.PasswordResponses.INCORRECT_PASSWORD;
+
+    if (!this._isViewerEmbedded || passwordIncorrect) {
+      this.input.focus();
+    }
+
+    this.label.textContent = await this.l10n.get(`password_${passwordIncorrect ? "invalid" : "label"}`);
+  }
+
+  close() {
+    this.overlayManager.close(this.overlayName).then(() => {
+      this.input.value = "";
+    });
+  }
+
+  verify() {
+    const password = this.input.value;
+
+    if (password?.length > 0) {
+      this.close();
+      this.updateCallback(password);
+    }
+  }
+
+  setUpdateCallback(updateCallback, reason) {
+    this.updateCallback = updateCallback;
+    this.reason = reason;
   }
 
-  reset() {
-    this.isInitialViewSet = false;
+}
 
-    this._hideUINotification(null);
+exports.PasswordPrompt = PasswordPrompt;
 
-    this.switchView(SidebarView.THUMBS);
-    this.outlineButton.disabled = false;
-    this.attachmentsButton.disabled = false;
-    this.layersButton.disabled = false;
-  }
+/***/ }),
+/* 11 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 
-  get visibleView() {
-    return this.isOpen ? this.active : SidebarView.NONE;
-  }
 
-  get isThumbnailViewVisible() {
-    return this.isOpen && this.active === SidebarView.THUMBS;
-  }
 
-  get isOutlineViewVisible() {
-    return this.isOpen && this.active === SidebarView.OUTLINE;
-  }
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports.PDFAttachmentViewer = void 0;
 
-  get isAttachmentsViewVisible() {
-    return this.isOpen && this.active === SidebarView.ATTACHMENTS;
-  }
+var _pdfjsLib = __webpack_require__(5);
 
-  get isLayersViewVisible() {
-    return this.isOpen && this.active === SidebarView.LAYERS;
-  }
+var _base_tree_viewer = __webpack_require__(12);
 
-  setInitialView(view = SidebarView.NONE) {
-    if (this.isInitialViewSet) {
-      return;
-    }
+class PDFAttachmentViewer extends _base_tree_viewer.BaseTreeViewer {
+  constructor(options) {
+    super(options);
+    this.downloadManager = options.downloadManager;
 
-    this.isInitialViewSet = true;
+    this.eventBus._on("fileattachmentannotation", this._appendAttachment.bind(this));
+  }
 
-    if (view === SidebarView.NONE || view === SidebarView.UNKNOWN) {
-      this._dispatchEvent();
+  reset(keepRenderedCapability = false) {
+    super.reset();
+    this._attachments = null;
 
-      return;
+    if (!keepRenderedCapability) {
+      this._renderedCapability = (0, _pdfjsLib.createPromiseCapability)();
     }
 
-    if (!this._switchView(view, true)) {
-      this._dispatchEvent();
+    if (this._pendingDispatchEvent) {
+      clearTimeout(this._pendingDispatchEvent);
     }
-  }
 
-  switchView(view, forceOpen = false) {
-    this._switchView(view, forceOpen);
+    this._pendingDispatchEvent = null;
   }
 
-  _switchView(view, forceOpen = false) {
-    const isViewChanged = view !== this.active;
-    let shouldForceRendering = false;
-
-    switch (view) {
-      case SidebarView.NONE:
-        if (this.isOpen) {
-          this.close();
-          return true;
-        }
+  _dispatchEvent(attachmentsCount) {
+    this._renderedCapability.resolve();
 
-        return false;
+    if (this._pendingDispatchEvent) {
+      clearTimeout(this._pendingDispatchEvent);
+      this._pendingDispatchEvent = null;
+    }
 
-      case SidebarView.THUMBS:
-        if (this.isOpen && isViewChanged) {
-          shouldForceRendering = true;
-        }
+    if (attachmentsCount === 0) {
+      this._pendingDispatchEvent = setTimeout(() => {
+        this.eventBus.dispatch("attachmentsloaded", {
+          source: this,
+          attachmentsCount: 0
+        });
+        this._pendingDispatchEvent = null;
+      });
+      return;
+    }
 
-        break;
+    this.eventBus.dispatch("attachmentsloaded", {
+      source: this,
+      attachmentsCount
+    });
+  }
 
-      case SidebarView.OUTLINE:
-        if (this.outlineButton.disabled) {
-          return false;
-        }
+  _bindLink(element, {
+    content,
+    filename
+  }) {
+    element.onclick = () => {
+      this.downloadManager.openOrDownloadData(element, content, filename);
+      return false;
+    };
+  }
 
-        break;
+  render({
+    attachments,
+    keepRenderedCapability = false
+  }) {
+    if (this._attachments) {
+      this.reset(keepRenderedCapability);
+    }
 
-      case SidebarView.ATTACHMENTS:
-        if (this.attachmentsButton.disabled) {
-          return false;
-        }
+    this._attachments = attachments || null;
 
-        break;
+    if (!attachments) {
+      this._dispatchEvent(0);
 
-      case SidebarView.LAYERS:
-        if (this.layersButton.disabled) {
-          return false;
-        }
+      return;
+    }
 
-        break;
+    const names = Object.keys(attachments).sort(function (a, b) {
+      return a.toLowerCase().localeCompare(b.toLowerCase());
+    });
+    const fragment = document.createDocumentFragment();
+    let attachmentsCount = 0;
 
-      default:
-        console.error(`PDFSidebar._switchView: "${view}" is not a valid view.`);
-        return false;
-    }
+    for (const name of names) {
+      const item = attachments[name];
+      const content = item.content,
+            filename = (0, _pdfjsLib.getFilenameFromUrl)(item.filename);
+      const div = document.createElement("div");
+      div.className = "treeItem";
+      const element = document.createElement("a");
 
-    this.active = view;
-    this.thumbnailButton.classList.toggle("toggled", view === SidebarView.THUMBS);
-    this.outlineButton.classList.toggle("toggled", view === SidebarView.OUTLINE);
-    this.attachmentsButton.classList.toggle("toggled", view === SidebarView.ATTACHMENTS);
-    this.layersButton.classList.toggle("toggled", view === SidebarView.LAYERS);
-    this.thumbnailView.classList.toggle("hidden", view !== SidebarView.THUMBS);
-    this.outlineView.classList.toggle("hidden", view !== SidebarView.OUTLINE);
-    this.attachmentsView.classList.toggle("hidden", view !== SidebarView.ATTACHMENTS);
-    this.layersView.classList.toggle("hidden", view !== SidebarView.LAYERS);
+      this._bindLink(element, {
+        content,
+        filename
+      });
 
-    if (forceOpen && !this.isOpen) {
-      this.open();
-      return true;
+      element.textContent = this._normalizeTextContent(filename);
+      div.appendChild(element);
+      fragment.appendChild(div);
+      attachmentsCount++;
     }
 
-    if (shouldForceRendering) {
-      this._updateThumbnailViewer();
+    this._finishRendering(fragment, attachmentsCount);
+  }
 
-      this._forceRendering();
-    }
+  _appendAttachment({
+    id,
+    filename,
+    content
+  }) {
+    const renderedPromise = this._renderedCapability.promise;
+    renderedPromise.then(() => {
+      if (renderedPromise !== this._renderedCapability.promise) {
+        return;
+      }
 
-    if (isViewChanged) {
-      this._dispatchEvent();
-    }
+      let attachments = this._attachments;
 
-    this._hideUINotification(this.active);
+      if (!attachments) {
+        attachments = Object.create(null);
+      } else {
+        for (const name in attachments) {
+          if (id === name) {
+            return;
+          }
+        }
+      }
 
-    return isViewChanged;
+      attachments[id] = {
+        filename,
+        content
+      };
+      this.render({
+        attachments,
+        keepRenderedCapability: true
+      });
+    });
   }
 
-  open() {
-    if (this.isOpen) {
-      return;
-    }
+}
 
-    this.isOpen = true;
-    this.toggleButton.classList.add("toggled");
-    this.outerContainer.classList.add("sidebarMoving", "sidebarOpen");
+exports.PDFAttachmentViewer = PDFAttachmentViewer;
 
-    if (this.active === SidebarView.THUMBS) {
-      this._updateThumbnailViewer();
-    }
+/***/ }),
+/* 12 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 
-    this._forceRendering();
 
-    this._dispatchEvent();
 
-    this._hideUINotification(this.active);
-  }
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports.BaseTreeViewer = void 0;
 
-  close() {
-    if (!this.isOpen) {
-      return;
-    }
+var _pdfjsLib = __webpack_require__(5);
 
-    this.isOpen = false;
-    this.toggleButton.classList.remove("toggled");
-    this.outerContainer.classList.add("sidebarMoving");
-    this.outerContainer.classList.remove("sidebarOpen");
+const TREEITEM_OFFSET_TOP = -100;
+const TREEITEM_SELECTED_CLASS = "selected";
 
-    this._forceRendering();
+class BaseTreeViewer {
+  constructor(options) {
+    if (this.constructor === BaseTreeViewer) {
+      throw new Error("Cannot initialize BaseTreeViewer.");
+    }
 
-    this._dispatchEvent();
+    this.container = options.container;
+    this.eventBus = options.eventBus;
+    this.reset();
   }
 
-  toggle() {
-    if (this.isOpen) {
-      this.close();
-    } else {
-      this.open();
-    }
+  reset() {
+    this._pdfDocument = null;
+    this._lastToggleIsShow = true;
+    this._currentTreeItem = null;
+    this.container.textContent = "";
+    this.container.classList.remove("treeWithDeepNesting");
   }
 
-  _dispatchEvent() {
-    this.eventBus.dispatch("sidebarviewchanged", {
-      source: this,
-      view: this.visibleView
-    });
+  _dispatchEvent(count) {
+    throw new Error("Not implemented: _dispatchEvent");
   }
 
-  _forceRendering() {
-    if (this.onToggled) {
-      this.onToggled();
-    } else {
-      this.pdfViewer.forceRendering();
-      this.pdfThumbnailViewer.forceRendering();
-    }
+  _bindLink(element, params) {
+    throw new Error("Not implemented: _bindLink");
   }
 
-  _updateThumbnailViewer() {
-    const {
-      pdfViewer,
-      pdfThumbnailViewer
-    } = this;
-    const pagesCount = pdfViewer.pagesCount;
+  _normalizeTextContent(str) {
+    return (0, _pdfjsLib.removeNullCharacters)(str) || "\u2013";
+  }
+
+  _addToggleButton(div, hidden = false) {
+    const toggler = document.createElement("div");
+    toggler.className = "treeItemToggler";
+
+    if (hidden) {
+      toggler.classList.add("treeItemsHidden");
+    }
 
-    for (let pageIndex = 0; pageIndex < pagesCount; pageIndex++) {
-      const pageView = pdfViewer.getPageView(pageIndex);
+    toggler.onclick = evt => {
+      evt.stopPropagation();
+      toggler.classList.toggle("treeItemsHidden");
 
-      if (pageView && pageView.renderingState === _pdf_rendering_queue.RenderingStates.FINISHED) {
-        const thumbnailView = pdfThumbnailViewer.getThumbnail(pageIndex);
-        thumbnailView.setImage(pageView);
+      if (evt.shiftKey) {
+        const shouldShowAll = !toggler.classList.contains("treeItemsHidden");
+
+        this._toggleTreeItem(div, shouldShowAll);
       }
-    }
+    };
 
-    pdfThumbnailViewer.scrollThumbnailIntoView(pdfViewer.currentPageNumber);
+    div.insertBefore(toggler, div.firstChild);
   }
 
-  _showUINotification(view) {
-    if (this._disableNotification) {
-      return;
+  _toggleTreeItem(root, show = false) {
+    this._lastToggleIsShow = show;
+
+    for (const toggler of root.querySelectorAll(".treeItemToggler")) {
+      toggler.classList.toggle("treeItemsHidden", !show);
     }
+  }
 
-    this.l10n.get("toggle_sidebar_notification2.title", null, "Toggle Sidebar (document contains 
outline/attachments/layers)").then(msg => {
-      this.toggleButton.title = msg;
-    });
+  _toggleAllTreeItems() {
+    this._toggleTreeItem(this.container, !this._lastToggleIsShow);
+  }
 
-    if (!this.isOpen) {
-      this.toggleButton.classList.add(UI_NOTIFICATION_CLASS);
-    } else if (view === this.active) {
-      return;
+  _finishRendering(fragment, count, hasAnyNesting = false) {
+    if (hasAnyNesting) {
+      this.container.classList.add("treeWithDeepNesting");
+      this._lastToggleIsShow = !fragment.querySelector(".treeItemsHidden");
     }
 
-    switch (view) {
-      case SidebarView.OUTLINE:
-        this.outlineButton.classList.add(UI_NOTIFICATION_CLASS);
-        break;
+    this.container.appendChild(fragment);
 
-      case SidebarView.ATTACHMENTS:
-        this.attachmentsButton.classList.add(UI_NOTIFICATION_CLASS);
-        break;
+    this._dispatchEvent(count);
+  }
 
-      case SidebarView.LAYERS:
-        this.layersButton.classList.add(UI_NOTIFICATION_CLASS);
-        break;
+  render(params) {
+    throw new Error("Not implemented: render");
+  }
+
+  _updateCurrentTreeItem(treeItem = null) {
+    if (this._currentTreeItem) {
+      this._currentTreeItem.classList.remove(TREEITEM_SELECTED_CLASS);
+
+      this._currentTreeItem = null;
+    }
+
+    if (treeItem) {
+      treeItem.classList.add(TREEITEM_SELECTED_CLASS);
+      this._currentTreeItem = treeItem;
     }
   }
 
-  _hideUINotification(view) {
-    if (this._disableNotification) {
+  _scrollToCurrentTreeItem(treeItem) {
+    if (!treeItem) {
       return;
     }
 
-    const removeNotification = sidebarView => {
-      switch (sidebarView) {
-        case SidebarView.OUTLINE:
-          this.outlineButton.classList.remove(UI_NOTIFICATION_CLASS);
-          break;
-
-        case SidebarView.ATTACHMENTS:
-          this.attachmentsButton.classList.remove(UI_NOTIFICATION_CLASS);
-          break;
+    let currentNode = treeItem.parentNode;
 
-        case SidebarView.LAYERS:
-          this.layersButton.classList.remove(UI_NOTIFICATION_CLASS);
-          break;
+    while (currentNode && currentNode !== this.container) {
+      if (currentNode.classList.contains("treeItem")) {
+        const toggler = currentNode.firstElementChild;
+        toggler?.classList.remove("treeItemsHidden");
       }
-    };
 
-    if (!this.isOpen && view !== null) {
-      return;
+      currentNode = currentNode.parentNode;
     }
 
-    this.toggleButton.classList.remove(UI_NOTIFICATION_CLASS);
+    this._updateCurrentTreeItem(treeItem);
 
-    if (view !== null) {
-      removeNotification(view);
-      return;
-    }
+    this.container.scrollTo(treeItem.offsetLeft, treeItem.offsetTop + TREEITEM_OFFSET_TOP);
+  }
 
-    for (view in SidebarView) {
-      removeNotification(SidebarView[view]);
-    }
+}
 
-    this.l10n.get("toggle_sidebar.title", null, "Toggle Sidebar").then(msg => {
-      this.toggleButton.title = msg;
-    });
-  }
+exports.BaseTreeViewer = BaseTreeViewer;
 
-  _addEventListeners() {
-    this.viewerContainer.addEventListener("transitionend", evt => {
-      if (evt.target === this.viewerContainer) {
-        this.outerContainer.classList.remove("sidebarMoving");
-      }
-    });
-    this.toggleButton.addEventListener("click", () => {
-      this.toggle();
-    });
-    this.thumbnailButton.addEventListener("click", () => {
-      this.switchView(SidebarView.THUMBS);
-    });
-    this.outlineButton.addEventListener("click", () => {
-      this.switchView(SidebarView.OUTLINE);
-    });
-    this.outlineButton.addEventListener("dblclick", () => {
-      this.eventBus.dispatch("toggleoutlinetree", {
-        source: this
-      });
-    });
-    this.attachmentsButton.addEventListener("click", () => {
-      this.switchView(SidebarView.ATTACHMENTS);
-    });
-    this.layersButton.addEventListener("click", () => {
-      this.switchView(SidebarView.LAYERS);
-    });
-    this.layersButton.addEventListener("dblclick", () => {
-      this.eventBus.dispatch("resetlayers", {
-        source: this
-      });
-    });
+/***/ }),
+/* 13 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 
-    const onTreeLoaded = (count, button, view) => {
-      button.disabled = !count;
 
-      if (count) {
-        this._showUINotification(view);
-      } else if (this.active === view) {
-        this.switchView(SidebarView.THUMBS);
-      }
-    };
 
-    this.eventBus._on("outlineloaded", evt => {
-      onTreeLoaded(evt.outlineCount, this.outlineButton, SidebarView.OUTLINE);
-    });
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports.PDFDocumentProperties = void 0;
 
-    this.eventBus._on("attachmentsloaded", evt => {
-      onTreeLoaded(evt.attachmentsCount, this.attachmentsButton, SidebarView.ATTACHMENTS);
-    });
+var _pdfjsLib = __webpack_require__(5);
 
-    this.eventBus._on("layersloaded", evt => {
-      onTreeLoaded(evt.layersCount, this.layersButton, SidebarView.LAYERS);
-    });
+var _ui_utils = __webpack_require__(4);
 
-    this.eventBus._on("presentationmodechanged", evt => {
-      if (!evt.active && !evt.switchInProgress && this.isThumbnailViewVisible) {
-        this._updateThumbnailViewer();
-      }
-    });
-  }
+const DEFAULT_FIELD_CONTENT = "-";
+const NON_METRIC_LOCALES = ["en-us", "en-lr", "my"];
+const US_PAGE_NAMES = {
+  "8.5x11": "Letter",
+  "8.5x14": "Legal"
+};
+const METRIC_PAGE_NAMES = {
+  "297x420": "A3",
+  "210x297": "A4"
+};
 
+function getPageName(size, isPortrait, pageNames) {
+  const width = isPortrait ? size.width : size.height;
+  const height = isPortrait ? size.height : size.width;
+  return pageNames[`${width}x${height}`];
 }
 
-exports.PDFSidebar = PDFSidebar;
-
-/***/ }),
-/* 10 */
-/***/ (function(module, exports, __webpack_require__) {
+class PDFDocumentProperties {
+  constructor({
+    overlayName,
+    fields,
+    container,
+    closeButton
+  }, overlayManager, eventBus, l10n) {
+    this.overlayName = overlayName;
+    this.fields = fields;
+    this.container = container;
+    this.overlayManager = overlayManager;
+    this.l10n = l10n;
 
-"use strict";
+    this._reset();
 
+    closeButton.addEventListener("click", this.close.bind(this));
+    this.overlayManager.register(this.overlayName, this.container, this.close.bind(this));
 
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.OverlayManager = void 0;
+    eventBus._on("pagechanging", evt => {
+      this._currentPageNumber = evt.pageNumber;
+    });
 
-class OverlayManager {
-  constructor() {
-    this._overlays = {};
-    this._active = null;
-    this._keyDownBound = this._keyDown.bind(this);
-  }
+    eventBus._on("rotationchanging", evt => {
+      this._pagesRotation = evt.pagesRotation;
+    });
 
-  get active() {
-    return this._active;
+    this._isNonMetricLocale = true;
+    l10n.getLanguage().then(locale => {
+      this._isNonMetricLocale = NON_METRIC_LOCALES.includes(locale);
+    });
   }
 
-  async register(name, element, callerCloseMethod = null, canForceClose = false) {
-    let container;
+  async open() {
+    const freezeFieldData = data => {
+      Object.defineProperty(this, "fieldData", {
+        value: Object.freeze(data),
+        writable: false,
+        enumerable: true,
+        configurable: true
+      });
+    };
 
-    if (!name || !element || !(container = element.parentNode)) {
-      throw new Error("Not enough parameters.");
-    } else if (this._overlays[name]) {
-      throw new Error("The overlay is already registered.");
-    }
+    await Promise.all([this.overlayManager.open(this.overlayName), this._dataAvailableCapability.promise]);
+    const currentPageNumber = this._currentPageNumber;
+    const pagesRotation = this._pagesRotation;
 
-    this._overlays[name] = {
-      element,
-      container,
-      callerCloseMethod,
-      canForceClose
-    };
-  }
+    if (this.fieldData && currentPageNumber === this.fieldData._currentPageNumber && pagesRotation === 
this.fieldData._pagesRotation) {
+      this._updateUI();
 
-  async unregister(name) {
-    if (!this._overlays[name]) {
-      throw new Error("The overlay does not exist.");
-    } else if (this._active === name) {
-      throw new Error("The overlay cannot be removed while it is active.");
+      return;
     }
 
-    delete this._overlays[name];
-  }
+    const {
+      info,
+      contentDispositionFilename,
+      contentLength
+    } = await this.pdfDocument.getMetadata();
+    const [fileName, fileSize, creationDate, modificationDate, pageSize, isLinearized] = await 
Promise.all([contentDispositionFilename || (0, _pdfjsLib.getPdfFilenameFromUrl)(this.url), 
this._parseFileSize(contentLength), this._parseDate(info.CreationDate), this._parseDate(info.ModDate), 
this.pdfDocument.getPage(currentPageNumber).then(pdfPage => {
+      return this._parsePageSize((0, _ui_utils.getPageSizeInches)(pdfPage), pagesRotation);
+    }), this._parseLinearization(info.IsLinearized)]);
+    freezeFieldData({
+      fileName,
+      fileSize,
+      title: info.Title,
+      author: info.Author,
+      subject: info.Subject,
+      keywords: info.Keywords,
+      creationDate,
+      modificationDate,
+      creator: info.Creator,
+      producer: info.Producer,
+      version: info.PDFFormatVersion,
+      pageCount: this.pdfDocument.numPages,
+      pageSize,
+      linearized: isLinearized,
+      _currentPageNumber: currentPageNumber,
+      _pagesRotation: pagesRotation
+    });
+
+    this._updateUI();
 
-  async open(name) {
-    if (!this._overlays[name]) {
-      throw new Error("The overlay does not exist.");
-    } else if (this._active) {
-      if (this._overlays[name].canForceClose) {
-        this._closeThroughCaller();
-      } else if (this._active === name) {
-        throw new Error("The overlay is already active.");
-      } else {
-        throw new Error("Another overlay is currently active.");
-      }
-    }
+    const {
+      length
+    } = await this.pdfDocument.getDownloadInfo();
 
-    this._active = name;
+    if (contentLength === length) {
+      return;
+    }
 
-    this._overlays[this._active].element.classList.remove("hidden");
+    const data = Object.assign(Object.create(null), this.fieldData);
+    data.fileSize = await this._parseFileSize(length);
+    freezeFieldData(data);
 
-    this._overlays[this._active].container.classList.remove("hidden");
+    this._updateUI();
+  }
 
-    window.addEventListener("keydown", this._keyDownBound);
+  close() {
+    this.overlayManager.close(this.overlayName);
   }
 
-  async close(name) {
-    if (!this._overlays[name]) {
-      throw new Error("The overlay does not exist.");
-    } else if (!this._active) {
-      throw new Error("The overlay is currently not active.");
-    } else if (this._active !== name) {
-      throw new Error("Another overlay is currently active.");
+  setDocument(pdfDocument, url = null) {
+    if (this.pdfDocument) {
+      this._reset();
+
+      this._updateUI(true);
     }
 
-    this._overlays[this._active].container.classList.add("hidden");
+    if (!pdfDocument) {
+      return;
+    }
 
-    this._overlays[this._active].element.classList.add("hidden");
+    this.pdfDocument = pdfDocument;
+    this.url = url;
 
-    this._active = null;
-    window.removeEventListener("keydown", this._keyDownBound);
+    this._dataAvailableCapability.resolve();
   }
 
-  _keyDown(evt) {
-    if (this._active && evt.keyCode === 27) {
-      this._closeThroughCaller();
+  _reset() {
+    this.pdfDocument = null;
+    this.url = null;
+    delete this.fieldData;
+    this._dataAvailableCapability = (0, _pdfjsLib.createPromiseCapability)();
+    this._currentPageNumber = 1;
+    this._pagesRotation = 0;
+  }
+
+  _updateUI(reset = false) {
+    if (reset || !this.fieldData) {
+      for (const id in this.fields) {
+        this.fields[id].textContent = DEFAULT_FIELD_CONTENT;
+      }
 
-      evt.preventDefault();
+      return;
     }
-  }
 
-  _closeThroughCaller() {
-    if (this._overlays[this._active].callerCloseMethod) {
-      this._overlays[this._active].callerCloseMethod();
+    if (this.overlayManager.active !== this.overlayName) {
+      return;
     }
 
-    if (this._active) {
-      this.close(this._active);
+    for (const id in this.fields) {
+      const content = this.fieldData[id];
+      this.fields[id].textContent = content || content === 0 ? content : DEFAULT_FIELD_CONTENT;
     }
   }
 
-}
-
-exports.OverlayManager = OverlayManager;
-
-/***/ }),
-/* 11 */
-/***/ (function(module, exports, __webpack_require__) {
+  async _parseFileSize(fileSize = 0) {
+    const kb = fileSize / 1024,
+          mb = kb / 1024;
 
-"use strict";
+    if (!kb) {
+      return undefined;
+    }
 
+    return this.l10n.get(`document_properties_${mb >= 1 ? "mb" : "kb"}`, {
+      size_mb: mb >= 1 && (+mb.toPrecision(3)).toLocaleString(),
+      size_kb: mb < 1 && (+kb.toPrecision(3)).toLocaleString(),
+      size_b: fileSize.toLocaleString()
+    });
+  }
 
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.PasswordPrompt = void 0;
+  async _parsePageSize(pageSizeInches, pagesRotation) {
+    if (!pageSizeInches) {
+      return undefined;
+    }
 
-var _ui_utils = __webpack_require__(2);
+    if (pagesRotation % 180 !== 0) {
+      pageSizeInches = {
+        width: pageSizeInches.height,
+        height: pageSizeInches.width
+      };
+    }
 
-var _pdfjsLib = __webpack_require__(5);
+    const isPortrait = (0, _ui_utils.isPortraitOrientation)(pageSizeInches);
+    let sizeInches = {
+      width: Math.round(pageSizeInches.width * 100) / 100,
+      height: Math.round(pageSizeInches.height * 100) / 100
+    };
+    let sizeMillimeters = {
+      width: Math.round(pageSizeInches.width * 25.4 * 10) / 10,
+      height: Math.round(pageSizeInches.height * 25.4 * 10) / 10
+    };
+    let rawName = getPageName(sizeInches, isPortrait, US_PAGE_NAMES) || getPageName(sizeMillimeters, 
isPortrait, METRIC_PAGE_NAMES);
 
-class PasswordPrompt {
-  constructor(options, overlayManager, l10n = _ui_utils.NullL10n) {
-    this.overlayName = options.overlayName;
-    this.container = options.container;
-    this.label = options.label;
-    this.input = options.input;
-    this.submitButton = options.submitButton;
-    this.cancelButton = options.cancelButton;
-    this.overlayManager = overlayManager;
-    this.l10n = l10n;
-    this.updateCallback = null;
-    this.reason = null;
-    this.submitButton.addEventListener("click", this.verify.bind(this));
-    this.cancelButton.addEventListener("click", this.close.bind(this));
-    this.input.addEventListener("keydown", e => {
-      if (e.keyCode === 13) {
-        this.verify();
-      }
-    });
-    this.overlayManager.register(this.overlayName, this.container, this.close.bind(this), true);
-  }
+    if (!rawName && !(Number.isInteger(sizeMillimeters.width) && Number.isInteger(sizeMillimeters.height))) {
+      const exactMillimeters = {
+        width: pageSizeInches.width * 25.4,
+        height: pageSizeInches.height * 25.4
+      };
+      const intMillimeters = {
+        width: Math.round(sizeMillimeters.width),
+        height: Math.round(sizeMillimeters.height)
+      };
 
-  open() {
-    this.overlayManager.open(this.overlayName).then(() => {
-      this.input.focus();
-      let promptString;
+      if (Math.abs(exactMillimeters.width - intMillimeters.width) < 0.1 && Math.abs(exactMillimeters.height 
- intMillimeters.height) < 0.1) {
+        rawName = getPageName(intMillimeters, isPortrait, METRIC_PAGE_NAMES);
 
-      if (this.reason === _pdfjsLib.PasswordResponses.INCORRECT_PASSWORD) {
-        promptString = this.l10n.get("password_invalid", null, "Invalid password. Please try again.");
-      } else {
-        promptString = this.l10n.get("password_label", null, "Enter the password to open this PDF file.");
+        if (rawName) {
+          sizeInches = {
+            width: Math.round(intMillimeters.width / 25.4 * 100) / 100,
+            height: Math.round(intMillimeters.height / 25.4 * 100) / 100
+          };
+          sizeMillimeters = intMillimeters;
+        }
       }
+    }
 
-      promptString.then(msg => {
-        this.label.textContent = msg;
-      });
-    });
-  }
-
-  close() {
-    this.overlayManager.close(this.overlayName).then(() => {
-      this.input.value = "";
+    const [{
+      width,
+      height
+    }, unit, name, orientation] = await Promise.all([this._isNonMetricLocale ? sizeInches : sizeMillimeters, 
this.l10n.get(`document_properties_page_size_unit_${this._isNonMetricLocale ? "inches" : "millimeters"}`), 
rawName && this.l10n.get(`document_properties_page_size_name_${rawName.toLowerCase()}`), 
this.l10n.get(`document_properties_page_size_orientation_${isPortrait ? "portrait" : "landscape"}`)]);
+    return this.l10n.get(`document_properties_page_size_dimension_${name ? "name_" : ""}string`, {
+      width: width.toLocaleString(),
+      height: height.toLocaleString(),
+      unit,
+      name,
+      orientation
     });
   }
 
-  verify() {
-    const password = this.input.value;
+  async _parseDate(inputDate) {
+    const dateObject = _pdfjsLib.PDFDateString.toDateObject(inputDate);
 
-    if (password && password.length > 0) {
-      this.close();
-      this.updateCallback(password);
+    if (!dateObject) {
+      return undefined;
     }
+
+    return this.l10n.get("document_properties_date_string", {
+      date: dateObject.toLocaleDateString(),
+      time: dateObject.toLocaleTimeString()
+    });
   }
 
-  setUpdateCallback(updateCallback, reason) {
-    this.updateCallback = updateCallback;
-    this.reason = reason;
+  _parseLinearization(isLinearized) {
+    return this.l10n.get(`document_properties_linearized_${isLinearized ? "yes" : "no"}`);
   }
 
 }
 
-exports.PasswordPrompt = PasswordPrompt;
+exports.PDFDocumentProperties = PDFDocumentProperties;
 
 /***/ }),
-/* 12 */
-/***/ (function(module, exports, __webpack_require__) {
+/* 14 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
-exports.PDFAttachmentViewer = void 0;
-
-var _pdfjsLib = __webpack_require__(5);
-
-var _base_tree_viewer = __webpack_require__(13);
-
-var _viewer_compatibility = __webpack_require__(4);
-
-const PdfFileRegExp = /\.pdf$/i;
-
-class PDFAttachmentViewer extends _base_tree_viewer.BaseTreeViewer {
-  constructor(options) {
-    super(options);
-    this.downloadManager = options.downloadManager;
-
-    this.eventBus._on("fileattachmentannotation", this._appendAttachment.bind(this));
-  }
-
-  reset(keepRenderedCapability = false) {
-    super.reset();
-    this._attachments = null;
-
-    if (!keepRenderedCapability) {
-      this._renderedCapability = (0, _pdfjsLib.createPromiseCapability)();
-    }
-
-    if (this._pendingDispatchEvent) {
-      clearTimeout(this._pendingDispatchEvent);
-    }
-
-    this._pendingDispatchEvent = null;
-  }
-
-  _dispatchEvent(attachmentsCount) {
-    this._renderedCapability.resolve();
+}));
+exports.PDFFindBar = void 0;
 
-    if (this._pendingDispatchEvent) {
-      clearTimeout(this._pendingDispatchEvent);
-      this._pendingDispatchEvent = null;
-    }
+var _pdf_find_controller = __webpack_require__(15);
 
-    if (attachmentsCount === 0) {
-      this._pendingDispatchEvent = setTimeout(() => {
-        this.eventBus.dispatch("attachmentsloaded", {
-          source: this,
-          attachmentsCount: 0
-        });
-        this._pendingDispatchEvent = null;
-      });
-      return;
-    }
+const MATCHES_COUNT_LIMIT = 1000;
 
-    this.eventBus.dispatch("attachmentsloaded", {
-      source: this,
-      attachmentsCount
+class PDFFindBar {
+  constructor(options, eventBus, l10n) {
+    this.opened = false;
+    this.bar = options.bar;
+    this.toggleButton = options.toggleButton;
+    this.findField = options.findField;
+    this.highlightAll = options.highlightAllCheckbox;
+    this.caseSensitive = options.caseSensitiveCheckbox;
+    this.entireWord = options.entireWordCheckbox;
+    this.findMsg = options.findMsg;
+    this.findResultsCount = options.findResultsCount;
+    this.findPreviousButton = options.findPreviousButton;
+    this.findNextButton = options.findNextButton;
+    this.eventBus = eventBus;
+    this.l10n = l10n;
+    this.toggleButton.addEventListener("click", () => {
+      this.toggle();
     });
-  }
-
-  _bindPdfLink(element, {
-    content,
-    filename
-  }) {
-    let blobUrl;
-
-    element.onclick = () => {
-      if (!blobUrl) {
-        blobUrl = URL.createObjectURL(new Blob([content], {
-          type: "application/pdf"
-        }));
-      }
+    this.findField.addEventListener("input", () => {
+      this.dispatchEvent("");
+    });
+    this.bar.addEventListener("keydown", e => {
+      switch (e.keyCode) {
+        case 13:
+          if (e.target === this.findField) {
+            this.dispatchEvent("again", e.shiftKey);
+          }
 
-      let viewerUrl;
-      viewerUrl = "?file=" + encodeURIComponent(blobUrl + "#" + filename);
+          break;
 
-      try {
-        window.open(viewerUrl);
-      } catch (ex) {
-        console.error(`_bindPdfLink: ${ex}`);
-        URL.revokeObjectURL(blobUrl);
-        blobUrl = null;
-        this.downloadManager.downloadData(content, filename, "application/pdf");
+        case 27:
+          this.close();
+          break;
       }
+    });
+    this.findPreviousButton.addEventListener("click", () => {
+      this.dispatchEvent("again", true);
+    });
+    this.findNextButton.addEventListener("click", () => {
+      this.dispatchEvent("again", false);
+    });
+    this.highlightAll.addEventListener("click", () => {
+      this.dispatchEvent("highlightallchange");
+    });
+    this.caseSensitive.addEventListener("click", () => {
+      this.dispatchEvent("casesensitivitychange");
+    });
+    this.entireWord.addEventListener("click", () => {
+      this.dispatchEvent("entirewordchange");
+    });
 
-      return false;
-    };
+    this.eventBus._on("resize", this._adjustWidth.bind(this));
   }
 
-  _bindLink(element, {
-    content,
-    filename
-  }) {
-    element.onclick = () => {
-      const contentType = PdfFileRegExp.test(filename) ? "application/pdf" : "";
-      this.downloadManager.downloadData(content, filename, contentType);
-      return false;
-    };
+  reset() {
+    this.updateUIState();
   }
 
-  render({
-    attachments,
-    keepRenderedCapability = false
-  }) {
-    if (this._attachments) {
-      this.reset(keepRenderedCapability);
-    }
+  dispatchEvent(type, findPrev) {
+    this.eventBus.dispatch("find", {
+      source: this,
+      type,
+      query: this.findField.value,
+      phraseSearch: true,
+      caseSensitive: this.caseSensitive.checked,
+      entireWord: this.entireWord.checked,
+      highlightAll: this.highlightAll.checked,
+      findPrevious: findPrev
+    });
+  }
 
-    this._attachments = attachments || null;
+  updateUIState(state, previous, matchesCount) {
+    let findMsg = Promise.resolve("");
+    let status = "";
 
-    if (!attachments) {
-      this._dispatchEvent(0);
+    switch (state) {
+      case _pdf_find_controller.FindState.FOUND:
+        break;
 
-      return;
+      case _pdf_find_controller.FindState.PENDING:
+        status = "pending";
+        break;
+
+      case _pdf_find_controller.FindState.NOT_FOUND:
+        findMsg = this.l10n.get("find_not_found");
+        status = "notFound";
+        break;
+
+      case _pdf_find_controller.FindState.WRAPPED:
+        findMsg = this.l10n.get(`find_reached_${previous ? "top" : "bottom"}`);
+        break;
     }
 
-    const names = Object.keys(attachments).sort(function (a, b) {
-      return a.toLowerCase().localeCompare(b.toLowerCase());
+    this.findField.setAttribute("data-status", status);
+    findMsg.then(msg => {
+      this.findMsg.textContent = msg;
+
+      this._adjustWidth();
     });
-    const fragment = document.createDocumentFragment();
-    let attachmentsCount = 0;
+    this.updateResultsCount(matchesCount);
+  }
 
-    for (const name of names) {
-      const item = attachments[name];
-      const filename = (0, _pdfjsLib.getFilenameFromUrl)(item.filename);
-      const div = document.createElement("div");
-      div.className = "treeItem";
-      const element = document.createElement("a");
+  updateResultsCount({
+    current = 0,
+    total = 0
+  } = {}) {
+    const limit = MATCHES_COUNT_LIMIT;
+    let matchCountMsg = Promise.resolve("");
 
-      if (PdfFileRegExp.test(filename) && 
!_viewer_compatibility.viewerCompatibilityParams.disableCreateObjectURL) {
-        this._bindPdfLink(element, {
-          content: item.content,
-          filename
+    if (total > 0) {
+      if (total > limit) {
+        let key = "find_match_count_limit";
+        matchCountMsg = this.l10n.get(key, {
+          limit
         });
       } else {
-        this._bindLink(element, {
-          content: item.content,
-          filename
+        let key = "find_match_count";
+        matchCountMsg = this.l10n.get(key, {
+          current,
+          total
         });
       }
-
-      element.textContent = this._normalizeTextContent(filename);
-      div.appendChild(element);
-      fragment.appendChild(div);
-      attachmentsCount++;
     }
 
-    this.container.appendChild(fragment);
+    matchCountMsg.then(msg => {
+      this.findResultsCount.textContent = msg;
+      this.findResultsCount.classList.toggle("hidden", !total);
 
-    this._dispatchEvent(attachmentsCount);
+      this._adjustWidth();
+    });
   }
 
-  _appendAttachment({
-    id,
-    filename,
-    content
-  }) {
-    const renderedPromise = this._renderedCapability.promise;
-    renderedPromise.then(() => {
-      if (renderedPromise !== this._renderedCapability.promise) {
-        return;
-      }
+  open() {
+    if (!this.opened) {
+      this.opened = true;
+      this.toggleButton.classList.add("toggled");
+      this.toggleButton.setAttribute("aria-expanded", "true");
+      this.bar.classList.remove("hidden");
+    }
 
-      let attachments = this._attachments;
+    this.findField.select();
+    this.findField.focus();
 
-      if (!attachments) {
-        attachments = Object.create(null);
-      } else {
-        for (const name in attachments) {
-          if (id === name) {
-            return;
-          }
-        }
-      }
+    this._adjustWidth();
+  }
 
-      attachments[id] = {
-        filename,
-        content
-      };
-      this.render({
-        attachments,
-        keepRenderedCapability: true
-      });
+  close() {
+    if (!this.opened) {
+      return;
+    }
+
+    this.opened = false;
+    this.toggleButton.classList.remove("toggled");
+    this.toggleButton.setAttribute("aria-expanded", "false");
+    this.bar.classList.add("hidden");
+    this.eventBus.dispatch("findbarclose", {
+      source: this
     });
   }
 
+  toggle() {
+    if (this.opened) {
+      this.close();
+    } else {
+      this.open();
+    }
+  }
+
+  _adjustWidth() {
+    if (!this.opened) {
+      return;
+    }
+
+    this.bar.classList.remove("wrapContainers");
+    const findbarHeight = this.bar.clientHeight;
+    const inputContainerHeight = this.bar.firstElementChild.clientHeight;
+
+    if (findbarHeight > inputContainerHeight) {
+      this.bar.classList.add("wrapContainers");
+    }
+  }
+
 }
 
-exports.PDFAttachmentViewer = PDFAttachmentViewer;
+exports.PDFFindBar = PDFFindBar;
 
 /***/ }),
-/* 13 */
-/***/ (function(module, exports, __webpack_require__) {
+/* 15 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
-exports.BaseTreeViewer = void 0;
+}));
+exports.PDFFindController = exports.FindState = void 0;
 
 var _pdfjsLib = __webpack_require__(5);
 
-class BaseTreeViewer {
-  constructor(options) {
-    if (this.constructor === BaseTreeViewer) {
-      throw new Error("Cannot initialize BaseTreeViewer.");
-    }
+var _pdf_find_utils = __webpack_require__(16);
 
-    this.container = options.container;
-    this.eventBus = options.eventBus;
-    this.reset();
-  }
+var _ui_utils = __webpack_require__(4);
 
-  reset() {
-    this._lastToggleIsShow = true;
-    this.container.textContent = "";
-    this.container.classList.remove("treeWithDeepNesting");
-  }
+const FindState = {
+  FOUND: 0,
+  NOT_FOUND: 1,
+  WRAPPED: 2,
+  PENDING: 3
+};
+exports.FindState = FindState;
+const FIND_TIMEOUT = 250;
+const MATCH_SCROLL_OFFSET_TOP = -50;
+const MATCH_SCROLL_OFFSET_LEFT = -400;
+const CHARACTERS_TO_NORMALIZE = {
+  "\u2018": "'",
+  "\u2019": "'",
+  "\u201A": "'",
+  "\u201B": "'",
+  "\u201C": '"',
+  "\u201D": '"',
+  "\u201E": '"',
+  "\u201F": '"',
+  "\u00BC": "1/4",
+  "\u00BD": "1/2",
+  "\u00BE": "3/4"
+};
+let normalizationRegex = null;
 
-  _dispatchEvent(count) {
-    throw new Error("Not implemented: _dispatchEvent");
+function normalize(text) {
+  if (!normalizationRegex) {
+    const replace = Object.keys(CHARACTERS_TO_NORMALIZE).join("");
+    normalizationRegex = new RegExp(`[${replace}]`, "g");
   }
 
-  _bindLink(element, params) {
-    throw new Error("Not implemented: _bindLink");
-  }
+  let diffs = null;
+  const normalizedText = text.replace(normalizationRegex, function (ch, index) {
+    const normalizedCh = CHARACTERS_TO_NORMALIZE[ch],
+          diff = normalizedCh.length - ch.length;
 
-  _normalizeTextContent(str) {
-    return (0, _pdfjsLib.removeNullCharacters)(str) || "\u2013";
+    if (diff !== 0) {
+      (diffs || (diffs = [])).push([index, diff]);
+    }
+
+    return normalizedCh;
+  });
+  return [normalizedText, diffs];
+}
+
+function getOriginalIndex(matchIndex, diffs = null) {
+  if (!diffs) {
+    return matchIndex;
   }
 
-  _addToggleButton(div, hidden = false) {
-    const toggler = document.createElement("div");
-    toggler.className = "treeItemToggler";
+  let totalDiff = 0;
 
-    if (hidden) {
-      toggler.classList.add("treeItemsHidden");
+  for (const [index, diff] of diffs) {
+    const currentIndex = index + totalDiff;
+
+    if (currentIndex >= matchIndex) {
+      break;
     }
 
-    toggler.onclick = evt => {
-      evt.stopPropagation();
-      toggler.classList.toggle("treeItemsHidden");
+    if (currentIndex + diff > matchIndex) {
+      totalDiff += matchIndex - currentIndex;
+      break;
+    }
 
-      if (evt.shiftKey) {
-        const shouldShowAll = !toggler.classList.contains("treeItemsHidden");
+    totalDiff += diff;
+  }
 
-        this._toggleTreeItem(div, shouldShowAll);
-      }
-    };
+  return matchIndex - totalDiff;
+}
 
-    div.insertBefore(toggler, div.firstChild);
+class PDFFindController {
+  constructor({
+    linkService,
+    eventBus
+  }) {
+    this._linkService = linkService;
+    this._eventBus = eventBus;
+
+    this._reset();
+
+    eventBus._on("findbarclose", this._onFindBarClose.bind(this));
   }
 
-  _toggleTreeItem(root, show = false) {
-    this._lastToggleIsShow = show;
+  get highlightMatches() {
+    return this._highlightMatches;
+  }
 
-    for (const toggler of root.querySelectorAll(".treeItemToggler")) {
-      toggler.classList.toggle("treeItemsHidden", !show);
-    }
+  get pageMatches() {
+    return this._pageMatches;
   }
 
-  _toggleAllTreeItems() {
-    this._toggleTreeItem(this.container, !this._lastToggleIsShow);
+  get pageMatchesLength() {
+    return this._pageMatchesLength;
   }
 
-  render(params) {
-    throw new Error("Not implemented: render");
+  get selected() {
+    return this._selected;
   }
 
-}
+  get state() {
+    return this._state;
+  }
 
-exports.BaseTreeViewer = BaseTreeViewer;
+  setDocument(pdfDocument) {
+    if (this._pdfDocument) {
+      this._reset();
+    }
 
-/***/ }),
-/* 14 */
-/***/ (function(module, exports, __webpack_require__) {
+    if (!pdfDocument) {
+      return;
+    }
 
-"use strict";
+    this._pdfDocument = pdfDocument;
+
+    this._firstPageCapability.resolve();
+  }
+
+  executeCommand(cmd, state) {
+    if (!state) {
+      return;
+    }
 
+    const pdfDocument = this._pdfDocument;
 
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.PDFDocumentProperties = void 0;
+    if (this._state === null || this._shouldDirtyMatch(cmd, state)) {
+      this._dirtyMatch = true;
+    }
 
-var _pdfjsLib = __webpack_require__(5);
+    this._state = state;
 
-var _ui_utils = __webpack_require__(2);
+    if (cmd !== "findhighlightallchange") {
+      this._updateUIState(FindState.PENDING);
+    }
 
-const DEFAULT_FIELD_CONTENT = "-";
-const NON_METRIC_LOCALES = ["en-us", "en-lr", "my"];
-const US_PAGE_NAMES = {
-  "8.5x11": "Letter",
-  "8.5x14": "Legal"
-};
-const METRIC_PAGE_NAMES = {
-  "297x420": "A3",
-  "210x297": "A4"
-};
+    this._firstPageCapability.promise.then(() => {
+      if (!this._pdfDocument || pdfDocument && this._pdfDocument !== pdfDocument) {
+        return;
+      }
 
-function getPageName(size, isPortrait, pageNames) {
-  const width = isPortrait ? size.width : size.height;
-  const height = isPortrait ? size.height : size.width;
-  return pageNames[`${width}x${height}`];
-}
+      this._extractText();
 
-class PDFDocumentProperties {
-  constructor({
-    overlayName,
-    fields,
-    container,
-    closeButton
-  }, overlayManager, eventBus, l10n = _ui_utils.NullL10n) {
-    this.overlayName = overlayName;
-    this.fields = fields;
-    this.container = container;
-    this.overlayManager = overlayManager;
-    this.l10n = l10n;
+      const findbarClosed = !this._highlightMatches;
+      const pendingTimeout = !!this._findTimeout;
 
-    this._reset();
+      if (this._findTimeout) {
+        clearTimeout(this._findTimeout);
+        this._findTimeout = null;
+      }
 
-    closeButton.addEventListener("click", this.close.bind(this));
-    this.overlayManager.register(this.overlayName, this.container, this.close.bind(this));
+      if (cmd === "find") {
+        this._findTimeout = setTimeout(() => {
+          this._nextMatch();
 
-    eventBus._on("pagechanging", evt => {
-      this._currentPageNumber = evt.pageNumber;
-    });
+          this._findTimeout = null;
+        }, FIND_TIMEOUT);
+      } else if (this._dirtyMatch) {
+        this._nextMatch();
+      } else if (cmd === "findagain") {
+        this._nextMatch();
 
-    eventBus._on("rotationchanging", evt => {
-      this._pagesRotation = evt.pagesRotation;
-    });
+        if (findbarClosed && this._state.highlightAll) {
+          this._updateAllPages();
+        }
+      } else if (cmd === "findhighlightallchange") {
+        if (pendingTimeout) {
+          this._nextMatch();
+        } else {
+          this._highlightMatches = true;
+        }
 
-    this._isNonMetricLocale = true;
-    l10n.getLanguage().then(locale => {
-      this._isNonMetricLocale = NON_METRIC_LOCALES.includes(locale);
+        this._updateAllPages();
+      } else {
+        this._nextMatch();
+      }
     });
   }
 
-  open() {
-    const freezeFieldData = data => {
-      Object.defineProperty(this, "fieldData", {
-        value: Object.freeze(data),
-        writable: false,
-        enumerable: true,
-        configurable: true
-      });
+  scrollMatchIntoView({
+    element = null,
+    pageIndex = -1,
+    matchIndex = -1
+  }) {
+    if (!this._scrollMatches || !element) {
+      return;
+    } else if (matchIndex === -1 || matchIndex !== this._selected.matchIdx) {
+      return;
+    } else if (pageIndex === -1 || pageIndex !== this._selected.pageIdx) {
+      return;
+    }
+
+    this._scrollMatches = false;
+    const spot = {
+      top: MATCH_SCROLL_OFFSET_TOP,
+      left: MATCH_SCROLL_OFFSET_LEFT
     };
+    (0, _ui_utils.scrollIntoView)(element, spot, true);
+  }
 
-    Promise.all([this.overlayManager.open(this.overlayName), this._dataAvailableCapability.promise]).then(() 
=> {
-      const currentPageNumber = this._currentPageNumber;
-      const pagesRotation = this._pagesRotation;
+  _reset() {
+    this._highlightMatches = false;
+    this._scrollMatches = false;
+    this._pdfDocument = null;
+    this._pageMatches = [];
+    this._pageMatchesLength = [];
+    this._state = null;
+    this._selected = {
+      pageIdx: -1,
+      matchIdx: -1
+    };
+    this._offset = {
+      pageIdx: null,
+      matchIdx: null,
+      wrapped: false
+    };
+    this._extractTextPromises = [];
+    this._pageContents = [];
+    this._pageDiffs = [];
+    this._matchesCountTotal = 0;
+    this._pagesToSearch = null;
+    this._pendingFindMatches = Object.create(null);
+    this._resumePageIdx = null;
+    this._dirtyMatch = false;
+    clearTimeout(this._findTimeout);
+    this._findTimeout = null;
+    this._firstPageCapability = (0, _pdfjsLib.createPromiseCapability)();
+  }
 
-      if (this.fieldData && currentPageNumber === this.fieldData._currentPageNumber && pagesRotation === 
this.fieldData._pagesRotation) {
-        this._updateUI();
+  get _query() {
+    if (this._state.query !== this._rawQuery) {
+      this._rawQuery = this._state.query;
+      [this._normalizedQuery] = normalize(this._state.query);
+    }
 
-        return;
-      }
+    return this._normalizedQuery;
+  }
 
-      this.pdfDocument.getMetadata().then(({
-        info,
-        metadata,
-        contentDispositionFilename
-      }) => {
-        return Promise.all([info, metadata, contentDispositionFilename || (0, 
_ui_utils.getPDFFileNameFromURL)(this.url), this._parseFileSize(this.maybeFileSize), 
this._parseDate(info.CreationDate), this._parseDate(info.ModDate), 
this.pdfDocument.getPage(currentPageNumber).then(pdfPage => {
-          return this._parsePageSize((0, _ui_utils.getPageSizeInches)(pdfPage), pagesRotation);
-        }), this._parseLinearization(info.IsLinearized)]);
-      }).then(([info, metadata, fileName, fileSize, creationDate, modDate, pageSize, isLinearized]) => {
-        freezeFieldData({
-          fileName,
-          fileSize,
-          title: info.Title,
-          author: info.Author,
-          subject: info.Subject,
-          keywords: info.Keywords,
-          creationDate,
-          modificationDate: modDate,
-          creator: info.Creator,
-          producer: info.Producer,
-          version: info.PDFFormatVersion,
-          pageCount: this.pdfDocument.numPages,
-          pageSize,
-          linearized: isLinearized,
-          _currentPageNumber: currentPageNumber,
-          _pagesRotation: pagesRotation
-        });
+  _shouldDirtyMatch(cmd, state) {
+    if (state.query !== this._state.query) {
+      return true;
+    }
 
-        this._updateUI();
+    switch (cmd) {
+      case "findagain":
+        const pageNumber = this._selected.pageIdx + 1;
+        const linkService = this._linkService;
 
-        return this.pdfDocument.getDownloadInfo();
-      }).then(({
-        length
-      }) => {
-        this.maybeFileSize = length;
-        return this._parseFileSize(length);
-      }).then(fileSize => {
-        if (fileSize === this.fieldData.fileSize) {
-          return;
+        if (pageNumber >= 1 && pageNumber <= linkService.pagesCount && pageNumber !== linkService.page && 
!linkService.isPageVisible(pageNumber)) {
+          return true;
         }
 
-        const data = Object.assign(Object.create(null), this.fieldData);
-        data.fileSize = fileSize;
-        freezeFieldData(data);
+        return false;
 
-        this._updateUI();
-      });
-    });
-  }
+      case "findhighlightallchange":
+        return false;
+    }
 
-  close() {
-    this.overlayManager.close(this.overlayName);
+    return true;
   }
 
-  setDocument(pdfDocument, url = null) {
-    if (this.pdfDocument) {
-      this._reset();
+  _prepareMatches(matchesWithLength, matches, matchesLength) {
+    function isSubTerm(currentIndex) {
+      const currentElem = matchesWithLength[currentIndex];
+      const nextElem = matchesWithLength[currentIndex + 1];
 
-      this._updateUI(true);
-    }
+      if (currentIndex < matchesWithLength.length - 1 && currentElem.match === nextElem.match) {
+        currentElem.skipped = true;
+        return true;
+      }
 
-    if (!pdfDocument) {
-      return;
-    }
+      for (let i = currentIndex - 1; i >= 0; i--) {
+        const prevElem = matchesWithLength[i];
 
-    this.pdfDocument = pdfDocument;
-    this.url = url;
+        if (prevElem.skipped) {
+          continue;
+        }
 
-    this._dataAvailableCapability.resolve();
-  }
+        if (prevElem.match + prevElem.matchLength < currentElem.match) {
+          break;
+        }
+
+        if (prevElem.match + prevElem.matchLength >= currentElem.match + currentElem.matchLength) {
+          currentElem.skipped = true;
+          return true;
+        }
+      }
 
-  setFileSize(fileSize) {
-    if (Number.isInteger(fileSize) && fileSize > 0) {
-      this.maybeFileSize = fileSize;
+      return false;
     }
-  }
 
-  _reset() {
-    this.pdfDocument = null;
-    this.url = null;
-    this.maybeFileSize = 0;
-    delete this.fieldData;
-    this._dataAvailableCapability = (0, _pdfjsLib.createPromiseCapability)();
-    this._currentPageNumber = 1;
-    this._pagesRotation = 0;
-  }
+    matchesWithLength.sort(function (a, b) {
+      return a.match === b.match ? a.matchLength - b.matchLength : a.match - b.match;
+    });
 
-  _updateUI(reset = false) {
-    if (reset || !this.fieldData) {
-      for (const id in this.fields) {
-        this.fields[id].textContent = DEFAULT_FIELD_CONTENT;
+    for (let i = 0, len = matchesWithLength.length; i < len; i++) {
+      if (isSubTerm(i)) {
+        continue;
       }
 
-      return;
+      matches.push(matchesWithLength[i].match);
+      matchesLength.push(matchesWithLength[i].matchLength);
     }
+  }
 
-    if (this.overlayManager.active !== this.overlayName) {
-      return;
+  _isEntireWord(content, startIdx, length) {
+    if (startIdx > 0) {
+      const first = content.charCodeAt(startIdx);
+      const limit = content.charCodeAt(startIdx - 1);
+
+      if ((0, _pdf_find_utils.getCharacterType)(first) === (0, _pdf_find_utils.getCharacterType)(limit)) {
+        return false;
+      }
     }
 
-    for (const id in this.fields) {
-      const content = this.fieldData[id];
-      this.fields[id].textContent = content || content === 0 ? content : DEFAULT_FIELD_CONTENT;
+    const endIdx = startIdx + length - 1;
+
+    if (endIdx < content.length - 1) {
+      const last = content.charCodeAt(endIdx);
+      const limit = content.charCodeAt(endIdx + 1);
+
+      if ((0, _pdf_find_utils.getCharacterType)(last) === (0, _pdf_find_utils.getCharacterType)(limit)) {
+        return false;
+      }
     }
+
+    return true;
   }
 
-  async _parseFileSize(fileSize = 0) {
-    const kb = fileSize / 1024;
+  _calculatePhraseMatch(query, pageIndex, pageContent, pageDiffs, entireWord) {
+    const matches = [],
+          matchesLength = [];
+    const queryLen = query.length;
+    let matchIdx = -queryLen;
+
+    while (true) {
+      matchIdx = pageContent.indexOf(query, matchIdx + queryLen);
+
+      if (matchIdx === -1) {
+        break;
+      }
 
-    if (!kb) {
-      return undefined;
-    } else if (kb < 1024) {
-      return this.l10n.get("document_properties_kb", {
-        size_kb: (+kb.toPrecision(3)).toLocaleString(),
-        size_b: fileSize.toLocaleString()
-      }, "{{size_kb}} KB ({{size_b}} bytes)");
+      if (entireWord && !this._isEntireWord(pageContent, matchIdx, queryLen)) {
+        continue;
+      }
+
+      const originalMatchIdx = getOriginalIndex(matchIdx, pageDiffs),
+            matchEnd = matchIdx + queryLen - 1,
+            originalQueryLen = getOriginalIndex(matchEnd, pageDiffs) - originalMatchIdx + 1;
+      matches.push(originalMatchIdx);
+      matchesLength.push(originalQueryLen);
     }
 
-    return this.l10n.get("document_properties_mb", {
-      size_mb: (+(kb / 1024).toPrecision(3)).toLocaleString(),
-      size_b: fileSize.toLocaleString()
-    }, "{{size_mb}} MB ({{size_b}} bytes)");
+    this._pageMatches[pageIndex] = matches;
+    this._pageMatchesLength[pageIndex] = matchesLength;
   }
 
-  async _parsePageSize(pageSizeInches, pagesRotation) {
-    if (!pageSizeInches) {
-      return undefined;
-    }
-
-    if (pagesRotation % 180 !== 0) {
-      pageSizeInches = {
-        width: pageSizeInches.height,
-        height: pageSizeInches.width
-      };
-    }
+  _calculateWordMatch(query, pageIndex, pageContent, pageDiffs, entireWord) {
+    const matchesWithLength = [];
+    const queryArray = query.match(/\S+/g);
 
-    const isPortrait = (0, _ui_utils.isPortraitOrientation)(pageSizeInches);
-    let sizeInches = {
-      width: Math.round(pageSizeInches.width * 100) / 100,
-      height: Math.round(pageSizeInches.height * 100) / 100
-    };
-    let sizeMillimeters = {
-      width: Math.round(pageSizeInches.width * 25.4 * 10) / 10,
-      height: Math.round(pageSizeInches.height * 25.4 * 10) / 10
-    };
-    let pageName = null;
-    let rawName = getPageName(sizeInches, isPortrait, US_PAGE_NAMES) || getPageName(sizeMillimeters, 
isPortrait, METRIC_PAGE_NAMES);
+    for (let i = 0, len = queryArray.length; i < len; i++) {
+      const subquery = queryArray[i];
+      const subqueryLen = subquery.length;
+      let matchIdx = -subqueryLen;
 
-    if (!rawName && !(Number.isInteger(sizeMillimeters.width) && Number.isInteger(sizeMillimeters.height))) {
-      const exactMillimeters = {
-        width: pageSizeInches.width * 25.4,
-        height: pageSizeInches.height * 25.4
-      };
-      const intMillimeters = {
-        width: Math.round(sizeMillimeters.width),
-        height: Math.round(sizeMillimeters.height)
-      };
+      while (true) {
+        matchIdx = pageContent.indexOf(subquery, matchIdx + subqueryLen);
 
-      if (Math.abs(exactMillimeters.width - intMillimeters.width) < 0.1 && Math.abs(exactMillimeters.height 
- intMillimeters.height) < 0.1) {
-        rawName = getPageName(intMillimeters, isPortrait, METRIC_PAGE_NAMES);
+        if (matchIdx === -1) {
+          break;
+        }
 
-        if (rawName) {
-          sizeInches = {
-            width: Math.round(intMillimeters.width / 25.4 * 100) / 100,
-            height: Math.round(intMillimeters.height / 25.4 * 100) / 100
-          };
-          sizeMillimeters = intMillimeters;
+        if (entireWord && !this._isEntireWord(pageContent, matchIdx, subqueryLen)) {
+          continue;
         }
+
+        const originalMatchIdx = getOriginalIndex(matchIdx, pageDiffs),
+              matchEnd = matchIdx + subqueryLen - 1,
+              originalQueryLen = getOriginalIndex(matchEnd, pageDiffs) - originalMatchIdx + 1;
+        matchesWithLength.push({
+          match: originalMatchIdx,
+          matchLength: originalQueryLen,
+          skipped: false
+        });
       }
     }
 
-    if (rawName) {
-      pageName = this.l10n.get("document_properties_page_size_name_" + rawName.toLowerCase(), null, rawName);
-    }
+    this._pageMatchesLength[pageIndex] = [];
+    this._pageMatches[pageIndex] = [];
 
-    return Promise.all([this._isNonMetricLocale ? sizeInches : sizeMillimeters, 
this.l10n.get("document_properties_page_size_unit_" + (this._isNonMetricLocale ? "inches" : "millimeters"), 
null, this._isNonMetricLocale ? "in" : "mm"), pageName, 
this.l10n.get("document_properties_page_size_orientation_" + (isPortrait ? "portrait" : "landscape"), null, 
isPortrait ? "portrait" : "landscape")]).then(([{
-      width,
-      height
-    }, unit, name, orientation]) => {
-      return this.l10n.get("document_properties_page_size_dimension_" + (name ? "name_" : "") + "string", {
-        width: width.toLocaleString(),
-        height: height.toLocaleString(),
-        unit,
-        name,
-        orientation
-      }, "{{width}} × {{height}} {{unit}} (" + (name ? "{{name}}, " : "") + "{{orientation}})");
-    });
+    this._prepareMatches(matchesWithLength, this._pageMatches[pageIndex], 
this._pageMatchesLength[pageIndex]);
   }
 
-  async _parseDate(inputDate) {
-    const dateObject = _pdfjsLib.PDFDateString.toDateObject(inputDate);
+  _calculateMatch(pageIndex) {
+    let pageContent = this._pageContents[pageIndex];
+    const pageDiffs = this._pageDiffs[pageIndex];
+    let query = this._query;
+    const {
+      caseSensitive,
+      entireWord,
+      phraseSearch
+    } = this._state;
 
-    if (!dateObject) {
-      return undefined;
+    if (query.length === 0) {
+      return;
     }
 
-    return this.l10n.get("document_properties_date_string", {
-      date: dateObject.toLocaleDateString(),
-      time: dateObject.toLocaleTimeString()
-    }, "{{date}}, {{time}}");
-  }
+    if (!caseSensitive) {
+      pageContent = pageContent.toLowerCase();
+      query = query.toLowerCase();
+    }
 
-  _parseLinearization(isLinearized) {
-    return this.l10n.get("document_properties_linearized_" + (isLinearized ? "yes" : "no"), null, 
isLinearized ? "Yes" : "No");
-  }
+    if (phraseSearch) {
+      this._calculatePhraseMatch(query, pageIndex, pageContent, pageDiffs, entireWord);
+    } else {
+      this._calculateWordMatch(query, pageIndex, pageContent, pageDiffs, entireWord);
+    }
 
-}
+    if (this._state.highlightAll) {
+      this._updatePage(pageIndex);
+    }
 
-exports.PDFDocumentProperties = PDFDocumentProperties;
+    if (this._resumePageIdx === pageIndex) {
+      this._resumePageIdx = null;
 
-/***/ }),
-/* 15 */
-/***/ (function(module, exports, __webpack_require__) {
+      this._nextPageMatch();
+    }
 
-"use strict";
+    const pageMatchesCount = this._pageMatches[pageIndex].length;
 
+    if (pageMatchesCount > 0) {
+      this._matchesCountTotal += pageMatchesCount;
 
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.PDFFindBar = void 0;
+      this._updateUIResultsCount();
+    }
+  }
 
-var _pdf_find_controller = __webpack_require__(16);
+  _extractText() {
+    if (this._extractTextPromises.length > 0) {
+      return;
+    }
 
-var _ui_utils = __webpack_require__(2);
+    let promise = Promise.resolve();
 
-const MATCHES_COUNT_LIMIT = 1000;
+    for (let i = 0, ii = this._linkService.pagesCount; i < ii; i++) {
+      const extractTextCapability = (0, _pdfjsLib.createPromiseCapability)();
+      this._extractTextPromises[i] = extractTextCapability.promise;
+      promise = promise.then(() => {
+        return this._pdfDocument.getPage(i + 1).then(pdfPage => {
+          return pdfPage.getTextContent({
+            normalizeWhitespace: true
+          });
+        }).then(textContent => {
+          const textItems = textContent.items;
+          const strBuf = [];
 
-class PDFFindBar {
-  constructor(options, eventBus, l10n = _ui_utils.NullL10n) {
-    this.opened = false;
-    this.bar = options.bar || null;
-    this.toggleButton = options.toggleButton || null;
-    this.findField = options.findField || null;
-    this.highlightAll = options.highlightAllCheckbox || null;
-    this.caseSensitive = options.caseSensitiveCheckbox || null;
-    this.entireWord = options.entireWordCheckbox || null;
-    this.findMsg = options.findMsg || null;
-    this.findResultsCount = options.findResultsCount || null;
-    this.findPreviousButton = options.findPreviousButton || null;
-    this.findNextButton = options.findNextButton || null;
-    this.eventBus = eventBus;
-    this.l10n = l10n;
-    this.toggleButton.addEventListener("click", () => {
-      this.toggle();
-    });
-    this.findField.addEventListener("input", () => {
-      this.dispatchEvent("");
-    });
-    this.bar.addEventListener("keydown", e => {
-      switch (e.keyCode) {
-        case 13:
-          if (e.target === this.findField) {
-            this.dispatchEvent("again", e.shiftKey);
+          for (let j = 0, jj = textItems.length; j < jj; j++) {
+            strBuf.push(textItems[j].str);
           }
 
-          break;
-
-        case 27:
-          this.close();
-          break;
-      }
-    });
-    this.findPreviousButton.addEventListener("click", () => {
-      this.dispatchEvent("again", true);
-    });
-    this.findNextButton.addEventListener("click", () => {
-      this.dispatchEvent("again", false);
-    });
-    this.highlightAll.addEventListener("click", () => {
-      this.dispatchEvent("highlightallchange");
-    });
-    this.caseSensitive.addEventListener("click", () => {
-      this.dispatchEvent("casesensitivitychange");
-    });
-    this.entireWord.addEventListener("click", () => {
-      this.dispatchEvent("entirewordchange");
-    });
-
-    this.eventBus._on("resize", this._adjustWidth.bind(this));
+          [this._pageContents[i], this._pageDiffs[i]] = normalize(strBuf.join(""));
+          extractTextCapability.resolve(i);
+        }, reason => {
+          console.error(`Unable to get text content for page ${i + 1}`, reason);
+          this._pageContents[i] = "";
+          this._pageDiffs[i] = null;
+          extractTextCapability.resolve(i);
+        });
+      });
+    }
   }
 
-  reset() {
-    this.updateUIState();
-  }
+  _updatePage(index) {
+    if (this._scrollMatches && this._selected.pageIdx === index) {
+      this._linkService.page = index + 1;
+    }
 
-  dispatchEvent(type, findPrev) {
-    this.eventBus.dispatch("find", {
+    this._eventBus.dispatch("updatetextlayermatches", {
       source: this,
-      type,
-      query: this.findField.value,
-      phraseSearch: true,
-      caseSensitive: this.caseSensitive.checked,
-      entireWord: this.entireWord.checked,
-      highlightAll: this.highlightAll.checked,
-      findPrevious: findPrev
+      pageIndex: index
     });
   }
 
-  updateUIState(state, previous, matchesCount) {
-    let notFound = false;
-    let findMsg = "";
-    let status = "";
+  _updateAllPages() {
+    this._eventBus.dispatch("updatetextlayermatches", {
+      source: this,
+      pageIndex: -1
+    });
+  }
 
-    switch (state) {
-      case _pdf_find_controller.FindState.FOUND:
-        break;
+  _nextMatch() {
+    const previous = this._state.findPrevious;
+    const currentPageIndex = this._linkService.page - 1;
+    const numPages = this._linkService.pagesCount;
+    this._highlightMatches = true;
 
-      case _pdf_find_controller.FindState.PENDING:
-        status = "pending";
-        break;
+    if (this._dirtyMatch) {
+      this._dirtyMatch = false;
+      this._selected.pageIdx = this._selected.matchIdx = -1;
+      this._offset.pageIdx = currentPageIndex;
+      this._offset.matchIdx = null;
+      this._offset.wrapped = false;
+      this._resumePageIdx = null;
+      this._pageMatches.length = 0;
+      this._pageMatchesLength.length = 0;
+      this._matchesCountTotal = 0;
 
-      case _pdf_find_controller.FindState.NOT_FOUND:
-        findMsg = this.l10n.get("find_not_found", null, "Phrase not found");
-        notFound = true;
-        break;
+      this._updateAllPages();
 
-      case _pdf_find_controller.FindState.WRAPPED:
-        if (previous) {
-          findMsg = this.l10n.get("find_reached_top", null, "Reached top of document, continued from 
bottom");
-        } else {
-          findMsg = this.l10n.get("find_reached_bottom", null, "Reached end of document, continued from 
top");
+      for (let i = 0; i < numPages; i++) {
+        if (this._pendingFindMatches[i] === true) {
+          continue;
         }
 
-        break;
+        this._pendingFindMatches[i] = true;
+
+        this._extractTextPromises[i].then(pageIdx => {
+          delete this._pendingFindMatches[pageIdx];
+
+          this._calculateMatch(pageIdx);
+        });
+      }
+    }
+
+    if (this._query === "") {
+      this._updateUIState(FindState.FOUND);
+
+      return;
+    }
+
+    if (this._resumePageIdx) {
+      return;
     }
 
-    this.findField.classList.toggle("notFound", notFound);
-    this.findField.setAttribute("data-status", status);
-    Promise.resolve(findMsg).then(msg => {
-      this.findMsg.textContent = msg;
+    const offset = this._offset;
+    this._pagesToSearch = numPages;
 
-      this._adjustWidth();
-    });
-    this.updateResultsCount(matchesCount);
-  }
+    if (offset.matchIdx !== null) {
+      const numPageMatches = this._pageMatches[offset.pageIdx].length;
 
-  updateResultsCount({
-    current = 0,
-    total = 0
-  } = {}) {
-    if (!this.findResultsCount) {
-      return;
-    }
+      if (!previous && offset.matchIdx + 1 < numPageMatches || previous && offset.matchIdx > 0) {
+        offset.matchIdx = previous ? offset.matchIdx - 1 : offset.matchIdx + 1;
 
-    const limit = MATCHES_COUNT_LIMIT;
-    let matchesCountMsg = "";
+        this._updateMatch(true);
 
-    if (total > 0) {
-      if (total > limit) {
-        matchesCountMsg = this.l10n.get("find_match_count_limit", {
-          limit
-        }, "More than {{limit}} match" + (limit !== 1 ? "es" : ""));
-      } else {
-        matchesCountMsg = this.l10n.get("find_match_count", {
-          current,
-          total
-        }, "{{current}} of {{total}} match" + (total !== 1 ? "es" : ""));
+        return;
       }
-    }
 
-    Promise.resolve(matchesCountMsg).then(msg => {
-      this.findResultsCount.textContent = msg;
-      this.findResultsCount.classList.toggle("hidden", !total);
+      this._advanceOffsetPage(previous);
+    }
 
-      this._adjustWidth();
-    });
+    this._nextPageMatch();
   }
 
-  open() {
-    if (!this.opened) {
-      this.opened = true;
-      this.toggleButton.classList.add("toggled");
-      this.bar.classList.remove("hidden");
-    }
+  _matchesReady(matches) {
+    const offset = this._offset;
+    const numMatches = matches.length;
+    const previous = this._state.findPrevious;
 
-    this.findField.select();
-    this.findField.focus();
+    if (numMatches) {
+      offset.matchIdx = previous ? numMatches - 1 : 0;
 
-    this._adjustWidth();
-  }
+      this._updateMatch(true);
 
-  close() {
-    if (!this.opened) {
-      return;
+      return true;
     }
 
-    this.opened = false;
-    this.toggleButton.classList.remove("toggled");
-    this.bar.classList.add("hidden");
-    this.eventBus.dispatch("findbarclose", {
-      source: this
-    });
-  }
+    this._advanceOffsetPage(previous);
 
-  toggle() {
-    if (this.opened) {
-      this.close();
-    } else {
-      this.open();
+    if (offset.wrapped) {
+      offset.matchIdx = null;
+
+      if (this._pagesToSearch < 0) {
+        this._updateMatch(false);
+
+        return true;
+      }
     }
+
+    return false;
   }
 
-  _adjustWidth() {
-    if (!this.opened) {
-      return;
+  _nextPageMatch() {
+    if (this._resumePageIdx !== null) {
+      console.error("There can only be one pending page.");
     }
 
-    this.bar.classList.remove("wrapContainers");
-    const findbarHeight = this.bar.clientHeight;
-    const inputContainerHeight = this.bar.firstElementChild.clientHeight;
+    let matches = null;
 
-    if (findbarHeight > inputContainerHeight) {
-      this.bar.classList.add("wrapContainers");
-    }
+    do {
+      const pageIdx = this._offset.pageIdx;
+      matches = this._pageMatches[pageIdx];
+
+      if (!matches) {
+        this._resumePageIdx = pageIdx;
+        break;
+      }
+    } while (!this._matchesReady(matches));
   }
 
-}
+  _advanceOffsetPage(previous) {
+    const offset = this._offset;
+    const numPages = this._linkService.pagesCount;
+    offset.pageIdx = previous ? offset.pageIdx - 1 : offset.pageIdx + 1;
+    offset.matchIdx = null;
+    this._pagesToSearch--;
 
-exports.PDFFindBar = PDFFindBar;
+    if (offset.pageIdx >= numPages || offset.pageIdx < 0) {
+      offset.pageIdx = previous ? numPages - 1 : 0;
+      offset.wrapped = true;
+    }
+  }
 
-/***/ }),
-/* 16 */
-/***/ (function(module, exports, __webpack_require__) {
+  _updateMatch(found = false) {
+    let state = FindState.NOT_FOUND;
+    const wrapped = this._offset.wrapped;
+    this._offset.wrapped = false;
 
-"use strict";
+    if (found) {
+      const previousPage = this._selected.pageIdx;
+      this._selected.pageIdx = this._offset.pageIdx;
+      this._selected.matchIdx = this._offset.matchIdx;
+      state = wrapped ? FindState.WRAPPED : FindState.FOUND;
 
+      if (previousPage !== -1 && previousPage !== this._selected.pageIdx) {
+        this._updatePage(previousPage);
+      }
+    }
 
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.PDFFindController = exports.FindState = void 0;
+    this._updateUIState(state, this._state.findPrevious);
 
-var _pdfjsLib = __webpack_require__(5);
+    if (this._selected.pageIdx !== -1) {
+      this._scrollMatches = true;
 
-var _pdf_find_utils = __webpack_require__(17);
+      this._updatePage(this._selected.pageIdx);
+    }
+  }
 
-var _ui_utils = __webpack_require__(2);
+  _onFindBarClose(evt) {
+    const pdfDocument = this._pdfDocument;
 
-const FindState = {
-  FOUND: 0,
-  NOT_FOUND: 1,
-  WRAPPED: 2,
-  PENDING: 3
-};
-exports.FindState = FindState;
-const FIND_TIMEOUT = 250;
-const MATCH_SCROLL_OFFSET_TOP = -50;
-const MATCH_SCROLL_OFFSET_LEFT = -400;
-const CHARACTERS_TO_NORMALIZE = {
-  "\u2018": "'",
-  "\u2019": "'",
-  "\u201A": "'",
-  "\u201B": "'",
-  "\u201C": '"',
-  "\u201D": '"',
-  "\u201E": '"',
-  "\u201F": '"',
-  "\u00BC": "1/4",
-  "\u00BD": "1/2",
-  "\u00BE": "3/4"
-};
-let normalizationRegex = null;
+    this._firstPageCapability.promise.then(() => {
+      if (!this._pdfDocument || pdfDocument && this._pdfDocument !== pdfDocument) {
+        return;
+      }
 
-function normalize(text) {
-  if (!normalizationRegex) {
-    const replace = Object.keys(CHARACTERS_TO_NORMALIZE).join("");
-    normalizationRegex = new RegExp(`[${replace}]`, "g");
-  }
+      if (this._findTimeout) {
+        clearTimeout(this._findTimeout);
+        this._findTimeout = null;
+      }
 
-  return text.replace(normalizationRegex, function (ch) {
-    return CHARACTERS_TO_NORMALIZE[ch];
-  });
-}
+      if (this._resumePageIdx) {
+        this._resumePageIdx = null;
+        this._dirtyMatch = true;
+      }
 
-class PDFFindController {
-  constructor({
-    linkService,
-    eventBus
-  }) {
-    this._linkService = linkService;
-    this._eventBus = eventBus;
+      this._updateUIState(FindState.FOUND);
 
-    this._reset();
+      this._highlightMatches = false;
 
-    eventBus._on("findbarclose", this._onFindBarClose.bind(this));
+      this._updateAllPages();
+    });
   }
 
-  get highlightMatches() {
-    return this._highlightMatches;
-  }
+  _requestMatchesCount() {
+    const {
+      pageIdx,
+      matchIdx
+    } = this._selected;
+    let current = 0,
+        total = this._matchesCountTotal;
 
-  get pageMatches() {
-    return this._pageMatches;
-  }
+    if (matchIdx !== -1) {
+      for (let i = 0; i < pageIdx; i++) {
+        current += this._pageMatches[i]?.length || 0;
+      }
 
-  get pageMatchesLength() {
-    return this._pageMatchesLength;
-  }
+      current += matchIdx + 1;
+    }
 
-  get selected() {
-    return this._selected;
+    if (current < 1 || current > total) {
+      current = total = 0;
+    }
+
+    return {
+      current,
+      total
+    };
   }
 
-  get state() {
-    return this._state;
+  _updateUIResultsCount() {
+    this._eventBus.dispatch("updatefindmatchescount", {
+      source: this,
+      matchesCount: this._requestMatchesCount()
+    });
   }
 
-  setDocument(pdfDocument) {
-    if (this._pdfDocument) {
-      this._reset();
-    }
+  _updateUIState(state, previous) {
+    this._eventBus.dispatch("updatefindcontrolstate", {
+      source: this,
+      state,
+      previous,
+      matchesCount: this._requestMatchesCount(),
+      rawQuery: this._state?.query ?? null
+    });
+  }
 
-    if (!pdfDocument) {
-      return;
-    }
+}
 
-    this._pdfDocument = pdfDocument;
+exports.PDFFindController = PDFFindController;
 
-    this._firstPageCapability.resolve();
-  }
+/***/ }),
+/* 16 */
+/***/ ((__unused_webpack_module, exports) => {
 
-  executeCommand(cmd, state) {
-    if (!state) {
-      return;
-    }
 
-    const pdfDocument = this._pdfDocument;
 
-    if (this._state === null || this._shouldDirtyMatch(cmd, state)) {
-      this._dirtyMatch = true;
-    }
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports.getCharacterType = getCharacterType;
+exports.CharacterType = void 0;
+const CharacterType = {
+  SPACE: 0,
+  ALPHA_LETTER: 1,
+  PUNCT: 2,
+  HAN_LETTER: 3,
+  KATAKANA_LETTER: 4,
+  HIRAGANA_LETTER: 5,
+  HALFWIDTH_KATAKANA_LETTER: 6,
+  THAI_LETTER: 7
+};
+exports.CharacterType = CharacterType;
 
-    this._state = state;
+function isAlphabeticalScript(charCode) {
+  return charCode < 0x2e80;
+}
 
-    if (cmd !== "findhighlightallchange") {
-      this._updateUIState(FindState.PENDING);
-    }
+function isAscii(charCode) {
+  return (charCode & 0xff80) === 0;
+}
 
-    this._firstPageCapability.promise.then(() => {
-      if (!this._pdfDocument || pdfDocument && this._pdfDocument !== pdfDocument) {
-        return;
-      }
+function isAsciiAlpha(charCode) {
+  return charCode >= 0x61 && charCode <= 0x7a || charCode >= 0x41 && charCode <= 0x5a;
+}
 
-      this._extractText();
+function isAsciiDigit(charCode) {
+  return charCode >= 0x30 && charCode <= 0x39;
+}
 
-      const findbarClosed = !this._highlightMatches;
-      const pendingTimeout = !!this._findTimeout;
+function isAsciiSpace(charCode) {
+  return charCode === 0x20 || charCode === 0x09 || charCode === 0x0d || charCode === 0x0a;
+}
 
-      if (this._findTimeout) {
-        clearTimeout(this._findTimeout);
-        this._findTimeout = null;
-      }
+function isHan(charCode) {
+  return charCode >= 0x3400 && charCode <= 0x9fff || charCode >= 0xf900 && charCode <= 0xfaff;
+}
 
-      if (cmd === "find") {
-        this._findTimeout = setTimeout(() => {
-          this._nextMatch();
+function isKatakana(charCode) {
+  return charCode >= 0x30a0 && charCode <= 0x30ff;
+}
 
-          this._findTimeout = null;
-        }, FIND_TIMEOUT);
-      } else if (this._dirtyMatch) {
-        this._nextMatch();
-      } else if (cmd === "findagain") {
-        this._nextMatch();
+function isHiragana(charCode) {
+  return charCode >= 0x3040 && charCode <= 0x309f;
+}
 
-        if (findbarClosed && this._state.highlightAll) {
-          this._updateAllPages();
-        }
-      } else if (cmd === "findhighlightallchange") {
-        if (pendingTimeout) {
-          this._nextMatch();
-        } else {
-          this._highlightMatches = true;
-        }
+function isHalfwidthKatakana(charCode) {
+  return charCode >= 0xff60 && charCode <= 0xff9f;
+}
 
-        this._updateAllPages();
-      } else {
-        this._nextMatch();
+function isThai(charCode) {
+  return (charCode & 0xff80) === 0x0e00;
+}
+
+function getCharacterType(charCode) {
+  if (isAlphabeticalScript(charCode)) {
+    if (isAscii(charCode)) {
+      if (isAsciiSpace(charCode)) {
+        return CharacterType.SPACE;
+      } else if (isAsciiAlpha(charCode) || isAsciiDigit(charCode) || charCode === 0x5f) {
+        return CharacterType.ALPHA_LETTER;
       }
-    });
-  }
 
-  scrollMatchIntoView({
-    element = null,
-    pageIndex = -1,
-    matchIndex = -1
-  }) {
-    if (!this._scrollMatches || !element) {
-      return;
-    } else if (matchIndex === -1 || matchIndex !== this._selected.matchIdx) {
-      return;
-    } else if (pageIndex === -1 || pageIndex !== this._selected.pageIdx) {
-      return;
+      return CharacterType.PUNCT;
+    } else if (isThai(charCode)) {
+      return CharacterType.THAI_LETTER;
+    } else if (charCode === 0xa0) {
+      return CharacterType.SPACE;
     }
 
-    this._scrollMatches = false;
-    const spot = {
-      top: MATCH_SCROLL_OFFSET_TOP,
-      left: MATCH_SCROLL_OFFSET_LEFT
-    };
-    (0, _ui_utils.scrollIntoView)(element, spot, true);
+    return CharacterType.ALPHA_LETTER;
   }
 
-  _reset() {
-    this._highlightMatches = false;
-    this._scrollMatches = false;
-    this._pdfDocument = null;
-    this._pageMatches = [];
-    this._pageMatchesLength = [];
-    this._state = null;
-    this._selected = {
-      pageIdx: -1,
-      matchIdx: -1
-    };
-    this._offset = {
-      pageIdx: null,
-      matchIdx: null,
-      wrapped: false
-    };
-    this._extractTextPromises = [];
-    this._pageContents = [];
-    this._matchesCountTotal = 0;
-    this._pagesToSearch = null;
-    this._pendingFindMatches = Object.create(null);
-    this._resumePageIdx = null;
-    this._dirtyMatch = false;
-    clearTimeout(this._findTimeout);
-    this._findTimeout = null;
-    this._firstPageCapability = (0, _pdfjsLib.createPromiseCapability)();
+  if (isHan(charCode)) {
+    return CharacterType.HAN_LETTER;
+  } else if (isKatakana(charCode)) {
+    return CharacterType.KATAKANA_LETTER;
+  } else if (isHiragana(charCode)) {
+    return CharacterType.HIRAGANA_LETTER;
+  } else if (isHalfwidthKatakana(charCode)) {
+    return CharacterType.HALFWIDTH_KATAKANA_LETTER;
   }
 
-  get _query() {
-    if (this._state.query !== this._rawQuery) {
-      this._rawQuery = this._state.query;
-      this._normalizedQuery = normalize(this._state.query);
-    }
-
-    return this._normalizedQuery;
-  }
+  return CharacterType.ALPHA_LETTER;
+}
 
-  _shouldDirtyMatch(cmd, state) {
-    if (state.query !== this._state.query) {
-      return true;
-    }
+/***/ }),
+/* 17 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 
-    switch (cmd) {
-      case "findagain":
-        const pageNumber = this._selected.pageIdx + 1;
-        const linkService = this._linkService;
 
-        if (pageNumber >= 1 && pageNumber <= linkService.pagesCount && pageNumber !== linkService.page && 
!linkService.isPageVisible(pageNumber)) {
-          return true;
-        }
 
-        return false;
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports.isDestArraysEqual = isDestArraysEqual;
+exports.isDestHashesEqual = isDestHashesEqual;
+exports.PDFHistory = void 0;
 
-      case "findhighlightallchange":
-        return false;
-    }
+var _ui_utils = __webpack_require__(4);
 
-    return true;
-  }
+const HASH_CHANGE_TIMEOUT = 1000;
+const POSITION_UPDATED_THRESHOLD = 50;
+const UPDATE_VIEWAREA_TIMEOUT = 1000;
 
-  _prepareMatches(matchesWithLength, matches, matchesLength) {
-    function isSubTerm(currentIndex) {
-      const currentElem = matchesWithLength[currentIndex];
-      const nextElem = matchesWithLength[currentIndex + 1];
+function getCurrentHash() {
+  return document.location.hash;
+}
 
-      if (currentIndex < matchesWithLength.length - 1 && currentElem.match === nextElem.match) {
-        currentElem.skipped = true;
-        return true;
-      }
+class PDFHistory {
+  constructor({
+    linkService,
+    eventBus
+  }) {
+    this.linkService = linkService;
+    this.eventBus = eventBus;
+    this._initialized = false;
+    this._fingerprint = "";
+    this.reset();
+    this._boundEvents = null;
+    this._isViewerInPresentationMode = false;
 
-      for (let i = currentIndex - 1; i >= 0; i--) {
-        const prevElem = matchesWithLength[i];
+    this.eventBus._on("presentationmodechanged", evt => {
+      this._isViewerInPresentationMode = evt.state !== _ui_utils.PresentationModeState.NORMAL;
+    });
 
-        if (prevElem.skipped) {
-          continue;
-        }
+    this.eventBus._on("pagesinit", () => {
+      this._isPagesLoaded = false;
 
-        if (prevElem.match + prevElem.matchLength < currentElem.match) {
-          break;
-        }
+      this.eventBus._on("pagesloaded", evt => {
+        this._isPagesLoaded = !!evt.pagesCount;
+      }, {
+        once: true
+      });
+    });
+  }
 
-        if (prevElem.match + prevElem.matchLength >= currentElem.match + currentElem.matchLength) {
-          currentElem.skipped = true;
-          return true;
-        }
-      }
+  initialize({
+    fingerprint,
+    resetHistory = false,
+    updateUrl = false
+  }) {
+    if (!fingerprint || typeof fingerprint !== "string") {
+      console.error('PDFHistory.initialize: The "fingerprint" must be a non-empty string.');
+      return;
+    }
 
-      return false;
+    if (this._initialized) {
+      this.reset();
     }
 
-    matchesWithLength.sort(function (a, b) {
-      return a.match === b.match ? a.matchLength - b.matchLength : a.match - b.match;
-    });
+    const reInitialized = this._fingerprint !== "" && this._fingerprint !== fingerprint;
+    this._fingerprint = fingerprint;
+    this._updateUrl = updateUrl === true;
+    this._initialized = true;
+
+    this._bindEvents();
 
-    for (let i = 0, len = matchesWithLength.length; i < len; i++) {
-      if (isSubTerm(i)) {
-        continue;
-      }
+    const state = window.history.state;
+    this._popStateInProgress = false;
+    this._blockHashChange = 0;
+    this._currentHash = getCurrentHash();
+    this._numPositionUpdates = 0;
+    this._uid = this._maxUid = 0;
+    this._destination = null;
+    this._position = null;
 
-      matches.push(matchesWithLength[i].match);
-      matchesLength.push(matchesWithLength[i].matchLength);
-    }
-  }
+    if (!this._isValidState(state, true) || resetHistory) {
+      const {
+        hash,
+        page,
+        rotation
+      } = this._parseCurrentHash(true);
 
-  _isEntireWord(content, startIdx, length) {
-    if (startIdx > 0) {
-      const first = content.charCodeAt(startIdx);
-      const limit = content.charCodeAt(startIdx - 1);
+      if (!hash || reInitialized || resetHistory) {
+        this._pushOrReplaceState(null, true);
 
-      if ((0, _pdf_find_utils.getCharacterType)(first) === (0, _pdf_find_utils.getCharacterType)(limit)) {
-        return false;
+        return;
       }
+
+      this._pushOrReplaceState({
+        hash,
+        page,
+        rotation
+      }, true);
+
+      return;
     }
 
-    const endIdx = startIdx + length - 1;
+    const destination = state.destination;
 
-    if (endIdx < content.length - 1) {
-      const last = content.charCodeAt(endIdx);
-      const limit = content.charCodeAt(endIdx + 1);
+    this._updateInternalState(destination, state.uid, true);
 
-      if ((0, _pdf_find_utils.getCharacterType)(last) === (0, _pdf_find_utils.getCharacterType)(limit)) {
-        return false;
-      }
+    if (destination.rotation !== undefined) {
+      this._initialRotation = destination.rotation;
     }
 
-    return true;
+    if (destination.dest) {
+      this._initialBookmark = JSON.stringify(destination.dest);
+      this._destination.page = null;
+    } else if (destination.hash) {
+      this._initialBookmark = destination.hash;
+    } else if (destination.page) {
+      this._initialBookmark = `page=${destination.page}`;
+    }
   }
 
-  _calculatePhraseMatch(query, pageIndex, pageContent, entireWord) {
-    const matches = [];
-    const queryLen = query.length;
-    let matchIdx = -queryLen;
-
-    while (true) {
-      matchIdx = pageContent.indexOf(query, matchIdx + queryLen);
+  reset() {
+    if (this._initialized) {
+      this._pageHide();
 
-      if (matchIdx === -1) {
-        break;
-      }
+      this._initialized = false;
 
-      if (entireWord && !this._isEntireWord(pageContent, matchIdx, queryLen)) {
-        continue;
-      }
+      this._unbindEvents();
+    }
 
-      matches.push(matchIdx);
+    if (this._updateViewareaTimeout) {
+      clearTimeout(this._updateViewareaTimeout);
+      this._updateViewareaTimeout = null;
     }
 
-    this._pageMatches[pageIndex] = matches;
+    this._initialBookmark = null;
+    this._initialRotation = null;
   }
 
-  _calculateWordMatch(query, pageIndex, pageContent, entireWord) {
-    const matchesWithLength = [];
-    const queryArray = query.match(/\S+/g);
-
-    for (let i = 0, len = queryArray.length; i < len; i++) {
-      const subquery = queryArray[i];
-      const subqueryLen = subquery.length;
-      let matchIdx = -subqueryLen;
-
-      while (true) {
-        matchIdx = pageContent.indexOf(subquery, matchIdx + subqueryLen);
+  push({
+    namedDest = null,
+    explicitDest,
+    pageNumber
+  }) {
+    if (!this._initialized) {
+      return;
+    }
 
-        if (matchIdx === -1) {
-          break;
-        }
+    if (namedDest && typeof namedDest !== "string") {
+      console.error("PDFHistory.push: " + `"${namedDest}" is not a valid namedDest parameter.`);
+      return;
+    } else if (!Array.isArray(explicitDest)) {
+      console.error("PDFHistory.push: " + `"${explicitDest}" is not a valid explicitDest parameter.`);
+      return;
+    } else if (!this._isValidPage(pageNumber)) {
+      if (pageNumber !== null || this._destination) {
+        console.error("PDFHistory.push: " + `"${pageNumber}" is not a valid pageNumber parameter.`);
+        return;
+      }
+    }
 
-        if (entireWord && !this._isEntireWord(pageContent, matchIdx, subqueryLen)) {
-          continue;
-        }
+    const hash = namedDest || JSON.stringify(explicitDest);
 
-        matchesWithLength.push({
-          match: matchIdx,
-          matchLength: subqueryLen,
-          skipped: false
-        });
-      }
+    if (!hash) {
+      return;
     }
 
-    this._pageMatchesLength[pageIndex] = [];
-    this._pageMatches[pageIndex] = [];
+    let forceReplace = false;
 
-    this._prepareMatches(matchesWithLength, this._pageMatches[pageIndex], 
this._pageMatchesLength[pageIndex]);
-  }
+    if (this._destination && (isDestHashesEqual(this._destination.hash, hash) || 
isDestArraysEqual(this._destination.dest, explicitDest))) {
+      if (this._destination.page) {
+        return;
+      }
 
-  _calculateMatch(pageIndex) {
-    let pageContent = this._pageContents[pageIndex];
-    let query = this._query;
-    const {
-      caseSensitive,
-      entireWord,
-      phraseSearch
-    } = this._state;
+      forceReplace = true;
+    }
 
-    if (query.length === 0) {
+    if (this._popStateInProgress && !forceReplace) {
       return;
     }
 
-    if (!caseSensitive) {
-      pageContent = pageContent.toLowerCase();
-      query = query.toLowerCase();
-    }
+    this._pushOrReplaceState({
+      dest: explicitDest,
+      hash,
+      page: pageNumber,
+      rotation: this.linkService.rotation
+    }, forceReplace);
 
-    if (phraseSearch) {
-      this._calculatePhraseMatch(query, pageIndex, pageContent, entireWord);
-    } else {
-      this._calculateWordMatch(query, pageIndex, pageContent, entireWord);
+    if (!this._popStateInProgress) {
+      this._popStateInProgress = true;
+      Promise.resolve().then(() => {
+        this._popStateInProgress = false;
+      });
     }
+  }
 
-    if (this._state.highlightAll) {
-      this._updatePage(pageIndex);
+  pushPage(pageNumber) {
+    if (!this._initialized) {
+      return;
     }
 
-    if (this._resumePageIdx === pageIndex) {
-      this._resumePageIdx = null;
+    if (!this._isValidPage(pageNumber)) {
+      console.error(`PDFHistory.pushPage: "${pageNumber}" is not a valid page number.`);
+      return;
+    }
 
-      this._nextPageMatch();
+    if (this._destination?.page === pageNumber) {
+      return;
     }
 
-    const pageMatchesCount = this._pageMatches[pageIndex].length;
+    if (this._popStateInProgress) {
+      return;
+    }
 
-    if (pageMatchesCount > 0) {
-      this._matchesCountTotal += pageMatchesCount;
+    this._pushOrReplaceState({
+      dest: null,
+      hash: `page=${pageNumber}`,
+      page: pageNumber,
+      rotation: this.linkService.rotation
+    });
 
-      this._updateUIResultsCount();
+    if (!this._popStateInProgress) {
+      this._popStateInProgress = true;
+      Promise.resolve().then(() => {
+        this._popStateInProgress = false;
+      });
     }
   }
 
-  _extractText() {
-    if (this._extractTextPromises.length > 0) {
+  pushCurrentPosition() {
+    if (!this._initialized || this._popStateInProgress) {
       return;
     }
 
-    let promise = Promise.resolve();
+    this._tryPushCurrentPosition();
+  }
 
-    for (let i = 0, ii = this._linkService.pagesCount; i < ii; i++) {
-      const extractTextCapability = (0, _pdfjsLib.createPromiseCapability)();
-      this._extractTextPromises[i] = extractTextCapability.promise;
-      promise = promise.then(() => {
-        return this._pdfDocument.getPage(i + 1).then(pdfPage => {
-          return pdfPage.getTextContent({
-            normalizeWhitespace: true
-          });
-        }).then(textContent => {
-          const textItems = textContent.items;
-          const strBuf = [];
+  back() {
+    if (!this._initialized || this._popStateInProgress) {
+      return;
+    }
 
-          for (let j = 0, jj = textItems.length; j < jj; j++) {
-            strBuf.push(textItems[j].str);
-          }
+    const state = window.history.state;
 
-          this._pageContents[i] = normalize(strBuf.join(""));
-          extractTextCapability.resolve(i);
-        }, reason => {
-          console.error(`Unable to get text content for page ${i + 1}`, reason);
-          this._pageContents[i] = "";
-          extractTextCapability.resolve(i);
-        });
-      });
+    if (this._isValidState(state) && state.uid > 0) {
+      window.history.back();
     }
   }
 
-  _updatePage(index) {
-    if (this._scrollMatches && this._selected.pageIdx === index) {
-      this._linkService.page = index + 1;
+  forward() {
+    if (!this._initialized || this._popStateInProgress) {
+      return;
     }
 
-    this._eventBus.dispatch("updatetextlayermatches", {
-      source: this,
-      pageIndex: index
-    });
+    const state = window.history.state;
+
+    if (this._isValidState(state) && state.uid < this._maxUid) {
+      window.history.forward();
+    }
   }
 
-  _updateAllPages() {
-    this._eventBus.dispatch("updatetextlayermatches", {
-      source: this,
-      pageIndex: -1
-    });
+  get popStateInProgress() {
+    return this._initialized && (this._popStateInProgress || this._blockHashChange > 0);
   }
 
-  _nextMatch() {
-    const previous = this._state.findPrevious;
-    const currentPageIndex = this._linkService.page - 1;
-    const numPages = this._linkService.pagesCount;
-    this._highlightMatches = true;
+  get initialBookmark() {
+    return this._initialized ? this._initialBookmark : null;
+  }
 
-    if (this._dirtyMatch) {
-      this._dirtyMatch = false;
-      this._selected.pageIdx = this._selected.matchIdx = -1;
-      this._offset.pageIdx = currentPageIndex;
-      this._offset.matchIdx = null;
-      this._offset.wrapped = false;
-      this._resumePageIdx = null;
-      this._pageMatches.length = 0;
-      this._pageMatchesLength.length = 0;
-      this._matchesCountTotal = 0;
+  get initialRotation() {
+    return this._initialized ? this._initialRotation : null;
+  }
 
-      this._updateAllPages();
+  _pushOrReplaceState(destination, forceReplace = false) {
+    const shouldReplace = forceReplace || !this._destination;
+    const newState = {
+      fingerprint: this._fingerprint,
+      uid: shouldReplace ? this._uid : this._uid + 1,
+      destination
+    };
 
-      for (let i = 0; i < numPages; i++) {
-        if (this._pendingFindMatches[i] === true) {
-          continue;
-        }
+    this._updateInternalState(destination, newState.uid);
 
-        this._pendingFindMatches[i] = true;
+    let newUrl;
 
-        this._extractTextPromises[i].then(pageIdx => {
-          delete this._pendingFindMatches[pageIdx];
+    if (this._updateUrl && destination?.hash) {
+      const baseUrl = document.location.href.split("#")[0];
 
-          this._calculateMatch(pageIdx);
-        });
+      if (!baseUrl.startsWith("file://")) {
+        newUrl = `${baseUrl}#${destination.hash}`;
       }
     }
 
-    if (this._query === "") {
-      this._updateUIState(FindState.FOUND);
+// FIXME: This currently breaks Epiphany due to rewriting history with baseUrl
+return;
+    if (shouldReplace) {
+      window.history.replaceState(newState, "", newUrl);
+    } else {
+      window.history.pushState(newState, "", newUrl);
+    }
+  }
 
+  _tryPushCurrentPosition(temporary = false) {
+    if (!this._position) {
       return;
     }
 
-    if (this._resumePageIdx) {
+    let position = this._position;
+
+    if (temporary) {
+      position = Object.assign(Object.create(null), this._position);
+      position.temporary = true;
+    }
+
+    if (!this._destination) {
+      this._pushOrReplaceState(position);
+
       return;
     }
 
-    const offset = this._offset;
-    this._pagesToSearch = numPages;
+    if (this._destination.temporary) {
+      this._pushOrReplaceState(position, true);
 
-    if (offset.matchIdx !== null) {
-      const numPageMatches = this._pageMatches[offset.pageIdx].length;
+      return;
+    }
 
-      if (!previous && offset.matchIdx + 1 < numPageMatches || previous && offset.matchIdx > 0) {
-        offset.matchIdx = previous ? offset.matchIdx - 1 : offset.matchIdx + 1;
+    if (this._destination.hash === position.hash) {
+      return;
+    }
 
-        this._updateMatch(true);
+    if (!this._destination.page && (POSITION_UPDATED_THRESHOLD <= 0 || this._numPositionUpdates <= 
POSITION_UPDATED_THRESHOLD)) {
+      return;
+    }
 
+    let forceReplace = false;
+
+    if (this._destination.page >= position.first && this._destination.page <= position.page) {
+      if (this._destination.dest !== undefined || !this._destination.first) {
         return;
       }
 
-      this._advanceOffsetPage(previous);
+      forceReplace = true;
     }
 
-    this._nextPageMatch();
+    this._pushOrReplaceState(position, forceReplace);
   }
 
-  _matchesReady(matches) {
-    const offset = this._offset;
-    const numMatches = matches.length;
-    const previous = this._state.findPrevious;
-
-    if (numMatches) {
-      offset.matchIdx = previous ? numMatches - 1 : 0;
-
-      this._updateMatch(true);
+  _isValidPage(val) {
+    return Number.isInteger(val) && val > 0 && val <= this.linkService.pagesCount;
+  }
 
-      return true;
+  _isValidState(state, checkReload = false) {
+    if (!state) {
+      return false;
     }
 
-    this._advanceOffsetPage(previous);
-
-    if (offset.wrapped) {
-      offset.matchIdx = null;
+    if (state.fingerprint !== this._fingerprint) {
+      if (checkReload) {
+        if (typeof state.fingerprint !== "string" || state.fingerprint.length !== this._fingerprint.length) {
+          return false;
+        }
 
-      if (this._pagesToSearch < 0) {
-        this._updateMatch(false);
+        const [perfEntry] = performance.getEntriesByType("navigation");
 
-        return true;
+        if (perfEntry?.type !== "reload") {
+          return false;
+        }
+      } else {
+        return false;
       }
     }
 
-    return false;
-  }
+    if (!Number.isInteger(state.uid) || state.uid < 0) {
+      return false;
+    }
 
-  _nextPageMatch() {
-    if (this._resumePageIdx !== null) {
-      console.error("There can only be one pending page.");
+    if (state.destination === null || typeof state.destination !== "object") {
+      return false;
     }
 
-    let matches = null;
+    return true;
+  }
 
-    do {
-      const pageIdx = this._offset.pageIdx;
-      matches = this._pageMatches[pageIdx];
+  _updateInternalState(destination, uid, removeTemporary = false) {
+    if (this._updateViewareaTimeout) {
+      clearTimeout(this._updateViewareaTimeout);
+      this._updateViewareaTimeout = null;
+    }
 
-      if (!matches) {
-        this._resumePageIdx = pageIdx;
-        break;
-      }
-    } while (!this._matchesReady(matches));
+    if (removeTemporary && destination?.temporary) {
+      delete destination.temporary;
+    }
+
+    this._destination = destination;
+    this._uid = uid;
+    this._maxUid = Math.max(this._maxUid, uid);
+    this._numPositionUpdates = 0;
   }
 
-  _advanceOffsetPage(previous) {
-    const offset = this._offset;
-    const numPages = this._linkService.pagesCount;
-    offset.pageIdx = previous ? offset.pageIdx - 1 : offset.pageIdx + 1;
-    offset.matchIdx = null;
-    this._pagesToSearch--;
+  _parseCurrentHash(checkNameddest = false) {
+    const hash = unescape(getCurrentHash()).substring(1);
+    const params = (0, _ui_utils.parseQueryString)(hash);
+    const nameddest = params.nameddest || "";
+    let page = params.page | 0;
 
-    if (offset.pageIdx >= numPages || offset.pageIdx < 0) {
-      offset.pageIdx = previous ? numPages - 1 : 0;
-      offset.wrapped = true;
+    if (!this._isValidPage(page) || checkNameddest && nameddest.length > 0) {
+      page = null;
     }
+
+    return {
+      hash,
+      page,
+      rotation: this.linkService.rotation
+    };
   }
 
-  _updateMatch(found = false) {
-    let state = FindState.NOT_FOUND;
-    const wrapped = this._offset.wrapped;
-    this._offset.wrapped = false;
+  _updateViewarea({
+    location
+  }) {
+    if (this._updateViewareaTimeout) {
+      clearTimeout(this._updateViewareaTimeout);
+      this._updateViewareaTimeout = null;
+    }
 
-    if (found) {
-      const previousPage = this._selected.pageIdx;
-      this._selected.pageIdx = this._offset.pageIdx;
-      this._selected.matchIdx = this._offset.matchIdx;
-      state = wrapped ? FindState.WRAPPED : FindState.FOUND;
+    this._position = {
+      hash: this._isViewerInPresentationMode ? `page=${location.pageNumber}` : 
location.pdfOpenParams.substring(1),
+      page: this.linkService.page,
+      first: location.pageNumber,
+      rotation: location.rotation
+    };
 
-      if (previousPage !== -1 && previousPage !== this._selected.pageIdx) {
-        this._updatePage(previousPage);
-      }
+    if (this._popStateInProgress) {
+      return;
     }
 
-    this._updateUIState(state, this._state.findPrevious);
+    if (POSITION_UPDATED_THRESHOLD > 0 && this._isPagesLoaded && this._destination && 
!this._destination.page) {
+      this._numPositionUpdates++;
+    }
 
-    if (this._selected.pageIdx !== -1) {
-      this._scrollMatches = true;
+    if (UPDATE_VIEWAREA_TIMEOUT > 0) {
+      this._updateViewareaTimeout = setTimeout(() => {
+        if (!this._popStateInProgress) {
+          this._tryPushCurrentPosition(true);
+        }
 
-      this._updatePage(this._selected.pageIdx);
+        this._updateViewareaTimeout = null;
+      }, UPDATE_VIEWAREA_TIMEOUT);
     }
   }
 
-  _onFindBarClose(evt) {
-    const pdfDocument = this._pdfDocument;
+  _popState({
+    state
+  }) {
+    const newHash = getCurrentHash(),
+          hashChanged = this._currentHash !== newHash;
+    this._currentHash = newHash;
 
-    this._firstPageCapability.promise.then(() => {
-      if (!this._pdfDocument || pdfDocument && this._pdfDocument !== pdfDocument) {
-        return;
-      }
+    if (!state) {
+      this._uid++;
 
-      if (this._findTimeout) {
-        clearTimeout(this._findTimeout);
-        this._findTimeout = null;
-      }
+      const {
+        hash,
+        page,
+        rotation
+      } = this._parseCurrentHash();
+
+      this._pushOrReplaceState({
+        hash,
+        page,
+        rotation
+      }, true);
+
+      return;
+    }
+
+    if (!this._isValidState(state)) {
+      return;
+    }
+
+    this._popStateInProgress = true;
+
+    if (hashChanged) {
+      this._blockHashChange++;
+      (0, _ui_utils.waitOnEventOrTimeout)({
+        target: window,
+        name: "hashchange",
+        delay: HASH_CHANGE_TIMEOUT
+      }).then(() => {
+        this._blockHashChange--;
+      });
+    }
 
-      if (this._resumePageIdx) {
-        this._resumePageIdx = null;
-        this._dirtyMatch = true;
-      }
+    const destination = state.destination;
 
-      this._updateUIState(FindState.FOUND);
+    this._updateInternalState(destination, state.uid, true);
 
-      this._highlightMatches = false;
+    if ((0, _ui_utils.isValidRotation)(destination.rotation)) {
+      this.linkService.rotation = destination.rotation;
+    }
 
-      this._updateAllPages();
+    if (destination.dest) {
+      this.linkService.goToDestination(destination.dest);
+    } else if (destination.hash) {
+      this.linkService.setHash(destination.hash);
+    } else if (destination.page) {
+      this.linkService.page = destination.page;
+    }
+
+    Promise.resolve().then(() => {
+      this._popStateInProgress = false;
     });
   }
 
-  _requestMatchesCount() {
-    const {
-      pageIdx,
-      matchIdx
-    } = this._selected;
-    let current = 0,
-        total = this._matchesCountTotal;
-
-    if (matchIdx !== -1) {
-      for (let i = 0; i < pageIdx; i++) {
-        current += this._pageMatches[i] && this._pageMatches[i].length || 0;
-      }
-
-      current += matchIdx + 1;
+  _pageHide() {
+    if (!this._destination || this._destination.temporary) {
+      this._tryPushCurrentPosition();
     }
+  }
 
-    if (current < 1 || current > total) {
-      current = total = 0;
+  _bindEvents() {
+    if (this._boundEvents) {
+      return;
     }
 
-    return {
-      current,
-      total
+    this._boundEvents = {
+      updateViewarea: this._updateViewarea.bind(this),
+      popState: this._popState.bind(this),
+      pageHide: this._pageHide.bind(this)
     };
-  }
 
-  _updateUIResultsCount() {
-    this._eventBus.dispatch("updatefindmatchescount", {
-      source: this,
-      matchesCount: this._requestMatchesCount()
-    });
-  }
+    this.eventBus._on("updateviewarea", this._boundEvents.updateViewarea);
 
-  _updateUIState(state, previous) {
-    this._eventBus.dispatch("updatefindcontrolstate", {
-      source: this,
-      state,
-      previous,
-      matchesCount: this._requestMatchesCount(),
-      rawQuery: this._state ? this._state.query : null
-    });
+    window.addEventListener("popstate", this._boundEvents.popState);
+    window.addEventListener("pagehide", this._boundEvents.pageHide);
   }
 
-}
-
-exports.PDFFindController = PDFFindController;
-
-/***/ }),
-/* 17 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
+  _unbindEvents() {
+    if (!this._boundEvents) {
+      return;
+    }
 
+    this.eventBus._off("updateviewarea", this._boundEvents.updateViewarea);
 
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.getCharacterType = getCharacterType;
-exports.CharacterType = void 0;
-const CharacterType = {
-  SPACE: 0,
-  ALPHA_LETTER: 1,
-  PUNCT: 2,
-  HAN_LETTER: 3,
-  KATAKANA_LETTER: 4,
-  HIRAGANA_LETTER: 5,
-  HALFWIDTH_KATAKANA_LETTER: 6,
-  THAI_LETTER: 7
-};
-exports.CharacterType = CharacterType;
+    window.removeEventListener("popstate", this._boundEvents.popState);
+    window.removeEventListener("pagehide", this._boundEvents.pageHide);
+    this._boundEvents = null;
+  }
 
-function isAlphabeticalScript(charCode) {
-  return charCode < 0x2e80;
 }
 
-function isAscii(charCode) {
-  return (charCode & 0xff80) === 0;
-}
+exports.PDFHistory = PDFHistory;
 
-function isAsciiAlpha(charCode) {
-  return charCode >= 0x61 && charCode <= 0x7a || charCode >= 0x41 && charCode <= 0x5a;
-}
+function isDestHashesEqual(destHash, pushHash) {
+  if (typeof destHash !== "string" || typeof pushHash !== "string") {
+    return false;
+  }
 
-function isAsciiDigit(charCode) {
-  return charCode >= 0x30 && charCode <= 0x39;
-}
+  if (destHash === pushHash) {
+    return true;
+  }
 
-function isAsciiSpace(charCode) {
-  return charCode === 0x20 || charCode === 0x09 || charCode === 0x0d || charCode === 0x0a;
-}
+  const {
+    nameddest
+  } = (0, _ui_utils.parseQueryString)(destHash);
 
-function isHan(charCode) {
-  return charCode >= 0x3400 && charCode <= 0x9fff || charCode >= 0xf900 && charCode <= 0xfaff;
-}
+  if (nameddest === pushHash) {
+    return true;
+  }
 
-function isKatakana(charCode) {
-  return charCode >= 0x30a0 && charCode <= 0x30ff;
+  return false;
 }
 
-function isHiragana(charCode) {
-  return charCode >= 0x3040 && charCode <= 0x309f;
-}
+function isDestArraysEqual(firstDest, secondDest) {
+  function isEntryEqual(first, second) {
+    if (typeof first !== typeof second) {
+      return false;
+    }
 
-function isHalfwidthKatakana(charCode) {
-  return charCode >= 0xff60 && charCode <= 0xff9f;
-}
+    if (Array.isArray(first) || Array.isArray(second)) {
+      return false;
+    }
 
-function isThai(charCode) {
-  return (charCode & 0xff80) === 0x0e00;
-}
+    if (first !== null && typeof first === "object" && second !== null) {
+      if (Object.keys(first).length !== Object.keys(second).length) {
+        return false;
+      }
 
-function getCharacterType(charCode) {
-  if (isAlphabeticalScript(charCode)) {
-    if (isAscii(charCode)) {
-      if (isAsciiSpace(charCode)) {
-        return CharacterType.SPACE;
-      } else if (isAsciiAlpha(charCode) || isAsciiDigit(charCode) || charCode === 0x5f) {
-        return CharacterType.ALPHA_LETTER;
+      for (const key in first) {
+        if (!isEntryEqual(first[key], second[key])) {
+          return false;
+        }
       }
 
-      return CharacterType.PUNCT;
-    } else if (isThai(charCode)) {
-      return CharacterType.THAI_LETTER;
-    } else if (charCode === 0xa0) {
-      return CharacterType.SPACE;
+      return true;
     }
 
-    return CharacterType.ALPHA_LETTER;
+    return first === second || Number.isNaN(first) && Number.isNaN(second);
   }
 
-  if (isHan(charCode)) {
-    return CharacterType.HAN_LETTER;
-  } else if (isKatakana(charCode)) {
-    return CharacterType.KATAKANA_LETTER;
-  } else if (isHiragana(charCode)) {
-    return CharacterType.HIRAGANA_LETTER;
-  } else if (isHalfwidthKatakana(charCode)) {
-    return CharacterType.HALFWIDTH_KATAKANA_LETTER;
+  if (!(Array.isArray(firstDest) && Array.isArray(secondDest))) {
+    return false;
   }
 
-  return CharacterType.ALPHA_LETTER;
+  if (firstDest.length !== secondDest.length) {
+    return false;
+  }
+
+  for (let i = 0, ii = firstDest.length; i < ii; i++) {
+    if (!isEntryEqual(firstDest[i], secondDest[i])) {
+      return false;
+    }
+  }
+
+  return true;
 }
 
 /***/ }),
 /* 18 */
-/***/ (function(module, exports, __webpack_require__) {
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
-exports.isDestHashesEqual = isDestHashesEqual;
-exports.isDestArraysEqual = isDestArraysEqual;
-exports.PDFHistory = void 0;
+}));
+exports.PDFLayerViewer = void 0;
 
-var _ui_utils = __webpack_require__(2);
+var _base_tree_viewer = __webpack_require__(12);
 
-const HASH_CHANGE_TIMEOUT = 1000;
-const POSITION_UPDATED_THRESHOLD = 50;
-const UPDATE_VIEWAREA_TIMEOUT = 1000;
+class PDFLayerViewer extends _base_tree_viewer.BaseTreeViewer {
+  constructor(options) {
+    super(options);
+    this.l10n = options.l10n;
 
-function getCurrentHash() {
-  return document.location.hash;
-}
+    this.eventBus._on("resetlayers", this._resetLayers.bind(this));
 
-class PDFHistory {
-  constructor({
-    linkService,
-    eventBus
-  }) {
-    this.linkService = linkService;
-    this.eventBus = eventBus;
-    this._initialized = false;
-    this._fingerprint = "";
-    this.reset();
-    this._boundEvents = null;
-    this._isViewerInPresentationMode = false;
+    this.eventBus._on("togglelayerstree", this._toggleAllTreeItems.bind(this));
+  }
 
-    this.eventBus._on("presentationmodechanged", evt => {
-      this._isViewerInPresentationMode = evt.active || evt.switchInProgress;
+  reset() {
+    super.reset();
+    this._optionalContentConfig = null;
+  }
+
+  _dispatchEvent(layersCount) {
+    this.eventBus.dispatch("layersloaded", {
+      source: this,
+      layersCount
     });
+  }
 
-    this.eventBus._on("pagesinit", () => {
-      this._isPagesLoaded = false;
+  _bindLink(element, {
+    groupId,
+    input
+  }) {
+    const setVisibility = () => {
+      this._optionalContentConfig.setVisibility(groupId, input.checked);
 
-      const onPagesLoaded = evt => {
-        this.eventBus._off("pagesloaded", onPagesLoaded);
+      this.eventBus.dispatch("optionalcontentconfig", {
+        source: this,
+        promise: Promise.resolve(this._optionalContentConfig)
+      });
+    };
 
-        this._isPagesLoaded = !!evt.pagesCount;
-      };
+    element.onclick = evt => {
+      if (evt.target === input) {
+        setVisibility();
+        return true;
+      } else if (evt.target !== element) {
+        return true;
+      }
 
-      this.eventBus._on("pagesloaded", onPagesLoaded);
-    });
+      input.checked = !input.checked;
+      setVisibility();
+      return false;
+    };
   }
 
-  initialize({
-    fingerprint,
-    resetHistory = false,
-    updateUrl = false
+  async _setNestedName(element, {
+    name = null
   }) {
-    if (!fingerprint || typeof fingerprint !== "string") {
-      console.error('PDFHistory.initialize: The "fingerprint" must be a non-empty string.');
+    if (typeof name === "string") {
+      element.textContent = this._normalizeTextContent(name);
       return;
     }
 
-    if (this._initialized) {
-      this.reset();
-    }
-
-    const reInitialized = this._fingerprint !== "" && this._fingerprint !== fingerprint;
-    this._fingerprint = fingerprint;
-    this._updateUrl = updateUrl === true;
-    this._initialized = true;
+    element.textContent = await this.l10n.get("additional_layers");
+    element.style.fontStyle = "italic";
+  }
 
-    this._bindEvents();
+  _addToggleButton(div, {
+    name = null
+  }) {
+    super._addToggleButton(div, name === null);
+  }
 
-    const state = window.history.state;
-    this._popStateInProgress = false;
-    this._blockHashChange = 0;
-    this._currentHash = getCurrentHash();
-    this._numPositionUpdates = 0;
-    this._uid = this._maxUid = 0;
-    this._destination = null;
-    this._position = null;
+  _toggleAllTreeItems() {
+    if (!this._optionalContentConfig) {
+      return;
+    }
 
-    if (!this._isValidState(state, true) || resetHistory) {
-      const {
-        hash,
-        page,
-        rotation
-      } = this._parseCurrentHash(true);
+    super._toggleAllTreeItems();
+  }
 
-      if (!hash || reInitialized || resetHistory) {
-        this._pushOrReplaceState(null, true);
+  render({
+    optionalContentConfig,
+    pdfDocument
+  }) {
+    if (this._optionalContentConfig) {
+      this.reset();
+    }
 
-        return;
-      }
+    this._optionalContentConfig = optionalContentConfig || null;
+    this._pdfDocument = pdfDocument || null;
+    const groups = optionalContentConfig?.getOrder();
 
-      this._pushOrReplaceState({
-        hash,
-        page,
-        rotation
-      }, true);
+    if (!groups) {
+      this._dispatchEvent(0);
 
       return;
     }
 
-    const destination = state.destination;
+    const fragment = document.createDocumentFragment(),
+          queue = [{
+      parent: fragment,
+      groups
+    }];
+    let layersCount = 0,
+        hasAnyNesting = false;
 
-    this._updateInternalState(destination, state.uid, true);
+    while (queue.length > 0) {
+      const levelData = queue.shift();
 
-    if (this._uid > this._maxUid) {
-      this._maxUid = this._uid;
-    }
+      for (const groupId of levelData.groups) {
+        const div = document.createElement("div");
+        div.className = "treeItem";
+        const element = document.createElement("a");
+        div.appendChild(element);
 
-    if (destination.rotation !== undefined) {
-      this._initialRotation = destination.rotation;
-    }
+        if (typeof groupId === "object") {
+          hasAnyNesting = true;
 
-    if (destination.dest) {
-      this._initialBookmark = JSON.stringify(destination.dest);
-      this._destination.page = null;
-    } else if (destination.hash) {
-      this._initialBookmark = destination.hash;
-    } else if (destination.page) {
-      this._initialBookmark = `page=${destination.page}`;
-    }
-  }
+          this._addToggleButton(div, groupId);
 
-  reset() {
-    if (this._initialized) {
-      this._pageHide();
+          this._setNestedName(element, groupId);
 
-      this._initialized = false;
+          const itemsDiv = document.createElement("div");
+          itemsDiv.className = "treeItems";
+          div.appendChild(itemsDiv);
+          queue.push({
+            parent: itemsDiv,
+            groups: groupId.order
+          });
+        } else {
+          const group = optionalContentConfig.getGroup(groupId);
+          const input = document.createElement("input");
 
-      this._unbindEvents();
-    }
+          this._bindLink(element, {
+            groupId,
+            input
+          });
 
-    if (this._updateViewareaTimeout) {
-      clearTimeout(this._updateViewareaTimeout);
-      this._updateViewareaTimeout = null;
+          input.type = "checkbox";
+          input.id = groupId;
+          input.checked = group.visible;
+          const label = document.createElement("label");
+          label.setAttribute("for", groupId);
+          label.textContent = this._normalizeTextContent(group.name);
+          element.appendChild(input);
+          element.appendChild(label);
+          layersCount++;
+        }
+
+        levelData.parent.appendChild(div);
+      }
     }
 
-    this._initialBookmark = null;
-    this._initialRotation = null;
+    this._finishRendering(fragment, layersCount, hasAnyNesting);
   }
 
-  push({
-    namedDest = null,
-    explicitDest,
-    pageNumber
-  }) {
-    if (!this._initialized) {
+  async _resetLayers() {
+    if (!this._optionalContentConfig) {
       return;
     }
 
-    if (namedDest && typeof namedDest !== "string") {
-      console.error("PDFHistory.push: " + `"${namedDest}" is not a valid namedDest parameter.`);
-      return;
-    } else if (!Array.isArray(explicitDest)) {
-      console.error("PDFHistory.push: " + `"${explicitDest}" is not a valid explicitDest parameter.`);
-      return;
-    } else if (!(Number.isInteger(pageNumber) && pageNumber > 0 && pageNumber <= 
this.linkService.pagesCount)) {
-      if (pageNumber !== null || this._destination) {
-        console.error("PDFHistory.push: " + `"${pageNumber}" is not a valid pageNumber parameter.`);
-        return;
-      }
-    }
+    const optionalContentConfig = await this._pdfDocument.getOptionalContentConfig();
+    this.eventBus.dispatch("optionalcontentconfig", {
+      source: this,
+      promise: Promise.resolve(optionalContentConfig)
+    });
+    this.render({
+      optionalContentConfig,
+      pdfDocument: this._pdfDocument
+    });
+  }
 
-    const hash = namedDest || JSON.stringify(explicitDest);
+}
 
-    if (!hash) {
-      return;
-    }
+exports.PDFLayerViewer = PDFLayerViewer;
 
-    let forceReplace = false;
+/***/ }),
+/* 19 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 
-    if (this._destination && (isDestHashesEqual(this._destination.hash, hash) || 
isDestArraysEqual(this._destination.dest, explicitDest))) {
-      if (this._destination.page) {
-        return;
-      }
 
-      forceReplace = true;
-    }
 
-    if (this._popStateInProgress && !forceReplace) {
-      return;
-    }
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports.SimpleLinkService = exports.PDFLinkService = void 0;
 
-    this._pushOrReplaceState({
-      dest: explicitDest,
-      hash,
-      page: pageNumber,
-      rotation: this.linkService.rotation
-    }, forceReplace);
+var _ui_utils = __webpack_require__(4);
 
-    if (!this._popStateInProgress) {
-      this._popStateInProgress = true;
-      Promise.resolve().then(() => {
-        this._popStateInProgress = false;
-      });
-    }
+class PDFLinkService {
+  constructor({
+    eventBus,
+    externalLinkTarget = null,
+    externalLinkRel = null,
+    externalLinkEnabled = true,
+    ignoreDestinationZoom = false
+  } = {}) {
+    this.eventBus = eventBus;
+    this.externalLinkTarget = externalLinkTarget;
+    this.externalLinkRel = externalLinkRel;
+    this.externalLinkEnabled = externalLinkEnabled;
+    this._ignoreDestinationZoom = ignoreDestinationZoom;
+    this.baseUrl = null;
+    this.pdfDocument = null;
+    this.pdfViewer = null;
+    this.pdfHistory = null;
+    this._pagesRefCache = null;
   }
 
-  pushCurrentPosition() {
-    if (!this._initialized || this._popStateInProgress) {
-      return;
-    }
-
-    this._tryPushCurrentPosition();
+  setDocument(pdfDocument, baseUrl = null) {
+    this.baseUrl = baseUrl;
+    this.pdfDocument = pdfDocument;
+    this._pagesRefCache = Object.create(null);
   }
 
-  back() {
-    if (!this._initialized || this._popStateInProgress) {
-      return;
-    }
-
-    const state = window.history.state;
-
-    if (this._isValidState(state) && state.uid > 0) {
-      window.history.back();
-    }
+  setViewer(pdfViewer) {
+    this.pdfViewer = pdfViewer;
   }
 
-  forward() {
-    if (!this._initialized || this._popStateInProgress) {
-      return;
-    }
+  setHistory(pdfHistory) {
+    this.pdfHistory = pdfHistory;
+  }
 
-    const state = window.history.state;
+  get pagesCount() {
+    return this.pdfDocument ? this.pdfDocument.numPages : 0;
+  }
 
-    if (this._isValidState(state) && state.uid < this._maxUid) {
-      window.history.forward();
-    }
+  get page() {
+    return this.pdfViewer.currentPageNumber;
   }
 
-  get popStateInProgress() {
-    return this._initialized && (this._popStateInProgress || this._blockHashChange > 0);
+  set page(value) {
+    this.pdfViewer.currentPageNumber = value;
   }
 
-  get initialBookmark() {
-    return this._initialized ? this._initialBookmark : null;
+  get rotation() {
+    return this.pdfViewer.pagesRotation;
   }
 
-  get initialRotation() {
-    return this._initialized ? this._initialRotation : null;
+  set rotation(value) {
+    this.pdfViewer.pagesRotation = value;
   }
 
-  _pushOrReplaceState(destination, forceReplace = false) {
-    const shouldReplace = forceReplace || !this._destination;
-    const newState = {
-      fingerprint: this._fingerprint,
-      uid: shouldReplace ? this._uid : this._uid + 1,
-      destination
-    };
+  navigateTo(dest) {
+    console.error("Deprecated method: `navigateTo`, use `goToDestination` instead.");
+    this.goToDestination(dest);
+  }
 
-    this._updateInternalState(destination, newState.uid);
+  _goToDestinationHelper(rawDest, namedDest = null, explicitDest) {
+    const destRef = explicitDest[0];
+    let pageNumber;
 
-    let newUrl;
+    if (destRef instanceof Object) {
+      pageNumber = this._cachedPageNumber(destRef);
 
-    if (this._updateUrl && destination && destination.hash) {
-      const baseUrl = document.location.href.split("#")[0];
+      if (pageNumber === null) {
+        this.pdfDocument.getPageIndex(destRef).then(pageIndex => {
+          this.cachePageRef(pageIndex + 1, destRef);
 
-      if (!baseUrl.startsWith("file://")) {
-        newUrl = `${baseUrl}#${destination.hash}`;
+          this._goToDestinationHelper(rawDest, namedDest, explicitDest);
+        }).catch(() => {
+          console.error(`PDFLinkService._goToDestinationHelper: "${destRef}" is not ` + `a valid page 
reference, for dest="${rawDest}".`);
+        });
+        return;
       }
+    } else if (Number.isInteger(destRef)) {
+      pageNumber = destRef + 1;
+    } else {
+      console.error(`PDFLinkService._goToDestinationHelper: "${destRef}" is not ` + `a valid destination 
reference, for dest="${rawDest}".`);
+      return;
     }
 
-    // FIXME: This currently breaks Epiphany due to rewriting history with baseUrl
-    return;
-    if (shouldReplace) {
-      window.history.replaceState(newState, "", newUrl);
-    } else {
-      this._maxUid = this._uid;
-      window.history.pushState(newState, "", newUrl);
+    if (!pageNumber || pageNumber < 1 || pageNumber > this.pagesCount) {
+      console.error(`PDFLinkService._goToDestinationHelper: "${pageNumber}" is not ` + `a valid page number, 
for dest="${rawDest}".`);
+      return;
+    }
+
+    if (this.pdfHistory) {
+      this.pdfHistory.pushCurrentPosition();
+      this.pdfHistory.push({
+        namedDest,
+        explicitDest,
+        pageNumber
+      });
     }
+
+    this.pdfViewer.scrollPageIntoView({
+      pageNumber,
+      destArray: explicitDest,
+      ignoreDestinationZoom: this._ignoreDestinationZoom
+    });
   }
 
-  _tryPushCurrentPosition(temporary = false) {
-    if (!this._position) {
+  async goToDestination(dest) {
+    if (!this.pdfDocument) {
       return;
     }
 
-    let position = this._position;
+    let namedDest, explicitDest;
 
-    if (temporary) {
-      position = Object.assign(Object.create(null), this._position);
-      position.temporary = true;
+    if (typeof dest === "string") {
+      namedDest = dest;
+      explicitDest = await this.pdfDocument.getDestination(dest);
+    } else {
+      namedDest = null;
+      explicitDest = await dest;
     }
 
-    if (!this._destination) {
-      this._pushOrReplaceState(position);
-
+    if (!Array.isArray(explicitDest)) {
+      console.error(`PDFLinkService.goToDestination: "${explicitDest}" is not ` + `a valid destination 
array, for dest="${dest}".`);
       return;
     }
 
-    if (this._destination.temporary) {
-      this._pushOrReplaceState(position, true);
+    this._goToDestinationHelper(dest, namedDest, explicitDest);
+  }
 
+  goToPage(val) {
+    if (!this.pdfDocument) {
       return;
     }
 
-    if (this._destination.hash === position.hash) {
+    const pageNumber = typeof val === "string" && this.pdfViewer.pageLabelToPageNumber(val) || val | 0;
+
+    if (!(Number.isInteger(pageNumber) && pageNumber > 0 && pageNumber <= this.pagesCount)) {
+      console.error(`PDFLinkService.goToPage: "${val}" is not a valid page.`);
       return;
     }
 
-    if (!this._destination.page && (POSITION_UPDATED_THRESHOLD <= 0 || this._numPositionUpdates <= 
POSITION_UPDATED_THRESHOLD)) {
-      return;
+    if (this.pdfHistory) {
+      this.pdfHistory.pushCurrentPosition();
+      this.pdfHistory.pushPage(pageNumber);
     }
 
-    let forceReplace = false;
+    this.pdfViewer.scrollPageIntoView({
+      pageNumber
+    });
+  }
 
-    if (this._destination.page >= position.first && this._destination.page <= position.page) {
-      if (this._destination.dest || !this._destination.first) {
-        return;
+  getDestinationHash(dest) {
+    if (typeof dest === "string") {
+      if (dest.length > 0) {
+        return this.getAnchorUrl("#" + escape(dest));
       }
+    } else if (Array.isArray(dest)) {
+      const str = JSON.stringify(dest);
 
-      forceReplace = true;
+      if (str.length > 0) {
+        return this.getAnchorUrl("#" + escape(str));
+      }
     }
 
-    this._pushOrReplaceState(position, forceReplace);
+    return this.getAnchorUrl("");
   }
 
-  _isValidState(state, checkReload = false) {
-    if (!state) {
-      return false;
+  getAnchorUrl(anchor) {
+    return (this.baseUrl || "") + anchor;
+  }
+
+  setHash(hash) {
+    if (!this.pdfDocument) {
+      return;
     }
 
-    if (state.fingerprint !== this._fingerprint) {
-      if (checkReload) {
-        if (typeof state.fingerprint !== "string" || state.fingerprint.length !== this._fingerprint.length) {
-          return false;
+    let pageNumber, dest;
+
+    if (hash.includes("=")) {
+      const params = (0, _ui_utils.parseQueryString)(hash);
+
+      if ("search" in params) {
+        this.eventBus.dispatch("findfromurlhash", {
+          source: this,
+          query: params.search.replace(/"/g, ""),
+          phraseSearch: params.phrase === "true"
+        });
+      }
+
+      if ("page" in params) {
+        pageNumber = params.page | 0 || 1;
+      }
+
+      if ("zoom" in params) {
+        const zoomArgs = params.zoom.split(",");
+        const zoomArg = zoomArgs[0];
+        const zoomArgNumber = parseFloat(zoomArg);
+
+        if (!zoomArg.includes("Fit")) {
+          dest = [null, {
+            name: "XYZ"
+          }, zoomArgs.length > 1 ? zoomArgs[1] | 0 : null, zoomArgs.length > 2 ? zoomArgs[2] | 0 : null, 
zoomArgNumber ? zoomArgNumber / 100 : zoomArg];
+        } else {
+          if (zoomArg === "Fit" || zoomArg === "FitB") {
+            dest = [null, {
+              name: zoomArg
+            }];
+          } else if (zoomArg === "FitH" || zoomArg === "FitBH" || zoomArg === "FitV" || zoomArg === "FitBV") 
{
+            dest = [null, {
+              name: zoomArg
+            }, zoomArgs.length > 1 ? zoomArgs[1] | 0 : null];
+          } else if (zoomArg === "FitR") {
+            if (zoomArgs.length !== 5) {
+              console.error('PDFLinkService.setHash: Not enough parameters for "FitR".');
+            } else {
+              dest = [null, {
+                name: zoomArg
+              }, zoomArgs[1] | 0, zoomArgs[2] | 0, zoomArgs[3] | 0, zoomArgs[4] | 0];
+            }
+          } else {
+            console.error(`PDFLinkService.setHash: "${zoomArg}" is not ` + "a valid zoom value.");
+          }
         }
+      }
 
-        const [perfEntry] = performance.getEntriesByType("navigation");
+      if (dest) {
+        this.pdfViewer.scrollPageIntoView({
+          pageNumber: pageNumber || this.page,
+          destArray: dest,
+          allowNegativeOffset: true
+        });
+      } else if (pageNumber) {
+        this.page = pageNumber;
+      }
 
-        if (!perfEntry || perfEntry.type !== "reload") {
-          return false;
+      if ("pagemode" in params) {
+        this.eventBus.dispatch("pagemode", {
+          source: this,
+          mode: params.pagemode
+        });
+      }
+
+      if ("nameddest" in params) {
+        this.goToDestination(params.nameddest);
+      }
+    } else {
+      dest = unescape(hash);
+
+      try {
+        dest = JSON.parse(dest);
+
+        if (!Array.isArray(dest)) {
+          dest = dest.toString();
         }
-      } else {
-        return false;
+      } catch (ex) {}
+
+      if (typeof dest === "string" || isValidExplicitDestination(dest)) {
+        this.goToDestination(dest);
+        return;
       }
-    }
 
-    if (!Number.isInteger(state.uid) || state.uid < 0) {
-      return false;
+      console.error(`PDFLinkService.setHash: "${unescape(hash)}" is not ` + "a valid destination.");
     }
+  }
 
-    if (state.destination === null || typeof state.destination !== "object") {
-      return false;
-    }
+  executeNamedAction(action) {
+    switch (action) {
+      case "GoBack":
+        if (this.pdfHistory) {
+          this.pdfHistory.back();
+        }
 
-    return true;
-  }
+        break;
 
-  _updateInternalState(destination, uid, removeTemporary = false) {
-    if (this._updateViewareaTimeout) {
-      clearTimeout(this._updateViewareaTimeout);
-      this._updateViewareaTimeout = null;
-    }
+      case "GoForward":
+        if (this.pdfHistory) {
+          this.pdfHistory.forward();
+        }
 
-    if (removeTemporary && destination && destination.temporary) {
-      delete destination.temporary;
-    }
+        break;
 
-    this._destination = destination;
-    this._uid = uid;
-    this._numPositionUpdates = 0;
-  }
+      case "NextPage":
+        this.pdfViewer.nextPage();
+        break;
 
-  _parseCurrentHash(checkNameddest = false) {
-    const hash = unescape(getCurrentHash()).substring(1);
-    const params = (0, _ui_utils.parseQueryString)(hash);
-    const nameddest = params.nameddest || "";
-    let page = params.page | 0;
+      case "PrevPage":
+        this.pdfViewer.previousPage();
+        break;
 
-    if (!(Number.isInteger(page) && page > 0 && page <= this.linkService.pagesCount) || checkNameddest && 
nameddest.length > 0) {
-      page = null;
-    }
+      case "LastPage":
+        this.page = this.pagesCount;
+        break;
 
-    return {
-      hash,
-      page,
-      rotation: this.linkService.rotation
-    };
-  }
+      case "FirstPage":
+        this.page = 1;
+        break;
 
-  _updateViewarea({
-    location
-  }) {
-    if (this._updateViewareaTimeout) {
-      clearTimeout(this._updateViewareaTimeout);
-      this._updateViewareaTimeout = null;
+      default:
+        break;
     }
 
-    this._position = {
-      hash: this._isViewerInPresentationMode ? `page=${location.pageNumber}` : 
location.pdfOpenParams.substring(1),
-      page: this.linkService.page,
-      first: location.pageNumber,
-      rotation: location.rotation
-    };
+    this.eventBus.dispatch("namedaction", {
+      source: this,
+      action
+    });
+  }
 
-    if (this._popStateInProgress) {
+  cachePageRef(pageNum, pageRef) {
+    if (!pageRef) {
       return;
     }
 
-    if (POSITION_UPDATED_THRESHOLD > 0 && this._isPagesLoaded && this._destination && 
!this._destination.page) {
-      this._numPositionUpdates++;
-    }
+    const refStr = pageRef.gen === 0 ? `${pageRef.num}R` : `${pageRef.num}R${pageRef.gen}`;
+    this._pagesRefCache[refStr] = pageNum;
+  }
 
-    if (UPDATE_VIEWAREA_TIMEOUT > 0) {
-      this._updateViewareaTimeout = setTimeout(() => {
-        if (!this._popStateInProgress) {
-          this._tryPushCurrentPosition(true);
-        }
+  _cachedPageNumber(pageRef) {
+    const refStr = pageRef.gen === 0 ? `${pageRef.num}R` : `${pageRef.num}R${pageRef.gen}`;
+    return this._pagesRefCache?.[refStr] || null;
+  }
 
-        this._updateViewareaTimeout = null;
-      }, UPDATE_VIEWAREA_TIMEOUT);
-    }
+  isPageVisible(pageNumber) {
+    return this.pdfViewer.isPageVisible(pageNumber);
   }
 
-  _popState({
-    state
-  }) {
-    const newHash = getCurrentHash(),
-          hashChanged = this._currentHash !== newHash;
-    this._currentHash = newHash;
+  isPageCached(pageNumber) {
+    return this.pdfViewer.isPageCached(pageNumber);
+  }
 
-    if (!state) {
-      this._uid++;
+}
 
-      const {
-        hash,
-        page,
-        rotation
-      } = this._parseCurrentHash();
+exports.PDFLinkService = PDFLinkService;
 
-      this._pushOrReplaceState({
-        hash,
-        page,
-        rotation
-      }, true);
+function isValidExplicitDestination(dest) {
+  if (!Array.isArray(dest)) {
+    return false;
+  }
 
-      return;
-    }
+  const destLength = dest.length;
 
-    if (!this._isValidState(state)) {
-      return;
-    }
+  if (destLength < 2) {
+    return false;
+  }
 
-    this._popStateInProgress = true;
+  const page = dest[0];
 
-    if (hashChanged) {
-      this._blockHashChange++;
-      (0, _ui_utils.waitOnEventOrTimeout)({
-        target: window,
-        name: "hashchange",
-        delay: HASH_CHANGE_TIMEOUT
-      }).then(() => {
-        this._blockHashChange--;
-      });
-    }
+  if (!(typeof page === "object" && Number.isInteger(page.num) && Number.isInteger(page.gen)) && 
!(Number.isInteger(page) && page >= 0)) {
+    return false;
+  }
 
-    const destination = state.destination;
+  const zoom = dest[1];
 
-    this._updateInternalState(destination, state.uid, true);
+  if (!(typeof zoom === "object" && typeof zoom.name === "string")) {
+    return false;
+  }
 
-    if (this._uid > this._maxUid) {
-      this._maxUid = this._uid;
-    }
+  let allowNull = true;
 
-    if ((0, _ui_utils.isValidRotation)(destination.rotation)) {
-      this.linkService.rotation = destination.rotation;
-    }
+  switch (zoom.name) {
+    case "XYZ":
+      if (destLength !== 5) {
+        return false;
+      }
 
-    if (destination.dest) {
-      this.linkService.navigateTo(destination.dest);
-    } else if (destination.hash) {
-      this.linkService.setHash(destination.hash);
-    } else if (destination.page) {
-      this.linkService.page = destination.page;
-    }
+      break;
 
-    Promise.resolve().then(() => {
-      this._popStateInProgress = false;
-    });
-  }
+    case "Fit":
+    case "FitB":
+      return destLength === 2;
 
-  _pageHide() {
-    if (!this._destination || this._destination.temporary) {
-      this._tryPushCurrentPosition();
-    }
-  }
+    case "FitH":
+    case "FitBH":
+    case "FitV":
+    case "FitBV":
+      if (destLength !== 3) {
+        return false;
+      }
 
-  _bindEvents() {
-    if (this._boundEvents) {
-      return;
-    }
+      break;
 
-    this._boundEvents = {
-      updateViewarea: this._updateViewarea.bind(this),
-      popState: this._popState.bind(this),
-      pageHide: this._pageHide.bind(this)
-    };
+    case "FitR":
+      if (destLength !== 6) {
+        return false;
+      }
 
-    this.eventBus._on("updateviewarea", this._boundEvents.updateViewarea);
+      allowNull = false;
+      break;
 
-    window.addEventListener("popstate", this._boundEvents.popState);
-    window.addEventListener("pagehide", this._boundEvents.pageHide);
+    default:
+      return false;
   }
 
-  _unbindEvents() {
-    if (!this._boundEvents) {
-      return;
-    }
-
-    this.eventBus._off("updateviewarea", this._boundEvents.updateViewarea);
+  for (let i = 2; i < destLength; i++) {
+    const param = dest[i];
 
-    window.removeEventListener("popstate", this._boundEvents.popState);
-    window.removeEventListener("pagehide", this._boundEvents.pageHide);
-    this._boundEvents = null;
+    if (!(typeof param === "number" || allowNull && param === null)) {
+      return false;
+    }
   }
 
+  return true;
 }
 
-exports.PDFHistory = PDFHistory;
+class SimpleLinkService {
+  constructor() {
+    this.externalLinkTarget = null;
+    this.externalLinkRel = null;
+    this.externalLinkEnabled = true;
+    this._ignoreDestinationZoom = false;
+  }
 
-function isDestHashesEqual(destHash, pushHash) {
-  if (typeof destHash !== "string" || typeof pushHash !== "string") {
-    return false;
+  get pagesCount() {
+    return 0;
   }
 
-  if (destHash === pushHash) {
-    return true;
+  get page() {
+    return 0;
   }
 
-  const {
-    nameddest
-  } = (0, _ui_utils.parseQueryString)(destHash);
+  set page(value) {}
 
-  if (nameddest === pushHash) {
-    return true;
+  get rotation() {
+    return 0;
   }
 
-  return false;
-}
+  set rotation(value) {}
 
-function isDestArraysEqual(firstDest, secondDest) {
-  function isEntryEqual(first, second) {
-    if (typeof first !== typeof second) {
-      return false;
-    }
+  async goToDestination(dest) {}
 
-    if (Array.isArray(first) || Array.isArray(second)) {
-      return false;
-    }
+  goToPage(val) {}
 
-    if (first !== null && typeof first === "object" && second !== null) {
-      if (Object.keys(first).length !== Object.keys(second).length) {
-        return false;
-      }
+  getDestinationHash(dest) {
+    return "#";
+  }
 
-      for (const key in first) {
-        if (!isEntryEqual(first[key], second[key])) {
-          return false;
-        }
-      }
+  getAnchorUrl(hash) {
+    return "#";
+  }
 
-      return true;
-    }
+  setHash(hash) {}
 
-    return first === second || Number.isNaN(first) && Number.isNaN(second);
-  }
+  executeNamedAction(action) {}
 
-  if (!(Array.isArray(firstDest) && Array.isArray(secondDest))) {
-    return false;
-  }
+  cachePageRef(pageNum, pageRef) {}
 
-  if (firstDest.length !== secondDest.length) {
-    return false;
+  isPageVisible(pageNumber) {
+    return true;
   }
 
-  for (let i = 0, ii = firstDest.length; i < ii; i++) {
-    if (!isEntryEqual(firstDest[i], secondDest[i])) {
-      return false;
-    }
+  isPageCached(pageNumber) {
+    return true;
   }
 
-  return true;
 }
 
+exports.SimpleLinkService = SimpleLinkService;
+
 /***/ }),
-/* 19 */
-/***/ (function(module, exports, __webpack_require__) {
+/* 20 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
-exports.PDFLayerViewer = void 0;
+}));
+exports.PDFOutlineViewer = void 0;
+
+var _pdfjsLib = __webpack_require__(5);
 
-var _base_tree_viewer = __webpack_require__(13);
+var _base_tree_viewer = __webpack_require__(12);
 
-class PDFLayerViewer extends _base_tree_viewer.BaseTreeViewer {
+var _ui_utils = __webpack_require__(4);
+
+class PDFOutlineViewer extends _base_tree_viewer.BaseTreeViewer {
   constructor(options) {
     super(options);
-    this.l10n = options.l10n;
+    this.linkService = options.linkService;
 
-    this.eventBus._on("resetlayers", this._resetLayers.bind(this));
+    this.eventBus._on("toggleoutlinetree", this._toggleAllTreeItems.bind(this));
 
-    this.eventBus._on("togglelayerstree", this._toggleAllTreeItems.bind(this));
+    this.eventBus._on("currentoutlineitem", this._currentOutlineItem.bind(this));
+
+    this.eventBus._on("pagechanging", evt => {
+      this._currentPageNumber = evt.pageNumber;
+    });
+
+    this.eventBus._on("pagesloaded", evt => {
+      this._isPagesLoaded = !!evt.pagesCount;
+    });
+
+    this.eventBus._on("sidebarviewchanged", evt => {
+      this._sidebarView = evt.view;
+    });
   }
 
   reset() {
     super.reset();
-    this._optionalContentConfig = null;
-    this._pdfDocument = null;
+    this._outline = null;
+    this._pageNumberToDestHashCapability = null;
+    this._currentPageNumber = 1;
+    this._isPagesLoaded = false;
   }
 
-  _dispatchEvent(layersCount) {
-    this.eventBus.dispatch("layersloaded", {
+  _dispatchEvent(outlineCount) {
+    this.eventBus.dispatch("outlineloaded", {
       source: this,
-      layersCount
+      outlineCount,
+      enableCurrentOutlineItemButton: outlineCount > 0 && !this._pdfDocument?.loadingParams.disableAutoFetch
     });
   }
 
   _bindLink(element, {
-    groupId,
-    input
+    url,
+    newWindow,
+    dest
   }) {
-    const setVisibility = () => {
-      this._optionalContentConfig.setVisibility(groupId, input.checked);
+    const {
+      linkService
+    } = this;
 
-      this.eventBus.dispatch("optionalcontentconfig", {
-        source: this,
-        promise: Promise.resolve(this._optionalContentConfig)
+    if (url) {
+      (0, _pdfjsLib.addLinkAttributes)(element, {
+        url,
+        target: newWindow ? _pdfjsLib.LinkTarget.BLANK : linkService.externalLinkTarget,
+        rel: linkService.externalLinkRel,
+        enabled: linkService.externalLinkEnabled
       });
-    };
+      return;
+    }
+
+    element.href = linkService.getDestinationHash(dest);
 
     element.onclick = evt => {
-      if (evt.target === input) {
-        setVisibility();
-        return true;
-      } else if (evt.target !== element) {
-        return true;
+      this._updateCurrentTreeItem(evt.target.parentNode);
+
+      if (dest) {
+        linkService.goToDestination(dest);
       }
 
-      input.checked = !input.checked;
-      setVisibility();
       return false;
     };
   }
 
-  async _setNestedName(element, {
-    name = null
+  _setStyles(element, {
+    bold,
+    italic
   }) {
-    if (typeof name === "string") {
-      element.textContent = this._normalizeTextContent(name);
-      return;
+    if (bold) {
+      element.style.fontWeight = "bold";
     }
 
-    element.textContent = await this.l10n.get("additional_layers", null, "Additional Layers");
-    element.style.fontStyle = "italic";
+    if (italic) {
+      element.style.fontStyle = "italic";
+    }
   }
 
   _addToggleButton(div, {
-    name = null
+    count,
+    items
   }) {
-    super._addToggleButton(div, name === null);
+    let hidden = false;
+
+    if (count < 0) {
+      let totalCount = items.length;
+
+      if (totalCount > 0) {
+        const queue = [...items];
+
+        while (queue.length > 0) {
+          const {
+            count: nestedCount,
+            items: nestedItems
+          } = queue.shift();
+
+          if (nestedCount > 0 && nestedItems.length > 0) {
+            totalCount += nestedItems.length;
+            queue.push(...nestedItems);
+          }
+        }
+      }
+
+      if (Math.abs(count) === totalCount) {
+        hidden = true;
+      }
+    }
+
+    super._addToggleButton(div, hidden);
   }
 
   _toggleAllTreeItems() {
-    if (!this._optionalContentConfig) {
+    if (!this._outline) {
       return;
     }
 
@@ -7297,1144 +7527,1368 @@ class PDFLayerViewer extends _base_tree_viewer.BaseTreeViewer {
   }
 
   render({
-    optionalContentConfig,
+    outline,
     pdfDocument
   }) {
-    if (this._optionalContentConfig) {
+    if (this._outline) {
       this.reset();
     }
 
-    this._optionalContentConfig = optionalContentConfig || null;
+    this._outline = outline || null;
     this._pdfDocument = pdfDocument || null;
-    const groups = optionalContentConfig && optionalContentConfig.getOrder();
 
-    if (!groups) {
+    if (!outline) {
       this._dispatchEvent(0);
 
       return;
     }
 
-    const fragment = document.createDocumentFragment(),
-          queue = [{
+    const fragment = document.createDocumentFragment();
+    const queue = [{
       parent: fragment,
-      groups
+      items: outline
     }];
-    let layersCount = 0,
+    let outlineCount = 0,
         hasAnyNesting = false;
 
     while (queue.length > 0) {
       const levelData = queue.shift();
 
-      for (const groupId of levelData.groups) {
+      for (const item of levelData.items) {
         const div = document.createElement("div");
         div.className = "treeItem";
         const element = document.createElement("a");
+
+        this._bindLink(element, item);
+
+        this._setStyles(element, item);
+
+        element.textContent = this._normalizeTextContent(item.title);
         div.appendChild(element);
 
-        if (typeof groupId === "object") {
+        if (item.items.length > 0) {
           hasAnyNesting = true;
 
-          this._addToggleButton(div, groupId);
-
-          this._setNestedName(element, groupId);
+          this._addToggleButton(div, item);
 
           const itemsDiv = document.createElement("div");
           itemsDiv.className = "treeItems";
           div.appendChild(itemsDiv);
           queue.push({
             parent: itemsDiv,
-            groups: groupId.order
-          });
-        } else {
-          const group = optionalContentConfig.getGroup(groupId);
-          const input = document.createElement("input");
-
-          this._bindLink(element, {
-            groupId,
-            input
+            items: item.items
           });
-
-          input.type = "checkbox";
-          input.id = groupId;
-          input.checked = group.visible;
-          const label = document.createElement("label");
-          label.setAttribute("for", groupId);
-          label.textContent = this._normalizeTextContent(group.name);
-          element.appendChild(input);
-          element.appendChild(label);
-          layersCount++;
         }
 
         levelData.parent.appendChild(div);
+        outlineCount++;
       }
     }
 
-    if (hasAnyNesting) {
-      this.container.classList.add("treeWithDeepNesting");
-      this._lastToggleIsShow = fragment.querySelectorAll(".treeItemsHidden").length === 0;
+    this._finishRendering(fragment, outlineCount, hasAnyNesting);
+  }
+
+  async _currentOutlineItem() {
+    if (!this._isPagesLoaded) {
+      throw new Error("_currentOutlineItem: All pages have not been loaded.");
     }
 
-    this.container.appendChild(fragment);
+    if (!this._outline || !this._pdfDocument) {
+      return;
+    }
 
-    this._dispatchEvent(layersCount);
-  }
+    const pageNumberToDestHash = await this._getPageNumberToDestHash(this._pdfDocument);
 
-  async _resetLayers() {
-    if (!this._optionalContentConfig) {
+    if (!pageNumberToDestHash) {
       return;
     }
 
-    const optionalContentConfig = await this._pdfDocument.getOptionalContentConfig();
-    this.eventBus.dispatch("optionalcontentconfig", {
-      source: this,
-      promise: Promise.resolve(optionalContentConfig)
-    });
-    this.render({
-      optionalContentConfig,
-      pdfDocument: this._pdfDocument
-    });
+    this._updateCurrentTreeItem(null);
+
+    if (this._sidebarView !== _ui_utils.SidebarView.OUTLINE) {
+      return;
+    }
+
+    for (let i = this._currentPageNumber; i > 0; i--) {
+      const destHash = pageNumberToDestHash.get(i);
+
+      if (!destHash) {
+        continue;
+      }
+
+      const linkElement = this.container.querySelector(`a[href="${destHash}"]`);
+
+      if (!linkElement) {
+        continue;
+      }
+
+      this._scrollToCurrentTreeItem(linkElement.parentNode);
+
+      break;
+    }
+  }
+
+  async _getPageNumberToDestHash(pdfDocument) {
+    if (this._pageNumberToDestHashCapability) {
+      return this._pageNumberToDestHashCapability.promise;
+    }
+
+    this._pageNumberToDestHashCapability = (0, _pdfjsLib.createPromiseCapability)();
+    const pageNumberToDestHash = new Map(),
+          pageNumberNesting = new Map();
+    const queue = [{
+      nesting: 0,
+      items: this._outline
+    }];
+
+    while (queue.length > 0) {
+      const levelData = queue.shift(),
+            currentNesting = levelData.nesting;
+
+      for (const {
+        dest,
+        items
+      } of levelData.items) {
+        let explicitDest, pageNumber;
+
+        if (typeof dest === "string") {
+          explicitDest = await pdfDocument.getDestination(dest);
+
+          if (pdfDocument !== this._pdfDocument) {
+            return null;
+          }
+        } else {
+          explicitDest = dest;
+        }
+
+        if (Array.isArray(explicitDest)) {
+          const [destRef] = explicitDest;
+
+          if (destRef instanceof Object) {
+            pageNumber = this.linkService._cachedPageNumber(destRef);
+
+            if (!pageNumber) {
+              try {
+                pageNumber = (await pdfDocument.getPageIndex(destRef)) + 1;
+
+                if (pdfDocument !== this._pdfDocument) {
+                  return null;
+                }
+
+                this.linkService.cachePageRef(pageNumber, destRef);
+              } catch (ex) {}
+            }
+          } else if (Number.isInteger(destRef)) {
+            pageNumber = destRef + 1;
+          }
+
+          if (Number.isInteger(pageNumber) && (!pageNumberToDestHash.has(pageNumber) || currentNesting > 
pageNumberNesting.get(pageNumber))) {
+            const destHash = this.linkService.getDestinationHash(dest);
+            pageNumberToDestHash.set(pageNumber, destHash);
+            pageNumberNesting.set(pageNumber, currentNesting);
+          }
+        }
+
+        if (items.length > 0) {
+          queue.push({
+            nesting: currentNesting + 1,
+            items
+          });
+        }
+      }
+    }
+
+    this._pageNumberToDestHashCapability.resolve(pageNumberToDestHash.size > 0 ? pageNumberToDestHash : 
null);
+
+    return this._pageNumberToDestHashCapability.promise;
   }
 
 }
 
-exports.PDFLayerViewer = PDFLayerViewer;
+exports.PDFOutlineViewer = PDFOutlineViewer;
 
 /***/ }),
-/* 20 */
-/***/ (function(module, exports, __webpack_require__) {
+/* 21 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports.PDFPresentationMode = void 0;
+
+var _ui_utils = __webpack_require__(4);
+
+const DELAY_BEFORE_RESETTING_SWITCH_IN_PROGRESS = 1500;
+const DELAY_BEFORE_HIDING_CONTROLS = 3000;
+const ACTIVE_SELECTOR = "pdfPresentationMode";
+const CONTROLS_SELECTOR = "pdfPresentationModeControls";
+const MOUSE_SCROLL_COOLDOWN_TIME = 50;
+const PAGE_SWITCH_THRESHOLD = 0.1;
+const SWIPE_MIN_DISTANCE_THRESHOLD = 50;
+const SWIPE_ANGLE_THRESHOLD = Math.PI / 6;
+
+class PDFPresentationMode {
+  constructor({
+    container,
+    pdfViewer,
+    eventBus
+  }) {
+    this.container = container;
+    this.pdfViewer = pdfViewer;
+    this.eventBus = eventBus;
+    this.active = false;
+    this.args = null;
+    this.contextMenuOpen = false;
+    this.mouseScrollTimeStamp = 0;
+    this.mouseScrollDelta = 0;
+    this.touchSwipeState = null;
+  }
+
+  request() {
+    if (this.switchInProgress || this.active || !this.pdfViewer.pagesCount) {
+      return false;
+    }
+
+    this._addFullscreenChangeListeners();
+
+    this._setSwitchInProgress();
+
+    this._notifyStateChange();
+
+    if (this.container.requestFullscreen) {
+      this.container.requestFullscreen();
+    } else if (this.container.mozRequestFullScreen) {
+      this.container.mozRequestFullScreen();
+    } else if (this.container.webkitRequestFullscreen) {
+      this.container.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT);
+    } else {
+      return false;
+    }
+
+    this.args = {
+      page: this.pdfViewer.currentPageNumber,
+      previousScale: this.pdfViewer.currentScaleValue
+    };
+    return true;
+  }
+
+  _mouseWheel(evt) {
+    if (!this.active) {
+      return;
+    }
+
+    evt.preventDefault();
+    const delta = (0, _ui_utils.normalizeWheelEventDelta)(evt);
+    const currentTime = Date.now();
+    const storedTime = this.mouseScrollTimeStamp;
+
+    if (currentTime > storedTime && currentTime - storedTime < MOUSE_SCROLL_COOLDOWN_TIME) {
+      return;
+    }
+
+    if (this.mouseScrollDelta > 0 && delta < 0 || this.mouseScrollDelta < 0 && delta > 0) {
+      this._resetMouseScrollState();
+    }
 
-"use strict";
+    this.mouseScrollDelta += delta;
 
+    if (Math.abs(this.mouseScrollDelta) >= PAGE_SWITCH_THRESHOLD) {
+      const totalDelta = this.mouseScrollDelta;
 
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.SimpleLinkService = exports.PDFLinkService = void 0;
+      this._resetMouseScrollState();
 
-var _ui_utils = __webpack_require__(2);
+      const success = totalDelta > 0 ? this.pdfViewer.previousPage() : this.pdfViewer.nextPage();
 
-class PDFLinkService {
-  constructor({
-    eventBus,
-    externalLinkTarget = null,
-    externalLinkRel = null,
-    externalLinkEnabled = true,
-    ignoreDestinationZoom = false
-  } = {}) {
-    this.eventBus = eventBus;
-    this.externalLinkTarget = externalLinkTarget;
-    this.externalLinkRel = externalLinkRel;
-    this.externalLinkEnabled = externalLinkEnabled;
-    this._ignoreDestinationZoom = ignoreDestinationZoom;
-    this.baseUrl = null;
-    this.pdfDocument = null;
-    this.pdfViewer = null;
-    this.pdfHistory = null;
-    this._pagesRefCache = null;
+      if (success) {
+        this.mouseScrollTimeStamp = currentTime;
+      }
+    }
   }
 
-  setDocument(pdfDocument, baseUrl = null) {
-    this.baseUrl = baseUrl;
-    this.pdfDocument = pdfDocument;
-    this._pagesRefCache = Object.create(null);
+  get isFullscreen() {
+    return !!(document.fullscreenElement || document.mozFullScreen || document.webkitIsFullScreen);
   }
 
-  setViewer(pdfViewer) {
-    this.pdfViewer = pdfViewer;
-  }
+  _notifyStateChange() {
+    let state = _ui_utils.PresentationModeState.NORMAL;
 
-  setHistory(pdfHistory) {
-    this.pdfHistory = pdfHistory;
-  }
+    if (this.switchInProgress) {
+      state = _ui_utils.PresentationModeState.CHANGING;
+    } else if (this.active) {
+      state = _ui_utils.PresentationModeState.FULLSCREEN;
+    }
 
-  get pagesCount() {
-    return this.pdfDocument ? this.pdfDocument.numPages : 0;
-  }
+    this.eventBus.dispatch("presentationmodechanged", {
+      source: this,
+      state,
 
-  get page() {
-    return this.pdfViewer.currentPageNumber;
-  }
+      get active() {
+        throw new Error("Deprecated parameter: `active`, please use `state` instead.");
+      },
 
-  set page(value) {
-    this.pdfViewer.currentPageNumber = value;
+      get switchInProgress() {
+        throw new Error("Deprecated parameter: `switchInProgress`, please use `state` instead.");
+      }
+
+    });
   }
 
-  get rotation() {
-    return this.pdfViewer.pagesRotation;
+  _setSwitchInProgress() {
+    if (this.switchInProgress) {
+      clearTimeout(this.switchInProgress);
+    }
+
+    this.switchInProgress = setTimeout(() => {
+      this._removeFullscreenChangeListeners();
+
+      delete this.switchInProgress;
+
+      this._notifyStateChange();
+    }, DELAY_BEFORE_RESETTING_SWITCH_IN_PROGRESS);
   }
 
-  set rotation(value) {
-    this.pdfViewer.pagesRotation = value;
+  _resetSwitchInProgress() {
+    if (this.switchInProgress) {
+      clearTimeout(this.switchInProgress);
+      delete this.switchInProgress;
+    }
   }
 
-  navigateTo(dest) {
-    const goToDestination = ({
-      namedDest,
-      explicitDest
-    }) => {
-      const destRef = explicitDest[0];
-      let pageNumber;
-
-      if (destRef instanceof Object) {
-        pageNumber = this._cachedPageNumber(destRef);
-
-        if (pageNumber === null) {
-          this.pdfDocument.getPageIndex(destRef).then(pageIndex => {
-            this.cachePageRef(pageIndex + 1, destRef);
-            goToDestination({
-              namedDest,
-              explicitDest
-            });
-          }).catch(() => {
-            console.error(`PDFLinkService.navigateTo: "${destRef}" is not ` + `a valid page reference, for 
dest="${dest}".`);
-          });
-          return;
-        }
-      } else if (Number.isInteger(destRef)) {
-        pageNumber = destRef + 1;
-      } else {
-        console.error(`PDFLinkService.navigateTo: "${destRef}" is not ` + `a valid destination reference, 
for dest="${dest}".`);
-        return;
-      }
+  _enter() {
+    this.active = true;
 
-      if (!pageNumber || pageNumber < 1 || pageNumber > this.pagesCount) {
-        console.error(`PDFLinkService.navigateTo: "${pageNumber}" is not ` + `a valid page number, for 
dest="${dest}".`);
-        return;
-      }
+    this._resetSwitchInProgress();
 
-      if (this.pdfHistory) {
-        this.pdfHistory.pushCurrentPosition();
-        this.pdfHistory.push({
-          namedDest,
-          explicitDest,
-          pageNumber
-        });
-      }
+    this._notifyStateChange();
 
-      this.pdfViewer.scrollPageIntoView({
-        pageNumber,
-        destArray: explicitDest,
-        ignoreDestinationZoom: this._ignoreDestinationZoom
-      });
-    };
+    this.container.classList.add(ACTIVE_SELECTOR);
+    setTimeout(() => {
+      this.pdfViewer.currentPageNumber = this.args.page;
+      this.pdfViewer.currentScaleValue = "page-fit";
+    }, 0);
 
-    new Promise((resolve, reject) => {
-      if (typeof dest === "string") {
-        this.pdfDocument.getDestination(dest).then(destArray => {
-          resolve({
-            namedDest: dest,
-            explicitDest: destArray
-          });
-        });
-        return;
-      }
+    this._addWindowListeners();
 
-      resolve({
-        namedDest: "",
-        explicitDest: dest
-      });
-    }).then(data => {
-      if (!Array.isArray(data.explicitDest)) {
-        console.error(`PDFLinkService.navigateTo: "${data.explicitDest}" is` + ` not a valid destination 
array, for dest="${dest}".`);
-        return;
-      }
+    this._showControls();
 
-      goToDestination(data);
-    });
+    this.contextMenuOpen = false;
+    window.getSelection().removeAllRanges();
   }
 
-  getDestinationHash(dest) {
-    if (typeof dest === "string") {
-      return this.getAnchorUrl("#" + escape(dest));
-    }
+  _exit() {
+    const page = this.pdfViewer.currentPageNumber;
+    this.container.classList.remove(ACTIVE_SELECTOR);
+    setTimeout(() => {
+      this.active = false;
 
-    if (Array.isArray(dest)) {
-      const str = JSON.stringify(dest);
-      return this.getAnchorUrl("#" + escape(str));
-    }
+      this._removeFullscreenChangeListeners();
 
-    return this.getAnchorUrl("");
-  }
+      this._notifyStateChange();
 
-  getAnchorUrl(anchor) {
-    return (this.baseUrl || "") + anchor;
-  }
+      this.pdfViewer.currentScaleValue = this.args.previousScale;
+      this.pdfViewer.currentPageNumber = page;
+      this.args = null;
+    }, 0);
 
-  setHash(hash) {
-    let pageNumber, dest;
+    this._removeWindowListeners();
 
-    if (hash.includes("=")) {
-      const params = (0, _ui_utils.parseQueryString)(hash);
+    this._hideControls();
 
-      if ("search" in params) {
-        this.eventBus.dispatch("findfromurlhash", {
-          source: this,
-          query: params.search.replace(/"/g, ""),
-          phraseSearch: params.phrase === "true"
-        });
-      }
+    this._resetMouseScrollState();
 
-      if ("page" in params) {
-        pageNumber = params.page | 0 || 1;
-      }
+    this.contextMenuOpen = false;
+  }
 
-      if ("zoom" in params) {
-        const zoomArgs = params.zoom.split(",");
-        const zoomArg = zoomArgs[0];
-        const zoomArgNumber = parseFloat(zoomArg);
+  _mouseDown(evt) {
+    if (this.contextMenuOpen) {
+      this.contextMenuOpen = false;
+      evt.preventDefault();
+      return;
+    }
 
-        if (!zoomArg.includes("Fit")) {
-          dest = [null, {
-            name: "XYZ"
-          }, zoomArgs.length > 1 ? zoomArgs[1] | 0 : null, zoomArgs.length > 2 ? zoomArgs[2] | 0 : null, 
zoomArgNumber ? zoomArgNumber / 100 : zoomArg];
+    if (evt.button === 0) {
+      const isInternalLink = evt.target.href && evt.target.classList.contains("internalLink");
+
+      if (!isInternalLink) {
+        evt.preventDefault();
+
+        if (evt.shiftKey) {
+          this.pdfViewer.previousPage();
         } else {
-          if (zoomArg === "Fit" || zoomArg === "FitB") {
-            dest = [null, {
-              name: zoomArg
-            }];
-          } else if (zoomArg === "FitH" || zoomArg === "FitBH" || zoomArg === "FitV" || zoomArg === "FitBV") 
{
-            dest = [null, {
-              name: zoomArg
-            }, zoomArgs.length > 1 ? zoomArgs[1] | 0 : null];
-          } else if (zoomArg === "FitR") {
-            if (zoomArgs.length !== 5) {
-              console.error('PDFLinkService.setHash: Not enough parameters for "FitR".');
-            } else {
-              dest = [null, {
-                name: zoomArg
-              }, zoomArgs[1] | 0, zoomArgs[2] | 0, zoomArgs[3] | 0, zoomArgs[4] | 0];
-            }
-          } else {
-            console.error(`PDFLinkService.setHash: "${zoomArg}" is not ` + "a valid zoom value.");
-          }
+          this.pdfViewer.nextPage();
         }
       }
+    }
+  }
 
-      if (dest) {
-        this.pdfViewer.scrollPageIntoView({
-          pageNumber: pageNumber || this.page,
-          destArray: dest,
-          allowNegativeOffset: true
-        });
-      } else if (pageNumber) {
-        this.page = pageNumber;
-      }
-
-      if ("pagemode" in params) {
-        this.eventBus.dispatch("pagemode", {
-          source: this,
-          mode: params.pagemode
-        });
-      }
+  _contextMenu() {
+    this.contextMenuOpen = true;
+  }
 
-      if ("nameddest" in params) {
-        this.navigateTo(params.nameddest);
-      }
+  _showControls() {
+    if (this.controlsTimeout) {
+      clearTimeout(this.controlsTimeout);
     } else {
-      dest = unescape(hash);
+      this.container.classList.add(CONTROLS_SELECTOR);
+    }
 
-      try {
-        dest = JSON.parse(dest);
+    this.controlsTimeout = setTimeout(() => {
+      this.container.classList.remove(CONTROLS_SELECTOR);
+      delete this.controlsTimeout;
+    }, DELAY_BEFORE_HIDING_CONTROLS);
+  }
 
-        if (!Array.isArray(dest)) {
-          dest = dest.toString();
-        }
-      } catch (ex) {}
+  _hideControls() {
+    if (!this.controlsTimeout) {
+      return;
+    }
 
-      if (typeof dest === "string" || isValidExplicitDestination(dest)) {
-        this.navigateTo(dest);
-        return;
-      }
+    clearTimeout(this.controlsTimeout);
+    this.container.classList.remove(CONTROLS_SELECTOR);
+    delete this.controlsTimeout;
+  }
 
-      console.error(`PDFLinkService.setHash: "${unescape(hash)}" is not ` + "a valid destination.");
+  _resetMouseScrollState() {
+    this.mouseScrollTimeStamp = 0;
+    this.mouseScrollDelta = 0;
+  }
+
+  _touchSwipe(evt) {
+    if (!this.active) {
+      return;
     }
-  }
 
-  executeNamedAction(action) {
-    switch (action) {
-      case "GoBack":
-        if (this.pdfHistory) {
-          this.pdfHistory.back();
-        }
+    if (evt.touches.length > 1) {
+      this.touchSwipeState = null;
+      return;
+    }
 
+    switch (evt.type) {
+      case "touchstart":
+        this.touchSwipeState = {
+          startX: evt.touches[0].pageX,
+          startY: evt.touches[0].pageY,
+          endX: evt.touches[0].pageX,
+          endY: evt.touches[0].pageY
+        };
         break;
 
-      case "GoForward":
-        if (this.pdfHistory) {
-          this.pdfHistory.forward();
+      case "touchmove":
+        if (this.touchSwipeState === null) {
+          return;
         }
 
+        this.touchSwipeState.endX = evt.touches[0].pageX;
+        this.touchSwipeState.endY = evt.touches[0].pageY;
+        evt.preventDefault();
         break;
 
-      case "NextPage":
-        if (this.page < this.pagesCount) {
-          this.page++;
+      case "touchend":
+        if (this.touchSwipeState === null) {
+          return;
         }
 
-        break;
+        let delta = 0;
+        const dx = this.touchSwipeState.endX - this.touchSwipeState.startX;
+        const dy = this.touchSwipeState.endY - this.touchSwipeState.startY;
+        const absAngle = Math.abs(Math.atan2(dy, dx));
 
-      case "PrevPage":
-        if (this.page > 1) {
-          this.page--;
+        if (Math.abs(dx) > SWIPE_MIN_DISTANCE_THRESHOLD && (absAngle <= SWIPE_ANGLE_THRESHOLD || absAngle >= 
Math.PI - SWIPE_ANGLE_THRESHOLD)) {
+          delta = dx;
+        } else if (Math.abs(dy) > SWIPE_MIN_DISTANCE_THRESHOLD && Math.abs(absAngle - Math.PI / 2) <= 
SWIPE_ANGLE_THRESHOLD) {
+          delta = dy;
         }
 
-        break;
-
-      case "LastPage":
-        this.page = this.pagesCount;
-        break;
-
-      case "FirstPage":
-        this.page = 1;
-        break;
+        if (delta > 0) {
+          this.pdfViewer.previousPage();
+        } else if (delta < 0) {
+          this.pdfViewer.nextPage();
+        }
 
-      default:
         break;
     }
+  }
 
-    this.eventBus.dispatch("namedaction", {
-      source: this,
-      action
+  _addWindowListeners() {
+    this.showControlsBind = this._showControls.bind(this);
+    this.mouseDownBind = this._mouseDown.bind(this);
+    this.mouseWheelBind = this._mouseWheel.bind(this);
+    this.resetMouseScrollStateBind = this._resetMouseScrollState.bind(this);
+    this.contextMenuBind = this._contextMenu.bind(this);
+    this.touchSwipeBind = this._touchSwipe.bind(this);
+    window.addEventListener("mousemove", this.showControlsBind);
+    window.addEventListener("mousedown", this.mouseDownBind);
+    window.addEventListener("wheel", this.mouseWheelBind, {
+      passive: false
     });
+    window.addEventListener("keydown", this.resetMouseScrollStateBind);
+    window.addEventListener("contextmenu", this.contextMenuBind);
+    window.addEventListener("touchstart", this.touchSwipeBind);
+    window.addEventListener("touchmove", this.touchSwipeBind);
+    window.addEventListener("touchend", this.touchSwipeBind);
   }
 
-  cachePageRef(pageNum, pageRef) {
-    if (!pageRef) {
-      return;
-    }
+  _removeWindowListeners() {
+    window.removeEventListener("mousemove", this.showControlsBind);
+    window.removeEventListener("mousedown", this.mouseDownBind);
+    window.removeEventListener("wheel", this.mouseWheelBind, {
+      passive: false
+    });
+    window.removeEventListener("keydown", this.resetMouseScrollStateBind);
+    window.removeEventListener("contextmenu", this.contextMenuBind);
+    window.removeEventListener("touchstart", this.touchSwipeBind);
+    window.removeEventListener("touchmove", this.touchSwipeBind);
+    window.removeEventListener("touchend", this.touchSwipeBind);
+    delete this.showControlsBind;
+    delete this.mouseDownBind;
+    delete this.mouseWheelBind;
+    delete this.resetMouseScrollStateBind;
+    delete this.contextMenuBind;
+    delete this.touchSwipeBind;
+  }
 
-    const refStr = pageRef.gen === 0 ? `${pageRef.num}R` : `${pageRef.num}R${pageRef.gen}`;
-    this._pagesRefCache[refStr] = pageNum;
+  _fullscreenChange() {
+    if (this.isFullscreen) {
+      this._enter();
+    } else {
+      this._exit();
+    }
   }
 
-  _cachedPageNumber(pageRef) {
-    const refStr = pageRef.gen === 0 ? `${pageRef.num}R` : `${pageRef.num}R${pageRef.gen}`;
-    return this._pagesRefCache && this._pagesRefCache[refStr] || null;
+  _addFullscreenChangeListeners() {
+    this.fullscreenChangeBind = this._fullscreenChange.bind(this);
+    window.addEventListener("fullscreenchange", this.fullscreenChangeBind);
+    window.addEventListener("mozfullscreenchange", this.fullscreenChangeBind);
+    window.addEventListener("webkitfullscreenchange", this.fullscreenChangeBind);
   }
 
-  isPageVisible(pageNumber) {
-    return this.pdfViewer.isPageVisible(pageNumber);
+  _removeFullscreenChangeListeners() {
+    window.removeEventListener("fullscreenchange", this.fullscreenChangeBind);
+    window.removeEventListener("mozfullscreenchange", this.fullscreenChangeBind);
+    window.removeEventListener("webkitfullscreenchange", this.fullscreenChangeBind);
+    delete this.fullscreenChangeBind;
   }
 
 }
 
-exports.PDFLinkService = PDFLinkService;
+exports.PDFPresentationMode = PDFPresentationMode;
 
-function isValidExplicitDestination(dest) {
-  if (!Array.isArray(dest)) {
-    return false;
-  }
+/***/ }),
+/* 22 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 
-  const destLength = dest.length;
 
-  if (destLength < 2) {
-    return false;
-  }
 
-  const page = dest[0];
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports.PDFScriptingManager = void 0;
 
-  if (!(typeof page === "object" && Number.isInteger(page.num) && Number.isInteger(page.gen)) && 
!(Number.isInteger(page) && page >= 0)) {
-    return false;
-  }
+var _pdfjsLib = __webpack_require__(5);
 
-  const zoom = dest[1];
+var _ui_utils = __webpack_require__(4);
 
-  if (!(typeof zoom === "object" && typeof zoom.name === "string")) {
-    return false;
+var _pdf_rendering_queue = __webpack_require__(8);
+
+class PDFScriptingManager {
+  constructor({
+    eventBus,
+    sandboxBundleSrc = null,
+    scriptingFactory = null,
+    docPropertiesLookup = null
+  }) {
+    this._pdfDocument = null;
+    this._pdfViewer = null;
+    this._closeCapability = null;
+    this._destroyCapability = null;
+    this._scripting = null;
+    this._mouseState = Object.create(null);
+    this._pageEventsReady = false;
+    this._ready = false;
+    this._eventBus = eventBus;
+    this._sandboxBundleSrc = sandboxBundleSrc;
+    this._scriptingFactory = scriptingFactory;
+    this._docPropertiesLookup = docPropertiesLookup;
   }
 
-  let allowNull = true;
+  setViewer(pdfViewer) {
+    this._pdfViewer = pdfViewer;
+  }
 
-  switch (zoom.name) {
-    case "XYZ":
-      if (destLength !== 5) {
-        return false;
+  async setDocument(pdfDocument) {
+    if (this._pdfDocument) {
+      await this._destroyScripting();
+    }
+
+    this._pdfDocument = pdfDocument;
+
+    if (!pdfDocument) {
+      return;
+    }
+
+    const [objects, calculationOrder, docActions] = await Promise.all([pdfDocument.getFieldObjects(), 
pdfDocument.getCalculationOrderIds(), pdfDocument.getJSActions()]);
+
+    if (!objects && !docActions) {
+      await this._destroyScripting();
+      return;
+    }
+
+    if (pdfDocument !== this._pdfDocument) {
+      return;
+    }
+
+    this._scripting = this._createScripting();
+
+    this._internalEvents.set("updatefromsandbox", event => {
+      if (event?.source !== window) {
+        return;
       }
 
-      break;
+      this._updateFromSandbox(event.detail);
+    });
 
-    case "Fit":
-    case "FitB":
-      return destLength === 2;
+    this._internalEvents.set("dispatcheventinsandbox", event => {
+      this._scripting?.dispatchEventInSandbox(event.detail);
+    });
 
-    case "FitH":
-    case "FitBH":
-    case "FitV":
-    case "FitBV":
-      if (destLength !== 3) {
-        return false;
+    this._internalEvents.set("pagechanging", ({
+      pageNumber,
+      previous
+    }) => {
+      if (pageNumber === previous) {
+        return;
       }
 
-      break;
+      this._dispatchPageClose(previous);
 
-    case "FitR":
-      if (destLength !== 6) {
-        return false;
+      this._dispatchPageOpen(pageNumber);
+    });
+
+    this._internalEvents.set("pagerendered", ({
+      pageNumber
+    }) => {
+      if (!this._pageOpenPending.has(pageNumber)) {
+        return;
       }
 
-      allowNull = false;
-      break;
+      if (pageNumber !== this._pdfViewer.currentPageNumber) {
+        return;
+      }
 
-    default:
-      return false;
-  }
+      this._dispatchPageOpen(pageNumber);
+    });
 
-  for (let i = 2; i < destLength; i++) {
-    const param = dest[i];
+    this._internalEvents.set("pagesdestroy", async event => {
+      await this._dispatchPageClose(this._pdfViewer.currentPageNumber);
+      await this._scripting?.dispatchEventInSandbox({
+        id: "doc",
+        name: "WillClose"
+      });
+      this._closeCapability?.resolve();
+    });
 
-    if (!(typeof param === "number" || allowNull && param === null)) {
-      return false;
+    this._domEvents.set("mousedown", event => {
+      this._mouseState.isDown = true;
+    });
+
+    this._domEvents.set("mouseup", event => {
+      this._mouseState.isDown = false;
+    });
+
+    for (const [name, listener] of this._internalEvents) {
+      this._eventBus._on(name, listener);
+    }
+
+    for (const [name, listener] of this._domEvents) {
+      window.addEventListener(name, listener);
+    }
+
+    try {
+      const docProperties = await this._getDocProperties();
+
+      if (pdfDocument !== this._pdfDocument) {
+        return;
+      }
+
+      await this._scripting.createSandbox({
+        objects,
+        calculationOrder,
+        appInfo: {
+          platform: navigator.platform,
+          language: navigator.language
+        },
+        docInfo: { ...docProperties,
+          actions: docActions
+        }
+      });
+
+      this._eventBus.dispatch("sandboxcreated", {
+        source: this
+      });
+    } catch (error) {
+      console.error(`PDFScriptingManager.setDocument: "${error?.message}".`);
+      await this._destroyScripting();
+      return;
     }
+
+    await this._scripting?.dispatchEventInSandbox({
+      id: "doc",
+      name: "Open"
+    });
+    await this._dispatchPageOpen(this._pdfViewer.currentPageNumber, true);
+    Promise.resolve().then(() => {
+      if (pdfDocument === this._pdfDocument) {
+        this._ready = true;
+      }
+    });
   }
 
-  return true;
-}
+  async dispatchWillSave(detail) {
+    return this._scripting?.dispatchEventInSandbox({
+      id: "doc",
+      name: "WillSave"
+    });
+  }
 
-class SimpleLinkService {
-  constructor() {
-    this.externalLinkTarget = null;
-    this.externalLinkRel = null;
-    this.externalLinkEnabled = true;
-    this._ignoreDestinationZoom = false;
+  async dispatchDidSave(detail) {
+    return this._scripting?.dispatchEventInSandbox({
+      id: "doc",
+      name: "DidSave"
+    });
   }
 
-  get pagesCount() {
-    return 0;
+  async dispatchWillPrint(detail) {
+    return this._scripting?.dispatchEventInSandbox({
+      id: "doc",
+      name: "WillPrint"
+    });
   }
 
-  get page() {
-    return 0;
+  async dispatchDidPrint(detail) {
+    return this._scripting?.dispatchEventInSandbox({
+      id: "doc",
+      name: "DidPrint"
+    });
   }
 
-  set page(value) {}
+  get mouseState() {
+    return this._mouseState;
+  }
+
+  get destroyPromise() {
+    return this._destroyCapability?.promise || null;
+  }
 
-  get rotation() {
-    return 0;
+  get ready() {
+    return this._ready;
   }
 
-  set rotation(value) {}
+  get _internalEvents() {
+    return (0, _pdfjsLib.shadow)(this, "_internalEvents", new Map());
+  }
 
-  navigateTo(dest) {}
+  get _domEvents() {
+    return (0, _pdfjsLib.shadow)(this, "_domEvents", new Map());
+  }
 
-  getDestinationHash(dest) {
-    return "#";
+  get _pageOpenPending() {
+    return (0, _pdfjsLib.shadow)(this, "_pageOpenPending", new Set());
   }
 
-  getAnchorUrl(hash) {
-    return "#";
+  get _visitedPages() {
+    return (0, _pdfjsLib.shadow)(this, "_visitedPages", new Map());
   }
 
-  setHash(hash) {}
+  async _updateFromSandbox(detail) {
+    const isInPresentationMode = this._pdfViewer.isInPresentationMode || 
this._pdfViewer.isChangingPresentationMode;
+    const {
+      id,
+      command,
+      value
+    } = detail;
+
+    if (!id) {
+      switch (command) {
+        case "clear":
+          console.clear();
+          break;
 
-  executeNamedAction(action) {}
+        case "error":
+          console.error(value);
+          break;
 
-  cachePageRef(pageNum, pageRef) {}
+        case "layout":
+          this._pdfViewer.spreadMode = (0, _ui_utils.apiPageLayoutToSpreadMode)(value);
+          break;
 
-  isPageVisible(pageNumber) {
-    return true;
-  }
+        case "page-num":
+          this._pdfViewer.currentPageNumber = value + 1;
+          break;
 
-}
+        case "print":
+          await this._pdfViewer.pagesPromise;
 
-exports.SimpleLinkService = SimpleLinkService;
+          this._eventBus.dispatch("print", {
+            source: this
+          });
 
-/***/ }),
-/* 21 */
-/***/ (function(module, exports, __webpack_require__) {
+          break;
 
-"use strict";
+        case "println":
+          console.log(value);
+          break;
 
+        case "zoom":
+          if (isInPresentationMode) {
+            return;
+          }
 
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.PDFOutlineViewer = void 0;
+          this._pdfViewer.currentScaleValue = value;
+          break;
+      }
 
-var _pdfjsLib = __webpack_require__(5);
+      return;
+    }
 
-var _base_tree_viewer = __webpack_require__(13);
+    if (isInPresentationMode) {
+      if (detail.focus) {
+        return;
+      }
+    }
 
-class PDFOutlineViewer extends _base_tree_viewer.BaseTreeViewer {
-  constructor(options) {
-    super(options);
-    this.linkService = options.linkService;
+    const element = document.getElementById(id);
 
-    this.eventBus._on("toggleoutlinetree", this._toggleAllTreeItems.bind(this));
+    if (element) {
+      element.dispatchEvent(new CustomEvent("updatefromsandbox", {
+        detail
+      }));
+    } else {
+      delete detail.id;
+      this._pdfDocument?.annotationStorage.setValue(id, detail);
+    }
   }
 
-  reset() {
-    super.reset();
-    this._outline = null;
-  }
+  async _dispatchPageOpen(pageNumber, initialize = false) {
+    const pdfDocument = this._pdfDocument,
+          visitedPages = this._visitedPages;
 
-  _dispatchEvent(outlineCount) {
-    this.eventBus.dispatch("outlineloaded", {
-      source: this,
-      outlineCount
-    });
-  }
+    if (initialize) {
+      this._closeCapability = (0, _pdfjsLib.createPromiseCapability)();
+      this._pageEventsReady = true;
+    }
 
-  _bindLink(element, {
-    url,
-    newWindow,
-    dest
-  }) {
-    const {
-      linkService
-    } = this;
+    if (!this._pageEventsReady) {
+      return;
+    }
+
+    const pageView = this._pdfViewer.getPageView(pageNumber - 1);
+
+    if (pageView?.renderingState !== _pdf_rendering_queue.RenderingStates.FINISHED) {
+      this._pageOpenPending.add(pageNumber);
 
-    if (url) {
-      (0, _pdfjsLib.addLinkAttributes)(element, {
-        url,
-        target: newWindow ? _pdfjsLib.LinkTarget.BLANK : linkService.externalLinkTarget,
-        rel: linkService.externalLinkRel,
-        enabled: linkService.externalLinkEnabled
-      });
       return;
     }
 
-    element.href = linkService.getDestinationHash(dest);
+    this._pageOpenPending.delete(pageNumber);
 
-    element.onclick = () => {
-      if (dest) {
-        linkService.navigateTo(dest);
+    const actionsPromise = (async () => {
+      const actions = await (!visitedPages.has(pageNumber) ? pageView.pdfPage?.getJSActions() : null);
+
+      if (pdfDocument !== this._pdfDocument) {
+        return;
       }
 
-      return false;
-    };
+      await this._scripting?.dispatchEventInSandbox({
+        id: "page",
+        name: "PageOpen",
+        pageNumber,
+        actions
+      });
+    })();
+
+    visitedPages.set(pageNumber, actionsPromise);
   }
 
-  _setStyles(element, {
-    bold,
-    italic
-  }) {
-    if (bold) {
-      element.style.fontWeight = "bold";
+  async _dispatchPageClose(pageNumber) {
+    const pdfDocument = this._pdfDocument,
+          visitedPages = this._visitedPages;
+
+    if (!this._pageEventsReady) {
+      return;
     }
 
-    if (italic) {
-      element.style.fontStyle = "italic";
+    if (this._pageOpenPending.has(pageNumber)) {
+      return;
     }
-  }
 
-  _addToggleButton(div, {
-    count,
-    items
-  }) {
-    const hidden = count < 0 && Math.abs(count) === items.length;
+    const actionsPromise = visitedPages.get(pageNumber);
 
-    super._addToggleButton(div, hidden);
-  }
+    if (!actionsPromise) {
+      return;
+    }
 
-  _toggleAllTreeItems() {
-    if (!this._outline) {
+    visitedPages.set(pageNumber, null);
+    await actionsPromise;
+
+    if (pdfDocument !== this._pdfDocument) {
       return;
     }
 
-    super._toggleAllTreeItems();
+    await this._scripting?.dispatchEventInSandbox({
+      id: "page",
+      name: "PageClose",
+      pageNumber
+    });
   }
 
-  render({
-    outline
-  }) {
-    if (this._outline) {
-      this.reset();
+  async _getDocProperties() {
+    if (this._docPropertiesLookup) {
+      return this._docPropertiesLookup(this._pdfDocument);
     }
 
-    this._outline = outline || null;
+    throw new Error("_getDocProperties: Unable to lookup properties.");
+  }
 
-    if (!outline) {
-      this._dispatchEvent(0);
+  _createScripting() {
+    this._destroyCapability = (0, _pdfjsLib.createPromiseCapability)();
 
-      return;
+    if (this._scripting) {
+      throw new Error("_createScripting: Scripting already exists.");
     }
 
-    const fragment = document.createDocumentFragment();
-    const queue = [{
-      parent: fragment,
-      items: outline
-    }];
-    let outlineCount = 0,
-        hasAnyNesting = false;
-
-    while (queue.length > 0) {
-      const levelData = queue.shift();
+    if (this._scriptingFactory) {
+      return this._scriptingFactory.createScripting({
+        sandboxBundleSrc: this._sandboxBundleSrc
+      });
+    }
 
-      for (const item of levelData.items) {
-        const div = document.createElement("div");
-        div.className = "treeItem";
-        const element = document.createElement("a");
+    throw new Error("_createScripting: Cannot create scripting.");
+  }
 
-        this._bindLink(element, item);
+  async _destroyScripting() {
+    if (!this._scripting) {
+      this._pdfDocument = null;
+      this._destroyCapability?.resolve();
+      return;
+    }
 
-        this._setStyles(element, item);
+    if (this._closeCapability) {
+      await Promise.race([this._closeCapability.promise, new Promise(resolve => {
+        setTimeout(resolve, 1000);
+      })]).catch(reason => {});
+      this._closeCapability = null;
+    }
 
-        element.textContent = this._normalizeTextContent(item.title);
-        div.appendChild(element);
+    this._pdfDocument = null;
 
-        if (item.items.length > 0) {
-          hasAnyNesting = true;
+    try {
+      await this._scripting.destroySandbox();
+    } catch (ex) {}
 
-          this._addToggleButton(div, item);
+    for (const [name, listener] of this._internalEvents) {
+      this._eventBus._off(name, listener);
+    }
 
-          const itemsDiv = document.createElement("div");
-          itemsDiv.className = "treeItems";
-          div.appendChild(itemsDiv);
-          queue.push({
-            parent: itemsDiv,
-            items: item.items
-          });
-        }
+    this._internalEvents.clear();
 
-        levelData.parent.appendChild(div);
-        outlineCount++;
-      }
+    for (const [name, listener] of this._domEvents) {
+      window.removeEventListener(name, listener);
     }
 
-    if (hasAnyNesting) {
-      this.container.classList.add("treeWithDeepNesting");
-      this._lastToggleIsShow = fragment.querySelectorAll(".treeItemsHidden").length === 0;
-    }
+    this._domEvents.clear();
 
-    this.container.appendChild(fragment);
+    this._pageOpenPending.clear();
 
-    this._dispatchEvent(outlineCount);
+    this._visitedPages.clear();
+
+    this._scripting = null;
+    delete this._mouseState.isDown;
+    this._pageEventsReady = false;
+    this._ready = false;
+    this._destroyCapability?.resolve();
   }
 
 }
 
-exports.PDFOutlineViewer = PDFOutlineViewer;
+exports.PDFScriptingManager = PDFScriptingManager;
 
 /***/ }),
-/* 22 */
-/***/ (function(module, exports, __webpack_require__) {
+/* 23 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
-exports.PDFPresentationMode = void 0;
+}));
+exports.PDFSidebar = void 0;
 
-var _ui_utils = __webpack_require__(2);
+var _ui_utils = __webpack_require__(4);
 
-const DELAY_BEFORE_RESETTING_SWITCH_IN_PROGRESS = 1500;
-const DELAY_BEFORE_HIDING_CONTROLS = 3000;
-const ACTIVE_SELECTOR = "pdfPresentationMode";
-const CONTROLS_SELECTOR = "pdfPresentationModeControls";
-const MOUSE_SCROLL_COOLDOWN_TIME = 50;
-const PAGE_SWITCH_THRESHOLD = 0.1;
-const SWIPE_MIN_DISTANCE_THRESHOLD = 50;
-const SWIPE_ANGLE_THRESHOLD = Math.PI / 6;
+var _pdf_rendering_queue = __webpack_require__(8);
 
-class PDFPresentationMode {
+const UI_NOTIFICATION_CLASS = "pdfSidebarNotification";
+
+class PDFSidebar {
   constructor({
-    container,
+    elements,
     pdfViewer,
+    pdfThumbnailViewer,
     eventBus,
-    contextMenuItems = null
+    l10n
   }) {
-    this.container = container;
+    this.isOpen = false;
+    this.active = _ui_utils.SidebarView.THUMBS;
+    this.isInitialViewSet = false;
+    this.onToggled = null;
     this.pdfViewer = pdfViewer;
-    this.eventBus = eventBus;
-    this.active = false;
-    this.args = null;
-    this.contextMenuOpen = false;
-    this.mouseScrollTimeStamp = 0;
-    this.mouseScrollDelta = 0;
-    this.touchSwipeState = null;
-
-    if (contextMenuItems) {
-      contextMenuItems.contextFirstPage.addEventListener("click", () => {
-        this.contextMenuOpen = false;
-        this.eventBus.dispatch("firstpage", {
-          source: this
-        });
-      });
-      contextMenuItems.contextLastPage.addEventListener("click", () => {
-        this.contextMenuOpen = false;
-        this.eventBus.dispatch("lastpage", {
-          source: this
-        });
-      });
-      contextMenuItems.contextPageRotateCw.addEventListener("click", () => {
-        this.contextMenuOpen = false;
-        this.eventBus.dispatch("rotatecw", {
-          source: this
-        });
-      });
-      contextMenuItems.contextPageRotateCcw.addEventListener("click", () => {
-        this.contextMenuOpen = false;
-        this.eventBus.dispatch("rotateccw", {
-          source: this
-        });
-      });
-    }
-  }
-
-  request() {
-    if (this.switchInProgress || this.active || !this.pdfViewer.pagesCount) {
-      return false;
-    }
-
-    this._addFullscreenChangeListeners();
-
-    this._setSwitchInProgress();
-
-    this._notifyStateChange();
-
-    if (this.container.requestFullscreen) {
-      this.container.requestFullscreen();
-    } else if (this.container.mozRequestFullScreen) {
-      this.container.mozRequestFullScreen();
-    } else if (this.container.webkitRequestFullscreen) {
-      this.container.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT);
-    } else if (this.container.msRequestFullscreen) {
-      this.container.msRequestFullscreen();
-    } else {
-      return false;
-    }
-
-    this.args = {
-      page: this.pdfViewer.currentPageNumber,
-      previousScale: this.pdfViewer.currentScaleValue
-    };
-    return true;
-  }
-
-  _mouseWheel(evt) {
-    if (!this.active) {
-      return;
-    }
-
-    evt.preventDefault();
-    const delta = (0, _ui_utils.normalizeWheelEventDelta)(evt);
-    const currentTime = new Date().getTime();
-    const storedTime = this.mouseScrollTimeStamp;
+    this.pdfThumbnailViewer = pdfThumbnailViewer;
+    this.outerContainer = elements.outerContainer;
+    this.viewerContainer = elements.viewerContainer;
+    this.toggleButton = elements.toggleButton;
+    this.thumbnailButton = elements.thumbnailButton;
+    this.outlineButton = elements.outlineButton;
+    this.attachmentsButton = elements.attachmentsButton;
+    this.layersButton = elements.layersButton;
+    this.thumbnailView = elements.thumbnailView;
+    this.outlineView = elements.outlineView;
+    this.attachmentsView = elements.attachmentsView;
+    this.layersView = elements.layersView;
+    this._outlineOptionsContainer = elements.outlineOptionsContainer;
+    this._currentOutlineItemButton = elements.currentOutlineItemButton;
+    this.eventBus = eventBus;
+    this.l10n = l10n;
 
-    if (currentTime > storedTime && currentTime - storedTime < MOUSE_SCROLL_COOLDOWN_TIME) {
-      return;
-    }
+    this._addEventListeners();
+  }
 
-    if (this.mouseScrollDelta > 0 && delta < 0 || this.mouseScrollDelta < 0 && delta > 0) {
-      this._resetMouseScrollState();
-    }
+  reset() {
+    this.isInitialViewSet = false;
 
-    this.mouseScrollDelta += delta;
+    this._hideUINotification(true);
 
-    if (Math.abs(this.mouseScrollDelta) >= PAGE_SWITCH_THRESHOLD) {
-      const totalDelta = this.mouseScrollDelta;
+    this.switchView(_ui_utils.SidebarView.THUMBS);
+    this.outlineButton.disabled = false;
+    this.attachmentsButton.disabled = false;
+    this.layersButton.disabled = false;
+    this._currentOutlineItemButton.disabled = true;
+  }
 
-      this._resetMouseScrollState();
+  get visibleView() {
+    return this.isOpen ? this.active : _ui_utils.SidebarView.NONE;
+  }
 
-      const success = totalDelta > 0 ? this._goToPreviousPage() : this._goToNextPage();
+  get isThumbnailViewVisible() {
+    return this.isOpen && this.active === _ui_utils.SidebarView.THUMBS;
+  }
 
-      if (success) {
-        this.mouseScrollTimeStamp = currentTime;
-      }
-    }
+  get isOutlineViewVisible() {
+    return this.isOpen && this.active === _ui_utils.SidebarView.OUTLINE;
   }
 
-  get isFullscreen() {
-    return !!(document.fullscreenElement || document.mozFullScreen || document.webkitIsFullScreen || 
document.msFullscreenElement);
+  get isAttachmentsViewVisible() {
+    return this.isOpen && this.active === _ui_utils.SidebarView.ATTACHMENTS;
   }
 
-  _goToPreviousPage() {
-    const page = this.pdfViewer.currentPageNumber;
+  get isLayersViewVisible() {
+    return this.isOpen && this.active === _ui_utils.SidebarView.LAYERS;
+  }
 
-    if (page <= 1) {
-      return false;
+  setInitialView(view = _ui_utils.SidebarView.NONE) {
+    if (this.isInitialViewSet) {
+      return;
     }
 
-    this.pdfViewer.currentPageNumber = page - 1;
-    return true;
-  }
+    this.isInitialViewSet = true;
 
-  _goToNextPage() {
-    const page = this.pdfViewer.currentPageNumber;
+    if (view === _ui_utils.SidebarView.NONE || view === _ui_utils.SidebarView.UNKNOWN) {
+      this._dispatchEvent();
 
-    if (page >= this.pdfViewer.pagesCount) {
-      return false;
+      return;
     }
 
-    this.pdfViewer.currentPageNumber = page + 1;
-    return true;
+    if (!this._switchView(view, true)) {
+      this._dispatchEvent();
+    }
   }
 
-  _notifyStateChange() {
-    this.eventBus.dispatch("presentationmodechanged", {
-      source: this,
-      active: this.active,
-      switchInProgress: !!this.switchInProgress
-    });
+  switchView(view, forceOpen = false) {
+    this._switchView(view, forceOpen);
   }
 
-  _setSwitchInProgress() {
-    if (this.switchInProgress) {
-      clearTimeout(this.switchInProgress);
-    }
-
-    this.switchInProgress = setTimeout(() => {
-      this._removeFullscreenChangeListeners();
+  _switchView(view, forceOpen = false) {
+    const isViewChanged = view !== this.active;
+    let shouldForceRendering = false;
 
-      delete this.switchInProgress;
+    switch (view) {
+      case _ui_utils.SidebarView.NONE:
+        if (this.isOpen) {
+          this.close();
+          return true;
+        }
 
-      this._notifyStateChange();
-    }, DELAY_BEFORE_RESETTING_SWITCH_IN_PROGRESS);
-  }
+        return false;
 
-  _resetSwitchInProgress() {
-    if (this.switchInProgress) {
-      clearTimeout(this.switchInProgress);
-      delete this.switchInProgress;
-    }
-  }
+      case _ui_utils.SidebarView.THUMBS:
+        if (this.isOpen && isViewChanged) {
+          shouldForceRendering = true;
+        }
 
-  _enter() {
-    this.active = true;
+        break;
 
-    this._resetSwitchInProgress();
+      case _ui_utils.SidebarView.OUTLINE:
+        if (this.outlineButton.disabled) {
+          return false;
+        }
 
-    this._notifyStateChange();
+        break;
 
-    this.container.classList.add(ACTIVE_SELECTOR);
-    setTimeout(() => {
-      this.pdfViewer.currentPageNumber = this.args.page;
-      this.pdfViewer.currentScaleValue = "page-fit";
-    }, 0);
+      case _ui_utils.SidebarView.ATTACHMENTS:
+        if (this.attachmentsButton.disabled) {
+          return false;
+        }
 
-    this._addWindowListeners();
+        break;
 
-    this._showControls();
+      case _ui_utils.SidebarView.LAYERS:
+        if (this.layersButton.disabled) {
+          return false;
+        }
 
-    this.contextMenuOpen = false;
-    this.container.setAttribute("contextmenu", "viewerContextMenu");
-    window.getSelection().removeAllRanges();
-  }
+        break;
 
-  _exit() {
-    const page = this.pdfViewer.currentPageNumber;
-    this.container.classList.remove(ACTIVE_SELECTOR);
-    setTimeout(() => {
-      this.active = false;
+      default:
+        console.error(`PDFSidebar._switchView: "${view}" is not a valid view.`);
+        return false;
+    }
 
-      this._removeFullscreenChangeListeners();
+    this.active = view;
+    this.thumbnailButton.classList.toggle("toggled", view === _ui_utils.SidebarView.THUMBS);
+    this.outlineButton.classList.toggle("toggled", view === _ui_utils.SidebarView.OUTLINE);
+    this.attachmentsButton.classList.toggle("toggled", view === _ui_utils.SidebarView.ATTACHMENTS);
+    this.layersButton.classList.toggle("toggled", view === _ui_utils.SidebarView.LAYERS);
+    this.thumbnailView.classList.toggle("hidden", view !== _ui_utils.SidebarView.THUMBS);
+    this.outlineView.classList.toggle("hidden", view !== _ui_utils.SidebarView.OUTLINE);
+    this.attachmentsView.classList.toggle("hidden", view !== _ui_utils.SidebarView.ATTACHMENTS);
+    this.layersView.classList.toggle("hidden", view !== _ui_utils.SidebarView.LAYERS);
 
-      this._notifyStateChange();
+    this._outlineOptionsContainer.classList.toggle("hidden", view !== _ui_utils.SidebarView.OUTLINE);
 
-      this.pdfViewer.currentScaleValue = this.args.previousScale;
-      this.pdfViewer.currentPageNumber = page;
-      this.args = null;
-    }, 0);
+    if (forceOpen && !this.isOpen) {
+      this.open();
+      return true;
+    }
 
-    this._removeWindowListeners();
+    if (shouldForceRendering) {
+      this._updateThumbnailViewer();
 
-    this._hideControls();
+      this._forceRendering();
+    }
 
-    this._resetMouseScrollState();
+    if (isViewChanged) {
+      this._dispatchEvent();
+    }
 
-    this.container.removeAttribute("contextmenu");
-    this.contextMenuOpen = false;
+    return isViewChanged;
   }
 
-  _mouseDown(evt) {
-    if (this.contextMenuOpen) {
-      this.contextMenuOpen = false;
-      evt.preventDefault();
+  open() {
+    if (this.isOpen) {
       return;
     }
 
-    if (evt.button === 0) {
-      const isInternalLink = evt.target.href && evt.target.classList.contains("internalLink");
-
-      if (!isInternalLink) {
-        evt.preventDefault();
+    this.isOpen = true;
+    this.toggleButton.classList.add("toggled");
+    this.toggleButton.setAttribute("aria-expanded", "true");
+    this.outerContainer.classList.add("sidebarMoving", "sidebarOpen");
 
-        if (evt.shiftKey) {
-          this._goToPreviousPage();
-        } else {
-          this._goToNextPage();
-        }
-      }
+    if (this.active === _ui_utils.SidebarView.THUMBS) {
+      this._updateThumbnailViewer();
     }
-  }
 
-  _contextMenu() {
-    this.contextMenuOpen = true;
-  }
+    this._forceRendering();
 
-  _showControls() {
-    if (this.controlsTimeout) {
-      clearTimeout(this.controlsTimeout);
-    } else {
-      this.container.classList.add(CONTROLS_SELECTOR);
-    }
+    this._dispatchEvent();
 
-    this.controlsTimeout = setTimeout(() => {
-      this.container.classList.remove(CONTROLS_SELECTOR);
-      delete this.controlsTimeout;
-    }, DELAY_BEFORE_HIDING_CONTROLS);
+    this._hideUINotification();
   }
 
-  _hideControls() {
-    if (!this.controlsTimeout) {
+  close() {
+    if (!this.isOpen) {
       return;
     }
 
-    clearTimeout(this.controlsTimeout);
-    this.container.classList.remove(CONTROLS_SELECTOR);
-    delete this.controlsTimeout;
-  }
+    this.isOpen = false;
+    this.toggleButton.classList.remove("toggled");
+    this.toggleButton.setAttribute("aria-expanded", "false");
+    this.outerContainer.classList.add("sidebarMoving");
+    this.outerContainer.classList.remove("sidebarOpen");
 
-  _resetMouseScrollState() {
-    this.mouseScrollTimeStamp = 0;
-    this.mouseScrollDelta = 0;
+    this._forceRendering();
+
+    this._dispatchEvent();
   }
 
-  _touchSwipe(evt) {
-    if (!this.active) {
-      return;
+  toggle() {
+    if (this.isOpen) {
+      this.close();
+    } else {
+      this.open();
     }
+  }
 
-    if (evt.touches.length > 1) {
-      this.touchSwipeState = null;
-      return;
+  _dispatchEvent() {
+    this.eventBus.dispatch("sidebarviewchanged", {
+      source: this,
+      view: this.visibleView
+    });
+  }
+
+  _forceRendering() {
+    if (this.onToggled) {
+      this.onToggled();
+    } else {
+      this.pdfViewer.forceRendering();
+      this.pdfThumbnailViewer.forceRendering();
     }
+  }
 
-    switch (evt.type) {
-      case "touchstart":
-        this.touchSwipeState = {
-          startX: evt.touches[0].pageX,
-          startY: evt.touches[0].pageY,
-          endX: evt.touches[0].pageX,
-          endY: evt.touches[0].pageY
-        };
-        break;
+  _updateThumbnailViewer() {
+    const {
+      pdfViewer,
+      pdfThumbnailViewer
+    } = this;
+    const pagesCount = pdfViewer.pagesCount;
 
-      case "touchmove":
-        if (this.touchSwipeState === null) {
-          return;
-        }
+    for (let pageIndex = 0; pageIndex < pagesCount; pageIndex++) {
+      const pageView = pdfViewer.getPageView(pageIndex);
 
-        this.touchSwipeState.endX = evt.touches[0].pageX;
-        this.touchSwipeState.endY = evt.touches[0].pageY;
-        evt.preventDefault();
-        break;
+      if (pageView?.renderingState === _pdf_rendering_queue.RenderingStates.FINISHED) {
+        const thumbnailView = pdfThumbnailViewer.getThumbnail(pageIndex);
+        thumbnailView.setImage(pageView);
+      }
+    }
 
-      case "touchend":
-        if (this.touchSwipeState === null) {
-          return;
-        }
+    pdfThumbnailViewer.scrollThumbnailIntoView(pdfViewer.currentPageNumber);
+  }
 
-        let delta = 0;
-        const dx = this.touchSwipeState.endX - this.touchSwipeState.startX;
-        const dy = this.touchSwipeState.endY - this.touchSwipeState.startY;
-        const absAngle = Math.abs(Math.atan2(dy, dx));
+  _showUINotification() {
+    this.l10n.get("toggle_sidebar_notification2.title").then(msg => {
+      this.toggleButton.title = msg;
+    });
 
-        if (Math.abs(dx) > SWIPE_MIN_DISTANCE_THRESHOLD && (absAngle <= SWIPE_ANGLE_THRESHOLD || absAngle >= 
Math.PI - SWIPE_ANGLE_THRESHOLD)) {
-          delta = dx;
-        } else if (Math.abs(dy) > SWIPE_MIN_DISTANCE_THRESHOLD && Math.abs(absAngle - Math.PI / 2) <= 
SWIPE_ANGLE_THRESHOLD) {
-          delta = dy;
-        }
+    if (!this.isOpen) {
+      this.toggleButton.classList.add(UI_NOTIFICATION_CLASS);
+    }
+  }
 
-        if (delta > 0) {
-          this._goToPreviousPage();
-        } else if (delta < 0) {
-          this._goToNextPage();
-        }
+  _hideUINotification(reset = false) {
+    if (this.isOpen || reset) {
+      this.toggleButton.classList.remove(UI_NOTIFICATION_CLASS);
+    }
 
-        break;
+    if (reset) {
+      this.l10n.get("toggle_sidebar.title").then(msg => {
+        this.toggleButton.title = msg;
+      });
     }
   }
 
-  _addWindowListeners() {
-    this.showControlsBind = this._showControls.bind(this);
-    this.mouseDownBind = this._mouseDown.bind(this);
-    this.mouseWheelBind = this._mouseWheel.bind(this);
-    this.resetMouseScrollStateBind = this._resetMouseScrollState.bind(this);
-    this.contextMenuBind = this._contextMenu.bind(this);
-    this.touchSwipeBind = this._touchSwipe.bind(this);
-    window.addEventListener("mousemove", this.showControlsBind);
-    window.addEventListener("mousedown", this.mouseDownBind);
-    window.addEventListener("wheel", this.mouseWheelBind, {
-      passive: false
+  _addEventListeners() {
+    this.viewerContainer.addEventListener("transitionend", evt => {
+      if (evt.target === this.viewerContainer) {
+        this.outerContainer.classList.remove("sidebarMoving");
+      }
+    });
+    this.toggleButton.addEventListener("click", () => {
+      this.toggle();
+    });
+    this.thumbnailButton.addEventListener("click", () => {
+      this.switchView(_ui_utils.SidebarView.THUMBS);
+    });
+    this.outlineButton.addEventListener("click", () => {
+      this.switchView(_ui_utils.SidebarView.OUTLINE);
+    });
+    this.outlineButton.addEventListener("dblclick", () => {
+      this.eventBus.dispatch("toggleoutlinetree", {
+        source: this
+      });
+    });
+    this.attachmentsButton.addEventListener("click", () => {
+      this.switchView(_ui_utils.SidebarView.ATTACHMENTS);
+    });
+    this.layersButton.addEventListener("click", () => {
+      this.switchView(_ui_utils.SidebarView.LAYERS);
+    });
+    this.layersButton.addEventListener("dblclick", () => {
+      this.eventBus.dispatch("resetlayers", {
+        source: this
+      });
     });
-    window.addEventListener("keydown", this.resetMouseScrollStateBind);
-    window.addEventListener("contextmenu", this.contextMenuBind);
-    window.addEventListener("touchstart", this.touchSwipeBind);
-    window.addEventListener("touchmove", this.touchSwipeBind);
-    window.addEventListener("touchend", this.touchSwipeBind);
-  }
 
-  _removeWindowListeners() {
-    window.removeEventListener("mousemove", this.showControlsBind);
-    window.removeEventListener("mousedown", this.mouseDownBind);
-    window.removeEventListener("wheel", this.mouseWheelBind, {
-      passive: false
+    this._currentOutlineItemButton.addEventListener("click", () => {
+      this.eventBus.dispatch("currentoutlineitem", {
+        source: this
+      });
     });
-    window.removeEventListener("keydown", this.resetMouseScrollStateBind);
-    window.removeEventListener("contextmenu", this.contextMenuBind);
-    window.removeEventListener("touchstart", this.touchSwipeBind);
-    window.removeEventListener("touchmove", this.touchSwipeBind);
-    window.removeEventListener("touchend", this.touchSwipeBind);
-    delete this.showControlsBind;
-    delete this.mouseDownBind;
-    delete this.mouseWheelBind;
-    delete this.resetMouseScrollStateBind;
-    delete this.contextMenuBind;
-    delete this.touchSwipeBind;
-  }
 
-  _fullscreenChange() {
-    if (this.isFullscreen) {
-      this._enter();
-    } else {
-      this._exit();
-    }
-  }
+    const onTreeLoaded = (count, button, view) => {
+      button.disabled = !count;
 
-  _addFullscreenChangeListeners() {
-    this.fullscreenChangeBind = this._fullscreenChange.bind(this);
-    window.addEventListener("fullscreenchange", this.fullscreenChangeBind);
-    window.addEventListener("mozfullscreenchange", this.fullscreenChangeBind);
-    window.addEventListener("webkitfullscreenchange", this.fullscreenChangeBind);
-    window.addEventListener("MSFullscreenChange", this.fullscreenChangeBind);
-  }
+      if (count) {
+        this._showUINotification();
+      } else if (this.active === view) {
+        this.switchView(_ui_utils.SidebarView.THUMBS);
+      }
+    };
 
-  _removeFullscreenChangeListeners() {
-    window.removeEventListener("fullscreenchange", this.fullscreenChangeBind);
-    window.removeEventListener("mozfullscreenchange", this.fullscreenChangeBind);
-    window.removeEventListener("webkitfullscreenchange", this.fullscreenChangeBind);
-    window.removeEventListener("MSFullscreenChange", this.fullscreenChangeBind);
-    delete this.fullscreenChangeBind;
+    this.eventBus._on("outlineloaded", evt => {
+      onTreeLoaded(evt.outlineCount, this.outlineButton, _ui_utils.SidebarView.OUTLINE);
+
+      if (evt.enableCurrentOutlineItemButton) {
+        this.pdfViewer.pagesPromise.then(() => {
+          this._currentOutlineItemButton.disabled = !this.isInitialViewSet;
+        });
+      }
+    });
+
+    this.eventBus._on("attachmentsloaded", evt => {
+      onTreeLoaded(evt.attachmentsCount, this.attachmentsButton, _ui_utils.SidebarView.ATTACHMENTS);
+    });
+
+    this.eventBus._on("layersloaded", evt => {
+      onTreeLoaded(evt.layersCount, this.layersButton, _ui_utils.SidebarView.LAYERS);
+    });
+
+    this.eventBus._on("presentationmodechanged", evt => {
+      if (evt.state === _ui_utils.PresentationModeState.NORMAL && this.isThumbnailViewVisible) {
+        this._updateThumbnailViewer();
+      }
+    });
   }
 
 }
 
-exports.PDFPresentationMode = PDFPresentationMode;
+exports.PDFSidebar = PDFSidebar;
 
 /***/ }),
-/* 23 */
-/***/ (function(module, exports, __webpack_require__) {
+/* 24 */
+/***/ ((__unused_webpack_module, exports) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.PDFSidebarResizer = void 0;
-
-var _ui_utils = __webpack_require__(2);
-
 const SIDEBAR_WIDTH_VAR = "--sidebar-width";
 const SIDEBAR_MIN_WIDTH = 200;
 const SIDEBAR_RESIZING_CLASS = "sidebarResizing";
 
 class PDFSidebarResizer {
-  constructor(options, eventBus, l10n = _ui_utils.NullL10n) {
-    this.enabled = false;
+  constructor(options, eventBus, l10n) {
     this.isRTL = false;
     this.sidebarOpen = false;
     this.doc = document.documentElement;
@@ -8444,16 +8898,7 @@ class PDFSidebarResizer {
     this.outerContainer = options.outerContainer;
     this.resizer = options.resizer;
     this.eventBus = eventBus;
-    this.l10n = l10n;
-
-    if (typeof CSS === "undefined" || typeof CSS.supports !== "function" || !CSS.supports(SIDEBAR_WIDTH_VAR, 
`calc(-1 * ${SIDEBAR_MIN_WIDTH}px)`)) {
-      console.warn("PDFSidebarResizer: " + "The browser does not support resizing of the sidebar.");
-      return;
-    }
-
-    this.enabled = true;
-    this.resizer.classList.remove("hidden");
-    this.l10n.getDirection().then(dir => {
+    l10n.getDirection().then(dir => {
       this.isRTL = dir === "rtl";
     });
 
@@ -8461,26 +8906,26 @@ class PDFSidebarResizer {
   }
 
   get outerContainerWidth() {
-    if (!this._outerContainerWidth) {
-      this._outerContainerWidth = this.outerContainer.clientWidth;
-    }
-
-    return this._outerContainerWidth;
+    return this._outerContainerWidth || (this._outerContainerWidth = this.outerContainer.clientWidth);
   }
 
   _updateWidth(width = 0) {
-    if (!this.enabled) {
-      return false;
+    const maxWidth = Math.floor(this.outerContainerWidth / 2);
+
+    if (width > maxWidth) {
+      width = maxWidth;
     }
 
-    const newWidth = (0, _ui_utils.clamp)(width, SIDEBAR_MIN_WIDTH, Math.floor(this.outerContainerWidth / 
2));
+    if (width < SIDEBAR_MIN_WIDTH) {
+      width = SIDEBAR_MIN_WIDTH;
+    }
 
-    if (newWidth === this._width) {
+    if (width === this._width) {
       return false;
     }
 
-    this._width = newWidth;
-    this.doc.style.setProperty(SIDEBAR_WIDTH_VAR, `${newWidth}px`);
+    this._width = width;
+    this.doc.style.setProperty(SIDEBAR_WIDTH_VAR, `${width}px`);
     return true;
   }
 
@@ -8505,10 +8950,6 @@ class PDFSidebarResizer {
   }
 
   _addEventListeners() {
-    if (!this.enabled) {
-      return;
-    }
-
     const _boundEvents = this._boundEvents;
     _boundEvents.mouseMove = this._mouseMove.bind(this);
     _boundEvents.mouseUp = this._mouseUp.bind(this);
@@ -8523,11 +8964,11 @@ class PDFSidebarResizer {
     });
 
     this.eventBus._on("sidebarviewchanged", evt => {
-      this.sidebarOpen = !!(evt && evt.view);
+      this.sidebarOpen = !!evt?.view;
     });
 
     this.eventBus._on("resize", evt => {
-      if (!evt || evt.source !== window) {
+      if (evt?.source !== window) {
         return;
       }
 
@@ -8564,20 +9005,21 @@ class PDFSidebarResizer {
 exports.PDFSidebarResizer = PDFSidebarResizer;
 
 /***/ }),
-/* 24 */
-/***/ (function(module, exports, __webpack_require__) {
+/* 25 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.PDFThumbnailViewer = void 0;
 
-var _ui_utils = __webpack_require__(2);
+var _ui_utils = __webpack_require__(4);
+
+var _pdf_thumbnail_view = __webpack_require__(26);
 
-var _pdf_thumbnail_view = __webpack_require__(25);
+var _pdf_rendering_queue = __webpack_require__(8);
 
 const THUMBNAIL_SCROLL_MARGIN = -19;
 const THUMBNAIL_SELECTED_CLASS = "selected";
@@ -8588,7 +9030,7 @@ class PDFThumbnailViewer {
     eventBus,
     linkService,
     renderingQueue,
-    l10n = _ui_utils.NullL10n
+    l10n
   }) {
     this.container = container;
     this.linkService = linkService;
@@ -8612,7 +9054,10 @@ class PDFThumbnailViewer {
   }
 
   _getVisibleThumbs() {
-    return (0, _ui_utils.getVisibleElements)(this.container, this._thumbnails);
+    return (0, _ui_utils.getVisibleElements)({
+      scrollEl: this.container,
+      views: this._thumbnails
+    });
   }
 
   scrollThumbnailIntoView(pageNumber) {
@@ -8690,7 +9135,13 @@ class PDFThumbnailViewer {
   }
 
   cleanup() {
-    _pdf_thumbnail_view.PDFThumbnailView.cleanup();
+    for (let i = 0, ii = this._thumbnails.length; i < ii; i++) {
+      if (this._thumbnails[i] && this._thumbnails[i].renderingState !== 
_pdf_rendering_queue.RenderingStates.FINISHED) {
+        this._thumbnails[i].reset();
+      }
+    }
+
+    _pdf_thumbnail_view.TempImageFactory.destroyCanvas();
   }
 
   _resetView() {
@@ -8782,9 +9233,7 @@ class PDFThumbnailViewer {
     }
 
     for (let i = 0, ii = this._thumbnails.length; i < ii; i++) {
-      const label = this._pageLabels && this._pageLabels[i];
-
-      this._thumbnails[i].setPageLabel(label);
+      this._thumbnails[i].setPageLabel(this._pageLabels?.[i] ?? null);
     }
   }
 
@@ -8837,20 +9286,19 @@ class PDFThumbnailViewer {
 exports.PDFThumbnailViewer = PDFThumbnailViewer;
 
 /***/ }),
-/* 25 */
-/***/ (function(module, exports, __webpack_require__) {
+/* 26 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
-exports.PDFThumbnailView = void 0;
+}));
+exports.TempImageFactory = exports.PDFThumbnailView = void 0;
 
-var _pdfjsLib = __webpack_require__(5);
+var _ui_utils = __webpack_require__(4);
 
-var _ui_utils = __webpack_require__(2);
+var _pdfjsLib = __webpack_require__(5);
 
 var _pdf_rendering_queue = __webpack_require__(8);
 
@@ -8896,6 +9344,8 @@ const TempImageFactory = function TempImageFactoryClosure() {
   };
 }();
 
+exports.TempImageFactory = TempImageFactory;
+
 class PDFThumbnailView {
   constructor({
     container,
@@ -8906,7 +9356,7 @@ class PDFThumbnailView {
     renderingQueue,
     checkSetImageDisabled,
     disableCanvasToImageConversion = false,
-    l10n = _ui_utils.NullL10n
+    l10n
   }) {
     this.id = id;
     this.renderingId = "thumbnail" + id;
@@ -8942,7 +9392,7 @@ class PDFThumbnailView {
     });
 
     anchor.onclick = function () {
-      linkService.page = id;
+      linkService.goToPage(id);
       return false;
     };
 
@@ -9027,7 +9477,7 @@ class PDFThumbnailView {
     this.resume = null;
   }
 
-  _getPageDrawContext(noCtxScale = false) {
+  _getPageDrawContext() {
     const canvas = document.createElement("canvas");
     this.canvas = canvas;
     canvas.mozOpaque = true;
@@ -9039,12 +9489,8 @@ class PDFThumbnailView {
     canvas.height = this.canvasHeight * outputScale.sy | 0;
     canvas.style.width = this.canvasWidth + "px";
     canvas.style.height = this.canvasHeight + "px";
-
-    if (!noCtxScale && outputScale.scaled) {
-      ctx.scale(outputScale.sx, outputScale.sy);
-    }
-
-    return ctx;
+    const transform = outputScale.scaled ? [outputScale.sx, 0, 0, outputScale.sy, 0, 0] : null;
+    return [ctx, transform];
   }
 
   _convertCanvasToImage() {
@@ -9104,15 +9550,13 @@ class PDFThumbnailView {
     }
 
     this.renderingState = _pdf_rendering_queue.RenderingStates.RUNNING;
-    const renderCapability = (0, _pdfjsLib.createPromiseCapability)();
 
-    const finishRenderTask = error => {
+    const finishRenderTask = async (error = null) => {
       if (renderTask === this.renderTask) {
         this.renderTask = null;
       }
 
       if (error instanceof _pdfjsLib.RenderingCancelledException) {
-        renderCapability.resolve(undefined);
         return;
       }
 
@@ -9120,14 +9564,12 @@ class PDFThumbnailView {
 
       this._convertCanvasToImage();
 
-      if (!error) {
-        renderCapability.resolve(undefined);
-      } else {
-        renderCapability.reject(error);
+      if (error) {
+        throw error;
       }
     };
 
-    const ctx = this._getPageDrawContext();
+    const [ctx, transform] = this._getPageDrawContext();
 
     const drawViewport = this.viewport.clone({
       scale: this.scale
@@ -9150,17 +9592,27 @@ class PDFThumbnailView {
 
     const renderContext = {
       canvasContext: ctx,
+      transform,
       viewport: drawViewport,
       optionalContentConfigPromise: this._optionalContentConfigPromise
     };
     const renderTask = this.renderTask = pdfPage.render(renderContext);
     renderTask.onContinue = renderContinueCallback;
-    renderTask.promise.then(function () {
+    const resultPromise = renderTask.promise.then(function () {
       finishRenderTask(null);
     }, function (error) {
       finishRenderTask(error);
     });
-    return renderCapability.promise;
+    resultPromise.finally(() => {
+      const pageCached = this.linkService.isPageCached(this.id);
+
+      if (pageCached) {
+        return;
+      }
+
+      this.pdfPage?.cleanup();
+    });
+    return resultPromise;
   }
 
   setImage(pageView) {
@@ -9184,7 +9636,7 @@ class PDFThumbnailView {
 
     this.renderingState = _pdf_rendering_queue.RenderingStates.FINISHED;
 
-    const ctx = this._getPageDrawContext(true);
+    const [ctx] = this._getPageDrawContext();
 
     const canvas = ctx.canvas;
 
@@ -9220,19 +9672,15 @@ class PDFThumbnailView {
   }
 
   get _thumbPageTitle() {
-    var _this$pageLabel;
-
     return this.l10n.get("thumb_page_title", {
-      page: (_this$pageLabel = this.pageLabel) != null ? _this$pageLabel : this.id
-    }, "Page {{page}}");
+      page: this.pageLabel ?? this.id
+    });
   }
 
   get _thumbPageCanvas() {
-    var _this$pageLabel2;
-
     return this.l10n.get("thumb_page_canvas", {
-      page: (_this$pageLabel2 = this.pageLabel) != null ? _this$pageLabel2 : this.id
-    }, "Thumbnail of Page {{page}}");
+      page: this.pageLabel ?? this.id
+    });
   }
 
   setPageLabel(label) {
@@ -9255,27 +9703,24 @@ class PDFThumbnailView {
     });
   }
 
-  static cleanup() {
-    TempImageFactory.destroyCanvas();
-  }
-
 }
 
 exports.PDFThumbnailView = PDFThumbnailView;
 
 /***/ }),
-/* 26 */
-/***/ (function(module, exports, __webpack_require__) {
+/* 27 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.PDFViewer = void 0;
 
-var _base_viewer = __webpack_require__(27);
+var _ui_utils = __webpack_require__(4);
+
+var _base_viewer = __webpack_require__(28);
 
 var _pdfjsLib = __webpack_require__(5);
 
@@ -9333,7 +9778,7 @@ class PDFViewer extends _base_viewer.BaseViewer {
         break;
       }
 
-      if (page.id === currentId) {
+      if (page.id === currentId && this._scrollMode === _ui_utils.ScrollMode.VERTICAL && this._spreadMode 
=== _ui_utils.SpreadMode.NONE) {
         stillFullyVisible = true;
         break;
       }
@@ -9351,30 +9796,33 @@ class PDFViewer extends _base_viewer.BaseViewer {
 exports.PDFViewer = PDFViewer;
 
 /***/ }),
-/* 27 */
-/***/ (function(module, exports, __webpack_require__) {
+/* 28 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.BaseViewer = void 0;
 
-var _ui_utils = __webpack_require__(2);
+var _pdfjsLib = __webpack_require__(5);
+
+var _ui_utils = __webpack_require__(4);
 
 var _pdf_rendering_queue = __webpack_require__(8);
 
-var _annotation_layer_builder = __webpack_require__(28);
+var _annotation_layer_builder = __webpack_require__(29);
 
-var _pdfjsLib = __webpack_require__(5);
+var _l10n_utils = __webpack_require__(30);
 
-var _pdf_page_view = __webpack_require__(29);
+var _pdf_page_view = __webpack_require__(31);
 
-var _pdf_link_service = __webpack_require__(20);
+var _pdf_link_service = __webpack_require__(19);
 
-var _text_layer_builder = __webpack_require__(30);
+var _text_layer_builder = __webpack_require__(32);
+
+var _xfa_layer_builder = __webpack_require__(33);
 
 const DEFAULT_CACHE_SIZE = 10;
 
@@ -9414,6 +9862,10 @@ function PDFPageViewBuffer(size) {
       data.shift().destroy();
     }
   };
+
+  this.has = function (view) {
+    return data.includes(view);
+  };
 }
 
 function isSameScale(oldScale, newScale) {
@@ -9434,28 +9886,40 @@ class BaseViewer {
       throw new Error("Cannot initialize BaseViewer.");
     }
 
+    const viewerVersion = '2.8.335';
+
+    if (_pdfjsLib.version !== viewerVersion) {
+      throw new Error(`The API version "${_pdfjsLib.version}" does not match the Viewer version 
"${viewerVersion}".`);
+    }
+
     this._name = this.constructor.name;
     this.container = options.container;
     this.viewer = options.viewer || options.container.firstElementChild;
 
-    if (!(this.container instanceof HTMLDivElement && this.viewer instanceof HTMLDivElement)) {
+    if (!(this.container?.tagName.toUpperCase() === "DIV" && this.viewer?.tagName.toUpperCase() === "DIV")) {
       throw new Error("Invalid `container` and/or `viewer` option.");
     }
 
+    if (this.container.offsetParent && getComputedStyle(this.container).position !== "absolute") {
+      throw new Error("The `container` must be absolutely positioned.");
+    }
+
     this.eventBus = options.eventBus;
     this.linkService = options.linkService || new _pdf_link_service.SimpleLinkService();
     this.downloadManager = options.downloadManager || null;
     this.findController = options.findController || null;
+    this._scriptingManager = options.scriptingManager || null;
     this.removePageBorders = options.removePageBorders || false;
     this.textLayerMode = Number.isInteger(options.textLayerMode) ? options.textLayerMode : 
_ui_utils.TextLayerMode.ENABLE;
     this.imageResourcesPath = options.imageResourcesPath || "";
-    this.renderInteractiveForms = typeof options.renderInteractiveForms === "boolean" ? 
options.renderInteractiveForms : true;
+    this.renderInteractiveForms = options.renderInteractiveForms !== false;
     this.enablePrintAutoRotate = options.enablePrintAutoRotate || false;
     this.renderer = options.renderer || _ui_utils.RendererType.CANVAS;
     this.enableWebGL = options.enableWebGL || false;
     this.useOnlyCssZoom = options.useOnlyCssZoom || false;
     this.maxCanvasPixels = options.maxCanvasPixels;
-    this.l10n = options.l10n || _ui_utils.NullL10n;
+    this.l10n = options.l10n || _l10n_utils.NullL10n;
+    this.enableScripting = options.enableScripting === true && !!this._scriptingManager;
     this.defaultRenderingQueue = !options.renderingQueue;
 
     if (this.defaultRenderingQueue) {
@@ -9496,7 +9960,7 @@ class BaseViewer {
     }
 
     return this._pages.every(function (pageView) {
-      return pageView && pageView.pdfPage;
+      return pageView?.pdfPage;
     });
   }
 
@@ -9531,11 +9995,13 @@ class BaseViewer {
       return false;
     }
 
+    const previous = this._currentPageNumber;
     this._currentPageNumber = val;
     this.eventBus.dispatch("pagechanging", {
       source: this,
       pageNumber: val,
-      pageLabel: this._pageLabels && this._pageLabels[val - 1]
+      pageLabel: this._pageLabels?.[val - 1] ?? null,
+      previous
     });
 
     if (resetCurrentPageView) {
@@ -9546,7 +10012,7 @@ class BaseViewer {
   }
 
   get currentPageLabel() {
-    return this._pageLabels && this._pageLabels[this._currentPageNumber - 1];
+    return this._pageLabels?.[this._currentPageNumber - 1] ?? null;
   }
 
   set currentPageLabel(val) {
@@ -9610,6 +10076,12 @@ class BaseViewer {
       return;
     }
 
+    rotation %= 360;
+
+    if (rotation < 0) {
+      rotation += 360;
+    }
+
     if (this._pagesRotation === rotation) {
       return;
     }
@@ -9663,6 +10135,10 @@ class BaseViewer {
 
   setDocument(pdfDocument) {
     if (this.pdfDocument) {
+      this.eventBus.dispatch("pagesdestroy", {
+        source: this
+      });
+
       this._cancelRendering();
 
       this._resetView();
@@ -9670,6 +10146,10 @@ class BaseViewer {
       if (this.findController) {
         this.findController.setDocument(null);
       }
+
+      if (this._scriptingManager) {
+        this._scriptingManager.setDocument(null);
+      }
     }
 
     this.pdfDocument = pdfDocument;
@@ -9678,9 +10158,9 @@ class BaseViewer {
       return;
     }
 
+    const isPureXfa = pdfDocument.isPureXfa;
     const pagesCount = pdfDocument.numPages;
     const firstPagePromise = pdfDocument.getPage(1);
-    const annotationStorage = pdfDocument.annotationStorage;
     const optionalContentConfigPromise = pdfDocument.getOptionalContentConfig();
 
     this._pagesCapability.promise.then(() => {
@@ -9725,6 +10205,7 @@ class BaseViewer {
         scale: scale * _ui_utils.CSS_UNITS
       });
       const textLayerFactory = this.textLayerMode !== _ui_utils.TextLayerMode.DISABLE ? this : null;
+      const xfaLayerFactory = isPureXfa ? this : null;
 
       for (let pageNum = 1; pageNum <= pagesCount; ++pageNum) {
         const pageView = new _pdf_page_view.PDFPageView({
@@ -9733,19 +10214,20 @@ class BaseViewer {
           id: pageNum,
           scale,
           defaultViewport: viewport.clone(),
-          annotationStorage,
           optionalContentConfigPromise,
           renderingQueue: this.renderingQueue,
           textLayerFactory,
           textLayerMode: this.textLayerMode,
           annotationLayerFactory: this,
+          xfaLayerFactory,
           imageResourcesPath: this.imageResourcesPath,
           renderInteractiveForms: this.renderInteractiveForms,
           renderer: this.renderer,
           enableWebGL: this.enableWebGL,
           useOnlyCssZoom: this.useOnlyCssZoom,
           maxCanvasPixels: this.maxCanvasPixels,
-          l10n: this.l10n
+          l10n: this.l10n,
+          enableScripting: this.enableScripting
         });
 
         this._pages.push(pageView);
@@ -9767,6 +10249,10 @@ class BaseViewer {
           this.findController.setDocument(pdfDocument);
         }
 
+        if (this.enableScripting) {
+          this._scriptingManager.setDocument(pdfDocument);
+        }
+
         if (pdfDocument.loadingParams.disableAutoFetch || pagesCount > 7500) {
           this._pagesCapability.resolve();
 
@@ -9831,9 +10317,7 @@ class BaseViewer {
     }
 
     for (let i = 0, ii = this._pages.length; i < ii; i++) {
-      const pageView = this._pages[i];
-      const label = this._pageLabels && this._pageLabels[i];
-      pageView.setPageLabel(label);
+      this._pages[i].setPageLabel(this._pageLabels?.[i] ?? null);
     }
   }
 
@@ -9937,6 +10421,14 @@ class BaseViewer {
     }
   }
 
+  get _pageWidthScaleFactor() {
+    if (this._spreadMode !== _ui_utils.SpreadMode.NONE && this._scrollMode !== 
_ui_utils.ScrollMode.HORIZONTAL && !this.isInPresentationMode) {
+      return 2;
+    }
+
+    return 1;
+  }
+
   _setScale(value, noScroll = false) {
     let scale = parseFloat(value);
 
@@ -9957,7 +10449,7 @@ class BaseViewer {
         [hPadding, vPadding] = [vPadding, hPadding];
       }
 
-      const pageWidthScale = (this.container.clientWidth - hPadding) / currentPage.width * currentPage.scale;
+      const pageWidthScale = (this.container.clientWidth - hPadding) / currentPage.width * currentPage.scale 
/ this._pageWidthScaleFactor;
       const pageHeightScale = (this.container.clientHeight - vPadding) / currentPage.height * 
currentPage.scale;
 
       switch (value) {
@@ -10003,6 +10495,20 @@ class BaseViewer {
     });
   }
 
+  pageLabelToPageNumber(label) {
+    if (!this._pageLabels) {
+      return null;
+    }
+
+    const i = this._pageLabels.indexOf(label);
+
+    if (i < 0) {
+      return null;
+    }
+
+    return i + 1;
+  }
+
   scrollPageIntoView({
     pageNumber,
     destArray = null,
@@ -10059,6 +10565,8 @@ class BaseViewer {
         if (y === null && this._location) {
           x = this._location.left;
           y = this._location.top;
+        } else if (typeof y !== "number") {
+          y = pageHeight;
         }
 
         break;
@@ -10189,6 +10697,10 @@ class BaseViewer {
     return this.isInPresentationMode ? false : this._scrollMode === _ui_utils.ScrollMode.HORIZONTAL;
   }
 
+  get _isContainerRtl() {
+    return getComputedStyle(this.container).direction === "rtl";
+  }
+
   get isInPresentationMode() {
     return this.presentationModeState === _ui_utils.PresentationModeState.FULLSCREEN;
   }
@@ -10228,7 +10740,13 @@ class BaseViewer {
   }
 
   _getVisiblePages() {
-    return (0, _ui_utils.getVisibleElements)(this.container, this._pages, true, 
this._isScrollModeHorizontal);
+    return (0, _ui_utils.getVisibleElements)({
+      scrollEl: this.container,
+      views: this._pages,
+      sortByVisibility: true,
+      horizontal: this._isScrollModeHorizontal,
+      rtl: this._isScrollModeHorizontal && this._isContainerRtl
+    });
   }
 
   isPageVisible(pageNumber) {
@@ -10236,8 +10754,8 @@ class BaseViewer {
       return false;
     }
 
-    if (pageNumber < 1 || pageNumber > this.pagesCount) {
-      console.error(`${this._name}.isPageVisible: "${pageNumber}" is out of bounds.`);
+    if (!(Number.isInteger(pageNumber) && pageNumber > 0 && pageNumber <= this.pagesCount)) {
+      console.error(`${this._name}.isPageVisible: "${pageNumber}" is not a valid page.`);
       return false;
     }
 
@@ -10246,6 +10764,25 @@ class BaseViewer {
     });
   }
 
+  isPageCached(pageNumber) {
+    if (!this.pdfDocument || !this._buffer) {
+      return false;
+    }
+
+    if (!(Number.isInteger(pageNumber) && pageNumber > 0 && pageNumber <= this.pagesCount)) {
+      console.error(`${this._name}.isPageCached: "${pageNumber}" is not a valid page.`);
+      return false;
+    }
+
+    const pageView = this._pages[pageNumber - 1];
+
+    if (!pageView) {
+      return false;
+    }
+
+    return this._buffer.has(pageView);
+  }
+
   cleanup() {
     for (let i = 0, ii = this._pages.length; i < ii; i++) {
       if (this._pages[i] && this._pages[i].renderingState !== _pdf_rendering_queue.RenderingStates.FINISHED) 
{
@@ -10318,16 +10855,26 @@ class BaseViewer {
     });
   }
 
-  createAnnotationLayerBuilder(pageDiv, pdfPage, annotationStorage = null, imageResourcesPath = "", 
renderInteractiveForms = false, l10n = _ui_utils.NullL10n) {
+  createAnnotationLayerBuilder(pageDiv, pdfPage, annotationStorage = null, imageResourcesPath = "", 
renderInteractiveForms = false, l10n = _l10n_utils.NullL10n, enableScripting = false, hasJSActionsPromise = 
null, mouseState = null) {
     return new _annotation_layer_builder.AnnotationLayerBuilder({
       pageDiv,
       pdfPage,
-      annotationStorage,
+      annotationStorage: annotationStorage || this.pdfDocument?.annotationStorage,
       imageResourcesPath,
       renderInteractiveForms,
       linkService: this.linkService,
       downloadManager: this.downloadManager,
-      l10n
+      l10n,
+      enableScripting,
+      hasJSActionsPromise: hasJSActionsPromise || this.pdfDocument?.hasJSActions(),
+      mouseState: mouseState || this._scriptingManager?.mouseState
+    });
+  }
+
+  createXfaLayerBuilder(pageDiv, pdfPage) {
+    return new _xfa_layer_builder.XfaLayerBuilder({
+      pageDiv,
+      pdfPage
     });
   }
 
@@ -10346,30 +10893,23 @@ class BaseViewer {
   }
 
   getPagesOverview() {
-    const pagesOverview = this._pages.map(function (pageView) {
+    return this._pages.map(pageView => {
       const viewport = pageView.pdfPage.getViewport({
         scale: 1
       });
-      return {
-        width: viewport.width,
-        height: viewport.height,
-        rotation: viewport.rotation
-      };
-    });
 
-    if (!this.enablePrintAutoRotate) {
-      return pagesOverview;
-    }
-
-    return pagesOverview.map(function (size) {
-      if ((0, _ui_utils.isPortraitOrientation)(size)) {
-        return size;
+      if (!this.enablePrintAutoRotate || (0, _ui_utils.isPortraitOrientation)(viewport)) {
+        return {
+          width: viewport.width,
+          height: viewport.height,
+          rotation: viewport.rotation
+        };
       }
 
       return {
-        width: size.height,
-        height: size.width,
-        rotation: (size.rotation + 90) % 360
+        width: viewport.height,
+        height: viewport.width,
+        rotation: (viewport.rotation - 90) % 360
       };
     });
   }
@@ -10510,32 +11050,192 @@ class BaseViewer {
       return;
     }
 
+    if (this._currentScaleValue && isNaN(this._currentScaleValue)) {
+      this._setScale(this._currentScaleValue, true);
+    }
+
     this._setCurrentPageNumber(pageNumber, true);
 
     this.update();
   }
 
+  _getPageAdvance(currentPageNumber, previous = false) {
+    if (this.isInPresentationMode) {
+      return 1;
+    }
+
+    switch (this._scrollMode) {
+      case _ui_utils.ScrollMode.WRAPPED:
+        {
+          const {
+            views
+          } = this._getVisiblePages(),
+                pageLayout = new Map();
+
+          for (const {
+            id,
+            y,
+            percent,
+            widthPercent
+          } of views) {
+            if (percent === 0 || widthPercent < 100) {
+              continue;
+            }
+
+            let yArray = pageLayout.get(y);
+
+            if (!yArray) {
+              pageLayout.set(y, yArray || (yArray = []));
+            }
+
+            yArray.push(id);
+          }
+
+          for (const yArray of pageLayout.values()) {
+            const currentIndex = yArray.indexOf(currentPageNumber);
+
+            if (currentIndex === -1) {
+              continue;
+            }
+
+            const numPages = yArray.length;
+
+            if (numPages === 1) {
+              break;
+            }
+
+            if (previous) {
+              for (let i = currentIndex - 1, ii = 0; i >= ii; i--) {
+                const currentId = yArray[i],
+                      expectedId = yArray[i + 1] - 1;
+
+                if (currentId < expectedId) {
+                  return currentPageNumber - expectedId;
+                }
+              }
+            } else {
+              for (let i = currentIndex + 1, ii = numPages; i < ii; i++) {
+                const currentId = yArray[i],
+                      expectedId = yArray[i - 1] + 1;
+
+                if (currentId > expectedId) {
+                  return expectedId - currentPageNumber;
+                }
+              }
+            }
+
+            if (previous) {
+              const firstId = yArray[0];
+
+              if (firstId < currentPageNumber) {
+                return currentPageNumber - firstId + 1;
+              }
+            } else {
+              const lastId = yArray[numPages - 1];
+
+              if (lastId > currentPageNumber) {
+                return lastId - currentPageNumber + 1;
+              }
+            }
+
+            break;
+          }
+
+          break;
+        }
+
+      case _ui_utils.ScrollMode.HORIZONTAL:
+        {
+          break;
+        }
+
+      case _ui_utils.ScrollMode.VERTICAL:
+        {
+          if (this._spreadMode === _ui_utils.SpreadMode.NONE) {
+            break;
+          }
+
+          const parity = this._spreadMode - 1;
+
+          if (previous && currentPageNumber % 2 !== parity) {
+            break;
+          } else if (!previous && currentPageNumber % 2 === parity) {
+            break;
+          }
+
+          const {
+            views
+          } = this._getVisiblePages(),
+                expectedId = previous ? currentPageNumber - 1 : currentPageNumber + 1;
+
+          for (const {
+            id,
+            percent,
+            widthPercent
+          } of views) {
+            if (id !== expectedId) {
+              continue;
+            }
+
+            if (percent > 0 && widthPercent === 100) {
+              return 2;
+            }
+
+            break;
+          }
+
+          break;
+        }
+    }
+
+    return 1;
+  }
+
+  nextPage() {
+    const currentPageNumber = this._currentPageNumber,
+          pagesCount = this.pagesCount;
+
+    if (currentPageNumber >= pagesCount) {
+      return false;
+    }
+
+    const advance = this._getPageAdvance(currentPageNumber, false) || 1;
+    this.currentPageNumber = Math.min(currentPageNumber + advance, pagesCount);
+    return true;
+  }
+
+  previousPage() {
+    const currentPageNumber = this._currentPageNumber;
+
+    if (currentPageNumber <= 1) {
+      return false;
+    }
+
+    const advance = this._getPageAdvance(currentPageNumber, true) || 1;
+    this.currentPageNumber = Math.max(currentPageNumber - advance, 1);
+    return true;
+  }
+
 }
 
 exports.BaseViewer = BaseViewer;
 
 /***/ }),
-/* 28 */
-/***/ (function(module, exports, __webpack_require__) {
+/* 29 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.DefaultAnnotationLayerFactory = exports.AnnotationLayerBuilder = void 0;
 
 var _pdfjsLib = __webpack_require__(5);
 
-var _ui_utils = __webpack_require__(2);
+var _l10n_utils = __webpack_require__(30);
 
-var _pdf_link_service = __webpack_require__(20);
+var _pdf_link_service = __webpack_require__(19);
 
 class AnnotationLayerBuilder {
   constructor({
@@ -10546,7 +11246,10 @@ class AnnotationLayerBuilder {
     annotationStorage = null,
     imageResourcesPath = "",
     renderInteractiveForms = true,
-    l10n = _ui_utils.NullL10n
+    l10n = _l10n_utils.NullL10n,
+    enableScripting = false,
+    hasJSActionsPromise = null,
+    mouseState = null
   }) {
     this.pageDiv = pageDiv;
     this.pdfPage = pdfPage;
@@ -10556,14 +11259,17 @@ class AnnotationLayerBuilder {
     this.renderInteractiveForms = renderInteractiveForms;
     this.l10n = l10n;
     this.annotationStorage = annotationStorage;
+    this.enableScripting = enableScripting;
+    this._hasJSActionsPromise = hasJSActionsPromise;
+    this._mouseState = mouseState;
     this.div = null;
     this._cancelled = false;
   }
 
   render(viewport, intent = "display") {
-    return this.pdfPage.getAnnotations({
+    return Promise.all([this.pdfPage.getAnnotations({
       intent
-    }).then(annotations => {
+    }), this._hasJSActionsPromise]).then(([annotations, hasJSActions = false]) => {
       if (this._cancelled) {
         return;
       }
@@ -10583,7 +11289,10 @@ class AnnotationLayerBuilder {
         renderInteractiveForms: this.renderInteractiveForms,
         linkService: this.linkService,
         downloadManager: this.downloadManager,
-        annotationStorage: this.annotationStorage
+        annotationStorage: this.annotationStorage,
+        enableScripting: this.enableScripting,
+        hasJSActions,
+        mouseState: this._mouseState
       };
 
       if (this.div) {
@@ -10610,7 +11319,7 @@ class AnnotationLayerBuilder {
       return;
     }
 
-    this.div.setAttribute("hidden", "true");
+    this.div.hidden = true;
   }
 
 }
@@ -10618,7 +11327,7 @@ class AnnotationLayerBuilder {
 exports.AnnotationLayerBuilder = AnnotationLayerBuilder;
 
 class DefaultAnnotationLayerFactory {
-  createAnnotationLayerBuilder(pageDiv, pdfPage, annotationStorage = null, imageResourcesPath = "", 
renderInteractiveForms = true, l10n = _ui_utils.NullL10n) {
+  createAnnotationLayerBuilder(pageDiv, pdfPage, annotationStorage = null, imageResourcesPath = "", 
renderInteractiveForms = true, l10n = _l10n_utils.NullL10n, enableScripting = false, hasJSActionsPromise = 
null, mouseState = null) {
     return new AnnotationLayerBuilder({
       pageDiv,
       pdfPage,
@@ -10626,7 +11335,10 @@ class DefaultAnnotationLayerFactory {
       renderInteractiveForms,
       linkService: new _pdf_link_service.SimpleLinkService(),
       l10n,
-      annotationStorage
+      annotationStorage,
+      enableScripting,
+      hasJSActionsPromise,
+      mouseState
     });
   }
 
@@ -10635,24 +11347,131 @@ class DefaultAnnotationLayerFactory {
 exports.DefaultAnnotationLayerFactory = DefaultAnnotationLayerFactory;
 
 /***/ }),
-/* 29 */
-/***/ (function(module, exports, __webpack_require__) {
+/* 30 */
+/***/ ((__unused_webpack_module, exports) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
+exports.getL10nFallback = getL10nFallback;
+exports.NullL10n = void 0;
+const DEFAULT_L10N_STRINGS = {
+  of_pages: "of {{pagesCount}}",
+  page_of_pages: "({{pageNumber}} of {{pagesCount}})",
+  document_properties_kb: "{{size_kb}} KB ({{size_b}} bytes)",
+  document_properties_mb: "{{size_mb}} MB ({{size_b}} bytes)",
+  document_properties_date_string: "{{date}}, {{time}}",
+  document_properties_page_size_unit_inches: "in",
+  document_properties_page_size_unit_millimeters: "mm",
+  document_properties_page_size_orientation_portrait: "portrait",
+  document_properties_page_size_orientation_landscape: "landscape",
+  document_properties_page_size_name_a3: "A3",
+  document_properties_page_size_name_a4: "A4",
+  document_properties_page_size_name_letter: "Letter",
+  document_properties_page_size_name_legal: "Legal",
+  document_properties_page_size_dimension_string: "{{width}} × {{height}} {{unit}} ({{orientation}})",
+  document_properties_page_size_dimension_name_string: "{{width}} × {{height}} {{unit}} ({{name}}, 
{{orientation}})",
+  document_properties_linearized_yes: "Yes",
+  document_properties_linearized_no: "No",
+  print_progress_percent: "{{progress}}%",
+  "toggle_sidebar.title": "Toggle Sidebar",
+  "toggle_sidebar_notification2.title": "Toggle Sidebar (document contains outline/attachments/layers)",
+  additional_layers: "Additional Layers",
+  page_landmark: "Page {{page}}",
+  thumb_page_title: "Page {{page}}",
+  thumb_page_canvas: "Thumbnail of Page {{page}}",
+  find_reached_top: "Reached top of document, continued from bottom",
+  find_reached_bottom: "Reached end of document, continued from top",
+  "find_match_count[one]": "{{current}} of {{total}} match",
+  "find_match_count[other]": "{{current}} of {{total}} matches",
+  "find_match_count_limit[one]": "More than {{limit}} match",
+  "find_match_count_limit[other]": "More than {{limit}} matches",
+  find_not_found: "Phrase not found",
+  error_version_info: "PDF.js v{{version}} (build: {{build}})",
+  error_message: "Message: {{message}}",
+  error_stack: "Stack: {{stack}}",
+  error_file: "File: {{file}}",
+  error_line: "Line: {{line}}",
+  rendering_error: "An error occurred while rendering the page.",
+  page_scale_width: "Page Width",
+  page_scale_fit: "Page Fit",
+  page_scale_auto: "Automatic Zoom",
+  page_scale_actual: "Actual Size",
+  page_scale_percent: "{{scale}}%",
+  loading: "Loading…",
+  loading_error: "An error occurred while loading the PDF.",
+  invalid_file_error: "Invalid or corrupted PDF file.",
+  missing_file_error: "Missing PDF file.",
+  unexpected_response_error: "Unexpected server response.",
+  printing_not_supported: "Warning: Printing is not fully supported by this browser.",
+  printing_not_ready: "Warning: The PDF is not fully loaded for printing.",
+  web_fonts_disabled: "Web fonts are disabled: unable to use embedded PDF fonts."
+};
+
+function getL10nFallback(key, args) {
+  switch (key) {
+    case "find_match_count":
+      key = `find_match_count[${args.total === 1 ? "one" : "other"}]`;
+      break;
+
+    case "find_match_count_limit":
+      key = `find_match_count_limit[${args.limit === 1 ? "one" : "other"}]`;
+      break;
+  }
+
+  return DEFAULT_L10N_STRINGS[key] || "";
+}
+
+function formatL10nValue(text, args) {
+  if (!args) {
+    return text;
+  }
+
+  return text.replace(/\{\{\s*(\w+)\s*\}\}/g, (all, name) => {
+    return name in args ? args[name] : "{{" + name + "}}";
+  });
+}
+
+const NullL10n = {
+  async getLanguage() {
+    return "en-us";
+  },
+
+  async getDirection() {
+    return "ltr";
+  },
+
+  async get(key, args = null, fallback = getL10nFallback(key, args)) {
+    return formatL10nValue(fallback, args);
+  },
+
+  async translate(element) {}
+
+};
+exports.NullL10n = NullL10n;
+
+/***/ }),
+/* 31 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
 exports.PDFPageView = void 0;
 
-var _ui_utils = __webpack_require__(2);
+var _ui_utils = __webpack_require__(4);
 
 var _pdfjsLib = __webpack_require__(5);
 
+var _l10n_utils = __webpack_require__(30);
+
 var _pdf_rendering_queue = __webpack_require__(8);
 
-var _viewer_compatibility = __webpack_require__(4);
+var _viewer_compatibility = __webpack_require__(2);
 
 const MAX_CANVAS_PIXELS = _viewer_compatibility.viewerCompatibilityParams.maxCanvasPixels || 16777216;
 
@@ -10668,34 +11487,42 @@ class PDFPageView {
     this.scale = options.scale || _ui_utils.DEFAULT_SCALE;
     this.viewport = defaultViewport;
     this.pdfPageRotate = defaultViewport.rotation;
-    this._annotationStorage = options.annotationStorage || null;
     this._optionalContentConfigPromise = options.optionalContentConfigPromise || null;
     this.hasRestrictedScaling = false;
     this.textLayerMode = Number.isInteger(options.textLayerMode) ? options.textLayerMode : 
_ui_utils.TextLayerMode.ENABLE;
     this.imageResourcesPath = options.imageResourcesPath || "";
-    this.renderInteractiveForms = typeof options.renderInteractiveForms === "boolean" ? 
options.renderInteractiveForms : true;
+    this.renderInteractiveForms = options.renderInteractiveForms !== false;
     this.useOnlyCssZoom = options.useOnlyCssZoom || false;
     this.maxCanvasPixels = options.maxCanvasPixels || MAX_CANVAS_PIXELS;
     this.eventBus = options.eventBus;
     this.renderingQueue = options.renderingQueue;
     this.textLayerFactory = options.textLayerFactory;
     this.annotationLayerFactory = options.annotationLayerFactory;
+    this.xfaLayerFactory = options.xfaLayerFactory;
     this.renderer = options.renderer || _ui_utils.RendererType.CANVAS;
     this.enableWebGL = options.enableWebGL || false;
-    this.l10n = options.l10n || _ui_utils.NullL10n;
+    this.l10n = options.l10n || _l10n_utils.NullL10n;
+    this.enableScripting = options.enableScripting === true;
     this.paintTask = null;
     this.paintedViewportMap = new WeakMap();
     this.renderingState = _pdf_rendering_queue.RenderingStates.INITIAL;
     this.resume = null;
-    this.error = null;
+    this._renderError = null;
     this.annotationLayer = null;
     this.textLayer = null;
     this.zoomLayer = null;
+    this.xfaLayer = null;
     const div = document.createElement("div");
     div.className = "page";
     div.style.width = Math.floor(this.viewport.width) + "px";
     div.style.height = Math.floor(this.viewport.height) + "px";
     div.setAttribute("data-page-number", this.id);
+    div.setAttribute("role", "region");
+    this.l10n.get("page_landmark", {
+      page: this.id
+    }).then(msg => {
+      div.setAttribute("aria-label", msg);
+    });
     this.div = div;
     container.appendChild(div);
   }
@@ -10708,7 +11535,6 @@ class PDFPageView {
       scale: this.scale * _ui_utils.CSS_UNITS,
       rotation: totalRotation
     });
-    this.stats = pdfPage.stats;
     this.reset();
   }
 
@@ -10736,6 +11562,22 @@ class PDFPageView {
     }
   }
 
+  async _renderXfaLayer() {
+    let error = null;
+
+    try {
+      await this.xfaLayer.render(this.viewport, "display");
+    } catch (ex) {
+      error = ex;
+    } finally {
+      this.eventBus.dispatch("xfalayerrendered", {
+        source: this,
+        pageNumber: this.id,
+        error
+      });
+    }
+  }
+
   _resetZoomLayer(removeFromDOM = false) {
     if (!this.zoomLayer) {
       return;
@@ -10761,12 +11603,13 @@ class PDFPageView {
     div.style.height = Math.floor(this.viewport.height) + "px";
     const childNodes = div.childNodes;
     const currentZoomLayerNode = keepZoomLayer && this.zoomLayer || null;
-    const currentAnnotationNode = keepAnnotations && this.annotationLayer && this.annotationLayer.div || 
null;
+    const currentAnnotationNode = keepAnnotations && this.annotationLayer?.div || null;
+    const currentXfaLayerNode = this.xfaLayer?.div || null;
 
     for (let i = childNodes.length - 1; i >= 0; i--) {
       const node = childNodes[i];
 
-      if (currentZoomLayerNode === node || currentAnnotationNode === node) {
+      if (currentZoomLayerNode === node || currentAnnotationNode === node || currentXfaLayerNode === node) {
         continue;
       }
 
@@ -10800,6 +11643,10 @@ class PDFPageView {
 
     this.loadingIconDiv = document.createElement("div");
     this.loadingIconDiv.className = "loadingIcon";
+    this.loadingIconDiv.setAttribute("role", "img");
+    this.l10n.get("loading").then(msg => {
+      this.loadingIconDiv?.setAttribute("aria-label", msg);
+    });
     div.appendChild(this.loadingIconDiv);
   }
 
@@ -10826,7 +11673,8 @@ class PDFPageView {
         source: this,
         pageNumber: this.id,
         cssTransform: true,
-        timestamp: performance.now()
+        timestamp: performance.now(),
+        error: this._renderError
       });
       return;
     }
@@ -10848,12 +11696,13 @@ class PDFPageView {
           source: this,
           pageNumber: this.id,
           cssTransform: true,
-          timestamp: performance.now()
+          timestamp: performance.now(),
+          error: this._renderError
         });
         return;
       }
 
-      if (!this.zoomLayer && !this.canvas.hasAttribute("hidden")) {
+      if (!this.zoomLayer && !this.canvas.hidden) {
         this.zoomLayer = this.canvas.parentNode;
         this.zoomLayer.style.position = "absolute";
       }
@@ -10901,8 +11750,7 @@ class PDFPageView {
       scaleY = width / height;
     }
 
-    const cssTransform = "rotate(" + relativeRotation + "deg) " + "scale(" + scaleX + "," + scaleY + ")";
-    target.style.transform = cssTransform;
+    target.style.transform = `rotate(${relativeRotation}deg) scale(${scaleX}, ${scaleY})`;
 
     if (this.textLayer) {
       const textLayerViewport = this.textLayer.viewport;
@@ -10942,13 +11790,17 @@ class PDFPageView {
           break;
       }
 
-      textLayerDiv.style.transform = "rotate(" + textAbsRotation + "deg) " + "scale(" + scale + ", " + scale 
+ ") " + "translate(" + transX + ", " + transY + ")";
+      textLayerDiv.style.transform = `rotate(${textAbsRotation}deg) ` + `scale(${scale}) ` + 
`translate(${transX}, ${transY})`;
       textLayerDiv.style.transformOrigin = "0% 0%";
     }
 
     if (redrawAnnotations && this.annotationLayer) {
       this._renderAnnotationLayer();
     }
+
+    if (this.xfaLayer) {
+      this._renderXfaLayer();
+    }
   }
 
   get width() {
@@ -10991,7 +11843,7 @@ class PDFPageView {
     canvasWrapper.style.height = div.style.height;
     canvasWrapper.classList.add("canvasWrapper");
 
-    if (this.annotationLayer && this.annotationLayer.div) {
+    if (this.annotationLayer?.div) {
       div.insertBefore(canvasWrapper, this.annotationLayer.div);
     } else {
       div.appendChild(canvasWrapper);
@@ -11005,7 +11857,7 @@ class PDFPageView {
       textLayerDiv.style.width = canvasWrapper.style.width;
       textLayerDiv.style.height = canvasWrapper.style.height;
 
-      if (this.annotationLayer && this.annotationLayer.div) {
+      if (this.annotationLayer?.div) {
         div.insertBefore(textLayerDiv, this.annotationLayer.div);
       } else {
         div.appendChild(textLayerDiv);
@@ -11034,16 +11886,17 @@ class PDFPageView {
       };
     }
 
-    const finishPaintTask = async error => {
+    const finishPaintTask = async (error = null) => {
       if (paintTask === this.paintTask) {
         this.paintTask = null;
       }
 
       if (error instanceof _pdfjsLib.RenderingCancelledException) {
-        this.error = null;
+        this._renderError = null;
         return;
       }
 
+      this._renderError = error;
       this.renderingState = _pdf_rendering_queue.RenderingStates.FINISHED;
 
       if (this.loadingIconDiv) {
@@ -11053,13 +11906,12 @@ class PDFPageView {
 
       this._resetZoomLayer(true);
 
-      this.error = error;
-      this.stats = pdfPage.stats;
       this.eventBus.dispatch("pagerendered", {
         source: this,
         pageNumber: this.id,
         cssTransform: false,
-        timestamp: performance.now()
+        timestamp: performance.now(),
+        error: this._renderError
       });
 
       if (error) {
@@ -11086,12 +11938,20 @@ class PDFPageView {
 
     if (this.annotationLayerFactory) {
       if (!this.annotationLayer) {
-        this.annotationLayer = this.annotationLayerFactory.createAnnotationLayerBuilder(div, pdfPage, 
this._annotationStorage, this.imageResourcesPath, this.renderInteractiveForms, this.l10n);
+        this.annotationLayer = this.annotationLayerFactory.createAnnotationLayerBuilder(div, pdfPage, null, 
this.imageResourcesPath, this.renderInteractiveForms, this.l10n, this.enableScripting, null, null);
       }
 
       this._renderAnnotationLayer();
     }
 
+    if (this.xfaLayerFactory) {
+      if (!this.xfaLayer) {
+        this.xfaLayer = this.xfaLayerFactory.createXfaLayerBuilder(div, pdfPage);
+      }
+
+      this._renderXfaLayer();
+    }
+
     div.setAttribute("data-loaded", true);
     this.eventBus.dispatch("pagerender", {
       source: this,
@@ -11116,17 +11976,12 @@ class PDFPageView {
     };
     const viewport = this.viewport;
     const canvas = document.createElement("canvas");
-    this.l10n.get("page_canvas", {
-      page: this.id
-    }, "Page {{page}}").then(msg => {
-      canvas.setAttribute("aria-label", msg);
-    });
-    canvas.setAttribute("hidden", "hidden");
+    canvas.hidden = true;
     let isCanvasHidden = true;
 
     const showCanvas = function () {
       if (isCanvasHidden) {
-        canvas.removeAttribute("hidden");
+        canvas.hidden = false;
         isCanvasHidden = false;
       }
     };
@@ -11216,7 +12071,7 @@ class PDFPageView {
     });
     const promise = pdfPage.getOperatorList().then(opList => {
       ensureNotCancelled();
-      const svgGfx = new _pdfjsLib.SVGGraphics(pdfPage.commonObjs, pdfPage.objs);
+      const svgGfx = new _pdfjsLib.SVGGraphics(pdfPage.commonObjs, pdfPage.objs, 
_viewer_compatibility.viewerCompatibilityParams.disableCreateObjectURL);
       return svgGfx.getSVG(opList, actualSizeViewport).then(svg => {
         ensureNotCancelled();
         this.svg = svg;
@@ -11256,16 +12111,15 @@ class PDFPageView {
 exports.PDFPageView = PDFPageView;
 
 /***/ }),
-/* 30 */
-/***/ (function(module, exports, __webpack_require__) {
+/* 32 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
-exports.DefaultTextLayerFactory = exports.TextLayerBuilder = void 0;
+}));
+exports.TextLayerBuilder = exports.DefaultTextLayerFactory = void 0;
 
 var _pdfjsLib = __webpack_require__(5);
 
@@ -11381,13 +12235,11 @@ class TextLayerBuilder {
     }
 
     const {
-      findController,
       textContentItemsStr
     } = this;
     let i = 0,
         iIndex = 0;
     const end = textContentItemsStr.length - 1;
-    const queryLen = findController.state.query.length;
     const result = [];
 
     for (let m = 0, mm = matches.length; m < mm; m++) {
@@ -11408,12 +12260,7 @@ class TextLayerBuilder {
           offset: matchIdx - iIndex
         }
       };
-
-      if (matchesLength) {
-        matchIdx += matchesLength[m];
-      } else {
-        matchIdx += queryLen;
-      }
+      matchIdx += matchesLength[m];
 
       while (i !== end && matchIdx > iIndex + textContentItemsStr[i].length) {
         iIndex += textContentItemsStr[i].length;
@@ -11554,7 +12401,7 @@ class TextLayerBuilder {
       clearedUntilDivIdx = match.end.divIdx + 1;
     }
 
-    if (!findController || !findController.highlightMatches) {
+    if (!findController?.highlightMatches) {
       return;
     }
 
@@ -11640,22 +12487,100 @@ class DefaultTextLayerFactory {
 exports.DefaultTextLayerFactory = DefaultTextLayerFactory;
 
 /***/ }),
-/* 31 */
-/***/ (function(module, exports, __webpack_require__) {
+/* 33 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
+exports.XfaLayerBuilder = exports.DefaultXfaLayerFactory = void 0;
+
+var _pdfjsLib = __webpack_require__(5);
+
+class XfaLayerBuilder {
+  constructor({
+    pageDiv,
+    pdfPage
+  }) {
+    this.pageDiv = pageDiv;
+    this.pdfPage = pdfPage;
+    this.div = null;
+    this._cancelled = false;
+  }
+
+  render(viewport, intent = "display") {
+    return this.pdfPage.getXfa().then(xfa => {
+      if (this._cancelled) {
+        return;
+      }
+
+      const parameters = {
+        viewport: viewport.clone({
+          dontFlip: true
+        }),
+        div: this.div,
+        xfa,
+        page: this.pdfPage
+      };
+
+      if (this.div) {
+        _pdfjsLib.XfaLayer.update(parameters);
+      } else {
+        this.div = document.createElement("div");
+        this.pageDiv.appendChild(this.div);
+        parameters.div = this.div;
+
+        _pdfjsLib.XfaLayer.render(parameters);
+      }
+    });
+  }
+
+  cancel() {
+    this._cancelled = true;
+  }
+
+  hide() {
+    if (!this.div) {
+      return;
+    }
+
+    this.div.hidden = true;
+  }
+
+}
+
+exports.XfaLayerBuilder = XfaLayerBuilder;
+
+class DefaultXfaLayerFactory {
+  createXfaLayerBuilder(pageDiv, pdfPage) {
+    return new XfaLayerBuilder({
+      pageDiv,
+      pdfPage
+    });
+  }
+
+}
+
+exports.DefaultXfaLayerFactory = DefaultXfaLayerFactory;
+
+/***/ }),
+/* 34 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
 exports.SecondaryToolbar = void 0;
 
-var _ui_utils = __webpack_require__(2);
+var _ui_utils = __webpack_require__(4);
 
 var _pdf_cursor_tools = __webpack_require__(6);
 
-var _pdf_single_page_viewer = __webpack_require__(32);
+var _pdf_single_page_viewer = __webpack_require__(35);
 
 class SecondaryToolbar {
   constructor(options, mainContainer, eventBus) {
@@ -11917,6 +12842,7 @@ class SecondaryToolbar {
     this._setMaxHeight();
 
     this.toggleButton.classList.add("toggled");
+    this.toggleButton.setAttribute("aria-expanded", "true");
     this.toolbar.classList.remove("hidden");
   }
 
@@ -11928,6 +12854,7 @@ class SecondaryToolbar {
     this.opened = false;
     this.toolbar.classList.add("hidden");
     this.toggleButton.classList.remove("toggled");
+    this.toggleButton.setAttribute("aria-expanded", "false");
   }
 
   toggle() {
@@ -11958,18 +12885,17 @@ class SecondaryToolbar {
 exports.SecondaryToolbar = SecondaryToolbar;
 
 /***/ }),
-/* 32 */
-/***/ (function(module, exports, __webpack_require__) {
+/* 35 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.PDFSinglePageViewer = void 0;
 
-var _base_viewer = __webpack_require__(27);
+var _base_viewer = __webpack_require__(28);
 
 var _pdfjsLib = __webpack_require__(5);
 
@@ -11986,6 +12912,10 @@ class PDFSinglePageViewer extends _base_viewer.BaseViewer {
     return (0, _pdfjsLib.shadow)(this, "_viewerElement", this._shadowViewer);
   }
 
+  get _pageWidthScaleFactor() {
+    return 1;
+  }
+
   _resetView() {
     super._resetView();
 
@@ -12075,30 +13005,33 @@ class PDFSinglePageViewer extends _base_viewer.BaseViewer {
 
   _updateSpreadMode() {}
 
+  _getPageAdvance() {
+    return 1;
+  }
+
 }
 
 exports.PDFSinglePageViewer = PDFSinglePageViewer;
 
 /***/ }),
-/* 33 */
-/***/ (function(module, exports, __webpack_require__) {
+/* 36 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.Toolbar = void 0;
 
-var _ui_utils = __webpack_require__(2);
+var _ui_utils = __webpack_require__(4);
 
 const PAGE_NUMBER_LOADING_INDICATOR = "visiblePageIsLoading";
 const SCALE_SELECT_CONTAINER_WIDTH = 140;
 const SCALE_SELECT_WIDTH = 162;
 
 class Toolbar {
-  constructor(options, eventBus, l10n = _ui_utils.NullL10n) {
+  constructor(options, eventBus, l10n) {
     this.toolbar = options.container;
     this.eventBus = eventBus;
     this.l10n = l10n;
@@ -12251,7 +13184,7 @@ class Toolbar {
         items.pageNumber.type = "number";
         this.l10n.get("of_pages", {
           pagesCount
-        }, "of {{pagesCount}}").then(msg => {
+        }).then(msg => {
           items.numPages.textContent = msg;
         });
       }
@@ -12264,7 +13197,7 @@ class Toolbar {
       this.l10n.get("page_of_pages", {
         pageNumber,
         pagesCount
-      }, "({{pageNumber}} of {{pagesCount}})").then(msg => {
+      }).then(msg => {
         items.numPages.textContent = msg;
       });
     } else {
@@ -12275,10 +13208,9 @@ class Toolbar {
     items.next.disabled = pageNumber >= pagesCount;
     items.zoomOut.disabled = pageScale <= _ui_utils.MIN_SCALE;
     items.zoomIn.disabled = pageScale >= _ui_utils.MAX_SCALE;
-    const customScale = Math.round(pageScale * 10000) / 100;
     this.l10n.get("page_scale_percent", {
-      scale: customScale
-    }, "{{scale}}%").then(msg => {
+      scale: Math.round(pageScale * 10000) / 100
+    }).then(msg => {
       let predefinedValueFound = false;
 
       for (const option of items.scaleSelect.options) {
@@ -12308,7 +13240,7 @@ class Toolbar {
       items,
       l10n
     } = this;
-    const predefinedValuesPromise = Promise.all([l10n.get("page_scale_auto", null, "Automatic Zoom"), 
l10n.get("page_scale_actual", null, "Actual Size"), l10n.get("page_scale_fit", null, "Page Fit"), 
l10n.get("page_scale_width", null, "Page Width")]);
+    const predefinedValuesPromise = Promise.all([l10n.get("page_scale_auto"), l10n.get("page_scale_actual"), 
l10n.get("page_scale_fit"), l10n.get("page_scale_width")]);
     let canvas = document.createElement("canvas");
     canvas.mozOpaque = true;
     let ctx = canvas.getContext("2d", {
@@ -12350,15 +13282,14 @@ class Toolbar {
 exports.Toolbar = Toolbar;
 
 /***/ }),
-/* 34 */
-/***/ (function(module, exports, __webpack_require__) {
+/* 37 */
+/***/ ((__unused_webpack_module, exports) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.ViewHistory = void 0;
 const DEFAULT_VIEW_HISTORY_CACHE_SIZE = 20;
 
@@ -12446,24 +13377,25 @@ class ViewHistory {
 exports.ViewHistory = ViewHistory;
 
 /***/ }),
-/* 35 */
-/***/ (function(module, exports, __webpack_require__) {
+/* 38 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.GenericCom = void 0;
 
-var _app = __webpack_require__(1);
+var _app = __webpack_require__(3);
 
-var _preferences = __webpack_require__(36);
+var _preferences = __webpack_require__(39);
 
-var _download_manager = __webpack_require__(37);
+var _download_manager = __webpack_require__(40);
 
-var _genericl10n = __webpack_require__(38);
+var _genericl10n = __webpack_require__(41);
+
+var _generic_scripting = __webpack_require__(43);
 
 ;
 const GenericCom = {};
@@ -12482,7 +13414,7 @@ class GenericPreferences extends _preferences.BasePreferences {
 
 class GenericExternalServices extends _app.DefaultExternalServices {
   static createDownloadManager(options) {
-    return new _download_manager.DownloadManager(options);
+    return new _download_manager.DownloadManager();
   }
 
   static createPreferences() {
@@ -12492,7 +13424,13 @@ class GenericExternalServices extends _app.DefaultExternalServices {
   static createL10n({
     locale = "en-US"
   }) {
-    return new _genericl10n.GenericL10n(locale);
+    return new _genericl10n.GenericL10n(locale);
+  }
+
+  static createScripting({
+    sandboxBundleSrc
+  }) {
+    return new _generic_scripting.GenericScripting(sandboxBundleSrc);
   }
 
 }
@@ -12500,51 +13438,17 @@ class GenericExternalServices extends _app.DefaultExternalServices {
 _app.PDFViewerApplication.externalServices = GenericExternalServices;
 
 /***/ }),
-/* 36 */
-/***/ (function(module, exports, __webpack_require__) {
+/* 39 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.BasePreferences = void 0;
 
-var _app_options = __webpack_require__(3);
-
-let defaultPreferences = null;
-
-function getDefaultPreferences() {
-  if (!defaultPreferences) {
-    defaultPreferences = Promise.resolve({
-      "cursorToolOnLoad": 0,
-      "defaultZoomValue": "",
-      "disablePageLabels": false,
-      "enablePermissions": false,
-      "enablePrintAutoRotate": false,
-      "enableWebGL": false,
-      "externalLinkTarget": 0,
-      "historyUpdateUrl": false,
-      "ignoreDestinationZoom": false,
-      "pdfBugEnabled": false,
-      "renderer": "canvas",
-      "renderInteractiveForms": true,
-      "sidebarViewOnLoad": -1,
-      "scrollModeOnLoad": -1,
-      "spreadModeOnLoad": -1,
-      "textLayerMode": 1,
-      "useOnlyCssZoom": false,
-      "viewOnLoad": 0,
-      "disableAutoFetch": false,
-      "disableFontFace": false,
-      "disableRange": false,
-      "disableStream": false
-    });
-  }
-
-  return defaultPreferences;
-}
+var _app_options = __webpack_require__(1);
 
 class BasePreferences {
   constructor() {
@@ -12552,30 +13456,45 @@ class BasePreferences {
       throw new Error("Cannot initialize BasePreferences.");
     }
 
-    this.prefs = null;
-    this._initializedPromise = getDefaultPreferences().then(defaults => {
-      Object.defineProperty(this, "defaults", {
-        value: Object.freeze(defaults),
-        writable: false,
-        enumerable: true,
-        configurable: false
-      });
-      this.prefs = Object.assign(Object.create(null), defaults);
-      return this._readFromStorage(defaults);
-    }).then(prefs => {
-      if (!prefs) {
-        return;
-      }
-
-      for (const name in prefs) {
-        const defaultValue = this.defaults[name],
-              prefValue = prefs[name];
+    Object.defineProperty(this, "defaults", {
+      value: Object.freeze({
+        "cursorToolOnLoad": 0,
+        "defaultZoomValue": "",
+        "disablePageLabels": false,
+        "enablePermissions": false,
+        "enablePrintAutoRotate": true,
+        "enableScripting": true,
+        "enableWebGL": false,
+        "externalLinkTarget": 0,
+        "historyUpdateUrl": false,
+        "ignoreDestinationZoom": false,
+        "pdfBugEnabled": false,
+        "renderer": "canvas",
+        "renderInteractiveForms": true,
+        "sidebarViewOnLoad": -1,
+        "scrollModeOnLoad": -1,
+        "spreadModeOnLoad": -1,
+        "textLayerMode": 1,
+        "useOnlyCssZoom": false,
+        "viewerCssTheme": 0,
+        "viewOnLoad": 0,
+        "disableAutoFetch": false,
+        "disableFontFace": false,
+        "disableRange": false,
+        "disableStream": false
+      }),
+      writable: false,
+      enumerable: true,
+      configurable: false
+    });
+    this.prefs = Object.create(null);
+    this._initializedPromise = this._readFromStorage(this.defaults).then(prefs => {
+      for (const name in this.defaults) {
+        const prefValue = prefs?.[name];
 
-        if (defaultValue === undefined || typeof prefValue !== typeof defaultValue) {
-          continue;
+        if (typeof prefValue === typeof this.defaults[name]) {
+          this.prefs[name] = prefValue;
         }
-
-        this.prefs[name] = prefValue;
       }
     });
   }
@@ -12590,7 +13509,7 @@ class BasePreferences {
 
   async reset() {
     await this._initializedPromise;
-    this.prefs = Object.assign(Object.create(null), this.defaults);
+    this.prefs = Object.create(null);
     return this._writeToStorage(this.defaults);
   }
 
@@ -12611,7 +13530,7 @@ class BasePreferences {
       if (valueType === "number" && defaultType === "string") {
         value = value.toString();
       } else {
-        throw new Error(`Set preference: "${value}" is a ${valueType}, ` + `expected a ${defaultType}.`);
+        throw new Error(`Set preference: "${value}" is a ${valueType}, expected a ${defaultType}.`);
       }
     } else {
       if (valueType === "number" && !Number.isInteger(value)) {
@@ -12625,24 +13544,26 @@ class BasePreferences {
 
   async get(name) {
     await this._initializedPromise;
-    const defaultValue = this.defaults[name];
+    const defaultValue = this.defaults[name],
+          prefValue = this.prefs[name];
 
     if (defaultValue === undefined) {
       throw new Error(`Get preference: "${name}" is undefined.`);
-    } else {
-      const prefValue = this.prefs[name];
-
-      if (prefValue !== undefined) {
-        return prefValue;
-      }
     }
 
-    return defaultValue;
+    return prefValue !== undefined ? prefValue : defaultValue;
   }
 
   async getAll() {
     await this._initializedPromise;
-    return Object.assign(Object.create(null), this.defaults, this.prefs);
+    const obj = Object.create(null);
+
+    for (const name in this.defaults) {
+      const prefValue = this.prefs[name];
+      obj[name] = prefValue !== undefined ? prefValue : this.defaults[name];
+    }
+
+    return obj;
   }
 
 }
@@ -12650,20 +13571,19 @@ class BasePreferences {
 exports.BasePreferences = BasePreferences;
 
 /***/ }),
-/* 37 */
-/***/ (function(module, exports, __webpack_require__) {
+/* 40 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.DownloadManager = void 0;
 
 var _pdfjsLib = __webpack_require__(5);
 
-var _viewer_compatibility = __webpack_require__(4);
+var _viewer_compatibility = __webpack_require__(2);
 
 ;
 
@@ -12687,6 +13607,10 @@ function download(blobUrl, filename) {
 }
 
 class DownloadManager {
+  constructor() {
+    this._openBlobUrls = new WeakMap();
+  }
+
   downloadUrl(url, filename) {
     if (!(0, _pdfjsLib.createValidAbsoluteUrl)(url, "http://example.com";)) {
       return;
@@ -12696,26 +13620,44 @@ class DownloadManager {
   }
 
   downloadData(data, filename, contentType) {
-    if (navigator.msSaveBlob) {
-      navigator.msSaveBlob(new Blob([data], {
-        type: contentType
-      }), filename);
-      return;
-    }
-
     const blobUrl = (0, _pdfjsLib.createObjectURL)(data, contentType, 
_viewer_compatibility.viewerCompatibilityParams.disableCreateObjectURL);
     download(blobUrl, filename);
   }
 
-  download(blob, url, filename, sourceEventType = "download") {
-    if (navigator.msSaveBlob) {
-      if (!navigator.msSaveBlob(blob, filename)) {
-        this.downloadUrl(url, filename);
+  openOrDownloadData(element, data, filename) {
+    const isPdfData = (0, _pdfjsLib.isPdfFile)(filename);
+    const contentType = isPdfData ? "application/pdf" : "";
+
+    if (isPdfData && !_viewer_compatibility.viewerCompatibilityParams.disableCreateObjectURL) {
+      let blobUrl = this._openBlobUrls.get(element);
+
+      if (!blobUrl) {
+        blobUrl = URL.createObjectURL(new Blob([data], {
+          type: contentType
+        }));
+
+        this._openBlobUrls.set(element, blobUrl);
       }
 
-      return;
+      let viewerUrl;
+      viewerUrl = "?file=" + encodeURIComponent(blobUrl + "#" + filename);
+
+      try {
+        window.open(viewerUrl);
+        return true;
+      } catch (ex) {
+        console.error(`openOrDownloadData: ${ex}`);
+        URL.revokeObjectURL(blobUrl);
+
+        this._openBlobUrls.delete(element);
+      }
     }
 
+    this.downloadData(data, filename, contentType);
+    return false;
+  }
+
+  download(blob, url, filename, sourceEventType = "download") {
     if (_viewer_compatibility.viewerCompatibilityParams.disableCreateObjectURL) {
       this.downloadUrl(url, filename);
       return;
@@ -12730,18 +13672,19 @@ class DownloadManager {
 exports.DownloadManager = DownloadManager;
 
 /***/ }),
-/* 38 */
-/***/ (function(module, exports, __webpack_require__) {
+/* 41 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
+}));
 exports.GenericL10n = void 0;
 
-__webpack_require__(39);
+__webpack_require__(42);
+
+var _l10n_utils = __webpack_require__(30);
 
 const webL10n = document.webL10n;
 
@@ -12765,9 +13708,9 @@ class GenericL10n {
     return l10n.getDirection();
   }
 
-  async get(property, args, fallback) {
+  async get(key, args = null, fallback = (0, _l10n_utils.getL10nFallback)(key, args)) {
     const l10n = await this._ready;
-    return l10n.get(property, args, fallback);
+    return l10n.get(key, args, fallback);
   }
 
   async translate(element) {
@@ -12780,10 +13723,9 @@ class GenericL10n {
 exports.GenericL10n = GenericL10n;
 
 /***/ }),
-/* 39 */
-/***/ (function(module, exports, __webpack_require__) {
+/* 42 */
+/***/ (() => {
 
-"use strict";
 
 
 document.webL10n = function (window, document, undefined) {
@@ -13603,22 +14545,87 @@ document.webL10n = function (window, document, undefined) {
 }(window, document);
 
 /***/ }),
-/* 40 */
-/***/ (function(module, exports, __webpack_require__) {
+/* 43 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 
-"use strict";
 
 
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
   value: true
-});
-exports.PDFPrintService = PDFPrintService;
+}));
+exports.docPropertiesLookup = docPropertiesLookup;
+exports.GenericScripting = void 0;
+
+var _pdfjsLib = __webpack_require__(5);
 
-var _ui_utils = __webpack_require__(2);
+async function docPropertiesLookup(pdfDocument) {
+  const url = "",
+        baseUrl = url.split("#")[0];
+  let {
+    info,
+    metadata,
+    contentDispositionFilename,
+    contentLength
+  } = await pdfDocument.getMetadata();
+
+  if (!contentLength) {
+    const {
+      length
+    } = await pdfDocument.getDownloadInfo();
+    contentLength = length;
+  }
+
+  return { ...info,
+    baseURL: baseUrl,
+    filesize: contentLength,
+    filename: contentDispositionFilename || (0, _pdfjsLib.getPdfFilenameFromUrl)(url),
+    metadata: metadata?.getRaw(),
+    authors: metadata?.get("dc:creator"),
+    numPages: pdfDocument.numPages,
+    URL: url
+  };
+}
+
+class GenericScripting {
+  constructor(sandboxBundleSrc) {
+    this._ready = (0, _pdfjsLib.loadScript)(sandboxBundleSrc, true).then(() => {
+      return window.pdfjsSandbox.QuickJSSandbox();
+    });
+  }
+
+  async createSandbox(data) {
+    const sandbox = await this._ready;
+    sandbox.create(data);
+  }
+
+  async dispatchEventInSandbox(event) {
+    const sandbox = await this._ready;
+    sandbox.dispatchEvent(event);
+  }
+
+  async destroySandbox() {
+    const sandbox = await this._ready;
+    sandbox.nukeSandbox();
+  }
+
+}
+
+exports.GenericScripting = GenericScripting;
+
+/***/ }),
+/* 44 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports.PDFPrintService = PDFPrintService;
 
-var _app = __webpack_require__(1);
+var _app = __webpack_require__(3);
 
-var _viewer_compatibility = __webpack_require__(4);
+var _viewer_compatibility = __webpack_require__(2);
 
 let activeService = null;
 let overlayManager = null;
@@ -13628,8 +14635,6 @@ function renderPage(activeServiceOnEntry, pdfDocument, pageNumber, size, printRe
   const PRINT_UNITS = printResolution / 72.0;
   scratchCanvas.width = Math.floor(size.width * PRINT_UNITS);
   scratchCanvas.height = Math.floor(size.height * PRINT_UNITS);
-  const width = Math.floor(size.width * _ui_utils.CSS_UNITS) + "px";
-  const height = Math.floor(size.height * _ui_utils.CSS_UNITS) + "px";
   const ctx = scratchCanvas.getContext("2d");
   ctx.save();
   ctx.fillStyle = "rgb(255, 255, 255)";
@@ -13648,11 +14653,6 @@ function renderPage(activeServiceOnEntry, pdfDocument, pageNumber, size, printRe
       optionalContentConfigPromise
     };
     return pdfPage.render(renderContext).promise;
-  }).then(function () {
-    return {
-      width,
-      height
-    };
   });
 }
 
@@ -13662,7 +14662,7 @@ function PDFPrintService(pdfDocument, pagesOverview, printContainer, printResolu
   this.printContainer = printContainer;
   this._printResolution = printResolution || 150;
   this._optionalContentConfigPromise = optionalContentConfigPromise || 
pdfDocument.getOptionalContentConfig();
-  this.l10n = l10n || _ui_utils.NullL10n;
+  this.l10n = l10n;
   this.currentPage = -1;
   this.scratchCanvas = document.createElement("canvas");
 }
@@ -13682,7 +14682,7 @@ PDFPrintService.prototype = {
 
     this.pageStyleSheet = document.createElement("style");
     const pageSize = this.pagesOverview[0];
-    this.pageStyleSheet.textContent = "@supports ((size:A4) and (size:1pt 1pt)) {" + "@page { size: " + 
pageSize.width + "pt " + pageSize.height + "pt;}" + "}";
+    this.pageStyleSheet.textContent = "@page { size: " + pageSize.width + "pt " + pageSize.height + "pt;}";
     body.appendChild(this.pageStyleSheet);
   },
 
@@ -13734,11 +14734,9 @@ PDFPrintService.prototype = {
     return new Promise(renderNextPage);
   },
 
-  useRenderedPage(printItem) {
+  useRenderedPage() {
     this.throwIfInactive();
     const img = document.createElement("img");
-    img.style.width = printItem.width;
-    img.style.height = printItem.height;
     const scratchCanvas = this.scratchCanvas;
 
     if ("toBlob" in scratchCanvas && 
!_viewer_compatibility.viewerCompatibilityParams.disableCreateObjectURL) {
@@ -13843,7 +14841,7 @@ function renderProgress(index, total, l10n) {
   progressBar.value = progress;
   l10n.get("print_progress_percent", {
     progress
-  }, progress + "%").then(msg => {
+  }).then(msg => {
     progressPerc.textContent = msg;
   });
 }
@@ -13904,5 +14902,224 @@ _app.PDFPrintServiceFactory.instance = {
 };
 
 /***/ })
-/******/ ]);
+/******/       ]);
+/************************************************************************/
+/******/       // The module cache
+/******/       var __webpack_module_cache__ = {};
+/******/       
+/******/       // The require function
+/******/       function __webpack_require__(moduleId) {
+/******/               // Check if module is in cache
+/******/               var cachedModule = __webpack_module_cache__[moduleId];
+/******/               if (cachedModule !== undefined) {
+/******/                       return cachedModule.exports;
+/******/               }
+/******/               // Create a new module (and put it into the cache)
+/******/               var module = __webpack_module_cache__[moduleId] = {
+/******/                       // no module.id needed
+/******/                       // no module.loaded needed
+/******/                       exports: {}
+/******/               };
+/******/       
+/******/               // Execute the module function
+/******/               __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
+/******/       
+/******/               // Return the exports of the module
+/******/               return module.exports;
+/******/       }
+/******/       
+/************************************************************************/
+var __webpack_exports__ = {};
+// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the 
chunk.
+(() => {
+var exports = __webpack_exports__;
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+Object.defineProperty(exports, "PDFViewerApplicationOptions", ({
+  enumerable: true,
+  get: function () {
+    return _app_options.AppOptions;
+  }
+}));
+Object.defineProperty(exports, "PDFViewerApplication", ({
+  enumerable: true,
+  get: function () {
+    return _app.PDFViewerApplication;
+  }
+}));
+
+var _app_options = __webpack_require__(1);
+
+var _app = __webpack_require__(3);
+
+const pdfjsVersion = '2.8.335';
+const pdfjsBuild = '228adbf67';
+window.PDFViewerApplication = _app.PDFViewerApplication;
+window.PDFViewerApplicationOptions = _app_options.AppOptions;
+;
+;
+{
+  __webpack_require__(38);
+}
+;
+{
+  __webpack_require__(44);
+}
+
+function getViewerConfiguration() {
+  let errorWrapper = null;
+  errorWrapper = {
+    container: document.getElementById("errorWrapper"),
+    errorMessage: document.getElementById("errorMessage"),
+    closeButton: document.getElementById("errorClose"),
+    errorMoreInfo: document.getElementById("errorMoreInfo"),
+    moreInfoButton: document.getElementById("errorShowMore"),
+    lessInfoButton: document.getElementById("errorShowLess")
+  };
+  return {
+    appContainer: document.body,
+    mainContainer: document.getElementById("viewerContainer"),
+    viewerContainer: document.getElementById("viewer"),
+    eventBus: null,
+    toolbar: {
+      container: document.getElementById("toolbarViewer"),
+      numPages: document.getElementById("numPages"),
+      pageNumber: document.getElementById("pageNumber"),
+      scaleSelectContainer: document.getElementById("scaleSelectContainer"),
+      scaleSelect: document.getElementById("scaleSelect"),
+      customScaleOption: document.getElementById("customScaleOption"),
+      previous: document.getElementById("previous"),
+      next: document.getElementById("next"),
+      zoomIn: document.getElementById("zoomIn"),
+      zoomOut: document.getElementById("zoomOut"),
+      viewFind: document.getElementById("viewFind"),
+      openFile: document.getElementById("openFile"),
+      print: document.getElementById("print"),
+      presentationModeButton: document.getElementById("presentationMode"),
+      download: document.getElementById("download"),
+      viewBookmark: document.getElementById("viewBookmark")
+    },
+    secondaryToolbar: {
+      toolbar: document.getElementById("secondaryToolbar"),
+      toggleButton: document.getElementById("secondaryToolbarToggle"),
+      toolbarButtonContainer: document.getElementById("secondaryToolbarButtonContainer"),
+      presentationModeButton: document.getElementById("secondaryPresentationMode"),
+      openFileButton: document.getElementById("secondaryOpenFile"),
+      printButton: document.getElementById("secondaryPrint"),
+      downloadButton: document.getElementById("secondaryDownload"),
+      viewBookmarkButton: document.getElementById("secondaryViewBookmark"),
+      firstPageButton: document.getElementById("firstPage"),
+      lastPageButton: document.getElementById("lastPage"),
+      pageRotateCwButton: document.getElementById("pageRotateCw"),
+      pageRotateCcwButton: document.getElementById("pageRotateCcw"),
+      cursorSelectToolButton: document.getElementById("cursorSelectTool"),
+      cursorHandToolButton: document.getElementById("cursorHandTool"),
+      scrollVerticalButton: document.getElementById("scrollVertical"),
+      scrollHorizontalButton: document.getElementById("scrollHorizontal"),
+      scrollWrappedButton: document.getElementById("scrollWrapped"),
+      spreadNoneButton: document.getElementById("spreadNone"),
+      spreadOddButton: document.getElementById("spreadOdd"),
+      spreadEvenButton: document.getElementById("spreadEven"),
+      documentPropertiesButton: document.getElementById("documentProperties")
+    },
+    sidebar: {
+      outerContainer: document.getElementById("outerContainer"),
+      viewerContainer: document.getElementById("viewerContainer"),
+      toggleButton: document.getElementById("sidebarToggle"),
+      thumbnailButton: document.getElementById("viewThumbnail"),
+      outlineButton: document.getElementById("viewOutline"),
+      attachmentsButton: document.getElementById("viewAttachments"),
+      layersButton: document.getElementById("viewLayers"),
+      thumbnailView: document.getElementById("thumbnailView"),
+      outlineView: document.getElementById("outlineView"),
+      attachmentsView: document.getElementById("attachmentsView"),
+      layersView: document.getElementById("layersView"),
+      outlineOptionsContainer: document.getElementById("outlineOptionsContainer"),
+      currentOutlineItemButton: document.getElementById("currentOutlineItem")
+    },
+    sidebarResizer: {
+      outerContainer: document.getElementById("outerContainer"),
+      resizer: document.getElementById("sidebarResizer")
+    },
+    findBar: {
+      bar: document.getElementById("findbar"),
+      toggleButton: document.getElementById("viewFind"),
+      findField: document.getElementById("findInput"),
+      highlightAllCheckbox: document.getElementById("findHighlightAll"),
+      caseSensitiveCheckbox: document.getElementById("findMatchCase"),
+      entireWordCheckbox: document.getElementById("findEntireWord"),
+      findMsg: document.getElementById("findMsg"),
+      findResultsCount: document.getElementById("findResultsCount"),
+      findPreviousButton: document.getElementById("findPrevious"),
+      findNextButton: document.getElementById("findNext")
+    },
+    passwordOverlay: {
+      overlayName: "passwordOverlay",
+      container: document.getElementById("passwordOverlay"),
+      label: document.getElementById("passwordText"),
+      input: document.getElementById("password"),
+      submitButton: document.getElementById("passwordSubmit"),
+      cancelButton: document.getElementById("passwordCancel")
+    },
+    documentProperties: {
+      overlayName: "documentPropertiesOverlay",
+      container: document.getElementById("documentPropertiesOverlay"),
+      closeButton: document.getElementById("documentPropertiesClose"),
+      fields: {
+        fileName: document.getElementById("fileNameField"),
+        fileSize: document.getElementById("fileSizeField"),
+        title: document.getElementById("titleField"),
+        author: document.getElementById("authorField"),
+        subject: document.getElementById("subjectField"),
+        keywords: document.getElementById("keywordsField"),
+        creationDate: document.getElementById("creationDateField"),
+        modificationDate: document.getElementById("modificationDateField"),
+        creator: document.getElementById("creatorField"),
+        producer: document.getElementById("producerField"),
+        version: document.getElementById("versionField"),
+        pageCount: document.getElementById("pageCountField"),
+        pageSize: document.getElementById("pageSizeField"),
+        linearized: document.getElementById("linearizedField")
+      }
+    },
+    errorWrapper,
+    printContainer: document.getElementById("printContainer"),
+    openFileInputName: "fileInput",
+    debuggerScriptPath: "./debugger.js"
+  };
+}
+
+function webViewerLoad() {
+  const config = getViewerConfiguration();
+  const event = document.createEvent("CustomEvent");
+  event.initCustomEvent("webviewerloaded", true, true, {
+    source: window
+  });
+
+  try {
+    parent.document.dispatchEvent(event);
+  } catch (ex) {
+    console.error(`webviewerloaded: ${ex}`);
+    document.dispatchEvent(event);
+  }
+
+  _app.PDFViewerApplication.run(config);
+}
+
+if (document.blockUnblockOnload) {
+  document.blockUnblockOnload(true);
+}
+
+if (document.readyState === "interactive" || document.readyState === "complete") {
+  webViewerLoad();
+} else {
+  document.addEventListener("DOMContentLoaded", webViewerLoad, true);
+}
+})();
+
+/******/ })()
+;
 //# sourceMappingURL=viewer.js.map


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]