PageSourceSearch

https://www.giiisp.com/static/pdf/pdf.js

js giiisp.com collected 2026-10-07 22:32:39 UTC 711,549 bytes, 23,082 lines download raw bytes

1/**
2 * @licstart The following is the entire license notice for the
3 * JavaScript code in this page
4 *
5 * Copyright 2023 Mozilla Foundation
6 *
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
10 *
11 *     http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 *
19 * @licend The above is the entire license notice for the
20 * JavaScript code in this page
21 */
22
23(function webpackUniversalModuleDefinition(root, factory) {
24
25	if(typeof exports === 'object' && typeof module === 'object')
26		module.exports = root.pdfjsLib = factory();
27	else if(typeof define === 'function' && define.amd)
28		define("pdfjs-dist/build/pdf", [], () => { return (root.pdfjsLib = factory()); });
29	else if(typeof exports === 'object')
30		exports["pdfjs-dist/build/pdf"] = root.pdfjsLib = factory();
31	else
32		root["pdfjs-dist/build/pdf"] = root.pdfjsLib = factory();
33})(globalThis, () => {
34return /******/ (() => { // webpackBootstrap
35/******/ 	"use strict";
36/******/ 	var __webpack_modules__ = ([
37/* 0 */,
38/* 1 */
39/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
40
41
42
43Object.defineProperty(exports, "__esModule", ({
44  value: true
45}));
46exports.VerbosityLevel = exports.Util = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.TextRenderingMode = exports.RenderingIntentFlag = exports.PromiseCapability = exp
46orts.PermissionFlag = exports.PasswordResponses = exports.PasswordException = exports.PageActionEventType = exports.OPS = exports.MissingPDFException = exports.MAX_IMAGE_SIZE_TO_CACHE = exports.LINE_FACTOR = exports.LINE_DESCENT_FACTOR = exports.InvalidPDFException = exports.ImageKind = exports.IDENTITY_MATRIX = exports.FormatError = exports.FeatureTest = exports.FONT_IDENTITY_MATRIX = exports.DocumentActionEventType = exports.CMapCompressionType = exports.BaseException = exports.BASELINE_FACTOR = exports.AnnotationType = exports.AnnotationReplyType = exports.AnnotationPrefix = exports.AnnotationMode = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationEditorType = exports.AnnotationEditorPrefix = exports.AnnotationEditorParamsType = exports.AnnotationBorderStyleType = exports.AnnotationActionEventType = exports.AbortException = void 0;
47exports.assert = assert;
48exports.bytesToString = bytesToString;
49exports.createValidAbsoluteUrl = createValidAbsoluteUrl;
50exports.getModificationDate = getModificationDate;
51exports.getUuid = getUuid;
52exports.getVerbosityLevel = getVerbosityLevel;
53exports.info = info;
54exports.isArrayBuffer = isArrayBuffer;
55exports.isArrayEqual = isArrayEqual;
56exports.isNodeJS = void 0;
57exports.normalizeUnicode = normalizeUnicode;
58exports.objectFromMap = objectFromMap;
59exports.objectSize = objectSize;
60exports.setVerbosityLevel = setVerbosityLevel;
61exports.shadow = shadow;
62exports.string32 = string32;
63exports.stringToBytes = stringToBytes;
64exports.stringToPDFString = stringToPDFString;
65exports.stringToUTF8String = stringToUTF8String;
66exports.unreachable = unreachable;
67exports.utf8StringToString = utf8StringToString;
68exports.warn = warn;
69__w_pdfjs_require__(2);
70__w_pdfjs_require__(84);
71__w_pdfjs_require__(86);
72__w_pdfjs_require__(87);
73__w_pdfjs_require__(89);
74__w_pdfjs_require__(93);
75__w_pdfjs_require__(101);
76__w_pdfjs_require__(102);
77__w_pdfjs_require__(105);
78__w_pdfjs_require__(107);
79__w_pdfjs_require__(109);
80__w_pdfjs_require__(113);
81__w_pdfjs_require__(116);
82__w_pdfjs_require__(123);
83const isNodeJS = typeof process === "object" && process + "" === "[object process]" && !process.versions.nw && !(process.versions.electron && process.type && process.type !== "browser");
vendor: 4,649 bytes, lines 84-291
84exports.isNodeJS = isNodeJS;
85const IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0];
86exports.IDENTITY_MATRIX = IDENTITY_MATRIX;
87const FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0];
88exports.FONT_IDENTITY_MATRIX = FONT_IDENTITY_MATRIX;
89const MAX_IMAGE_SIZE_TO_CACHE = 10e6;
90exports.MAX_IMAGE_SIZE_TO_CACHE = MAX_IMAGE_SIZE_TO_CACHE;
91const LINE_FACTOR = 1.35;
92exports.LINE_FACTOR = LINE_FACTOR;
93const LINE_DESCENT_FACTOR = 0.35;
94exports.LINE_DESCENT_FACTOR = LINE_DESCENT_FACTOR;
95const BASELINE_FACTOR = LINE_DESCENT_FACTOR / LINE_FACTOR;
96exports.BASELINE_FACTOR = BASELINE_FACTOR;
97const RenderingIntentFlag = {
98  ANY: 0x01,
99  DISPLAY: 0x02,
100  PRINT: 0x04,
101  SAVE: 0x08,
102  ANNOTATIONS_FORMS: 0x10,
103  ANNOTATIONS_STORAGE: 0x20,
104  ANNOTATIONS_DISABLE: 0x40,
105  OPLIST: 0x100
106};
107exports.RenderingIntentFlag = RenderingIntentFlag;
108const AnnotationMode = {
109  DISABLE: 0,
110  ENABLE: 1,
111  ENABLE_FORMS: 2,
112  ENABLE_STORAGE: 3
113};
114exports.AnnotationMode = AnnotationMode;
115const AnnotationEditorPrefix = "pdfjs_internal_editor_";
116exports.AnnotationEditorPrefix = AnnotationEditorPrefix;
117const AnnotationEditorType = {
118  DISABLE: -1,
119  NONE: 0,
120  FREETEXT: 3,
121  STAMP: 13,
122  INK: 15
123};
124exports.AnnotationEditorType = AnnotationEditorType;
125const AnnotationEditorParamsType = {
126  RESIZE: 1,
127  CREATE: 2,
128  FREETEXT_SIZE: 11,
129  FREETEXT_COLOR: 12,
130  FREETEXT_OPACITY: 13,
131  INK_COLOR: 21,
132  INK_THICKNESS: 22,
133  INK_OPACITY: 23
134};
135exports.AnnotationEditorParamsType = AnnotationEditorParamsType;
136const PermissionFlag = {
137  PRINT: 0x04,
138  MODIFY_CONTENTS: 0x08,
139  COPY: 0x10,
140  MODIFY_ANNOTATIONS: 0x20,
141  FILL_INTERACTIVE_FORMS: 0x100,
142  COPY_FOR_ACCESSIBILITY: 0x200,
143  ASSEMBLE: 0x400,
144  PRINT_HIGH_QUALITY: 0x800
145};
146exports.PermissionFlag = PermissionFlag;
147const TextRenderingMode = {
148  FILL: 0,
149  STROKE: 1,
150  FILL_STROKE: 2,
151  INVISIBLE: 3,
152  FILL_ADD_TO_PATH: 4,
153  STROKE_ADD_TO_PATH: 5,
154  FILL_STROKE_ADD_TO_PATH: 6,
155  ADD_TO_PATH: 7,
156  FILL_STROKE_MASK: 3,
157  ADD_TO_PATH_FLAG: 4
158};
159exports.TextRenderingMode = TextRenderingMode;
160const ImageKind = {
161  GRAYSCALE_1BPP: 1,
162  RGB_24BPP: 2,
163  RGBA_32BPP: 3
164};
165exports.ImageKind = ImageKind;
166const AnnotationType = {
167  TEXT: 1,
168  LINK: 2,
169  FREETEXT: 3,
170  LINE: 4,
171  SQUARE: 5,
172  CIRCLE: 6,
173  POLYGON: 7,
174  POLYLINE: 8,
175  HIGHLIGHT: 9,
176  UNDERLINE: 10,
177  SQUIGGLY: 11,
178  STRIKEOUT: 12,
179  STAMP: 13,
180  CARET: 14,
181  INK: 15,
182  POPUP: 16,
183  FILEATTACHMENT: 17,
184  SOUND: 18,
185  MOVIE: 19,
186  WIDGET: 20,
187  SCREEN: 21,
188  PRINTERMARK: 22,
189  TRAPNET: 23,
190  WATERMARK: 24,
191  THREED: 25,
192  REDACT: 26
193};
194exports.AnnotationType = AnnotationType;
195const AnnotationReplyType = {
196  GROUP: "Group",
197  REPLY: "R"
198};
199exports.AnnotationReplyType = AnnotationReplyType;
200const AnnotationFlag = {
201  INVISIBLE: 0x01,
202  HIDDEN: 0x02,
203  PRINT: 0x04,
204  NOZOOM: 0x08,
205  NOROTATE: 0x10,
206  NOVIEW: 0x20,
207  READONLY: 0x40,
208  LOCKED: 0x80,
209  TOGGLENOVIEW: 0x100,
210  LOCKEDCONTENTS: 0x200
211};
212exports.AnnotationFlag = AnnotationFlag;
213const AnnotationFieldFlag = {
214  READONLY: 0x0000001,
215  REQUIRED: 0x0000002,
216  NOEXPORT: 0x0000004,
217  MULTILINE: 0x0001000,
218  PASSWORD: 0x0002000,
219  NOTOGGLETOOFF: 0x0004000,
220  RADIO: 0x0008000,
221  PUSHBUTTON: 0x0010000,
222  COMBO: 0x0020000,
223  EDIT: 0x0040000,
224  SORT: 0x0080000,
225  FILESELECT: 0x0100000,
226  MULTISELECT: 0x0200000,
227  DONOTSPELLCHECK: 0x0400000,
228  DONOTSCROLL: 0x0800000,
229  COMB: 0x1000000,
230  RICHTEXT: 0x2000000,
231  RADIOSINUNISON: 0x2000000,
232  COMMITONSELCHANGE: 0x4000000
233};
234exports.AnnotationFieldFlag = AnnotationFieldFlag;
235const AnnotationBorderStyleType = {
236  SOLID: 1,
237  DASHED: 2,
238  BEVELED: 3,
239  INSET: 4,
240  UNDERLINE: 5
241};
242exports.AnnotationBorderStyleType = AnnotationBorderStyleType;
243const AnnotationActionEventType = {
244  E: "Mouse Enter",
245  X: "Mouse Exit",
246  D: "Mouse Down",
247  U: "Mouse Up",
248  Fo: "Focus",
249  Bl: "Blur",
250  PO: "PageOpen",
251  PC: "PageClose",
252  PV: "PageVisible",
253  PI: "PageInvisible",
254  K: "Keystroke",
255  F: "Format",
256  V: "Validate",
257  C: "Calculate"
258};
259exports.AnnotationActionEventType = AnnotationActionEventType;
260const DocumentActionEventType = {
261  WC: "WillClose",
262  WS: "WillSave",
263  DS: "DidSave",
264  WP: "WillPrint",
265  DP: "DidPrint"
266};
267exports.DocumentActionEventType = DocumentActionEventType;
268const PageActionEventType = {
269  O: "PageOpen",
270  C: "PageClose"
271};
272exports.PageActionEventType = PageActionEventType;
273const VerbosityLevel = {
274  ERRORS: 0,
275  WARNINGS: 1,
276  INFOS: 5
277};
278exports.VerbosityLevel = VerbosityLevel;
279const CMapCompressionType = {
280  NONE: 0,
281  BINARY: 1
282};
283exports.CMapCompressionType = CMapCompressionType;
284const OPS = {
285  dependency: 1,
286  setLineWidth: 2,
287  setLineCap: 3,
288  setLineJoin: 4,
289  setMiterLimit: 5,
290  setDash: 6,
291  setRenderingIntent: 7,
292  setFlatness: 8,
293  setGState: 9,
294  save: 10,
295  restore: 11,
296  transform: 12,
297  moveTo: 13,
298  lineTo: 14,
299  curveTo: 15,
300  curveTo2: 16,
301  curveTo3: 17,
302  closePath: 18,
303  rectangle: 19,
304  stroke: 20,
305  closeStroke: 21,
306  fill: 22,
307  eoFill: 23,
308  fillStroke: 24,
309  eoFillStroke: 25,
310  closeFillStroke: 26,
311  closeEOFillStroke: 27,
312  endPath: 28,
313  clip: 29,
314  eoClip: 30,
315  beginText: 31,
316  endText: 32,
317  setCharSpacing: 33,
318  setWordSpacing: 34,
319  setHScale: 35,
320  setLeading: 36,
321  setFont: 37,
322  setTextRenderingMode: 38,
323  setTextRise: 39,
324  moveText: 40,
325  setLeadingMoveText: 41,
326  setTextMatrix: 42,
327  nextLine: 43,
328  showText: 44,
329  showSpacedText: 45,
330  nextLineShowText: 46,
331  nextLineSetSpacingShowText: 47,
332  setCharWidth: 48,
333  setCharWidthAndBounds: 49,
334  setStrokeColorSpace: 50,
335  setFillColorSpace: 51,
336  setStrokeColor: 52,
337  setStrokeColorN: 53,
338  setFillColor: 54,
339  setFillColorN: 55,
340  setStrokeGray: 56,
341  setFillGray: 57,
342  setStrokeRGBColor: 58,
343  setFillRGBColor: 59,
344  setStrokeCMYKColor: 60,
345  setFillCMYKColor: 61,
346  shadingFill: 62,
347  beginInlineImage: 63,
348  beginImageData: 64,
349  endInlineImage: 65,
350  paintXObject: 66,
351  markPoint: 67,
352  markPointProps: 68,
353  beginMarkedContent: 69,
354  beginMarkedContentProps: 70,
355  endMarkedContent: 71,
356  beginCompat: 72,
357  endCompat: 73,
358  paintFormXObjectBegin: 74,
359  paintFormXObjectEnd: 75,
360  beginGroup: 76,
361  endGroup: 77,
362  beginAnnotation: 80,
363  endAnnotation: 81,
364  paintImageMaskXObject: 83,
365  paintImageMaskXObjectGroup: 84,
366  paintImageXObject: 85,
367  paintInlineImageXObject: 86,
368  paintInlineImageXObjectGroup: 87,
369  paintImageXObjectRepeat: 88,
370  paintImageMaskXObjectRepeat: 89,
371  paintSolidColorImageMask: 90,
372  constructPath: 91
373};
374exports.OPS = OPS;
375const PasswordResponses = {
376  NEED_PASSWORD: 1,
377  INCORRECT_PASSWORD: 2
378};
379exports.PasswordResponses = PasswordResponses;
380let verbosity = VerbosityLevel.WARNINGS;
381function setVerbosityLevel(level) {
382  if (Number.isInteger(level)) {
383    verbosity = level;
384  }
385}
386function getVerbosityLevel() {
387  return verbosity;
388}
389function info(msg) {
390  if (verbosity >= VerbosityLevel.INFOS) {
391    console.log(`Info: ${msg}`);
392  }
393}
394function warn(msg) {
395  if (verbosity >= VerbosityLevel.WARNINGS) {
396    console.log(`Warning: ${msg}`);
397  }
398}
399function unreachable(msg) {
400  throw new Error(msg);
401}
402function assert(cond, msg) {
403  if (!cond) {
404    unreachable(msg);
405  }
406}
407function _isValidProtocol(url) {
408  switch (url?.protocol) {
409    case "http:":
410    case "https:":
411    case "ftp:":
412    case "mailto:":
413    case "tel:":
414      return true;
415    default:
416      return false;
417  }
418}
419function createValidAbsoluteUrl(url) {
420  let baseUrl = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
421  let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
422  if (!url) {
423    return null;
424  }
425  try {
426    if (options && typeof url === "string") {
427      if (options.addDefaultProtocol && url.startsWith("www.")) {
428        const dots = url.match(/\./g);
429        if (dots?.length >= 2) {
430          url = `http://${url}`;
431        }
432      }
433      if (options.tryConvertEncoding) {
434        try {
435          url = stringToUTF8String(url);
436        } catch {}
437      }
438    }
439    const absoluteUrl = baseUrl ? new URL(url, baseUrl) : new URL(url);
440    if (_isValidProtocol(absoluteUrl)) {
441      return absoluteUrl;
442    }
443  } catch {}
444  return null;
445}
446function shadow(obj, prop, value) {
447  let nonSerializable = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
448  Object.defineProperty(obj, prop, {
449    value,
450    enumerable: !nonSerializable,
451    configurable: true,
452    writable: false
453  });
454  return value;
455}
456const BaseException = function BaseExceptionClosure() {
457  function BaseException(message, name) {
458    if (this.constructor === BaseException) {
459      unreachable("Cannot initialize BaseException.");
460    }
461    this.message = message;
462    this.name = name;
463  }
464  BaseException.prototype = new Error();
465  BaseException.constructor = BaseException;
466  return BaseException;
467}();
468exports.BaseException = BaseException;
469class PasswordException extends BaseException {
470  constructor(msg, code) {
471    super(msg, "PasswordException");
472    this.code = code;
473  }
474}
475exports.PasswordException = PasswordException;
476class UnknownErrorException extends BaseException {
477  constructor(msg, details) {
478    super(msg, "UnknownErrorException");
479    this.details = details;
480  }
481}
482exports.UnknownErrorException = UnknownErrorException;
483class InvalidPDFException extends BaseException {
484  constructor(msg) {
485    super(msg, "InvalidPDFException");
486  }
487}
488exports.InvalidPDFException = InvalidPDFException;
489class MissingPDFException extends BaseException {
490  constructor(msg) {
491    super(msg, "MissingPDFException");
492  }
493}
494exports.MissingPDFException = MissingPDFException;
495class UnexpectedResponseException extends BaseException {
496  constructor(msg, status) {
497    super(msg, "UnexpectedResponseException");
498    this.status = status;
499  }
500}
501exports.UnexpectedResponseException = UnexpectedResponseException;
502class FormatError extends BaseException {
503  constructor(msg) {
504    super(msg, "FormatError");
505  }
506}
507exports.FormatError = FormatError;
508class AbortException extends BaseException {
509  constructor(msg) {
510    super(msg, "AbortException");
511  }
512}
513exports.AbortException = AbortException;
514function bytesToString(bytes) {
515  if (typeof bytes !== "object" || bytes?.length === undefined) {
516    unreachable("Invalid argument for bytesToString");
517  }
518  const length = bytes.length;
519  const MAX_ARGUMENT_COUNT = 8192;
520  if (length < MAX_ARGUMENT_COUNT) {
521    return String.fromCharCode.apply(null, bytes);
522  }
523  const strBuf = [];
524  for (let i = 0; i < length; i += MAX_ARGUMENT_COUNT) {
525    const chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length);
526    const chunk = bytes.subarray(i, chunkEnd);
527    strBuf.push(String.fromCharCode.apply(null, chunk));
528  }
529  return strBuf.join("");
530}
531function stringToBytes(str) {
532  if (typeof str !== "string") {
533    unreachable("Invalid argument for stringToBytes");
534  }
535  const length = str.length;
536  const bytes = new Uint8Array(length);
537  for (let i = 0; i < length; ++i) {
538    bytes[i] = str.charCodeAt(i) & 0xff;
vendor: 8,096 bytes, lines 539-774
539  }
540  return bytes;
541}
542function string32(value) {
543  return String.fromCharCode(value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff);
544}
545function objectSize(obj) {
546  return Object.keys(obj).length;
547}
548function objectFromMap(map) {
549  const obj = Object.create(null);
550  for (const [key, value] of map) {
551    obj[key] = value;
552  }
553  return obj;
554}
555function isLittleEndian() {
556  const buffer8 = new Uint8Array(4);
557  buffer8[0] = 1;
558  const view32 = new Uint32Array(buffer8.buffer, 0, 1);
559  return view32[0] === 1;
560}
561function isEvalSupported() {
562  try {
563    new Function("");
564    return true;
565  } catch {
566    return false;
567  }
568}
569class FeatureTest {
570  static get isLittleEndian() {
571    return shadow(this, "isLittleEndian", isLittleEndian());
572  }
573  static get isEvalSupported() {
574    return shadow(this, "isEvalSupported", isEvalSupported());
575  }
576  static get isOffscreenCanvasSupported() {
577    return shadow(this, "isOffscreenCanvasSupported", typeof OffscreenCanvas !== "undefined");
578  }
579  static get platform() {
580    if (typeof navigator === "undefined") {
581      return shadow(this, "platform", {
582        isWin: false,
583        isMac: false
584      });
585    }
586    return shadow(this, "platform", {
587      isWin: navigator.platform.includes("Win"),
588      isMac: navigator.platform.includes("Mac")
589    });
590  }
591  static get isCSSRoundSupported() {
592    return shadow(this, "isCSSRoundSupported", globalThis.CSS?.supports?.("width: round(1.5px, 1px)"));
593  }
594}
595exports.FeatureTest = FeatureTest;
596const hexNumbers = [...Array(256).keys()].map(n => n.toString(16).padStart(2, "0"));
597class Util {
598  static makeHexColor(r, g, b) {
599    return `#${hexNumbers[r]}${hexNumbers[g]}${hexNumbers[b]}`;
600  }
601  static scaleMinMax(transform, minMax) {
602    let temp;
603    if (transform[0]) {
604      if (transform[0] < 0) {
605        temp = minMax[0];
606        minMax[0] = minMax[1];
607        minMax[1] = temp;
608      }
609      minMax[0] *= transform[0];
610      minMax[1] *= transform[0];
611      if (transform[3] < 0) {
612        temp = minMax[2];
613        minMax[2] = minMax[3];
614        minMax[3] = temp;
615      }
616      minMax[2] *= transform[3];
617      minMax[3] *= transform[3];
618    } else {
619      temp = minMax[0];
620      minMax[0] = minMax[2];
621      minMax[2] = temp;
622      temp = minMax[1];
623      minMax[1] = minMax[3];
624      minMax[3] = temp;
625      if (transform[1] < 0) {
626        temp = minMax[2];
627        minMax[2] = minMax[3];
628        minMax[3] = temp;
629      }
630      minMax[2] *= transform[1];
631      minMax[3] *= transform[1];
632      if (transform[2] < 0) {
633        temp = minMax[0];
634        minMax[0] = minMax[1];
635        minMax[1] = temp;
636      }
637      minMax[0] *= transform[2];
638      minMax[1] *= transform[2];
639    }
640    minMax[0] += transform[4];
641    minMax[1] += transform[4];
642    minMax[2] += transform[5];
643    minMax[3] += transform[5];
644  }
645  static transform(m1, m2) {
646    return [m1[0] * m2[0] + m1[2] * m2[1], m1[1] * m2[0] + m1[3] * m2[1], m1[0] * m2[2] + m1[2] * m2[3], m1[1] * m2[2] + m1[3] * m2[3], m1[0] * m2[4] + m1[2] * m2[5] + m1[4], m1[1] * m2[4] + m1[3] * m2[5] + m1[5]];
647  }
648  static applyTransform(p, m) {
649    const xt = p[0] * m[0] + p[1] * m[2] + m[4];
650    const yt = p[0] * m[1] + p[1] * m[3] + m[5];
651    return [xt, yt];
652  }
653  static applyInverseTransform(p, m) {
654    const d = m[0] * m[3] - m[1] * m[2];
655    const xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d;
656    const yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d;
657    return [xt, yt];
658  }
659  static getAxialAlignedBoundingBox(r, m) {
660    const p1 = this.applyTransform(r, m);
661    const p2 = this.applyTransform(r.slice(2, 4), m);
662    const p3 = this.applyTransform([r[0], r[3]], m);
663    const p4 = this.applyTransform([r[2], r[1]], m);
664    return [Math.min(p1[0], p2[0], p3[0], p4[0]), Math.min(p1[1], p2[1], p3[1], p4[1]), Math.max(p1[0], p2[0], p3[0], p4[0]), Math.max(p1[1], p2[1], p3[1], p4[1])];
665  }
666  static inverseTransform(m) {
667    const d = m[0] * m[3] - m[1] * m[2];
668    return [m[3] / d, -m[1] / d, -m[2] / d, m[0] / d, (m[2] * m[5] - m[4] * m[3]) / d, (m[4] * m[1] - m[5] * m[0]) / d];
669  }
670  static singularValueDecompose2dScale(m) {
671    const transpose = [m[0], m[2], m[1], m[3]];
672    const a = m[0] * transpose[0] + m[1] * transpose[2];
673    const b = m[0] * transpose[1] + m[1] * transpose[3];
674    const c = m[2] * transpose[0] + m[3] * transpose[2];
675    const d = m[2] * transpose[1] + m[3] * transpose[3];
676    const first = (a + d) / 2;
677    const second = Math.sqrt((a + d) ** 2 - 4 * (a * d - c * b)) / 2;
678    const sx = first + second || 1;
679    const sy = first - second || 1;
680    return [Math.sqrt(sx), Math.sqrt(sy)];
681  }
682  static normalizeRect(rect) {
683    const r = rect.slice(0);
684    if (rect[0] > rect[2]) {
685      r[0] = rect[2];
686      r[2] = rect[0];
687    }
688    if (rect[1] > rect[3]) {
689      r[1] = rect[3];
690      r[3] = rect[1];
691    }
692    return r;
693  }
694  static intersect(rect1, rect2) {
695    const xLow = Math.max(Math.min(rect1[0], rect1[2]), Math.min(rect2[0], rect2[2]));
696    const xHigh = Math.min(Math.max(rect1[0], rect1[2]), Math.max(rect2[0], rect2[2]));
697    if (xLow > xHigh) {
698      return null;
699    }
700    const yLow = Math.max(Math.min(rect1[1], rect1[3]), Math.min(rect2[1], rect2[3]));
701    const yHigh = Math.min(Math.max(rect1[1], rect1[3]), Math.max(rect2[1], rect2[3]));
702    if (yLow > yHigh) {
703      return null;
704    }
705    return [xLow, yLow, xHigh, yHigh];
706  }
707  static bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3) {
708    const tvalues = [],
709      bounds = [[], []];
710    let a, b, c, t, t1, t2, b2ac, sqrtb2ac;
711    for (let i = 0; i < 2; ++i) {
712      if (i === 0) {
713        b = 6 * x0 - 12 * x1 + 6 * x2;
714        a = -3 * x0 + 9 * x1 - 9 * x2 + 3 * x3;
715        c = 3 * x1 - 3 * x0;
716      } else {
717        b = 6 * y0 - 12 * y1 + 6 * y2;
718        a = -3 * y0 + 9 * y1 - 9 * y2 + 3 * y3;
719        c = 3 * y1 - 3 * y0;
720      }
721      if (Math.abs(a) < 1e-12) {
722        if (Math.abs(b) < 1e-12) {
723          continue;
724        }
725        t = -c / b;
726        if (0 < t && t < 1) {
727          tvalues.push(t);
728        }
729        continue;
730      }
731      b2ac = b * b - 4 * c * a;
732      sqrtb2ac = Math.sqrt(b2ac);
733      if (b2ac < 0) {
734        continue;
735      }
736      t1 = (-b + sqrtb2ac) / (2 * a);
737      if (0 < t1 && t1 < 1) {
738        tvalues.push(t1);
739      }
740      t2 = (-b - sqrtb2ac) / (2 * a);
741      if (0 < t2 && t2 < 1) {
742        tvalues.push(t2);
743      }
744    }
745    let j = tvalues.length,
746      mt;
747    const jlen = j;
748    while (j--) {
749      t = tvalues[j];
750      mt = 1 - t;
751      bounds[0][j] = mt * mt * mt * x0 + 3 * mt * mt * t * x1 + 3 * mt * t * t * x2 + t * t * t * x3;
752      bounds[1][j] = mt * mt * mt * y0 + 3 * mt * mt * t * y1 + 3 * mt * t * t * y2 + t * t * t * y3;
753    }
754    bounds[0][jlen] = x0;
755    bounds[1][jlen] = y0;
756    bounds[0][jlen + 1] = x3;
757    bounds[1][jlen + 1] = y3;
758    bounds[0].length = bounds[1].length = jlen + 2;
759    return [Math.min(...bounds[0]), Math.min(...bounds[1]), Math.max(...bounds[0]), Math.max(...bounds[1])];
760  }
761}
762exports.Util = Util;
763const PDFStringTranslateTable = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2d8, 0x2c7, 0x2c6, 0x2d9, 0x2dd, 0x2db, 0x2da, 0x2dc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014, 0x2013, 0x192, 0x2044, 0x2039, 0x203a, 0x2212, 0x2030, 0x201e, 0x201c, 0x201d, 0x2018, 0x2019, 0x201a, 0x2122, 0xfb01, 0xfb02, 0x141, 0x152, 0x160, 0x178, 0x17d, 0x131, 0x142, 0x153, 0x161, 0x17e, 0, 0x20ac];
764function stringToPDFString(str) {
765  if (str[0] >= "\xEF") {
766    let encoding;
767    if (str[0] === "\xFE" && str[1] === "\xFF") {
768      encoding = "utf-16be";
769    } else if (str[0] === "\xFF" && str[1] === "\xFE") {
770      encoding = "utf-16le";
771    } else if (str[0] === "\xEF" && str[1] === "\xBB" && str[2] === "\xBF") {
772      encoding = "utf-8";
773    }
774    if (encoding) {
775      try {
776        const decoder = new TextDecoder(encoding, {
777          fatal: true
778        });
779        const buffer = stringToBytes(str);
780        return decoder.decode(buffer);
781      } catch (ex) {
782        warn(`stringToPDFString: "${ex}".`);
783      }
784    }
785  }
786  const strBuf = [];
787  for (let i = 0, ii = str.length; i < ii; i++) {
788    const code = PDFStringTranslateTable[str.charCodeAt(i)];
789    strBuf.push(code ? String.fromCharCode(code) : str.charAt(i));
790  }
791  return strBuf.join("");
792}
793function stringToUTF8String(str) {
794  return decodeURIComponent(escape(str));
795}
796function utf8StringToString(str) {
797  return unescape(encodeURIComponent(str));
798}
799function isArrayBuffer(v) {
800  return typeof v === "object" && v?.byteLength !== undefined;
801}
802function isArrayEqual(arr1, arr2) {
803  if (arr1.length !== arr2.length) {
804    return false;
805  }
806  for (let i = 0, ii = arr1.length; i < ii; i++) {
807    if (arr1[i] !== arr2[i]) {
808      return false;
809    }
810  }
811  return true;
812}
813function getModificationDate() {
814  let date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Date();
815  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")];
816  return buffer.join("");
817}
818class PromiseCapability {
819  #settled = false;
820  constructor() {
821    this.promise = new Promise((resolve, reject) => {
822      this.resolve = data => {
823        this.#settled = true;
824        resolve(data);
825      };
826      this.reject = reason => {
827        this.#settled = true;
828        reject(reason);
829      };
830    });
831  }
832  get settled() {
833    return this.#settled;
834  }
835}
836exports.PromiseCapability = PromiseCapability;
837let NormalizeRegex = null;
838let NormalizationMap = null;
839function normalizeUnicode(str) {
840  if (!NormalizeRegex) {
841    NormalizeRegex = /([\u00a0\u00b5\u037e\u0eb3\u2000-\u200a\u202f\u2126\ufb00-\ufb04\ufb06\ufb20-\ufb36\ufb38-\ufb3c\ufb3e\ufb40-\ufb41\ufb43-\ufb44\ufb46-\ufba1\ufba4-\ufba9\ufbae-\ufbb1\ufbd3-\ufbdc\ufbde-\ufbe7\ufbea-\ufbf8\ufbfc-\ufbfd\ufc00-\ufc5d\ufc64-\ufcf1\ufcf5-\ufd3d\ufd88\ufdf4\ufdfa-\ufdfb\ufe71\ufe77\ufe79\ufe7b\ufe7d]+)|(\ufb05+)/gu;
842    NormalizationMap = new Map([["ſt", "ſt"]]);
843  }
844  return str.replaceAll(NormalizeRegex, (_, p1, p2) => {
845    return p1 ? p1.normalize("NFKC") : NormalizationMap.get(p2);
846  });
847}
848function getUuid() {
849  if (typeof crypto !== "undefined" && typeof crypto?.randomUUID === "function") {
850    return crypto.randomUUID();
851  }
852  const buf = new Uint8Array(32);
853  if (typeof crypto !== "undefined" && typeof crypto?.getRandomValues === "function") {
854    crypto.getRandomValues(buf);
855  } else {
856    for (let i = 0; i < 32; i++) {
857      buf[i] = Math.floor(Math.random() * 255);
858    }
859  }
860  return bytesToString(buf);
861}
862const AnnotationPrefix = "pdfjs_internal_id_";
863exports.AnnotationPrefix = AnnotationPrefix;
864
865/***/ }),
866/* 2 */
867/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {
868
869
870var $ = __w_pdfjs_require__(3);
871var global = __w_pdfjs_require__(4);
872var apply = __w_pdfjs_require__(69);
873var wrapErrorConstructorWithCause = __w_pdfjs_require__(70);
874var WEB_ASSEMBLY = 'WebAssembly';
875var WebAssembly = global[WEB_ASSEMBLY];
876var FORCED = Error('e', { cause: 7 }).cause !== 7;
877var exportGlobalErrorCauseWrapper = function (ERROR_NAME, wrapper) {
878 var O = {};
879 O[ERROR_NAME] = wrapErrorConstructorWithCause(ERROR_NAME, wrapper, FORCED);
880 $({
881  global: true,
882  constructor: true,
883  arity: 1,
884  forced: FORCED
885 }, O);
886};
887var exportWebAssemblyErrorCauseWrapper = function (ERROR_NAME, wrapper) {
888 if (WebAssembly && WebAssembly[ERROR_NAME]) {
889  var O = {};
890  O[ERROR_NAME] = wrapErrorConstructorWithCause(WEB_ASSEMBLY + '.' + ERROR_NAME, wrapper, FORCED);
891  $({
892   target: WEB_ASSEMBLY,
893   stat: true,
894   constructor: true,
895   arity: 1,
896   forced: FORCED
897  }, O);
898 }
899};
900exportGlobalErrorCauseWrapper('Error', function (init) {
901 return function Error(message) {
902  return apply(init, this, arguments);
903 };
904});
905exportGlobalErrorCauseWrapper('EvalError', function (init) {
906 return function EvalError(message) {
907  return apply(init, this, arguments);
908 };
909});
910exportGlobalErrorCauseWrapper('RangeError', function (init) {
911 return function RangeError(message) {
912  return apply(init, this, arguments);
913 };
914});
915exportGlobalErrorCauseWrapper('ReferenceError', function (init) {
916 return function ReferenceError(message) {
917  return apply(init, this, arguments);
918 };
919});
920exportGlobalErrorCauseWrapper('SyntaxError', function (init) {
921 return function SyntaxError(message) {
922  return apply(init, this, arguments);
923 };
924});
925exportGlobalErrorCauseWrapper('TypeError', function (init) {
926 return function TypeError(message) {
927  return apply(init, this, arguments);
928 };
929});
930exportGlobalErrorCauseWrapper('URIError', function (init) {
931 return function URIError(message) {
932  return apply(init, this, arguments);
933 };
934});
935exportWebAssemblyErrorCauseWrapper('CompileError', function (init) {
936 return function CompileError(message) {
937  return apply(init, this, arguments);
938 };
939});
940exportWebAssemblyErrorCauseWrapper('LinkError', function (init) {
941 return function LinkError(message) {
942  return apply(init, this, arguments);
943 };
944});
945exportWebAssemblyErrorCauseWrapper('RuntimeError', function (init) {
946 return function RuntimeError(message) {
947  return apply(init, this, arguments);
948 };
949});
950
951/***/ }),
952/* 3 */
953/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
954
955
956var global = __w_pdfjs_require__(4);
957var getOwnPropertyDescriptor = (__w_pdfjs_require__(5).f);
958var createNonEnumerableProperty = __w_pdfjs_require__(44);
959var defineBuiltIn = __w_pdfjs_require__(48);
960var defineGlobalProperty = __w_pdfjs_require__(38);
961var copyConstructorProperties = __w_pdfjs_require__(56);
962var isForced = __w_pdfjs_require__(68);
963module.exports = function (options, source) {
964 var TARGET = options.target;
965 var GLOBAL = options.global;
966 var STATIC = options.stat;
967 var FORCED, target, key, targetProperty, sourceProperty, descriptor;
968 if (GLOBAL) {
969  target = global;
970 } else if (STATIC) {
971  target = global[TARGET] || defineGlobalProperty(TARGET, {});
972 } else {
973  target = (global[TARGET] || {}).prototype;
974 }
975 if (target)
976  for (key in source) {
977   sourceProperty = source[key];
978   if (options.dontCallGetSet) {
979    descriptor = getOwnPropertyDescriptor(target, key);
980    targetProperty = descriptor && descriptor.value;
981   } else
982    targetProperty = target[key];
983   FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);
984   if (!FORCED && targetProperty !== undefined) {
985    if (typeof sourceProperty == typeof targetProperty)
986     continue;
987    copyConstructorProperties(sourceProperty, targetProperty);
988   }
989   if (options.sham || targetProperty && targetProperty.sham) {
990    createNonEnumerableProperty(sourceProperty, 'sham', true);
991   }
992   defineBuiltIn(target, key, sourceProperty, options);
993  }
994};
995
996/***/ }),
997/* 4 */
998/***/ (function(module) {
999
1000
1001var check = function (it) {
1002 return it && it.Math === Math && it;
1003};
1004module.exports = check(typeof globalThis == 'object' && globalThis) || check(typeof window == 'object' && window) || check(typeof self == 'object' && self) || check(typeof global == 'object' && global) || (function () {
1005 return this;
1006}()) || this || Function('return this')();
1007
1008/***/ }),
1009/* 5 */
1010/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
1011
1012
1013var DESCRIPTORS = __w_pdfjs_require__(6);
1014var call = __w_pdfjs_require__(8);
1015var propertyIsEnumerableModule = __w_pdfjs_require__(10);
1016var createPropertyDescriptor = __w_pdfjs_require__(11);
1017var toIndexedObject = __w_pdfjs_require__(12);
1018var toPropertyKey = __w_pdfjs_require__(18);
1019var hasOwn = __w_pdfjs_require__(39);
1020var IE8_DOM_DEFINE = __w_pdfjs_require__(42);
1021var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
1022exports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {
1023 O = toIndexedObject(O);
1024 P = toPropertyKey(P);
1025 if (IE8_DOM_DEFINE)
1026  try {
1027   return $getOwnPropertyDescriptor(O, P);
1028  } catch (error) {
1029  }
1030 if (hasOwn(O, P))
1031  return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);
1032};
1033
1034/***/ }),
1035/* 6 */
1036/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
1037
1038
1039var fails = __w_pdfjs_require__(7);
1040module.exports = !fails(function () {
1041 return Object.defineProperty({}, 1, {
1042  get: function () {
1043   return 7;
1044  }
1045 })[1] !== 7;
1046});
1047
1048/***/ }),
1049/* 7 */
1050/***/ ((module) => {
1051
1052
1053module.exports = function (exec) {
1054 try {
1055  return !!exec();
1056 } catch (error) {
1057  return true;
1058 }
1059};
1060
1061/***/ }),
1062/* 8 */
1063/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
1064
1065
1066var NATIVE_BIND = __w_pdfjs_require__(9);
1067var call = Function.prototype.call;
1068module.exports = NATIVE_BIND ? call.bind(call) : function () {
1069 return call.apply(call, arguments);
1070};
1071
1072/***/ }),
1073/* 9 */
1074/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
1075
1076
1077var fails = __w_pdfjs_require__(7);
1078module.exports = !fails(function () {
1079 var test = function () {
1080 }.bind();
1081 return typeof test != 'function' || test.hasOwnProperty('prototype');
1082});
1083
1084/***/ }),
1085/* 10 */
1086/***/ ((__unused_webpack_module, exports) => {
1087
1088
1089var $propertyIsEnumerable = {}.propertyIsEnumerable;
1090var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
1091var NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);
1092exports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {
1093 var descriptor = getOwnPropertyDescriptor(this, V);
1094 return !!descriptor && descriptor.enumerable;
1095} : $propertyIsEnumerable;
1096
1097/***/ }),
1098/* 11 */
1099/***/ ((module) => {
1100
1101
1102module.exports = function (bitmap, value) {
1103 return {
1104  enumerable: !(bitmap & 1),
1105  configurable: !(bitmap & 2),
1106  writable: !(bitmap & 4),
1107  value: value
1108 };
1109};
1110
1111/***/ }),
1112/* 12 */
1113/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
1114
1115
1116var IndexedObject = __w_pdfjs_require__(13);
1117var requireObjectCoercible = __w_pdfjs_require__(16);
1118module.exports = function (it) {
1119 return IndexedObject(requireObjectCoercible(it));
1120};
1121
1122/***/ }),
1123/* 13 */
1124/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
1125
1126
1127var uncurryThis = __w_pdfjs_require__(14);
1128var fails = __w_pdfjs_require__(7);
1129var classof = __w_pdfjs_require__(15);
1130var $Object = Object;
1131var split = uncurryThis(''.split);
1132module.exports = fails(function () {
1133 return !$Object('z').propertyIsEnumerable(0);
1134}) ? function (it) {
1135 return classof(it) === 'String' ? split(it, '') : $Object(it);
1136} : $Object;
1137
1138/***/ }),
1139/* 14 */
1140/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
1141
1142
1143var NATIVE_BIND = __w_pdfjs_require__(9);
1144var FunctionPrototype = Function.prototype;
1145var call = FunctionPrototype.call;
1146var uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call);
1147module.exports = NATIVE_BIND ? uncurryThisWithBind : function (fn) {
1148 return function () {
1149  return call.apply(fn, arguments);
1150 };
1151};
1152
1153/***/ }),
1154/* 15 */
1155/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
1156
1157
1158var uncurryThis = __w_pdfjs_require__(14);
1159var toString = uncurryThis({}.toString);
1160var stringSlice = uncurryThis(''.slice);
1161module.exports = function (it) {
1162 return stringSlice(toString(it), 8, -1);
1163};
1164
1165/***/ }),
1166/* 16 */
1167/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
1168
1169
1170var isNullOrUndefined = __w_pdfjs_require__(17);
1171var $TypeError = TypeError;
1172module.exports = function (it) {
1173 if (isNullOrUndefined(it))
1174  throw $TypeError("Can't call method on " + it);
1175 return it;
1176};
1177
1178/***/ }),
1179/* 17 */
1180/***/ ((module) => {
1181
1182
1183module.exports = function (it) {
1184 return it === null || it === undefined;
1185};
1186
1187/***/ }),
1188/* 18 */
1189/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
1190
1191
1192var toPrimitive = __w_pdfjs_require__(19);
1193var isSymbol = __w_pdfjs_require__(23);
1194module.exports = function (argument) {
1195 var key = toPrimitive(argument, 'string');
1196 return isSymbol(key) ? key : key + '';
1197};
1198
1199/***/ }),
1200/* 19 */
1201/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
1202
1203
1204var call = __w_pdfjs_require__(8);
1205var isObject = __w_pdfjs_require__(20);
1206var isSymbol = __w_pdfjs_require__(23);
1207var getMethod = __w_pdfjs_require__(30);
1208var ordinaryToPrimitive = __w_pdfjs_require__(33);
1209var wellKnownSymbol = __w_pdfjs_require__(34);
1210var $TypeError = TypeError;
1211var TO_PRIMITIVE = wellKnownSymbol('toPrimitive');
1212module.exports = function (input, pref) {
1213 if (!isObject(input) || isSymbol(input))
1214  return input;
1215 var exoticToPrim = getMethod(input, TO_PRIMITIVE);
1216 var result;
1217 if (exoticToPrim) {
1218  if (pref === undefined)
1219   pref = 'default';
1220  result = call(exoticToPrim, input, pref);
1221  if (!isObject(result) || isSymbol(result))
1222   return result;
1223  throw $TypeError("Can't convert object to primitive value");
1224 }
1225 if (pref === undefined)
1226  pref = 'number';
1227 return ordinaryToPrimitive(input, pref);
1228};
1229
1230/***/ }),
1231/* 20 */
1232/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
1233
1234
1235var isCallable = __w_pdfjs_require__(21);
1236var $documentAll = __w_pdfjs_require__(22);
1237var documentAll = $documentAll.all;
1238module.exports = $documentAll.IS_HTMLDDA ? function (it) {
1239 return typeof it == 'object' ? it !== null : isCallable(it) || it === documentAll;
1240} : function (it) {
1241 return typeof it == 'object' ? it !== null : isCallable(it);
1242};
1243
1244/***/ }),
1245/* 21 */
1246/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
1247
1248
1249var $documentAll = __w_pdfjs_require__(22);
1250var documentAll = $documentAll.all;
1251module.exports = $documentAll.IS_HTMLDDA ? function (argument) {
1252 return typeof argument == 'function' || argument === documentAll;
1253} : function (argument) {
1254 return typeof argument == 'function';
1255};
1256
1257/***/ }),
1258/* 22 */
1259/***/ ((module) => {
1260
1261
1262var documentAll = typeof document == 'object' && document.all;
1263var IS_HTMLDDA = typeof documentAll == 'undefined' && documentAll !== undefined;
1264module.exports = {
1265 all: documentAll,
1266 IS_HTMLDDA: IS_HTMLDDA
1267};
1268
1269/***/ }),
1270/* 23 */
1271/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
1272
1273
1274var getBuiltIn = __w_pdfjs_require__(24);
1275var isCallable = __w_pdfjs_require__(21);
1276var isPrototypeOf = __w_pdfjs_require__(25);
1277var USE_SYMBOL_AS_UID = __w_pdfjs_require__(26);
1278var $Object = Object;
1279module.exports = USE_SYMBOL_AS_UID ? function (it) {
1280 return typeof it == 'symbol';
1281} : function (it) {
1282 var $Symbol = getBuiltIn('Symbol');
1283 return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it));
1284};
1285
1286/***/ }),
1287/* 24 */
1288/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
1289
1290
1291var global = __w_pdfjs_require__(4);
1292var isCallable = __w_pdfjs_require__(21);
1293var aFunction = function (argument) {
1294 return isCallable(argument) ? argument : undefined;
1295};
1296module.exports = function (namespace, method) {
1297 return arguments.length < 2 ? aFunction(global[namespace]) : global[namespace] && global[namespace][method];
1298};
1299
1300/***/ }),
1301/* 25 */
1302/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
1303
1304
1305var uncurryThis = __w_pdfjs_require__(14);
1306module.exports = uncurryThis({}.isPrototypeOf);
1307
1308/***/ }),
1309/* 26 */
1310/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
1311
1312
1313var NATIVE_SYMBOL = __w_pdfjs_require__(27);
1314module.exports = NATIVE_SYMBOL && !Symbol.sham && typeof Symbol.iterator == 'symbol';
1315
1316/***/ }),
1317/* 27 */
1318/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
1319
1320
1321var V8_VERSION = __w_pdfjs_require__(28);
1322var fails = __w_pdfjs_require__(7);
1323var global = __w_pdfjs_require__(4);
1324var $String = global.String;
1325module.exports = !!Object.getOwnPropertySymbols && !fails(function () {
1326 var symbol = Symbol('symbol detection');
1327 return !$String(symbol) || !(Object(symbol) instanceof Symbol) || !Symbol.sham && V8_VERSION && V8_VERSION < 41;
1328});
1329
1330/***/ }),
1331/* 28 */
1332/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
1333
1334
1335var global = __w_pdfjs_require__(4);
1336var userAgent = __w_pdfjs_require__(29);
1337var process = global.process;
1338var Deno = global.Deno;
1339var versions = process && process.versions || Deno && Deno.version;
1340var v8 = versions && versions.v8;
1341var match, version;
1342if (v8) {
1343 match = v8.split('.');
1344 version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);
1345}
1346if (!version && userAgent) {
1347 match = userAgent.match(/Edge\/(\d+)/);
1348 if (!match || match[1] >= 74) {
1349  match = userAgent.match(/Chrome\/(\d+)/);
1350  if (match)
1351   version = +match[1];
1352 }
1353}
1354module.exports = version;
1355
1356/***/ }),
1357/* 29 */
1358/***/ ((module) => {
1359
1360
1361module.exports = typeof navigator != 'undefined' && String(navigator.userAgent) || '';
1362
1363/***/ }),
1364/* 30 */
1365/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
1366
1367
1368var aCallable = __w_pdfjs_require__(31);
1369var isNullOrUndefined = __w_pdfjs_require__(17);
1370module.exports = function (V, P) {
1371 var func = V[P];
1372 return isNullOrUndefined(func) ? undefined : aCallable(func);
1373};
1374
1375/***/ }),
1376/* 31 */
1377/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
1378
1379
1380var isCallable = __w_pdfjs_require__(21);
1381var tryToString = __w_pdfjs_require__(32);
1382var $TypeError = TypeError;
1383module.exports = function (argument) {
1384 if (isCallable(argument))
1385  return argument;
1386 throw $TypeError(tryToString(argument) + ' is not a function');
1387};
1388
1389/***/ }),
1390/* 32 */
1391/***/ ((module) => {
1392
1393
1394var $String = String;
1395module.exports = function (argument) {
1396 try {
1397  return $String(argument);
1398 } catch (error) {
1399  return 'Object';
1400 }
1401};
1402
1403/***/ }),
1404/* 33 */
1405/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
1406
1407
1408var call = __w_pdfjs_require__(8);
1409var isCallable = __w_pdfjs_require__(21);
1410var isObject = __w_pdfjs_require__(20);
1411var $TypeError = TypeError;
1412module.exports = function (input, pref) {
1413 var fn, val;
1414 if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input)))
1415  return val;
1416 if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input)))
1417  return val;
1418 if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input)))
1419  return val;
1420 throw $TypeError("Can't convert object to primitive value");
1421};
1422
1423/***/ }),
1424/* 34 */
1425/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
1426
1427
1428var global = __w_pdfjs_require__(4);
1429var shared = __w_pdfjs_require__(35);
1430var hasOwn = __w_pdfjs_require__(39);
1431var uid = __w_pdfjs_require__(41);
1432var NATIVE_SYMBOL = __w_pdfjs_require__(27);
1433var USE_SYMBOL_AS_UID = __w_pdfjs_require__(26);
1434var Symbol = global.Symbol;
1435var WellKnownSymbolsStore = shared('wks');
1436var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol['for'] || Symbol : Symbol && Symbol.withoutSetter || uid;
1437module.exports = function (name) {
1438 if (!hasOwn(WellKnownSymbolsStore, name)) {
1439  WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn(Symbol, name) ? Symbol[name] : createWellKnownSymbol('Symbol.' + name);
1440 }
1441 return WellKnownSymbolsStore[name];
1442};
1443
1444/***/ }),
1445/* 35 */
1446/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
1447
1448
1449var IS_PURE = __w_pdfjs_require__(36);
1450var store = __w_pdfjs_require__(37);
1451(module.exports = function (key, value) {
1452 return store[key] || (store[key] = value !== undefined ? value : {});
1453})('versions', []).push({
1454 version: '3.32.2',
1455 mode: IS_PURE ? 'pure' : 'global',
1456 copyright: '© 2014-2023 Denis Pushkarev (zloirock.ru)',
1457 license: 'https://github.com/zloirock/core-js/blob/v3.32.2/LICENSE',
1458 source: 'https://github.com/zloirock/core-js'
1459});
1460
1461/***/ }),
1462/* 36 */
1463/***/ ((module) => {
1464
1465
1466module.exports = false;
1467
1468/***/ }),
1469/* 37 */
1470/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
1471
1472
1473var global = __w_pdfjs_require__(4);
1474var defineGlobalProperty = __w_pdfjs_require__(38);
1475var SHARED = '__core-js_shared__';
1476var store = global[SHARED] || defineGlobalProperty(SHARED, {});
1477module.exports = store;
1478
1479/***/ }),
1480/* 38 */
1481/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
1482
1483
1484var global = __w_pdfjs_require__(4);
1485var defineProperty = Object.defineProperty;
1486module.exports = function (key, value) {
1487 try {
1488  defineProperty(global, key, {
1489   value: value,
1490   configurable: true,
1491   writable: true
1492  });
1493 } catch (error) {
1494  global[key] = value;
1495 }
1496 return value;
1497};
1498
1499/***/ }),
1500/* 39 */
1501/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
1502
1503
1504var uncurryThis = __w_pdfjs_require__(14);
1505var toObject = __w_pdfjs_require__(40);
1506var hasOwnProperty = uncurryThis({}.hasOwnProperty);
1507module.exports = Object.hasOwn || function hasOwn(it, key) {
1508 return hasOwnProperty(toObject(it), key);
1509};
1510
1511/***/ }),
1512/* 40 */
1513/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
1514
1515
1516var requireObjectCoercible = __w_pdfjs_require__(16);
1517var $Object = Object;
1518module.exports = function (argument) {
1519 return $Object(requireObjectCoercible(argument));
1520};
1521
1522/***/ }),
1523/* 41 */
1524/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
1525
1526
1527var uncurryThis = __w_pdfjs_require__(14);
1528var id = 0;
1529var postfix = Math.random();
1530var toString = uncurryThis(1.0.toString);
1531module.exports = function (key) {
1532 return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);
1533};
1534
1535/***/ }),
1536/* 42 */
1537/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
1538
1539
1540var DESCRIPTORS = __w_pdfjs_require__(6);
1541var fails = __w_pdfjs_require__(7);
1542var createElement = __w_pdfjs_require__(43);
1543module.exports = !DESCRIPTORS && !fails(function () {
1544 return Object.defineProperty(createElement('div'), 'a', {
1545  get: function () {
1546   return 7;
1547  }
1548 }).a !== 7;
1549});
1550
1551/***/ }),
1552/* 43 */
1553/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
1554
1555
1556var global = __w_pdfjs_require__(4);
1557var isObject = __w_pdfjs_require__(20);
1558var document = global.document;
1559var EXISTS = isObject(document) && isObject(document.createElement);
1560module.exports = function (it) {
1561 return EXISTS ? document.createElement(it) : {};
1562};
1563
1564/***/ }),
1565/* 44 */
1566/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
1567
1568
1569var DESCRIPTORS = __w_pdfjs_require__(6);
1570var definePropertyModule = __w_pdfjs_require__(45);
1571var createPropertyDescriptor = __w_pdfjs_require__(11);
1572module.exports = DESCRIPTORS ? function (object, key, value) {
1573 return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));
1574} : function (object, key, value) {
1575 object[key] = value;
1576 return object;
1577};
1578
1579/***/ }),
1580/* 45 */
1581/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
1582
1583
1584var DESCRIPTORS = __w_pdfjs_require__(6);
1585var IE8_DOM_DEFINE = __w_pdfjs_require__(42);
1586var V8_PROTOTYPE_DEFINE_BUG = __w_pdfjs_require__(46);
1587var anObject = __w_pdfjs_require__(47);
1588var toPropertyKey = __w_pdfjs_require__(18);
1589var $TypeError = TypeError;
1590var $defineProperty = Object.defineProperty;
1591var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
vendor: 11,466 bytes, lines 1592-1993
1592var ENUMERABLE = 'enumerable';
1593var CONFIGURABLE = 'configurable';
1594var WRITABLE = 'writable';
1595exports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {
1596 anObject(O);
1597 P = toPropertyKey(P);
1598 anObject(Attributes);
1599 if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {
1600  var current = $getOwnPropertyDescriptor(O, P);
1601  if (current && current[WRITABLE]) {
1602   O[P] = Attributes.value;
1603   Attributes = {
1604    configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],
1605    enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],
1606    writable: false
1607   };
1608  }
1609 }
1610 return $defineProperty(O, P, Attributes);
1611} : $defineProperty : function defineProperty(O, P, Attributes) {
1612 anObject(O);
1613 P = toPropertyKey(P);
1614 anObject(Attributes);
1615 if (IE8_DOM_DEFINE)
1616  try {
1617   return $defineProperty(O, P, Attributes);
1618  } catch (error) {
1619  }
1620 if ('get' in Attributes || 'set' in Attributes)
1621  throw $TypeError('Accessors not supported');
1622 if ('value' in Attributes)
1623  O[P] = Attributes.value;
1624 return O;
1625};
1626
1627/***/ }),
1628/* 46 */
1629/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
1630
1631
1632var DESCRIPTORS = __w_pdfjs_require__(6);
1633var fails = __w_pdfjs_require__(7);
1634module.exports = DESCRIPTORS && fails(function () {
1635 return Object.defineProperty(function () {
1636 }, 'prototype', {
1637  value: 42,
1638  writable: false
1639 }).prototype !== 42;
1640});
1641
1642/***/ }),
1643/* 47 */
1644/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
1645
1646
1647var isObject = __w_pdfjs_require__(20);
1648var $String = String;
1649var $TypeError = TypeError;
1650module.exports = function (argument) {
1651 if (isObject(argument))
1652  return argument;
1653 throw $TypeError($String(argument) + ' is not an object');
1654};
1655
1656/***/ }),
1657/* 48 */
1658/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
1659
1660
1661var isCallable = __w_pdfjs_require__(21);
1662var definePropertyModule = __w_pdfjs_require__(45);
1663var makeBuiltIn = __w_pdfjs_require__(49);
1664var defineGlobalProperty = __w_pdfjs_require__(38);
1665module.exports = function (O, key, value, options) {
1666 if (!options)
1667  options = {};
1668 var simple = options.enumerable;
1669 var name = options.name !== undefined ? options.name : key;
1670 if (isCallable(value))
1671  makeBuiltIn(value, name, options);
1672 if (options.global) {
1673  if (simple)
1674   O[key] = value;
1675  else
1676   defineGlobalProperty(key, value);
1677 } else {
1678  try {
1679   if (!options.unsafe)
1680    delete O[key];
1681   else if (O[key])
1682    simple = true;
1683  } catch (error) {
1684  }
1685  if (simple)
1686   O[key] = value;
1687  else
1688   definePropertyModule.f(O, key, {
1689    value: value,
1690    enumerable: false,
1691    configurable: !options.nonConfigurable,
1692    writable: !options.nonWritable
1693   });
1694 }
1695 return O;
1696};
1697
1698/***/ }),
1699/* 49 */
1700/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
1701
1702
1703var uncurryThis = __w_pdfjs_require__(14);
1704var fails = __w_pdfjs_require__(7);
1705var isCallable = __w_pdfjs_require__(21);
1706var hasOwn = __w_pdfjs_require__(39);
1707var DESCRIPTORS = __w_pdfjs_require__(6);
1708var CONFIGURABLE_FUNCTION_NAME = (__w_pdfjs_require__(50).CONFIGURABLE);
1709var inspectSource = __w_pdfjs_require__(51);
1710var InternalStateModule = __w_pdfjs_require__(52);
1711var enforceInternalState = InternalStateModule.enforce;
1712var getInternalState = InternalStateModule.get;
1713var $String = String;
1714var defineProperty = Object.defineProperty;
1715var stringSlice = uncurryThis(''.slice);
1716var replace = uncurryThis(''.replace);
1717var join = uncurryThis([].join);
1718var CONFIGURABLE_LENGTH = DESCRIPTORS && !fails(function () {
1719 return defineProperty(function () {
1720 }, 'length', { value: 8 }).length !== 8;
1721});
1722var TEMPLATE = String(String).split('String');
1723var makeBuiltIn = module.exports = function (value, name, options) {
1724 if (stringSlice($String(name), 0, 7) === 'Symbol(') {
1725  name = '[' + replace($String(name), /^Symbol\(([^)]*)\)/, '$1') + ']';
1726 }
1727 if (options && options.getter)
1728  name = 'get ' + name;
1729 if (options && options.setter)
1730  name = 'set ' + name;
1731 if (!hasOwn(value, 'name') || CONFIGURABLE_FUNCTION_NAME && value.name !== name) {
1732  if (DESCRIPTORS)
1733   defineProperty(value, 'name', {
1734    value: name,
1735    configurable: true
1736   });
1737  else
1738   value.name = name;
1739 }
1740 if (CONFIGURABLE_LENGTH && options && hasOwn(options, 'arity') && value.length !== options.arity) {
1741  defineProperty(value, 'length', { value: options.arity });
1742 }
1743 try {
1744  if (options && hasOwn(options, 'constructor') && options.constructor) {
1745   if (DESCRIPTORS)
1746    defineProperty(value, 'prototype', { writable: false });
1747  } else if (value.prototype)
1748   value.prototype = undefined;
1749 } catch (error) {
1750 }
1751 var state = enforceInternalState(value);
1752 if (!hasOwn(state, 'source')) {
1753  state.source = join(TEMPLATE, typeof name == 'string' ? name : '');
1754 }
1755 return value;
1756};
1757Function.prototype.toString = makeBuiltIn(function toString() {
1758 return isCallable(this) && getInternalState(this).source || inspectSource(this);
1759}, 'toString');
1760
1761/***/ }),
1762/* 50 */
1763/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
1764
1765
1766var DESCRIPTORS = __w_pdfjs_require__(6);
1767var hasOwn = __w_pdfjs_require__(39);
1768var FunctionPrototype = Function.prototype;
1769var getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;
1770var EXISTS = hasOwn(FunctionPrototype, 'name');
1771var PROPER = EXISTS && function something() {
1772}.name === 'something';
1773var CONFIGURABLE = EXISTS && (!DESCRIPTORS || DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable);
1774module.exports = {
1775 EXISTS: EXISTS,
1776 PROPER: PROPER,
1777 CONFIGURABLE: CONFIGURABLE
1778};
1779
1780/***/ }),
1781/* 51 */
1782/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
1783
1784
1785var uncurryThis = __w_pdfjs_require__(14);
1786var isCallable = __w_pdfjs_require__(21);
1787var store = __w_pdfjs_require__(37);
1788var functionToString = uncurryThis(Function.toString);
1789if (!isCallable(store.inspectSource)) {
1790 store.inspectSource = function (it) {
1791  return functionToString(it);
1792 };
1793}
1794module.exports = store.inspectSource;
1795
1796/***/ }),
1797/* 52 */
1798/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
1799
1800
1801var NATIVE_WEAK_MAP = __w_pdfjs_require__(53);
1802var global = __w_pdfjs_require__(4);
1803var isObject = __w_pdfjs_require__(20);
1804var createNonEnumerableProperty = __w_pdfjs_require__(44);
1805var hasOwn = __w_pdfjs_require__(39);
1806var shared = __w_pdfjs_require__(37);
1807var sharedKey = __w_pdfjs_require__(54);
1808var hiddenKeys = __w_pdfjs_require__(55);
1809var OBJECT_ALREADY_INITIALIZED = 'Object already initialized';
1810var TypeError = global.TypeError;
1811var WeakMap = global.WeakMap;
1812var set, get, has;
1813var enforce = function (it) {
1814 return has(it) ? get(it) : set(it, {});
1815};
1816var getterFor = function (TYPE) {
1817 return function (it) {
1818  var state;
1819  if (!isObject(it) || (state = get(it)).type !== TYPE) {
1820   throw TypeError('Incompatible receiver, ' + TYPE + ' required');
1821  }
1822  return state;
1823 };
1824};
1825if (NATIVE_WEAK_MAP || shared.state) {
1826 var store = shared.state || (shared.state = new WeakMap());
1827 store.get = store.get;
1828 store.has = store.has;
1829 store.set = store.set;
1830 set = function (it, metadata) {
1831  if (store.has(it))
1832   throw TypeError(OBJECT_ALREADY_INITIALIZED);
1833  metadata.facade = it;
1834  store.set(it, metadata);
1835  return metadata;
1836 };
1837 get = function (it) {
1838  return store.get(it) || {};
1839 };
1840 has = function (it) {
1841  return store.has(it);
1842 };
1843} else {
1844 var STATE = sharedKey('state');
1845 hiddenKeys[STATE] = true;
1846 set = function (it, metadata) {
1847  if (hasOwn(it, STATE))
1848   throw TypeError(OBJECT_ALREADY_INITIALIZED);
1849  metadata.facade = it;
1850  createNonEnumerableProperty(it, STATE, metadata);
1851  return metadata;
1852 };
1853 get = function (it) {
1854  return hasOwn(it, STATE) ? it[STATE] : {};
1855 };
1856 has = function (it) {
1857  return hasOwn(it, STATE);
1858 };
1859}
1860module.exports = {
1861 set: set,
1862 get: get,
1863 has: has,
1864 enforce: enforce,
1865 getterFor: getterFor
1866};
1867
1868/***/ }),
1869/* 53 */
1870/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
1871
1872
1873var global = __w_pdfjs_require__(4);
1874var isCallable = __w_pdfjs_require__(21);
1875var WeakMap = global.WeakMap;
1876module.exports = isCallable(WeakMap) && /native code/.test(String(WeakMap));
1877
1878/***/ }),
1879/* 54 */
1880/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
1881
1882
1883var shared = __w_pdfjs_require__(35);
1884var uid = __w_pdfjs_require__(41);
1885var keys = shared('keys');
1886module.exports = function (key) {
1887 return keys[key] || (keys[key] = uid(key));
1888};
1889
1890/***/ }),
1891/* 55 */
1892/***/ ((module) => {
1893
1894
1895module.exports = {};
1896
1897/***/ }),
1898/* 56 */
1899/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
1900
1901
1902var hasOwn = __w_pdfjs_require__(39);
1903var ownKeys = __w_pdfjs_require__(57);
1904var getOwnPropertyDescriptorModule = __w_pdfjs_require__(5);
1905var definePropertyModule = __w_pdfjs_require__(45);
1906module.exports = function (target, source, exceptions) {
1907 var keys = ownKeys(source);
1908 var defineProperty = definePropertyModule.f;
1909 var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;
1910 for (var i = 0; i < keys.length; i++) {
1911  var key = keys[i];
1912  if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) {
1913   defineProperty(target, key, getOwnPropertyDescriptor(source, key));
1914  }
1915 }
1916};
1917
1918/***/ }),
1919/* 57 */
1920/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
1921
1922
1923var getBuiltIn = __w_pdfjs_require__(24);
1924var uncurryThis = __w_pdfjs_require__(14);
1925var getOwnPropertyNamesModule = __w_pdfjs_require__(58);
1926var getOwnPropertySymbolsModule = __w_pdfjs_require__(67);
1927var anObject = __w_pdfjs_require__(47);
1928var concat = uncurryThis([].concat);
1929module.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {
1930 var keys = getOwnPropertyNamesModule.f(anObject(it));
1931 var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;
1932 return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys;
1933};
1934
1935/***/ }),
1936/* 58 */
1937/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
1938
1939
1940var internalObjectKeys = __w_pdfjs_require__(59);
1941var enumBugKeys = __w_pdfjs_require__(66);
1942var hiddenKeys = enumBugKeys.concat('length', 'prototype');
1943exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {
1944 return internalObjectKeys(O, hiddenKeys);
1945};
1946
1947/***/ }),
1948/* 59 */
1949/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
1950
1951
1952var uncurryThis = __w_pdfjs_require__(14);
1953var hasOwn = __w_pdfjs_require__(39);
1954var toIndexedObject = __w_pdfjs_require__(12);
1955var indexOf = (__w_pdfjs_require__(60).indexOf);
1956var hiddenKeys = __w_pdfjs_require__(55);
1957var push = uncurryThis([].push);
1958module.exports = function (object, names) {
1959 var O = toIndexedObject(object);
1960 var i = 0;
1961 var result = [];
1962 var key;
1963 for (key in O)
1964  !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);
1965 while (names.length > i)
1966  if (hasOwn(O, key = names[i++])) {
1967   ~indexOf(result, key) || push(result, key);
1968  }
1969 return result;
1970};
1971
1972/***/ }),
1973/* 60 */
1974/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
1975
1976
1977var toIndexedObject = __w_pdfjs_require__(12);
1978var toAbsoluteIndex = __w_pdfjs_require__(61);
1979var lengthOfArrayLike = __w_pdfjs_require__(64);
1980var createMethod = function (IS_INCLUDES) {
1981 return function ($this, el, fromIndex) {
1982  var O = toIndexedObject($this);
1983  var length = lengthOfArrayLike(O);
1984  var index = toAbsoluteIndex(fromIndex, length);
1985  var value;
1986  if (IS_INCLUDES && el !== el)
1987   while (length > index) {
1988    value = O[index++];
1989    if (value !== value)
1990     return true;
1991   }
1992  else
1993   for (; length > index; index++) {
vendor: 5,792 bytes, lines 1994-2192
1994    if ((IS_INCLUDES || index in O) && O[index] === el)
1995     return IS_INCLUDES || index || 0;
1996   }
1997  return !IS_INCLUDES && -1;
1998 };
1999};
2000module.exports = {
2001 includes: createMethod(true),
2002 indexOf: createMethod(false)
2003};
2004
2005/***/ }),
2006/* 61 */
2007/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
2008
2009
2010var toIntegerOrInfinity = __w_pdfjs_require__(62);
2011var max = Math.max;
2012var min = Math.min;
2013module.exports = function (index, length) {
2014 var integer = toIntegerOrInfinity(index);
2015 return integer < 0 ? max(integer + length, 0) : min(integer, length);
2016};
2017
2018/***/ }),
2019/* 62 */
2020/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
2021
2022
2023var trunc = __w_pdfjs_require__(63);
2024module.exports = function (argument) {
2025 var number = +argument;
2026 return number !== number || number === 0 ? 0 : trunc(number);
2027};
2028
2029/***/ }),
2030/* 63 */
2031/***/ ((module) => {
2032
2033
2034var ceil = Math.ceil;
2035var floor = Math.floor;
2036module.exports = Math.trunc || function trunc(x) {
2037 var n = +x;
2038 return (n > 0 ? floor : ceil)(n);
2039};
2040
2041/***/ }),
2042/* 64 */
2043/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
2044
2045
2046var toLength = __w_pdfjs_require__(65);
2047module.exports = function (obj) {
2048 return toLength(obj.length);
2049};
2050
2051/***/ }),
2052/* 65 */
2053/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
2054
2055
2056var toIntegerOrInfinity = __w_pdfjs_require__(62);
2057var min = Math.min;
2058module.exports = function (argument) {
2059 return argument > 0 ? min(toIntegerOrInfinity(argument), 0x1FFFFFFFFFFFFF) : 0;
2060};
2061
2062/***/ }),
2063/* 66 */
2064/***/ ((module) => {
2065
2066
2067module.exports = [
2068 'constructor',
2069 'hasOwnProperty',
2070 'isPrototypeOf',
2071 'propertyIsEnumerable',
2072 'toLocaleString',
2073 'toString',
2074 'valueOf'
2075];
2076
2077/***/ }),
2078/* 67 */
2079/***/ ((__unused_webpack_module, exports) => {
2080
2081
2082exports.f = Object.getOwnPropertySymbols;
2083
2084/***/ }),
2085/* 68 */
2086/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
2087
2088
2089var fails = __w_pdfjs_require__(7);
2090var isCallable = __w_pdfjs_require__(21);
2091var replacement = /#|\.prototype\./;
2092var isForced = function (feature, detection) {
2093 var value = data[normalize(feature)];
2094 return value === POLYFILL ? true : value === NATIVE ? false : isCallable(detection) ? fails(detection) : !!detection;
2095};
2096var normalize = isForced.normalize = function (string) {
2097 return String(string).replace(replacement, '.').toLowerCase();
2098};
2099var data = isForced.data = {};
2100var NATIVE = isForced.NATIVE = 'N';
2101var POLYFILL = isForced.POLYFILL = 'P';
2102module.exports = isForced;
2103
2104/***/ }),
2105/* 69 */
2106/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
2107
2108
2109var NATIVE_BIND = __w_pdfjs_require__(9);
2110var FunctionPrototype = Function.prototype;
2111var apply = FunctionPrototype.apply;
2112var call = FunctionPrototype.call;
2113module.exports = typeof Reflect == 'object' && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function () {
2114 return call.apply(apply, arguments);
2115});
2116
2117/***/ }),
2118/* 70 */
2119/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
2120
2121
2122var getBuiltIn = __w_pdfjs_require__(24);
2123var hasOwn = __w_pdfjs_require__(39);
2124var createNonEnumerableProperty = __w_pdfjs_require__(44);
2125var isPrototypeOf = __w_pdfjs_require__(25);
2126var setPrototypeOf = __w_pdfjs_require__(71);
2127var copyConstructorProperties = __w_pdfjs_require__(56);
2128var proxyAccessor = __w_pdfjs_require__(74);
2129var inheritIfRequired = __w_pdfjs_require__(75);
2130var normalizeStringArgument = __w_pdfjs_require__(76);
2131var installErrorCause = __w_pdfjs_require__(80);
2132var installErrorStack = __w_pdfjs_require__(81);
2133var DESCRIPTORS = __w_pdfjs_require__(6);
2134var IS_PURE = __w_pdfjs_require__(36);
2135module.exports = function (FULL_NAME, wrapper, FORCED, IS_AGGREGATE_ERROR) {
2136 var STACK_TRACE_LIMIT = 'stackTraceLimit';
2137 var OPTIONS_POSITION = IS_AGGREGATE_ERROR ? 2 : 1;
2138 var path = FULL_NAME.split('.');
2139 var ERROR_NAME = path[path.length - 1];
2140 var OriginalError = getBuiltIn.apply(null, path);
2141 if (!OriginalError)
2142  return;
2143 var OriginalErrorPrototype = OriginalError.prototype;
2144 if (!IS_PURE && hasOwn(OriginalErrorPrototype, 'cause'))
2145  delete OriginalErrorPrototype.cause;
2146 if (!FORCED)
2147  return OriginalError;
2148 var BaseError = getBuiltIn('Error');
2149 var WrappedError = wrapper(function (a, b) {
2150  var message = normalizeStringArgument(IS_AGGREGATE_ERROR ? b : a, undefined);
2151  var result = IS_AGGREGATE_ERROR ? new OriginalError(a) : new OriginalError();
2152  if (message !== undefined)
2153   createNonEnumerableProperty(result, 'message', message);
2154  installErrorStack(result, WrappedError, result.stack, 2);
2155  if (this && isPrototypeOf(OriginalErrorPrototype, this))
2156   inheritIfRequired(result, this, WrappedError);
2157  if (arguments.length > OPTIONS_POSITION)
2158   installErrorCause(result, arguments[OPTIONS_POSITION]);
2159  return result;
2160 });
2161 WrappedError.prototype = OriginalErrorPrototype;
2162 if (ERROR_NAME !== 'Error') {
2163  if (setPrototypeOf)
2164   setPrototypeOf(WrappedError, BaseError);
2165  else
2166   copyConstructorProperties(WrappedError, BaseError, { name: true });
2167 } else if (DESCRIPTORS && STACK_TRACE_LIMIT in OriginalError) {
2168  proxyAccessor(WrappedError, OriginalError, STACK_TRACE_LIMIT);
2169  proxyAccessor(WrappedError, OriginalError, 'prepareStackTrace');
2170 }
2171 copyConstructorProperties(WrappedError, OriginalError);
2172 if (!IS_PURE)
2173  try {
2174   if (OriginalErrorPrototype.name !== ERROR_NAME) {
2175    createNonEnumerableProperty(OriginalErrorPrototype, 'name', ERROR_NAME);
2176   }
2177   OriginalErrorPrototype.constructor = WrappedError;
2178  } catch (error) {
2179  }
2180 return WrappedError;
2181};
2182
2183/***/ }),
2184/* 71 */
2185/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
2186
2187
2188var uncurryThisAccessor = __w_pdfjs_require__(72);
2189var anObject = __w_pdfjs_require__(47);
2190var aPossiblePrototype = __w_pdfjs_require__(73);
2191module.exports = Object.setPrototypeOf || ('__proto__' in {} ? (function () {
2192 var CORRECT_SETTER = false;
2193 var test = {};
2194 var setter;
2195 try {
2196  setter = uncurryThisAccessor(Object.prototype, '__proto__', 'set');
2197  setter(test, []);
2198  CORRECT_SETTER = test instanceof Array;
2199 } catch (error) {
2200 }
2201 return function setPrototypeOf(O, proto) {
2202  anObject(O);
2203  aPossiblePrototype(proto);
2204  if (CORRECT_SETTER)
2205   setter(O, proto);
2206  else
2207   O.__proto__ = proto;
2208  return O;
2209 };
2210}()) : undefined);
2211
2212/***/ }),
2213/* 72 */
2214/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
2215
2216
2217var uncurryThis = __w_pdfjs_require__(14);
2218var aCallable = __w_pdfjs_require__(31);
2219module.exports = function (object, key, method) {
2220 try {
2221  return uncurryThis(aCallable(Object.getOwnPropertyDescriptor(object, key)[method]));
2222 } catch (error) {
2223 }
2224};
2225
2226/***/ }),
2227/* 73 */
2228/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
2229
2230
2231var isCallable = __w_pdfjs_require__(21);
2232var $String = String;
2233var $TypeError = TypeError;
2234module.exports = function (argument) {
2235 if (typeof argument == 'object' || isCallable(argument))
2236  return argument;
2237 throw $TypeError("Can't set " + $String(argument) + ' as a prototype');
2238};
2239
2240/***/ }),
2241/* 74 */
2242/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
2243
2244
2245var defineProperty = (__w_pdfjs_require__(45).f);
2246module.exports = function (Target, Source, key) {
2247 key in Target || defineProperty(Target, key, {
2248  configurable: true,
2249  get: function () {
2250   return Source[key];
2251  },
2252  set: function (it) {
2253   Source[key] = it;
2254  }
2255 });
2256};
2257
2258/***/ }),
2259/* 75 */
2260/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
2261
2262
2263var isCallable = __w_pdfjs_require__(21);
2264var isObject = __w_pdfjs_require__(20);
2265var setPrototypeOf = __w_pdfjs_require__(71);
2266module.exports = function ($this, dummy, Wrapper) {
2267 var NewTarget, NewTargetPrototype;
2268 if (setPrototypeOf && isCallable(NewTarget = dummy.constructor) && NewTarget !== Wrapper && isObject(NewTargetPrototype = NewTarget.prototype) && NewTargetPrototype !== Wrapper.prototype)
2269  setPrototypeOf($this, NewTargetPrototype);
2270 return $this;
2271};
2272
2273/***/ }),
2274/* 76 */
2275/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
2276
2277
2278var toString = __w_pdfjs_require__(77);
2279module.exports = function (argument, $default) {
2280 return argument === undefined ? arguments.length < 2 ? '' : $default : toString(argument);
2281};
2282
2283/***/ }),
2284/* 77 */
2285/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
2286
2287
2288var classof = __w_pdfjs_require__(78);
2289var $String = String;
2290module.exports = function (argument) {
2291 if (classof(argument) === 'Symbol')
2292  throw TypeError('Cannot convert a Symbol value to a string');
2293 return $String(argument);
2294};
2295
2296/***/ }),
2297/* 78 */
2298/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
2299
2300
2301var TO_STRING_TAG_SUPPORT = __w_pdfjs_require__(79);
2302var isCallable = __w_pdfjs_require__(21);
2303var classofRaw = __w_pdfjs_require__(15);
2304var wellKnownSymbol = __w_pdfjs_require__(34);
2305var TO_STRING_TAG = wellKnownSymbol('toStringTag');
2306var $Object = Object;
2307var CORRECT_ARGUMENTS = classofRaw((function () {
2308 return arguments;
2309}())) === 'Arguments';
2310var tryGet = function (it, key) {
2311 try {
2312  return it[key];
2313 } catch (error) {
2314 }
2315};
2316module.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {
2317 var O, tag, result;
2318 return it === undefined ? 'Undefined' : it === null ? 'Null' : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG)) == 'string' ? tag : CORRECT_ARGUMENTS ? classofRaw(O) : (result = classofRaw(O)) === 'Object' && isCallable(O.callee) ? 'Arguments' : result;
2319};
2320
2321/***/ }),
2322/* 79 */
2323/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
2324
2325
2326var wellKnownSymbol = __w_pdfjs_require__(34);
2327var TO_STRING_TAG = wellKnownSymbol('toStringTag');
2328var test = {};
2329test[TO_STRING_TAG] = 'z';
2330module.exports = String(test) === '[object z]';
2331
2332/***/ }),
2333/* 80 */
2334/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
2335
2336
2337var isObject = __w_pdfjs_require__(20);
2338var createNonEnumerableProperty = __w_pdfjs_require__(44);
2339module.exports = function (O, options) {
2340 if (isObject(options) && 'cause' in options) {
2341  createNonEnumerableProperty(O, 'cause', options.cause);
2342 }
2343};
2344
2345/***/ }),
2346/* 81 */
2347/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
2348
2349
2350var createNonEnumerableProperty = __w_pdfjs_require__(44);
2351var clearErrorStack = __w_pdfjs_require__(82);
2352var ERROR_STACK_INSTALLABLE = __w_pdfjs_require__(83);
2353var captureStackTrace = Error.captureStackTrace;
2354module.exports = function (error, C, stack, dropEntries) {
2355 if (ERROR_STACK_INSTALLABLE) {
2356  if (captureStackTrace)
2357   captureStackTrace(error, C);
2358  else
2359   createNonEnumerableProperty(error, 'stack', clearErrorStack(stack, dropEntries));
2360 }
2361};
2362
2363/***/ }),
2364/* 82 */
2365/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
2366
2367
2368var uncurryThis = __w_pdfjs_require__(14);
2369var $Error = Error;
2370var replace = uncurryThis(''.replace);
2371var TEST = function (arg) {
2372 return String($Error(arg).stack);
2373}('zxcasd');
2374var V8_OR_CHAKRA_STACK_ENTRY = /\n\s*at [^:]*:[^\n]*/;
2375var IS_V8_OR_CHAKRA_STACK = V8_OR_CHAKRA_STACK_ENTRY.test(TEST);
2376module.exports = function (stack, dropEntries) {
2377 if (IS_V8_OR_CHAKRA_STACK && typeof stack == 'string' && !$Error.prepareStackTrace) {
2378  while (dropEntries--)
2379   stack = replace(stack, V8_OR_CHAKRA_STACK_ENTRY, '');
2380 }
2381 return stack;
2382};
2383
2384/***/ }),
2385/* 83 */
2386/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
2387
2388
2389var fails = __w_pdfjs_require__(7);
2390var createPropertyDescriptor = __w_pdfjs_require__(11);
2391module.exports = !fails(function () {
2392 var error = Error('a');
2393 if (!('stack' in error))
2394  return true;
2395 Object.defineProperty(error, 'stack', createPropertyDescriptor(1, 7));
2396 return error.stack !== 7;
2397});
2398
2399/***/ }),
2400/* 84 */
2401/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {
2402
2403
2404var defineBuiltIn = __w_pdfjs_require__(48);
2405var uncurryThis = __w_pdfjs_require__(14);
2406var toString = __w_pdfjs_require__(77);
2407var validateArgumentsLength = __w_pdfjs_require__(85);
2408var $URLSearchParams = URLSearchParams;
2409var URLSearchParamsPrototype = $URLSearchParams.prototype;
2410var append = uncurryThis(URLSearchParamsPrototype.append);
2411var $delete = uncurryThis(URLSearchParamsPrototype['delete']);
vendor: 8,130 bytes, lines 2412-2684
2412var forEach = uncurryThis(URLSearchParamsPrototype.forEach);
2413var push = uncurryThis([].push);
2414var params = new $URLSearchParams('a=1&a=2&b=3');
2415params['delete']('a', 1);
2416params['delete']('b', undefined);
2417if (params + '' !== 'a=2') {
2418 defineBuiltIn(URLSearchParamsPrototype, 'delete', function (name) {
2419  var length = arguments.length;
2420  var $value = length < 2 ? undefined : arguments[1];
2421  if (length && $value === undefined)
2422   return $delete(this, name);
2423  var entries = [];
2424  forEach(this, function (v, k) {
2425   push(entries, {
2426    key: k,
2427    value: v
2428   });
2429  });
2430  validateArgumentsLength(length, 1);
2431  var key = toString(name);
2432  var value = toString($value);
2433  var index = 0;
2434  var dindex = 0;
2435  var found = false;
2436  var entriesLength = entries.length;
2437  var entry;
2438  while (index < entriesLength) {
2439   entry = entries[index++];
2440   if (found || entry.key === key) {
2441    found = true;
2442    $delete(this, entry.key);
2443   } else
2444    dindex++;
2445  }
2446  while (dindex < entriesLength) {
2447   entry = entries[dindex++];
2448   if (!(entry.key === key && entry.value === value))
2449    append(this, entry.key, entry.value);
2450  }
2451 }, {
2452  enumerable: true,
2453  unsafe: true
2454 });
2455}
2456
2457/***/ }),
2458/* 85 */
2459/***/ ((module) => {
2460
2461
2462var $TypeError = TypeError;
2463module.exports = function (passed, required) {
2464 if (passed < required)
2465  throw $TypeError('Not enough arguments');
2466 return passed;
2467};
2468
2469/***/ }),
2470/* 86 */
2471/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {
2472
2473
2474var defineBuiltIn = __w_pdfjs_require__(48);
2475var uncurryThis = __w_pdfjs_require__(14);
2476var toString = __w_pdfjs_require__(77);
2477var validateArgumentsLength = __w_pdfjs_require__(85);
2478var $URLSearchParams = URLSearchParams;
2479var URLSearchParamsPrototype = $URLSearchParams.prototype;
2480var getAll = uncurryThis(URLSearchParamsPrototype.getAll);
2481var $has = uncurryThis(URLSearchParamsPrototype.has);
2482var params = new $URLSearchParams('a=1');
2483if (params.has('a', 2) || !params.has('a', undefined)) {
2484 defineBuiltIn(URLSearchParamsPrototype, 'has', function has(name) {
2485  var length = arguments.length;
2486  var $value = length < 2 ? undefined : arguments[1];
2487  if (length && $value === undefined)
2488   return $has(this, name);
2489  var values = getAll(this, name);
2490  validateArgumentsLength(length, 1);
2491  var value = toString($value);
2492  var index = 0;
2493  while (index < values.length) {
2494   if (values[index++] === value)
2495    return true;
2496  }
2497  return false;
2498 }, {
2499  enumerable: true,
2500  unsafe: true
2501 });
2502}
2503
2504/***/ }),
2505/* 87 */
2506/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {
2507
2508
2509var DESCRIPTORS = __w_pdfjs_require__(6);
2510var uncurryThis = __w_pdfjs_require__(14);
2511var defineBuiltInAccessor = __w_pdfjs_require__(88);
2512var URLSearchParamsPrototype = URLSearchParams.prototype;
2513var forEach = uncurryThis(URLSearchParamsPrototype.forEach);
2514if (DESCRIPTORS && !('size' in URLSearchParamsPrototype)) {
2515 defineBuiltInAccessor(URLSearchParamsPrototype, 'size', {
2516  get: function size() {
2517   var count = 0;
2518   forEach(this, function () {
2519    count++;
2520   });
2521   return count;
2522  },
2523  configurable: true,
2524  enumerable: true
2525 });
2526}
2527
2528/***/ }),
2529/* 88 */
2530/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
2531
2532
2533var makeBuiltIn = __w_pdfjs_require__(49);
2534var defineProperty = __w_pdfjs_require__(45);
2535module.exports = function (target, name, descriptor) {
2536 if (descriptor.get)
2537  makeBuiltIn(descriptor.get, name, { getter: true });
2538 if (descriptor.set)
2539  makeBuiltIn(descriptor.set, name, { setter: true });
2540 return defineProperty.f(target, name, descriptor);
2541};
2542
2543/***/ }),
2544/* 89 */
2545/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {
2546
2547
2548var $ = __w_pdfjs_require__(3);
2549var toObject = __w_pdfjs_require__(40);
2550var lengthOfArrayLike = __w_pdfjs_require__(64);
2551var setArrayLength = __w_pdfjs_require__(90);
2552var doesNotExceedSafeInteger = __w_pdfjs_require__(92);
2553var fails = __w_pdfjs_require__(7);
2554var INCORRECT_TO_LENGTH = fails(function () {
2555 return [].push.call({ length: 0x100000000 }, 1) !== 4294967297;
2556});
2557var properErrorOnNonWritableLength = function () {
2558 try {
2559  Object.defineProperty([], 'length', { writable: false }).push();
2560 } catch (error) {
2561  return error instanceof TypeError;
2562 }
2563};
2564var FORCED = INCORRECT_TO_LENGTH || !properErrorOnNonWritableLength();
2565$({
2566 target: 'Array',
2567 proto: true,
2568 arity: 1,
2569 forced: FORCED
2570}, {
2571 push: function push(item) {
2572  var O = toObject(this);
2573  var len = lengthOfArrayLike(O);
2574  var argCount = arguments.length;
2575  doesNotExceedSafeInteger(len + argCount);
2576  for (var i = 0; i < argCount; i++) {
2577   O[len] = arguments[i];
2578   len++;
2579  }
2580  setArrayLength(O, len);
2581  return len;
2582 }
2583});
2584
2585/***/ }),
2586/* 90 */
2587/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
2588
2589
2590var DESCRIPTORS = __w_pdfjs_require__(6);
2591var isArray = __w_pdfjs_require__(91);
2592var $TypeError = TypeError;
2593var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
2594var SILENT_ON_NON_WRITABLE_LENGTH_SET = DESCRIPTORS && !(function () {
2595 if (this !== undefined)
2596  return true;
2597 try {
2598  Object.defineProperty([], 'length', { writable: false }).length = 1;
2599 } catch (error) {
2600  return error instanceof TypeError;
2601 }
2602}());
2603module.exports = SILENT_ON_NON_WRITABLE_LENGTH_SET ? function (O, length) {
2604 if (isArray(O) && !getOwnPropertyDescriptor(O, 'length').writable) {
2605  throw $TypeError('Cannot set read only .length');
2606 }
2607 return O.length = length;
2608} : function (O, length) {
2609 return O.length = length;
2610};
2611
2612/***/ }),
2613/* 91 */
2614/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
2615
2616
2617var classof = __w_pdfjs_require__(15);
2618module.exports = Array.isArray || function isArray(argument) {
2619 return classof(argument) === 'Array';
2620};
2621
2622/***/ }),
2623/* 92 */
2624/***/ ((module) => {
2625
2626
2627var $TypeError = TypeError;
2628var MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;
2629module.exports = function (it) {
2630 if (it > MAX_SAFE_INTEGER)
2631  throw $TypeError('Maximum allowed index exceeded');
2632 return it;
2633};
2634
2635/***/ }),
2636/* 93 */
2637/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {
2638
2639
2640var ArrayBufferViewCore = __w_pdfjs_require__(94);
2641var $findLast = (__w_pdfjs_require__(98).findLast);
2642var aTypedArray = ArrayBufferViewCore.aTypedArray;
2643var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;
2644exportTypedArrayMethod('findLast', function findLast(predicate) {
2645 return $findLast(aTypedArray(this), predicate, arguments.length > 1 ? arguments[1] : undefined);
2646});
2647
2648/***/ }),
2649/* 94 */
2650/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
2651
2652
2653var NATIVE_ARRAY_BUFFER = __w_pdfjs_require__(95);
2654var DESCRIPTORS = __w_pdfjs_require__(6);
2655var global = __w_pdfjs_require__(4);
2656var isCallable = __w_pdfjs_require__(21);
2657var isObject = __w_pdfjs_require__(20);
2658var hasOwn = __w_pdfjs_require__(39);
2659var classof = __w_pdfjs_require__(78);
2660var tryToString = __w_pdfjs_require__(32);
2661var createNonEnumerableProperty = __w_pdfjs_require__(44);
2662var defineBuiltIn = __w_pdfjs_require__(48);
2663var defineBuiltInAccessor = __w_pdfjs_require__(88);
2664var isPrototypeOf = __w_pdfjs_require__(25);
2665var getPrototypeOf = __w_pdfjs_require__(96);
2666var setPrototypeOf = __w_pdfjs_require__(71);
2667var wellKnownSymbol = __w_pdfjs_require__(34);
2668var uid = __w_pdfjs_require__(41);
2669var InternalStateModule = __w_pdfjs_require__(52);
2670var enforceInternalState = InternalStateModule.enforce;
2671var getInternalState = InternalStateModule.get;
2672var Int8Array = global.Int8Array;
2673var Int8ArrayPrototype = Int8Array && Int8Array.prototype;
2674var Uint8ClampedArray = global.Uint8ClampedArray;
2675var Uint8ClampedArrayPrototype = Uint8ClampedArray && Uint8ClampedArray.prototype;
2676var TypedArray = Int8Array && getPrototypeOf(Int8Array);
2677var TypedArrayPrototype = Int8ArrayPrototype && getPrototypeOf(Int8ArrayPrototype);
2678var ObjectPrototype = Object.prototype;
2679var TypeError = global.TypeError;
2680var TO_STRING_TAG = wellKnownSymbol('toStringTag');
2681var TYPED_ARRAY_TAG = uid('TYPED_ARRAY_TAG');
2682var TYPED_ARRAY_CONSTRUCTOR = 'TypedArrayConstructor';
2683var NATIVE_ARRAY_BUFFER_VIEWS = NATIVE_ARRAY_BUFFER && !!setPrototypeOf && classof(global.opera) !== 'Opera';
2684var TYPED_ARRAY_TAG_REQUIRED = false;
vendor: 4,819 bytes, lines 2685-2832
2685var NAME, Constructor, Prototype;
2686var TypedArrayConstructorsList = {
2687 Int8Array: 1,
2688 Uint8Array: 1,
2689 Uint8ClampedArray: 1,
2690 Int16Array: 2,
2691 Uint16Array: 2,
2692 Int32Array: 4,
2693 Uint32Array: 4,
2694 Float32Array: 4,
2695 Float64Array: 8
2696};
2697var BigIntArrayConstructorsList = {
2698 BigInt64Array: 8,
2699 BigUint64Array: 8
2700};
2701var isView = function isView(it) {
2702 if (!isObject(it))
2703  return false;
2704 var klass = classof(it);
2705 return klass === 'DataView' || hasOwn(TypedArrayConstructorsList, klass) || hasOwn(BigIntArrayConstructorsList, klass);
2706};
2707var getTypedArrayConstructor = function (it) {
2708 var proto = getPrototypeOf(it);
2709 if (!isObject(proto))
2710  return;
2711 var state = getInternalState(proto);
2712 return state && hasOwn(state, TYPED_ARRAY_CONSTRUCTOR) ? state[TYPED_ARRAY_CONSTRUCTOR] : getTypedArrayConstructor(proto);
2713};
2714var isTypedArray = function (it) {
2715 if (!isObject(it))
2716  return false;
2717 var klass = classof(it);
2718 return hasOwn(TypedArrayConstructorsList, klass) || hasOwn(BigIntArrayConstructorsList, klass);
2719};
2720var aTypedArray = function (it) {
2721 if (isTypedArray(it))
2722  return it;
2723 throw TypeError('Target is not a typed array');
2724};
2725var aTypedArrayConstructor = function (C) {
2726 if (isCallable(C) && (!setPrototypeOf || isPrototypeOf(TypedArray, C)))
2727  return C;
2728 throw TypeError(tryToString(C) + ' is not a typed array constructor');
2729};
2730var exportTypedArrayMethod = function (KEY, property, forced, options) {
2731 if (!DESCRIPTORS)
2732  return;
2733 if (forced)
2734  for (var ARRAY in TypedArrayConstructorsList) {
2735   var TypedArrayConstructor = global[ARRAY];
2736   if (TypedArrayConstructor && hasOwn(TypedArrayConstructor.prototype, KEY))
2737    try {
2738     delete TypedArrayConstructor.prototype[KEY];
2739    } catch (error) {
2740     try {
2741      TypedArrayConstructor.prototype[KEY] = property;
2742     } catch (error2) {
2743     }
2744    }
2745  }
2746 if (!TypedArrayPrototype[KEY] || forced) {
2747  defineBuiltIn(TypedArrayPrototype, KEY, forced ? property : NATIVE_ARRAY_BUFFER_VIEWS && Int8ArrayPrototype[KEY] || property, options);
2748 }
2749};
2750var exportTypedArrayStaticMethod = function (KEY, property, forced) {
2751 var ARRAY, TypedArrayConstructor;
2752 if (!DESCRIPTORS)
2753  return;
2754 if (setPrototypeOf) {
2755  if (forced)
2756   for (ARRAY in TypedArrayConstructorsList) {
2757    TypedArrayConstructor = global[ARRAY];
2758    if (TypedArrayConstructor && hasOwn(TypedArrayConstructor, KEY))
2759     try {
2760      delete TypedArrayConstructor[KEY];
2761     } catch (error) {
2762     }
2763   }
2764  if (!TypedArray[KEY] || forced) {
2765   try {
2766    return defineBuiltIn(TypedArray, KEY, forced ? property : NATIVE_ARRAY_BUFFER_VIEWS && TypedArray[KEY] || property);
2767   } catch (error) {
2768   }
2769  } else
2770   return;
2771 }
2772 for (ARRAY in TypedArrayConstructorsList) {
2773  TypedArrayConstructor = global[ARRAY];
2774  if (TypedArrayConstructor && (!TypedArrayConstructor[KEY] || forced)) {
2775   defineBuiltIn(TypedArrayConstructor, KEY, property);
2776  }
2777 }
2778};
2779for (NAME in TypedArrayConstructorsList) {
2780 Constructor = global[NAME];
2781 Prototype = Constructor && Constructor.prototype;
2782 if (Prototype)
2783  enforceInternalState(Prototype)[TYPED_ARRAY_CONSTRUCTOR] = Constructor;
2784 else
2785  NATIVE_ARRAY_BUFFER_VIEWS = false;
2786}
2787for (NAME in BigIntArrayConstructorsList) {
2788 Constructor = global[NAME];
2789 Prototype = Constructor && Constructor.prototype;
2790 if (Prototype)
2791  enforceInternalState(Prototype)[TYPED_ARRAY_CONSTRUCTOR] = Constructor;
2792}
2793if (!NATIVE_ARRAY_BUFFER_VIEWS || !isCallable(TypedArray) || TypedArray === Function.prototype) {
2794 TypedArray = function TypedArray() {
2795  throw TypeError('Incorrect invocation');
2796 };
2797 if (NATIVE_ARRAY_BUFFER_VIEWS)
2798  for (NAME in TypedArrayConstructorsList) {
2799   if (global[NAME])
2800    setPrototypeOf(global[NAME], TypedArray);
2801  }
2802}
2803if (!NATIVE_ARRAY_BUFFER_VIEWS || !TypedArrayPrototype || TypedArrayPrototype === ObjectPrototype) {
2804 TypedArrayPrototype = TypedArray.prototype;
2805 if (NATIVE_ARRAY_BUFFER_VIEWS)
2806  for (NAME in TypedArrayConstructorsList) {
2807   if (global[NAME])
2808    setPrototypeOf(global[NAME].prototype, TypedArrayPrototype);
2809  }
2810}
2811if (NATIVE_ARRAY_BUFFER_VIEWS && getPrototypeOf(Uint8ClampedArrayPrototype) !== TypedArrayPrototype) {
2812 setPrototypeOf(Uint8ClampedArrayPrototype, TypedArrayPrototype);
2813}
2814if (DESCRIPTORS && !hasOwn(TypedArrayPrototype, TO_STRING_TAG)) {
2815 TYPED_ARRAY_TAG_REQUIRED = true;
2816 defineBuiltInAccessor(TypedArrayPrototype, TO_STRING_TAG, {
2817  configurable: true,
2818  get: function () {
2819   return isObject(this) ? this[TYPED_ARRAY_TAG] : undefined;
2820  }
2821 });
2822 for (NAME in TypedArrayConstructorsList)
2823  if (global[NAME]) {
2824   createNonEnumerableProperty(global[NAME], TYPED_ARRAY_TAG, NAME);
2825  }
2826}
2827module.exports = {
2828 NATIVE_ARRAY_BUFFER_VIEWS: NATIVE_ARRAY_BUFFER_VIEWS,
2829 TYPED_ARRAY_TAG: TYPED_ARRAY_TAG_REQUIRED && TYPED_ARRAY_TAG,
2830 aTypedArray: aTypedArray,
2831 aTypedArrayConstructor: aTypedArrayConstructor,
2832 exportTypedArrayMethod: exportTypedArrayMethod,
2833 exportTypedArrayStaticMethod: exportTypedArrayStaticMethod,
2834 getTypedArrayConstructor: getTypedArrayConstructor,
2835 isView: isView,
2836 isTypedArray: isTypedArray,
2837 TypedArray: TypedArray,
2838 TypedArrayPrototype: TypedArrayPrototype
2839};
2840
2841/***/ }),
2842/* 95 */
2843/***/ ((module) => {
2844
2845
2846module.exports = typeof ArrayBuffer != 'undefined' && typeof DataView != 'undefined';
2847
2848/***/ }),
2849/* 96 */
2850/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
2851
2852
2853var hasOwn = __w_pdfjs_require__(39);
2854var isCallable = __w_pdfjs_require__(21);
2855var toObject = __w_pdfjs_require__(40);
2856var sharedKey = __w_pdfjs_require__(54);
2857var CORRECT_PROTOTYPE_GETTER = __w_pdfjs_require__(97);
2858var IE_PROTO = sharedKey('IE_PROTO');
2859var $Object = Object;
2860var ObjectPrototype = $Object.prototype;
2861module.exports = CORRECT_PROTOTYPE_GETTER ? $Object.getPrototypeOf : function (O) {
2862 var object = toObject(O);
2863 if (hasOwn(object, IE_PROTO))
2864  return object[IE_PROTO];
2865 var constructor = object.constructor;
2866 if (isCallable(constructor) && object instanceof constructor) {
2867  return constructor.prototype;
2868 }
2869 return object instanceof $Object ? ObjectPrototype : null;
2870};
2871
2872/***/ }),
2873/* 97 */
2874/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
2875
2876
2877var fails = __w_pdfjs_require__(7);
2878module.exports = !fails(function () {
2879 function F() {
2880 }
2881 F.prototype.constructor = null;
2882 return Object.getPrototypeOf(new F()) !== F.prototype;
2883});
2884
2885/***/ }),
2886/* 98 */
2887/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
2888
2889
2890var bind = __w_pdfjs_require__(99);
2891var IndexedObject = __w_pdfjs_require__(13);
2892var toObject = __w_pdfjs_require__(40);
2893var lengthOfArrayLike = __w_pdfjs_require__(64);
2894var createMethod = function (TYPE) {
2895 var IS_FIND_LAST_INDEX = TYPE === 1;
2896 return function ($this, callbackfn, that) {
2897  var O = toObject($this);
2898  var self = IndexedObject(O);
2899  var boundFunction = bind(callbackfn, that);
2900  var index = lengthOfArrayLike(self);
2901  var value, result;
2902  while (index-- > 0) {
2903   value = self[index];
2904   result = boundFunction(value, index, O);
2905   if (result)
2906    switch (TYPE) {
2907    case 0:
2908     return value;
2909    case 1:
2910     return index;
2911    }
2912  }
2913  return IS_FIND_LAST_INDEX ? -1 : undefined;
2914 };
2915};
2916module.exports = {
2917 findLast: createMethod(0),
2918 findLastIndex: createMethod(1)
2919};
2920
2921/***/ }),
2922/* 99 */
2923/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
2924
2925
2926var uncurryThis = __w_pdfjs_require__(100);
2927var aCallable = __w_pdfjs_require__(31);
2928var NATIVE_BIND = __w_pdfjs_require__(9);
2929var bind = uncurryThis(uncurryThis.bind);
2930module.exports = function (fn, that) {
2931 aCallable(fn);
2932 return that === undefined ? fn : NATIVE_BIND ? bind(fn, that) : function () {
2933  return fn.apply(that, arguments);
2934 };
2935};
2936
2937/***/ }),
2938/* 100 */
2939/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
2940
2941
2942var classofRaw = __w_pdfjs_require__(15);
2943var uncurryThis = __w_pdfjs_require__(14);
2944module.exports = function (fn) {
2945 if (classofRaw(fn) === 'Function')
2946  return uncurryThis(fn);
2947};
2948
2949/***/ }),
2950/* 101 */
2951/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {
2952
2953
2954var ArrayBufferViewCore = __w_pdfjs_require__(94);
2955var $findLastIndex = (__w_pdfjs_require__(98).findLastIndex);
2956var aTypedArray = ArrayBufferViewCore.aTypedArray;
2957var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;
2958exportTypedArrayMethod('findLastIndex', function findLastIndex(predicate) {
2959 return $findLastIndex(aTypedArray(this), predicate, arguments.length > 1 ? arguments[1] : undefined);
2960});
2961
2962/***/ }),
2963/* 102 */
2964/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {
2965
2966
2967var global = __w_pdfjs_require__(4);
2968var call = __w_pdfjs_require__(8);
2969var ArrayBufferViewCore = __w_pdfjs_require__(94);
2970var lengthOfArrayLike = __w_pdfjs_require__(64);
2971var toOffset = __w_pdfjs_require__(103);
2972var toIndexedObject = __w_pdfjs_require__(40);
2973var fails = __w_pdfjs_require__(7);
2974var RangeError = global.RangeError;
2975var Int8Array = global.Int8Array;
2976var Int8ArrayPrototype = Int8Array && Int8Array.prototype;
2977var $set = Int8ArrayPrototype && Int8ArrayPrototype.set;
2978var aTypedArray = ArrayBufferViewCore.aTypedArray;
2979var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;
2980var WORKS_WITH_OBJECTS_AND_GENERIC_ON_TYPED_ARRAYS = !fails(function () {
2981 var array = new Uint8ClampedArray(2);
2982 call($set, array, {
2983  length: 1,
2984  0: 3
2985 }, 1);
2986 return array[1] !== 3;
2987});
2988var TO_OBJECT_BUG = WORKS_WITH_OBJECTS_AND_GENERIC_ON_TYPED_ARRAYS && ArrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS && fails(function () {
2989 var array = new Int8Array(2);
2990 array.set(1);
2991 array.set('2', 1);
2992 return array[0] !== 0 || array[1] !== 2;
2993});
2994exportTypedArrayMethod('set', function set(arrayLike) {
2995 aTypedArray(this);
2996 var offset = toOffset(arguments.length > 1 ? arguments[1] : undefined, 1);
2997 var src = toIndexedObject(arrayLike);
2998 if (WORKS_WITH_OBJECTS_AND_GENERIC_ON_TYPED_ARRAYS)
2999  return call($set, this, src, offset);
3000 var length = this.length;
3001 var len = lengthOfArrayLike(src);
3002 var index = 0;
3003 if (len + offset > length)
3004  throw RangeError('Wrong length');
3005 while (index < len)
3006  this[offset + index] = src[index++];
3007}, !WORKS_WITH_OBJECTS_AND_GENERIC_ON_TYPED_ARRAYS || TO_OBJECT_BUG);
3008
3009/***/ }),
3010/* 103 */
3011/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
3012
3013
3014var toPositiveInteger = __w_pdfjs_require__(104);
3015var $RangeError = RangeError;
3016module.exports = function (it, BYTES) {
3017 var offset = toPositiveInteger(it);
3018 if (offset % BYTES)
3019  throw $RangeError('Wrong offset');
3020 return offset;
3021};
3022
3023/***/ }),
3024/* 104 */
3025/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
3026
3027
3028var toIntegerOrInfinity = __w_pdfjs_require__(62);
3029var $RangeError = RangeError;
3030module.exports = function (it) {
3031 var result = toIntegerOrInfinity(it);
3032 if (result < 0)
3033  throw $RangeError("The argument can't be less than 0");
3034 return result;
3035};
3036
3037/***/ }),
3038/* 105 */
3039/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {
3040
3041
3042var arrayToReversed = __w_pdfjs_require__(106);
3043var ArrayBufferViewCore = __w_pdfjs_require__(94);
3044var aTypedArray = ArrayBufferViewCore.aTypedArray;
3045var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;
3046var getTypedArrayConstructor = ArrayBufferViewCore.getTypedArrayConstructor;
3047exportTypedArrayMethod('toReversed', function toReversed() {
3048 return arrayToReversed(aTypedArray(this), getTypedArrayConstructor(this));
3049});
3050
3051/***/ }),
3052/* 106 */
3053/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
3054
3055
3056var lengthOfArrayLike = __w_pdfjs_require__(64);
3057module.exports = function (O, C) {
3058 var len = lengthOfArrayLike(O);
3059 var A = new C(len);
3060 var k = 0;
3061 for (; k < len; k++)
3062  A[k] = O[len - k - 1];
3063 return A;
3064};
3065
3066/***/ }),
3067/* 107 */
3068/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {
3069
3070
3071var ArrayBufferViewCore = __w_pdfjs_require__(94);
3072var uncurryThis = __w_pdfjs_require__(14);
3073var aCallable = __w_pdfjs_require__(31);
3074var arrayFromConstructorAndList = __w_pdfjs_require__(108);
3075var aTypedArray = ArrayBufferViewCore.aTypedArray;
3076var getTypedArrayConstructor = ArrayBufferViewCore.getTypedArrayConstructor;
3077var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;
3078var sort = uncurryThis(ArrayBufferViewCore.TypedArrayPrototype.sort);
3079exportTypedArrayMethod('toSorted', function toSorted(compareFn) {
3080 if (compareFn !== undefined)
3081  aCallable(compareFn);
3082 var O = aTypedArray(this);
3083 var A = arrayFromConstructorAndList(getTypedArrayConstructor(O), O);
3084 return sort(A, compareFn);
3085});
3086
3087/***/ }),
3088/* 108 */
3089/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
3090
3091
3092var lengthOfArrayLike = __w_pdfjs_require__(64);
3093module.exports = function (Constructor, list) {
3094 var index = 0;
3095 var length = lengthOfArrayLike(list);
3096 var result = new Constructor(length);
3097 while (length > index)
3098  result[index] = list[index++];
3099 return result;
3100};
3101
3102/***/ }),
3103/* 109 */
3104/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {
3105
3106
3107var arrayWith = __w_pdfjs_require__(110);
3108var ArrayBufferViewCore = __w_pdfjs_require__(94);
3109var isBigIntArray = __w_pdfjs_require__(111);
3110var toIntegerOrInfinity = __w_pdfjs_require__(62);
3111var toBigInt = __w_pdfjs_require__(112);
3112var aTypedArray = ArrayBufferViewCore.aTypedArray;
3113var getTypedArrayConstructor = ArrayBufferViewCore.getTypedArrayConstructor;
3114var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;
3115var PROPER_ORDER = !!(function () {
3116 try {
3117  new Int8Array(1)['with'](2, {
3118   valueOf: function () {
3119    throw 8;
3120   }
3121  });
3122 } catch (error) {
3123  return error === 8;
3124 }
3125}());
3126exportTypedArrayMethod('with', {
3127 'with': function (index, value) {
3128  var O = aTypedArray(this);
3129  var relativeIndex = toIntegerOrInfinity(index);
3130  var actualValue = isBigIntArray(O) ? toBigInt(value) : +value;
3131  return arrayWith(O, getTypedArrayConstructor(O), relativeIndex, actualValue);
3132 }
3133}['with'], !PROPER_ORDER);
3134
3135/***/ }),
3136/* 110 */
3137/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
3138
3139
3140var lengthOfArrayLike = __w_pdfjs_require__(64);
3141var toIntegerOrInfinity = __w_pdfjs_require__(62);
3142var $RangeError = RangeError;
3143module.exports = function (O, C, index, value) {
3144 var len = lengthOfArrayLike(O);
3145 var relativeIndex = toIntegerOrInfinity(index);
3146 var actualIndex = relativeIndex < 0 ? len + relativeIndex : relativeIndex;
3147 if (actualIndex >= len || actualIndex < 0)
3148  throw $RangeError('Incorrect index');
3149 var A = new C(len);
3150 var k = 0;
3151 for (; k < len; k++)
3152  A[k] = k === actualIndex ? value : O[k];
3153 return A;
3154};
3155
3156/***/ }),
3157/* 111 */
3158/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
3159
3160
3161var classof = __w_pdfjs_require__(78);
3162module.exports = function (it) {
3163 var klass = classof(it);
3164 return klass === 'BigInt64Array' || klass === 'BigUint64Array';
3165};
3166
3167/***/ }),
3168/* 112 */
3169/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
3170
3171
3172var toPrimitive = __w_pdfjs_require__(19);
3173var $TypeError = TypeError;
3174module.exports = function (argument) {
3175 var prim = toPrimitive(argument, 'number');
3176 if (typeof prim == 'number')
3177  throw $TypeError("Can't convert number to bigint");
3178 return BigInt(prim);
3179};
3180
3181/***/ }),
3182/* 113 */
3183/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {
3184
3185
3186var DESCRIPTORS = __w_pdfjs_require__(6);
3187var defineBuiltInAccessor = __w_pdfjs_require__(88);
3188var isDetached = __w_pdfjs_require__(114);
3189var ArrayBufferPrototype = ArrayBuffer.prototype;
3190if (DESCRIPTORS && !('detached' in ArrayBufferPrototype)) {
3191 defineBuiltInAccessor(ArrayBufferPrototype, 'detached', {
3192  configurable: true,
3193  get: function detached() {
3194   return isDetached(this);
3195  }
3196 });
3197}
3198
3199/***/ }),
3200/* 114 */
3201/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
3202
3203
3204var uncurryThis = __w_pdfjs_require__(14);
3205var arrayBufferByteLength = __w_pdfjs_require__(115);
3206var slice = uncurryThis(ArrayBuffer.prototype.slice);
3207module.exports = function (O) {
3208 if (arrayBufferByteLength(O) !== 0)
3209  return false;
3210 try {
3211  slice(O, 0, 0);
3212  return false;
3213 } catch (error) {
3214  return true;
3215 }
3216};
3217
3218/***/ }),
3219/* 115 */
3220/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
3221
3222
3223var uncurryThisAccessor = __w_pdfjs_require__(72);
3224var classof = __w_pdfjs_require__(15);
3225var $TypeError = TypeError;
3226module.exports = uncurryThisAccessor(ArrayBuffer.prototype, 'byteLength', 'get') || function (O) {
3227 if (classof(O) !== 'ArrayBuffer')
3228  throw $TypeError('ArrayBuffer expected');
3229 return O.byteLength;
3230};
3231
3232/***/ }),
3233/* 116 */
3234/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {
3235
3236
3237var $ = __w_pdfjs_require__(3);
3238var $transfer = __w_pdfjs_require__(117);
3239if ($transfer)
3240 $({
3241  target: 'ArrayBuffer',
3242  proto: true
3243 }, {
3244  transfer: function transfer() {
3245   return $transfer(this, arguments.length ? arguments[0] : undefined, true);
3246  }
3247 });
3248
3249/***/ }),
3250/* 117 */
3251/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
3252
3253
3254var global = __w_pdfjs_require__(4);
3255var uncurryThis = __w_pdfjs_require__(14);
3256var uncurryThisAccessor = __w_pdfjs_require__(72);
3257var toIndex = __w_pdfjs_require__(118);
3258var isDetached = __w_pdfjs_require__(114);
3259var arrayBufferByteLength = __w_pdfjs_require__(115);
3260var PROPER_TRANSFER = __w_pdfjs_require__(119);
3261var TypeError = global.TypeError;
3262var structuredClone = global.structuredClone;
3263var ArrayBuffer = global.ArrayBuffer;
3264var DataView = global.DataView;
3265var min = Math.min;
3266var ArrayBufferPrototype = ArrayBuffer.prototype;
3267var DataViewPrototype = DataView.prototype;
3268var slice = uncurryThis(ArrayBufferPrototype.slice);
3269var isResizable = uncurryThisAccessor(ArrayBufferPrototype, 'resizable', 'get');
3270var maxByteLength = uncurryThisAccessor(ArrayBufferPrototype, 'maxByteLength', 'get');
3271var getInt8 = uncurryThis(DataViewPrototype.getInt8);
3272var setInt8 = uncurryThis(DataViewPrototype.setInt8);
3273module.exports = PROPER_TRANSFER && function (arrayBuffer, newLength, preserveResizability) {
3274 var byteLength = arrayBufferByteLength(arrayBuffer);
3275 var newByteLength = newLength === undefined ? byteLength : toIndex(newLength);
3276 var fixedLength = !isResizable || !isResizable(arrayBuffer);
3277 if (isDetached(arrayBuffer))
3278  throw TypeError('ArrayBuffer is detached');
3279 var newBuffer = structuredClone(arrayBuffer, { transfer: [arrayBuffer] });
3280 if (byteLength === newByteLength && (preserveResizability || fixedLength))
3281  return newBuffer;
3282 if (byteLength >= newByteLength && (!preserveResizability || fixedLength))
3283  return slice(newBuffer, 0, newByteLength);
3284 var options = preserveResizability && !fixedLength && maxByteLength ? { maxByteLength: maxByteLength(newBuffer) } : undefined;
3285 var newNewBuffer = new ArrayBuffer(newByteLength, options);
3286 var a = new DataView(newBuffer);
3287 var b = new DataView(newNewBuffer);
3288 var copyLength = min(newByteLength, byteLength);
3289 for (var i = 0; i < copyLength; i++)
3290  setInt8(b, i, getInt8(a, i));
3291 return newNewBuffer;
3292};
3293
3294/***/ }),
3295/* 118 */
3296/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
3297
3298
3299var toIntegerOrInfinity = __w_pdfjs_require__(62);
3300var toLength = __w_pdfjs_require__(65);
3301var $RangeError = RangeError;
3302module.exports = function (it) {
3303 if (it === undefined)
3304  return 0;
3305 var number = toIntegerOrInfinity(it);
3306 var length = toLength(number);
3307 if (number !== length)
3308  throw $RangeError('Wrong length or index');
3309 return length;
3310};
3311
3312/***/ }),
3313/* 119 */
3314/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
3315
3316
3317var global = __w_pdfjs_require__(4);
3318var fails = __w_pdfjs_require__(7);
3319var V8 = __w_pdfjs_require__(28);
3320var IS_BROWSER = __w_pdfjs_require__(120);
3321var IS_DENO = __w_pdfjs_require__(121);
3322var IS_NODE = __w_pdfjs_require__(122);
3323var structuredClone = global.structuredClone;
3324module.exports = !!structuredClone && !fails(function () {
3325 if (IS_DENO && V8 > 92 || IS_NODE && V8 > 94 || IS_BROWSER && V8 > 97)
3326  return false;
3327 var buffer = new ArrayBuffer(8);
3328 var clone = structuredClone(buffer, { transfer: [buffer] });
3329 return buffer.byteLength !== 0 || clone.byteLength !== 8;
3330});
3331
3332/***/ }),
3333/* 120 */
3334/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
3335
3336
3337var IS_DENO = __w_pdfjs_require__(121);
3338var IS_NODE = __w_pdfjs_require__(122);
3339module.exports = !IS_DENO && !IS_NODE && typeof window == 'object' && typeof document == 'object';
3340
3341/***/ }),
3342/* 121 */
3343/***/ ((module) => {
3344
3345
3346module.exports = typeof Deno == 'object' && Deno && typeof Deno.version == 'object';
3347
3348/***/ }),
3349/* 122 */
3350/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
3351
3352
3353var global = __w_pdfjs_require__(4);
3354var classof = __w_pdfjs_require__(15);
3355module.exports = classof(global.process) === 'process';
3356
3357/***/ }),
3358/* 123 */
3359/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {
3360
3361
3362var $ = __w_pdfjs_require__(3);
3363var $transfer = __w_pdfjs_require__(117);
3364if ($transfer)
3365 $({
3366  target: 'ArrayBuffer',
3367  proto: true
3368 }, {
3369  transferToFixedLength: function transferToFixedLength() {
3370   return $transfer(this, arguments.length ? arguments[0] : undefined, false);
3371  }
3372 });
3373
3374/***/ }),
3375/* 124 */
3376/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
3377
3378
3379
3380Object.defineProperty(exports, "__esModule", ({
3381  value: true
3382}));
3383exports.RenderTask = exports.PDFWorkerUtil = exports.PDFWorker = exports.PDFPageProxy = exports.PDFDocumentProxy = exports.PDFDocumentLoadingTask = exports.PDFDataRangeTransport = exports.LoopbackPort = exports.DefaultStandardFontDataFactory = exports.DefaultFilterFactory = exports.DefaultCanvasFactory = exports.DefaultCMapReaderFactory = void 0;
3384Object.defineProperty(exports, "SVGGraphics", ({
3385  enumerable: true,
3386  get: function () {
3387    return _displaySvg.SVGGraphics;
3388  }
3389}));
3390exports.build = void 0;
3391exports.getDocument = getDocument;
3392exports.version = void 0;
3393__w_pdfjs_require__(84);
3394__w_pdfjs_require__(86);
3395__w_pdfjs_require__(87);
3396__w_pdfjs_require__(2);
3397__w_pdfjs_require__(93);
3398__w_pdfjs_require__(101);
3399__w_pdfjs_require__(102);
3400__w_pdfjs_require__(105);
3401__w_pdfjs_require__(107);
3402__w_pdfjs_require__(109);
3403__w_pdfjs_require__(113);
3404__w_pdfjs_require__(116);
3405__w_pdfjs_require__(123);
3406__w_pdfjs_require__(89);
3407__w_pdfjs_require__(125);
3408__w_pdfjs_require__(136);
3409__w_pdfjs_require__(138);
3410__w_pdfjs_require__(141);
3411__w_pdfjs_require__(143);
3412__w_pdfjs_require__(145);
3413__w_pdfjs_require__(147);
3414__w_pdfjs_require__(149);
3415__w_pdfjs_require__(152);
3416var _util = __w_pdfjs_require__(1);
3417var _annotation_storage = __w_pdfjs_require__(163);
3418var _display_utils = __w_pdfjs_require__(168);
3419var _font_loader = __w_pdfjs_require__(171);
3420var _displayNode_utils = __w_pdfjs_require__(172);
3421var _canvas = __w_pdfjs_require__(173);
3422var _worker_options = __w_pdfjs_require__(176);
3423var _message_handler = __w_pdfjs_require__(177);
3424var _metadata = __w_pdfjs_require__(178);
3425var _optional_content_config = __w_pdfjs_require__(179);
3426var _transport_stream = __w_pdfjs_require__(180);
3427var _displayFetch_stream = __w_pdfjs_require__(181);
3428var _displayNetwork = __w_pdfjs_require__(184);
3429var _displayNode_stream = __w_pdfjs_require__(185);
3430var _displaySvg = __w_pdfjs_require__(186);
3431var _xfa_text = __w_pdfjs_require__(194);
3432const DEFAULT_RANGE_CHUNK_SIZE = 65536;
3433const RENDERING_CANCELLED_TIMEOUT = 100;
3434const DELAYED_CLEANUP_TIMEOUT = 5000;
3435const DefaultCanvasFactory = _util.isNodeJS ? _displayNode_utils.NodeCanvasFactory : _display_utils.DOMCanvasFactory;
3436exports.DefaultCanvasFactory = DefaultCanvasFactory;
3437const DefaultCMapReaderFactory = _util.isNodeJS ? _displayNode_utils.NodeCMapReaderFactory : _display_utils.DOMCMapReaderFactory;
3438exports.DefaultCMapReaderFactory = DefaultCMapReaderFactory;
3439const DefaultFilterFactory = _util.isNodeJS ? _displayNode_utils.NodeFilterFactory : _display_utils.DOMFilterFactory;
3440exports.DefaultFilterFactory = DefaultFilterFactory;
3441const DefaultStandardFontDataFactory = _util.isNodeJS ? _displayNode_utils.NodeStandardFontDataFactory : _display_utils.DOMStandardFontDataFactory;
3442exports.DefaultStandardFontDataFactory = DefaultStandardFontDataFactory;
3443function getDocument(src) {
3444  if (typeof src === "string" || src instanceof URL) {
3445    src = {
3446      url: src
3447    };
3448  } else if ((0, _util.isArrayBuffer)(src)) {
3449    src = {
3450      data: src
3451    };
3452  }
3453  if (typeof src !== "object") {
3454    throw new Error("Invalid parameter in getDocument, need parameter object.");
3455  }
3456  if (!src.url && !src.data && !src.range) {
3457    throw new Error("Invalid parameter object: need either .data, .range or .url");
3458  }
3459  const task = new PDFDocumentLoadingTask();
3460  const {
3461    docId
3462  } = task;
3463  const url = src.url ? getUrlProp(src.url) : null;
3464  const data = src.data ? getDataProp(src.data) : null;
3465  const httpHeaders = src.httpHeaders || null;
3466  const withCredentials = src.withCredentials === true;
3467  const password = src.password ?? null;
3468  const rangeTransport = src.range instanceof PDFDataRangeTransport ? src.range : null;
3469  const rangeChunkSize = Number.isInteger(src.rangeChunkSize) && src.rangeChunkSize > 0 ? src.rangeChunkSize : DEFAULT_RANGE_CHUNK_SIZE;
3470  let worker = src.worker instanceof PDFWorker ? src.worker : null;
3471  const verbosity = src.verbosity;
3472  const docBaseUrl = typeof src.docBaseUrl === "string" && !(0, _display_utils.isDataScheme)(src.docBaseUrl) ? src.docBaseUrl : null;
3473  const cMapUrl = typeof src.cMapUrl === "string" ? src.cMapUrl : null;
3474  const cMapPacked = src.cMapPacked !== false;
3475  const CMapReaderFactory = src.CMapReaderFactory || DefaultCMapReaderFactory;
3476  const standardFontDataUrl = typeof src.standardFontDataUrl === "string" ? src.standardFontDataUrl : null;
3477  const StandardFontDataFactory = src.StandardFontDataFactory || DefaultStandardFontDataFactory;
3478  const ignoreErrors = src.stopAtErrors !== true;
3479  const maxImageSize = Number.isInteger(src.maxImageSize) && src.maxImageSize > -1 ? src.maxImageSize : -1;
3480  const isEvalSupported = src.isEvalSupported !== false;
3481  const isOffscreenCanvasSupported = typeof src.isOffscreenCanvasSupported === "boolean" ? src.isOffscreenCanvasSupported : !_util.isNodeJS;
3482  const canvasMaxAreaInBytes = Number.isInteger(src.canvasMaxAreaInBytes) ? src.canvasMaxAreaInBytes : 
3482-1;
3483  const disableFontFace = typeof src.disableFontFace === "boolean" ? src.disableFontFace : _util.isNodeJS;
3484  const fontExtraProperties = src.fontExtraProperties === true;
3485  const enableXfa = src.enableXfa === true;
3486  const ownerDocument = src.ownerDocument || globalThis.document;
3487  const disableRange = src.disableRange === true;
3488  const disableStream = src.disableStream === true;
3489  const disableAutoFetch = src.disableAutoFetch === true;
3490  const pdfBug = src.pdfBug === true;
3491  const length = rangeTransport ? rangeTransport.length : src.length ?? NaN;
3492  const useSystemFonts = typeof src.useSystemFonts === "boolean" ? src.useSystemFonts : !_util.isNodeJS && !disableFontFace;
3493  const useWorkerFetch = typeof src.useWorkerFetch === "boolean" ? src.useWorkerFetch : CMapReaderFactory === _display_utils.DOMCMapReaderFactory && StandardFontDataFactory === _display_utils.DOMStandardFontDataFactory && cMapUrl && standardFontDataUrl && (0, _display_utils.isValidFetchUrl)(cMapUrl, document.baseURI) && (0, _display_utils.isValidFetchUrl)(standardFontDataUrl, document.baseURI);
3494  const canvasFactory = src.canvasFactory || new DefaultCanvasFactory({
3495    ownerDocument
3496  });
3497  const filterFactory = src.filterFactory || new DefaultFilterFactory({
3498    docId,
3499    ownerDocument
3500  });
3501  const styleElement = null;
3502  (0, _util.setVerbosityLevel)(verbosity);
3503  const transportFactory = {
3504    canvasFactory,
3505    filterFactory
3506  };
3507  if (!useWorkerFetch) {
3508    transportFactory.cMapReaderFactory = new CMapReaderFactory({
3509      baseUrl: cMapUrl,
3510      isCompressed: cMapPacked
3511    });
3512    transportFactory.standardFontDataFactory = new StandardFontDataFactory({
3513      baseUrl: standardFontDataUrl
3514    });
3515  }
3516  if (!worker) {
3517    const workerParams = {
3518      verbosity,
3519      port: _worker_options.GlobalWorkerOptions.workerPort
3520    };
3521    worker = workerParams.port ? PDFWorker.fromPort(workerParams) : new PDFWorker(workerParams);
3522    task._worker = worker;
3523  }
3524  const fetchDocParams = {
3525    docId,
3526    apiVersion: '3.11.174',
3527    data,
3528    password,
3529    disableAutoFetch,
3530    rangeChunkSize,
3531    length,
3532    docBaseUrl,
3533    enableXfa,
3534    evaluatorOptions: {
3535      maxImageSize,
3536      disableFontFace,
3537      ignoreErrors,
3538      isEvalSupported,
3539      isOffscreenCanvasSupported,
3540      canvasMaxAreaInBytes,
3541      fontExtraProperties,
3542      useSystemFonts,
3543      cMapUrl: useWorkerFetch ? cMapUrl : null,
3544      standardFontDataUrl: useWorkerFetch ? standardFontDataUrl : null
3545    }
3546  };
3547  const transportParams = {
3548    ignoreErrors,
3549    isEvalSupported,
3550    disableFontFace,
3551    fontExtraProperties,
3552    enableXfa,
3553    ownerDocument,
3554    disableAutoFetch,
3555    pdfBug,
3556    styleElement
3557  };
3558  worker.promise.then(function () {
3559    if (task.destroyed) {
3560      throw new Error("Loading aborted");
3561    }
3562    const workerIdPromise = _fetchDocument(worker, fetchDocParams);
3563    const networkStreamPromise = new Promise(function (resolve) {
3564      let networkStream;
3565      if (rangeTransport) {
3566        networkStream = new _transport_stream.PDFDataTransportStream({
3567          length,
3568          initialData: rangeTransport.initialData,
3569          progressiveDone: rangeTransport.progressiveDone,
3570          contentDispositionFilename: rangeTransport.contentDispositionFilename,
3571          disableRange,
3572          disableStream
3573        }, rangeTransport);
3574      } else if (!data) {
3575        const createPDFNetworkStream = params => {
3576          if (_util.isNodeJS) {
3577            return new _displayNode_stream.PDFNodeStream(params);
3578          }
3579          return (0, _display_utils.isValidFetchUrl)(params.url) ? new _displayFetch_stream.PDFFetchStream(params) : new _displayNetwork.PDFNetworkStream(params);
3580        };
3581        networkStream = createPDFNetworkStream({
3582          url,
3583          length,
3584          httpHeaders,
3585          withCredentials,
3586          rangeChunkSize,
3587          disableRange,
3588          disableStream
3589        });
3590      }
3591      resolve(networkStream);
3592    });
3593    return Promise.all([workerIdPromise, networkStreamPromise]).then(function (_ref) {
3594      let [workerId, networkStream] = _ref;
3595      if (task.destroyed) {
3596        throw new Error("Loading aborted");
3597      }
3598      const messageHandler = new _message_handler.MessageHandler(docId, workerId, worker.port);
3599      const transport = new WorkerTransport(messageHandler, task, networkStream, transportParams, transportFactory);
3600      task._transport = transport;
3601      messageHandler.send("Ready", null);
3602    });
3603  }).catch(task._capability.reject);
3604  return task;
3605}
3606async function _fetchDocument(worker, source) {
3607  if (worker.destroyed) {
3608    throw new Error("Worker was destroyed");
3609  }
3610  const workerId = await worker.messageHandler.sendWithPromise("GetDocRequest", source, source.data ? [source.data.buffer] : null);
3611  if (worker.destroyed) {
3612    throw new Error("Worker was destroyed");
3613  }
3614  return workerId;
3615}
3616function getUrlProp(val) {
3617  if (val instanceof URL) {
3618    return val.href;
3619  }
3620  try {
3621    return new URL(val, window.location).href;
3622  } catch {
3623    if (_util.isNodeJS && typeof val === "string") {
3624      return val;
3625    }
3626  }
3627  throw new Error("Invalid PDF url data: " + "either string or URL-object is expected in the url property.");
3628}
3629function getDataProp(val) {
3630  if (_util.isNodeJS && typeof Buffer !== "undefined" && val instanceof Buffer) {
3631    throw new Error("Please provide binary data as `Uint8Array`, rather than `Buffer`.");
3632  }
3633  if (val instanceof Uint8Array && val.byteLength === val.buffer.byteLength) {
3634    return val;
3635  }
3636  if (typeof val === "string") {
3637    return (0, _util.stringToBytes)(val);
3638  }
3639  if (typeof val === "object" && !isNaN(val?.length) || (0, _util.isArrayBuffer)(val)) {
3640    return new Uint8Array(val);
3641  }
3642  throw new Error("Invalid PDF binary data: either TypedArray, " + "string, or array-like object is expected in the data property.");
3643}
3644class PDFDocumentLoadingTask {
3645  static #docId = 0;
3646  constructor() {
3647    this._capability = new _util.PromiseCapability();
3648    this._transport = null;
3649    this._worker = null;
3650    this.docId = `d${PDFDocumentLoadingTask.#docId++}`;
3651    this.destroyed = false;
3652    this.onPassword = null;
3653    this.onProgress = null;
3654  }
3655  get promise() {
3656    return this._capability.promise;
3657  }
3658  async destroy() {
3659    this.destroyed = true;
3660    try {
3661      if (this._worker?.port) {
3662        this._worker._pendingDestroy = true;
3663      }
3664      await this._transport?.destroy();
3665    } catch (ex) {
3666      if (this._worker?.port) {
3667        delete this._worker._pendingDestroy;
3668      }
3669      throw ex;
3670    }
3671    this._transport = null;
3672    if (this._worker) {
3673      this._worker.destroy();
3674      this._worker = null;
3675    }
3676  }
3677}
3678exports.PDFDocumentLoadingTask = PDFDocumentLoadingTask;
3679class PDFDataRangeTransport {
3680  constructor(length, initialData) {
3681    let progressiveDone = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
3682    let contentDispositionFilename = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
3683    this.length = length;
3684    this.initialData = initialData;
3685    this.progressiveDone = progressiveDone;
3686    this.contentDispositionFilename = contentDispositionFilename;
3687    this._rangeListeners = [];
3688    this._progressListeners = [];
3689    this._progressiveReadListeners = [];
3690    this._progressiveDoneListeners = [];
3691    this._readyCapability = new _util.PromiseCapability();
3692  }
3693  addRangeListener(listener) {
3694    this._rangeListeners.push(listener);
3695  }
3696  addProgressListener(listener) {
3697    this._progressListeners.push(listener);
3698  }
3699  addProgressiveReadListener(listener) {
3700    this._progressiveReadListeners.push(listener);
3701  }
3702  addProgressiveDoneListener(listener) {
3703    this._progressiveDoneListeners.push(listener);
3704  }
3705  onDataRange(begin, chunk) {
3706    for (const listener of this._rangeListeners) {
3707      listener(begin, chunk);
3708    }
3709  }
3710  onDataProgress(loaded, total) {
3711    this._readyCapability.promise.then(() => {
3712      for (const listener of this._progressListeners) {
3713        listener(loaded, total);
3714      }
3715    });
3716  }
3717  onDataProgressiveRead(chunk) {
3718    this._readyCapability.promise.then(() => {
3719      for (const listener of this._progressiveReadListeners) {
3720        listener(chunk);
3721      }
3722    });
3723  }
3724  onDataProgressiveDone() {
3725    this._readyCapability.promise.then(() => {
3726      for (const listener of this._progressiveDoneListeners) {
3727        listener();
3728      }
3729    });
3730  }
3731  transportReady() {
3732    this._readyCapability.resolve();
3733  }
3734  requestDataRange(begin, end) {
3735    (0, _util.unreachable)("Abstract method PDFDataRangeTransport.requestDataRange");
3736  }
3737  abort() {}
3738}
3739exports.PDFDataRangeTransport = PDFDataRangeTransport;
3740class PDFDocumentProxy {
3741  constructor(pdfInfo, transport) {
3742    this._pdfInfo = pdfInfo;
3743    this._transport = transport;
3744    Object.defineProperty(this, "getJavaScript", {
3745      value: () => {
3746        (0, _display_utils.deprecated)("`PDFDocumentProxy.getJavaScript`, " + "please use `PDFDocumentProxy.getJSActions` instead.");
3747        return this.getJSActions().then(js => {
3748          if (!js) {
3749            return js;
3750          }
3751          const jsArr = [];
3752          for (const name in js) {
3753            jsArr.push(...js[name]);
3754          }
3755          return jsArr;
3756        });
3757      }
3758    });
3759  }
3760  get annotationStorage() {
3761    return this._transport.annotationStorage;
3762  }
3763  get filterFactory() {
3764    return this._transport.filterFactory;
3765  }
3766  get numPages() {
3767    return this._pdfInfo.numPages;
3768  }
3769  get fingerprints() {
3770    return this._pdfInfo.fingerprints;
3771  }
3772  get isPureXfa() {
3773    return (0, _util.shadow)(this, "isPureXfa", !!this._transport._htmlForXfa);
3774  }
3775  get allXfaHtml() {
3776    return this._transport._htmlForXfa;
3777  }
3778  getPage(pageNumber) {
3779    return this._transport.getPage(pageNumber);
3780  }
3781  getPageIndex(ref) {
3782    return this._transport.getPageIndex(ref);
3783  }
3784  getDestinations() {
3785    return this._transport.getDestinations();
3786  }
3787  getDestination(id) {
3788    return this._transport.getDestination(id);
3789  }
3790  getPageLabels() {
3791    return this._transport.getPageLabels();
3792  }
3793  getPageLayout() {
3794    return this._transport.getPageLayout();
3795  }
3796  getPageMode() {
3797    return this._transport.getPageMode();
3798  }
3799  getViewerPreferences() {
3800    return this._transport.getViewerPreferences();
3801  }
3802  getOpenAction() {
3803    return this._transport.getOpenAction();
3804  }
3805  getAttachments() {
3806    return this._transport.getAttachments();
3807  }
3808  getJSActions() {
3809    return this._transport.getDocJSActions();
3810  }
3811  getOutline() {
3812    return this._transport.getOutline();
3813  }
3814  getOptionalContentConfig() {
3815    return this._transport.getOptionalContentConfig();
3816  }
3817  getPermissions() {
3818    return this._transport.getPermissions();
3819  }
3820  getMetadata() {
3821    return this._transport.getMetadata();
3822  }
3823  getMarkInfo() {
3824    return this._transport.getMarkInfo();
3825  }
3826  getData() {
3827    return this._transport.getData();
3828  }
3829  saveDocument() {
3830    return this._transport.saveDocument();
3831  }
3832  getDownloadInfo() {
3833    return this._transport.downloadInfoCapability.promise;
3834  }
3835  cleanup() {
3836    let keepLoadedFonts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
3837    return this._transport.startCleanup(keepLoadedFonts || this.isPureXfa);
3838  }
3839  destroy() {
3840    return this.loadingTask.destroy();
3841  }
3842  get loadingParams() {
3843    return this._transport.loadingParams;
3844  }
3845  get loadingTask() {
3846    return this._transport.loadingTask;
3847  }
3848  getFieldObjects() {
3849    return this._transport.getFieldObjects();
3850  }
3851  hasJSActions() {
3852    return this._transport.hasJSActions();
3853  }
3854  getCalculationOrderIds() {
3855    return this._transport.getCalculationOrderIds();
3856  }
3857}
3858exports.PDFDocumentProxy = PDFDocumentProxy;
3859class PDFPageProxy {
3860  #delayedCleanupTimeout = null;
3861  #pendingCleanup = false;
3862  constructor(pageIndex, pageInfo, transport) {
3863    let pdfBug = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
3864    this._pageIndex = pageIndex;
3865    this._pageInfo = pageInfo;
3866    this._transport = transport;
3867    this._stats = pdfBug ? new _display_utils.StatTimer() : null;
3868    this._pdfBug = pdfBug;
3869    this.commonObjs = transport.commonObjs;
3870    this.objs = new PDFObjects();
3871    this._maybeCleanupAfterRender = false;
3872    this._intentStates = new Map();
3873    this.destroyed = false;
3874  }
3875  get pageNumber() {
3876    return this._pageIndex + 1;
3877  }
3878  get rotate() {
3879    return this._pageInfo.rotate;
3880  }
3881  get ref() {
3882    return this._pageInfo.ref;
3883  }
3884  get userUnit() {
3885    return this._pageInfo.userUnit;
3886  }
3887  get view() {
3888    return this._pageInfo.view;
3889  }
3890  getViewport() {
3891    let {
3892      scale,
3893      rotation = this.rotate,
3894      offsetX = 0,
3895      offsetY = 0,
3896      dontFlip = false
3897    } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
3898    return new _display_utils.PageViewport({
3899      viewBox: this.view,
3900      scale,
3901      rotation,
3902      offsetX,
3903      offsetY,
3904      dontFlip
3905    });
3906  }
3907  getAnnotations() {
3908    let {
3909      intent = "display"
3910    } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
3911    const intentArgs = this._transport.getRenderingIntent(intent);
3912    return this._transport.getAnnotations(this._pageIndex, intentArgs.renderingIntent);
3913  }
3914  getJSActions() {
3915    return this._transport.getPageJSActions(this._pageIndex);
3916  }
3917  get filterFactory() {
3918    return this._transport.filterFactory;
3919  }
3920  get isPureXfa() {
3921    return (0, _util.shadow)(this, "isPureXfa", !!this._transport._htmlForXfa);
3922  }
3923  async getXfa() {
3924    return this._transport._htmlForXfa?.children[this._pageIndex] || null;
3925  }
3926  render(_ref2) {
3927    let {
3928      canvasContext,
3929      viewport,
3930      intent = "display",
3931      annotationMode = _util.AnnotationMode.ENABLE,
3932      transform = null,
3933      background = null,
3934      optionalContentConfigPromise = null,
3935      annotationCanvasMap = null,
3936      pageColors = null,
3937      printAnnotationStorage = null
3938    } = _ref2;
3939    this._stats?.time("Overall");
3940    const intentArgs = this._transport.getRenderingIntent(intent, annotationMode, printAnnotationStorage);
3941    this.#pendingCleanup = false;
3942    this.#abortDelayedCleanup();
3943    if (!optionalContentConfigPromise) {
3944      optionalContentConfigPromise = this._transport.getOptionalContentConfig();
3945    }
3946    let intentState = this._intentStates.get(intentArgs.cacheKey);
3947    if (!intentState) {
3948      intentState = Object.create(null);
3949      this._intentStates.set(intentArgs.cacheKey, intentState);
3950    }
3951    if (intentState.streamReaderCancelTimeout) {
3952      clearTimeout(intentState.streamReaderCancelTimeout);
3953      intentState.streamReaderCancelTimeout = null;
3954    }
3955    const intentPrint = !!(intentArgs.renderingIntent & _util.RenderingIntentFlag.PRINT);
3956    if (!intentState.displayReadyCapability) {
3957      intentState.displayReadyCapability = new _util.PromiseCapability();
3958      intentState.operatorList = {
3959        fnArray: [],
3960        argsArray: [],
3961        lastChunk: false,
3962        separateAnnots: null
3963      };
3964      this._stats?.time("Page Request");
3965      this._pumpOperatorList(intentArgs);
3966    }
3967    const complete = error => {
3968      intentState.renderTasks.delete(internalRenderTask);
3969      if (this._maybeCleanupAfterRender || intentPrint) {
3970        this.#pendingCleanup = true;
3971      }
3972      this.#tryCleanup(!intentPrint);
3973      if (error) {
3974        internalRenderTask.capability.reject(error);
3975        this._abortOperatorList({
3976          intentState,
3977          reason: error instanceof Error ? error : new Error(error)
3978        });
3979      } else {
3980        internalRenderTask.capability.resolve();
3981      }
3982      this._stats?.timeEnd("Rendering");
3983      this._stats?.timeEnd("Overall");
3984    };
3985    const internalRenderTask = new InternalRenderTask({
3986      callback: complete,
3987      params: {
3988        canvasContext,
3989        viewport,
3990        transform,
3991        background
3992      },
3993      objs: this.objs,
3994      commonObjs: this.commonObjs,
3995      annotationCanvasMap,
3996      operatorList: intentState.operatorList,
3997      pageIndex: this._pageIndex,
3998      canvasFactory: this._transport.canvasFactory,
3999      filterFactory: this._transport.filterFactory,
4000      useRequestAnimationFrame: !intentPrint,
4001      pdfBug: this._pdfBug,
4002      pageColors
4003    });
4004    (intentState.renderTasks ||= new Set()).add(internalRenderTask);
4005    const renderTask = internalRenderTask.task;
4006    Promise.all([intentState.displayReadyCapability.promise, optionalContentConfigPromise]).then(_ref3 => {
4007      let [transparency, optionalContentConfig] = _ref3;
4008      if (this.destroyed) {
4009        complete();
4010        return;
4011      }
4012      this._stats?.time("Rendering");
4013      internalRenderTask.initializeGraphics({
4014        transparency,
4015        optionalContentConfig
4016      });
4017      internalRenderTask.operatorListChanged();
4018    }).catch(complete);
4019    return renderTask;
4020  }
4021  getOperatorList() {
4022    let {
4023      intent = "display",
4024      annotationMode = _util.AnnotationMode.ENABLE,
4025      printAnnotationStorage = null
4026    } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
4027    function operatorListChanged() {
4028      if (intentState.operatorList.lastChunk) {
4029        intentState.opListReadCapability.resolve(intentState.operatorList);
4030        intentState.renderTasks.delete(opListTask);
4031      }
4032    }
4033    const intentArgs = this._transport.getRenderingIntent(intent, annotationMode, printAnnotationStorage, true);
4034    let intentState = this._intentStates.get(intentArgs.cacheKey);
4035    if (!intentState) {
4036      intentState = Object.create(null);
4037      this._intentStates.set(intentArgs.cacheKey, intentState);
4038    }
4039    let opListTask;
4040    if (!intentState.opListReadCapability) {
4041      opListTask = Object.create(null);
4042      opListTask.operatorListChanged = operatorListChanged;
4043      intentState.opListReadCapability = new _util.PromiseCapability();
4044      (intentState.renderTasks ||= new Set()).add(opListTask);
4045      intentState.operatorList = {
4046        fnArray: [],
4047        argsArray: [],
4048        lastChunk: false,
4049        separateAnnots: null
4050      };
4051      this._stats?.time("Page Request");
4052      this._pumpOperatorList(intentArgs);
4053    }
4054    return intentState.opListReadCapability.promise;
4055  }
4056  streamTextContent() {
4057    let {
4058      includeMarkedContent = false,
4059      disableNormalization = false
4060    } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
4061    const TEXT_CONTENT_CHUNK_SIZE = 100;
4062    return this._transport.messageHandler.sendWithStream("GetTextContent", {
4063      pageIndex: this._pageIndex,
4064      includeMarkedContent: includeMarkedContent === true,
4065      disableNormalization: disableNormalization === true
4066    }, {
4067      highWaterMark: TEXT_CONTENT_CHUNK_SIZE,
4068      size(textContent) {
4069        return textContent.items.length;
4070      }
4071    });
4072  }
4073  getTextContent() {
4074    let params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
4075    if (this._transport._htmlForXfa) {
4076      return this.getXfa().then(xfa => {
4077        return _xfa_text.XfaText.textContent(xfa);
4078      });
4079    }
4080    const readableStream = this.streamTextContent(params);
4081    return new Promise(function (resolve, reject) {
4082      function pump() {
4083        reader.read().then(function (_ref4) {
4084          let {
4085            value,
4086            done
4087          } = _ref4;
4088          if (done) {
4089            resolve(textContent);
4090            return;
4091          }
4092          Object.assign(textContent.styles, value.styles);
4093          textContent.items.push(...value.items);
4094          pump();
4095        }, reject);
4096      }
4097      const reader = readableStream.getReader();
4098      const textContent = {
4099        items: [],
4100        styles: Object.create(null)
4101      };
4102      pump();
4103    });
4104  }
4105  getStructTree() {
4106    return this._transport.getStructTree(this._pageIndex);
4107  }
4108  _destroy() {
4109    this.destroyed = true;
4110    const waitOn = [];
4111    for (const intentState of this._intentStates.values()) {
4112      this._abortOperatorList({
4113        intentState,
4114        reason: new Error("Page was destroyed."),
4115        force: true
4116      });
4117      if (intentState.opListReadCapability) {
4118        continue;
4119      }
4120      for (const internalRenderTask of intentState.renderTasks) {
4121        waitOn.push(internalRenderTask.completed);
4122        internalRenderTask.cancel();
4123      }
4124    }
4125    this.objs.clear();
4126    this.#pendingCleanup = false;
4127    this.#abortDelayedCleanup();
4128    return Promise.all(waitOn);
4129  }
4130  cleanup() {
4131    let resetStats = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
4132    this.#pendingCleanup = true;
4133    const success = this.#tryCleanup(false);
4134    if (resetStats && success) {
4135      this._stats &&= new _display_utils.StatTimer();
4136    }
4137    return success;
4138  }
4139  #tryCleanup() {
4140    let delayed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
4141    this.#abortDelayedCleanup();
4142    if (!this.#pendingCleanup || this.destroyed) {
4143      return false;
4144    }
4145    if (delayed) {
4146      this.#delayedCleanupTimeout = setTimeout(() => {
4147        this.#delayedCleanupTimeout = null;
4148        this.#tryCleanup(false);
4149      }, DELAYED_CLEANUP_TIMEOUT);
4150      return false;
4151    }
4152    for (const {
4153      renderTasks,
4154      operatorList
4155    } of this._intentStates.values()) {
4156      if (renderTasks.size > 0 || !operatorList.lastChunk) {
4157        return false;
4158      }
4159    }
4160    this._intentStates.clear();
4161    this.objs.clear();
4162    this.#pendingCleanup = false;
4163    return true;
4164  }
4165  #abortDelayedCleanup() {
4166    if (this.#delayedCleanupTimeout) {
4167      clearTimeout(this.#delayedCleanupTimeout);
4168      this.#delayedCleanupTimeout = null;
4169    }
4170  }
4171  _startRenderPage(transparency, cacheKey) {
4172    const intentState = this._intentStates.get(cacheKey);
4173    if (!intentState) {
4174      return;
4175    }
4176    this._stats?.timeEnd("Page Request");
4177    intentState.displayReadyCapability?.resolve(transparency);
4178  }
4179  _renderPageChunk(operatorListChunk, intentState) {
4180    for (let i = 0, ii = operatorListChunk.length; i < ii; i++) {
4181      intentState.operatorList.fnArray.push(operatorListChunk.fnArray[i]);
4182      intentState.operatorList.argsArray.push(operatorListChunk.argsArray[i]);
4183    }
4184    intentState.operatorList.lastChunk = operatorListChunk.lastChunk;
4185    intentState.operatorList.separateAnnots = operatorListChunk.separateAnnots;
4186    for (const internalRenderTask of intentState.renderTasks) {
4187      internalRenderTask.operatorListChanged();
4188    }
4189    if (operatorListChunk.lastChunk) {
4190      this.#tryCleanup(true);
4191    }
4192  }
4193  _pumpOperatorList(_ref5) {
4194    let {
4195      renderingIntent,
4196      cacheKey,
4197      annotationStorageSerializable
4198    } = _ref5;
4199    const {
4200      map,
4201      transfers
4202    } = annotationStorageSerializable;
4203    const readableStream = this._transport.messageHandler.sendWithStream("GetOperatorList", {
4204      pageIndex: this._pageIndex,
4205      intent: renderingIntent,
4206      cacheKey,
4207      annotationStorage: map
4208    }, transfers);
4209    const reader = readableStream.getReader();
4210    const intentState = this._intentStates.get(cacheKey);
4211    intentState.streamReader = reader;
4212    const pump = () => {
4213      reader.read().then(_ref6 => {
4214        let {
4215          value,
4216          done
4217        } = _ref6;
4218        if (done) {
4219          intentState.streamReader = null;
4220          return;
4221        }
4222        if (this._transport.destroyed) {
4223          return;
4224        }
4225        this._renderPageChunk(value, intentState);
4226        pump();
4227      }, reason => {
4228        intentState.streamReader = null;
4229        if (this._transport.destroyed) {
4230          return;
4231        }
4232        if (intentState.operatorList) {
4233          intentState.operatorList.lastChunk = true;
4234          for (const internalRenderTask of intentState.renderTasks) {
4235            internalRenderTask.operatorListChanged();
4236          }
4237          this.#tryCleanup(true);
4238        }
4239        if (intentState.displayReadyCapability) {
4240          intentState.displayReadyCapability.reject(reason);
4241        } else if (intentState.opListReadCapability) {
4242          intentState.opListReadCapability.reject(reason);
4243        } else {
4244          throw reason;
4245        }
4246      });
4247    };
4248    pump();
4249  }
4250  _abortOperatorList(_ref7) {
4251    let {
4252      intentState,
4253      reason,
4254      force = false
4255    } = _ref7;
4256    if (!intentState.streamReader) {
4257      return;
4258    }
4259    if (intentState.streamReaderCancelTimeout) {
4260      clearTimeout(intentState.streamReaderCancelTimeout);
4261      intentState.streamReaderCancelTimeout = null;
4262    }
4263    if (!force) {
4264      if (intentState.renderTasks.size > 0) {
4265        return;
4266      }
4267      if (reason instanceof _display_utils.RenderingCancelledException) {
4268        let delay = RENDERING_CANCELLED_TIMEOUT;
4269        if (reason.extraDelay > 0 && reason.extraDelay < 1000) {
4270          delay += reason.extraDelay;
4271        }
4272        intentState.streamReaderCancelTimeout = setTimeout(() => {
4273          intentState.streamReaderCancelTimeout = null;
4274          this._abortOperatorList({
4275            intentState,
4276            reason,
4277            force: true
4278          });
4279        }, delay);
4280        return;
4281      }
4282    }
4283    intentState.streamReader.cancel(new _util.AbortException(reason.message)).catch(() => {});
4284    intentState.streamReader = null;
4285    if (this._transport.destroyed) {
4286      return;
4287    }
4288    for (const [curCacheKey, curIntentState] of this._intentStates) {
4289      if (curIntentState === intentState) {
4290        this._intentStates.delete(curCacheKey);
4291        break;
4292      }
4293    }
4294    this.cleanup();
4295  }
4296  get stats() {
4297    return this._stats;
4298  }
4299}
4300exports.PDFPageProxy = PDFPageProxy;
4301class LoopbackPort {
4302  #listeners = new Set();
4303  #deferred = Promise.resolve();
4304  postMessage(obj, transfer) {
4305    const event = {
4306      data: structuredClone(obj, null)
4307    };
4308    this.#deferred.then(() => {
4309      for (const listener of this.#listeners) {
4310        listener.call(this, event);
4311      }
4312    });
4313  }
4314  addEventListener(name, listener) {
4315    this.#listeners.add(listener);
4316  }
4317  removeEventListener(name, listener) {
4318    this.#listeners.delete(listener);
4319  }
4320  terminate() {
4321    this.#listeners.clear();
4322  }
4323}
4324exports.LoopbackPort = LoopbackPort;
4325const PDFWorkerUtil = {
4326  isWorkerDisabled: false,
4327  fallbackWorkerSrc: null,
4328  fakeWorkerId: 0
4329};
4330exports.PDFWorkerUtil = PDFWorkerUtil;
4331{
4332  if (_util.isNodeJS && typeof require === "function") {
4333    PDFWorkerUtil.isWorkerDisabled = true;
4334    PDFWorkerUtil.fallbackWorkerSrc = "./pdf.worker.js";
4335  } else if (typeof document === "object") {
4336    const pdfjsFilePath = document?.currentScript?.src;
4337    if (pdfjsFilePath) {
4338      PDFWorkerUtil.fallbackWorkerSrc = pdfjsFilePath.replace(/(\.(?:min\.)?js)(\?.*)?$/i, ".w
4338orker$1$2");
4339    }
4340  }
4341  PDFWorkerUtil.isSameOrigin = function (baseUrl, otherUrl) {
4342    let base;
4343    try {
4344      base = new URL(baseUrl);
4345      if (!base.origin || base.origin === "null") {
4346        return false;
4347      }
4348    } catch {
4349      return false;
4350    }
4351    const other = new URL(otherUrl, base);
4352    return base.origin === other.origin;
4353  };
4354  PDFWorkerUtil.createCDNWrapper = function (url) {
4355    const wrapper = `importScripts("${url}");`;
4356    return URL.createObjectURL(new Blob([wrapper]));
4357  };
4358}
4359class PDFWorker {
4360  static #workerPorts;
4361  constructor() {
4362    let {
4363      name = null,
4364      port = null,
4365      verbosity = (0, _util.getVerbosityLevel)()
4366    } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
4367    this.name = name;
4368    this.destroyed = false;
4369    this.verbosity = verbosity;
4370    this._readyCapability = new _util.PromiseCapability();
4371    this._port = null;
4372    this._webWorker = null;
4373    this._messageHandler = null;
4374    if (port) {
4375      if (PDFWorker.#workerPorts?.has(port)) {
4376        throw new Error("Cannot use more than one PDFWorker per port.");
4377      }
4378      (PDFWorker.#workerPorts ||= new WeakMap()).set(port, this);
4379      this._initializeFromPort(port);
4380      return;
4381    }
4382    this._initialize();
4383  }
4384  get promise() {
4385    return this._readyCapability.promise;
4386  }
4387  get port() {
4388    return this._port;
4389  }
4390  get messageHandler() {
4391    return this._messageHandler;
4392  }
4393  _initializeFromPort(port) {
4394    this._port = port;
4395    this._messageHandler = new _message_handler.MessageHandler("main", "worker", port);
4396    this._messageHandler.on("ready", function () {});
4397    this._readyCapability.resolve();
4398    this._messageHandler.send("configure", {
4399      verbosity: this.verbosity
4400    });
4401  }
4402  _initialize() {
4403    if (!PDFWorkerUtil.isWorkerDisabled && !PDFWorker._mainThreadWorkerMessageHandler) {
4404      let {
4405        workerSrc
4406      } = PDFWorker;
4407      try {
4408        if (!PDFWorkerUtil.isSameOrigin(window.location.href, workerSrc)) {
4409          workerSrc = PDFWorkerUtil.createCDNWrapper(new URL(workerSrc, window.location).href);
4410        }
4411        const worker = new Worker(workerSrc);
4412        const messageHandler = new _message_handler.MessageHandler("main", "worker", worker);
4413        const terminateEarly = () => {
4414          worker.removeEventListener("error", onWorkerError);
4415          messageHandler.destroy();
4416          worker.terminate();
4417          if (this.destroyed) {
4418            this._readyCapability.reject(new Error("Worker was destroyed"));
4419          } else {
4420            this._setupFakeWorker();
4421          }
4422        };
4423        const onWorkerError = () => {
4424          if (!this._webWorker) {
4425            terminateEarly();
4426          }
4427        };
4428        worker.addEventListener("error", onWorkerError);
4429        messageHandler.on("test", data => {
4430          worker.removeEventListener("error", onWorkerError);
4431          if (this.destroyed) {
4432            terminateEarly();
4433            return;
4434          }
4435          if (data) {
4436            this._messageHandler = messageHandler;
4437            this._port = worker;
4438            this._webWorker = worker;
4439            this._readyCapability.resolve();
4440            messageHandler.send("configure", {
4441              verbosity: this.verbosity
4442            });
4443          } else {
4444            this._setupFakeWorker();
4445            messageHandler.destroy();
4446            worker.terminate();
4447          }
4448        });
4449        messageHandler.on("ready", data => {
4450          worker.removeEventListener("error", onWorkerError);
4451          if (this.destroyed) {
4452            terminateEarly();
4453            return;
4454          }
4455          try {
4456            sendTest();
4457          } catch {
4458            this._setupFakeWorker();
4459          }
4460        });
4461        const sendTest = () => {
4462          const testObj = new Uint8Array();
4463          messageHandler.send("test", testObj, [testObj.buffer]);
4464        };
4465        sendTest();
4466        return;
4467      } catch {
4468        (0, _util.info)("The worker has been disabled.");
4469      }
4470    }
4471    this._setupFakeWorker();
4472  }
4473  _setupFakeWorker() {
4474    if (!PDFWorkerUtil.isWorkerDisabled) {
4475      (0, _util.warn)("Setting up fake worker.");
4476      PDFWorkerUtil.isWorkerDisabled = true;
4477    }
4478    PDFWorker._setupFakeWorkerGlobal.then(WorkerMessageHandler => {
4479      if (this.destroyed) {
4480        this._readyCapability.reject(new Error("Worker was destroyed"));
4481        return;
4482      }
4483      const port = new LoopbackPort();
4484      this._port = port;
4485      const id = `fake${PDFWorkerUtil.fakeWorkerId++}`;
4486      const workerHandler = new _message_handler.MessageHandler(id + "_worker", id, port);
4487      WorkerMessageHandler.setup(workerHandler, port);
4488      const messageHandler = new _message_handler.MessageHandler(id, id + "_worker", port);
4489      this._messageHandler = messageHandler;
4490      this._readyCapability.resolve();
4491      messageHandler.send("configure", {
4492        verbosity: this.verbosity
4493      });
4494    }).catch(reason => {
4495      this._readyCapability.reject(new Error(`Setting up fake worker failed: "${reason.message}".`));
4496    });
4497  }
4498  destroy() {
4499    this.destroyed = true;
4500    if (this._webWorker) {
4501      this._webWorker.terminate();
4502      this._webWorker = null;
4503    }
4504    PDFWorker.#workerPorts?.delete(this._port);
4505    this._port = null;
4506    if (this._messageHandler) {
4507      this._messageHandler.destroy();
4508      this._messageHandler = null;
4509    }
4510  }
4511  static fromPort(params) {
4512    if (!params?.port) {
4513      throw new Error("PDFWorker.fromPort - invalid method signature.");
4514    }
4515    const cachedPort = this.#workerPorts?.get(params.port);
4516    if (cachedPort) {
4517      if (cachedPort._pendingDestroy) {
4518        throw new Error("PDFWorker.fromPort - the worker is being destroyed.\n" + "Please remember to await `PDFDocumentLoadingTask.destroy()`-calls.");
4519      }
4520      return cachedPort;
4521    }
4522    return new PDFWorker(params);
4523  }
4524  static get workerSrc() {
4525    if (_worker_options.GlobalWorkerOptions.workerSrc) {
4526      return _worker_options.GlobalWorkerOptions.workerSrc;
4527    }
4528    if (PDFWorkerUtil.fallbackWorkerSrc !== null) {
4529      if (!_util.isNodeJS) {
4530        (0, _display_utils.deprecated)('No "GlobalWorkerOptions.workerSrc" specified.');
4531      }
4532      return PDFWorkerUtil.fallbackWorkerSrc;
4533    }
4534    throw new Error('No "GlobalWorkerOptions.workerSrc" specified.');
4535  }
4536  static get _mainThreadWorkerMessageHandler() {
4537    try {
4538      return globalThis.pdfjsWorker?.WorkerMessageHandler || null;
4539    } catch {
4540      return null;
4541    }
4542  }
4543  static get _setupFakeWorkerGlobal() {
4544    const loader = async () => {
4545      const mainWorkerMessageHandler = this._mainThreadWorkerMessageHandler;
4546      if (mainWorkerMessageHandler) {
4547        return mainWorkerMessageHandler;
4548      }
4549      if (_util.isNodeJS && typeof require === "function") {
4550        const worker = eval("require")(this.workerSrc);
4551        return worker.WorkerMessageHandler;
4552      }
4553      await (0, _display_utils.loadScript)(this.workerSrc);
4554      return window.pdfjsWorker.WorkerMessageHandler;
4555    };
4556    return (0, _util.shadow)(this, "_setupFakeWorkerGlobal", loader());
4557  }
4558}
4559exports.PDFWorker = PDFWorker;
4560class WorkerTransport {
4561  #methodPromises = new Map();
4562  #pageCache = new Map();
4563  #pagePromises = new Map();
4564  #passwordCapability = null;
4565  constructor(messageHandler, loadingTask, networkStream, params, factory) {
4566    this.messageHandler = messageHandler;
4567    this.loadingTask = loadingTask;
4568    this.commonObjs = new PDFObjects();
4569    this.fontLoader = new _font_loader.FontLoader({
4570      ownerDocument: params.ownerDocument,
4571      styleElement: params.styleElement
4572    });
4573    this._params = params;
4574    this.canvasFactory = factory.canvasFactory;
4575    this.filterFactory = factory.filterFactory;
4576    this.cMapReaderFactory = factory.cMapReaderFactory;
4577    this.standardFontDataFactory = factory.standardFontDataFactory;
4578    this.destroyed = false;
4579    this.destroyCapability = null;
4580    this._networkStream = networkStream;
4581    this._fullReader = null;
4582    this._lastProgress = null;
4583    this.downloadInfoCapability = new _util.PromiseCapability();
4584    this.setupMessageHandler();
4585  }
4586  #cacheSimpleMethod(name) {
4587    let data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
4588    const cachedPromise = this.#methodPromises.get(name);
4589    if (cachedPromise) {
4590      return cachedPromise;
4591    }
4592    const promise = this.messageHandler.sendWithPromise(name, data);
4593    this.#methodPromises.set(name, promise);
4594    return promise;
4595  }
4596  get annotationStorage() {
4597    return (0, _util.shadow)(this, "annotationStorage", new _annotation_storage.AnnotationStorage());
4598  }
4599  getRenderingIntent(intent) {
4600    let annotationMode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _util.AnnotationMode.ENABLE;
4601    let printAnnotationStorage = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
4602    let isOpList = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
4603    let renderingIntent = _util.RenderingIntentFlag.DISPLAY;
4604    let annotationStorageSerializable = _annotation_storage.SerializableEmpty;
4605    switch (intent) {
4606      case "any":
4607        renderingIntent = _util.RenderingIntentFlag.ANY;
4608        break;
4609      case "display":
4610        break;
4611      case "print":
4612        renderingIntent = _util.RenderingIntentFlag.PRINT;
4613        break;
4614      default:
4615        (0, _util.warn)(`getRenderingIntent - invalid intent: ${intent}`);
4616    }
4617    switch (annotationMode) {
4618      case _util.AnnotationMode.DISABLE:
4619        renderingIntent += _util.RenderingIntentFlag.ANNOTATIONS_DISABLE;
4620        break;
4621      case _util.AnnotationMode.ENABLE:
4622        break;
4623      case _util.AnnotationMode.ENABLE_FORMS:
4624        renderingIntent += _util.RenderingIntentFlag.ANNOTATIONS_FORMS;
4625        break;
4626      case _util.AnnotationMode.ENABLE_STORAGE:
4627        renderingIntent += _util.RenderingIntentFlag.ANNOTATIONS_STORAGE;
4628        const annotationStorage = renderingIntent & _util.RenderingIntentFlag.PRINT && printAnnotationStorage instanceof _annotation_storage.PrintAnnotationStorage ? printAnnotationStorage : this.annotationStorage;
4629        annotationStorageSerializable = annotationStorage.serializable;
4630        break;
4631      default:
4632        (0, _util.warn)(`getRenderingIntent - invalid annotationMode: ${annotationMode}`);
4633    }
4634    if (isOpList) {
4635      renderingIntent += _util.RenderingIntentFlag.OPLIST;
4636    }
4637    return {
4638      renderingIntent,
4639      cacheKey: `${renderingIntent}_${annotationStorageSerializable.hash}`,
4640      annotationStorageSerializable
4641    };
4642  }
4643  destroy() {
4644    if (this.destroyCapability) {
4645      return this.destroyCapability.promise;
4646    }
4647    this.destroyed = true;
4648    this.destroyCapability = new _util.PromiseCapability();
4649    this.#passwordCapability?.reject(new Error("Worker was destroyed during onPassword callback"));
4650    const waitOn = [];
4651    for (const page of this.#pageCache.values()) {
4652      waitOn.push(page._destroy());
4653    }
4654    this.#pageCache.clear();
4655    this.#pagePromises.clear();
4656    if (this.hasOwnProperty("annotationStorage")) {
4657      this.annotationStorage.resetModified();
4658    }
4659    const terminated = this.messageHandler.sendWithPromise("Terminate", null);
4660    waitOn.push(terminated);
4661    Promise.all(waitOn).then(() => {
4662      this.commonObjs.clear();
4663      this.fontLoader.clear();
4664      this.#methodPromises.clear();
4665      this.filterFactory.destroy();
4666      this._networkStream?.cancelAllRequests(new _util.AbortException("Worker was terminated."));
4667      if (this.messageHandler) {
4668        this.messageHandler.destroy();
4669        this.messageHandler = null;
4670      }
4671      this.destroyCapability.resolve();
4672    }, this.destroyCapability.reject);
4673    return this.destroyCapability.promise;
4674  }
4675  setupMessageHandler() {
4676    const {
4677      messageHandler,
4678      loadingTask
4679    } = this;
4680    messageHandler.on("GetReader", (data, sink) => {
4681      (0, _util.assert)(this._networkStream, "GetReader - no `IPDFStream` instance available.");
4682      this._fullReader = this._networkStream.getFullReader();
4683      this._fullReader.onProgress = evt => {
4684        this._lastProgress = {
4685          loaded: evt.loaded,
4686          total: evt.total
4687        };
4688      };
4689      sink.onPull = () => {
4690        this._fullReader.read().then(function (_ref8) {
4691          let {
4692            value,
4693            done
4694          } = _ref8;
4695          if (done) {
4696            sink.close();
4697            return;
4698          }
4699          (0, _util.assert)(value instanceof ArrayBuffer, "GetReader - expected an ArrayBuffer.");
4700          sink.enqueue(new Uint8Array(value), 1, [value]);
4701        }).catch(reason => {
4702          sink.error(reason);
4703        });
4704      };
4705      sink.onCancel = reason => {
4706        this._fullReader.cancel(reason);
4707        sink.ready.catch(readyReason => {
4708          if (this.destroyed) {
4709            return;
4710          }
4711          throw readyReason;
4712        });
4713      };
4714    });
4715    messageHandler.on("ReaderHeadersReady", data => {
4716      const headersCapability = new _util.PromiseCapability();
4717      const fullReader = this._fullReader;
4718      fullReader.headersReady.then(() => {
4719        if (!fullReader.isStreamingSupported || !fullReader.isRangeSupported) {
4720          if (this._lastProgress) {
4721            loadingTask.onProgress?.(this._lastProgress);
4722          }
4723          fullReader.onProgress = evt => {
4724            loadingTask.onProgress?.({
4725              loaded: evt.loaded,
4726              total: evt.total
4727            });
4728          };
4729        }
4730        headersCapability.resolve({
4731          isStreamingSupported: fullReader.isStreamingSupported,
4732          isRangeSupported: fullReader.isRangeSupported,
4733          contentLength: fullReader.contentLength
4734        });
4735      }, headersCapability.reject);
4736      return headersCapability.promise;
4737    });
4738    messageHandler.on("GetRangeReader", (data, sink) => {
4739      (0, _util.assert)(this._networkStream, "GetRangeReader - no `IPDFStream` instance available.");
4740      const rangeReader = this._networkStream.getRangeReader(data.begin, data.end);
4741      if (!rangeReader) {
4742        sink.close();
4743        return;
4744      }
4745      sink.onPull = () => {
4746        rangeReader.read().then(function (_ref9) {
4747          let {
4748            value,
4749            done
4750          } = _ref9;
4751          if (done) {
4752            sink.close();
4753            return;
4754          }
4755          (0, _util.assert)(value instanceof ArrayBuffer, "GetRangeReader - expected an ArrayBuffer.");
4756          sink.enqueue(new Uint8Array(value), 1, [value]);
4757        }).catch(reason => {
4758          sink.error(reason);
4759        });
4760      };
4761      sink.onCancel = reason => {
4762        rangeReader.cancel(reason);
4763        sink.ready.catch(readyReason => {
4764          if (this.destroyed) {
4765            return;
4766          }
4767          throw readyReason;
4768        });
4769      };
4770    });
4771    messageHandler.on("GetDoc", _ref10 => {
4772      let {
4773        pdfInfo
4774      } = _ref10;
4775      this._numPages = pdfInfo.numPages;
4776      this._htmlForXfa = pdfInfo.htmlForXfa;
4777      delete pdfInfo.htmlForXfa;
4778      loadingTask._capability.resolve(new PDFDocumentProxy(pdfInfo, this));
4779    });
4780    messageHandler.on("DocException", function (ex) {
4781      let reason;
4782      switch (ex.name) {
4783        case "PasswordException":
4784          reason = new _util.PasswordException(ex.message, ex.code);
4785          break;
4786        case "InvalidPDFException":
4787          reason = new _util.InvalidPDFException(ex.message);
4788          break;
4789        case "MissingPDFException":
4790          reason = new _util.MissingPDFException(ex.message);
4791          break;
4792        case "UnexpectedResponseException":
4793          reason = new _util.UnexpectedResponseException(ex.message, ex.status);
4794          break;
4795        case "UnknownErrorException":
4796          reason = new _util.UnknownErrorException(ex.message, ex.details);
4797          break;
4798        default:
4799          (0, _util.unreachable)("DocException - expected a valid Error.");
4800      }
4801      loadingTask._capability.reject(reason);
4802    });
4803    messageHandler.on("PasswordRequest", exception => {
4804      this.#passwordCapability = new _util.PromiseCapability();
4805      if (loadingTask.onPassword) {
4806        const updatePassword = password => {
4807          if (password instanceof Error) {
4808            this.#passwordCapability.reject(password);
4809          } else {
4810            this.#passwordCapability.resolve({
4811              password
4812            });
4813          }
4814        };
4815        try {
4816          loadingTask.onPassword(updatePassword, exception.code);
4817        } catch (ex) {
4818          this.#passwordCapability.reject(ex);
4819        }
4820      } else {
4821        this.#passwordCapability.reject(new _util.PasswordException(exception.message, exception.code));
4822      }
4823      return this.#passwordCapability.promise;
4824    });
4825    messageHandler.on("DataLoaded", data => {
4826      loadingTask.onProgress?.({
4827        loaded: data.length,
4828        total: data.length
4829      });
4830      this.downloadInfoCapability.resolve(data);
4831    });
4832    messageHandler.on("StartRenderPage", data => {
4833      if (this.destroyed) {
4834        return;
4835      }
4836      const page = this.#pageCache.get(data.pageIndex);
4837      page._startRenderPage(data.transparency, data.cacheKey);
4838    });
4839    messageHandler.on("commonobj", _ref11 => {
4840      let [id, type, exportedData] = _ref11;
4841      if (this.destroyed) {
4842        return;
4843      }
4844      if (this.commonObjs.has(id)) {
4845        return;
4846      }
4847      switch (type) {
4848        case "Font":
4849          const params = this._params;
4850          if ("error" in exportedData) {
4851            const exportedError = exportedData.error;
4852            (0, _util.warn)(`Error during font loading: ${exportedError}`);
4853            this.commonObjs.resolve(id, exportedError);
4854            break;
4855          }
4856          const inspectFont = params.pdfBug && globalThis.FontInspector?.enabled ? (font, url) => globalThis.FontInspector.fontAdded(font, url) : null;
4857          const font = new _font_loader.FontFaceObject(exportedData, {
4858            isEvalSupported: params.isEvalSupported,
4859            disableFontFace: params.disableFontFace,
4860            ignoreErrors: params.ignoreErrors,
4861            inspectFont
4862          });
4863          this.fontLoader.bind(font).catch(reason => {
4864            return messageHandler.sendWithPromise("FontFallback", {
4865              id
4866            });
4867          }).finally(() => {
4868            if (!params.fontExtraProperties && font.data) {
4869              font.data = null;
4870            }
4871            this.commonObjs.resolve(id, font);
4872          });
4873          break;
4874        case "FontPath":
4875        case "Image":
4876        case "Pattern":
4877          this.commonObjs.resolve(id, exportedData);
4878          break;
4879        default:
4880          throw new Error(`Got unknown common object type ${type}`);
4881      }
4882    });
4883    messageHandler.on("obj", _ref12 => {
4884      let [id, pageIndex, type, imageData] = _ref12;
4885      if (this.destroyed) {
4886        return;
4887      }
4888      const pageProxy = this.#pageCache.get(pageIndex);
4889      if (pageProxy.objs.has(id)) {
4890        return;
4891      }
4892      switch (type) {
4893        case "Image":
4894          pageProxy.objs.resolve(id, imageData);
4895          if (imageData) {
4896            let length;
4897            if (imageData.bitmap) {
4898              const {
4899                width,
4900                height
4901              } = imageData;
4902              length = width * height * 4;
4903            } else {
4904              length = imageData.data?.length || 0;
4905            }
4906            if (length > _util.MAX_IMAGE_SIZE_TO_CACHE) {
4907              pageProxy._maybeCleanupAfterRender = true;
4908            }
4909          }
4910          break;
4911        case "Pattern":
4912          pageProxy.objs.resolve(id, imageData);
4913          break;
4914        default:
4915          throw new Error(`Got unknown object type ${type}`);
4916      }
4917    });
4918    messageHandler.on("DocProgress", data => {
4919      if (this.destroyed) {
4920        return;
4921      }
4922      loadingTask.onProgress?.({
4923        loaded: data.loaded,
4924        total: data.total
4925      });
4926    });
4927    messageHandler.on("FetchBuiltInCMap", data => {
4928      if (this.destroyed) {
4929        return Promise.reject(new Error("Worker was destroyed."));
4930      }
4931      if (!this.cMapReaderFactory) {
4932        return Promise.reject(new Error("CMapReaderFactory not initialized, see the `useWorkerFetch` parameter."));
4933      }
4934      return this.cMapReaderFactory.fetch(data);
4935    });
4936    messageHandler.on("FetchStandardFontData", data => {
4937      if (this.destroyed) {
4938        return Promise.reject(new Error("Worker was destroyed."));
4939      }
4940      if (!this.standardFontDataFactory) {
4941        return Promise.reject(new Error("StandardFontDataFactory not initialized, see the `useWorkerFetch` parameter."));
4942      }
4943      return this.standardFontDataFactory.fetch(data);
4944    });
4945  }
4946  getData() {
4947    return this.messageHandler.sendWithPromise("GetData", null);
4948  }
4949  saveDocument() {
4950    if (this.annotationStorage.size <= 0) {
4951      (0, _util.warn)("saveDocument called while `annotationStorage` is empty, " + "please use the getData-method instead.");
4952    }
4953    const {
4954      map,
4955      transfers
4956    } = this.annotationStorage.serializable;
4957    return this.messageHandler.sendWithPromise("SaveDocument", {
4958      isPureXfa: !!this._htmlForXfa,
4959      numPages: this._numPages,
4960      annotationStorage: map,
4961      filename: this._fullReader?.filename ?? null
4962    }, transfers).finally(() => {
4963      this.annotationStorage.resetModified();
4964    });
4965  }
4966  getPage(pageNumber) {
4967    if (!Number.isInteger(pageNumber) || pageNumber <= 0 || pageNumber > this._numPages) {
4968      return Promise.reject(new Error("Invalid page request."));
4969    }
4970    const pageIndex = pageNumber - 1,
4971      cachedPromise = this.#pagePromises.get(pageIndex);
4972    if (cachedPromise) {
4973      return cachedPromise;
4974    }
4975    const promise = this.messageHandler.sendWithPromise("GetPage", {
4976      pageIndex
4977    }).then(pageInfo => {
4978      if (this.destroyed) {
4979        throw new Error("Transport destroyed");
4980      }
4981      const page = new PDFPageProxy(pageIndex, pageInfo, this, this._params.pdfBug);
4982      this.#pageCache.set(pageIndex, page);
4983      return page;
4984    });
4985    this.#pagePromises.set(pageIndex, promise);
4986    return promise;
4987  }
4988  getPageIndex(ref) {
4989    if (typeof ref !== "object" || ref === null || !Number.isInteger(ref.num) || ref.num < 0 || !Number.isInteger(ref.gen) || ref.gen < 0) {
4990      return Promise.reject(new Error("Invalid pageIndex request."));
4991    }
4992    return this.messageHandler.sendWithPromise("GetPageIndex", {
4993      num: ref.num,
4994      gen: ref.gen
4995    });
4996  }
4997  getAnnotations(pageIndex, intent) {
4998    return this.messageHandler.sendWithPromise("GetAnnotations", {
4999      pageIndex,
5000      intent
5001    });
5002  }
5003  getFieldObjects() {
5004    return this.#cacheSimpleMethod("GetFieldObjects");
5005  }
5006  hasJSActions() {
5007    return this.#cacheSimpleMethod("HasJSActions");
5008  }
5009  getCalculationOrderIds() {
5010    return this.messageHandler.sendWithPromise("GetCalculationOrderIds", null);
5011  }
5012  getDestinations() {
5013    return this.messageHandler.sendWithPromise("GetDestinations", null);
5014  }
5015  getDestination(id) {
5016    if (typeof id !== "string") {
5017      return Promise.reject(new Error("Invalid destination request."));
5018    }
5019    return this.messageHandler.sendWithPromise("GetDestination", {
5020      id
5021    });
5022  }
5023  getPageLabels() {
5024    return this.messageHandler.sendWithPromise("GetPageLabels", null);
5025  }
5026  getPageLayout() {
5027    return this.messageHandler.sendWithPromise("GetPageLayout", null);
5028  }
5029  getPageMode() {
5030    return this.messageHandler.sendWithPromise("GetPageMode", null);
5031  }
5032  getViewerPreferences() {
5033    return this.messageHandler.sendWithPromise("GetViewerPreferences", null);
5034  }
5035  getOpenAction() {
5036    return this.messageHandler.sendWithPromise("GetOpenAction", null);
5037  }
5038  getAttachments() {
5039    return this.messageHandler.sendWithPromise("GetAttachments", null);
5040  }
5041  getDocJSActions() {
5042    return this.#cacheSimpleMethod("GetDocJSActions");
5043  }
5044  getPageJSActions(pageIndex) {
5045    return this.messageHandler.sendWithPromise("GetPageJSActions", {
5046      pageIndex
5047    });
5048  }
5049  getStructTree(pageIndex) {
5050    return this.messageHandler.sendWithPromise("GetStructTree", {
5051      pageIndex
5052    });
5053  }
5054  getOutline() {
5055    return this.messageHandler.sendWithPromise("GetOutline", null);
5056  }
5057  getOptionalContentConfig() {
5058    return this.messageHandler.sendWithPromise("GetOptionalContentConfig", null).then(results => {
5059      return new _optional_content_config.OptionalContentConfig(results);
5060    });
5061  }
5062  getPermissions() {
5063    return this.messageHandler.sendWithPromise("GetPermissions", null);
5064  }
5065  getMetadata() {
5066    const name = "GetMetadata",
5067      cachedPromise = this.#methodPromises.get(name);
5068    if (cachedPromise) {
5069      return cachedPromise;
5070    }
5071    const promise = this.messageHandler.sendWithPromise(name, null).then(results => {
5072      return {
5073        info: results[0],
5074        metadata: results[1] ? new _metadata.Metadata(results[1]) : null,
5075        contentDispositionFilename: this._fullReader?.filename ?? null,
5076        contentLength: this._fullReader?.contentLength ?? null
5077      };
5078    });
5079    this.#methodPromises.set(name, promise);
5080    return promise;
5081  }
5082  getMarkInfo() {
5083    return this.messageHandler.sendWithPromise("GetMarkInfo", null);
5084  }
5085  async startCleanup() {
5086    let keepLoadedFonts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
5087    if (this.destroyed) {
5088      return;
5089    }
5090    await this.messageHandler.sendWithPromise("Cleanup", null);
5091    for (const page of this.#pageCache.values()) {
5092      const cleanupSuccessful = page.cleanup();
5093      if (!cleanupSuccessful) {
5094        throw new Error(`startCleanup: Page ${page.pageNumber} is currently rendering.`);
5095      }
5096    }
5097    this.commonObjs.clear();
5098    if (!keepLoadedFonts) {
5099      this.fontLoader.clear();
5100    }
5101    this.#methodPromises.clear();
5102    this.filterFactory.destroy(true);
5103  }
5104  get loadingParams() {
5105    const {
5106      disableAutoFetch,
5107      enableXfa
5108    } = this._params;
5109    return (0, _util.shadow)(this, "loadingParams", {
5110      disableAutoFetch,
5111      enableXfa
5112    });
5113  }
5114}
5115class PDFObjects {
5116  #objs = Object.create(null);
5117  #ensureObj(objId) {
5118    return this.#objs[objId] ||= {
5119      capability: new _util.PromiseCapability(),
5120      data: null
5121    };
5122  }
5123  get(objId) {
5124    let callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
5125    if (callback) {
5126      const obj = this.#ensureObj(objId);
5127      obj.capability.promise.then(() => callback(obj.data));
5128      return null;
5129    }
5130    const obj = this.#objs[objId];
5131    if (!obj?.capability.settled) {
5132      throw new Error(`Requesting object that isn't resolved yet ${objId}.`);
5133    }
5134    return obj.data;
5135  }
5136  has(objId) {
5137    const obj = this.#objs[objId];
5138    return obj?.capability.settled || false;
5139  }
5140  resolve(objId) {
5141    let data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
5142    const obj = this.#ensureObj(objId);
5143    obj.data = data;
5144    obj.capability.resolve();
5145  }
5146  clear() {
5147    for (const objId in this.#objs) {
5148      const {
5149        data
5150      } = this.#objs[objId];
5151      data?.bitmap?.close();
5152    }
5153    this.#objs = Object.create(null);
5154  }
5155}
5156class RenderTask {
5157  #internalRenderTask = null;
5158  constructor(internalRenderTask) {
5159    this.#internalRenderTask = internalRenderTask;
5160    this.onContinue = null;
5161  }
5162  get promise() {
5163    return this.#internalRenderTask.capability.promise;
5164  }
5165  cancel() {
5166    let extraDelay = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
5167    this.#internalRenderTask.cancel(null, extraDelay);
5168  }
5169  get separateAnnots() {
5170    const {
5171      separateAnnots
5172    } = this.#internalRenderTask.operatorList;
5173    if (!separateAnnots) {
5174      return false;
5175    }
5176    const {
5177      annotationCanvasMap
5178    } = this.#internalRenderTask;
5179    return separateAnnots.form || separateAnnots.canvas && annotationCanvasMap?.size > 0;
5180  }
5181}
5182exports.RenderTask = RenderTask;
5183class InternalRenderTask {
5184  static #canvasInUse = new WeakSet();
5185  constructor(_ref13) {
5186    let {
5187      callback,
5188      params,
5189      objs,
5190      commonObjs,
5191      annotationCanvasMap,
5192      operatorList,
5193      pageIndex,
5194      canvasFactory,
5195      filterFactory,
5196      useRequestAnimationFrame = false,
5197      pdfBug = false,
5198      pageColors = null
5199    } = _ref13;
5200    this.callback = callback;
5201    this.params = params;
5202    this.objs = objs;
5203    this.commonObjs = commonObjs;
5204    this.annotationCanvasMap = annotationCanvasMap;
5205    this.operatorListIdx = null;
5206    this.operatorList = operatorList;
5207    this._pageIndex = pageIndex;
5208    this.canvasFactory = canvasFactory;
5209    this.filterFactory = filterFactory;
5210    this._pdfBug = pdfBug;
5211    this.pageColors = pageColors;
5212    this.running = false;
5213    this.graphicsReadyCallback = null;
5214    this.graphicsReady = false;
5215    this._useRequestAnimationFrame = useRequestAnimationFrame === true && typeof window !== "undefined";
5216    this.cancelled = false;
5217    this.capability = new _util.PromiseCapability();
5218    this.task = new RenderTask(this);
5219    this._cancelBound = this.cancel.bind(this);
5220    this._continueBound = this._continue.bind(this);
5221    this._scheduleNextBound = this._scheduleNext.bind(this);
5222    this._nextBound = this._next.bind(this);
5223    this._canvas = params.canvasContext.canvas;
5224  }
5225  get completed() {
5226    return this.capability.promise.catch(function () {});
5227  }
5228  initializeGraphics(_ref14) {
5229    let {
5230      transparency = false,
5231      optionalContentConfig
5232    } = _ref14;
5233    if (this.cancelled) {
5234      return;
5235    }
5236    if (this._canvas) {
5237      if (InternalRenderTask.#canvasInUse.has(this._canvas)) {
5238        throw new Error("Cannot use the same canvas during multiple render() operations. " + "Use different canvas or ensure previous operations were " + "cancelled or completed.");
5239      }
5240      InternalRenderTask.#canvasInUse.add(this._canvas);
5241    }
5242    if (this._pdfBug && globalThis.StepperManager?.enabled) {
5243      this.stepper = globalThis.StepperManager.create(this._pageIndex);
5244      this.stepper.init(this.operatorList);
5245      this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint();
5246    }
5247    const {
5248      canvasContext,
5249      viewport,
5250      transform,
5251      background
5252    } = this.params;
5253    this.gfx = new _canvas.CanvasGraphics(canvasContext, this.commonObjs, this.objs, this.canvasFactory, this.filterFactory, {
5254      optionalContentConfig
5255    }, this.annotationCanvasMap, this.pageColors);
5256    this.gfx.beginDrawing({
5257      transform,
5258      viewport,
5259      transparency,
5260      background
5261    });
5262    this.operatorListIdx = 0;
5263    this.graphicsReady = true;
5264    this.graphicsReadyCallback?.();
5265  }
5266  cancel() {
5267    let error = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
5268    let extraDelay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
5269    this.running = false;
5270    this.cancelled = true;
5271    this.gfx?.endDrawing();
5272    InternalRenderTask.#canvasInUse.delete(this._canvas);
5273    this.callback(error || new _display_utils.RenderingCancelledException(`Rendering cancelled, page ${this._pageIndex + 1}`, extraDelay));
5274  }
5275  operatorListChanged() {
5276    if (!this.graphicsReady) {
5277      this.graphicsReadyCallback ||= this._continueBound;
5278      return;
5279    }
5280    this.stepper?.updateOperatorList(this.operatorList);
5281    if (this.running) {
5282      return;
5283    }
5284    this._continue();
5285  }
5286  _continue() {
5287    this.running = true;
5288    if (this.cancelled) {
5289      return;
5290    }
5291    if (this.task.onContinue) {
5292      this.task.onContinue(this._scheduleNextBound);
5293    } else {
5294      this._scheduleNext();
5295    }
5296  }
5297  _scheduleNext() {
5298    if (this._useRequestAnimationFrame) {
5299      window.requestAnimationFrame(() => {
5300        this._nextBound().catch(this._cancelBound);
5301      });
5302    } else {
5303      Promise.resolve().then(this._nextBound).catch(this._cancelBound);
5304    }
5305  }
5306  async _next() {
5307    if (this.cancelled) {
5308      return;
5309    }
5310    this.operatorListIdx = this.gfx.executeOperatorList(this.operatorList, this.operatorListIdx, this._continueBound, this.stepper);
5311    if (this.operatorListIdx === this.operatorList.argsArray.length) {
5312      this.running = false;
5313      if (this.operatorList.lastChunk) {
5314        this.gfx.endDrawing();
5315        InternalRenderTask.#canvasInUse.delete(this._canvas);
5316        this.callback();
5317      }
5318    }
5319  }
5320}
5321const version = '3.11.174';
5322exports.version = version;
5323const build = 'ce8716743';
5324exports.build = build;
5325
5326/***/ }),
5327/* 125 */
5328/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {
5329
5330
5331var $ = __w_pdfjs_require__(3);
5332var difference = __w_pdfjs_require__(126);
5333var setMethodAcceptSetLike = __w_pdfjs_require__(135);
5334$({
5335 target: 'Set',
5336 proto: true,
5337 real: true,
5338 forced: !setMethodAcceptSetLike('difference')
5339}, { difference: difference });
5340
5341/***/ }),
5342/* 126 */
5343/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
5344
5345
5346var aSet = __w_pdfjs_require__(127);
5347var SetHelpers = __w_pdfjs_require__(128);
5348var clone = __w_pdfjs_require__(129);
5349var size = __w_pdfjs_require__(132);
5350var getSetRecord = __w_pdfjs_require__(133);
5351var iterateSet = __w_pdfjs_require__(130);
5352var iterateSimple = __w_pdfjs_require__(131);
5353var has = SetHelpers.has;
5354var remove = SetHelpers.remove;
5355module.exports = function difference(other) {
5356 var O = aSet(this);
5357 var otherRec = getSetRecord(other);
5358 var result = clone(O);
5359 if (size(O) <= otherRec.size)
5360  iterateSet(O, function (e) {
5361   if (otherRec.includes(e))
5362    remove(result, e);
5363  });
5364 else
5365  iterateSimple(otherRec.getIterator(), function (e) {
5366   if (has(O, e))
5367    remove(result, e);
5368  });
5369 return result;
5370};
5371
5372/***/ }),
5373/* 127 */
5374/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
5375
5376
5377var has = (__w_pdfjs_require__(128).has);
5378module.exports = function (it) {
5379 has(it);
5380 return it;
5381};
5382
5383/***/ }),
5384/* 128 */
5385/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
5386
5387
5388var uncurryThis = __w_pdfjs_require__(14);
5389var SetPrototype = Set.prototype;
5390module.exports = {
5391 Set: Set,
5392 add: uncurryThis(SetPrototype.add),
5393 has: uncurryThis(SetPrototype.has),
5394 remove: uncurryThis(SetPrototype['delete']),
5395 proto: SetPrototype
5396};
5397
5398/***/ }),
5399/* 129 */
5400/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
5401
5402
5403var SetHelpers = __w_pdfjs_require__(128);
5404var iterate = __w_pdfjs_require__(130);
5405var Set = SetHelpers.Set;
5406var add = SetHelpers.add;
5407module.exports = function (set) {
5408 var result = new Set();
5409 iterate(set, function (it) {
5410  add(result, it);
5411 });
5412 return result;
5413};
5414
5415/***/ }),
5416/* 130 */
5417/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
5418
5419
5420var uncurryThis = __w_pdfjs_require__(14);
5421var iterateSimple = __w_pdfjs_require__(131);
5422var SetHelpers = __w_pdfjs_require__(128);
5423var Set = SetHelpers.Set;
5424var SetPrototype = SetHelpers.proto;
5425var forEach = uncurryThis(SetPrototype.forEach);
5426var keys = uncurryThis(SetPrototype.keys);
5427var next = keys(new Set()).next;
5428module.exports = function (set, fn, interruptible) {
5429 return interruptible ? iterateSimple({
5430  iterator: keys(set),
5431  next: next
5432 }, fn) : forEach(set, fn);
5433};
5434
5435/***/ }),
5436/* 131 */
5437/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
5438
5439
5440var call = __w_pdfjs_require__(8);
5441module.exports = function (record, fn, ITERATOR_INSTEAD_OF_RECORD) {
5442 var iterator = ITERATOR_INSTEAD_OF_RECORD ? record : record.iterator;
5443 var next = record.next;
5444 var step, result;
5445 while (!(step = call(next, iterator)).done) {
5446  result = fn(step.value);
5447  if (result !== undefined)
5448   return result;
5449 }
5450};
5451
5452/***/ }),
5453/* 132 */
5454/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
5455
5456
5457var uncurryThisAccessor = __w_pdfjs_require__(72);
5458var SetHelpers = __w_pdfjs_require__(128);
5459module.exports = uncurryThisAccessor(SetHelpers.proto, 'size', 'get') || function (set) {
5460 return set.size;
5461};
5462
5463/***/ }),
5464/* 133 */
5465/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
5466
5467
5468var aCallable = __w_pdfjs_require__(31);
5469var anObject = __w_pdfjs_require__(47);
5470var call = __w_pdfjs_require__(8);
5471var toIntegerOrInfinity = __w_pdfjs_require__(62);
5472var getIteratorDirect = __w_pdfjs_require__(134);
5473var INVALID_SIZE = 'Invalid size';
5474var $RangeError = RangeError;
5475var $TypeError = TypeError;
5476var max = Math.max;
5477var SetRecord = function (set, size, has, keys) {
5478 this.set = set;
5479 this.size = size;
5480 this.has = has;
5481 this.keys = keys;
5482};
5483SetRecord.prototype = {
5484 getIterator: function () {
5485  return getIteratorDirect(anObject(call(this.keys, this.set)));
5486 },
5487 includes: function (it) {
5488  return call(this.has, this.set, it);
5489 }
5490};
5491module.exports = function (obj) {
5492 anObject(obj);
5493 var numSize = +obj.size;
5494 if (numSize !== numSize)
5495  throw $TypeError(INVALID_SIZE);
5496 var intSize = toIntegerOrInfinity(numSize);
5497 if (intSize < 0)
5498  throw $RangeError(INVALID_SIZE);
vendor: 4,821 bytes, lines 5499-5710
5499 return new SetRecord(obj, max(intSize, 0), aCallable(obj.has), aCallable(obj.keys));
5500};
5501
5502/***/ }),
5503/* 134 */
5504/***/ ((module) => {
5505
5506
5507module.exports = function (obj) {
5508 return {
5509  iterator: obj,
5510  next: obj.next,
5511  done: false
5512 };
5513};
5514
5515/***/ }),
5516/* 135 */
5517/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
5518
5519
5520var getBuiltIn = __w_pdfjs_require__(24);
5521var createSetLike = function (size) {
5522 return {
5523  size: size,
5524  has: function () {
5525   return false;
5526  },
5527  keys: function () {
5528   return {
5529    next: function () {
5530     return { done: true };
5531    }
5532   };
5533  }
5534 };
5535};
5536module.exports = function (name) {
5537 var Set = getBuiltIn('Set');
5538 try {
5539  new Set()[name](createSetLike(0));
5540  try {
5541   new Set()[name](createSetLike(-1));
5542   return false;
5543  } catch (error2) {
5544   return true;
5545  }
5546 } catch (error) {
5547  return false;
5548 }
5549};
5550
5551/***/ }),
5552/* 136 */
5553/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {
5554
5555
5556var $ = __w_pdfjs_require__(3);
5557var fails = __w_pdfjs_require__(7);
5558var intersection = __w_pdfjs_require__(137);
5559var setMethodAcceptSetLike = __w_pdfjs_require__(135);
5560var INCORRECT = !setMethodAcceptSetLike('intersection') || fails(function () {
5561 return Array.from(new Set([
5562  1,
5563  2,
5564  3
5565 ]).intersection(new Set([
5566  3,
5567  2
5568 ]))) !== '3,2';
5569});
5570$({
5571 target: 'Set',
5572 proto: true,
5573 real: true,
5574 forced: INCORRECT
5575}, { intersection: intersection });
5576
5577/***/ }),
5578/* 137 */
5579/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
5580
5581
5582var aSet = __w_pdfjs_require__(127);
5583var SetHelpers = __w_pdfjs_require__(128);
5584var size = __w_pdfjs_require__(132);
5585var getSetRecord = __w_pdfjs_require__(133);
5586var iterateSet = __w_pdfjs_require__(130);
5587var iterateSimple = __w_pdfjs_require__(131);
5588var Set = SetHelpers.Set;
5589var add = SetHelpers.add;
5590var has = SetHelpers.has;
5591module.exports = function intersection(other) {
5592 var O = aSet(this);
5593 var otherRec = getSetRecord(other);
5594 var result = new Set();
5595 if (size(O) > otherRec.size) {
5596  iterateSimple(otherRec.getIterator(), function (e) {
5597   if (has(O, e))
5598    add(result, e);
5599  });
5600 } else {
5601  iterateSet(O, function (e) {
5602   if (otherRec.includes(e))
5603    add(result, e);
5604  });
5605 }
5606 return result;
5607};
5608
5609/***/ }),
5610/* 138 */
5611/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {
5612
5613
5614var $ = __w_pdfjs_require__(3);
5615var isDisjointFrom = __w_pdfjs_require__(139);
5616var setMethodAcceptSetLike = __w_pdfjs_require__(135);
5617$({
5618 target: 'Set',
5619 proto: true,
5620 real: true,
5621 forced: !setMethodAcceptSetLike('isDisjointFrom')
5622}, { isDisjointFrom: isDisjointFrom });
5623
5624/***/ }),
5625/* 139 */
5626/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
5627
5628
5629var aSet = __w_pdfjs_require__(127);
5630var has = (__w_pdfjs_require__(128).has);
5631var size = __w_pdfjs_require__(132);
5632var getSetRecord = __w_pdfjs_require__(133);
5633var iterateSet = __w_pdfjs_require__(130);
5634var iterateSimple = __w_pdfjs_require__(131);
5635var iteratorClose = __w_pdfjs_require__(140);
5636module.exports = function isDisjointFrom(other) {
5637 var O = aSet(this);
5638 var otherRec = getSetRecord(other);
5639 if (size(O) <= otherRec.size)
5640  return iterateSet(O, function (e) {
5641   if (otherRec.includes(e))
5642    return false;
5643  }, true) !== false;
5644 var iterator = otherRec.getIterator();
5645 return iterateSimple(iterator, function (e) {
5646  if (has(O, e))
5647   return iteratorClose(iterator, 'normal', false);
5648 }) !== false;
5649};
5650
5651/***/ }),
5652/* 140 */
5653/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
5654
5655
5656var call = __w_pdfjs_require__(8);
5657var anObject = __w_pdfjs_require__(47);
5658var getMethod = __w_pdfjs_require__(30);
5659module.exports = function (iterator, kind, value) {
5660 var innerResult, innerError;
5661 anObject(iterator);
5662 try {
5663  innerResult = getMethod(iterator, 'return');
5664  if (!innerResult) {
5665   if (kind === 'throw')
5666    throw value;
5667   return value;
5668  }
5669  innerResult = call(innerResult, iterator);
5670 } catch (error) {
5671  innerError = true;
5672  innerResult = error;
5673 }
5674 if (kind === 'throw')
5675  throw value;
5676 if (innerError)
5677  throw innerResult;
5678 anObject(innerResult);
5679 return value;
5680};
5681
5682/***/ }),
5683/* 141 */
5684/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {
5685
5686
5687var $ = __w_pdfjs_require__(3);
5688var isSubsetOf = __w_pdfjs_require__(142);
5689var setMethodAcceptSetLike = __w_pdfjs_require__(135);
5690$({
5691 target: 'Set',
5692 proto: true,
5693 real: true,
5694 forced: !setMethodAcceptSetLike('isSubsetOf')
5695}, { isSubsetOf: isSubsetOf });
5696
5697/***/ }),
5698/* 142 */
5699/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
5700
5701
5702var aSet = __w_pdfjs_require__(127);
5703var size = __w_pdfjs_require__(132);
5704var iterate = __w_pdfjs_require__(130);
5705var getSetRecord = __w_pdfjs_require__(133);
5706module.exports = function isSubsetOf(other) {
5707 var O = aSet(this);
5708 var otherRec = getSetRecord(other);
5709 if (size(O) > otherRec.size)
5710  return false;
vendor: 6,294 bytes, lines 5711-5919
5711 return iterate(O, function (e) {
5712  if (!otherRec.includes(e))
5713   return false;
5714 }, true) !== false;
5715};
5716
5717/***/ }),
5718/* 143 */
5719/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {
5720
5721
5722var $ = __w_pdfjs_require__(3);
5723var isSupersetOf = __w_pdfjs_require__(144);
5724var setMethodAcceptSetLike = __w_pdfjs_require__(135);
5725$({
5726 target: 'Set',
5727 proto: true,
5728 real: true,
5729 forced: !setMethodAcceptSetLike('isSupersetOf')
5730}, { isSupersetOf: isSupersetOf });
5731
5732/***/ }),
5733/* 144 */
5734/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
5735
5736
5737var aSet = __w_pdfjs_require__(127);
5738var has = (__w_pdfjs_require__(128).has);
5739var size = __w_pdfjs_require__(132);
5740var getSetRecord = __w_pdfjs_require__(133);
5741var iterateSimple = __w_pdfjs_require__(131);
5742var iteratorClose = __w_pdfjs_require__(140);
5743module.exports = function isSupersetOf(other) {
5744 var O = aSet(this);
5745 var otherRec = getSetRecord(other);
5746 if (size(O) < otherRec.size)
5747  return false;
5748 var iterator = otherRec.getIterator();
5749 return iterateSimple(iterator, function (e) {
5750  if (!has(O, e))
5751   return iteratorClose(iterator, 'normal', false);
5752 }) !== false;
5753};
5754
5755/***/ }),
5756/* 145 */
5757/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {
5758
5759
5760var $ = __w_pdfjs_require__(3);
5761var symmetricDifference = __w_pdfjs_require__(146);
5762var setMethodAcceptSetLike = __w_pdfjs_require__(135);
5763$({
5764 target: 'Set',
5765 proto: true,
5766 real: true,
5767 forced: !setMethodAcceptSetLike('symmetricDifference')
5768}, { symmetricDifference: symmetricDifference });
5769
5770/***/ }),
5771/* 146 */
5772/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
5773
5774
5775var aSet = __w_pdfjs_require__(127);
5776var SetHelpers = __w_pdfjs_require__(128);
5777var clone = __w_pdfjs_require__(129);
5778var getSetRecord = __w_pdfjs_require__(133);
5779var iterateSimple = __w_pdfjs_require__(131);
5780var add = SetHelpers.add;
5781var has = SetHelpers.has;
5782var remove = SetHelpers.remove;
5783module.exports = function symmetricDifference(other) {
5784 var O = aSet(this);
5785 var keysIter = getSetRecord(other).getIterator();
5786 var result = clone(O);
5787 iterateSimple(keysIter, function (e) {
5788  if (has(O, e))
5789   remove(result, e);
5790  else
5791   add(result, e);
5792 });
5793 return result;
5794};
5795
5796/***/ }),
5797/* 147 */
5798/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {
5799
5800
5801var $ = __w_pdfjs_require__(3);
5802var union = __w_pdfjs_require__(148);
5803var setMethodAcceptSetLike = __w_pdfjs_require__(135);
5804$({
5805 target: 'Set',
5806 proto: true,
5807 real: true,
5808 forced: !setMethodAcceptSetLike('union')
5809}, { union: union });
5810
5811/***/ }),
5812/* 148 */
5813/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
5814
5815
5816var aSet = __w_pdfjs_require__(127);
5817var add = (__w_pdfjs_require__(128).add);
5818var clone = __w_pdfjs_require__(129);
5819var getSetRecord = __w_pdfjs_require__(133);
5820var iterateSimple = __w_pdfjs_require__(131);
5821module.exports = function union(other) {
5822 var O = aSet(this);
5823 var keysIter = getSetRecord(other).getIterator();
5824 var result = clone(O);
5825 iterateSimple(keysIter, function (it) {
5826  add(result, it);
5827 });
5828 return result;
5829};
5830
5831/***/ }),
5832/* 149 */
5833/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {
5834
5835
5836var $ = __w_pdfjs_require__(3);
5837var global = __w_pdfjs_require__(4);
5838var getBuiltIn = __w_pdfjs_require__(24);
5839var createPropertyDescriptor = __w_pdfjs_require__(11);
5840var defineProperty = (__w_pdfjs_require__(45).f);
5841var hasOwn = __w_pdfjs_require__(39);
5842var anInstance = __w_pdfjs_require__(150);
5843var inheritIfRequired = __w_pdfjs_require__(75);
5844var normalizeStringArgument = __w_pdfjs_require__(76);
5845var DOMExceptionConstants = __w_pdfjs_require__(151);
5846var clearErrorStack = __w_pdfjs_require__(82);
5847var DESCRIPTORS = __w_pdfjs_require__(6);
5848var IS_PURE = __w_pdfjs_require__(36);
5849var DOM_EXCEPTION = 'DOMException';
5850var Error = getBuiltIn('Error');
5851var NativeDOMException = getBuiltIn(DOM_EXCEPTION);
5852var $DOMException = function DOMException() {
5853 anInstance(this, DOMExceptionPrototype);
5854 var argumentsLength = arguments.length;
5855 var message = normalizeStringArgument(argumentsLength < 1 ? undefined : arguments[0]);
5856 var name = normalizeStringArgument(argumentsLength < 2 ? undefined : arguments[1], 'Error');
5857 var that = new NativeDOMException(message, name);
5858 var error = Error(message);
5859 error.name = DOM_EXCEPTION;
5860 defineProperty(that, 'stack', createPropertyDescriptor(1, clearErrorStack(error.stack, 1)));
5861 inheritIfRequired(that, this, $DOMException);
5862 return that;
5863};
5864var DOMExceptionPrototype = $DOMException.prototype = NativeDOMException.prototype;
5865var ERROR_HAS_STACK = 'stack' in Error(DOM_EXCEPTION);
5866var DOM_EXCEPTION_HAS_STACK = 'stack' in new NativeDOMException(1, 2);
5867var descriptor = NativeDOMException && DESCRIPTORS && Object.getOwnPropertyDescriptor(global, DOM_EXCEPTION);
5868var BUGGY_DESCRIPTOR = !!descriptor && !(descriptor.writable && descriptor.configurable);
5869var FORCED_CONSTRUCTOR = ERROR_HAS_STACK && !BUGGY_DESCRIPTOR && !DOM_EXCEPTION_HAS_STACK;
5870$({
5871 global: true,
5872 constructor: true,
5873 forced: IS_PURE || FORCED_CONSTRUCTOR
5874}, { DOMException: FORCED_CONSTRUCTOR ? $DOMException : NativeDOMException });
5875var PolyfilledDOMException = getBuiltIn(DOM_EXCEPTION);
5876var PolyfilledDOMExceptionPrototype = PolyfilledDOMException.prototype;
5877if (PolyfilledDOMExceptionPrototype.constructor !== PolyfilledDOMException) {
5878 if (!IS_PURE) {
5879  defineProperty(PolyfilledDOMExceptionPrototype, 'constructor', createPropertyDescriptor(1, PolyfilledDOMException));
5880 }
5881 for (var key in DOMExceptionConstants)
5882  if (hasOwn(DOMExceptionConstants, key)) {
5883   var constant = DOMExceptionConstants[key];
5884   var constantName = constant.s;
5885   if (!hasOwn(PolyfilledDOMException, constantName)) {
5886    defineProperty(PolyfilledDOMException, constantName, createPropertyDescriptor(6, constant.c));
5887   }
5888  }
5889}
5890
5891/***/ }),
5892/* 150 */
5893/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
5894
5895
5896var isPrototypeOf = __w_pdfjs_require__(25);
5897var $TypeError = TypeError;
5898module.exports = function (it, Prototype) {
5899 if (isPrototypeOf(Prototype, it))
5900  return it;
5901 throw $TypeError('Incorrect invocation');
5902};
5903
5904/***/ }),
5905/* 151 */
5906/***/ ((module) => {
5907
5908
5909module.exports = {
5910 IndexSizeError: {
5911  s: 'INDEX_SIZE_ERR',
5912  c: 1,
5913  m: 1
5914 },
5915 DOMStringSizeError: {
5916  s: 'DOMSTRING_SIZE_ERR',
5917  c: 2,
5918  m: 0
5919 },
5920 HierarchyRequestError: {
5921  s: 'HIERARCHY_REQUEST_ERR',
5922  c: 3,
5923  m: 1
5924 },
5925 WrongDocumentError: {
5926  s: 'WRONG_DOCUMENT_ERR',
5927  c: 4,
5928  m: 1
5929 },
5930 InvalidCharacterError: {
5931  s: 'INVALID_CHARACTER_ERR',
5932  c: 5,
5933  m: 1
5934 },
5935 NoDataAllowedError: {
5936  s: 'NO_DATA_ALLOWED_ERR',
5937  c: 6,
5938  m: 0
5939 },
5940 NoModificationAllowedError: {
5941  s: 'NO_MODIFICATION_ALLOWED_ERR',
5942  c: 7,
5943  m: 1
5944 },
5945 NotFoundError: {
5946  s: 'NOT_FOUND_ERR',
5947  c: 8,
5948  m: 1
5949 },
5950 NotSupportedError: {
5951  s: 'NOT_SUPPORTED_ERR',
5952  c: 9,
5953  m: 1
5954 },
5955 InUseAttributeError: {
5956  s: 'INUSE_ATTRIBUTE_ERR',
5957  c: 10,
5958  m: 1
5959 },
5960 InvalidStateError: {
5961  s: 'INVALID_STATE_ERR',
5962  c: 11,
5963  m: 1
5964 },
5965 SyntaxError: {
5966  s: 'SYNTAX_ERR',
5967  c: 12,
5968  m: 1
5969 },
5970 InvalidModificationError: {
5971  s: 'INVALID_MODIFICATION_ERR',
5972  c: 13,
5973  m: 1
5974 },
5975 NamespaceError: {
5976  s: 'NAMESPACE_ERR',
5977  c: 14,
5978  m: 1
5979 },
5980 InvalidAccessError: {
5981  s: 'INVALID_ACCESS_ERR',
5982  c: 15,
5983  m: 1
5984 },
5985 ValidationError: {
5986  s: 'VALIDATION_ERR',
5987  c: 16,
5988  m: 0
5989 },
5990 TypeMismatchError: {
5991  s: 'TYPE_MISMATCH_ERR',
5992  c: 17,
5993  m: 1
5994 },
5995 SecurityError: {
5996  s: 'SECURITY_ERR',
5997  c: 18,
5998  m: 1
5999 },
6000 NetworkError: {
6001  s: 'NETWORK_ERR',
6002  c: 19,
6003  m: 1
6004 },
6005 AbortError: {
6006  s: 'ABORT_ERR',
6007  c: 20,
6008  m: 1
6009 },
6010 URLMismatchError: {
6011  s: 'URL_MISMATCH_ERR',
6012  c: 21,
6013  m: 1
6014 },
6015 QuotaExceededError: {
6016  s: 'QUOTA_EXCEEDED_ERR',
6017  c: 22,
6018  m: 1
6019 },
6020 TimeoutError: {
6021  s: 'TIMEOUT_ERR',
6022  c: 23,
6023  m: 1
6024 },
6025 InvalidNodeTypeError: {
vendor: 6,575 bytes, lines 6026-6206
6026  s: 'INVALID_NODE_TYPE_ERR',
6027  c: 24,
6028  m: 1
6029 },
6030 DataCloneError: {
6031  s: 'DATA_CLONE_ERR',
6032  c: 25,
6033  m: 1
6034 }
6035};
6036
6037/***/ }),
6038/* 152 */
6039/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {
6040
6041
6042var IS_PURE = __w_pdfjs_require__(36);
6043var $ = __w_pdfjs_require__(3);
6044var global = __w_pdfjs_require__(4);
6045var getBuiltin = __w_pdfjs_require__(24);
6046var uncurryThis = __w_pdfjs_require__(14);
6047var fails = __w_pdfjs_require__(7);
6048var uid = __w_pdfjs_require__(41);
6049var isCallable = __w_pdfjs_require__(21);
6050var isConstructor = __w_pdfjs_require__(153);
6051var isNullOrUndefined = __w_pdfjs_require__(17);
6052var isObject = __w_pdfjs_require__(20);
6053var isSymbol = __w_pdfjs_require__(23);
6054var iterate = __w_pdfjs_require__(154);
6055var anObject = __w_pdfjs_require__(47);
6056var classof = __w_pdfjs_require__(78);
6057var hasOwn = __w_pdfjs_require__(39);
6058var createProperty = __w_pdfjs_require__(159);
6059var createNonEnumerableProperty = __w_pdfjs_require__(44);
6060var lengthOfArrayLike = __w_pdfjs_require__(64);
6061var validateArgumentsLength = __w_pdfjs_require__(85);
6062var getRegExpFlags = __w_pdfjs_require__(160);
6063var MapHelpers = __w_pdfjs_require__(162);
6064var SetHelpers = __w_pdfjs_require__(128);
6065var ERROR_STACK_INSTALLABLE = __w_pdfjs_require__(83);
6066var PROPER_TRANSFER = __w_pdfjs_require__(119);
6067var Object = global.Object;
6068var Array = global.Array;
6069var Date = global.Date;
6070var Error = global.Error;
6071var EvalError = global.EvalError;
6072var RangeError = global.RangeError;
6073var ReferenceError = global.ReferenceError;
6074var SyntaxError = global.SyntaxError;
6075var TypeError = global.TypeError;
6076var URIError = global.URIError;
6077var PerformanceMark = global.PerformanceMark;
6078var WebAssembly = global.WebAssembly;
6079var CompileError = WebAssembly && WebAssembly.CompileError || Error;
6080var LinkError = WebAssembly && WebAssembly.LinkError || Error;
6081var RuntimeError = WebAssembly && WebAssembly.RuntimeError || Error;
6082var DOMException = getBuiltin('DOMException');
6083var Map = MapHelpers.Map;
6084var mapHas = MapHelpers.has;
6085var mapGet = MapHelpers.get;
6086var mapSet = MapHelpers.set;
6087var Set = SetHelpers.Set;
6088var setAdd = SetHelpers.add;
6089var objectKeys = getBuiltin('Object', 'keys');
6090var push = uncurryThis([].push);
6091var thisBooleanValue = uncurryThis(true.valueOf);
6092var thisNumberValue = uncurryThis(1.0.valueOf);
6093var thisStringValue = uncurryThis(''.valueOf);
6094var thisTimeValue = uncurryThis(Date.prototype.getTime);
6095var PERFORMANCE_MARK = uid('structuredClone');
6096var DATA_CLONE_ERROR = 'DataCloneError';
6097var TRANSFERRING = 'Transferring';
6098var checkBasicSemantic = function (structuredCloneImplementation) {
6099 return !fails(function () {
6100  var set1 = new global.Set([7]);
6101  var set2 = structuredCloneImplementation(set1);
6102  var number = structuredCloneImplementation(Object(7));
6103  return set2 === set1 || !set2.has(7) || typeof number != 'object' || +number !== 7;
6104 }) && structuredCloneImplementation;
6105};
6106var checkErrorsCloning = function (structuredCloneImplementation, $Error) {
6107 return !fails(function () {
6108  var error = new $Error();
6109  var test = structuredCloneImplementation({
6110   a: error,
6111   b: error
6112  });
6113  return !(test && test.a === test.b && test.a instanceof $Error && test.a.stack === error.stack);
6114 });
6115};
6116var checkNewErrorsCloningSemantic = function (structuredCloneImplementation) {
6117 return !fails(function () {
6118  var test = structuredCloneImplementation(new global.AggregateError([1], PERFORMANCE_MARK, { cause: 3 }));
6119  return test.name !== 'AggregateError' || test.errors[0] !== 1 || test.message !== PERFORMANCE_MARK || test.cause !== 3;
6120 });
6121};
6122var nativeStructuredClone = global.structuredClone;
6123var FORCED_REPLACEMENT = IS_PURE || !checkErrorsCloning(nativeStructuredClone, Error) || !checkErrorsCloning(nativeStructuredClone, DOMException) || !checkNewErrorsCloningSemantic(nativeStructuredClone);
6124var structuredCloneFromMark = !nativeStructuredClone && checkBasicSemantic(function (value) {
6125 return new PerformanceMark(PERFORMANCE_MARK, { detail: value }).detail;
6126});
6127var nativeRestrictedStructuredClone = checkBasicSemantic(nativeStructuredClone) || structuredCloneFromMark;
6128var throwUncloneable = function (type) {
6129 throw new DOMException('Uncloneable type: ' + type, DATA_CLONE_ERROR);
6130};
6131var throwUnpolyfillable = function (type, action) {
6132 throw new DOMException((action || 'Cloning') + ' of ' + type + ' cannot be properly polyfilled in this engine', DATA_CLONE_ERROR);
6133};
6134var tryNativeRestrictedStructuredClone = function (value, type) {
6135 if (!nativeRestrictedStructuredClone)
6136  throwUnpolyfillable(type);
6137 return nativeRestrictedStructuredClone(value);
6138};
6139var createDataTransfer = function () {
6140 var dataTransfer;
6141 try {
6142  dataTransfer = new global.DataTransfer();
6143 } catch (error) {
6144  try {
6145   dataTransfer = new global.ClipboardEvent('').clipboardData;
6146  } catch (error2) {
6147  }
6148 }
6149 return dataTransfer && dataTransfer.items && dataTransfer.files ? dataTransfer : null;
6150};
6151var cloneBuffer = function (value, map, $type) {
6152 if (mapHas(map, value))
6153  return mapGet(map, value);
6154 var type = $type || classof(value);
6155 var clone, length, options, source, target, i;
6156 if (type === 'SharedArrayBuffer') {
6157  if (nativeRestrictedStructuredClone)
6158   clone = nativeRestrictedStructuredClone(value);
6159  else
6160   clone = value;
6161 } else {
6162  var DataView = global.DataView;
6163  if (!DataView && typeof value.slice != 'function')
6164   throwUnpolyfillable('ArrayBuffer');
6165  try {
6166   if (typeof value.slice == 'function' && !value.resizable) {
6167    clone = value.slice(0);
6168   } else {
6169    length = value.byteLength;
6170    options = 'maxByteLength' in value ? { maxByteLength: value.maxByteLength } : undefined;
6171    clone = new ArrayBuffer(length, options);
6172    source = new DataView(value);
6173    target = new DataView(clone);
6174    for (i = 0; i < length; i++) {
6175     target.setUint8(i, source.getUint8(i));
6176    }
6177   }
6178  } catch (error) {
6179   throw new DOMException('ArrayBuffer is detached', DATA_CLONE_ERROR);
6180  }
6181 }
6182 mapSet(map, value, clone);
6183 return clone;
6184};
6185var cloneView = function (value, type, offset, length, map) {
6186 var C = global[type];
6187 if (!isObject(C))
6188  throwUnpolyfillable(type);
6189 return new C(cloneBuffer(value.buffer, map), offset, length);
6190};
6191var Placeholder = function (object, type, metadata) {
6192 this.object = object;
6193 this.type = type;
6194 this.metadata = metadata;
6195};
6196var structuredCloneInternal = function (value, map, transferredBuffers) {
6197 if (isSymbol(value))
6198  throwUncloneable('Symbol');
6199 if (!isObject(value))
6200  return value;
6201 if (map) {
6202  if (mapHas(map, value))
6203   return mapGet(map, value);
6204 } else
6205  map = new Map();
6206 var type = classof(value);
6207 var C, name, cloned, dataTransfer, i, length, keys, key;
6208 switch (type) {
6209 case 'Array':
6210  cloned = Array(lengthOfArrayLike(value));
6211  break;
6212 case 'Object':
6213  cloned = {};
6214  break;
6215 case 'Map':
6216  cloned = new Map();
6217  break;
6218 case 'Set':
6219  cloned = new Set();
6220  break;
6221 case 'RegExp':
6222  cloned = new RegExp(value.source, getRegExpFlags(value));
6223  break;
6224 case 'Error':
6225  name = value.name;
6226  switch (name) {
6227  case 'AggregateError':
6228   cloned = getBuiltin('AggregateError')([]);
6229   break;
6230  case 'EvalError':
6231   cloned = EvalError();
6232   break;
6233  case 'RangeError':
6234   cloned = RangeError();
6235   break;
6236  case 'ReferenceError':
6237   cloned = ReferenceError();
6238   break;
6239  case 'SyntaxError':
6240   cloned = SyntaxError();
6241   break;
6242  case 'TypeError':
6243   cloned = TypeError();
6244   break;
6245  case 'URIError':
6246   cloned = URIError();
6247   break;
6248  case 'CompileError':
6249   cloned = CompileError();
6250   break;
6251  case 'LinkError':
6252   cloned = LinkError();
6253   break;
6254  case 'RuntimeError':
6255   cloned = RuntimeError();
6256   break;
6257  default:
6258   cloned = Error();
6259  }
6260  break;
6261 case 'DOMException':
6262  cloned = new DOMException(value.message, value.name);
6263  break;
6264 case 'ArrayBuffer':
6265 case 'SharedArrayBuffer':
6266  cloned = transferredBuffers ? new Placeholder(value, type) : cloneBuffer(value, map, type);
6267  break;
6268 case 'DataView':
6269 case 'Int8Array':
6270 case 'Uint8Array':
6271 case 'Uint8ClampedArray':
6272 case 'Int16Array':
6273 case 'Uint16Array':
6274 case 'Int32Array':
6275 case 'Uint32Array':
6276 case 'Float16Array':
6277 case 'Float32Array':
6278 case 'Float64Array':
6279 case 'BigInt64Array':
6280 case 'BigUint64Array':
6281  length = type === 'DataView' ? value.byteLength : value.length;
6282  cloned = transferredBuffers ? new Placeholder(value, type, {
6283   offset: value.byteOffset,
6284   length: length
6285  }) : cloneView(value, type, value.byteOffset, length, map);
6286  break;
6287 case 'DOMQuad':
6288  try {
6289   cloned = new DOMQuad(structuredCloneInternal(value.p1, map, transferredBuffers), structuredCloneInternal(value.p2, map, transferredBuffers), structuredCloneInternal(value.p3, map, transferredBuffers), structuredCloneInternal(value.p4, map, transferredBuffers));
6290  } catch (error) {
6291   cloned = tryNativeRestrictedStructuredClone(value, type);
6292  }
6293  break;
6294 case 'File':
6295  if (nativeRestrictedStructuredClone)
6296   try {
6297    cloned = nativeRestrictedStructuredClone(value);
6298    if (classof(cloned) !== type)
6299     cloned = undefined;
6300   } catch (error) {
6301   }
6302  if (!cloned)
6303   try {
6304    cloned = new File([value], value.name, value);
6305   } catch (error) {
6306   }
6307  if (!cloned)
6308   throwUnpolyfillable(type);
6309  break;
6310 case 'FileList':
6311  dataTransfer = createDataTransfer();
6312  if (dataTransfer) {
6313   for (i = 0, length = lengthOfArrayLike(value); i < length; i++) {
6314    dataTransfer.items.add(structuredCloneInternal(value[i], map, transferredBuffers));
6315   }
6316   cloned = dataTransfer.files;
6317  } else
6318   cloned = tryNativeRestrictedStructuredClone(value, type);
6319  break;
6320 case 'ImageData':
6321  try {
6322   cloned = new ImageData(structuredCloneInternal(value.data, map, transferredBuffers), value.width, value.height, { colorSpace: value.colorSpace });
6323  } catch (error) {
6324   cloned = tryNativeRestrictedStructuredClone(value, type);
6325  }
6326  break;
6327 default:
6328  if (nativeRestrictedStructuredClone) {
6329   cloned = nativeRestrictedStructuredClone(value);
6330  } else
6331   switch (type) {
6332   case 'BigInt':
6333    cloned = Object(value.valueOf());
6334    break;
6335   case 'Boolean':
6336    cloned = Object(thisBooleanValue(value));
6337    break;
6338   case 'Number':
6339    cloned = Object(thisNumberValue(value));
6340    break;
6341   case 'String':
6342    cloned = Object(thisStringValue(value));
6343    break;
6344   case 'Date':
6345    cloned = new Date(thisTimeValue(value));
6346    break;
6347   case 'Blob':
6348    try {
6349     cloned = value.slice(0, value.size, value.type);
6350    } catch (error) {
6351     throwUnpolyfillable(type);
6352    }
6353    break;
6354   case 'DOMPoint':
6355   case 'DOMPointReadOnly':
6356    C = global[type];
6357    try {
6358     cloned = C.fromPoint ? C.fromPoint(value) : new C(value.x, value.y, value.z, value.w);
6359    } catch (error) {
6360     throwUnpolyfillable(type);
6361    }
6362    break;
6363   case 'DOMRect':
6364   case 'DOMRectReadOnly':
6365    C = global[type];
6366    try {
6367     cloned = C.fromRect ? C.fromRect(value) : new C(value.x, value.y, value.width, value.height);
6368    } catch (error) {
6369     throwUnpolyfillable(type);
6370    }
6371    break;
6372   case 'DOMMatrix':
6373   case 'DOMMatrixReadOnly':
6374    C = global[type];
6375    try {
6376     cloned = C.fromMatrix ? C.fromMatrix(value) : new C(value);
6377    } catch (error) {
6378     throwUnpolyfillable(type);
6379    }
6380    break;
6381   case 'AudioData':
6382   case 'VideoFrame':
6383    if (!isCallable(value.clone))
6384     throwUnpolyfillable(type);
6385    try {
6386     cloned = value.clone();
6387    } catch (error) {
6388     throwUncloneable(type);
6389    }
6390    break;
6391   case 'CropTarget':
6392   case 'CryptoKey':
6393   case 'FileSystemDirectoryHandle':
6394   case 'FileSystemFileHandle':
6395   case 'FileSystemHandle':
6396   case 'GPUCompilationInfo':
6397   case 'GPUCompilationMessage':
6398   case 'ImageBitmap':
6399   case 'RTCCertificate':
6400   case 'WebAssembly.Module':
6401    throwUnpolyfillable(type);
6402   default:
6403    throwUncloneable(type);
6404   }
6405 }
6406 mapSet(map, value, cloned);
6407 switch (type) {
6408 case 'Array':
6409 case 'Object':
6410  keys = objectKeys(value);
6411  for (i = 0, length = lengthOfArrayLike(keys); i < length; i++) {
6412   key = keys[i];
6413   createProperty(cloned, key, structuredCloneInternal(value[key], map, transferredBuffers));
6414  }
6415  break;
6416 case 'Map':
6417  value.forEach(function (v, k) {
6418   mapSet(cloned, structuredCloneInternal(k, map, transferredBuffers), structuredCloneInternal(v, map, transferredBuffers));
6419  });
6420  break;
6421 case 'Set':
6422  value.forEach(function (v) {
6423   setAdd(cloned, structuredCloneInternal(v, map, transferredBuffers));
6424  });
6425  break;
6426 case 'Error':
6427  createNonEnumerableProperty(cloned, 'message', structuredCloneInternal(value.message, map, transferredBuffers));
6428  if (hasOwn(value, 'cause')) {
6429   createNonEnumerableProperty(cloned, 'cause', structuredCloneInternal(value.cause, map, transferredBuffers));
6430  }
6431  if (name === 'AggregateError') {
6432   cloned.errors = structuredCloneInternal(value.errors, map, transferredBuffers);
6433  }
6434 case 'DOMException':
6435  if (ERROR_STACK_INSTALLABLE) {
6436   createNonEnumerableProperty(cloned, 'stack', structuredCloneInternal(value.stack, map, transferredBuffers));
6437  }
6438 }
6439 return cloned;
6440};
6441var replacePlaceholders = function (value, map) {
6442 if (!isObject(value))
6443  return value;
6444 if (mapHas(map, value))
6445  return mapGet(map, value);
6446 var type, object, metadata, i, length, keys, key, replacement;
6447 if (value instanceof Placeholder) {
6448  type = value.type;
6449  object = value.object;
6450  switch (type) {
6451  case 'ArrayBuffer':
6452  case 'SharedArrayBuffer':
6453   replacement = cloneBuffer(object, map, type);
6454   break;
6455  case 'DataView':
6456  case 'Int8Array':
6457  case 'Uint8Array':
6458  case 'Uint8ClampedArray':
6459  case 'Int16Array':
6460  case 'Uint16Array':
6461  case 'Int32Array':
6462  case 'Uint32Array':
6463  case 'Float16Array':
6464  case 'Float32Array':
6465  case 'Float64Array':
6466  case 'BigInt64Array':
6467  case 'BigUint64Array':
6468   metadata = value.metadata;
6469   replacement = cloneView(object, type, metadata.offset, metadata.length, map);
6470  }
6471 } else
6472  switch (classof(value)) {
6473  case 'Array':
6474  case 'Object':
6475   keys = objectKeys(value);
6476   for (i = 0, length = lengthOfArrayLike(keys); i < length; i++) {
6477    key = keys[i];
6478    value[key] = replacePlaceholders(value[key], map);
6479   }
6480   break;
6481  case 'Map':
6482   replacement = new Map();
6483   value.forEach(function (v, k) {
6484    mapSet(replacement, replacePlaceholders(k, map), replacePlaceholders(v, map));
6485   });
6486   break;
6487  case 'Set':
6488   replacement = new Set();
6489   value.forEach(function (v) {
6490    setAdd(replacement, replacePlaceholders(v, map));
6491   });
6492   break;
6493  case 'Error':
6494   value.message = replacePlaceholders(value.message, map);
6495   if (hasOwn(value, 'cause')) {
6496    value.cause = replacePlaceholders(value.cause, map);
6497   }
6498   if (value.name === 'AggregateError') {
6499    value.errors = replacePlaceholders(value.errors, map);
6500   }
6501  case 'DOMException':
6502   if (ERROR_STACK_INSTALLABLE) {
6503    value.stack = replacePlaceholders(value.stack, map);
6504   }
6505  }
6506 mapSet(map, value, replacement || value);
6507 return replacement || value;
6508};
6509var tryToTransfer = function (rawTransfer, map) {
6510 if (!isObject(rawTransfer))
6511  throw TypeError('Transfer option cannot be converted to a sequence');
6512 var transfer = [];
6513 iterate(rawTransfer, function (value) {
6514  push(transfer, anObject(value));
6515 });
6516 var i = 0;
6517 var length = lengthOfArrayLike(transfer);
6518 var buffers = [];
6519 var value, type, C, transferred, canvas, context;
6520 while (i < length) {
6521  value = transfer[i++];
6522  type = classof(value);
6523  if (type === 'ArrayBuffer') {
6524   push(buffers, value);
6525   continue;
6526  }
6527  if (mapHas(map, value))
6528   throw new DOMException('Duplicate transferable', DATA_CLONE_ERROR);
6529  if (PROPER_TRANSFER) {
6530   transferred = nativeStructuredClone(value, { transfer: [value] });
6531  } else
6532   switch (type) {
6533   case 'ImageBitmap':
6534    C = global.OffscreenCanvas;
6535    if (!isConstructor(C))
6536     throwUnpolyfillable(type, TRANSFERRING);
6537    try {
6538     canvas = new C(value.width, value.height);
6539     context = canvas.getContext('bitmaprenderer');
6540     context.transferFromImageBitmap(value);
6541     transferred = canvas.transferToImageBitmap();
6542    } catch (error) {
6543    }
6544    break;
6545   case 'AudioData':
6546   case 'VideoFrame':
6547    if (!isCallable(value.clone) || !isCallable(value.close))
6548     throwUnpolyfillable(type, TRANSFERRING);
6549    try {
6550     transferred = value.clone();
6551     value.close();
6552    } catch (error) {
6553    }
6554    break;
6555   case 'MediaSourceHandle':
6556   case 'MessagePort':
6557   case 'OffscreenCanvas':
6558   case 'ReadableStream':
6559   case 'TransformStream':
6560   case 'WritableStream':
6561    throwUnpolyfillable(type, TRANSFERRING);
6562   }
6563  if (transferred === undefined)
6564   throw new DOMException('This object cannot be transferred: ' + type, DATA_CLONE_ERROR);
6565  mapSet(map, value, transferred);
6566 }
6567 return buffers;
6568};
6569var tryToTransferBuffers = function (transfer, map) {
6570 var i = 0;
6571 var length = lengthOfArrayLike(transfer);
6572 var value, transferred;
6573 while (i < length) {
6574  value = transfer[i++];
6575  if (mapHas(map, value))
6576   throw new DOMException('Duplicate transferable', DATA_CLONE_ERROR);
6577  if (PROPER_TRANSFER) {
6578   transferred = nativeStructuredClone(value, { transfer: [value] });
6579  } else {
6580   if (!isCallable(value.transfer))
6581    throwUnpolyfillable('ArrayBuffer', TRANSFERRING);
6582   transferred = value.transfer();
6583  }
6584  mapSet(map, value, transferred);
6585 }
6586};
6587$({
6588 global: true,
6589 enumerable: true,
6590 sham: !PROPER_TRANSFER,
6591 forced: FORCED_REPLACEMENT
6592}, {
6593 structuredClone: function structuredClone(value) {
6594  var options = validateArgumentsLength(arguments.length, 1) > 1 && !isNullOrUndefined(arguments[1]) ? anObject(arguments[1]) : undefined;
6595  var transfer = options ? options.transfer : undefined;
6596  var transferredBuffers = false;
6597  var map, buffers;
6598  if (transfer !== undefined) {
6599   map = new Map();
6600   buffers = tryToTransfer(transfer, map);
6601   transferredBuffers = !!lengthOfArrayLike(buffers);
6602  }
6603  var clone = structuredCloneInternal(value, map, transferredBuffers);
6604  if (transferredBuffers) {
6605   map = new Map();
6606   tryToTransferBuffers(transfer, map);
6607   clone = replacePlaceholders(clone, map);
6608  }
6609  return clone;
6610 }
6611});
6612
6613/***/ }),
6614/* 153 */
6615/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
6616
6617
6618var uncurryThis = __w_pdfjs_require__(14);
6619var fails = __w_pdfjs_require__(7);
6620var isCallable = __w_pdfjs_require__(21);
6621var classof = __w_pdfjs_require__(78);
6622var getBuiltIn = __w_pdfjs_require__(24);
6623var inspectSource = __w_pdfjs_require__(51);
6624var noop = function () {
6625};
6626var empty = [];
6627var construct = getBuiltIn('Reflect', 'construct');
6628var constructorRegExp = /^\s*(?:class|function)\b/;
6629var exec = uncurryThis(constructorRegExp.exec);
6630var INCORRECT_TO_STRING = !constructorRegExp.exec(noop);
6631var isConstructorModern = function isConstructor(argument) {
6632 if (!isCallable(argument))
6633  return false;
6634 try {
6635  construct(noop, empty, argument);
6636  return true;
6637 } catch (error) {
6638  return false;
6639 }
6640};
6641var isConstructorLegacy = function isConstructor(argument) {
6642 if (!isCallable(argument))
6643  return false;
6644 switch (classof(argument)) {
6645 case 'AsyncFunction':
6646 case 'GeneratorFunction':
6647 case 'AsyncGeneratorFunction':
6648  return false;
6649 }
6650 try {
6651  return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument));
6652 } catch (error) {
6653  return true;
6654 }
6655};
6656isConstructorLegacy.sham = true;
6657module.exports = !construct || fails(function () {
6658 var called;
6659 return isConstructorModern(isConstructorModern.call) || !isConstructorModern(Object) || !isConstructorModern(function () {
6660  called = true;
6661 }) || called;
6662}) ? isConstructorLegacy : isConstructorModern;
6663
6664/***/ }),
6665/* 154 */
6666/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
6667
6668
6669var bind = __w_pdfjs_require__(99);
6670var call = __w_pdfjs_require__(8);
6671var anObject = __w_pdfjs_require__(47);
6672var tryToString = __w_pdfjs_require__(32);
6673var isArrayIteratorMethod = __w_pdfjs_require__(155);
6674var lengthOfArrayLike = __w_pdfjs_require__(64);
6675var isPrototypeOf = __w_pdfjs_require__(25);
6676var getIterator = __w_pdfjs_require__(157);
6677var getIteratorMethod = __w_pdfjs_require__(158);
6678var iteratorClose = __w_pdfjs_require__(140);
6679var $TypeError = TypeError;
6680var Result = function (stopped, result) {
6681 this.stopped = stopped;
6682 this.result = result;
6683};
6684var ResultPrototype = Result.prototype;
6685module.exports = function (iterable, unboundFunction, options) {
6686 var that = options && options.that;
6687 var AS_ENTRIES = !!(options && options.AS_ENTRIES);
6688 var IS_RECORD = !!(options && options.IS_RECORD);
6689 var IS_ITERATOR = !!(options && options.IS_ITERATOR);
6690 var INTERRUPTED = !!(options && options.INTERRUPTED);
6691 var fn = bind(unboundFunction, that);
6692 var iterator, iterFn, index, length, result, next, step;
6693 var stop = function (condition) {
6694  if (iterator)
6695   iteratorClose(iterator, 'normal', condition);
6696  return new Result(true, condition);
6697 };
6698 var callFn = function (value) {
6699  if (AS_ENTRIES) {
6700   anObject(value);
6701   return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);
6702  }
6703  return INTERRUPTED ? fn(value, stop) : fn(value);
6704 };
6705 if (IS_RECORD) {
6706  iterator = iterable.iterator;
6707 } else if (IS_ITERATOR) {
6708  iterator = iterable;
6709 } else {
6710  iterFn = getIteratorMethod(iterable);
6711  if (!iterFn)
6712   throw $TypeError(tryToString(iterable) + ' is not iterable');
6713  if (isArrayIteratorMethod(iterFn)) {
6714   for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) {
6715    result = callFn(iterable[index]);
6716    if (result && isPrototypeOf(ResultPrototype, result))
6717     return result;
6718   }
6719   return new Result(false);
6720  }
6721  iterator = getIterator(iterable, iterFn);
6722 }
6723 next = IS_RECORD ? iterable.next : iterator.next;
6724 while (!(step = call(next, iterator)).done) {
6725  try {
6726   result = callFn(step.value);
6727  } catch (error) {
6728   iteratorClose(iterator, 'throw', error);
6729  }
6730  if (typeof result == 'object' && result && isPrototypeOf(ResultPrototype, result))
6731   return result;
6732 }
6733 return new Result(false);
6734};
6735
6736/***/ }),
6737/* 155 */
6738/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
6739
6740
6741var wellKnownSymbol = __w_pdfjs_require__(34);
6742var Iterators = __w_pdfjs_require__(156);
6743var ITERATOR = wellKnownSymbol('iterator');
6744var ArrayPrototype = Array.prototype;
6745module.exports = function (it) {
6746 return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);
6747};
6748
6749/***/ }),
6750/* 156 */
6751/***/ ((module) => {
6752
6753
6754module.exports = {};
6755
6756/***/ }),
6757/* 157 */
6758/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
6759
6760
6761var call = __w_pdfjs_require__(8);
6762var aCallable = __w_pdfjs_require__(31);
6763var anObject = __w_pdfjs_require__(47);
6764var tryToString = __w_pdfjs_require__(32);
6765var getIteratorMethod = __w_pdfjs_require__(158);
6766var $TypeError = TypeError;
6767module.exports = function (argument, usingIterator) {
6768 var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator;
6769 if (aCallable(iteratorMethod))
6770  return anObject(call(iteratorMethod, argument));
6771 throw $TypeError(tryToString(argument) + ' is not iterable');
6772};
6773
6774/***/ }),
6775/* 158 */
6776/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
6777
6778
6779var classof = __w_pdfjs_require__(78);
6780var getMethod = __w_pdfjs_require__(30);
6781var isNullOrUndefined = __w_pdfjs_require__(17);
6782var Iterators = __w_pdfjs_require__(156);
6783var wellKnownSymbol = __w_pdfjs_require__(34);
6784var ITERATOR = wellKnownSymbol('iterator');
6785module.exports = function (it) {
6786 if (!isNullOrUndefined(it))
6787  return getMethod(it, ITERATOR) || getMethod(it, '@@iterator') || Iterators[classof(it)];
6788};
6789
6790/***/ }),
6791/* 159 */
6792/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
6793
6794
6795var toPropertyKey = __w_pdfjs_require__(18);
6796var definePropertyModule = __w_pdfjs_require__(45);
6797var createPropertyDescriptor = __w_pdfjs_require__(11);
6798module.exports = function (object, key, value) {
6799 var propertyKey = toPropertyKey(key);
6800 if (propertyKey in object)
6801  definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));
6802 else
6803  object[propertyKey] = value;
6804};
6805
6806/***/ }),
6807/* 160 */
6808/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
6809
6810
6811var call = __w_pdfjs_require__(8);
6812var hasOwn = __w_pdfjs_require__(39);
6813var isPrototypeOf = __w_pdfjs_require__(25);
6814var regExpFlags = __w_pdfjs_require__(161);
6815var RegExpPrototype = RegExp.prototype;
6816module.exports = function (R) {
6817 var flags = R.flags;
6818 return flags === undefined && !('flags' in RegExpPrototype) && !hasOwn(R, 'flags') && isPrototypeOf(RegExpPrototype, R) ? call(regExpFlags, R) : flags;
6819};
6820
6821/***/ }),
6822/* 161 */
6823/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
6824
6825
6826var anObject = __w_pdfjs_require__(47);
6827module.exports = function () {
6828 var that = anObject(this);
6829 var result = '';
6830 if (that.hasIndices)
6831  result += 'd';
6832 if (that.global)
6833  result += 'g';
6834 if (that.ignoreCase)
6835  result += 'i';
6836 if (that.multiline)
6837  result += 'm';
6838 if (that.dotAll)
6839  result += 's';
6840 if (that.unicode)
6841  result += 'u';
6842 if (that.unicodeSets)
6843  result += 'v';
6844 if (that.sticky)
6845  result += 'y';
6846 return result;
6847};
6848
6849/***/ }),
6850/* 162 */
6851/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
6852
6853
6854var uncurryThis = __w_pdfjs_require__(14);
6855var MapPrototype = Map.prototype;
6856module.exports = {
6857 Map: Map,
6858 set: uncurryThis(MapPrototype.set),
6859 get: uncurryThis(MapPrototype.get),
6860 has: uncurryThis(MapPrototype.has),
6861 remove: uncurryThis(MapPrototype['delete']),
6862 proto: MapPrototype
6863};
6864
6865/***/ }),
6866/* 163 */
6867/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
6868
6869
6870
6871Object.defineProperty(exports, "__esModule", ({
6872  value: true
6873}));
6874exports.SerializableEmpty = exports.PrintAnnotationStorage = exports.AnnotationStorage = void 0;
6875__w_pdfjs_require__(89);
6876__w_pdfjs_require__(149);
6877__w_pdfjs_require__(152);
6878var _util = __w_pdfjs_require__(1);
6879var _editor = __w_pdfjs_require__(164);
6880var _murmurhash = __w_pdfjs_require__(170);
6881const SerializableEmpty = Object.freeze({
6882  map: null,
6883  hash: "",
6884  transfers: undefined
6885});
6886exports.SerializableEmpty = SerializableEmpty;
6887class AnnotationStorage {
6888  #modified = false;
6889  #storage = new Map();
6890  constructor() {
6891    this.onSetModified = null;
6892    this.onResetModified = null;
6893    this.onAnnotationEditor = null;
6894  }
6895  getValue(key, defaultValue) {
6896    const value = this.#storage.get(key);
6897    if (value === undefined) {
6898      return defaultValue;
6899    }
6900    return Object.assign(defaultValue, value);
6901  }
6902  getRawValue(key) {
6903    return this.#storage.get(key);
6904  }
6905  remove(key) {
6906    this.#storage.delete(key);
6907    if (this.#storage.size === 0) {
6908      this.resetModified();
6909    }
6910    if (typeof this.onAnnotationEditor === "function") {
6911      for (const value of this.#storage.values()) {
6912        if (value instanceof _editor.AnnotationEditor) {
6913          return;
6914        }
6915      }
6916      this.onAnnotationEditor(null);
6917    }
6918  }
6919  setValue(key, value) {
6920    const obj = this.#storage.get(key);
6921    let modified = false;
6922    if (obj !== undefined) {
6923      for (const [entry, val] of Object.entries(value)) {
6924        if (obj[entry] !== val) {
6925          modified = true;
6926          obj[entry] = val;
6927        }
6928      }
6929    } else {
6930      modified = true;
6931      this.#storage.set(key, value);
6932    }
6933    if (modified) {
6934      this.#setModified();
6935    }
6936    if (value instanceof _editor.AnnotationEditor && typeof this.onAnnotationEditor === "function") {
6937      this.onAnnotationEditor(value.constructor._type);
6938    }
6939  }
6940  has(key) {
6941    return this.#storage.has(key);
6942  }
6943  getAll() {
6944    return this.#storage.size > 0 ? (0, _util.objectFromMap)(this.#storage) : null;
6945  }
6946  setAll(obj) {
6947    for (const [key, val] of Object.entries(obj)) {
6948      this.setValue(key, val);
6949    }
6950  }
6951  get size() {
6952    return this.#storage.size;
6953  }
6954  #setModified() {
6955    if (!this.#modified) {
6956      this.#modified = true;
6957      if (typeof this.onSetModified === "function") {
6958        this.onSetModified();
6959      }
6960    }
6961  }
6962  resetModified() {
6963    if (this.#modified) {
6964      this.#modified = false;
6965      if (typeof this.onResetModified === "function") {
6966        this.onResetModified();
6967      }
6968    }
6969  }
6970  get print() {
6971    return new PrintAnnotationStorage(this);
6972  }
6973  get serializable() {
6974    if (this.#storage.size === 0) {
6975      return SerializableEmpty;
6976    }
6977    const map = new Map(),
6978      hash = new _murmurhash.MurmurHash3_64(),
6979      transfers = [];
6980    const context = Object.create(null);
6981    let hasBitmap = false;
6982    for (const [key, val] of this.#storage) {
6983      const serialized = val instanceof _editor.AnnotationEditor ? val.serialize(false, context) : val;
6984      if (serialized) {
6985        map.set(key, serialized);
6986        hash.update(`${key}:${JSON.stringify(serialized)}`);
6987        hasBitmap ||= !!serialized.bitmap;
6988      }
6989    }
6990    if (hasBitmap) {
6991      for (const value of map.values()) {
6992        if (value.bitmap) {
6993          transfers.push(value.bitmap);
6994        }
6995      }
6996    }
6997    return map.size > 0 ? {
6998      map,
6999      hash: hash.hexdigest(),
7000      transfers
7001    } : SerializableEmpty;
7002  }
7003}
7004exports.AnnotationStorage = AnnotationStorage;
7005class PrintAnnotationStorage extends AnnotationStorage {
7006  #serializable;
7007  constructor(parent) {
7008    super();
7009    const {
7010      map,
7011      hash,
7012      transfers
7013    } = parent.serializable;
7014    const clone = structuredClone(map, null);
7015    this.#serializable = {
7016      map: clone,
7017      hash,
7018      transfers
7019    };
7020  }
7021  get print() {
7022    (0, _util.unreachable)("Should not call PrintAnnotationStorage.print");
7023  }
7024  get serializable() {
7025    return this.#serializable;
7026  }
7027}
7028exports.PrintAnnotationStorage = PrintAnnotationStorage;
7029
7030/***/ }),
7031/* 164 */
7032/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
7033
7034
7035
7036Object.defineProperty(exports, "__esModule", ({
7037  value: true
7038}));
7039exports.AnnotationEditor = void 0;
7040__w_pdfjs_require__(89);
7041__w_pdfjs_require__(2);
7042var _tools = __w_pdfjs_require__(165);
7043var _util = __w_pdfjs_require__(1);
7044var _display_utils = __w_pdfjs_require__(168);
7045class AnnotationEditor {
7046  #altText = "";
7047  #altTextDecorative = false;
7048  #altTextButton = null;
7049  #altTextTooltip = null;
7050  #altTextTooltipTimeout = null;
7051  #keepAspectRatio = false;
7052  #resizersDiv = null;
7053  #boundFocusin = this.focusin.bind(this);
7054  #boundFocusout = this.focusout.bind(this);
7055  #hasBeenClicked = false;
7056  #isEditing = false;
7057  #isInEditMode = false;
7058  _initialOptions = Object.create(null);
7059  _uiManager = null;
7060  _focusEventsAllowed = true;
7061  _l10nPromise = null;
7062  #isDraggable = false;
7063  #zIndex = AnnotationEditor._zIndex++;
7064  static _borderLineWidth = -1;
7065  static _colorManager = new _tools.ColorManager();
7066  static _zIndex = 1;
7067  static SMALL_EDITOR_SIZE = 0;
7068  constructor(parameters) {
7069    if (this.constructor === AnnotationEditor) {
7070      (0, _util.unreachable)("Cannot initialize AnnotationEditor.");
7071    }
7072    this.parent = parameters.parent;
7073    this.id = parameters.id;
7074    this.width = this.height = null;
7075    this.pageIndex = parameters.parent.pageIndex;
7076    this.name = parameters.name;
7077    this.div = null;
7078    this._uiManager = parameters.uiManager;
7079    this.annotationElementId = null;
7080    this._willKeepAspectRatio = false;
7081    this._initialOptions.isCentered = parameters.isCentered;
7082    this._structTreeParentId = null;
7083    const {
7084      rotation,
7085      rawDims: {
7086        pageWidth,
7087        pageHeight,
7088        pageX,
7089        pageY
7090      }
7091    } = this.parent.viewport;
7092    this.rotation = rotation;
7093    this.pageRotation = (360 + rotation - this._uiManager.viewParameters.rotation) % 360;
7094    this.pageDimensions = [pageWidth, pageHeight];
7095    this.pageTranslation = [pageX, pageY];
7096    const [width, height] = this.parentDimensions;
7097    this.x = parameters.x / width;
7098    this.y = parameters.y / height;
7099    this.isAttachedToDOM = false;
7100    this.deleted = false;
7101  }
7102  get editorType() {
7103    return Object.getPrototypeOf(this).constructor._type;
7104  }
7105  static get _defaultLineColor() {
7106    return (0, _util.shadow)(this, "_defaultLineColor", this._colorManager.getHexCode("CanvasText"));
7107  }
7108  static deleteAnnotationElement(editor) {
7109    const fakeEditor = new FakeEditor({
7110      id: editor.parent.getNextId(),
7111      parent: editor.parent,
7112      uiManager: editor._uiManager
7113    });
7114    fakeEditor.annotationElementId = editor.annotationElementId;
7115    fakeEditor.deleted = true;
7116    fakeEditor._uiManager.addToAnnotationStorage(fakeEditor);
7117  }
7118  static initialize(l10n) {
7119    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
7120    AnnotationEditor._l10nPromise ||= new Map(["editor_alt_text_button_label", "editor_alt_text_edit_button_label", "editor_alt_text_decorative_tooltip"].map(str => [str, l10n.get(str)]));
7121    if (options?.strings) {
7122      for (const str of options.strings) {
7123        AnnotationEditor._l10nPromise.set(str, l10n.get(str));
7124      }
7125    }
7126    if (AnnotationEditor._borderLineWidth !== -1) {
7127      return;
7128    }
7129    const style = getComputedStyle(document.documentElement);
7130    AnnotationEditor._borderLineWidth = parseFloat(style.getPropertyValue("--outline-width")) || 0;
7131  }
7132  static updateDefaultParams(_type, _value) {}
7133  static get defaultPropertiesToUpdate() {
7134    return [];
7135  }
7136  static isHandlingMimeForPasting(mime) {
7137    return false;
7138  }
7139  static paste(item, parent) {
7140    (0, _util.unreachable)("Not implemented");
7141  }
7142  get propertiesToUpdate() {
7143    return [];
7144  }
7145  get _isDraggable() {
7146    return this.#isDraggable;
7147  }
7148  set _isDraggable(value) {
7149    this.#isDraggable = value;
7150    this.div?.classList.toggle("draggable", value);
7151  }
7152  center() {
7153    const [pageWidth, pageHeight] = this.pageDimensions;
7154    switch (this.parentRotation) {
7155      case 90:
7156        this.x -= this.height * pageHeight / (pageWidth * 2);
7157        this.y += this.width * pageWidth / (pageHeight * 2);
7158        break;
7159      case 180:
7160        this.x += this.width / 2;
7161        this.y += this.height / 2;
7162        break;
7163      case 270:
7164        this.x += this.height * pageHeight / (pageWidth * 2);
7165        this.y -= this.width * pageWidth / (pageHeight * 2);
7166        break;
7167      default:
7168        this.x -= this.width / 2;
7169        this.y -= this.height / 2;
7170        break;
7171    }
7172    this.fixAndSetPosition();
7173  }
7174  addCommands(params) {
7175    this._uiManager.addCommands(params);
7176  }
7177  get currentLayer() {
7178    return this._uiManager.currentLayer;
7179  }
7180  setInBackground() {
7181    this.div.style.zIndex = 0;
7182  }
7183  setInForeground() {
7184    this.div.style.zIndex = this.#zIndex;
7185  }
7186  setParent(parent) {
7187    if (parent !== null) {
7188      this.pageIndex = parent.pageIndex;
7189      this.pageDimensions = parent.pageDimensions;
7190    }
7191    this.parent = parent;
7192  }
7193  focusin(event) {
7194    if (!this._focusEventsAllowed) {
7195      return;
7196    }
7197    if (!this.#hasBeenClicked) {
7198      this.parent.setSelected(this);
7199    } else {
7200      this.#hasBeenClicked = false;
7201    }
7202  }
7203  focusout(event) {
7204    if (!this._focusEventsAllowed) {
7205      return;
7206    }
7207    if (!this.isAttachedToDOM) {
7208      return;
7209    }
7210    const target = event.relatedTarget;
7211    if (target?.closest(`#${this.id}`)) {
7212      return;
7213    }
7214    event.preventDefault();
7215    if (!this.parent?.isMultipleSelection) {
7216      this.commitOrRemove();
7217    }
7218  }
7219  commitOrRemove() {
7220    if (this.isEmpty()) {
7221      this.remove();
7222    } else {
7223      this.commit();
7224    }
7225  }
7226  commit() {
7227    this.addToAnnotationStorage();
7228  }
7229  addToAnnotationStorage() {
7230    this._uiManager.addToAnnotationStorage(this);
7231  }
7232  setAt(x, y, tx, ty) {
7233    const [width, height] = this.parentDimensions;
7234    [tx, ty] = this.screenToPageTranslation(tx, ty);
7235    this.x = (x + tx) / width;
7236    this.y = (y + ty) / height;
7237    this.fixAndSetPosition();
7238  }
7239  #translate(_ref, x, y) {
7240    let [width, height] = _ref;
7241    [x, y] = this.screenToPageTranslation(x, y);
7242    this.x += x / width;
7243    this.y += y / height;
7244    this.fixAndSetPosition();
7245  }
7246  translate(x, y) {
7247    this.#translate(this.parentDimensions, x, y);
7248  }
7249  translateInPage(x, y) {
7250    this.#translate(this.pageDimensions, x, y);
7251    this.div.scrollIntoView({
7252      block: "nearest"
7253    });
7254  }
7255  drag(tx, ty) {
7256    const [parentWidth, parentHeight] = this.parentDimensions;
7257    this.x += tx / parentWidth;
7258    this.y += ty / parentHeight;
7259    if (this.parent && (this.x < 0 || this.x > 1 || this.y < 0 || this.y > 1)) {
7260      const {
7261        x,
7262        y
7263      } = this.div.getBoundingClientRect();
7264      if (this.parent.findNewParent(this, x, y)) {
7265        this.x -= Math.floor(this.x);
7266        this.y -= Math.floor(this.y);
7267      }
7268    }
7269    let {
7270      x,
7271      y
7272    } = this;
7273    const [bx, by] = this.#getBaseTranslation();
7274    x += bx;
7275    y += by;
7276    this.div.style.left = `${(100 * x).toFixed(2)}%`;
7277    this.div.style.top = `${(100 * y).toFixed(2)}%`;
7278    this.div.scrollIntoView({
7279      block: "nearest"
7280    });
7281  }
7282  #getBaseTranslation() {
7283    const [parentWidth, parentHeight] = this.parentDimensions;
7284    const {
7285      _borderLineWidth
7286    } = AnnotationEditor;
7287    const x = _borderLineWidth / parentWidth;
7288    const y = _borderLineWidth / parentHeight;
7289    switch (this.rotation) {
7290      case 90:
7291        return [-x, y];
7292      case 180:
7293        return [x, y];
7294      case 270:
7295        return [x, -y];
7296      default:
7297        return [-x, -y];
7298    }
7299  }
7300  fixAndSetPosition() {
7301    const [pageWidth, pageHeight] = this.pageDimensions;
7302    let {
7303      x,
7304      y,
7305      width,
7306      height
7307    } = this;
7308    width *= pageWidth;
7309    height *= pageHeight;
7310    x *= pageWidth;
7311    y *= pageHeight;
7312    switch (this.rotation) {
7313      case 0:
7314        x = Math.max(0, Math.min(pageWidth - width, x));
7315        y = Math.max(0, Math.min(pageHeight - height, y));
7316        break;
7317      case 90:
7318        x = Math.max(0, Math.min(pageWidth - height, x));
7319        y = Math.min(pageHeight, Math.max(width, y));
7320        break;
7321      case 180:
7322        x = Math.min(pageWidth, Math.max(width, x));
7323        y = Math.min(pageHeight, Math.max(height, y));
7324        break;
7325      case 270:
7326        x = Math.min(pageWidth, Math.max(height, x));
7327        y = Math.max(0, Math.min(pageHeight - width, y));
7328        break;
7329    }
7330    this.x = x /= pageWidth;
7331    this.y = y /= pageHeight;
7332    const [bx, by] = this.#getBaseTranslation();
7333    x += bx;
7334    y += by;
7335    const {
7336      style
7337    } = this.div;
7338    style.left = `${(100 * x).toFixed(2)}%`;
7339    style.top = `${(100 * y).toFixed(2)}%`;
7340    this.moveInDOM();
7341  }
7342  static #rotatePoint(x, y, angle) {
7343    switch (angle) {
7344      case 90:
7345        return [y, -x];
7346      case 180:
7347        return [-x, -y];
7348      case 270:
7349        return [-y, x];
7350      default:
7351        return [x, y];
7352    }
7353  }
7354  screenToPageTranslation(x, y) {
7355    return AnnotationEditor.#rotatePoint(x, y, this.parentRotation);
7356  }
7357  pageTranslationToScreen(x, y) {
7358    return AnnotationEditor.#rotatePoint(x, y, 360 - this.parentRotation);
7359  }
7360  #getRotationMatrix(rotation) {
7361    switch (rotation) {
7362      case 90:
7363        {
7364          const [pageWidth, pageHeight] = this.pageDimensions;
7365          return [0, -pageWidth / pageHeight, pageHeight / pageWidth, 0];
7366        }
7367      case 180:
7368        return [-1, 0, 0, -1];
7369      case 270:
7370        {
7371          const [pageWidth, pageHeight] = this.pageDimensions;
7372          return [0, pageWidth / pageHeight, -pageHeight / pageWidth, 0];
7373        }
7374      default:
7375        return [1, 0, 0, 1];
7376    }
7377  }
7378  get parentScale() {
7379    return this._uiManager.viewParameters.realScale;
7380  }
7381  get parentRotation() {
7382    return (this._uiManager.viewParameters.rotation + this.pageRotation) % 360;
7383  }
7384  get parentDimensions() {
7385    const {
7386      parentScale,
7387      pageDimensions: [pageWidth, pageHeight]
7388    } = this;
7389    const scaledWidth = pageWidth * parentScale;
7390    const scaledHeight = pageHeight * parentScale;
7391    return _util.FeatureTest.isCSSRoundSupported ? [Math.round(scaledWidth), Math.round(scaledHeight)] : [scaledWidth, scaledHeight];
7392  }
7393  setDims(width, height) {
7394    const [parentWidth, parentHeight] = this.parentDimensions;
7395    this.div.style.width = `${(100 * width / parentWidth).toFixed(2)}%`;
7396    if (!this.#keepAspectRatio) {
7397      this.div.style.height = `${(100 * height / parentHeight).toFixed(2)}%`;
7398    }
7399    this.#altTextButton?.classList.toggle("small", width < AnnotationEditor.SMALL_EDITOR_SIZE || height < AnnotationEditor.SMALL_EDITOR_SIZE);
7400  }
7401  fixDims() {
7402    const {
7403      style
7404    } = this.div;
7405    const {
7406      height,
7407      width
7408    } = style;
7409    const widthPercent = width.endsWith("%");
7410    const heightPercent = !this.#keepAspectRatio && height.endsWith("%");
7411    if (widthPercent && heightPercent) {
7412      return;
7413    }
7414    const [parentWidth, parentHeight] = this.parentDimensions;
7415    if (!widthPercent) {
7416      style.width = `${(100 * parseFloat(width) / parentWidth).toFixed(2)}%`;
7417    }
7418    if (!this.#keepAspectRatio && !heightPercent) {
7419      style.height = `${(100 * parseFloat(height) / parentHeight).toFixed(2)}%`;
7420    }
7421  }
7422  getInitialTranslation() {
7423    return [0, 0];
7424  }
7425  #createResizers() {
7426    if (this.#resizersDiv) {
7427      return;
7428    }
7429    this.#resizersDiv = document.createElement("div");
7430    this.#resizersDiv.classList.add("resizers");
7431    const classes = ["topLeft", "topRight", "bottomRight", "bottomLeft"];
7432    if (!this._willKeepAspectRatio) {
7433      classes.push("topMiddle", "middleRight", "bottomMiddle", "middleLeft");
7434    }
7435    for (const name of classes) {
7436      const div = document.createElement("div");
7437      this.#resizersDiv.append(div);
7438      div.classList.add("resizer", name);
7439      div.addEventListener("pointerdown", this.#resizerPointerdown.bind(this, name));
7440      div.addEventListener("contextmenu", _display_utils.noContextMenu);
7441    }
7442    this.div.prepend(this.#resizersDiv);
7443  }
7444  #resizerPointerdown(name, event) {
7445    event.preventDefault();
7446    const {
7447      isMac
7448    } = _util.FeatureTest.platform;
7449    if (event.button !== 0 || event.ctrlKey && isMac) {
7450      return;
7451    }
7452    const boundResizerPointermove = this.#resizerPointermove.bind(this, name);
7453    const savedDraggable = this._isDraggable;
7454    this._isDraggable = false;
7455    const pointerMoveOptions = {
7456      passive: true,
7457      capture: true
7458    };
7459    window.addEventListener("pointermove", boundResizerPointermove, pointerMoveOptions);
7460    const savedX = this.x;
7461    const savedY = this.y;
7462    const savedWidth = this.width;
7463    const savedHeight = this.height;
7464    const savedParentCursor = this.parent.div.style.cursor;
7465    const savedCursor = this.div.style.cursor;
7466    this.div.style.cursor = this.parent.div.style.cursor = window.getComputedStyle(event.target).cursor;
7467    const pointerUpCallback = () => {
7468      this._isDraggable = savedDraggable;
7469      window.removeEventListener("pointerup", pointerUpCallback);
7470      window.removeEventListener("blur", pointerUpCallback);
7471      window.removeEventListener("pointermove", boundResizerPointermove, pointerMoveOptions);
7472      this.parent.div.style.cursor = savedParentCursor;
7473      this.div.style.cursor = savedCursor;
7474      const newX = this.x;
7475      const newY = this.y;
7476      const newWidth = this.width;
7477      const newHeight = this.height;
7478      if (newX === savedX && newY === savedY && newWidth === savedWidth && newHeight === savedHeight) {
7479        return;
7480      }
7481      this.addCommands({
7482        cmd: () => {
7483          this.width = newWidth;
7484          this.height = newHeight;
7485          this.x = newX;
7486          this.y = newY;
7487          const [parentWidth, parentHeight] = this.parentDimensions;
7488          this.setDims(parentWidth * newWidth, parentHeight * newHeight);
7489          this.fixAndSetPosition();
7490        },
7491        undo: () => {
7492          this.width = savedWidth;
7493          this.height = savedHeight;
7494          this.x = savedX;
7495          this.y = savedY;
7496          const [parentWidth, parentHeight] = this.parentDimensions;
7497          this.setDims(parentWidth * savedWidth, parentHeight * savedHeight);
7498          this.fixAndSetPosition();
7499        },
7500        mustExec: true
7501      });
7502    };
7503    window.addEventListener("pointerup", pointerUpCallback);
7504    window.addEventListener("blur", pointerUpCallback);
7505  }
7506  #resizerPointermove(name, event) {
7507    const [parentWidth, parentHeight] = this.parentDimensions;
7508    const savedX = this.x;
7509    const savedY = this.y;
7510    const savedWidth = this.width;
7511    const savedHeight = this.height;
7512    const minWidth = AnnotationEditor.MIN_SIZE / parentWidth;
7513    const minHeight = AnnotationEditor.MIN_SIZE / parentHeight;
7514    const round = x => Math.round(x * 10000) / 10000;
7515    const rotationMatrix = this.#getRotationMatrix(this.rotation);
7516    const transf = (x, y) => [rotationMatrix[0] * x + rotationMatrix[2] * y, rotationMatrix[1] * x + rotationMatrix[3] * y];
7517    const invRotationMatrix = this.#getRotationMatrix(360 - this.rotation);
7518    const invTransf = (x, y) => [invRotationMatrix[0] * x + invRotationMatrix[2] * y, invRotationMatrix[1] * x + invRotationMatrix[3] * y];
7519    let getPoint;
7520    let getOpposite;
7521    let isDiagonal = false;
7522    let isHorizontal = false;
7523    switch (name) {
7524      case "topLeft":
7525        isDiagonal = true;
7526        getPoint = (w, h) => [0, 0];
7527        getOpposite = (w, h) => [w, h];
7528        break;
7529      case "topMiddle":
7530        getPoint = (w, h) => [w / 2, 0];
7531        getOpposite = (w, h) => [w / 2, h];
7532        break;
7533      case "topRight":
7534        isDiagonal = true;
7535        getPoint = (w, h) => [w, 0];
7536        getOpposite = (w, h) => [0, h];
7537        break;
7538      case "middleRight":
7539        isHorizontal = true;
7540        getPoint = (w, h) => [w, h / 2];
7541        getOpposite = (w, h) => [0, h / 2];
7542        break;
7543      case "bottomRight":
7544        isDiagonal = true;
7545        getPoint = (w, h) => [w, h];
7546        getOpposite = (w, h) => [0, 0];
7547        break;
7548      case "bottomMiddle":
7549        getPoint = (w, h) => [w / 2, h];
7550        getOpposite = (w, h) => [w / 2, 0];
7551        break;
7552      case "bottomLeft":
7553        isDiagonal = true;
7554        getPoint = (w, h) => [0, h];
7555        getOpposite = (w, h) => [w, 0];
7556        break;
7557      case "middleLeft":
7558        isHorizontal = true;
7559        getPoint = (w, h) => [0, h / 2];
7560        getOpposite = (w, h) => [w, h / 2];
7561        break;
7562    }
7563    const point = getPoint(savedWidth, savedHeight);
7564    const oppositePoint = getOpposite(savedWidth, savedHeight);
7565    let transfOppositePoint = transf(...oppositePoint);
7566    const oppositeX = round(savedX + transfOppositePoint[0]);
7567    const oppositeY = round(savedY + transfOppositePoint[1]);
7568    let ratioX = 1;
7569    let ratioY = 1;
7570    let [deltaX, deltaY] = this.screenToPageTranslation(event.movementX, event.movementY);
7571    [deltaX, deltaY] = invTransf(deltaX / parentWidth, deltaY / parentHeight);
7572    if (isDiagonal) {
7573      const oldDiag = Math.hypot(savedWidth, savedHeight);
7574      ratioX = ratioY = Math.max(Math.min(Math.hypot(oppositePoint[0] - point[0] - deltaX, oppositePoint[1] - point[1] - deltaY) / oldDiag, 1 / savedWidth, 1 / savedHeight), minWidth / savedWidth, minHeight / savedHeight);
7575    } else if (isHorizontal) {
7576      ratioX = Math.max(minWidth, Math.min(1, Math.abs(oppositePoint[0] - point[0] - deltaX))) / savedWidth;
7577    } else {
7578      ratioY = Math.max(minHeight, Math.min(1, Math.abs(oppositePoint[1] - point[1] - deltaY))) / savedHeight;
7579    }
7580    const newWidth = round(savedWidth * ratioX);
7581    const newHeight = round(savedHeight * ratioY);
7582    transfOppositePoint = transf(...getOpposite(newWidth, newHeight));
7583    const newX = oppositeX - transfOppositePoint[0];
7584    const newY = oppositeY - transfOppositePoint[1];
7585    this.width = newWidth;
7586    this.height = newHeight;
7587    this.x = newX;
7588    this.y = newY;
7589    this.setDims(parentWidth * newWidth, parentHeight * newHeight);
7590    this.fixAndSetPosition();
7591  }
7592  async addAltTextButton() {
7593    if (this.#altTextButton) {
7594      return;
7595    }
7596    const altText = this.#altTextButton = document.createElement("button");
7597    altText.className = "altText";
7598    const msg = await AnnotationEditor._l10nPromise.get("editor_alt_text_button_label");
7599    altText.textContent = msg;
7600    altText.setAttribute("aria-label", msg);
7601    altText.tabIndex = "0";
7602    altText.addEventListener("contextmenu", _display_utils.noContextMenu);
7603    altText.addEventListener("pointerdown", event => event.stopPropagation());
7604    altText.addEventListener("click", event => {
7605      event.preventDefault();
7606      this._uiManager.editAltText(this);
7607    }, {
7608      capture: true
7609    });
7610    altText.addEventListener("keydown", event => {
7611      if (event.target === altText && event.key === "Enter") {
7612        event.preventDefault();
7613        this._uiManager.editAltText(this);
7614      }
7615    });
7616    this.#setAltTextButtonState();
7617    this.div.append(altText);
7618    if (!AnnotationEditor.SMALL_EDITOR_SIZE) {
7619      const PERCENT = 40;
7620      AnnotationEditor.SMALL_EDITOR_SIZE = Math.min(128, Math.round(altText.getBoundingClientRect().width * (1 + PERCENT / 100)));
7621    }
7622  }
7623  async #setAltTextButtonState() {
7624    const button = this.#altTextButton;
7625    if (!button) {
7626      return;
7627    }
7628    if (!this.#altText && !this.#altTextDecorative) {
7629      button.classList.remove("done");
7630      this.#altTextTooltip?.remove();
7631      return;
7632    }
7633    AnnotationEditor._l10nPromise.get("editor_alt_text_edit_button_label").then(msg => {
7634      button.setAttribute("aria-label", msg);
7635    });
7636    let tooltip = this.#altTextTooltip;
7637    if (!tooltip) {
7638      this.#altTextTooltip = tooltip = document.createElement("span");
7639      tooltip.className = "tooltip";
7640      tooltip.setAttribute("role", "tooltip");
7641      const id = tooltip.id = `alt-text-tooltip-${this.id}`;
7642      button.setAttribute("aria-describedby", id);
7643      const DELAY_TO_SHOW_TOOLTIP = 100;
7644      button.addEventListener("mouseenter", () => {
7645        this.#altTextTooltipTimeout = setTimeout(() => {
7646          this.#altTextTooltipTimeout = null;
7647          this.#altTextTooltip.classList.add("show");
7648          this._uiManager._eventBus.dispatch("reporttelemetry", {
7649            source: this,
7650            details: {
7651              type: "editing",
7652              subtype: this.editorType,
7653              data: {
7654                action: "alt_text_tooltip"
7655              }
7656            }
7657          });
7658        }, DELAY_TO_SHOW_TOOLTIP);
7659      });
7660      button.addEventListener("mouseleave", () => {
7661        clearTimeout(this.#altTextTooltipTimeout);
7662        this.#altTextTooltipTimeout = null;
7663        this.#altTextTooltip?.classList.remove("show");
7664      });
7665    }
7666    button.classList.add("done");
7667    tooltip.innerText = this.#altTextDecorative ? await AnnotationEditor._l10nPromise.get("editor_alt_text_decorative_tooltip") : this.#altText;
7668    if (!tooltip.parentNode) {
7669      button.append(tooltip);
7670    }
7671  }
7672  getClientDimensions() {
7673    return this.div.getBoundingClientRect();
7674  }
7675  get altTextData() {
7676    return {
7677      altText: this.#altText,
7678      decorative: this.#altTextDecorative
7679    };
7680  }
7681  set altTextData(_ref2) {
7682    let {
7683      altText,
7684      decorative
7685    } = _ref2;
7686    if (this.#altText === altText && this.#altTextDecorative === decorative) {
7687      return;
7688    }
7689    this.#altText = altText;
7690    this.#altTextDecorative = decorative;
7691    this.#setAltTextButtonState();
7692  }
7693  render() {
7694    this.div = document.createElement("div");
7695    this.div.setAttribute("data-editor-rotation", (360 - this.rotation) % 360);
7696    this.div.className = this.name;
7697    this.div.setAttribute("id", this.id);
7698    this.div.setAttribute("tabIndex", 0);
7699    this.setInForeground();
7700    this.div.addEventListener("focusin", this.#boundFocusin);
7701    this.div.addEventListener("focusout", this.#boundFocusout);
7702    const [parentWidth, parentHeight] = this.parentDimensions;
7703    if (this.parentRotation % 180 !== 0) {
7704      this.div.style.maxWidth = `${(100 * parentHeight / parentWidth).toFixed(2)}%`;
7705      this.div.style.maxHeight = `${(100 * parentWidth / parentHeight).toFixed(2)}%`;
7706    }
7707    const [tx, ty] = this.getInitialTranslation();
7708    this.translate(tx, ty);
7709    (0, _tools.bindEvents)(this, this.div, ["pointerdown"]);
7710    return this.div;
7711  }
7712  pointerdown(event) {
7713    const {
7714      isMac
7715    } = _util.FeatureTest.platform;
7716    if (event.button !== 0 || event.ctrlKey && isMac) {
7717      event.preventDefault();
7718      return;
7719    }
7720    this.#hasBeenClicked = true;
7721    this.#setUpDragSession(event);
7722  }
7723  #setUpDragSession(event) {
7724    if (!this._isDraggable) {
7725      return;
7726    }
7727    const isSelected = this._uiManager.isSelected(this);
7728    this._uiManager.setUpDragSession();
7729    let pointerMoveOptions, pointerMoveCallback;
7730    if (isSelected) {
7731      pointerMoveOptions = {
7732        passive: true,
7733        capture: true
7734      };
7735      pointerMoveCallback = e => {
7736        const [tx, ty] = this.screenToPageTranslation(e.movementX, e.movementY);
7737        this._uiManager.dragSelectedEditors(tx, ty);
7738      };
7739      window.addEventListener("pointermove", pointerMoveCallback, pointerMoveOptions);
7740    }
7741    const pointerUpCallback = () => {
7742      window.removeEventListener("pointerup", pointerUpCallback);
7743      window.removeEventListener("blur", pointerUpCallback);
7744      if (isSelected) {
7745        window.removeEventListener("pointermove", pointerMoveCallback, pointerMoveOptions);
7746      }
7747      this.#hasBeenClicked = false;
7748      if (!this._uiManager.endDragSession()) {
7749        const {
7750          isMac
7751        } = _util.FeatureTest.platform;
7752        if (event.ctrlKey && !isMac || event.shiftKey || event.metaKey && isMac) {
7753          this.parent.toggleSelected(this);
7754        } else {
7755          this.parent.setSelected(this);
7756        }
7757      }
7758    };
7759    window.addEventListener("pointerup", pointerUpCallback);
7760    window.addEventListener("blur", pointerUpCallback);
7761  }
7762  moveInDOM() {
7763    this.parent?.moveEditorInDOM(this);
7764  }
7765  _setParentAndPosition(parent, x, y) {
7766    parent.changeParent(this);
7767    this.x = x;
7768    this.y = y;
7769    this.fixAndSetPosition();
7770  }
7771  getRect(tx, ty) {
7772    const scale = this.parentScale;
7773    const [pageWidth, pageHeight] = this.pageDimensions;
7774    const [pageX, pageY] = this.pageTranslation;
7775    const shiftX = tx / scale;
7776    const shiftY = ty / scale;
7777    const x = this.x * pageWidth;
7778    const y = this.y * pageHeight;
7779    const width = this.width * pageWidth;
7780    const height = this.height * pageHeight;
7781    switch (this.rotation) {
7782      case 0:
7783        return [x + shiftX + pageX, pageHeight - y - shiftY - height + pageY, x + shiftX + width + pageX, pageHeight - y - shiftY + pageY];
7784      case 90:
7785        return [x + shiftY + pageX, pageHeight - y + shiftX + pageY, x + shiftY + height + pageX, pageHeight - y + shiftX + width + pageY];
7786      case 180:
7787        return [x - shiftX - width + pageX, pageHeight - y + shiftY + pageY, x - shiftX + pageX, pageHeight - y + shiftY + height + pageY];
7788      case 270:
7789        return [x - shiftY - height + pageX, pageHeight - y - shiftX - width + pageY, x - shiftY + pageX, pageHeight - y - shiftX + pageY];
7790      default:
7791        throw new Error("Invalid rotation");
7792    }
7793  }
7794  getRectInCurrentCoords(rect, pageHeight) {
7795    const [x1, y1, x2, y2] = rect;
7796    const width = x2 - x1;
7797    const height = y2 - y1;
7798    switch (this.rotation) {
7799      case 0:
7800        return [x1, pageHeight - y2, width, height];
7801      case 90:
7802        return [x1, pageHeight - y1, height, width];
7803      case 180:
7804        return [x2, pageHeight - y1, width, height];
7805      case 270:
7806        return [x2, pageHeight - y2, height, width];
7807      default:
7808        throw new Error("Invalid rotation");
7809    }
7810  }
7811  onceAdded() {}
7812  isEmpty() {
7813    return false;
7814  }
7815  enableEditMode() {
7816    this.#isInEditMode = true;
7817  }
7818  disableEditMode() {
7819    this.#isInEditMode = false;
7820  }
7821  isInEditMode() {
7822    return this.#isInEditMode;
7823  }
7824  shouldGetKeyboardEvents() {
7825    return false;
7826  }
7827  needsToBeRebuilt() {
7828    return this.div && !this.isAttachedToDOM;
7829  }
7830  rebuild() {
7831    this.div?.addEventListener("focusin", this.#boundFocusin);
7832    this.div?.addEventListener("focusout", this.#boundFocusout);
7833  }
7834  serialize() {
7835    let isForCopying = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
7836    let context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
7837    (0, _util.unreachable)("An editor must be serializable");
7838  }
7839  static deserialize(data, parent, uiManager) {
7840    const editor = new this.prototype.constructor({
7841      parent,
7842      id: parent.getNextId(),
7843      uiManager
7844    });
7845    editor.rotation = data.rotation;
7846    const [pageWidth, pageHeight] = editor.pageDimensions;
7847    const [x, y, width, height] = editor.getRectInCurrentCoords(data.rect, pageHeight);
7848    editor.x = x / pageWidth;
7849    editor.y = y / pageHeight;
7850    editor.width = width / pageWidth;
7851    editor.height = height / pageHeight;
7852    return editor;
7853  }
7854  remove() {
7855    this.div.removeEventListener("focusin", this.#boundFocusin);
7856    this.div.removeEventListener("focusout", this.#boundFocusout);
7857    if (!this.isEmpty()) {
7858      this.commit();
7859    }
7860    if (this.parent) {
7861      this.parent.remove(this);
7862    } else {
7863      this._uiManager.removeEditor(this);
7864    }
7865    this.#altTextButton?.remove();
7866    this.#altTextButton = null;
7867    this.#altTextTooltip = null;
7868  }
7869  get isResizable() {
7870    return false;
7871  }
7872  makeResizable() {
7873    if (this.isResizable) {
7874      this.#createResizers();
7875      this.#resizersDiv.classList.remove("hidden");
7876    }
7877  }
7878  select() {
7879    this.makeResizable();
7880    this.div?.classList.add("selectedEditor");
7881  }
7882  unselect() {
7883    this.#resizersDiv?.classList.add("hidden");
7884    this.div?.classList.remove("selectedEditor");
7885    if (this.div?.contains(document.activeElement)) {
7886      this._uiManager.currentLayer.div.focus();
7887    }
7888  }
7889  updateParams(type, value) {}
7890  disableEditing() {
7891    if (this.#altTextButton) {
7892      this.#altTextButton.hidden = true;
7893    }
7894  }
7895  enableEditing() {
7896    if (this.#altTextButton) {
7897      this.#altTextButton.hidden = false;
7898    }
7899  }
7900  enterInEditMode() {}
7901  get contentDiv() {
7902    return this.div;
7903  }
7904  get isEditing() {
7905    return this.#isEditing;
7906  }
7907  set isEditing(value) {
7908    this.#isEditing = value;
7909    if (!this.parent) {
7910      return;
7911    }
7912    if (value) {
7913      this.parent.setSelected(this);
7914      this.parent.setActiveEditor(this);
7915    } else {
7916      this.parent.setActiveEditor(null);
7917    }
7918  }
7919  setAspectRatio(width, height) {
7920    this.#keepAspectRatio = true;
7921    const aspectRatio = width / height;
7922    const {
7923      style
7924    } = this.div;
7925    style.aspectRatio = aspectRatio;
7926    style.height = "auto";
7927  }
7928  static get MIN_SIZE() {
7929    return 16;
7930  }
7931}
7932exports.AnnotationEditor = AnnotationEditor;
7933class FakeEditor extends AnnotationEditor {
7934  constructor(params) {
7935    super(params);
7936    this.annotationElementId = params.annotationElementId;
7937    this.deleted = true;
7938  }
7939  serialize() {
7940    return {
7941      id: this.annotationElementId,
7942      deleted: true,
7943      pageIndex: this.pageIndex
7944    };
7945  }
7946}
7947
7948/***/ }),
7949/* 165 */
7950/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
7951
7952
7953
7954Object.defineProperty(exports, "__esModule", ({
7955  value: true
7956}));
7957exports.KeyboardManager = exports.CommandManager = exports.ColorManager = exports.AnnotationEditorUIManager = void 0;
7958exports.bindEvents = bindEvents;
7959exports.opacityToHex = opacityToHex;
7960__w_pdfjs_require__(93);
7961__w_pdfjs_require__(101);
7962__w_pdfjs_require__(102);
7963__w_pdfjs_require__(105);
7964__w_pdfjs_require__(107);
7965__w_pdfjs_require__(109);
7966__w_pdfjs_require__(113);
7967__w_pdfjs_require__(116);
7968__w_pdfjs_require__(123);
7969__w_pdfjs_require__(2);
7970__w_pdfjs_require__(89);
7971__w_pdfjs_require__(125);
7972__w_pdfjs_require__(136);
7973__w_pdfjs_require__(138);
7974__w_pdfjs_require__(141);
7975__w_pdfjs_require__(143);
7976__w_pdfjs_require__(145);
7977__w_pdfjs_require__(147);
7978__w_pdfjs_require__(166);
7979var _util = __w_pdfjs_require__(1);
7980var _display_utils = __w_pdfjs_require__(168);
7981function bindEvents(obj, element, names) {
7982  for (const name of names) {
7983    element.addEventListener(name, obj[name].bind(obj));
7984  }
7985}
7986function opacityToHex(opacity) {
7987  return Math.round(Math.min(255, Math.max(1, 255 * opacity))).toString(16).padStart(2, "0");
7988}
7989class IdManager {
7990  #id = 0;
7991  getId() {
7992    return `${_util.AnnotationEditorPrefix}${this.#id++}`;
7993  }
7994}
7995class ImageManager {
7996  #baseId = (0, _util.getUuid)();
7997  #id = 0;
7998  #cache = null;
7999  static get _isSVGFittingCanvas() {
8000    const svg = `data:image/svg+xml;charset=UTF-8,<svg viewBox="0 0 1 1" width="1" height="1" xmlns="http://www.w3.org/2000/svg"><rect width="1" height="1" style="fill:red;"/></svg>`;
8001    const canvas = new OffscreenCanvas(1, 3);
8002    const ctx = canvas.getContext("2d");
8003    const image = new Image();
8004    image.src = svg;
8005    const promise = image.decode().then(() => {
8006      ctx.drawImage(image, 0, 0, 1, 1, 0, 0, 1, 3);
8007      return new Uint32Array(ctx.getImageData(0, 0, 1, 1).data.buffer)[0] === 0;
8008    });
8009    return (0, _util.shadow)(this, "_isSVGFittingCanvas", promise);
8010  }
8011  async #get(key, rawData) {
8012    this.#cache ||= new Map();
8013    let data = this.#cache.get(key);
8014    if (data === null) {
8015      return null;
8016    }
8017    if (data?.bitmap) {
8018      data.refCounter += 1;
8019      return data;
8020    }
8021    try {
8022      data ||= {
8023        bitmap: null,
8024        id: `image_${this.#baseId}_${this.#id++}`,
8025        refCounter: 0,
8026        isSvg: false
8027      };
8028      let image;
8029      if (typeof rawData === "string") {
8030        data.url = rawData;
8031        const response = await fetch(rawData);
8032        if (!response.ok) {
8033          throw new Error(response.statusText);
8034        }
8035        image = await response.blob();
8036      } else {
8037        image = data.file = rawData;
8038      }
8039      if (image.type === "image/svg+xml") {
8040        const mustRemoveAspectRatioPromise = ImageManager._isSVGFittingCanvas;
8041        const fileReader = new FileReader();
8042        const imageElement = new Image();
8043        const imagePromise = new Promise((resolve, reject) => {
8044          imageElement.onload = () => {
8045            data.bitmap = imageElement;
8046            data.isSvg = true;
8047            resolve();
8048          };
8049          fileReader.onload = async () => {
8050            const url = data.svgUrl = fileReader.result;
8051            imageElement.src = (await mustRemoveAspectRatioPromise) ? `${url}#svgView(preserveAspectRatio(none))` : url;
8052          };
8053          imageElement.onerror = fileReader.onerror = reject;
8054        });
vendor: 6,170 bytes, lines 8055-8318
8055        fileReader.readAsDataURL(image);
8056        await imagePromise;
8057      } else {
8058        data.bitmap = await createImageBitmap(image);
8059      }
8060      data.refCounter = 1;
8061    } catch (e) {
8062      console.error(e);
8063      data = null;
8064    }
8065    this.#cache.set(key, data);
8066    if (data) {
8067      this.#cache.set(data.id, data);
8068    }
8069    return data;
8070  }
8071  async getFromFile(file) {
8072    const {
8073      lastModified,
8074      name,
8075      size,
8076      type
8077    } = file;
8078    return this.#get(`${lastModified}_${name}_${size}_${type}`, file);
8079  }
8080  async getFromUrl(url) {
8081    return this.#get(url, url);
8082  }
8083  async getFromId(id) {
8084    this.#cache ||= new Map();
8085    const data = this.#cache.get(id);
8086    if (!data) {
8087      return null;
8088    }
8089    if (data.bitmap) {
8090      data.refCounter += 1;
8091      return data;
8092    }
8093    if (data.file) {
8094      return this.getFromFile(data.file);
8095    }
8096    return this.getFromUrl(data.url);
8097  }
8098  getSvgUrl(id) {
8099    const data = this.#cache.get(id);
8100    if (!data?.isSvg) {
8101      return null;
8102    }
8103    return data.svgUrl;
8104  }
8105  deleteId(id) {
8106    this.#cache ||= new Map();
8107    const data = this.#cache.get(id);
8108    if (!data) {
8109      return;
8110    }
8111    data.refCounter -= 1;
8112    if (data.refCounter !== 0) {
8113      return;
8114    }
8115    data.bitmap = null;
8116  }
8117  isValidId(id) {
8118    return id.startsWith(`image_${this.#baseId}_`);
8119  }
8120}
8121class CommandManager {
8122  #commands = [];
8123  #locked = false;
8124  #maxSize;
8125  #position = -1;
8126  constructor() {
8127    let maxSize = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 128;
8128    this.#maxSize = maxSize;
8129  }
8130  add(_ref) {
8131    let {
8132      cmd,
8133      undo,
8134      mustExec,
8135      type = NaN,
8136      overwriteIfSameType = false,
8137      keepUndo = false
8138    } = _ref;
8139    if (mustExec) {
8140      cmd();
8141    }
8142    if (this.#locked) {
8143      return;
8144    }
8145    const save = {
8146      cmd,
8147      undo,
8148      type
8149    };
8150    if (this.#position === -1) {
8151      if (this.#commands.length > 0) {
8152        this.#commands.length = 0;
8153      }
8154      this.#position = 0;
8155      this.#commands.push(save);
8156      return;
8157    }
8158    if (overwriteIfSameType && this.#commands[this.#position].type === type) {
8159      if (keepUndo) {
8160        save.undo = this.#commands[this.#position].undo;
8161      }
8162      this.#commands[this.#position] = save;
8163      return;
8164    }
8165    const next = this.#position + 1;
8166    if (next === this.#maxSize) {
8167      this.#commands.splice(0, 1);
8168    } else {
8169      this.#position = next;
8170      if (next < this.#commands.length) {
8171        this.#commands.splice(next);
8172      }
8173    }
8174    this.#commands.push(save);
8175  }
8176  undo() {
8177    if (this.#position === -1) {
8178      return;
8179    }
8180    this.#locked = true;
8181    this.#commands[this.#position].undo();
8182    this.#locked = false;
8183    this.#position -= 1;
8184  }
8185  redo() {
8186    if (this.#position < this.#commands.length - 1) {
8187      this.#position += 1;
8188      this.#locked = true;
8189      this.#commands[this.#position].cmd();
8190      this.#locked = false;
8191    }
8192  }
8193  hasSomethingToUndo() {
8194    return this.#position !== -1;
8195  }
8196  hasSomethingToRedo() {
8197    return this.#position < this.#commands.length - 1;
8198  }
8199  destroy() {
8200    this.#commands = null;
8201  }
8202}
8203exports.CommandManager = CommandManager;
8204class KeyboardManager {
8205  constructor(callbacks) {
8206    this.buffer = [];
8207    this.callbacks = new Map();
8208    this.allKeys = new Set();
8209    const {
8210      isMac
8211    } = _util.FeatureTest.platform;
8212    for (const [keys, callback, options = {}] of callbacks) {
8213      for (const key of keys) {
8214        const isMacKey = key.startsWith("mac+");
8215        if (isMac && isMacKey) {
8216          this.callbacks.set(key.slice(4), {
8217            callback,
8218            options
8219          });
8220          this.allKeys.add(key.split("+").at(-1));
8221        } else if (!isMac && !isMacKey) {
8222          this.callbacks.set(key, {
8223            callback,
8224            options
8225          });
8226          this.allKeys.add(key.split("+").at(-1));
8227        }
8228      }
8229    }
8230  }
8231  #serialize(event) {
8232    if (event.altKey) {
8233      this.buffer.push("alt");
8234    }
8235    if (event.ctrlKey) {
8236      this.buffer.push("ctrl");
8237    }
8238    if (event.metaKey) {
8239      this.buffer.push("meta");
8240    }
8241    if (event.shiftKey) {
8242      this.buffer.push("shift");
8243    }
8244    this.buffer.push(event.key);
8245    const str = this.buffer.join("+");
8246    this.buffer.length = 0;
8247    return str;
8248  }
8249  exec(self, event) {
8250    if (!this.allKeys.has(event.key)) {
8251      return;
8252    }
8253    const info = this.callbacks.get(this.#serialize(event));
8254    if (!info) {
8255      return;
8256    }
8257    const {
8258      callback,
8259      options: {
8260        bubbles = false,
8261        args = [],
8262        checker = null
8263      }
8264    } = info;
8265    if (checker && !checker(self, event)) {
8266      return;
8267    }
8268    callback.bind(self, ...args)();
8269    if (!bubbles) {
8270      event.stopPropagation();
8271      event.preventDefault();
8272    }
8273  }
8274}
8275exports.KeyboardManager = KeyboardManager;
8276class ColorManager {
8277  static _colorsMapping = new Map([["CanvasText", [0, 0, 0]], ["Canvas", [255, 255, 255]]]);
8278  get _colors() {
8279    const colors = new Map([["CanvasText", null], ["Canvas", null]]);
8280    (0, _display_utils.getColorValues)(colors);
8281    return (0, _util.shadow)(this, "_colors", colors);
8282  }
8283  convert(color) {
8284    const rgb = (0, _display_utils.getRGB)(color);
8285    if (!window.matchMedia("(forced-colors: active)").matches) {
8286      return rgb;
8287    }
8288    for (const [name, RGB] of this._colors) {
8289      if (RGB.every((x, i) => x === rgb[i])) {
8290        return ColorManager._colorsMapping.get(name);
8291      }
8292    }
8293    return rgb;
8294  }
8295  getHexCode(name) {
8296    const rgb = this._colors.get(name);
8297    if (!rgb) {
8298      return name;
8299    }
8300    return _util.Util.makeHexColor(...rgb);
8301  }
8302}
8303exports.ColorManager = ColorManager;
8304class AnnotationEditorUIManager {
8305  #activeEditor = null;
8306  #allEditors = new Map();
8307  #allLayers = new Map();
8308  #altTextManager = null;
8309  #annotationStorage = null;
8310  #commandManager = new CommandManager();
8311  #currentPageIndex = 0;
8312  #deletedAnnotationsElementIds = new Set();
8313  #draggingEditors = null;
8314  #editorTypes = null;
8315  #editorsToRescale = new Set();
8316  #filterFactory = null;
8317  #idManager = new IdManager();
8318  #isEnabled = false;
8319  #isWaiting = false;
8320  #lastActiveElement = null;
8321  #mode = _util.AnnotationEditorType.NONE;
8322  #selectedEditors = new Set();
8323  #pageColors = null;
8324  #boundBlur = this.blur.bind(this);
8325  #boundFocus = this.focus.bind(this);
8326  #boundCopy = this.copy.bind(this);
8327  #boundCut = this.cut.bind(this);
8328  #boundPaste = this.paste.bind(this);
8329  #boundKeydown = this.keydown.bind(this);
8330  #boundOnEditingAction = this.onEditingAction.bind(this);
8331  #boundOnPageChanging = this.onPageChanging.bind(this);
8332  #boundOnScaleChanging = this.onScaleChanging.bind(this);
8333  #boundOnRotationChanging = this.onRotationChanging.bind(this);
8334  #previousStates = {
8335    isEditing: false,
8336    isEmpty: true,
8337    hasSomethingToUndo: false,
8338    hasSomethingToRedo: false,
8339    hasSelectedEditor: false
8340  };
8341  #translation = [0, 0];
8342  #translationTimeoutId = null;
8343  #container = null;
8344  #viewer = null;
8345  static TRANSLATE_SMALL = 1;
8346  static TRANSLATE_BIG = 10;
8347  static get _keyboardManager() {
8348    const proto = AnnotationEditorUIManager.prototype;
8349    const arrowChecker = self => {
8350      const {
8351        activeElement
8352      } = document;
8353      return activeElement && self.#container.contains(activeElement) && self.hasSomethingToControl();
8354    };
8355    const small = this.TRANSLATE_SMALL;
8356    const big = this.TRANSLATE_BIG;
8357    return (0, _util.shadow)(this, "_keyboardManager", new KeyboardManager([[["ctrl+a", "mac+meta+a"], proto.selectAll], [["ctrl+z", "mac+meta+z"], proto.undo], [["ctrl+y", "ctrl+shift+z", "mac+meta+shift+z", "ctrl+shift+Z", "mac+meta+shift+Z"], proto.redo], [["Backspace", "alt+Backspace", "ctrl+Backspace", "shift+Backspace", "mac+Backspace", "mac+alt+Backspace", "mac+ctrl+Backspace", "Delete", "ctrl+Delete", "shift+Delete", "mac+Delete"], proto.delete], [["Escape", "mac+Escape"], proto.unselectAll], [["ArrowLeft", "mac+ArrowLeft"], proto.translateSelectedEditors, {
8358      args: [-small, 0],
8359      checker: arrowChecker
8360    }], [["ctrl+ArrowLeft", "mac+shift+ArrowLeft"], proto.translateSelectedEditors, {
8361      args: [-big, 0],
8362      checker: arrowChecker
8363    }], [["ArrowRight", "mac+ArrowRight"], proto.translateSelectedEditors, {
8364      args: [small, 0],
8365      checker: arrowChecker
8366    }], [["ctrl+ArrowRight", "mac+shift+ArrowRight"], proto.translateSelectedEditors, {
8367      args: [big, 0],
8368      checker: arrowChecker
8369    }], [["ArrowUp", "mac+ArrowUp"], proto.translateSelectedEditors, {
8370      args: [0, -small],
8371      checker: arrowChecker
8372    }], [["ctrl+ArrowUp", "mac+shift+ArrowUp"], proto.translateSelectedEditors, {
8373      args: [0, -big],
8374      checker: arrowChecker
8375    }], [["ArrowDown", "mac+ArrowDown"], proto.translateSelectedEditors, {
8376      args: [0, small],
8377      checker: arrowChecker
8378    }], [["ctrl+ArrowDown", "mac+shift+ArrowDown"], proto.translateSelectedEditors, {
8379      args: [0, big],
8380      checker: arrowChecker
8381    }]]));
8382  }
8383  constructor(container, viewer, altTextManager, eventBus, pdfDocument, pageColors) {
8384    this.#container = container;
8385    this.#viewer = viewer;
8386    this.#altTextManager = altTextManager;
8387    this._eventBus = eventBus;
8388    this._eventBus._on("editingaction", this.#boundOnEditingAction);
8389    this._eventBus._on("pagechanging", this.#boundOnPageChanging);
8390    this._eventBus._on("scalechanging", this.#boundOnScaleChanging);
8391    this._eventBus._on("rotationchanging", this.#boundOnRotationChanging);
8392    this.#annotationStorage = pdfDocument.annotationStorage;
8393    this.#filterFactory = pdfDocument.filterFactory;
8394    this.#pageColors = pageColors;
8395    this.viewParameters = {
8396      realScale: _display_utils.PixelsPerInch.PDF_TO_CSS_UNITS,
8397      rotation: 0
8398    };
8399  }
8400  destroy() {
8401    this.#removeKeyboardManager();
8402    this.#removeFocusManager();
8403    this._eventBus._off("editingaction", this.#boundOnEditingAction);
8404    this._eventBus._off("pagechanging", this.#boundOnPageChanging);
8405    this._eventBus._off("scalechanging", this.#boundOnScaleChanging);
8406    this._eventBus._off("rotationchanging", this.#boundOnRotationChanging);
8407    for (const layer of this.#allLayers.values()) {
8408      layer.destroy();
8409    }
8410    this.#allLayers.clear();
8411    this.#allEditors.clear();
8412    this.#editorsToRescale.clear();
8413    this.#activeEditor = null;
8414    this.#selectedEditors.clear();
8415    this.#commandManager.destroy();
8416    this.#altTextManager.destroy();
8417  }
8418  get hcmFilter() {
8419    return (0, _util.shadow)(this, "hcmFilter", this.#pageColors ? this.#filterFactory.addHCMFilter(this.#pageColors.foreground, this.#pageColors.background) : "none");
8420  }
8421  get direction() {
8422    return (0, _util.shadow)(this, "direction", getComputedStyle(this.#container).direction);
8423  }
8424  editAltText(editor) {
8425    this.#altTextManager?.editAltText(this, editor);
8426  }
8427  onPageChanging(_ref2) {
8428    let {
8429      pageNumber
8430    } = _ref2;
8431    this.#currentPageIndex = pageNumber - 1;
8432  }
8433  focusMainContainer() {
8434    this.#container.focus();
8435  }
8436  findParent(x, y) {
8437    for (const layer of this.#allLayers.values()) {
8438      const {
8439        x: layerX,
8440        y: layerY,
8441        width,
8442        height
8443      } = layer.div.getBoundingClientRect();
8444      if (x >= layerX && x <= layerX + width && y >
8444= layerY && y <= layerY + height) {
8445        return layer;
8446      }
8447    }
8448    return null;
8449  }
8450  disableUserSelect() {
8451    let value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
8452    this.#viewer.classList.toggle("noUserSelect", value);
8453  }
8454  addShouldRescale(editor) {
8455    this.#editorsToRescale.add(editor);
8456  }
8457  removeShouldRescale(editor) {
8458    this.#editorsToRescale.delete(editor);
8459  }
8460  onScaleChanging(_ref3) {
8461    let {
8462      scale
8463    } = _ref3;
8464    this.commitOrRemove();
8465    this.viewParameters.realScale = scale * _display_utils.PixelsPerInch.PDF_TO_CSS_UNITS;
8466    for (const editor of this.#editorsToRescale) {
8467      editor.onScaleChanging();
8468    }
8469  }
8470  onRotationChanging(_ref4) {
8471    let {
8472      pagesRotation
8473    } = _ref4;
8474    this.commitOrRemove();
8475    this.viewParameters.rotation = pagesRotation;
8476  }
8477  addToAnnotationStorage(editor) {
8478    if (!editor.isEmpty() && this.#annotationStorage && !this.#annotationStorage.has(editor.id)) {
8479      this.#annotationStorage.setValue(editor.id, editor);
8480    }
8481  }
8482  #addFocusManager() {
8483    window.addEventListener("focus", this.#boundFocus);
8484    window.addEventListener("blur", this.#boundBlur);
8485  }
8486  #removeFocusManager() {
8487    window.removeEventListener("focus", this.#boundFocus);
8488    window.removeEventListener("blur", this.#boundBlur);
8489  }
8490  blur() {
8491    if (!this.hasSelection) {
8492      return;
8493    }
8494    const {
8495      activeElement
8496    } = document;
8497    for (const editor of this.#selectedEditors) {
8498      if (editor.div.contains(activeElement)) {
8499        this.#lastActiveElement = [editor, activeElement];
8500        editor._focusEventsAllowed = false;
8501        break;
8502      }
8503    }
8504  }
8505  focus() {
8506    if (!this.#lastActiveElement) {
8507      return;
8508    }
8509    const [lastEditor, lastActiveElement] = this.#lastActiveElement;
8510    this.#lastActiveElement = null;
8511    lastActiveElement.addEventListener("focusin", () => {
8512      lastEditor._focusEventsAllowed = true;
8513    }, {
8514      once: true
8515    });
8516    lastActiveElement.focus();
8517  }
8518  #addKeyboardManager() {
8519    window.addEventListener("keydown", this.#boundKeydown, {
8520      capture: true
8521    });
8522  }
8523  #removeKeyboardManager() {
8524    window.removeEventListener("keydown", this.#boundKeydown, {
8525      capture: true
8526    });
8527  }
8528  #addCopyPasteListeners() {
8529    document.addEventListener("copy", this.#boundCopy);
8530    document.addEventListener("cut", this.#boundCut);
8531    document.addEventListener("paste", this.#boundPaste);
8532  }
8533  #removeCopyPasteListeners() {
8534    document.removeEventListener("copy", this.#boundCopy);
8535    document.removeEventListener("cut", this.#boundCut);
8536    document.removeEventListener("paste", this.#boundPaste);
8537  }
8538  addEditListeners() {
8539    this.#addKeyboardManager();
8540    this.#addCopyPasteListeners();
8541  }
8542  removeEditListeners() {
8543    this.#removeKeyboardManager();
8544    this.#removeCopyPasteListeners();
8545  }
8546  copy(event) {
8547    event.preventDefault();
8548    this.#activeEditor?.commitOrRemove();
8549    if (!this.hasSelection) {
8550      return;
8551    }
8552    const editors = [];
8553    for (const editor of this.#selectedEditors) {
8554      const serialized = editor.serialize(true);
8555      if (serialized) {
8556        editors.push(serialized);
8557      }
8558    }
8559    if (editors.length === 0) {
8560      return;
8561    }
8562    event.clipboardData.setData("application/pdfjs", JSON.stringify(editors));
8563  }
8564  cut(event) {
8565    this.copy(event);
8566    this.delete();
8567  }
8568  paste(event) {
8569    event.preventDefault();
8570    const {
8571      clipboardData
8572    } = event;
8573    for (const item of clipboardData.items) {
8574      for (const editorType of this.#editorTypes) {
8575        if (editorType.isHandlingMimeForPasting(item.type)) {
8576          editorType.paste(item, this.currentLayer);
8577          return;
8578        }
8579      }
8580    }
8581    let data = clipboardData.getData("application/pdfjs");
8582    if (!data) {
8583      return;
8584    }
8585    try {
8586      data = JSON.parse(data);
8587    } catch (ex) {
8588      (0, _util.warn)(`paste: "${ex.message}".`);
8589      return;
8590    }
8591    if (!Array.isArray(data)) {
8592      return;
8593    }
8594    this.unselectAll();
8595    const layer = this.currentLayer;
8596    try {
8597      const newEditors = [];
8598      for (const editor of data) {
8599        const deserializedEditor = layer.deserialize(editor);
8600        if (!deserializedEditor) {
8601          return;
8602        }
8603        newEditors.push(deserializedEditor);
8604      }
8605      const cmd = () => {
8606        for (const editor of newEditors) {
8607          this.#addEditorToLayer(editor);
8608        }
8609        this.#selectEditors(newEditors);
8610      };
8611      const undo = () => {
8612        for (const editor of newEditors) {
8613          editor.remove();
8614        }
8615      };
8616      this.addCommands({
8617        cmd,
8618        undo,
8619        mustExec: true
8620      });
8621    } catch (ex) {
8622      (0, _util.warn)(`paste: "${ex.message}".`);
8623    }
8624  }
8625  keydown(event) {
8626    if (!this.getActive()?.shouldGetKeyboardEvents()) {
8627      AnnotationEditorUIManager._keyboardManager.exec(this, event);
8628    }
8629  }
8630  onEditingAction(details) {
8631    if (["undo", "redo", "delete", "selectAll"].includes(details.name)) {
8632      this[details.name]();
8633    }
8634  }
8635  #dispatchUpdateStates(details) {
8636    const hasChanged = Object.entries(details).some(_ref5 => {
8637      let [key, value] = _ref5;
8638      return this.#previousStates[key] !== value;
8639    });
8640    if (hasChanged) {
8641      this._eventBus.dispatch("annotationeditorstateschanged", {
8642        source: this,
8643        details: Object.assign(this.#previousStates, details)
8644      });
8645    }
8646  }
8647  #dispatchUpdateUI(details) {
8648    this._eventBus.dispatch("annotationeditorparamschanged", {
8649      source: this,
8650      details
8651    });
8652  }
8653  setEditingState(isEditing) {
8654    if (isEditing) {
8655      this.#addFocusManager();
8656      this.#addKeyboardManager();
8657      this.#addCopyPasteListeners();
8658      this.#dispatchUpdateStates({
8659        isEditing: this.#mode !== _util.AnnotationEditorType.NONE,
8660        isEmpty: this.#isEmpty(),
8661        hasSomethingToUndo: this.#commandManager.hasSomethingToUndo(),
8662        hasSomethingToRedo: this.#commandManager.hasSomethingToRedo(),
8663        hasSelectedEditor: false
8664      });
8665    } else {
8666      this.#removeFocusManager();
8667      this.#removeKeyboardManager();
8668      this.#removeCopyPasteListeners();
8669      this.#dispatchUpdateStates({
8670        isEditing: false
8671      });
8672      this.disableUserSelect(false);
8673    }
8674  }
8675  registerEditorTypes(types) {
8676    if (this.#editorTypes) {
8677      return;
8678    }
8679    this.#editorTypes = types;
8680    for (const editorType of this.#editorTypes) {
8681      this.#dispatchUpdateUI(editorType.defaultPropertiesToUpdate);
8682    }
8683  }
8684  getId() {
8685    return this.#idManager.getId();
8686  }
8687  get currentLayer() {
8688    return this.#allLayers.get(this.#currentPageIndex);
8689  }
8690  getLayer(pageIndex) {
8691    return this.#allLayers.get(pageIndex);
8692  }
8693  get currentPageIndex() {
8694    return this.#currentPageIndex;
8695  }
8696  addLayer(layer) {
8697    this.#allLayers.set(layer.pageIndex, layer);
8698    if (this.#isEnabled) {
8699      layer.enable();
8700    } else {
8701      layer.disable();
8702    }
8703  }
8704  removeLayer(layer) {
8705    this.#allLayers.delete(layer.pageIndex);
8706  }
8707  updateMode(mode) {
8708    let editId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
8709    if (this.#mode === mode) {
8710      return;
8711    }
8712    this.#mode = mode;
8713    if (mode === _util.AnnotationEditorType.NONE) {
8714      this.setEditingState(false);
8715      this.#disableAll();
8716      return;
8717    }
8718    this.setEditingState(true);
8719    this.#enableAll();
8720    this.unselectAll();
8721    for (const layer of this.#allLayers.values()) {
8722      layer.updateMode(mode);
8723    }
8724    if (!editId) {
8725      return;
8726    }
8727    for (const editor of this.#allEditors.values()) {
8728      if (editor.annotationElementId === editId) {
8729        this.setSelected(editor);
8730        editor.enterInEditMode();
8731        break;
8732      }
8733    }
8734  }
8735  updateToolbar(mode) {
8736    if (mode === this.#mode) {
8737      return;
8738    }
8739    this._eventBus.dispatch("switchannotationeditormode", {
8740      source: this,
8741      mode
8742    });
8743  }
8744  updateParams(type, value) {
8745    if (!this.#editorTypes) {
8746      return;
8747    }
8748    if (type === _util.AnnotationEditorParamsType.CREATE) {
8749      this.currentLayer.addNewEditor(type);
8750      return;
8751    }
8752    for (const editor of this.#selectedEditors) {
8753      editor.updateParams(type, value);
8754    }
8755    for (const editorType of this.#editorTypes) {
8756      editorType.updateDefaultParams(type, value);
8757    }
8758  }
8759  enableWaiting() {
8760    let mustWait = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
8761    if (this.#isWaiting === mustWait) {
8762      return;
8763    }
8764    this.#isWaiting = mustWait;
8765    for (const layer of this.#allLayers.values()) {
8766      if (mustWait) {
8767        layer.disableClick();
8768      } else {
8769        layer.enableClick();
8770      }
8771      layer.div.classList.toggle("waiting", mustWait);
8772    }
8773  }
8774  #enableAll() {
8775    if (!this.#isEnabled) {
8776      this.#isEnabled = true;
8777      for (const layer of this.#allLayers.values()) {
8778        layer.enable();
8779      }
8780    }
8781  }
8782  #disableAll() {
8783    this.unselectAll();
8784    if (this.#isEnabled) {
8785      this.#isEnabled = false;
vendor: 10,346 bytes, lines 8786-9175
8786      for (const layer of this.#allLayers.values()) {
8787        layer.disable();
8788      }
8789    }
8790  }
8791  getEditors(pageIndex) {
8792    const editors = [];
8793    for (const editor of this.#allEditors.values()) {
8794      if (editor.pageIndex === pageIndex) {
8795        editors.push(editor);
8796      }
8797    }
8798    return editors;
8799  }
8800  getEditor(id) {
8801    return this.#allEditors.get(id);
8802  }
8803  addEditor(editor) {
8804    this.#allEditors.set(editor.id, editor);
8805  }
8806  removeEditor(editor) {
8807    this.#allEditors.delete(editor.id);
8808    this.unselect(editor);
8809    if (!editor.annotationElementId || !this.#deletedAnnotationsElementIds.has(editor.annotationElementId)) {
8810      this.#annotationStorage?.remove(editor.id);
8811    }
8812  }
8813  addDeletedAnnotationElement(editor) {
8814    this.#deletedAnnotationsElementIds.add(editor.annotationElementId);
8815    editor.deleted = true;
8816  }
8817  isDeletedAnnotationElement(annotationElementId) {
8818    return this.#deletedAnnotationsElementIds.has(annotationElementId);
8819  }
8820  removeDeletedAnnotationElement(editor) {
8821    this.#deletedAnnotationsElementIds.delete(editor.annotationElementId);
8822    editor.deleted = false;
8823  }
8824  #addEditorToLayer(editor) {
8825    const layer = this.#allLayers.get(editor.pageIndex);
8826    if (layer) {
8827      layer.addOrRebuild(editor);
8828    } else {
8829      this.addEditor(editor);
8830    }
8831  }
8832  setActiveEditor(editor) {
8833    if (this.#activeEditor === editor) {
8834      return;
8835    }
8836    this.#activeEditor = editor;
8837    if (editor) {
8838      this.#dispatchUpdateUI(editor.propertiesToUpdate);
8839    }
8840  }
8841  toggleSelected(editor) {
8842    if (this.#selectedEditors.has(editor)) {
8843      this.#selectedEditors.delete(editor);
8844      editor.unselect();
8845      this.#dispatchUpdateStates({
8846        hasSelectedEditor: this.hasSelection
8847      });
8848      return;
8849    }
8850    this.#selectedEditors.add(editor);
8851    editor.select();
8852    this.#dispatchUpdateUI(editor.propertiesToUpdate);
8853    this.#dispatchUpdateStates({
8854      hasSelectedEditor: true
8855    });
8856  }
8857  setSelected(editor) {
8858    for (const ed of this.#selectedEditors) {
8859      if (ed !== editor) {
8860        ed.unselect();
8861      }
8862    }
8863    this.#selectedEditors.clear();
8864    this.#selectedEditors.add(editor);
8865    editor.select();
8866    this.#dispatchUpdateUI(editor.propertiesToUpdate);
8867    this.#dispatchUpdateStates({
8868      hasSelectedEditor: true
8869    });
8870  }
8871  isSelected(editor) {
8872    return this.#selectedEditors.has(editor);
8873  }
8874  unselect(editor) {
8875    editor.unselect();
8876    this.#selectedEditors.delete(editor);
8877    this.#dispatchUpdateStates({
8878      hasSelectedEditor: this.hasSelection
8879    });
8880  }
8881  get hasSelection() {
8882    return this.#selectedEditors.size !== 0;
8883  }
8884  undo() {
8885    this.#commandManager.undo();
8886    this.#dispatchUpdateStates({
8887      hasSomethingToUndo: this.#commandManager.hasSomethingToUndo(),
8888      hasSomethingToRedo: true,
8889      isEmpty: this.#isEmpty()
8890    });
8891  }
8892  redo() {
8893    this.#commandManager.redo();
8894    this.#dispatchUpdateStates({
8895      hasSomethingToUndo: true,
8896      hasSomethingToRedo: this.#commandManager.hasSomethingToRedo(),
8897      isEmpty: this.#isEmpty()
8898    });
8899  }
8900  addCommands(params) {
8901    this.#commandManager.add(params);
8902    this.#dispatchUpdateStates({
8903      hasSomethingToUndo: true,
8904      hasSomethingToRedo: false,
8905      isEmpty: this.#isEmpty()
8906    });
8907  }
8908  #isEmpty() {
8909    if (this.#allEditors.size === 0) {
8910      return true;
8911    }
8912    if (this.#allEditors.size === 1) {
8913      for (const editor of this.#allEditors.values()) {
8914        return editor.isEmpty();
8915      }
8916    }
8917    return false;
8918  }
8919  delete() {
8920    this.commitOrRemove();
8921    if (!this.hasSelection) {
8922      return;
8923    }
8924    const editors = [...this.#selectedEditors];
8925    const cmd = () => {
8926      for (const editor of editors) {
8927        editor.remove();
8928      }
8929    };
8930    const undo = () => {
8931      for (const editor of editors) {
8932        this.#addEditorToLayer(editor);
8933      }
8934    };
8935    this.addCommands({
8936      cmd,
8937      undo,
8938      mustExec: true
8939    });
8940  }
8941  commitOrRemove() {
8942    this.#activeEditor?.commitOrRemove();
8943  }
8944  hasSomethingToControl() {
8945    return this.#activeEditor || this.hasSelection;
8946  }
8947  #selectEditors(editors) {
8948    this.#selectedEditors.clear();
8949    for (const editor of editors) {
8950      if (editor.isEmpty()) {
8951        continue;
8952      }
8953      this.#selectedEditors.add(editor);
8954      editor.select();
8955    }
8956    this.#dispatchUpdateStates({
8957      hasSelectedEditor: true
8958    });
8959  }
8960  selectAll() {
8961    for (const editor of this.#selectedEditors) {
8962      editor.commit();
8963    }
8964    this.#selectEditors(this.#allEditors.values());
8965  }
8966  unselectAll() {
8967    if (this.#activeEditor) {
8968      this.#activeEditor.commitOrRemove();
8969      return;
8970    }
8971    if (!this.hasSelection) {
8972      return;
8973    }
8974    for (const editor of this.#selectedEditors) {
8975      editor.unselect();
8976    }
8977    this.#selectedEditors.clear();
8978    this.#dispatchUpdateStates({
8979      hasSelectedEditor: false
8980    });
8981  }
8982  translateSelectedEditors(x, y) {
8983    let noCommit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
8984    if (!noCommit) {
8985      this.commitOrRemove();
8986    }
8987    if (!this.hasSelection) {
8988      return;
8989    }
8990    this.#translation[0] += x;
8991    this.#translation[1] += y;
8992    const [totalX, totalY] = this.#translation;
8993    const editors = [...this.#selectedEditors];
8994    const TIME_TO_WAIT = 1000;
8995    if (this.#translationTimeoutId) {
8996      clearTimeout(this.#translationTimeoutId);
8997    }
8998    this.#translationTimeoutId = setTimeout(() => {
8999      this.#translationTimeoutId = null;
9000      this.#translation[0] = this.#translation[1] = 0;
9001      this.addCommands({
9002        cmd: () => {
9003          for (const editor of editors) {
9004            if (this.#allEditors.has(editor.id)) {
9005              editor.translateInPage(totalX, totalY);
9006            }
9007          }
9008        },
9009        undo: () => {
9010          for (const editor of editors) {
9011            if (this.#allEditors.has(editor.id)) {
9012              editor.translateInPage(-totalX, -totalY);
9013            }
9014          }
9015        },
9016        mustExec: false
9017      });
9018    }, TIME_TO_WAIT);
9019    for (const editor of editors) {
9020      editor.translateInPage(x, y);
9021    }
9022  }
9023  setUpDragSession() {
9024    if (!this.hasSelection) {
9025      return;
9026    }
9027    this.disableUserSelect(true);
9028    this.#draggingEditors = new Map();
9029    for (const editor of this.#selectedEditors) {
9030      this.#draggingEditors.set(editor, {
9031        savedX: editor.x,
9032        savedY: editor.y,
9033        savedPageIndex: editor.pageIndex,
9034        newX: 0,
9035        newY: 0,
9036        newPageIndex: -1
9037      });
9038    }
9039  }
9040  endDragSession() {
9041    if (!this.#draggingEditors) {
9042      return false;
9043    }
9044    this.disableUserSelect(false);
9045    const map = this.#draggingEditors;
9046    this.#draggingEditors = null;
9047    let mustBeAddedInUndoStack = false;
9048    for (const [{
9049      x,
9050      y,
9051      pageIndex
9052    }, value] of map) {
9053      value.newX = x;
9054      value.newY = y;
9055      value.newPageIndex = pageIndex;
9056      mustBeAddedInUndoStack ||= x !== value.savedX || y !== value.savedY || pageIndex !== value.savedPageIndex;
9057    }
9058    if (!mustBeAddedInUndoStack) {
9059      return false;
9060    }
9061    const move = (editor, x, y, pageIndex) => {
9062      if (this.#allEditors.has(editor.id)) {
9063        const parent = this.#allLayers.get(pageIndex);
9064        if (parent) {
9065          editor._setParentAndPosition(parent, x, y);
9066        } else {
9067          editor.pageIndex = pageIndex;
9068          editor.x = x;
9069          editor.y = y;
9070        }
9071      }
9072    };
9073    this.addCommands({
9074      cmd: () => {
9075        for (const [editor, {
9076          newX,
9077          newY,
9078          newPageIndex
9079        }] of map) {
9080          move(editor, newX, newY, newPageIndex);
9081        }
9082      },
9083      undo: () => {
9084        for (const [editor, {
9085          savedX,
9086          savedY,
9087          savedPageIndex
9088        }] of map) {
9089          move(editor, savedX, savedY, savedPageIndex);
9090        }
9091      },
9092      mustExec: true
9093    });
9094    return true;
9095  }
9096  dragSelectedEditors(tx, ty) {
9097    if (!this.#draggingEditors) {
9098      return;
9099    }
9100    for (const editor of this.#draggingEditors.keys()) {
9101      editor.drag(tx, ty);
9102    }
9103  }
9104  rebuild(editor) {
9105    if (editor.parent === null) {
9106      const parent = this.getLayer(editor.pageIndex);
9107      if (parent) {
9108        parent.changeParent(editor);
9109        parent.addOrRebuild(editor);
9110      } else {
9111        this.addEditor(editor);
9112        this.addToAnnotationStorage(editor);
9113        editor.rebuild();
9114      }
9115    } else {
9116      editor.parent.addOrRebuild(editor);
9117    }
9118  }
9119  isActive(editor) {
9120    return this.#activeEditor === editor;
9121  }
9122  getActive() {
9123    return this.#activeEditor;
9124  }
9125  getMode() {
9126    return this.#mode;
9127  }
9128  get imageManager() {
9129    return (0, _util.shadow)(this, "imageManager", new ImageManager());
9130  }
9131}
9132exports.AnnotationEditorUIManager = AnnotationEditorUIManager;
9133
9134/***/ }),
9135/* 166 */
9136/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {
9137
9138
9139var $ = __w_pdfjs_require__(3);
9140var DESCRIPTORS = __w_pdfjs_require__(6);
9141var global = __w_pdfjs_require__(4);
9142var getBuiltIn = __w_pdfjs_require__(24);
9143var uncurryThis = __w_pdfjs_require__(14);
9144var call = __w_pdfjs_require__(8);
9145var isCallable = __w_pdfjs_require__(21);
9146var isObject = __w_pdfjs_require__(20);
9147var isArray = __w_pdfjs_require__(91);
9148var hasOwn = __w_pdfjs_require__(39);
9149var toString = __w_pdfjs_require__(77);
9150var lengthOfArrayLike = __w_pdfjs_require__(64);
9151var createProperty = __w_pdfjs_require__(159);
9152var fails = __w_pdfjs_require__(7);
9153var parseJSONString = __w_pdfjs_require__(167);
9154var NATIVE_SYMBOL = __w_pdfjs_require__(27);
9155var JSON = global.JSON;
9156var Number = global.Number;
9157var SyntaxError = global.SyntaxError;
9158var nativeParse = JSON && JSON.parse;
9159var enumerableOwnProperties = getBuiltIn('Object', 'keys');
9160var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
9161var at = uncurryThis(''.charAt);
9162var slice = uncurryThis(''.slice);
9163var exec = uncurryThis(/./.exec);
9164var push = uncurryThis([].push);
9165var IS_DIGIT = /^\d$/;
9166var IS_NON_ZERO_DIGIT = /^[1-9]$/;
9167var IS_NUMBER_START = /^(?:-|\d)$/;
9168var IS_WHITESPACE = /^[\t\n\r ]$/;
9169var PRIMITIVE = 0;
9170var OBJECT = 1;
9171var $parse = function (source, reviver) {
9172 source = toString(source);
9173 var context = new Context(source, 0, '');
9174 var root = context.parse();
9175 var value = root.value;
vendor: 4,608 bytes, lines 9176-9345
9176 var endIndex = context.skip(IS_WHITESPACE, root.end);
9177 if (endIndex < source.length) {
9178  throw SyntaxError('Unexpected extra character: "' + at(source, endIndex) + '" after the parsed data at: ' + endIndex);
9179 }
9180 return isCallable(reviver) ? internalize({ '': value }, '', reviver, root) : value;
9181};
9182var internalize = function (holder, name, reviver, node) {
9183 var val = holder[name];
9184 var unmodified = node && val === node.value;
9185 var context = unmodified && typeof node.source == 'string' ? { source: node.source } : {};
9186 var elementRecordsLen, keys, len, i, P;
9187 if (isObject(val)) {
9188  var nodeIsArray = isArray(val);
9189  var nodes = unmodified ? node.nodes : nodeIsArray ? [] : {};
9190  if (nodeIsArray) {
9191   elementRecordsLen = nodes.length;
9192   len = lengthOfArrayLike(val);
9193   for (i = 0; i < len; i++) {
9194    internalizeProperty(val, i, internalize(val, '' + i, reviver, i < elementRecordsLen ? nodes[i] : undefined));
9195   }
9196  } else {
9197   keys = enumerableOwnProperties(val);
9198   len = lengthOfArrayLike(keys);
9199   for (i = 0; i < len; i++) {
9200    P = keys[i];
9201    internalizeProperty(val, P, internalize(val, P, reviver, hasOwn(nodes, P) ? nodes[P] : undefined));
9202   }
9203  }
9204 }
9205 return call(reviver, holder, name, val, context);
9206};
9207var internalizeProperty = function (object, key, value) {
9208 if (DESCRIPTORS) {
9209  var descriptor = getOwnPropertyDescriptor(object, key);
9210  if (descriptor && !descriptor.configurable)
9211   return;
9212 }
9213 if (value === undefined)
9214  delete object[key];
9215 else
9216  createProperty(object, key, value);
9217};
9218var Node = function (value, end, source, nodes) {
9219 this.value = value;
9220 this.end = end;
9221 this.source = source;
9222 this.nodes = nodes;
9223};
9224var Context = function (source, index) {
9225 this.source = source;
9226 this.index = index;
9227};
9228Context.prototype = {
9229 fork: function (nextIndex) {
9230  return new Context(this.source, nextIndex);
9231 },
9232 parse: function () {
9233  var source = this.source;
9234  var i = this.skip(IS_WHITESPACE, this.index);
9235  var fork = this.fork(i);
9236  var chr = at(source, i);
9237  if (exec(IS_NUMBER_START, chr))
9238   return fork.number();
9239  switch (chr) {
9240  case '{':
9241   return fork.object();
9242  case '[':
9243   return fork.array();
9244  case '"':
9245   return fork.string();
9246  case 't':
9247   return fork.keyword(true);
9248  case 'f':
9249   return fork.keyword(false);
9250  case 'n':
9251   return fork.keyword(null);
9252  }
9253  throw SyntaxError('Unexpected character: "' + chr + '" at: ' + i);
9254 },
9255 node: function (type, value, start, end, nodes) {
9256  return new Node(value, end, type ? null : slice(this.source, start, end), nodes);
9257 },
9258 object: function () {
9259  var source = this.source;
9260  var i = this.index + 1;
9261  var expectKeypair = false;
9262  var object = {};
9263  var nodes = {};
9264  while (i < source.length) {
9265   i = this.until([
9266    '"',
9267    '}'
9268   ], i);
9269   if (at(source, i) === '}' && !expectKeypair) {
9270    i++;
9271    break;
9272   }
9273   var result = this.fork(i).string();
9274   var key = result.value;
9275   i = result.end;
9276   i = this.until([':'], i) + 1;
9277   i = this.skip(IS_WHITESPACE, i);
9278   result = this.fork(i).parse();
9279   createProperty(nodes, key, result);
9280   createProperty(object, key, result.value);
9281   i = this.until([
9282    ',',
9283    '}'
9284   ], result.end);
9285   var chr = at(source, i);
9286   if (chr === ',') {
9287    expectKeypair = true;
9288    i++;
9289   } else if (chr === '}') {
9290    i++;
9291    break;
9292   }
9293  }
9294  return this.node(OBJECT, object, this.index, i, nodes);
9295 },
9296 array: function () {
9297  var source = this.source;
9298  var i = this.index + 1;
9299  var expectElement = false;
9300  var array = [];
9301  var nodes = [];
9302  while (i < source.length) {
9303   i = this.skip(IS_WHITESPACE, i);
9304   if (at(source, i) === ']' && !expectElement) {
9305    i++;
9306    break;
9307   }
9308   var result = this.fork(i).parse();
9309   push(nodes, result);
9310   push(array, result.value);
9311   i = this.until([
9312    ',',
9313    ']'
9314   ], result.end);
9315   if (at(source, i) === ',') {
9316    expectElement = true;
9317    i++;
9318   } else if (at(source, i) === ']') {
9319    i++;
9320    break;
9321   }
9322  }
9323  return this.node(OBJECT, array, this.index, i, nodes);
9324 },
9325 string: function () {
9326  var index = this.index;
9327  var parsed = parseJSONString(this.source, this.index + 1);
9328  return this.node(PRIMITIVE, parsed.value, index, parsed.end);
9329 },
9330 number: function () {
9331  var source = this.source;
9332  var startIndex = this.index;
9333  var i = startIndex;
9334  if (at(source, i) === '-')
9335   i++;
9336  if (at(source, i) === '0')
9337   i++;
9338  else if (exec(IS_NON_ZERO_DIGIT, at(source, i)))
9339   i = this.skip(IS_DIGIT, ++i);
9340  else
9341   throw SyntaxError('Failed to parse number at: ' + i);
9342  if (at(source, i) === '.')
9343   i = this.skip(IS_DIGIT, ++i);
9344  if (at(source, i) === 'e' || at(source, i) === 'E') {
9345   i++;
9346   if (at(source, i) === '+' || at(source, i) === '-')
9347    i++;
9348   var exponentStartIndex = i;
9349   i = this.skip(IS_DIGIT, i);
9350   if (exponentStartIndex === i)
9351    throw SyntaxError("Failed to parse number's exponent value at: " + i);
9352  }
9353  return this.node(PRIMITIVE, Number(slice(source, startIndex, i)), startIndex, i);
9354 },
9355 keyword: function (value) {
9356  var keyword = '' + value;
9357  var index = this.index;
9358  var endIndex = index + keyword.length;
9359  if (slice(this.source, index, endIndex) !== keyword)
9360   throw SyntaxError('Failed to parse value at: ' + index);
9361  return this.node(PRIMITIVE, value, index, endIndex);
9362 },
9363 skip: function (regex, i) {
9364  var source = this.source;
9365  for (; i < source.length; i++)
9366   if (!exec(regex, at(source, i)))
9367    break;
9368  return i;
9369 },
9370 until: function (array, i) {
9371  i = this.skip(IS_WHITESPACE, i);
9372  var chr = at(this.source, i);
9373  for (var j = 0; j < array.length; j++)
9374   if (array[j] === chr)
9375    return i;
9376  throw SyntaxError('Unexpected character: "' + chr + '" at: ' + i);
9377 }
9378};
9379var NO_SOURCE_SUPPORT = fails(function () {
9380 var unsafeInt = '9007199254740993';
9381 var source;
9382 nativeParse(unsafeInt, function (key, value, context) {
9383  source = context.source;
9384 });
9385 return source !== unsafeInt;
9386});
9387var PROPER_BASE_PARSE = NATIVE_SYMBOL && !fails(function () {
9388 return 1 / nativeParse('-0 \t') !== -Infinity;
9389});
9390$({
9391 target: 'JSON',
9392 stat: true,
9393 forced: NO_SOURCE_SUPPORT
9394}, {
9395 parse: function parse(text, reviver) {
9396  return PROPER_BASE_PARSE && !isCallable(reviver) ? nativeParse(text) : $parse(text, reviver);
9397 }
9398});
9399
9400/***/ }),
9401/* 167 */
9402/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
9403
9404
9405var uncurryThis = __w_pdfjs_require__(14);
9406var hasOwn = __w_pdfjs_require__(39);
9407var $SyntaxError = SyntaxError;
9408var $parseInt = parseInt;
9409var fromCharCode = String.fromCharCode;
9410var at = uncurryThis(''.charAt);
9411var slice = uncurryThis(''.slice);
9412var exec = uncurryThis(/./.exec);
9413var codePoints = {
9414 '\\"': '"',
9415 '\\\\': '\\',
9416 '\\/': '/',
9417 '\\b': '\b',
9418 '\\f': '\f',
9419 '\\n': '\n',
9420 '\\r': '\r',
9421 '\\t': '\t'
9422};
9423var IS_4_HEX_DIGITS = /^[\da-f]{4}$/i;
9424var IS_C0_CONTROL_CODE = /^[\u0000-\u001F]$/;
9425module.exports = function (source, i) {
9426 var unterminated = true;
9427 var value = '';
9428 while (i < source.length) {
9429  var chr = at(source, i);
9430  if (chr === '\\') {
9431   var twoChars = slice(source, i, i + 2);
9432   if (hasOwn(codePoints, twoChars)) {
9433    value += codePoints[twoChars];
9434    i += 2;
9435   } else if (twoChars === '\\u') {
9436    i += 2;
9437    var fourHexDigits = slice(source, i, i + 4);
9438    if (!exec(IS_4_HEX_DIGITS, fourHexDigits))
9439     throw $SyntaxError('Bad Unicode escape at: ' + i);
9440    value += fromCharCode($parseInt(fourHexDigits, 16));
9441    i += 4;
9442   } else
9443    throw $SyntaxError('Unknown escape sequence: "' + twoChars + '"');
9444  } else if (chr === '"') {
9445   unterminated = false;
9446   i++;
9447   break;
9448  } else {
9449   if (exec(IS_C0_CONTROL_CODE, chr))
9450    throw $SyntaxError('Bad control character in string literal at: ' + i);
9451   value += chr;
9452   i++;
9453  }
9454 }
9455 if (unterminated)
9456  throw $SyntaxError('Unterminated string at: ' + i);
9457 return {
9458  value: value,
9459  end: i
9460 };
9461};
9462
9463/***/ }),
9464/* 168 */
9465/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
9466
9467
9468
9469Object.defineProperty(exports, "__esModule", ({
9470  value: true
9471}));
9472exports.StatTimer = exports.RenderingCancelledException = exports.PixelsPerInch = exports.PageViewport = exports.PDFDateString = exports.DOMStandardFontDataFactory = exports.DOMSVGFactory = exports.DOMFilterFactory = exports.DOMCanvasFactory = exports.DOMCMapReaderFactory = void 0;
9473exports.deprecated = deprecated;
9474exports.getColorValues = getColorValues;
9475exports.getCurrentTransform = getCurrentTransform;
9476exports.getCurrentTransformInverse = getCurrentTransformInverse;
9477exports.getFilenameFromUrl = getFilenameFromUrl;
9478exports.getPdfFilenameFromUrl = getPdfFilenameFromUrl;
9479exports.getRGB = getRGB;
9480exports.getXfaPageViewport = getXfaPageViewport;
9481exports.isDataScheme = isDataScheme;
9482exports.isPdfFile = isPdfFile;
9483exports.isValidFetchUrl = isValidFetchUrl;
9484exports.loadScript = loadScript;
9485exports.noContextMenu = noContextMenu;
9486exports.setLayerDimensions = setLayerDimensions;
9487__w_pdfjs_require__(2);
9488__w_pdfjs_require__(93);
9489__w_pdfjs_require__(101);
9490__w_pdfjs_require__(102);
9491__w_pdfjs_require__(105);
9492__w_pdfjs_require__(107);
9493__w_pdfjs_require__(109);
9494__w_pdfjs_require__(113);
9495__w_pdfjs_require__(116);
9496__w_pdfjs_require__(123);
9497__w_pdfjs_require__(89);
9498__w_pdfjs_require__(84);
9499__w_pdfjs_require__(86);
9500__w_pdfjs_require__(87);
9501var _base_factory = __w_pdfjs_require__(169);
9502var _util = __w_pdfjs_require__(1);
9503const SVG_NS = "http://www.w3.org/2000/svg";
9504class PixelsPerInch {
9505  static CSS = 96.0;
9506  static PDF = 72.0;
9507  static PDF_TO_CSS_UNITS = this.CSS / this.PDF;
9508}
9509exports.PixelsPerInch = PixelsPerInch;
9510class DOMFilterFactory extends _base_factory.BaseFilterFactory {
9511  #_cache;
9512  #_defs;
9513  #docId;
9514  #document;
9515  #hcmFilter;
9516  #hcmKey;
9517  #hcmUrl;
9518  #hcmHighlightFilter;
9519  #hcmHighlightKey;
9520  #hcmHighlightUrl;
9521  #id = 0;
9522  constructor() {
9523    let {
9524      docId,
9525      ownerDocument = globalThis.document
9526    } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
9527    super();
9528    this.#docId = docId;
9529    this.#document = ownerDocument;
9530  }
9531  get #cache() {
9532    return this.#_cache ||= new Map();
9533  }
9534  get #defs() {
9535    if (!this.#_defs) {
9536      const div = this.#document.createElement("div");
9537      const {
9538        style
9539      } = div;
9540      style.visibility = "hidden";
9541      style.contain = "strict";
9542      style.width = style.height = 0;
9543      style.position = "absolute";
9544      style.top = style.left = 0;
9545      style.zIndex = -1;
9546      const svg = this.#document.createElementNS(SVG_NS, "svg");
9547      svg.setAttribute("width", 0);
9548      svg.setAttribute("height", 0);
9549      this.#_defs = this.#document.createElementNS(SVG_NS, "defs");
9550      div.append(svg);
9551      svg.append(this.#_defs);
9552      this.#document.body.append(div);
9553    }
9554    return this.#_defs;
9555  }
9556  addFilter(maps) {
9557    if (!maps) {
9558      return "none";
9559    }
9560    let value = this.#cache.get(maps);
9561    if (value) {
9562      return value;
9563    }
9564    let tableR, tableG, tableB, key;
9565    if (maps.length === 1) {
9566      const mapR = maps[0];
9567      const buffer = new Array(256);
9568      for (let i = 0; i < 256; i++) {
9569        buffer[i] = mapR[i] / 255;
9570      }
9571      key = tableR = tableG = tableB = buffer.join(",");
9572    } else {
9573      const [mapR, mapG, mapB] = maps;
9574      const bufferR = new Array(256);
9575      const bufferG = new Array(256);
9576      const bufferB = new Array(256);
9577      for (let i = 0; i < 256; i++) {
9578        bufferR[i] = mapR[i] / 255;
9579        bufferG[i] = mapG[i] / 255;
9580        bufferB[i] = mapB[i] / 255;
9581      }
9582      tableR = bufferR.join(",");
9583      tableG = bufferG.join(",");
9584      tableB = bufferB.join(",");
9585      key = `${tableR}${tableG}${tableB}`;
9586    }
9587    value = this.#cache.get(key);
9588    if (value) {
9589      this.#cache.set(maps, value);
9590      return value;
9591    }
9592    const id = `g_${this.#docId}_transfer_map_${this.#id++}`;
9593    const url = `url(#${id})`;
9594    this.#cache.set(maps, url);
9595    this.#cache.set(key, url);
9596    const filter = this.#createFilter(id);
9597    this.#addTransferMapConversion(tableR, tableG, tableB, filter);
9598    return url;
9599  }
9600  addHCMFilter(fgColor, bgColor) {
9601    const key = `${fgColor}-${bgColor}`;
9602    if (this.#hcmKey === key) {
9603      return this.#hcmUrl;
9604    }
9605    this.#hcmKey = key;
9606    this.#hcmUrl = "none";
9607    this.#hcmFilter?.remove();
9608    if (!fgColor || !bgColor) {
9609      return this.#hcmUrl;
9610    }
9611    const fgRGB = this.#getRGB(fgColor);
9612    fgColor = _util.Util.makeHexColor(...fgRGB);
9613    const bgRGB = this.#getRGB(bgColor);
9614    bgColor = _util.Util.makeHexColor(...bgRGB);
9615    this.#defs.style.color = "";
9616    if (fgColor === "#000000" && bgColor === "#ffffff" || fgColor === bgColor) {
9617      return this.#hcmUrl;
9618    }
9619    const map = new Array(256);
9620    for (let i = 0; i <= 255; i++) {
9621      const x = i / 255;
9622      map[i] = x <= 0.03928 ? x / 12.92 : ((x + 0.055) / 1.055) ** 2.4;
9623    }
9624    const table = map.join(",");
9625    const id = `g_${this.#docId}_hcm_filter`;
9626    const filter = this.#hcmHighlightFilter = this.#createFilter(id);
9627    this.#addTransferMapConversion(table, table, table, filter);
9628    this.#addGrayConversion(filter);
9629    const getSteps = (c, n) => {
9630      const start = fgRGB[c] / 255;
9631      const end = bgRGB[c] / 255;
9632      const arr = new Array(n + 1);
9633      for (let i = 0; i <= n; i++) {
9634        arr[i] = start + i / n * (end - start);
9635      }
9636      return arr.join(",");
9637    };
9638    this.#addTransferMapConversion(getSteps(0, 5), getSteps(1, 5), getSteps(2, 5), filter);
9639    this.#hcmUrl = `url(#${id})`;
9640    return this.#hcmUrl;
9641  }
9642  addHighlightHCMFilter(fgColor, bgColor, newFgColor, newBgColor) {
9643    const key = `${fgColor}-${bgColor}-${newFgColor}-${newBgColor}`;
9644    if (this.#hcmHighlightKey === key) {
9645      return this.#hcmHighlightUrl;
9646    }
9647    this.#hcmHighlightKey = key;
9648    this.#hcmHighlightUrl = "none";
9649    this.#hcmHighlightFilter?.remove();
9650    if (!fgColor || !bgColor) {
9651      return this.#hcmHighlightUrl;
9652    }
9653    const [fgRGB, bgRGB] = [fgColor, bgColor].map(this.#getRGB.bind(this));
9654    let fgGray = Math.round(0.2126 * fgRGB[0] + 0.7152 * fgRGB[1] + 0.0722 * fgRGB[2]);
9655    let bgGray = Math.round(0.2126 * bgRGB[0] + 0.7152 * bgRGB[1] + 0.0722 * bgRGB[2]);
9656    let [newFgRGB, newBgRGB] = [newFgColor, newBgColor].map(this.#getRGB.bind(this));
9657    if (bgGray < fgGray) {
9658      [fgGray, bgGray, newFgRGB, newBgRGB] = [bgGray, fgGray, newBgRGB, newFgRGB];
9659    }
9660    this.#defs.style.color = "";
9661    const getSteps = (fg, bg, n) => {
9662      const arr = new Array(256);
9663      const step = (bgGray - fgGray) / n;
9664      const newStart = fg / 255;
9665      const newStep = (bg - fg) / (255 * n);
9666      let prev = 0;
9667      for (let i = 0; i <= n; i++) {
9668        const k = Math.round(fgGray + i * step);
9669        const value = newStart + i * newStep;
9670        for (let j = prev; j <= k; j++) {
9671          arr[j] = value;
9672        }
9673        prev = k + 1;
9674      }
9675      for (let i = prev; i < 256; i++) {
9676        arr[i] = arr[prev - 1];
9677      }
9678      return arr.join(",");
9679    };
9680    const id = `g_${this.#docId}_hcm_highlight_filter`;
9681    const filter = this.#hcmHighlightFilter = this.#createFilter(id);
9682    this.#addGrayConversion(filter);
9683    this.#addTransferMapConversion(getSteps(newFgRGB[0], newBgRGB[0], 5), getSteps(newFgRGB[1], newBgRGB[1], 5), getSteps(newFgRGB[2], newBgRGB[2], 5), filter);
9684    this.#hcmHighlightUrl = `url(#${id})`;
9685    return this.#hcmHighlightUrl;
9686  }
9687  destroy() {
9688    let keepHCM = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
9689    if (keepHCM && (this.#hcmUrl || this.#hcmHighlightUrl)) {
9690      return;
9691    }
9692    if (this.#_defs) {
9693      this.#_defs.parentNode.parentNode.remove();
9694      this.#_defs = null;
9695    }
9696    if (this.#_cache) {
9697      this.#_cache.clear();
9698      this.#_cache = null;
9699    }
9700    this.#id = 0;
9701  }
9702  #addGrayConversion(filter) {
9703    const feColorMatrix = this.#document.createElementNS(SVG_NS, "feColorMatrix");
9704    feColorMatrix.setAttribute("type", "matrix");
9705    feColorMatrix.setAttribute("values", "0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0 0 0 1 0");
9706    filter.append(feColorMatrix);
9707  }
9708  #createFilter(id) {
9709    const filter = this.#document.createElementNS(SVG_NS, "filter");
9710    filter.setAttribute("color-interpolation-filters", "sRGB");
9711    filter.setAttribute("id", id);
9712    this.#defs.append(filter);
9713    return filter;
9714  }
9715  #appendFeFunc(feComponentTransfer, func, table) {
9716    const feFunc = this.#document.createElementNS(SVG_NS, func);
9717    feFunc.setAttribute("type", "discrete");
9718    feFunc.setAttribute("tableValues", table);
9719    feComponentTransfer.append(feFunc);
9720  }
9721  #addTransferMapConversion(rTable, gTable, bTable, filter) {
9722    const feComponentTransfer = this.#document.createElementNS(SVG_NS, "feComponentTransfer");
9723    filter.append(feComponentTransfer);
9724    this.#appendFeFunc(feComponentTransfer, "feFuncR", rTable);
9725    this.#appendFeFunc(feComponentTransfer, "feFuncG", gTable);
9726    this.#appendFeFunc(feComponentTransfer, "feFuncB", bTable);
9727  }
9728  #getRGB(color) {
9729    this.#defs.style.color = color;
9730    return getRGB(getComputedStyle(this.#defs).getPropertyValue("color"));
9731  }
9732}
9733exports.DOMFilterFactory = DOMFilterFactory;
9734class DOMCanvasFactory extends _base_factory.BaseCanvasFactory {
9735  constructor() {
9736    let {
9737      ownerDocument = globalThis.document
9738    } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
9739    super();
9740    this._document = ownerDocument;
9741  }
9742  _createCanvas(width, height) {
9743    const canvas = this._document.createElement("canvas");
9744    canvas.width = width;
9745    canvas.height = height;
9746    return canvas;
9747  }
9748}
9749exports.DOMCanvasFactory = DOMCanvasFactory;
9750async function fetchData(url) {
9751  let asTypedArray = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
9752  if (isValidFetchUrl(url, document.baseURI)) {
9753    const response = await fetch(url);
9754    if (!response.ok) {
9755      throw new Error(response.statusText);
9756    }
9757    return asTypedArray ? new Uint8Array(await response.arrayBuffer()) : (0, _util.stringToBytes)(await response.text());
9758  }
9759  return new Promise((resolve, reject) => {
9760    const request = new XMLHttpRequest();
9761    request.open("GET", url, true);
9762    if (asTypedArray) {
9763      request.responseType = "arraybuffer";
9764    }
9765    request.onreadystatechange = () => {
9766      if (request.readyState !== XMLHttpRequest.DONE) {
9767        return;
9768      }
9769      if (request.status === 200 || request.status === 0) {
9770        let data;
9771        if (asTypedArray && request.response) {
9772          data = new Uint8Array(request.response);
9773        } else if (!asTypedArray && request.responseText) {
9774          data = (0, _util.stringToBytes)(request.responseText);
9775        }
9776        if (data) {
9777          resolve(data);
9778          return;
9779        }
9780      }
9781      reject(new Error(request.statusText));
9782    };
9783    request.send(null);
9784  });
9785}
9786class DOMCMapReaderFactory extends _base_factory.BaseCMapReaderFactory {
9787  _fetchData(url, compressionType) {
9788    return fetchData(url, this.isCompressed).then(data => {
9789      return {
9790        cMapData: data,
9791        compressionType
9792      };
9793    });
9794  }
9795}
9796exports.DOMCMapReaderFactory = DOMCMapReaderFactory;
9797class DOMStandardFontDataFactory extends _base_factory.BaseStandardFontDataFactory {
9798  _fetchData(url) {
9799    return fetchData(url, true);
9800  }
9801}
9802exports.DOMStandardFontDataFactory = DOMStandardFontDataFactory;
9803class DOMSVGFactory extends _base_factory.BaseSVGFactory {
9804  _createSVG(type) {
9805    return document.createElementNS(SVG_NS, type);
9806  }
9807}
9808exports.DOMSVGFactory = DOMSVGFactory;
9809class PageViewport {
9810  constructor(_ref) {
9811    let {
9812      viewBox,
9813      scale,
9814      rotation,
9815      offsetX = 0,
9816      offsetY = 0,
9817      dontFlip = false
9818    } = _ref;
9819    this.viewBox = viewBox;
9820    this.scale = scale;
9821    this.rotation = rotation;
9822    this.offsetX = offsetX;
9823    this.offsetY = offsetY;
9824    const centerX = (viewBox[2] + viewBox[0]) / 2;
9825    const centerY = (viewBox[3] + viewBox[1]) / 2;
9826    let rotateA, rotateB, rotateC, rotateD;
9827    rotation %= 360;
9828    if (rotation < 0) {
9829      rotation += 360;
9830    }
9831    switch (rotation) {
9832      case 180:
9833        rotateA = -1;
9834        rotateB = 0;
9835        rotateC = 0;
9836        rotateD = 1;
9837        break;
9838      case 90:
9839        rotateA = 0;
9840        rotateB = 1;
9841        rotateC = 1;
9842        rotateD = 0;
9843        break;
9844      case 270:
9845        rotateA = 0;
9846        rotateB = -1;
9847        rotateC = -1;
9848        rotateD = 0;
9849        break;
9850      case 0:
9851        rotateA = 1;
9852        rotateB = 0;
9853        rotateC = 0;
9854        rotateD = -1;
9855        break;
9856      default:
9857        throw new Error("PageViewport: Invalid rotation, must be a multiple of 90 degrees.");
9858    }
9859    if (dontFlip) {
9860      rotateC = -rotateC;
9861      rotateD = -rotateD;
9862    }
9863    let offsetCanvasX, offsetCanvasY;
9864    let width, height;
9865    if (rotateA === 0) {
9866      offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX;
9867      offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY;
9868      width = (viewBox[3] - viewBox[1]) * scale;
9869      height = (viewBox[2] - viewBox[0]) * scale;
9870    } else {
9871      offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX;
9872      offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY;
9873      width = (viewBox[2] - viewBox[0]) * scale;
9874      height = (viewBox[3] - viewBox[1]) * scale;
9875    }
9876    this.transform = [rotateA * scale, rotateB * scale, rotateC * scale, rotateD * scale, offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY, offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY];
9877    this.width = width;
9878    this.height = height;
9879  }
9880  get rawDims() {
9881    const {
9882      viewBox
9883    } = this;
9884    return (0, _util.shadow)(this, "rawDims", {
9885      pageWidth: viewBox[2] - viewBox[0],
9886      pageHeight: viewBox[3] - viewBox[1],
9887      pageX: viewBox[0],
9888      pageY: viewBox[1]
9889    });
9890  }
9891  clone() {
9892    let {
9893      scale = this.scale,
9894      rotation = this.rotation,
9895      offsetX = this.offsetX,
9896      offsetY = this.offsetY,
9897      dontFlip = false
9898    } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
9899    return new PageViewport({
9900      viewBox: this.viewBox.slice(),
9901      scale,
9902      rotation,
9903      offsetX,
9904      offsetY,
9905      dontFlip
9906    });
9907  }
9908  convertToViewportPoint(x, y) {
9909    return _util.Util.applyTransform([x, y], this.transform);
9910  }
9911  convertToViewportRectangle(rect) {
9912    const topLeft = _util.Util.applyTransform([rect[0], rect[1]], this.transform);
9913    const bottomRight = _util.Util.applyTransform([rect[2], rect[3]], this.transform);
9914    return [topLeft[0], topLeft[1], bottomRight[0], bottomRight[1]];
9915  }
9916  convertToPdfPoint(x, y) {
9917    return _util.Util.applyInverseTransform([x, y], this.transform);
9918  }
9919}
9920exports.PageViewport = PageViewport;
9921class RenderingCancelledException extends _util.BaseException {
9922  constructor(msg) {
9923    let extraDelay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
9924    super(msg, "RenderingCancelledException");
9925    this.extraDelay = extraDelay;
9926  }
9927}
9928exports.RenderingCancelledException = RenderingCancelledException;
9929function isDataScheme(url) {
9930  const ii = url.length;
9931  let i = 0;
9932  while (i < ii && url[i].trim() === "") {
9933    i++;
9934  }
9935  return url.substring(i, i + 5).toLowerCase() === "data:";
9936}
9937function isPdfFile(filename) {
9938  return typeof filename === "string" && /\.pdf$/i.test(filename);
9939}
9940function getFilenameFromUrl(url) {
9941  let onlyStripPath = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
9942  if (!onlyStripPath) {
9943    [url] = url.split(/[#?]/, 1);
9944  }
9945  return url.substring(url.lastIndexOf("/") + 1);
9946}
9947function getPdfFilenameFromUrl(url) {
9948  let defaultFilename = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "document.pdf";
9949  if (typeof url !== "string") {
9950    return defaultFilename;
9951  }
9952  if (isDataScheme(url)) {
9953    (0, _util.warn)('getPdfFilenameFromUrl: ignore "data:"-URL for performance reasons.');
9954    return defaultFilename;
9955  }
9956  const reURI = /^(?:(?:[^:]+:)?\/\/[^/]+)?([^?#]*)(\?[^#]*)?(#.*)?$/;
9957  const reFilename = /[^/?#=]+\.pdf\b(?!.*\.pdf\b)/i;
9958  const splitURI = reURI.exec(url);
9959  let suggestedFilename = reFilename.exec(splitURI[1]) || reFilename.exec(splitURI[2]) || reFilename.exec(splitURI[3]);
9960  if (suggestedFilename) {
9961    suggestedFilename = suggestedFilename[0];
9962    if (suggestedFilename.includes("%")) {
9963      try {
9964        suggestedFilename = reFilename.exec(decodeURIComponent(suggestedFilename))[0];
9965      } catch {}
9966    }
9967  }
9968  return suggestedFilename || defaultFilename;
9969}
9970class StatTimer {
9971  started = Object.create(null);
9972  times = [];
9973  time(name) {
9974    if (name in this.started) {
9975      (0, _util.warn)(`Timer is already running for ${name}`);
9976    }
9977    this.started[name] = Date.now();
9978  }
9979  timeEnd(name) {
9980    if (!(name in this.started)) {
9981      (0, _util.warn)(`Timer has not been started for ${name}`);
9982    }
9983    this.times.push({
9984      name,
9985      start: this.started[name],
9986      end: Date.now()
9987    });
9988    delete this.started[name];
9989  }
9990  toString() {
9991    const outBuf = [];
9992    let longest = 0;
9993    for (const {
9994      name
9995    } of this.times) {
9996      longest = Math.max(name.length, longest);
9997    }
9998    for (const {
9999      name,
10000      start,
10001      end
10002    } of this.times) {
10003      outBuf.push(`${name.padEnd(longest)} ${end - start}ms\n`);
10004    }
10005    return outBuf.join("");
10006  }
10007}
10008exports.StatTimer = StatTimer;
10009function isValidFetchUrl(url, baseUrl) {
10010  try {
10011    const {
10012      protocol
10013    } = baseUrl ? new URL(url, baseUrl) : new URL(url);
10014    return protocol === "http:" || protocol === "https:";
10015  } catch {
10016    return false;
10017  }
10018}
10019function noContextMenu(e) {
10020  e.preventDefault();
10021}
10022function loadScript(src) {
10023  let removeScriptElement = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
10024  return new Promise((resolve, reject) => {
10025    const script = document.createElement("script");
10026    script.src = src;
10027    script.onload = function (evt) {
10028      if (removeScriptElement) {
10029        script.remove();
10030      }
10031      resolve(evt);
10032    };
10033    script.onerror = function () {
10034      reject(new Error(`Cannot load script at: ${script.src}`));
10035    };
10036    (document.head || document.documentElement).append(script);
10037  });
10038}
10039function deprecated(details) {
10040  console.log("Deprecated API usage: " + details);
10041}
10042let pdfDateStringRegex;
10043class PDFDateString {
10044  static toDateObject(input) {
10045    if (!input || typeof input !== "string") {
10046      return null;
10047    }
10048    pdfDateStringRegex ||= new RegExp("^D:" + "(\\d{4})" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "([Z|+|-])?" + "(\\d{2})?" + "'?" + "(\\d{2})?" + "'?");
10049    const matches = pdfDateStringRegex.exec(input);
10050    if (!matches) {
10051      return null;
10052    }
10053    const year = parseInt(matches[1], 10);
10054    let month = parseInt(matches[2], 10);
10055    month = month >= 1 && month <= 12 ? month - 1 : 0;
10056    let day = parseInt(matches[3], 10);
10057    day = day >= 1 && day <= 31 ? day : 1;
10058    let hour = parseInt(matches[4], 10);
10059    hour = hour >= 0 && hour <= 23 ? hour : 0;
10060    let minute = parseInt(matches[5], 10);
10061    minute = minute >= 0 && minute <= 59 ? minute : 0;
10062    let second = parseInt(matches[6], 10);
10063    second = second >= 0 && second <= 59 ? second : 0;
10064    const universalTimeRelation = matches[7] || "Z";
10065    let offsetHour = parseInt(matches[8], 10);
10066    offsetHour = offsetHour >= 0 && offsetHour <= 23 ? offsetHour : 0;
10067    let offsetMinute = parseInt(matches[9], 10) || 0;
10068    offsetMinute = offsetMinute >= 0 && offsetMinute <= 59 ? offsetMinute : 0;
10069    if (universalTimeRelation === "-") {
10070      hour += offsetHour;
10071      minute += offsetMinute;
10072    } else if (universalTimeRelation === "+") {
10073      hour -= offsetHour;
10074      minute -= offsetMinute;
10075    }
10076    return new Date(Date.UTC(year, month, day, hour, minute, second));
10077  }
10078}
10079exports.PDFDateString = PDFDateString;
10080function getXfaPageViewport(xfaPage, _ref2) {
10081  let {
10082    scale = 1,
10083    rotation = 0
10084  } = _ref2;
10085  const {
10086    width,
10087    height
10088  } = xfaPage.attributes.style;
10089  const viewBox = [0, 0, parseInt(width), parseInt(height)];
10090  return new PageViewport({
10091    viewBox,
10092    scale,
10093    rotation
10094  });
10095}
10096function getRGB(color) {
10097  if (color.startsWith("#")) {
10098    const colorRGB = parseInt(color.slice(1), 16);
10099    return [(colorRGB & 0xff0000) >> 16, (colorRGB & 0x00ff00) >> 8, colorRGB & 0x0000ff];
10100  }
10101  if (color.startsWith("rgb(")) {
10102    return color.slice(4, -1).split(",").map(x => parseInt(x));
10103  }
10104  if (color.startsWith("rgba(")) {
10105    return color.slice(5, -1).split(",").map(x => parseInt(x)).slice(0, 3);
10106  }
10107  (0, _util.warn)(`Not a valid color format: "${color}"`);
10108  return [0, 0, 0];
10109}
10110function getColorValues(colors) {
10111  const span = document.createElement("span");
10112  span.style.visibility = "hidden";
10113  document.body.append(span);
10114  for (const name of colors.keys()) {
10115    span.style.color = name;
10116    const computedColor = window.getComputedStyle(span).color;
10117    colors.set(name, getRGB(computedColor));
10118  }
10119  span.remove();
10120}
10121function getCurrentTransform(ctx) {
10122  const {
10123    a,
10124    b,
10125    c,
10126    d,
10127    e,
10128    f
10129  } = ctx.getTransform();
10130  return [a, b, c, d, e, f];
10131}
10132function getCurrentTransformInverse(ctx) {
10133  const {
10134    a,
10135    b,
10136    c,
10137    d,
10138    e,
10139    f
10140  } = ctx.getTransform().invertSelf();
10141  return [a, b, c, d, e, f];
10142}
10143function setLayerDimensions(div, viewport) {
10144  let mustFlip = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
10145  let mustRotate = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
10146  if (viewport instanceof PageViewport) {
10147    const {
10148      pageWidth,
10149      pageHeight
10150    } = viewport.rawDims;
10151    const {
10152      style
10153    } = div;
10154    const useRound = _util.FeatureTest.isCSSRoundSupported;
10155    const w = `var(--scale-factor) * ${pageWidth}px`,
10156      h = `var(--scale-factor) * ${pageHeight}px`;
10157    const widthStr = useRound ? `round(${w}, 1px)` : `calc(${w})`,
10158      heightStr = useRound ? `round(${h}, 1px)` : `calc(${h})`;
10159    if (!mustFlip || viewport.rotation % 180 === 0) {
10160      style.width = widthStr;
10161      style.height = heightStr;
10162    } else {
10163      style.width = heightStr;
10164      style.height = widthStr;
10165    }
10166  }
10167  if (mustRotate) {
10168    div.setAttribute("data-main-rotation", viewport.rotation);
10169  }
10170}
10171
10172/***/ }),
10173/* 169 */
10174/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
10175
10176
10177
10178Object.defineProperty(exports, "__esModule", ({
10179  value: true
10180}));
10181exports.BaseStandardFontDataFactory = exports.BaseSVGFactory = exports.BaseFilterFactory = exports.BaseCanvasFactory = exports.BaseCMapReaderFactory = void 0;
10182__w_pdfjs_require__(2);
10183var _util = __w_pdfjs_require__(1);
10184class BaseFilterFactory {
10185  constructor() {
10186    if (this.constructor === BaseFilterFactory) {
10187      (0, _util.unreachable)("Cannot initialize BaseFilterFactory.");
10188    }
10189  }
10190  addFilter(maps) {
10191    return "none";
10192  }
10193  addHCMFilter(fgColor, bgColor) {
10194    return "none";
10195  }
10196  addHighlightHCMFilter(fgColor, bgColor, newFgColor, newBgColor) {
10197    return "none";
10198  }
10199  destroy() {
10200    let keepHCM = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
10201  }
10202}
10203exports.BaseFilterFactory = BaseFilterFactory;
10204class BaseCanvasFactory {
10205  constructor() {
10206    if (this.constructor === BaseCanvasFactory) {
10207      (0, _util.unreachable)("Cannot initialize BaseCanvasFactory.");
10208    }
10209  }
10210  create(width, height) {
10211    if (width <= 0 || height <= 0) {
10212      throw new Error("Invalid canvas size");
10213    }
10214    const canvas = this._createCanvas(width, height);
10215    return {
10216      canvas,
10217      context: canvas.getContext("2d")
10218    };
10219  }
10220  reset(canvasAndContext, width, height) {
10221    if (!canvasAndContext.canvas) {
10222      throw new Error("Canvas is not specified");
10223    }
10224    if (width <= 0 || height <= 0) {
10225      throw new Error("Invalid canvas size");
10226    }
10227    canvasAndContext.canvas.width = width;
10228    canvasAndContext.canvas.height = height;
10229  }
10230  destroy(canvasAndContext) {
10231    if (!canvasAndContext.canvas) {
10232      throw new Error("Canvas is not specified");
10233    }
10234    canvasAndContext.canvas.width = 0;
10235    canvasAndContext.canvas.height = 0;
10236    canvasAndContext.canvas = null;
10237    canvasAndContext.context = null;
10238  }
10239  _createCanvas(width, height) {
10240    (0, _util.unreachable)("Abstract method `_createCanvas` called.");
10241  }
10242}
10243exports.BaseCanvasFactory = BaseCanvasFactory;
10244class BaseCMapReaderFactory {
10245  constructor(_ref) {
10246    let {
10247      baseUrl = null,
10248      isCompressed = true
10249    } = _ref;
10250    if (this.constructor === BaseCMapReaderFactory) {
10251      (0, _util.unreachable)("Cannot initialize BaseCMapReaderFactory.");
10252    }
10253    this.baseUrl = baseUrl;
10254    this.isCompressed = isCompressed;
10255  }
10256  async fetch(_ref2) {
10257    let {
10258      name
10259    } = _ref2;
10260    if (!this.baseUrl) {
10261      throw new Error('The CMap "baseUrl" parameter must be specified, ensure that ' + 'the "cMapUrl" and "cMapPacked" API parameters are provided.');
10262    }
10263    if (!name) {
10264      throw new Error("CMap name must be specified.");
10265    }
10266    const url = this.baseUrl + name + (this.isCompressed ? ".bcmap" : "");
10267    const compressionType = this.isCompressed ? _util.CMapCompressionType.BINARY : _util.CMapCompressionType.NONE;
10268    return this._fetchData(url, compressionType).catch(reason => {
10269      throw new Error(`Unable to load ${this.isCompressed ? "binary " : ""}CMap at: ${url}`);
10270    });
10271  }
10272  _fetchData(url, compressionType) {
10273    (0, _util.unreachable)("Abstract method `_fetchData` called.");
10274  }
10275}
10276exports.BaseCMapReaderFactory = BaseCMapReaderFactory;
10277class BaseStandardFontDataFactory {
10278  constructor(_ref3) {
10279    let {
10280      baseUrl = null
10281    } = _ref3;
10282    if (this.constructor === BaseStandardFontDataFactory) {
10283      (0, _util.unreachable)("Cannot initialize BaseStandardFontDataFactory.");
10284    }
10285    this.baseUrl = baseUrl;
10286  }
10287  async fetch(_ref4) {
10288    let {
10289      filename
10290    } = _ref4;
10291    if (!this.baseUrl) {
10292      throw new Error('The standard font "baseUrl" parameter must be specified, ensure that ' + 'the "standardFontDataUrl" API parameter is provided.');
10293    }
10294    if (!filename) {
10295      throw new Error("Font filename must be specified.");
10296    }
10297    const url = `${this.baseUrl}${filename}`;
10298    return this._fetchData(url).catch(reason => {
10299      throw new Error(`Unable to load font data at: ${url}`);
10300    });
10301  }
10302  _fetchData(url) {
10303    (0, _util.unreachable)("Abstract method `_fetchData` called.");
10304  }
10305}
10306exports.BaseStandardFontDataFactory = BaseStandardFontDataFactory;
10307class BaseSVGFactory {
10308  constructor() {
10309    if (this.constructor === BaseSVGFactory) {
10310      (0, _util.unreachable)("Cannot initialize BaseSVGFactory.");
10311    }
10312  }
10313  create(width, height) {
10314    let skipDimensions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
10315    if (width <= 0 || height <= 0) {
10316      throw new Error("Invalid SVG dimensions");
10317    }
10318    const svg = this._createSVG("svg:svg");
10319    svg.setAttribute("version", "1.1");
10320    if (!skipDimensions) {
10321      svg.setAttribute("width", `${width}px`);
10322      svg.setAttribute("height", `${height}px`);
10323    }
10324    svg.setAttribute("preserveAspectRatio", "none");
10325    svg.setAttribute("viewBox", `0 0 ${width} ${height}`);
10326    return svg;
10327  }
10328  createElement(type) {
10329    if (typeof type !== "string") {
10330      throw new Error("Invalid SVG element type");
10331    }
10332    return this._createSVG(type);
10333  }
10334  _createSVG(type) {
10335    (0, _util.unreachable)("Abstract method `_createSVG` called.");
10336  }
10337}
10338exports.BaseSVGFactory = BaseSVGFactory;
10339
10340/***/ }),
10341/* 170 */
10342/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
10343
10344
10345
10346Object.defineProperty(exports, "__esModule", ({
10347  value: true
10348}));
10349exports.MurmurHash3_64 = void 0;
10350__w_pdfjs_require__(93);
10351__w_pdfjs_require__(101);
10352__w_pdfjs_require__(102);
10353__w_pdfjs_require__(105);
10354__w_pdfjs_require__(107);
10355__w_pdfjs_require__(109);
10356__w_pdfjs_require__(113);
10357__w_pdfjs_require__(116);
10358__w_pdfjs_require__(123);
10359__w_pdfjs_require__(2);
10360var _util = __w_pdfjs_require__(1);
10361const SEED = 0xc3d2e1f0;
10362const MASK_HIGH = 0xffff0000;
10363const MASK_LOW = 0xffff;
10364class MurmurHash3_64 {
10365  constructor(seed) {
10366    this.h1 = seed ? seed & 0xffffffff : SEED;
10367    this.h2 = seed ? seed & 0xffffffff : SEED;
10368  }
10369  update(input) {
10370    let data, length;
10371    if (typeof input === "string") {
10372      data = new Uint8Array(input.length * 2);
10373      length = 0;
10374      for (let i = 0, ii = input.length; i < ii; i++) {
10375        const code = input.charCodeAt(i);
10376        if (code <= 0xff) {
10377          data[length++] = code;
10378        } else {
10379          data[length++] = code >>> 8;
10380          data[length++] = code & 0xff;
10381        }
10382      }
10383    } else if ((0, _util.isArrayBuffer)(input)) {
10384      data = input.slice();
10385      length = data.byteLength;
10386    } else {
10387      throw new Error("Wrong data format in MurmurHash3_64_update. " + "Input must be a string or array.");
10388    }
10389    const blockCounts = length >> 2;
10390    const tailLength = length - blockCounts * 4;
10391    const dataUint32 = new Uint32Array(data.buffer, 0, blockCounts);
10392    let k1 = 0,
10393      k2 = 0;
10394    let h1 = this.h1,
10395      h2 = this.h2;
10396    const C1 = 0xcc9e2d51,
10397      C2 = 0x1b873593;
10398    const C1_LOW = C1 & MASK_LOW,
10399      C2_LOW = C2 & MASK_LOW;
10400    for (let i = 0; i < blockCounts; i++) {
10401      if (i & 1) {
10402        k1 = dataUint32[i];
10403        k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW;
10404        k1 = k1 << 15 | k1 >>> 17;
10405        k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW;
10406        h1 ^= k1;
10407        h1 = h1 << 13 | h1 >>> 19;
10408        h1 = h1 * 5 + 0xe6546b64;
10409      } else {
10410        k2 = dataUint32[i];
10411        k2 = k2 * C1 & MASK_HIGH | k2 * C1_LOW & MASK_LOW;
10412        k2 = k2 << 15 | k2 >>> 17;
10413        k2 = k2 * C2 & MASK_HIGH | k2 * C2_LOW & MASK_LOW;
10414        h2 ^= k2;
10415        h2 = h2 << 13 | h2 >>> 19;
10416        h2 = h2 * 5 + 0xe6546b64;
10417      }
10418    }
10419    k1 = 0;
10420    switch (tailLength) {
10421      case 3:
10422        k1 ^= data[blockCounts * 4 + 2] << 16;
10423      case 2:
10424        k1 ^= data[blockCounts * 4 + 1] << 8;
10425      case 1:
10426        k1 ^= data[blockCounts * 4];
10427        k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW;
10428        k1 = k1 << 15 | k1 >>> 17;
10429        k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW;
10430        if (blockCounts & 1) {
10431          h1 ^= k1;
10432        } else {
10433          h2 ^= k1;
10434        }
10435    }
10436    this.h1 = h1;
10437    this.h2 = h2;
10438  }
10439  hexdigest() {
10440    let h1 = this.h1,
10441      h2 = this.h2;
10442    h1 ^= h2 >>> 1;
10443    h1 = h1 * 0xed558ccd & MASK_HIGH | h1 * 0x8ccd & MASK_LOW;
10444    h2 = h2 * 0xff51afd7 & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 0xafd7ed55 & MASK_HIGH) >>> 16;
10445    h1 ^= h2 >>> 1;
10446    h1 = h1 * 0x1a85ec53 & MASK_HIGH | h1 * 0xec53 & MASK_LOW;
10447    h2 = h2 * 0xc4ceb9fe & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 0xb9fe1a85 & MASK_HIGH) >>> 16;
10448    h1 ^= h2 >>> 1;
10449    return (h1 >>> 0).toString(16).padStart(8, "0") + (h2 >>> 0).toString(16).padStart(8, "0");
10450  }
10451}
10452exports.MurmurHash3_64 = MurmurHash3_64;
10453
10454/***/ }),
10455/* 171 */
10456/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
10457
10458
10459
10460Object.defineProperty(exports, "__esModule", ({
10461  value: true
10462}));
10463exports.FontLoader = exports.FontFaceObject = void 0;
10464__w_pdfjs_require__(125);
10465__w_pdfjs_require__(136);
10466__w_pdfjs_require__(138);
10467__w_pdfjs_require__(141);
10468__w_pdfjs_require__(143);
10469__w_pdfjs_require__(145);
10470__w_pdfjs_require__(147);
10471__w_pdfjs_require__(89);
10472__w_pdfjs_require__(149);
10473var _util = __w_pdfjs_require__(1);
10474class FontLoader {
10475  #systemFonts = new Set();
10476  constructor(_ref) {
10477    let {
10478      ownerDocument = globalThis.document,
10479      styleElement = null
10480    } = _ref;
10481    this._document = ownerDocument;
10482    this.nativeFontFaces = new Set();
10483    this.styleElement = null;
10484    this.loadingRequests = [];
10485    this.loadTestFontId = 0;
10486  }
10487  addNativeFontFace(nativeFontFace) {
10488    this.nativeFontFaces.add(nativeFontFace);
10489    this._document.fonts.add(nativeFontFace);
10490  }
10491  removeNativeFontFace(nativeFontFace) {
10492    this.nativeFontFaces.delete(nativeFontFace);
10493    this._document.fonts.delete(nativeFontFace);
10494  }
10495  insertRule(rule) {
10496    if (!this.styleElement) {
10497      this.styleElement = this._document.createElement("style");
10498      this._document.documentElement.getElementsByTagName("head")[0].append(this.styleElement);
10499    }
10500    const styleSheet = this.styleElement.sheet;
10501    styleSheet.insertRule(rule, styleSheet.cssRules.length);
10502  }
10503  clear() {
10504    for (const nativeFontFace of this.nativeFontFaces) {
10505      this._document.fonts.delete(nativeFontFace);
10506    }
10507    this.nativeFontFaces.clear();
10508    this.#systemFonts.clear();
10509    if (this.styleElement) {
10510      this.styleElement.remove();
10511      this.styleElement = null;
10512    }
10513  }
10514  async loadSystemFont(info) {
10515    if (!info || this.#systemFonts.has(info.loadedName)) {
10516      return;
10517    }
10518    (0, _util.assert)(!this.disableFontFace, "loadSystemFont shouldn't be called when `disableFontFace` is set.");
10519    if (this.isFontLoadingAPISupported) {
10520      const {
10521        loadedName,
10522        src,
10523        style
10524      } = info;
10525      const fontFace = new FontFace(loadedName, src, style);
10526      this.addNativeFontFace(fontFace);
10527      try {
10528        await fontFace.load();
10529        this.#systemFonts.add(loadedName);
10530      } catch {
10531        (0, _util.warn)(`Cannot load system font: ${info.baseFontName}, installing it could help to improve PDF rendering.`);
10532        this.removeNativeFontFace(fontFace);
10533      }
10534      return;
10535    }
10536    (0, _util.unreachable)("Not implemented: loadSystemFont without the Font Loading API.");
10537  }
10538  async bind(font) {
10539    if (font.attached || font.missingFile && !font.systemFontInfo) {
10540      return;
10541    }
10542    font.attached = true;
10543    if (font.systemFontInfo) {
10544      await this.loadSystemFont(font.systemFontInfo);
10545      return;
10546    }
10547    if (this.isFontLoadingAPISupported) {
10548      const nativeFontFace = font.createNativeFontFace();
10549      if (nativeFontFace) {
10550        this.addNativeFontFace(nativeFontFace);
10551        try {
10552          await nativeFontFace.loaded;
10553        } catch (ex) {
10554          (0, _util.warn)(`Failed to load font '${nativeFontFace.family}': '${ex}'.`);
10555          font.disableFontFace = true;
10556          throw ex;
10557        }
10558      }
10559      return;
10560    }
10561    const rule = font.createFontFaceRule();
10562    if (rule) {
10563      this.insertRule(rule);
10564      if (this.isSyncFontLoadingSupported) {
10565        return;
10566      }
10567      await new Promise(resolve => {
10568        const request = this._queueLoadingCallback(resolve);
10569        this._prepareFontLoadEvent(font, request);
10570      });
10571    }
10572  }
10573  get isFontLoadingAPISupported() {
10574    const hasFonts = !!this._document?.fonts;
10575    return (0, _util.shadow)(this, "isFontLoadingAPISupported", hasFonts);
10576  }
10577  get isSyncFontLoadingSupported() {
10578    let supported = false;
10579    if (_util.isNodeJS) {
10580      supported = true;
10581    } else if (typeof navigator !== "undefined" && /Mozilla\/5.0.*?rv:\d+.*? Gecko/.test(navigator.userAgent)) {
10582      supported = true;
10583    }
10584    return (0, _util.shadow)(this, "isSyncFontLoadingSupported", supported);
10585  }
10586  _queueLoadingCallback(callback) {
10587    function completeRequest() {
10588      (0, _util.assert)(!request.done, "completeRequest() cannot be called twice.");
10589      request.done = true;
10590      while (loadingRequests.length > 0 && loadingRequests[0].done) {
10591        const otherRequest = loadingRequests.shift();
10592        setTimeout(otherRequest.callback, 0);
10593      }
10594    }
10595    const {
10596      loadingRequests
10597    } = this;
10598    const request = {
10599      done: false,
10600      complete: completeRequest,
10601      callback
10602    };
10603    loadingRequests.push(request);
10604    return request;
10605  }
10606  get _loadTestFont() {
10607    const testFont = atob("T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQA" + "FQAABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAA" + "ALwAAAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgA" + "AAAGbmFtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1" + "AAsD6AAAAADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD" + "6AAAAAAD6AABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACM" + "AooCvAAAAeAAMQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4D" + "IP84AFoDIQAAAAAAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAA" + "AAEAAQAAAAEAAAAAAAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUA" + "AQAAAAEAAAAAAAYAAQAAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgAB" + "AAMAAQQJAAMAAgABAAMAAQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABY" + "AAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAA" + "AC7////TAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAA" + "AAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgcA/gXBIwMAYuL+nz5tQXkD5j3CBLnEQAC" + "AQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYAAABAQAADwACAQEEE/t3" + "Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQAAAAAAAABAAAAAMmJbzEAAAAAzgTj" + "FQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAgABAAAAAAAAAAAD6AAAAAAAAA==");
10608    return (0, _util.shadow)(this, "_loadTestFont", testFont);
10609  }
10610  _prepareFontLoadEvent(font, request) {
10611    function int32(data, offset) {
10612      return data.charCodeAt(offset) << 24 | data.charCodeAt(offset + 1) << 16 | data.charCodeAt(offset + 2) << 8 | data.charCodeAt(offset + 3) & 0xff;
10613    }
10614    function spliceString(s, offset, remove, insert) {
10615      const chunk1 = s.substring(0, offset);
10616      const chunk2 = s.substring(offset + remove);
10617      return chunk1 + insert + chunk2;
10618    }
10619    let i, ii;
10620    const canvas = this._document.createElement("canvas");
10621    canvas.width = 1;
10622    canvas.height = 1;
10623    const ctx = canvas.getContext("2d");
10624    let called = 0;
10625    function isFontReady(name, callback) {
10626      if (++called > 30) {
10627        (0, _util.warn)("Load test font never loaded.");
10628        callback();
10629        return;
10630      }
10631      ctx.font = "30px " + name;
10632      ctx.fillText(".", 0, 20);
10633      const imageData = ctx.getImageData(0, 0, 1, 1);
10634      if (imageData.data[3] > 0) {
10635        callback();
10636        return;
10637      }
10638      setTimeout(isFontReady.bind(null, name, callback));
10639    }
10640    const loadTestFontId = `lt${Date.now()}${this.loadTestFontId++}`;
10641    let data = this._loadTestFont;
10642    const COMMENT_OFFSET = 976;
10643    data = spliceString(data, COMMENT_OFFSET, loadTestFontId.length, loadTestFontId);
10644    const CFF_CHECKSUM_OFFSET = 16;
10645    const XXXX_VALUE = 0x58585858;
10646    let checksum = int32(data, CFF_CHECKSUM_OFFSET);
10647    for (i = 0, ii = loadTestFontId.length - 3; i < ii; i += 4) {
10648      checksum = checksum - XXXX_VALUE + int32(loadTestFontId, i) | 0;
10649    }
10650    if (i < loadTestFontId.length) {
10651      checksum = checksum - XXXX_VALUE + int32(loadTestFontId + "XXX", i) | 0;
10652    }
10653    data = spliceString(data, CFF_CHECKSUM_OFFSET, 4, (0, _util.string32)(checksum));
10654    const url = `url(data:font/opentype;base64,${btoa(data)});`;
10655    const rule = `@font-face {font-family:"${loadTestFontId}";src:${url}}`;
10656    this.insertRule(rule);
10657    const div = this._document.createElement("div");
10658    div.style.visibility = "hidden";
10659    div.style.width = div.style.height = "10px";
10660    div.style.position = "absolute";
10661    div.style.top = div.style.left = "0px";
10662    for (const name of [font.loadedName, loadTestFontId]) {
10663      const span = this._document.createElement("span");
10664      span.textContent = "Hi";
10665      span.style.fontFamily = name;
10666      div.append(span);
10667    }
10668    this._document.body.append(div);
10669    isFontReady(loadTestFontId, () => {
10670      div.remove();
10671      request.complete();
10672    });
10673  }
10674}
10675exports.FontLoader = FontLoader;
10676class FontFaceObject {
10677  constructor(translatedData, _ref2) {
10678    let {
10679      isEvalSupported = true,
10680      disableFontFace = false,
10681      ignoreErrors = false,
10682      inspectFont = null
10683    } = _ref2;
10684    this.compiledGlyphs = Object.create(null);
10685    for (const i in translatedData) {
10686      this[i] = translatedData[i];
10687    }
10688    this.isEvalSupported = isEvalSupported !== false;
10689    this.disableFontFace = disableFontFace === true;
10690    this.ignoreErrors = ignoreErrors === true;
10691    this._inspectFont = inspectFont;
10692  }
10693  createNativeFontFace() {
10694    if (!this.data || this.disableFontFace) {
10695      return null;
10696    }
10697    let nativeFontFace;
10698    if (!this.cssFontInfo) {
10699      nativeFontFace = new FontFace(this.loadedName, this.data, {});
10700    } else {
10701      const css = {
10702        weight: this.cssFontInfo.fontWeight
10703      };
10704      if (this.cssFontInfo.italicAngle) {
10705        css.style = `oblique ${this.cssFontInfo.italicAngle}deg`;
10706      }
10707      nativeFontFace = new FontFace(this.cssFontInfo.fontFamily, this.data, css);
10708    }
10709    this._inspectFont?.(this);
10710    return nativeFontFace;
10711  }
10712  createFontFaceRule() {
10713    if (!this.data || this.disableFontFace) {
10714      return null;
10715    }
10716    const data = (0, _util.bytesToString)(this.data);
10717    const url = `url(data:${this.mimetype};base64,${btoa(data)});`;
10718    let rule;
10719    if (!this.cssFontInfo) {
10720      rule = `@font-face {font-family:"${this.loadedName}";src:${url}}`;
10721    } else {
10722      let css = `font-weight: ${this.cssFontInfo.fontWeight};`;
10723      if (this.cssFontInfo.italicAngle) {
10724        css += `font-style: oblique ${this.cssFontInfo.italicAngle}deg;`;
10725      }
10726      rule = `@font-face {font-family:"${this.cssFontInfo.fontFamily}";${css}src:${url}}`;
10727    }
10728    this._inspectFont?.(this, url);
10729    return rule;
10730  }
10731  getPathGenerator(objs, character) {
10732    if (this.compiledGlyphs[character] !== undefined) {
10733      return this.compiledGlyphs[character];
10734    }
10735    let cmds;
10736    try {
10737      cmds = objs.get(this.loadedName + "_path_" + character);
10738    } catch (ex) {
10739      if (!this.ignoreErrors) {
10740        throw ex;
10741      }
10742      (0, _util.warn)(`getPathGenerator - ignoring character: "${ex}".`);
10743      return this.compiledGlyphs[character] = function (c, size) {};
10744    }
10745    if (this.isEvalSupported && _util.FeatureTest.isEvalSupported) {
10746      const jsBuf = [];
10747      for (const current of cmds) {
10748        const args = current.args !== undefined ? current.args.join(",") : "";
10749        jsBuf.push("c.", current.cmd, "(", args, ");\n");
10750      }
10751      return this.compiledGlyphs[character] = new Function("c", "size", jsBuf.join(""));
10752    }
10753    return this.compiledGlyphs[character] = function (c, size) {
10754      for (const current of cmds) {
10755        if (current.cmd === "scale") {
10756          current.args = [size, -size];
10757        }
10758        c[current.cmd].apply(c, current.args);
10759      }
10760    };
10761  }
10762}
10763exports.FontFaceObject = FontFaceObject;
10764
10765/***/ }),
10766/* 172 */
10767/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
10768
10769
10770
10771Object.defineProperty(exports, "__esModule", ({
10772  value: true
10773}));
10774exports.NodeStandardFontDataFactory = exports.NodeFilterFactory = exports.NodeCanvasFactory = exports.NodeCMapReaderFactory = void 0;
10775__w_pdfjs_require__(2);
10776__w_pdfjs_require__(93);
10777__w_pdfjs_require__(101);
10778__w_pdfjs_require__(102);
10779__w_pdfjs_require__(105);
10780__w_pdfjs_require__(107);
10781__w_pdfjs_require__(109);
10782__w_pdfjs_require__(113);
10783__w_pdfjs_require__(116);
10784__w_pdfjs_require__(123);
10785var _base_factory = __w_pdfjs_require__(169);
10786var _util = __w_pdfjs_require__(1);
10787;
10788{
10789  (function checkDOMMatrix() {
10790    if (globalThis.DOMMatrix || !_util.isNodeJS) {
10791      return;
10792    }
10793    try {
10794      globalThis.DOMMatrix = require("canvas").DOMMatrix;
10795    } catch (ex) {
10796      (0, _util.warn)(`Cannot polyfill \`DOMMatrix\`, rendering may be broken: "${ex}".`);
10797    }
10798  })();
10799  (function checkPath2D() {
10800    if (globalThis.Path2D || !_util.isNodeJS) {
10801      return;
10802    }
10803    try {
10804      const {
10805        CanvasRenderingContext2D
10806      } = require("canvas");
10807      const {
10808        polyfillPath2D
10809      } = require("path2d-polyfill");
10810      globalThis.CanvasRenderingContext2D = CanvasRenderingContext2D;
10811      polyfillPath2D(globalThis);
10812    } catch (ex) {
10813      (0, _util.warn)(`Cannot polyfill \`Path2D\`, rendering may be broken: "${ex}".`);
10814    }
10815  })();
10816}
10817const fetchData = function (url) {
10818  return new Promise((resolve, reject) => {
10819    const fs = require("fs");
10820    fs.readFile(url, (error, data) => {
10821      if (error || !data) {
10822        reject(new Error(error));
10823        return;
10824      }
10825      resolve(new Uint8Array(data));
10826    });
10827  });
10828};
10829class NodeFilterFactory extends _base_factory.BaseFilterFactory {}
10830exports.NodeFilterFactory = NodeFilterFactory;
10831class NodeCanvasFactory extends _base_factory.BaseCanvasFactory {
10832  _createCanvas(width, height) {
10833    const Canvas = require("canvas");
10834    return Canvas.createCanvas(width, height);
10835  }
10836}
10837exports.NodeCanvasFactory = NodeCanvasFactory;
10838class NodeCMapReaderFactory extends _base_factory.BaseCMapReaderFactory {
10839  _fetchData(url, compressionType) {
10840    return fetchData(url).then(data => {
10841      return {
10842        cMapData: data,
10843        compressionType
10844      };
10845    });
10846  }
10847}
10848exports.NodeCMapReaderFactory = NodeCMapReaderFactory;
10849class NodeStandardFontDataFactory extends _base_factory.BaseStandardFontDataFactory {
10850  _fetchData(url) {
10851    return fetchData(url);
10852  }
10853}
10854exports.NodeStandardFontDataFactory = NodeStandardFontDataFactory;
10855
10856/***/ }),
10857/* 173 */
10858/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
10859
10860
10861
10862Object.defineProperty(exports, "__esModule", ({
10863  value: true
10864}));
10865exports.CanvasGraphics = void 0;
10866__w_pdfjs_require__(2);
10867__w_pdfjs_require__(93);
10868__w_pdfjs_require__(101);
10869__w_pdfjs_require__(102);
10870__w_pdfjs_require__(105);
10871__w_pdfjs_require__(107);
10872__w_pdfjs_require__(109);
10873__w_pdfjs_require__(113);
10874__w_pdfjs_require__(116);
10875__w_pdfjs_require__(123);
10876__w_pdfjs_require__(89);
10877var _util = __w_pdfjs_require__(1);
10878var _display_utils = __w_pdfjs_require__(168);
10879var _pattern_helper = __w_pdfjs_require__(174);
10880var _image_utils = __w_pdfjs_require__(175);
10881const MIN_FONT_SIZE = 16;
10882const MAX_FONT_SIZE = 100;
10883const MAX_GROUP_SIZE = 4096;
10884const EXECUTION_TIME = 15;
10885const EXECUTION_STEPS = 10;
10886const MAX_SIZE_TO_COMPILE = 1000;
10887const FULL_CHUNK_HEIGHT = 16;
10888function mirrorContextOperations(ctx, destCtx) {
10889  if (ctx._removeMirroring) {
10890    throw new Error("Context is already forwarding operations.");
10891  }
10892  ctx.__originalSave = ctx.save;
10893  ctx.__originalRestore = ctx.restore;
10894  ctx.__originalRotate = ctx.rotate;
10895  ctx.__originalScale = ctx.scale;
10896  ctx.__originalTranslate = ctx.translate;
10897  ctx.__originalTransform = ctx.transform;
10898  ctx.__originalSetTransform = ctx.setTransform;
10899  ctx.__originalResetTransform = ctx.resetTransform;
10900  ctx.__originalClip = ctx.clip;
10901  ctx.__originalMoveTo = ctx.moveTo;
10902  ctx.__originalLineTo = ctx.lineTo;
10903  ctx.__originalBezierCurveTo = ctx.bezierCurveTo;
10904  ctx.__originalRect = ctx.rect;
10905  ctx.__originalClosePath = ctx.closePath;
10906  ctx.__originalBeginPath = ctx.beginPath;
10907  ctx._removeMirroring = () => {
10908    ctx.save = ctx.__originalSave;
10909    ctx.restore = ctx.__originalRestore;
10910    ctx.rotate = ctx.__originalRotate;
10911    ctx.scale = ctx.__originalScale;
10912    ctx.translate = ctx.__originalTranslate;
10913    ctx.transform = ctx.__originalTransform;
10914    ctx.setTransform = ctx.__originalSetTransform;
10915    ctx.resetTransform = ctx.__originalResetTransform;
10916    ctx.clip = ctx.__originalClip;
10917    ctx.moveTo = ctx.__originalMoveTo;
10918    ctx.lineTo = ctx.__originalLineTo;
10919    ctx.bezierCurveTo = ctx.__originalBezierCurveTo;
10920    ctx.rect = ctx.__originalRect;
10921    ctx.closePath = ctx.__originalClosePath;
10922    ctx.beginPath = ctx.__originalBeginPath;
10923    delete ctx._removeMirroring;
10924  };
10925  ctx.save = function ctxSave() {
10926    destCtx.save();
10927    this.__originalSave();
10928  };
10929  ctx.restore = function ctxRestore() {
10930    destCtx.restore();
10931    this.__originalRestore();
10932  };
10933  ctx.translate = function ctxTranslate(x, y) {
10934    destCtx.translate(x, y);
10935    this.__originalTranslate(x, y);
10936  };
10937  ctx.scale = function ctxScale(x, y) {
10938    destCtx.scale(x, y);
10939    this.__originalScale(x, y);
10940  };
10941  ctx.transform = function ctxTransform(a, b, c, d, e, f) {
10942    destCtx.transform(a, b, c, d, e, f);
10943    this.__originalTransform(a, b, c, d, e, f);
10944  };
10945  ctx.setTransform = function ctxSetTransform(a, b, c, d, e, f) {
10946    destCtx.setTransform(a, b, c, d, e, f);
10947    this.__originalSetTransform(a, b, c, d, e, f);
10948  };
10949  ctx.resetTransform = function ctxResetTransform() {
10950    destCtx.resetTransform();
10951    this.__originalResetTransform();
10952  };
10953  ctx.rotate = function ctxRotate(angle) {
10954    destCtx.rotate(angle);
10955    this.__originalRotate(angle);
10956  };
10957  ctx.clip = function ctxRotate(rule) {
10958    destCtx.clip(rule);
10959    this.__originalClip(rule);
10960  };
10961  ctx.moveTo = function (x, y) {
10962    destCtx.moveTo(x, y);
10963    this.__originalMoveTo(x, y);
10964  };
10965  ctx.lineTo = function (x, y) {
10966    destCtx.lineTo(x, y);
10967    this.__originalLineTo(x, y);
10968  };
10969  ctx.bezierCurveTo = function (cp1x, cp1y, cp2x, cp2y, x, y) {
10970    destCtx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);
10971    this.__originalBezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);
10972  };
10973  ctx.rect = function (x, y, width, height) {
10974    destCtx.rect(x, y, width, height);
10975    this.__originalRect(x, y, width, height);
10976  };
10977  ctx.closePath = function () {
10978    destCtx.closePath();
10979    this.__originalClosePath();
10980  };
10981  ctx.beginPath = function () {
10982    destCtx.beginPath();
10983    this.__originalBeginPath();
10984  };
10985}
10986class CachedCanvases {
10987  constructor(canvasFactory) {
10988    this.canvasFactory = canvasFactory;
10989    this.cache = Object.create(null);
10990  }
10991  getCanvas(id, width, height) {
10992    let canvasEntry;
10993    if (this.cache[id] !== undefined) {
10994      canvasEntry = this.cache[id];
10995      this.canvasFactory.reset(canvasEntry, width, height);
10996    } else {
10997      canvasEntry = this.canvasFactory.create(width, height);
10998      this.cache[id] = canvasEntry;
10999    }
11000    return canvasEntry;
11001  }
11002  delete(id) {
11003    delete this.cache[id];
11004  }
11005  clear() {
11006    for (const id in this.cache) {
11007      const canvasEntry = this.cache[id];
11008      this.canvasFactory.destroy(canvasEntry);
11009      delete this.cache[id];
11010    }
11011  }
11012}
11013function drawImageAtIntegerCoords(ctx, srcImg, srcX, srcY, srcW, srcH, destX, destY, destW, destH) {
11014  const [a, b, c, d, tx, ty] = (0, _display_utils.getCurrentTransform)(ctx);
11015  if (b === 0 && c === 0) {
11016    const tlX = destX * a + tx;
11017    const rTlX = Math.round(tlX);
11018    const tlY = destY * d + ty;
11019    const rTlY = Math.round(tlY);
11020    const brX = (destX + destW) * a + tx;
11021    const rWidth = Math.abs(Math.round(brX) - rTlX) || 1;
11022    const brY = (destY + destH) * d + ty;
11023    const rHeight = Math.abs(Math.round(brY) - rTlY) || 1;
11024    ctx.setTransform(Math.sign(a), 0, 0, Math.sign(d), rTlX, rTlY);
11025    ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, 0, 0, rWidth, rHeight);
11026    ctx.setTransform(a, b, c, d, tx, ty);
11027    return [rWidth, rHeight];
11028  }
11029  if (a === 0 && d === 0) {
11030    const tlX = destY * c + tx;
11031    const rTlX = Math.round(tlX);
11032    const tlY = destX * b + ty;
11033    const rTlY = Math.round(tlY);
11034    const brX = (destY + destH) * c + tx;
11035    const rWidth = Math.abs(Math.round(brX) - rTlX) || 1;
11036    const brY = (destX + destW) * b + ty;
11037    const rHeight = Math.abs(Math.round(brY) - rTlY) || 1;
11038    ctx.setTransform(0, Math.sign(b), Math.sign(c), 0, rTlX, rTlY);
11039    ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, 0, 0, rHeight, rWidth);
11040    ctx.setTransform(a, b, c, d, tx, ty);
11041    return [rHeight, rWidth];
11042  }
11043  ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, destX, destY, destW, destH);
11044  const scaleX = Math.hypot(a, b);
11045  const scaleY = Math.hypot(c, d);
11046  return [scaleX * destW, scaleY * destH];
11047}
11048function compileType3Glyph(imgData) {
11049  const {
11050    width,
11051    height
11052  } = imgData;
11053  if (width > MAX_SIZE_TO_COMPILE || height > MAX_SIZE_TO_COMPILE) {
11054    return null;
11055  }
11056  const POINT_TO_PROCESS_LIMIT = 1000;
11057  const POINT_TYPES = new Uint8Array([0, 2, 4, 0, 1, 0, 5, 4, 8, 10, 0, 8, 0, 2, 1, 0]);
11058  const width1 = width + 1;
11059  let points = new Uint8Array(width1 * (height + 1));
11060  let i, j, j0;
11061  const lineSize = width + 7 & ~7;
11062  let data = new Uint8Array(lineSize * height),
11063    pos = 0;
11064  for (const elem of imgData.data) {
11065    let mask = 128;
11066    while (mask > 0) {
11067      data[pos++] = elem & mask ? 0 : 255;
11068      mask >>= 1;
11069    }
11070  }
11071  let count = 0;
11072  pos = 0;
11073  if (data[pos] !== 0) {
11074    points[0] = 1;
11075    ++count;
11076  }
11077  for (j = 1; j < width; j++) {
11078    if (data[pos] !== data[pos + 1]) {
11079      points[j] = data[pos] ? 2 : 1;
11080      ++count;
11081    }
11082    pos++;
11083  }
11084  if (data[pos] !== 0) {
11085    points[j] = 2;
11086    ++count;
11087  }
11088  for (i = 1; i < height; i++) {
11089    pos = i * lineSize;
11090    j0 = i * width1;
11091    if (data[pos - lineSize] !== data[pos]) {
11092      points[j0] = data[pos] ? 1 : 8;
11093      ++count;
11094    }
11095    let sum = (data[pos] ? 4 : 0) + (data[pos - lineSize] ? 8 : 0);
11096    for (j = 1; j < width; j++) {
11097      sum = (sum >> 2) + (data[pos + 1] ? 4 : 0) + (data[pos - lineSize + 1] ? 8 : 0);
11098      if (POINT_TYPES[sum]) {
11099        points[j0 + j] = POINT_TYPES[sum];
11100        ++count;
11101      }
11102      pos++;
11103    }
11104    if (data[pos - lineSize] !== data[pos]) {
11105      points[j0 + j] = data[pos] ? 2 : 4;
11106      ++count;
11107    }
11108    if (count > POINT_TO_PROCESS_LIMIT) {
11109      return null;
11110    }
11111  }
11112  pos = lineSize * (height - 1);
11113  j0 = i * width1;
11114  if (data[pos] !== 0) {
11115    points[j0] = 8;
11116    ++count;
11117  }
11118  for (j = 1; j < width; j++) {
11119    if (data[pos] !== data[pos + 1]) {
11120      points[j0 + j] = data[pos] ? 4 : 8;
11121      ++count;
11122    }
11123    pos++;
11124  }
11125  if (data[pos] !== 0) {
11126    points[j0 + j] = 4;
11127    ++count;
11128  }
11129  if (count > POINT_TO_PROCESS_LIMIT) {
11130    return null;
11131  }
11132  const steps = new Int32Array([0, width1, -1, 0, -width1, 0, 0, 0, 1]);
11133  const path = new Path2D();
11134  for (i = 0; count && i <= height; i++) {
11135    let p = i * width1;
11136    const end = p + width;
11137    while (p < end && !points[p]) {
11138      p++;
11139    }
11140    if (p === end) {
11141      continue;
11142    }
11143    path.moveTo(p % width1, i);
11144    const p0 = p;
11145    let type = points[p];
11146    do {
11147      const step = steps[type];
11148      do {
11149        p += step;
11150      } while (!points[p]);
11151      const pp = points[p];
11152      if (pp !== 5 && pp !== 10) {
11153        type = pp;
11154        points[p] = 0;
11155      } else {
11156        type = pp & 0x33 * type >> 4;
11157        points[p] &= type >> 2 | type << 2;
11158      }
11159      path.lineTo(p % width1, p / width1 | 0);
11160      if (!points[p]) {
11161        --count;
11162      }
11163    } while (p0 !== p);
11164    --i;
11165  }
11166  data = null;
11167  points = null;
11168  const drawOutline = function (c) {
11169    c.save();
11170    c.scale(1 / width, -1 / height);
11171    c.translate(0, -height);
11172    c.fill(path);
11173    c.beginPath();
11174    c.restore();
11175  };
11176  return drawOutline;
11177}
11178class CanvasExtraState {
11179  constructor(width, height) {
11180    this.alphaIsShape = false;
11181    this.fontSize = 0;
11182    this.fontSizeScale = 1;
11183    this.textMatrix = _util.IDENTITY_MATRIX;
11184    this.textMatrixScale = 1;
11185    this.fontMatrix = _util.FONT_IDENTITY_MATRIX;
11186    this.leading = 0;
11187    this.x = 0;
11188    this.y = 0;
11189    this.lineX = 0;
11190    this.lineY = 0;
11191    this.charSpacing = 0;
11192    this.wordSpacing = 0;
11193    this.textHScale = 1;
11194    this.textRenderingMode = _util.TextRenderingMode.FILL;
11195    this.textRise = 0;
11196    this.fillColor = "#000000";
11197    this.strokeColor = "#000000";
11198    this.patternFill = false;
11199    this.fillAlpha = 1;
11200    this.strokeAlpha = 1;
11201    this.lineWidth = 1;
11202    this.activeSMask = null;
11203    this.transferMaps = "none";
11204    this.startNewPathAndClipBox([0, 0, width, height]);
11205  }
11206  clone() {
11207    const clone = Object.create(this);
11208    clone.clipBox = this.clipBox.slice();
11209    return clone;
11210  }
11211  setCurrentPoint(x, y) {
11212    this.x = x;
11213    this.y = y;
11214  }
11215  updatePathMinMax(transform, x, y) {
11216    [x, y] = _util.Util.applyTransform([x, y], transform);
11217    this.minX = Math.min(this.minX, x);
11218    this.minY = Math.min(this.minY, y);
11219    this.maxX = Math.max(this.maxX, x);
11220    this.maxY = Math.max(this.maxY, y);
11221  }
11222  updateRectMinMax(transform, rect) {
11223    const p1 = _util.Util.applyTransform(rect, transform);
11224    const p2 = _util.Util.applyTransform(rect.slice(2), transform);
11225    this.minX = Math.min(this.minX, p1[0], p2[0]);
11226    this.minY = Math.min(this.minY, p1[1], p2[1]);
11227    this.maxX = Math.max(this.maxX, p1[0], p2[0]);
11228    this.maxY = Math.max(this.maxY, p1[1], p2[1]);
11229  }
11230  updateScalingPathMinMax(transform, minMax) {
11231    _util.Util.scaleMinMax(transform, minMax);
11232    this.minX = Math.min(this.minX, minMax[0]);
11233    this.maxX = Math.max(this.maxX, minMax[1]);
11234    this.minY = Math.min(this.minY, minMax[2]);
11235    this.maxY = Math.max(this.maxY, minMax[3]);
11236  }
11237  updateCurvePathMinMax(transform, x0, y0, x1, y1, x2, y2, x3, y3, minMax) {
11238    const box = _util.Util.bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3);
11239    if (minMax) {
11240      minMax[0] = Math.min(minMax[0], box[0], box[2]);
11241      minMax[1] = Math.max(minMax[1], box[0], box[2]);
11242      minMax[2] = Math.min(minMax[2], box[1], box[3]);
11243      minMax[3] = Math.max(minMax[3], box[1], box[3]);
11244      return;
11245    }
11246    this.updateRectMinMax(transform, box);
11247  }
11248  getPathBoundingBox() {
11249    let pathType = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _pattern_helper.PathType.FILL;
11250    let transform = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
11251    const box = [this.minX, this.minY, this.maxX, this.maxY];
11252    if (pathType === _pattern_helper.PathType.STROKE) {
11253      if (!transform) {
11254        (0, _util.unreachable)("Stroke bounding box must include transform.");
11255      }
11256      const scale = _util.Util.singularValueDecompose2dScale(transform);
11257      const xStrokePad = scale[0] * this.lineWidth / 2;
11258      const yStrokePad = scale[1] * this.lineWidth / 2;
11259      box[0] -= xStrokePad;
11260      box[1] -= yStrokePad;
11261      box[2] += xStrokePad;
11262      box[3] += yStrokePad;
11263    }
11264    return box;
11265  }
11266  updateClipFromPath() {
11267    const intersect = _util.Util.intersect(this.clipBox, this.getPathBoundingBox());
11268    this.startNewPathAndClipBox(intersect || [0, 0, 0, 0]);
11269  }
11270  isEmptyClip() {
11271    return this.minX === Infinity;
11272  }
11273  startNewPathAndClipBox(box) {
11274    this.clipBox = box;
11275    this.minX = Infinity;
11276    this.minY = Infinity;
11277    this.maxX = 0;
11278    this.maxY = 0;
11279  }
11280  getClippedPathBoundingBox() {
11281    let pathType = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _pattern_helper.PathType.FILL;
11282    let transform = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
11283    return _util.Util.intersect(this.clipBox, this.getPathBoundingBox(pathType, transform));
11284  }
11285}
11286function putBinaryImageData(ctx, imgData) {
11287  if (typeof ImageData !== "undefined" && imgData instanceof ImageData) {
11288    ctx.putImageData(imgData, 0, 0);
11289    return;
11290  }
11291  const height = imgData.height,
11292    width = imgData.width;
11293  const partialChunkHeight = height % FULL_CHUNK_HEIGHT;
11294  const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT;
11295  const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1;
11296  const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT);
11297  let srcPos = 0,
11298    destPos;
11299  const src = imgData.data;
11300  const dest = chunkImgData.data;
11301  let i, j, thisChunkHeight, elemsInThisChunk;
11302  if (imgData.kind === _util.ImageKind.GRAYSCALE_1BPP) {
11303    const srcLength = src.byteLength;
11304    const dest32 = new Uint32Array(dest.buffer, 0, dest.byteLength >> 2);
11305    const dest32DataLength = dest32.length;
11306    const fullSrcDiff = width + 7 >> 3;
11307    const white = 0xffffffff;
11308    const black = _util.FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff;
11309    for (i = 0; i < totalChunks; i++) {
11310      thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight;
11311      destPos = 0;
11312      for (j = 0; j < thisChunkHeight; j++) {
11313        const srcDiff = srcLength - srcPos;
11314        let k = 0;
11315        const kEnd = srcDiff > fullSrcDiff ? width : srcDiff * 8 - 7;
11316        const kEndUnrolled = kEnd & ~7;
11317        let mask = 0;
11318        let srcByte = 0;
11319        for (; k < kEndUnrolled; k += 8) {
11320          srcByte = src[srcPos++];
11321          dest32[destPos++] = srcByte & 128 ? white : black;
11322          dest32[destPos++] = srcByte & 64 ? white : black;
11323          dest32[destPos++] = srcByte & 32 ? white : black;
11324          dest32[destPos++] = srcByte & 16 ? white : black;
11325          dest32[destPos++] = srcByte & 8 ? white : black;
11326          dest32[destPos++] = srcByte & 4 ? white : black;
11327          dest32[destPos++] = srcByte & 2 ? white : black;
11328          dest32[destPos++] = srcByte & 1 ? white : black;
11329        }
11330        for (; k < kEnd; k++) {
11331          if (mask === 0) {
11332            srcByte = src[srcPos++];
11333            mask = 128;
11334          }
11335          dest32[destPos++] = srcByte & mask ? white : black;
11336          mask >>= 1;
11337        }
11338      }
11339      while (destPos < dest32DataLength) {
11340        dest32[destPos++] = 0;
11341      }
11342      ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);
11343    }
11344  } else if (imgData.kind === _util.ImageKind.RGBA_32BPP) {
11345    j = 0;
11346    elemsInThisChunk = width * FULL_CHUNK_HEIGHT * 4;
11347    for (i = 0; i < fullChunks; i++) {
11348      dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk));
11349      srcPos += elemsInThisChunk;
11350      ctx.putImageData(chunkImgData, 0, j);
11351      j += FULL_CHUNK_HEIGHT;
11352    }
11353    if (i < totalChunks) {
11354      elemsInThisChunk = width * partialChunkHeight * 4;
11355      dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk));
11356      ctx.putImageData(chunkImgData, 0, j);
11357    }
11358  } else if (imgData.kind === _util.ImageKind.RGB_24BPP) {
11359    thisChunkHeight = FULL_CHUNK_HEIGHT;
11360    elemsInThisChunk = width * thisChunkHeight;
11361    for (i = 0; i < totalChunks; i++) {
11362      if (i >= fullChunks) {
11363        thisChunkHeight = partialChunkHeight;
11364        elemsInThisChunk = width * thisChunkHeight;
11365      }
11366      destPos = 0;
11367      for (j = elemsInThisChunk; j--;) {
11368        dest[destPos++] = src[srcPos++];
11369        dest[destPos++] = src[srcPos++];
11370        dest[destPos++] = src[srcPos++];
11371        dest[destPos++] = 255;
11372      }
11373      ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);
11374    }
11375  } else {
11376    throw new Error(`bad image kind: ${imgData.kind}`);
11377  }
11378}
11379function putBinaryImageMask(ctx, imgData) {
11380  if (imgData.bitmap) {
11381    ctx.drawImage(imgData.bitmap, 0, 0);
11382    return;
11383  }
11384  const height = imgData.height,
11385    width = imgData.width;
11386  const partialChunkHeight = height % FULL_CHUNK_HEIGHT;
11387  const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT;
11388  const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1;
11389  const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT);
11390  let srcPos = 0;
11391  const src = imgData.data;
11392  const dest = chunkImgData.data;
11393  for (let i = 0; i < totalChunks; i++) {
11394    const thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight;
11395    ({
11396      srcPos
11397    } = (0, _image_utils.convertBlackAndWhiteToRGBA)({
11398      src,
11399      srcPos,
11400      dest,
11401      width,
11402      height: thisChunkHeight,
11403      nonBlackColor: 0
11404    }));
11405    ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);
11406  }
11407}
11408function copyCtxState(sourceCtx, destCtx) {
11409  const properties = ["strokeStyle", "fillStyle", "fillRule", "globalAlpha", "lineWidth", "lineCap", "lineJoin", "miterLimit", "globalCompositeOperation", "font", "filter"];
11410  for (const property of properties) {
11411    if (sourceCtx[property] !== undefined) {
11412      destCtx[property] = sourceCtx[property];
11413    }
11414  }
11415  if (sourceCtx.setLineDash !== undefined) {
11416    destCtx.setLineDash(sourceCtx.getLineDash());
11417    destCtx.lineDashOffset = sourceCtx.lineDashOffset;
11418  }
11419}
11420function resetCtxToDefault(ctx) {
11421  ctx.strokeStyle = ctx.fillStyle = "#000000";
11422  ctx.fillRule = "nonzero";
11423  ctx.globalAlpha = 1;
11424  ctx.lineWidth = 1;
11425  ctx.lineCap = "butt";
11426  ctx.lineJoin = "miter";
11427  ctx.miterLimit = 10;
11428  ctx.globalCompositeOperation = "source-over";
11429  ctx.font = "10px sans-serif";
11430  if (ctx.setLineDash !== undefined) {
11431    ctx.setLineDash([]);
11432    ctx.lineDashOffset = 0;
11433  }
11434  if (!_util.isNodeJS) {
11435    const {
11436      filter
11437    } = ctx;
11438    if (filter !== "none" && filter !== "") {
11439      ctx.filter = "none";
11440    }
11441  }
11442}
11443function composeSMaskBackdrop(bytes, r0, g0, b0) {
11444  const length = bytes.length;
11445  for (let i = 3; i < length; i += 4) {
11446    const alpha = bytes[i];
11447    if (alpha === 0) {
11448      bytes[i - 3] = r0;
11449      bytes[i - 2] = g0;
11450      bytes[i - 1] = b0;
11451    } else if (alpha < 255) {
11452      const alpha_ = 255 - alpha;
11453      bytes[i - 3] = bytes[i - 3] * alpha + r0 * alpha_ >> 8;
11454      bytes[i - 2] = bytes[i - 2] * alpha + g0 * alpha_ >> 8;
11455      bytes[i - 1] = bytes[i - 1] * alpha + b0 * alpha_ >> 8;
11456    }
11457  }
11458}
11459function composeSMaskAlpha(maskData, layerData, transferMap) {
11460  const length = maskData.length;
11461  const scale = 1 / 255;
11462  for (let i = 3; i < length; i += 4) {
11463    const alpha = transferMap ? transferMap[maskData[i]] : maskData[i];
11464    layerData[i] = layerData[i] * alpha * scale | 0;
11465  }
11466}
11467function composeSMaskLuminosity(maskData, layerData, transferMap) {
11468  const length = maskData.length;
11469  for (let i = 3; i < length; i += 4) {
11470    const y = maskData[i - 3] * 77 + maskData[i - 2] * 152 + maskData[i - 1] * 28;
11471    layerData[i] = transferMap ? layerData[i] * transferMap[y >> 8] >> 8 : layerData[i] * y >> 16;
11472  }
11473}
11474function genericComposeSMask(maskCtx, layerCtx, width, height, subtype, backdrop, transferMap, layerOffsetX, layerOffsetY, maskOffsetX, maskOffsetY) {
11475  const hasBackdrop = !!backdrop;
11476  const r0 = hasBackdrop ? backdrop[0] : 0;
11477  const g0 = hasBackdrop ? backdrop[1] : 0;
11478  const b0 = hasBackdrop ? backdrop[2] : 0;
11479  const composeFn = subtype === "Luminosity" ? composeSMaskLuminosity : composeSMaskAlpha;
11480  const PIXELS_TO_PROCESS = 1048576;
11481  const chunkSize = Math.min(height, Math.ceil(PIXELS_TO_PROCESS / width));
11482  for (let row = 0; row < height; row += chunkSize) {
11483    const chunkHeight = Math.min(chunkSize, height - row);
11484    const maskData = maskCtx.getImageData(layerOffsetX - maskOffsetX, row + (layerOffsetY - maskOffsetY), width, chunkHeight);
11485    const layerData = layerCtx.getImageData(layerOffsetX, row + layerOffsetY, width, chunkHeight);
11486    if (hasBackdrop) {
11487      composeSMaskBackdrop(maskData.data, r0, g0, b0);
11488    }
11489    composeFn(maskData.data, layerData.data, transferMap);
11490    layerCtx.putImageData(layerData, layerOffsetX, row + layerOffsetY);
11491  }
11492}
11493function composeSMask(ctx, smask, layerCtx, layerBox) {
11494  const layerOffsetX = layerBox[0];
11495  const layerOffsetY = layerBox[1];
11496  const layerWidth = layerBox[2] - layerOffsetX;
11497  const layerHeight = layerBox[3] - layerOffsetY;
11498  if (layerWidth === 0 || layerHeight === 0) {
11499    return;
11500  }
11501  genericComposeSMask(smask.context, layerCtx, layerWidth, layerHeight, smask.subtype, smask.backdrop, smask.transferMap, layerOffsetX, layerOffsetY, smask.offsetX, smask.offsetY);
11502  ctx.save();
11503  ctx.globalAlpha = 1;
11504  ctx.globalCompositeOperation = "source-over";
11505  ctx.setTransform(1, 0, 0, 1, 0, 0);
11506  ctx.drawImage(layerCtx.canvas, 0, 0);
11507  ctx.restore();
11508}
11509function getImageSmoothingEnabled(transform, interpolate) {
11510  const scale = _util.Util.singularValueDecompose2dScale(transform);
11511  scale[0] = Math.fround(scale[0]);
11512  scale[1] = Math.fround(scale[1]);
11513  const actualScale = Math.fround((globalThis.devicePixelRatio || 1) * _display_utils.PixelsPerInch.PDF_TO_CSS_UNITS);
11514  if (interpolate !== undefined) {
11515    return interpolate;
11516  } else if (scale[0] <= actualScale || scale[1] <= actualScale) {
11517    return true;
11518  }
11519  return false;
11520}
11521const LINE_CAP_STYLES = ["butt", "round", "square"];
11522const LINE_JOIN_STYLES = ["miter", "round", "bevel"];
11523const NORMAL_CLIP = {};
11524const EO_CLIP = {};
11525class CanvasGraphics {
11526  constructor(canvasCtx, commonObjs, objs, canvasFactory, filterFactory, _ref, annotationCanvasMap, pageColors) {
11527    let {
11528      optionalContentConfig,
11529      markedContentStack = null
11530    } = _ref;
11531    this.ctx = canvasCtx;
11532    this.current = new CanvasExtraState(this.ctx.canvas.width, this.ctx.canvas.height);
11533    this.stateStack = [];
11534    this.pendingClip = null;
11535    this.pendingEOFill = false;
11536    this.res = null;
11537    this.xobjs = null;
11538    this.commonObjs = commonObjs;
11539    this.objs = objs;
11540    this.canvasFactory = canvasFactory;
11541    this.filterFactory = filterFactory;
11542    this.groupStack = [];
11543    this.processingType3 = null;
11544    this.baseTransform = null;
11545    this.baseTransformStack = [];
11546    this.groupLevel = 0;
11547    this.smaskStack = [];
11548    this.smaskCounter = 0;
11549    this.tempSMask = null;
11550    this.suspendedCtx = null;
11551    this.contentVisible = true;
11552    this.markedContentStack = markedContentStack || [];
11553    this.optionalContentConfig = optionalContentConfig;
11554    this.cachedCanvases = new CachedCanvases(this.canvasFactory);
11555    this.cachedPatterns = new Map();
11556    this.annotationCanvasMap = annotationCanvasMap;
11557    this.viewportScale = 1;
11558    this.outputScaleX = 1;
11559    this.outputScaleY = 1;
11560    this.pageColors = pageColors;
11561    this._cachedScaleForStroking = [-1, 0];
11562    this._cachedGetSinglePixelWidth = null;
11563    this._cachedBitmapsMap = new Map();
11564  }
11565  getObject(data) {
11566    let fallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
11567    if (typeof data === "string") {
11568      return data.startsWith("g_") ? this.commonObjs.get(data) : this.objs.get(data);
11569    }
11570    return fallback;
11571  }
11572  beginDrawing(_ref2) {
11573    let {
11574      transform,
11575      viewport,
11576      transparency = false,
11577      background = null
11578    } = _ref2;
11579    const width = this.ctx.canvas.width;
11580    const height = this.ctx.canvas.height;
11581    const savedFillStyle = this.ctx.fillStyle;
11582    this.ctx.fillStyle = background || "#ffffff";
11583    this.ctx.fillRect(0, 0, width, height);
11584    this.ctx.fillStyle = savedFillStyle;
11585    if (transparency) {
11586      const transparentCanvas = this.cachedCanvases.getCanvas("transparent", width, height);
11587      this.compositeCtx = this.ctx;
11588      this.transparentCanvas = transparentCanvas.canvas;
11589      this.ctx = transparentCanvas.context;
11590      this.ctx.save();
11591      this.ctx.transform(...(0, _display_utils.getCurrentTransform)(this.compositeCtx));
11592    }
11593    this.ctx.save();
11594    resetCtxToDefault(this.ctx);
11595    if (transform) {
11596      this.ctx.transform(...transform);
11597      this.outputScaleX = transform[0];
11598      this.outputScaleY = transform[0];
11599    }
11600    this.ctx.transform(...viewport.transform);
11601    this.viewportScale = viewport.scale;
11602    this.baseTransform = (0, _display_utils.getCurrentTransform)(this.ctx);
11603  }
11604  executeOperatorList(operatorList, executionStartIdx, continueCallback, stepper) {
11605    const argsArray = operatorList.argsArray;
11606    const fnArray = operatorList.fnArray;
11607    let i = executionStartIdx || 0;
11608    const argsArrayLen = argsArray.length;
11609    if (argsArrayLen === i) {
11610      return i;
11611    }
11612    const chunkOperations = argsArrayLen - i > EXECUTION_STEPS && typeof continueCallback === "function";
11613    const endTime = chunkOperations ? Date.now() + EXECUTION_TIME : 0;
11614    let steps = 0;
11615    const commonObjs = this.commonObjs;
11616    const objs = this.objs;
11617    let fnId;
11618    while (true) {
11619      if (stepper !== undefined && i === stepper.nextBreakPoint) {
11620        stepper.breakIt(i, continueCallback);
11621        return i;
11622      }
11623      fnId = fnArray[i];
11624      if (fnId !== _util.OPS.dependency) {
11625        this[fnId].apply(this, argsArray[i]);
11626      } else {
11627        for (const depObjId of argsArray[i]) {
11628          const objsPool = depObjId.startsWith("g_") ? commonObjs : objs;
11629          if (!objsPool.has(depObjId)) {
11630            objsPool.get(depObjId, continueCallback);
11631            return i;
11632          }
11633        }
11634      }
11635      i++;
11636      if (i === argsArrayLen) {
11637        return i;
11638      }
11639      if (chunkOperations && ++steps > EXECUTION_STEPS) {
11640        if (Date.now() > endTime) {
11641          continueCallback();
11642          return i;
11643        }
11644        steps = 0;
11645      }
11646    }
11647  }
11648  #restoreInitialState() {
11649    while (this.stateStack.length || this.inSMaskMode) {
11650      this.restore();
11651    }
11652    this.ctx.restore();
11653    if (this.transparentCanvas) {
11654      this.ctx = this.compositeCtx;
11655      this.ctx.save();
11656      this.ctx.setTransform(1, 0, 0, 1, 0, 0);
11657      this.ctx.drawImage(this.transparentCanvas, 0, 0);
11658      this.ctx.restore();
11659      this.transparentCanvas = null;
11660    }
11661  }
11662  endDrawing() {
11663    this.#restoreInitialState();
11664    this.cachedCanvases.clear();
11665    this.cachedPatterns.clear();
11666    for (const cache of this._cachedBitmapsMap.values()) {
11667      for (const canvas of cache.values()) {
11668        if (typeof HTMLCanvasElement !== "undefined" && canvas instanceof HTMLCanvasElement) {
11669          canvas.width = canvas.height = 0;
11670        }
11671      }
11672      cache.clear();
11673    }
11674    this._cachedBitmapsMap.clear();
11675    this.#drawFilter();
11676  }
11677  #drawFilter() {
11678    if (this.pageColors) {
11679      const hcmFilterId = this.filterFactory.addHCMFilter(this.pageColors.foreground, this.pageColors.background);
11680      if (hcmFilterId !== "none") {
11681        const savedFilter = this.ctx.filter;
11682        this.ctx.filter = hcmFilterId;
11683        this.ctx.drawImage(this.ctx.canvas, 0, 0);
11684        this.ctx.filter = savedFilter;
11685      }
11686    }
11687  }
11688  _scaleImage(img, inverseTransform) {
11689    const width = img.width;
11690    const height = img.height;
11691    let widthScale = Math.max(Math.hypot(inverseTransform[0], inverseTransform[1]), 1);
11692    let heightScale = Math.max(Math.hypot(inverseTransform[2], inverseTransform[3]), 1);
11693    let paintWidth = width,
11694      paintHeight = height;
11695    let tmpCanvasId = "prescale1";
11696    let tmpCanvas, tmpCtx;
11697    while (widthScale > 2 && paintWidth > 1 || heightScale > 2 && paintHeight > 1) {
11698      let newWidth = paintWidth,
11699        newHeight = paintHeight;
11700      if (widthScale > 2 && paintWidth > 1) {
11701        newWidth = paintWidth >= 16384 ? Math.floor(paintWidth / 2) - 1 || 1 : Math.ceil(paintWidth / 2);
11702        widthScale /= paintWidth / newWidth;
11703      }
11704      if (heightScale > 2 && paintHeight > 1) {
11705        newHeight = paintHeight >= 16384 ? Math.floor(paintHeight / 2) - 1 || 1 : Math.ceil(paintHeight) / 2;
11706        heightScale /= paintHeight / newHeight;
11707      }
11708      tmpCanvas = this.cachedCanvases.getCanvas(tmpCanvasId, newWidth, newHeight);
11709      tmpCtx = tmpCanvas.context;
11710      tmpCtx.clearRect(0, 0, newWidth, newHeight);
11711      tmpCtx.drawImage(img, 0, 0, paintWidth, paintHeight, 0, 0, newWidth, newHeight);
11712      img = tmpCanvas.canvas;
11713      paintWidth = newWidth;
11714      paintHeight = newHeight;
11715      tmpCanvasId = tmpCanvasId === "prescale1" ? "prescale2" : "prescale1";
11716    }
11717    return {
11718      img,
11719      paintWidth,
11720      paintHeight
11721    };
11722  }
11723  _createMaskCanvas(img) {
11724    const ctx = this.ctx;
11725    const {
11726      width,
11727      height
11728    } = img;
11729    const fillColor = this.current.fillColor;
11730    const isPatternFill = this.current.patternFill;
11731    const currentTransform = (0, _display_utils.getCurrentTransform)(ctx);
11732    let cache, cacheKey, scaled, maskCanvas;
11733    if ((img.bitmap || img.data) && img.count > 1) {
11734      const mainKey = img.bitmap || img.data.buffer;
11735      cacheKey = JSON.stringify(isPatternFill ? currentTransform : [currentTransform.slice(0, 4), fillColor]);
11736      cache = this._cachedBitmapsMap.get(mainKey);
11737      if (!cache) {
11738        cache = new Map();
11739        this._cachedBitmapsMap.set(mainKey, cache);
11740      }
11741      const cachedImage = cache.get(cacheKey);
11742      if (cachedImage && !isPatternFill) {
11743        const offsetX = Math.round(Math.min(currentTransform[0], currentTransform[2]) + currentTransform[4]);
11744        const offsetY = Math.round(Math.min(currentTransform[1], currentTransform[3]) + currentTransform[5]);
11745        return {
11746          canvas: cachedImage,
11747          offsetX,
11748          offsetY
11749        };
11750      }
11751      scaled = cachedImage;
11752    }
11753    if (!scaled) {
11754      maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height);
11755      putBinaryImageMask(maskCanvas.context, img);
11756    }
11757    let maskToCanvas = _util.Util.transform(currentTransform, [1 / width, 0, 0, -1 / height, 0, 0]);
11758    maskToCanvas = _util.Util.transform(maskToCanvas, [1, 0, 0, 1, 0, -height]);
11759    const cord1 = _util.Util.applyTransform([0, 0], maskToCanvas);
11760    const cord2 = _util.Util.applyTransform([width, height], maskToCanvas);
11761    const rect = _util.Util.normalizeRect([cord1[0], cord1[1], cord2[0], cord2[1]]);
11762    const drawnWidth = Math.round(rect[2] - rect[0]) || 1;
11763    const drawnHeight = Math.round(rect[3] - rect[1]) || 1;
11764    const fillCanvas = this.cachedCanvases.getCanvas("fillCanvas", drawnWidth, drawnHeight);
11765    const fillCtx = fillCanvas.context;
11766    const offsetX = Math.min(cord1[0], cord2[0]);
11767    const offsetY = Math.min(cord1[1], cord2[1]);
11768    fillCtx.translate(-offsetX, -offsetY);
11769    fillCtx.transform(...maskToCanvas);
11770    if (!scaled) {
11771      scaled = this._scaleImage(maskCanvas.canvas, (0, _display_utils.getCurrentTransformInverse)(fillCtx));
11772      scaled = scaled.img;
11773      if (cache && isPatternFill) {
11774        cache.set(cacheKey, scaled);
11775      }
11776    }
11777    fillCtx.imageSmoothingEnabled = getImageSmoothingEnabled((0, _display_utils.getCurrentTransform)(fillCtx), img.interpolate);
11778    drawImageAtIntegerCoords(fillCtx, scaled, 0, 0, scaled.width, scaled.height, 0, 0, width, height);
11779    fillCtx.globalCompositeOperation = "source-in";
11780    const inverse = _util.Util.transform((0, _display_utils.getCurrentTransformInverse)(fillCtx), [1, 0, 0, 1, -offsetX, -offsetY]);
11781    fillCtx.fillStyle = isPatternFill ? fillColor.getPattern(ctx, this, inverse, _pattern_helper.PathType.FILL) : fillColor;
11782    fillCtx.fillRect(0, 0, width, height);
11783    if (cache && !isPatternFill) {
11784      this.cachedCanvases.delete("fillCanvas");
11785      cache.set(cacheKey, fillCanvas.canvas);
11786    }
11787    return {
11788      canvas: fillCanvas.canvas,
11789      offsetX: Math.round(offsetX),
11790      offsetY: Math.round(offsetY)
11791    };
11792  }
11793  setLineWidth(width) {
11794    if (width !== this.current.lineWidth) {
11795      this._cachedScaleForStroking[0] = -1;
11796    }
11797    this.current.lineWidth = width;
11798    this.ctx.lineWidth = width;
11799  }
11800  setLineCap(style) {
11801    this.ctx.lineCap = LINE_CAP_STYLES[style];
11802  }
11803  setLineJoin(style) {
11804    this.ctx.lineJoin = LINE_JOIN_STYLES[style];
11805  }
11806  setMiterLimit(limit) {
11807    this.ctx.miterLimit = limit;
11808  }
11809  setDash(dashArray, dashPhase) {
11810    const ctx = this.ctx;
11811    if (ctx.setLineDash !== undefined) {
11812      ctx.setLineDash(dashArray);
11813      ctx.lineDashOffset = dashPhase;
11814    }
11815  }
11816  setRenderingIntent(intent) {}
11817  setFlatness(flatness) {}
11818  setGState(states) {
11819    for (const [key, value] of states) {
11820      switch (key) {
11821        case "LW":
11822          this.setLineWidth(value);
11823          break;
11824        case "LC":
11825          this.setLineCap(value);
11826          break;
11827        case "LJ":
11828          this.setLineJoin(value);
11829          break;
11830        case "ML":
11831          this.setMiterLimit(value);
11832          break;
11833        case "D":
11834          this.setDash(value[0], value[1]);
11835          break;
11836        case "RI":
11837          this.setRenderingIntent(value);
11838          break;
11839        case "FL":
11840          this.setFlatness(value);
11841          break;
11842        case "Font":
11843          this.setFont(value[0], value[1]);
11844          break;
11845        case "CA":
11846          this.current.strokeAlpha = value;
11847          break;
11848        case "ca":
11849          this.current.fillAlpha = value;
11850          this.ctx.globalAlpha = value;
11851          break;
11852        case "BM":
11853          this.ctx.globalCompositeOperation = value;
11854          break;
11855        case "SMask":
11856          this.current.activeSMask = value ? this.tempSMask : null;
11857          this.tempSMask = null;
11858          this.checkSMaskState();
11859          break;
11860        case "TR":
11861          this.ctx.filter = this.current.transferMaps = this.filterFactory.addFilter(value);
11862          break;
11863      }
11864    }
11865  }
11866  get inSMaskMode() {
11867    return !!this.suspendedCtx;
11868  }
11869  checkSMaskState() {
11870    const inSMaskMode = this.inSMaskMode;
11871    if (this.current.activeSMask && !inSMaskMode) {
11872      this.beginSMaskMode();
11873    } else if (!this.current.activeSMask && inSMaskMode) {
11874      this.endSMaskMode();
11875    }
11876  }
11877  beginSMaskMode() {
11878    if (this.inSMaskMode) {
11879      throw new Error("beginSMaskMode called while already in smask mode");
11880    }
11881    const drawnWidth = this.ctx.canvas.width;
11882    const drawnHeight = this.ctx.canvas.height;
11883    const cacheId = "smaskGroupAt" + this.groupLevel;
11884    const scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight);
11885    this.suspendedCtx = this.ctx;
11886    this.ctx = scratchCanvas.context;
11887    const ctx = this.ctx;
11888    ctx.setTransform(...(0, _display_utils.getCurrentTransform)(this.suspendedCtx));
11889    copyCtxState(this.suspendedCtx, ctx);
11890    mirrorContextOperations(ctx, this.suspendedCtx);
11891    this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]);
11892  }
11893  endSMaskMode() {
11894    if (!this.inSMaskMode) {
11895      throw new Error("endSMaskMode called while not in smask mode");
11896    }
11897    this.ctx._removeMirroring();
11898    copyCtxState(this.ctx, this.suspendedCtx);
11899    this.ctx = this.suspendedCtx;
11900    this.suspendedCtx = null;
11901  }
11902  compose(dirtyBox) {
11903    if (!this.current.activeSMask) {
11904      return;
11905    }
11906    if (!dirtyBox) {
11907      dirtyBox = [0, 0, this.ctx.canvas.width, this.ctx.canvas.height];
11908    } else {
11909      dirtyBox[0] = Math.floor(dirtyBox[0]);
11910      dirtyBox[1] = Math.floor(dirtyBox[1]);
11911      dirtyBox[2] = Math.ceil(dirtyBox[2]);
11912      dirtyBox[3] = Math.ceil(dirtyBox[3]);
11913    }
11914    const smask = this.current.activeSMask;
11915    const suspendedCtx = this.suspendedCtx;
11916    composeSMask(suspendedCtx, smask, this.ctx, dirtyBox);
11917    this.ctx.save();
11918    this.ctx.setTransform(1, 0, 0, 1, 0, 0);
11919    this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height);
11920    this.ctx.restore();
11921  }
11922  save() {
11923    if (this.inSMaskMode) {
11924      copyCtxState(this.ctx, this.suspendedCtx);
11925      this.suspendedCtx.save();
11926    } else {
11927      this.ctx.save();
11928    }
11929    const old = this.current;
11930    this.stateStack.push(old);
11931    this.current = old.clone();
11932  }
11933  restore() {
11934    if (this.stateStack.length === 0 && this.inSMaskMode) {
11935      this.endSMaskMode();
11936    }
11937    if (this.stateStack.length !== 0) {
11938      this.current = this.stateStack.pop();
11939      if (this.inSMaskMode) {
11940        this.suspendedCtx.restore();
11941        copyCtxState(this.suspendedCtx, this.ctx);
11942      } else {
11943        this.ctx.restore();
11944      }
11945      this.checkSMaskState();
11946      this.pendingClip = null;
11947      this._cachedScaleForStroking[0] = -1;
11948      this._cachedGetSinglePixelWidth = null;
11949    }
11950  }
11951  transform(a, b, c, d, e, f) {
11952    this.ctx.transform(a, b, c, d, e, f);
11953    this._cachedScaleForStroking[0] = -1;
11954    this._cachedGetSinglePixelWidth = null;
11955  }
11956  constructPath(ops, args, minMax) {
11957    const ctx = this.ctx;
11958    const current = this.current;
11959    let x = current.x,
11960      y = current.y;
11961    let startX, startY;
11962    const currentTransform = (0, _display_utils.getCurrentTransform)(ctx);
11963    const isScalingMatrix = currentTransform[0] === 0 && currentTransform[3] === 0 || currentTransform[1] === 0 && currentTransform[2] === 0;
11964    const minMaxForBezier = isScalingMatrix ? minMax.slice(0) : null;
11965    for (let i = 0, j = 0, ii = ops.length; i < ii; i++) {
11966      switch (ops[i] | 0) {
11967        case _util.OPS.rectangle:
11968          x = args[j++];
11969          y = args[j++];
11970          const width = args[j++];
11971          const height = args[j++];
11972          const xw = x + width;
11973          const yh = y + height;
11974          ctx.moveTo(x, y);
11975          if (width === 0 || height === 0) {
11976            ctx.lineTo(xw, yh);
11977          } else {
11978            ctx.lineTo(xw, y);
11979            ctx.lineTo(xw, yh);
11980            ctx.lineTo(x, yh);
11981          }
11982          if (!isScalingMatrix) {
11983            current.updateRectMinMax(currentTransform, [x, y, xw, yh]);
11984          }
11985          ctx.closePath();
11986          break;
11987        case _util.OPS.moveTo:
11988          x = args[j++];
11989          y = args[j++];
11990          ctx.moveTo(x, y);
11991          if (!isScalingMatrix) {
11992            current.updatePathMinMax(currentTransform, x, y);
11993          }
11994          break;
11995        case _util.OPS.lineTo:
11996          x = args[j++];
11997          y = args[j++];
11998          ctx.lineTo(x, y);
11999          if (!isScalingMatrix) {
12000            current.updatePathMinMax(currentTransform, x, y);
12001          }
12002          break;
12003        case _util.OPS.curveTo:
12004          startX = x;
12005          startY = y;
12006          x = args[j + 4];
12007          y = args[j + 5];
12008          ctx.bezierCurveTo(args[j], args[j + 1], args[j + 2], args[j + 3], x, y);
12009          current.updateCurvePathMinMax(currentTransform, startX, startY, args[j], args[j + 1], args[j + 2], args[j + 3], x, y, minMaxForBezier);
12010          j += 6;
12011          break;
12012        case _util.OPS.curveTo2:
12013          startX = x;
12014          startY = y;
12015          ctx.bezierCurveTo(x, y, args[j], args[j + 1], args[j + 2], args[j + 3]);
12016          current.updateCurvePathMinMax(currentTransform, startX, startY, x, y, args[j], args[j + 1], args[j + 2], args[j + 3], minMaxForBezier);
12017          x = args[j + 2];
12018          y = args[j + 3];
12019          j += 4;
12020          break;
12021        case _util.OPS.curveTo3:
12022          startX = x;
12023          startY = y;
12024          x = args[j + 2];
12025          y = args[j + 3];
12026          ctx.bezierCurveTo(args[j], args[j + 1], x, y, x, y);
12027          current.updateCurvePathMinMax(currentTransform, startX, startY, args[j], args[j + 1], x, y, x, y, minMaxForBezier);
12028          j += 4;
12029          break;
12030        case _util.OPS.closePath:
12031          ctx.closePath();
12032          break;
12033      }
12034    }
12035    if (isScalingMatrix) {
12036      current.updateScalingPathMinMax(currentTransform, minMaxForBezier);
12037    }
12038    current.setCurrentPoint(x, y);
12039  }
12040  closePath() {
12041    this.ctx.closePath();
12042  }
12043  stroke() {
12044    let consumePath = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
12045    const ctx = this.ctx;
12046    const strokeColor = this.current.strokeColor;
12047    ctx.globalAlpha = this.current.strokeAlpha;
12048    if (this.contentVisible) {
12049      if (typeof strokeColor === "object" && strokeColor?.getPattern) {
12050        ctx.save();
12051        ctx.strokeStyle = strokeColor.getPattern(ctx, this, (0, _display_utils.getCurrentTransformInverse)(ctx), _pattern_helper.PathType.STROKE);
12052        this.rescaleAndStroke(false);
12053        ctx.restore();
12054      } else {
12055        this.rescaleAndStroke(true);
12056      }
12057    }
12058    if (consumePath) {
12059      this.consumePath(this.current.getClippedPathBoundingBox());
12060    }
12061    ctx.globalAlpha = this.current.fillAlpha;
12062  }
12063  closeStroke() {
12064    this.closePath();
12065    this.stroke();
12066  }
12067  fill() {
12068    let consumePath = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
12069    const ctx = this.ctx;
12070    const fillColor = this.current.fillColor;
12071    const isPatternFill = this.current.patternFill;
12072    let needRestore = false;
12073    if (isPatternFill) {
12074      ctx.save();
12075      ctx.fillStyle = fillColor.getPattern(ctx, this, (0, _display_utils.getCurrentTransformInverse)(ctx), _pattern_helper.PathType.FILL);
12076      needRestore = true;
12077    }
12078    const intersect = this.current.getClippedPathBoundingBox();
12079    if (this.contentVisible && intersect !== null) {
12080      if (this.pendingEOFill) {
12081        ctx.fill("evenodd");
12082        this.pendingEOFill = false;
12083      } else {
12084        ctx.fill();
12085      }
12086    }
12087    if (needRestore) {
12088      ctx.restore();
12089    }
12090    if (consumePath) {
12091      this.consumePath(intersect);
12092    }
12093  }
12094  eoFill() {
12095    this.pendingEOFill = true;
12096    this.fill();
12097  }
12098  fillStroke() {
12099    this.fill(false);
12100    this.stroke(false);
12101    this.consumePath();
12102  }
12103  eoFillStroke() {
12104    this.pendingEOFill = true;
12105    this.fillStroke();
12106  }
12107  closeFillStroke() {
12108    this.closePath();
12109    this.fillStroke();
12110  }
12111  closeEOFillStroke() {
12112    this.pendingEOFill = true;
12113    this.closePath();
12114    this.fillStroke();
12115  }
12116  endPath() {
12117    this.consumePath();
12118  }
12119  clip() {
12120    this.pendingClip = NORMAL_CLIP;
12121  }
12122  eoClip() {
12123    this.pendingClip = EO_CLIP;
12124  }
12125  beginText() {
12126    this.current.textMatrix = _util.IDENTITY_MATRIX;
12127    this.current.textMatrixScale = 1;
12128    this.current.x = this.current.lineX = 0;
12129    this.current.y = this.current.lineY = 0;
12130  }
12131  endText() {
12132    const paths = this.pendingTextPaths;
12133    const ctx = this.ctx;
12134    if (paths === undefined) {
12135      ctx.beginPath();
12136      return;
12137    }
12138    ctx.save();
12139    ctx.beginPath();
12140    for (const path of paths) {
12141      ctx.setTransform(...path.transform);
12142      ctx.translate(path.x, path.y);
12143      path.addToPath(ctx, path.fontSize);
12144    }
12145    ctx.restore();
12146    ctx.clip();
12147    ctx.beginPath();
12148    delete this.pendingTextPaths;
12149  }
12150  setCharSpacing(spacing) {
12151    this.current.charSpacing = spacing;
12152  }
12153  setWordSpacing(spacing) {
12154    this.current.wordSpacing = spacing;
12155  }
12156  setHScale(scale) {
12157    this.current.textHScale = scale / 100;
12158  }
12159  setLeading(leading) {
12160    this.current.leading = -leading;
12161  }
12162  setFont(fontRefName, size) {
12163    const fontObj = this.commonObjs.get(fontRefName);
12164    const current = this.current;
12165    if (!fontObj) {
12166      throw new Error(`Can't find font for ${fontRefName}`);
12167    }
12168    current.fontMatrix = fontObj.fontMatrix || _util.FONT_IDENTITY_MATRIX;
12169    if (current.fontMatrix[0] === 0 || current.fontMatrix[3] === 0) {
12170      (0, _util.warn)("Invalid font matrix for font " + fontRefName);
12171    }
12172    if (size < 0) {
12173      size = -size;
12174      current.fontDirection = -1;
12175    } else {
12176      current.fontDirection = 1;
12177    }
12178    this.current.font = fontObj;
12179    this.current.fontSize = size;
12180    if (fontObj.isType3Font) {
12181      return;
12182    }
12183    const name = fontObj.loadedName || "sans-serif";
12184    const typeface = fontObj.systemFontInfo?.css || `"${name}", ${fontObj.fallbackName}`;
12185    let bold = "normal";
12186    if (fontObj.black) {
12187      bold = "900";
12188    } else if (fontObj.bold) {
12189      bold = "bold";
12190    }
12191    const italic = fontObj.italic ? "italic" : "normal";
12192    let browserFontSize = size;
12193    if (size < MIN_FONT_SIZE) {
12194      browserFontSize = MIN_FONT_SIZE;
12195    } else if (size > MAX_FONT_SIZE) {
12196      browserFontSize = MAX_FONT_SIZE;
12197    }
12198    this.current.fontSizeScale = size / browserFontSize;
12199    this.ctx.font = `${italic} ${bold} ${browserFontSize}px ${typeface}`;
12200  }
12201  setTextRenderingMode(mode) {
12202    this.current.textRenderingMode = mode;
12203  }
12204  setTextRise(rise) {
12205    this.current.textRise = rise;
12206  }
12207  moveText(x, y) {
12208    this.current.x = this.current.lineX += x;
12209    this.current.y = this.current.lineY += y;
12210  }
12211  setLeadingMoveText(x, y) {
12212    this.setLeading(-y);
12213    this.moveText(x, y);
12214  }
12215  setTextMatrix(a, b, c, d, e, f) {
12216    this.current.textMatrix = [a, b, c, d, e, f];
12217    this.current.textMatrixScale = Math.hypot(a, b);
12218    this.current.x = this.current.lineX = 0;
12219    this.current.y = this.current.lineY = 0;
12220  }
12221  nextLine() {
12222    this.moveText(0, this.current.leading);
12223  }
12224  paintChar(character, x, y, patternTransform) {
12225    const ctx = this.ctx;
12226    const current = this.current;
12227    const font = current.font;
12228    const textRenderingMode = current.textRenderingMode;
12229    const fontSize = current.fontSize / current.fontSizeScale;
12230    const fillStrokeMode = textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK;
12231    const isAddToPathSet = !!(textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG);
12232    const patternFill = current.patternFill && !font.missingFile;
12233    let addToPath;
12234    if (font.disableFontFace || isAddToPathSet || patternFill) {
12235      addToPath = font.getPathGenerator(this.commonObjs, character);
12236    }
12237    if (font.disableFontFace || patternFill) {
12238      ctx.save();
12239      ctx.translate(x, y);
12240      ctx.beginPath();
12241      addToPath(ctx, fontSize);
12242      if (patternTransform) {
12243        ctx.setTransform(...patternTransform);
12244      }
12245      if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {
12246        ctx.fill();
12247      }
12248      if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {
12249        ctx.stroke();
12250      }
12251      ctx.restore();
12252    } else {
12253      if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {
12254        ctx.fillText(character, x, y);
12255      }
12256      if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {
12257        ctx.strokeText(character, x, y);
12258      }
12259    }
12260    if (isAddToPathSet) {
12261      const paths = this.pendingTextPaths ||= [];
12262      paths.push({
12263        transform: (0, _display_utils.getCurrentTransform)(ctx),
12264        x,
12265        y,
12266        fontSize,
12267        addToPath
12268      });
12269    }
12270  }
12271  get isFontSubpixelAAEnabled() {
12272    const {
12273      context: ctx
12274    } = this.cachedCanvases.getCanvas("isFontSubpixelAAEnabled", 10, 10);
12275    ctx.scale(1.5, 1);
12276    ctx.fillText("I", 0, 10);
12277    const data = ctx.getImageData(0, 0, 10, 10).data;
12278    let enabled = false;
12279    for (let i = 3; i < data.length; i += 4) {
12280      if (data[i] > 0 && data[i] < 255) {
12281        enabled = true;
12282        break;
12283      }
12284    }
12285    return (0, _util.shadow)(this, "isFontSubpixelAAEnabled", enabled);
12286  }
12287  showText(glyphs) {
12288    const current = this.current;
12289    const font = current.font;
12290    if (font.isType3Font) {
12291      return this.showType3Text(glyphs);
12292    }
12293    const fontSize = current.fontSize;
12294    if (fontSize === 0) {
12295      return undefined;
12296    }
12297    const ctx = this.ctx;
12298    const fontSizeScale = current.fontSizeScale;
12299    const charSpacing = current.charSpacing;
12300    const wordSpacing = current.wordSpacing;
12301    const fontDirection = current.fontDirection;
12302    const textHScale = current.textHScale * fontDirection;
12303    const glyphsLength = glyphs.length;
12304    const vertical = font.vertical;
12305    const spacingDir = vertical ? 1 : -1;
12306    const defaultVMetrics = font.defaultVMetrics;
12307    const widthAdvanceScale = fontSize * current.fontMatrix[0];
12308    const simpleFillText = current.textRenderingMode === _util.TextRenderingMode.FILL && !font.disableFontFace && !current.patternFill;
12309    ctx.save();
12310    ctx.transform(...current.textMatrix);
12311    ctx.translate(current.x, current.y + current.textRise);
12312    if (fontDirection > 0) {
12313      ctx.scale(textHScale, -1);
12314    } else {
12315      ctx.scale(textHScale, 1);
12316    }
12317    let patternTransform;
12318    if (current.patternFill) {
12319      ctx.save();
12320      const pattern = current.fillColor.getPattern(ctx, this, (0, _display_utils.getCurrentTransformInverse)(ctx), _pattern_helper.PathType.FILL);
12321      patternTransform = (0, _display_utils.getCurrentTransform)(ctx);
12322      ctx.restore();
12323      ctx.fillStyle = pattern;
12324    }
12325    let lineWidth = current.lineWidth;
12326    const scale = current.textMatrixScale;
12327    if (scale === 0 || lineWidth === 0) {
12328      const fillStrokeMode = current.textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK;
12329      if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {
12330        lineWidth = this.getSinglePixelWidth();
12331      }
12332    } else {
12333      lineWidth /= scale;
12334    }
12335    if (fontSizeScale !== 1.0) {
12336      ctx.scale(fontSizeScale, fontSizeScale);
12337      lineWidth /= fontSizeScale;
12338    }
12339    ctx.lineWidth = lineWidth;
12340    if (font.isInvalidPDFjsFont) {
12341      const chars = [];
12342      let width = 0;
12343      for (const glyph of glyphs) {
12344        chars.push(glyph.unicode);
12345        width += glyph.width;
12346      }
12347      ctx.fillText(chars.join(""), 0, 0);
12348      current.x += width * widthAdvanceScale * textHScale;
12349      ctx.restore();
12350      this.compose();
12351      return undefined;
12352    }
12353    let x = 0,
12354      i;
12355    for (i = 0; i < glyphsLength; ++i) {
12356      const glyph = glyphs[i];
vendor: 3,295 bytes, lines 12357-12441
12357      if (typeof glyph === "number") {
12358        x += spacingDir * glyph * fontSize / 1000;
12359        continue;
12360      }
12361      let restoreNeeded = false;
12362      const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;
12363      const character = glyph.fontChar;
12364      const accent = glyph.accent;
12365      let scaledX, scaledY;
12366      let width = glyph.width;
12367      if (vertical) {
12368        const vmetric = glyph.vmetric || defaultVMetrics;
12369        const vx = -(glyph.vmetric ? vmetric[1] : width * 0.5) * widthAdvanceScale;
12370        const vy = vmetric[2] * widthAdvanceScale;
12371        width = vmetric ? -vmetric[0] : width;
12372        scaledX = vx / fontSizeScale;
12373        scaledY = (x + vy) / fontSizeScale;
12374      } else {
12375        scaledX = x / fontSizeScale;
12376        scaledY = 0;
12377      }
12378      if (font.remeasure && width > 0) {
12379        const measuredWidth = ctx.measureText(character).width * 1000 / fontSize * fontSizeScale;
12380        if (width < measuredWidth && this.isFontSubpixelAAEnabled) {
12381          const characterScaleX = width / measuredWidth;
12382          restoreNeeded = true;
12383          ctx.save();
12384          ctx.scale(characterScaleX, 1);
12385          scaledX /= characterScaleX;
12386        } else if (width !== measuredWidth) {
12387          scaledX += (width - measuredWidth) / 2000 * fontSize / fontSizeScale;
12388        }
12389      }
12390      if (this.contentVisible && (glyph.isInFont || font.missingFile)) {
12391        if (simpleFillText && !accent) {
12392          ctx.fillText(character, scaledX, scaledY);
12393        } else {
12394          this.paintChar(character, scaledX, scaledY, patternTransform);
12395          if (accent) {
12396            const scaledAccentX = scaledX + fontSize * accent.offset.x / fontSizeScale;
12397            const scaledAccentY = scaledY - fontSize * accent.offset.y / fontSizeScale;
12398            this.paintChar(accent.fontChar, scaledAccentX, scaledAccentY, patternTransform);
12399          }
12400        }
12401      }
12402      const charWidth = vertical ? width * widthAdvanceScale - spacing * fontDirection : width * widthAdvanceScale + spacing * fontDirection;
12403      x += charWidth;
12404      if (restoreNeeded) {
12405        ctx.restore();
12406      }
12407    }
12408    if (vertical) {
12409      current.y -= x;
12410    } else {
12411      current.x += x * textHScale;
12412    }
12413    ctx.restore();
12414    this.compose();
12415    return undefined;
12416  }
12417  showType3Text(glyphs) {
12418    const ctx = this.ctx;
12419    const current = this.current;
12420    const font = current.font;
12421    const fontSize = current.fontSize;
12422    const fontDirection = current.fontDirection;
12423    const spacingDir = font.vertical ? 1 : -1;
12424    const charSpacing = current.charSpacing;
12425    const wordSpacing = current.wordSpacing;
12426    const textHScale = current.textHScale * fontDirection;
12427    const fontMatrix = current.fontMatrix || _util.FONT_IDENTITY_MATRIX;
12428    const glyphsLength = glyphs.length;
12429    const isTextInvisible = current.textRenderingMode === _util.TextRenderingMode.INVISIBLE;
12430    let i, glyph, width, spacingLength;
12431    if (isTextInvisible || fontSize === 0) {
12432      return;
12433    }
12434    this._cachedScaleForStroking[0] = -1;
12435    this._cachedGetSinglePixelWidth = null;
12436    ctx.save();
12437    ctx.transform(...current.textMatrix);
12438    ctx.translate(current.x, current.y);
12439    ctx.scale(textHScale, fontDirection);
12440    for (i = 0; i < glyphsLength; ++i) {
12441      glyph = glyphs[i];
12442      if (typeof glyph === "number") {
12443        spacingLength = spacingDir * glyph * fontSize / 1000;
12444        this.ctx.translate(spacingLength, 0);
12445        current.x += spacingLength * textHScale;
12446        continue;
12447      }
12448      const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;
12449      const operatorList = font.charProcOperatorList[glyph.operatorListId];
12450      if (!operatorList) {
12451        (0, _util.warn)(`Type3 character "${glyph.operatorListId}" is not available.`);
12452        continue;
12453      }
12454      if (this.contentVisible) {
12455        this.processingType3 = glyph;
12456        this.save();
12457        ctx.scale(fontSize, fontSize);
12458        ctx.transform(...fontMatrix);
12459        this.executeOperatorList(operatorList);
12460        this.restore();
12461      }
12462      const transformed = _util.Util.applyTransform([glyph.width, 0], fontMatrix);
12463      width = transformed[0] * fontSize + spacing;
12464      ctx.translate(width, 0);
12465      current.x += width * textHScale;
12466    }
12467    ctx.restore();
12468    this.processingType3 = null;
12469  }
12470  setCharWidth(xWidth, yWidth) {}
12471  setCharWidthAndBounds(xWidth, yWidth, llx, lly, urx, ury) {
12472    this.ctx.rect(llx, lly, urx - llx, ury - lly);
12473    this.ctx.clip();
12474    this.endPath();
12475  }
12476  getColorN_Pattern(IR) {
12477    let pattern;
12478    if (IR[0] === "TilingPattern") {
12479      const color = IR[1];
12480      const baseTransform = this.baseTransform || (0, _display_utils.getCurrentTransform)(this.ctx);
12481      const canvasGraphicsFactory = {
12482        createCanvasGraphics: ctx => {
12483          return new CanvasGraphics(ctx, this.commonObjs, this.objs, this.canvasFactory, this.filterFactory, {
12484            optionalContentConfig: this.optionalContentConfig,
12485            markedContentStack: this.markedContentStack
12486          });
12487        }
12488      };
12489      pattern = new _pattern_helper.TilingPattern(IR, color, this.ctx, canvasGraphicsFactory, baseTransform);
12490    } else {
12491      pattern = this._getPattern(IR[1], IR[2]);
12492    }
12493    return pattern;
12494  }
12495  setStrokeColorN() {
12496    this.current.strokeColor = this.getColorN_Pattern(arguments);
12497  }
12498  setFillColorN() {
12499    this.current.fillColor = this.getColorN_Pattern(arguments);
12500    this.current.patternFill = true;
12501  }
12502  setStrokeRGBColor(r, g, b) {
12503    const color = _util.Util.makeHexColor(r, g, b);
12504    this.ctx.strokeStyle = color;
12505    this.current.strokeColor = color;
12506  }
12507  setFillRGBColor(r, g, b) {
12508    const color = _util.Util.makeHexColor(r, g, b);
12509    this.ctx.fillStyle = color;
12510    this.current.fillColor = color;
12511    this.current.patternFill = false;
12512  }
12513  _getPattern(objId) {
12514    let matrix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
12515    let pattern;
12516    if (this.cachedPatterns.has(objId)) {
12517      pattern = this.cachedPatterns.get(objId);
12518    } else {
12519      pattern = (0, _pattern_helper.getShadingPattern)(this.getObject(objId));
12520      this.cachedPatterns.set(objId, pattern);
12521    }
12522    if (matrix) {
12523      pattern.matrix = matrix;
12524    }
12525    return pattern;
12526  }
12527  shadingFill(objId) {
12528    if (!this.contentVisible) {
12529      return;
12530    }
12531    const ctx = this.ctx;
12532    this.save();
12533    const pattern = this._getPattern(objId);
12534    ctx.fillStyle = pattern.getPattern(ctx, this, (0, _display_utils.getCurrentTransformInverse)(ctx), _pattern_helper.PathType.SHADING);
12535    const inv = (0, _display_utils.getCurrentTransformInverse)(ctx);
12536    if (inv) {
12537      const {
12538        width,
12539        height
12540      } = ctx.canvas;
12541      const [x0, y0, x1, y1] = _util.Util.getAxialAlignedBoundingBox([0, 0, width, height], inv);
12542      this.ctx.fillRect(x0, y0, x1 - x0, y1 - y0);
12543    } else {
12544      this.ctx.fillRect(-1e10, -1e10, 2e10, 2e10);
12545    }
12546    this.compose(this.current.getClippedPathBoundingBox());
12547    this.restore();
12548  }
12549  beginInlineImage() {
12550    (0, _util.unreachable)("Should not call beginInlineImage");
12551  }
12552  beginImageData() {
12553    (0, _util.unreachable)("Should not call beginImageData");
12554  }
12555  paintFormXObjectBegin(matrix, bbox) {
12556    if (!this.contentVisible) {
12557      return;
12558    }
12559    this.save();
12560    this.baseTransformStack.push(this.baseTransform);
12561    if (Array.isArray(matrix) && matrix.length === 6) {
12562      this.transform(...matrix);
12563    }
12564    this.baseTransform = (0, _display_utils.getCurrentTransform)(this.ctx);
12565    if (bbox) {
12566      const width = bbox[2] - bbox[0];
12567      const height = bbox[3] - bbox[1];
12568      this.ctx.rect(bbox[0], bbox[1], width, height);
12569      this.current.updateRectMinMax((0, _display_utils.getCurrentTransform)(this.ctx), bbox);
12570      this.clip();
12571      this.endPath();
12572    }
12573  }
12574  paintFormXObjectEnd() {
12575    if (!this.contentVisible) {
12576      return;
12577    }
12578    this.restore();
12579    this.baseTransform = this.baseTransformStack.pop();
12580  }
12581  beginGroup(group) {
12582    if (!this.contentVisible) {
12583      return;
12584    }
12585    this.save();
12586    if (this.inSMaskMode) {
12587      this.endSMaskMode();
12588      this.current.activeSMask = null;
12589    }
12590    const currentCtx = this.ctx;
12591    if (!group.isolated) {
12592      (0, _util.info)("TODO: Support non-isolated groups.");
12593    }
12594    if (group.knockout) {
12595      (0, _util.warn)("Knockout groups not supported.");
12596    }
12597    const currentTransform = (0, _display_utils.getCurrentTransform)(currentCtx);
12598    if (group.matrix) {
12599      currentCtx.transform(...group.matrix);
12600    }
12601    if (!group.bbox) {
12602      throw new Error("Bounding box is required.");
12603    }
12604    let bounds = _util.Util.getAxialAlignedBoundingBox(group.bbox, (0, _display_utils.getCurrentTransform)(currentCtx));
12605    const canvasBounds = [0, 0, currentCtx.canvas.width, currentCtx.canvas.height];
12606    bounds = _util.Util.intersect(bounds, canvasBounds) || [0, 0, 0, 0];
12607    const offsetX = Math.floor(bounds[0]);
12608    const offsetY = Math.floor(bounds[1]);
12609    let drawnWidth = Math.max(Math.ceil(bounds[2]) - offsetX, 1);
12610    let drawnHeight = Math.max(Math.ceil(bounds[3]) - offsetY, 1);
12611    let scaleX = 1,
12612      scaleY = 1;
12613    if (drawnWidth > MAX_GROUP_SIZE) {
12614      scaleX = drawnWidth / MAX_GROUP_SIZE;
12615      drawnWidth = MAX_GROUP_SIZE;
12616    }
12617    if (drawnHeight > MAX_GROUP_SIZE) {
12618      scaleY = drawnHeight / MAX_GROUP_SIZE;
12619      drawnHeight = MAX_GROUP_SIZE;
12620    }
12621    this.current.startNewPathAndClipBox([0, 0, drawnWidth, drawnHeight]);
12622    let cacheId = "groupAt" + this.groupLevel;
12623    if (group.smask) {
12624      cacheId += "_smask_" + this.smaskCounter++ % 2;
12625    }
12626    const scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight);
12627    const groupCtx = scratchCanvas.context;
12628    groupCtx.scale(1 / scaleX, 1 / scaleY);
12629    groupCtx.translate(-offsetX, -offsetY);
12630    groupCtx.transform(...currentTransform);
12631    if (group.smask) {
12632      this.smaskStack.push({
12633        canvas: scratchCanvas.canvas,
12634        context: groupCtx,
12635        offsetX,
12636        offsetY,
12637        scaleX,
12638        scaleY,
12639        subtype: group.smask.subtype,
12640        backdrop: group.smask.backdrop,
12641        transferMap: group.smask.transferMap || null,
12642        startTransformInverse: null
12643      });
12644    } else {
12645      currentCtx.setTransform(1, 0, 0, 1, 0, 0);
12646      currentCtx.translate(offsetX, offsetY);
12647      currentCtx.scale(scaleX, scaleY);
12648      currentCtx.save();
12649    }
12650    copyCtxState(currentCtx, groupCtx);
12651    this.ctx = groupCtx;
12652    this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]);
12653    this.groupStack.push(currentCtx);
12654    this.groupLevel++;
12655  }
12656  endGroup(group) {
12657    if (!this.contentVisible) {
12658      return;
12659    }
12660    this.groupLevel--;
12661    const groupCtx = this.ctx;
12662    const ctx = this.groupStack.pop();
12663    this.ctx = ctx;
12664    this.ctx.imageSmoothingEnabled = false;
12665    if (group.smask) {
12666      this.tempSMask = this.smaskStack.pop();
12667      this.restore();
12668    } else {
12669      this.ctx.restore();
12670      const currentMtx = (0, _display_utils.getCurrentTransform)(this.ctx);
12671      this.restore();
12672      this.ctx.save();
12673      this.ctx.setTransform(...currentMtx);
12674      const dirtyBox = _util.Util.getAxialAlignedBoundingBox([0, 0, groupCtx.canvas.width, groupCtx.canvas.height], currentMtx);
12675      this.ctx.drawImage(groupCtx.canvas, 0, 0);
12676      this.ctx.restore();
12677      this.compose(dirtyBox);
12678    }
12679  }
12680  beginAnnotation(id, rect, transform, matrix, hasOwnCanvas) {
12681    this.#restoreInitialState();
12682    resetCtxToDefault(this.ctx);
12683    this.ctx.save();
12684    this.save();
12685    if (this.baseTransform) {
12686      this.ctx.setTransform(...this.baseTransform);
12687    }
12688    if (Array.isArray(rect) && rect.length === 4) {
12689      const width = rect[2] - rect[0];
12690      const height = rect[3] - rect[1];
12691      if (hasOwnCanvas && this.annotationCanvasMap) {
12692        transform = transform.slice();
12693        transform[4] -= rect[0];
12694        transform[5] -= rect[1];
12695        rect = rect.slice();
12696        rect[0] = rect[1] = 0;
12697        rect[2] = width;
12698        rect[3] = height;
12699        const [scaleX, scaleY] = _util.Util.singularValueDecompose2dScale((0, _display_utils.getCurrentTransform)(this.ctx));
12700        const {
12701          viewportScale
12702        } = this;
12703        const canvasWidth = Math.ceil(width * this.outputScaleX * viewportScale);
12704        const canvasHeight = Math.ceil(height * this.outputScaleY * viewportScale);
12705        this.annotationCanvas = this.canvasFactory.create(canvasWidth, canvasHeight);
12706        const {
12707          canvas,
12708          context
12709        } = this.annotationCanvas;
12710        this.annotationCanvasMap.set(id, canvas);
12711        this.annotationCanvas.savedCtx = this.ctx;
12712        this.ctx = context;
12713        this.ctx.save();
12714        this.ctx.setTransform(scaleX, 0, 0, -scaleY, 0, height * scaleY);
12715        resetCtxToDefault(this.ctx);
12716      } else {
12717        resetCtxToDefault(this.ctx);
12718        this.ctx.rect(rect[0], rect[1], width, height);
12719        this.ctx.clip();
12720        this.endPath();
12721      }
12722    }
12723    this.current = new CanvasExtraState(this.ctx.canvas.width, this.ctx.canvas.height);
12724    this.transform(...transform);
12725    this.transform(...matrix);
12726  }
12727  endAnnotation() {
12728    if (this.annotationCanvas) {
12729      this.ctx.restore();
12730      this.#drawFilter();
12731      this.ctx = this.annotationCanvas.savedCtx;
12732      delete this.annotationCanvas.savedCtx;
12733      delete this.annotationCanvas;
12734    }
12735  }
12736  paintImageMaskXObject(img) {
12737    if (!this.contentVisible) {
12738      return;
12739    }
12740    const count = img.count;
12741    img = this.getObject(img.data, img);
12742    img.count = count;
12743    const ctx = this.ctx;
12744    const glyph = this.processingType3;
12745    if (glyph) {
12746      if (glyph.compiled === undefined) {
12747        glyph.compiled = compileType3Glyph(img);
12748      }
12749      if (glyph.compiled) {
12750        glyph.compiled(ctx);
12751        return;
12752      }
12753    }
12754    const mask = this._createMaskCanvas(img);
12755    const maskCanvas = mask.canvas;
12756    ctx.save();
12757    ctx.setTransform(1, 0, 0, 1, 0, 0);
12758    ctx.drawImage(maskCanvas, mask.offsetX, mask.offsetY);
12759    ctx.restore();
12760    this.compose();
12761  }
12762  paintImageMaskXObjectRepeat(img, scaleX) {
12763    let skewX = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
12764    let skewY = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;
12765    let scaleY = arguments.length > 4 ? arguments[4] : undefined;
12766    let positions = arguments.length > 5 ? arguments[5] : undefined;
12767    if (!this.contentVisible) {
12768      return;
12769    }
12770    img = this.getObject(img.data, img);
12771    const ctx = this.ctx;
12772    ctx.save();
12773    const currentTransform = (0, _display_utils.getCurrentTransform)(ctx);
12774    ctx.transform(scaleX, skewX, skewY, scaleY, 0, 0);
12775    const mask = this._createMaskCanvas(img);
12776    ctx.setTransform(1, 0, 0, 1, mask.offsetX - currentTransform[4], mask.offsetY - currentTransform[5]);
12777    for (let i = 0, ii = positions.length; i < ii; i += 2) {
12778      const trans = _util.Util.transform(currentTransform, [scaleX, skewX, skewY, scaleY, positions[i], positions[i + 1]]);
12779      const [x, y] = _util.Util.applyTransform([0, 0], trans);
12780      ctx.drawImage(mask.canvas, x, y);
12781    }
12782    ctx.restore();
12783    this.compose();
12784  }
12785  paintImageMaskXObjectGroup(images) {
12786    if (!this.contentVisible) {
12787      return;
12788    }
12789    const ctx = this.ctx;
12790    const fillColor = this.current.fillColor;
12791    const isPatternFill = this.current.patternFill;
12792    for (const image of images) {
12793      const {
12794        data,
12795        width,
12796        height,
12797        transform
12798      } = image;
12799      const maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height);
12800      const maskCtx = maskCanvas.context;
12801      maskCtx.save();
12802      const img = this.getObject(data, image);
12803      putBinaryImageMask(maskCtx, img);
12804      maskCtx.globalCompositeOperation = "source-in";
12805      maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this, (0, _display_utils.getCurrentTransformInverse)(ctx), _pattern_helper.PathType.FILL) : fillColor;
12806      maskCtx.fillRect(0, 0, width, height);
12807      maskCtx.restore();
12808      ctx.save();
12809      ctx.transform(...transform);
12810      ctx.scale(1, -1);
12811      drawImageAtIntegerCoords(ctx, maskCanvas.canvas, 0, 0, width, height, 0, -1, 1, 1);
12812      ctx.restore();
12813    }
12814    this.compose();
12815  }
12816  paintImageXObject(objId) {
12817    if (!this.contentVisible) {
12818      return;
12819    }
12820    const imgData = this.getObject(objId);
12821    if (!imgData) {
12822      (0, _util.warn)("Dependent image isn't ready yet");
12823      return;
12824    }
12825    this.paintInlineImageXObject(imgData);
12826  }
12827  paintImageXObjectRepeat(objId, scaleX, scaleY, positions) {
12828    if (!this.contentVisible) {
12829      return;
12830    }
12831    const imgData = this.getObject(objId);
12832    if (!imgData) {
12833      (0, _util.warn)("Dependent image isn't ready yet");
12834      return;
12835    }
12836    const width = imgData.width;
12837    const height = imgData.height;
12838    const map = [];
12839    for (let i = 0, ii = positions.length; i < ii; i += 2) {
12840      map.push({
12841        transform: [scaleX, 0, 0, scaleY, positions[i], positions[i + 1]],
12842        x: 0,
12843        y: 0,
12844        w: width,
12845        h: height
12846      });
12847    }
12848    this.paintInlineImageXObjectGroup(imgData, map);
12849  }
12850  applyTransferMapsToCanvas(ctx) {
12851    if (this.current.transferMaps !== "none") {
12852      ctx.filter = this.current.transferMaps;
12853      ctx.drawImage(ctx.canvas, 0, 0);
12854      ctx.filter = "none";
12855    }
12856    return ctx.canvas;
12857  }
12858  applyTransferMapsToBitmap(imgData) {
12859    if (this.current.transferMaps === "none") {
12860      return imgData.bitmap;
12861    }
12862    const {
12863      bitmap,
12864      width,
12865      height
12866    } = imgData;
12867    const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", width, height);
12868    const tmpCtx = tmpCanvas.context;
12869    tmpCtx.filter = this.current.transferMaps;
12870    tmpCtx.drawImage(bitmap, 0, 0);
12871    tmpCtx.filter = "none";
12872    return tmpCanvas.canvas;
12873  }
12874  paintInlineImageXObject(imgData) {
12875    if (!this.contentVisible) {
12876      return;
12877    }
12878    const width = imgData.width;
12879    const height = imgData.height;
12880    const ctx = this.ctx;
12881    this.save();
12882    if (!_util.isNodeJS) {
12883      const {
12884        filter
12885      } = ctx;
12886      if (filter !== "none" && filter !== "") {
12887        ctx.filter = "none";
12888      }
12889    }
12890    ctx.scale(1 / width, -1 / height);
12891    let imgToPaint;
12892    if (imgData.bitmap) {
12893      imgToPaint = this.applyTransferMapsToBitmap(imgData);
12894    } else if (typeof HTMLElement === "function" && imgData instanceof HTMLElement || !imgData.data) {
12895      imgToPaint = imgData;
12896    } else {
12897      const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", width, height);
12898      const tmpCtx = tmpCanvas.context;
12899      putBinaryImageData(tmpCtx, imgData);
12900      imgToPaint = this.applyTransferMapsToCanvas(tmpCtx);
12901    }
12902    const scaled = this._scaleImage(imgToPaint, (0, _display_utils.getCurrentTransformInverse)(ctx));
12903    ctx.imageSmoothingEnabled = getImageSmoothingEnabled((0, _display_utils.getCurrentTransform)(ctx), imgData.interpolate);
12904    drawImageAtIntegerCoords(ctx, scaled.img, 0, 0, scaled.paintWidth, scaled.paintHeight, 0, -height, width, height);
12905    this.compose();
vendor: 4,375 bytes, lines 12906-13056
12906    this.restore();
12907  }
12908  paintInlineImageXObjectGroup(imgData, map) {
12909    if (!this.contentVisible) {
12910      return;
12911    }
12912    const ctx = this.ctx;
12913    let imgToPaint;
12914    if (imgData.bitmap) {
12915      imgToPaint = imgData.bitmap;
12916    } else {
12917      const w = imgData.width;
12918      const h = imgData.height;
12919      const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", w, h);
12920      const tmpCtx = tmpCanvas.context;
12921      putBinaryImageData(tmpCtx, imgData);
12922      imgToPaint = this.applyTransferMapsToCanvas(tmpCtx);
12923    }
12924    for (const entry of map) {
12925      ctx.save();
12926      ctx.transform(...entry.transform);
12927      ctx.scale(1, -1);
12928      drawImageAtIntegerCoords(ctx, imgToPaint, entry.x, entry.y, entry.w, entry.h, 0, -1, 1, 1);
12929      ctx.restore();
12930    }
12931    this.compose();
12932  }
12933  paintSolidColorImageMask() {
12934    if (!this.contentVisible) {
12935      return;
12936    }
12937    this.ctx.fillRect(0, 0, 1, 1);
12938    this.compose();
12939  }
12940  markPoint(tag) {}
12941  markPointProps(tag, properties) {}
12942  beginMarkedContent(tag) {
12943    this.markedContentStack.push({
12944      visible: true
12945    });
12946  }
12947  beginMarkedContentProps(tag, properties) {
12948    if (tag === "OC") {
12949      this.markedContentStack.push({
12950        visible: this.optionalContentConfig.isVisible(properties)
12951      });
12952    } else {
12953      this.markedContentStack.push({
12954        visible: true
12955      });
12956    }
12957    this.contentVisible = this.isContentVisible();
12958  }
12959  endMarkedContent() {
12960    this.markedContentStack.pop();
12961    this.contentVisible = this.isContentVisible();
12962  }
12963  beginCompat() {}
12964  endCompat() {}
12965  consumePath(clipBox) {
12966    const isEmpty = this.current.isEmptyClip();
12967    if (this.pendingClip) {
12968      this.current.updateClipFromPath();
12969    }
12970    if (!this.pendingClip) {
12971      this.compose(clipBox);
12972    }
12973    const ctx = this.ctx;
12974    if (this.pendingClip) {
12975      if (!isEmpty) {
12976        if (this.pendingClip === EO_CLIP) {
12977          ctx.clip("evenodd");
12978        } else {
12979          ctx.clip();
12980        }
12981      }
12982      this.pendingClip = null;
12983    }
12984    this.current.startNewPathAndClipBox(this.current.clipBox);
12985    ctx.beginPath();
12986  }
12987  getSinglePixelWidth() {
12988    if (!this._cachedGetSinglePixelWidth) {
12989      const m = (0, _display_utils.getCurrentTransform)(this.ctx);
12990      if (m[1] === 0 && m[2] === 0) {
12991        this._cachedGetSinglePixelWidth = 1 / Math.min(Math.abs(m[0]), Math.abs(m[3]));
12992      } else {
12993        const absDet = Math.abs(m[0] * m[3] - m[2] * m[1]);
12994        const normX = Math.hypot(m[0], m[2]);
12995        const normY = Math.hypot(m[1], m[3]);
12996        this._cachedGetSinglePixelWidth = Math.max(normX, normY) / absDet;
12997      }
12998    }
12999    return this._cachedGetSinglePixelWidth;
13000  }
13001  getScaleForStroking() {
13002    if (this._cachedScaleForStroking[0] === -1) {
13003      const {
13004        lineWidth
13005      } = this.current;
13006      const {
13007        a,
13008        b,
13009        c,
13010        d
13011      } = this.ctx.getTransform();
13012      let scaleX, scaleY;
13013      if (b === 0 && c === 0) {
13014        const normX = Math.abs(a);
13015        const normY = Math.abs(d);
13016        if (normX === normY) {
13017          if (lineWidth === 0) {
13018            scaleX = scaleY = 1 / normX;
13019          } else {
13020            const scaledLineWidth = normX * lineWidth;
13021            scaleX = scaleY = scaledLineWidth < 1 ? 1 / scaledLineWidth : 1;
13022          }
13023        } else if (lineWidth === 0) {
13024          scaleX = 1 / normX;
13025          scaleY = 1 / normY;
13026        } else {
13027          const scaledXLineWidth = normX * lineWidth;
13028          const scaledYLineWidth = normY * lineWidth;
13029          scaleX = scaledXLineWidth < 1 ? 1 / scaledXLineWidth : 1;
13030          scaleY = scaledYLineWidth < 1 ? 1 / scaledYLineWidth : 1;
13031        }
13032      } else {
13033        const absDet = Math.abs(a * d - b * c);
13034        const normX = Math.hypot(a, b);
13035        const normY = Math.hypot(c, d);
13036        if (lineWidth === 0) {
13037          scaleX = normY / absDet;
13038          scaleY = normX / absDet;
13039        } else {
13040          const baseArea = lineWidth * absDet;
13041          scaleX = normY > baseArea ? normY / baseArea : 1;
13042          scaleY = normX > baseArea ? normX / baseArea : 1;
13043        }
13044      }
13045      this._cachedScaleForStroking[0] = scaleX;
13046      this._cachedScaleForStroking[1] = scaleY;
13047    }
13048    return this._cachedScaleForStroking;
13049  }
13050  rescaleAndStroke(saveRestore) {
13051    const {
13052      ctx
13053    } = this;
13054    const {
13055      lineWidth
13056    } = this.current;
13057    const [scaleX, scaleY] = this.getScaleForStroking();
13058    ctx.lineWidth = lineWidth || 1;
13059    if (scaleX === 1 && scaleY === 1) {
13060      ctx.stroke();
13061      return;
13062    }
13063    const dashes = ctx.getLineDash();
13064    if (saveRestore) {
13065      ctx.save();
13066    }
13067    ctx.scale(scaleX, scaleY);
13068    if (dashes.length > 0) {
13069      const scale = Math.max(scaleX, scaleY);
13070      ctx.setLineDash(dashes.map(x => x / scale));
13071      ctx.lineDashOffset /= scale;
13072    }
13073    ctx.stroke();
13074    if (saveRestore) {
13075      ctx.restore();
13076    }
13077  }
13078  isContentVisible() {
13079    for (let i = this.markedContentStack.length - 1; i >= 0; i--) {
13080      if (!this.markedContentStack[i].visible) {
13081        return false;
13082      }
13083    }
13084    return true;
13085  }
13086}
13087exports.CanvasGraphics = CanvasGraphics;
13088for (const op in _util.OPS) {
13089  if (CanvasGraphics.prototype[op] !== undefined) {
13090    CanvasGraphics.prototype[_util.OPS[op]] = CanvasGraphics.prototype[op];
13091  }
13092}
13093
13094/***/ }),
13095/* 174 */
13096/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
13097
13098
13099
13100Object.defineProperty(exports, "__esModule", ({
13101  value: true
13102}));
13103exports.TilingPattern = exports.PathType = void 0;
13104exports.getShadingPattern = getShadingPattern;
13105__w_pdfjs_require__(2);
13106var _util = __w_pdfjs_require__(1);
13107var _display_utils = __w_pdfjs_require__(168);
13108const PathType = {
13109  FILL: "Fill",
13110  STROKE: "Stroke",
13111  SHADING: "Shading"
13112};
13113exports.PathType = PathType;
13114function applyBoundingBox(ctx, bbox) {
13115  if (!bbox) {
13116    return;
13117  }
13118  const width = bbox[2] - bbox[0];
13119  const height = bbox[3] - bbox[1];
13120  const region = new Path2D();
13121  region.rect(bbox[0], bbox[1], width, height);
13122  ctx.clip(region);
13123}
13124class BaseShadingPattern {
13125  constructor() {
13126    if (this.constructor === BaseShadingPattern) {
13127      (0, _util.unreachable)("Cannot initialize BaseShadingPattern.");
13128    }
13129  }
13130  getPattern() {
13131    (0, _util.unreachable)("Abstract method `getPattern` called.");
13132  }
13133}
13134class RadialAxialShadingPattern extends BaseShadingPattern {
13135  constructor(IR) {
13136    super();
13137    this._type = IR[1];
13138    this._bbox = IR[2];
13139    this._colorStops = IR[3];
13140    this._p0 = IR[4];
13141    this._p1 = IR[5];
13142    this._r0 = IR[6];
13143    this._r1 = IR[7];
13144    this.matrix = null;
13145  }
13146  _createGradient(ctx) {
13147    let grad;
13148    if (this._type === "axial") {
13149      grad = ctx.createLinearGradient(this._p0[0], this._p0[1], this._p1[0], this._p1[1]);
13150    } else if (this._type === "radial") {
13151      grad = ctx.createRadialGradient(this._p0[0], this._p0[1], this._r0, this._p1[0], this._p1[1], this._r1);
13152    }
13153    for (const colorStop of this._colorStops) {
13154      grad.addColorStop(colorStop[0], colorStop[1]);
13155    }
13156    return grad;
13157  }
13158  getPattern(ctx, owner, inverse, pathType) {
13159    let pattern;
13160    if (pathType === PathType.STROKE || pathType === PathType.FILL) {
13161      const ownerBBox = owner.current.getClippedPathBoundingBox(pathType, (0, _display_utils.getCurrentTransform)(ctx)) || [0, 0, 0, 0];
13162      const width = Math.ceil(ownerBBox[2] - ownerBBox[0]) || 1;
13163      const height = Math.ceil(ownerBBox[3] - ownerBBox[1]) || 1;
13164      const tmpCanvas = owner.cachedCanvases.getCanvas("pattern", width, height, true);
13165      const tmpCtx = tmpCanvas.context;
13166      tmpCtx.clearRect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height);
13167      tmpCtx.beginPath();
13168      tmpCtx.rect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height);
13169      tmpCtx.translate(-ownerBBox[0], -ownerBBox[1]);
13170      inverse = _util.Util.transform(inverse, [1, 0, 0, 1, ownerBBox[0], ownerBBox[1]]);
13171      tmpCtx.transform(...owner.baseTransform);
13172      if (this.matrix) {
13173        tmpCtx.transform(...this.matrix);
13174      }
13175      applyBoundingBox(tmpCtx, this._bbox);
13176      tmpCtx.fillStyle = this._createGradient(tmpCtx);
13177      tmpCtx.fill();
13178      pattern = ctx.createPattern(tmpCanvas.canvas, "no-repeat");
13179      const domMatrix = new DOMMatrix(inverse);
13180      pattern.setTransform(domMatrix);
13181    } else {
13182      applyBoundingBox(ctx, this._bbox);
13183      pattern = this._createGradient(ctx);
13184    }
13185    return pattern;
13186  }
13187}
13188function drawTriangle(data, context, p1, p2, p3, c1, c2, c3) {
13189  const coords = context.coords,
13190    colors = context.colors;
13191  const bytes = data.data,
13192    rowSize = data.width * 4;
13193  let tmp;
13194  if (coords[p1 + 1] > coords[p2 + 1]) {
13195    tmp = p1;
13196    p1 = p2;
13197    p2 = tmp;
13198    tmp = c1;
13199    c1 = c2;
13200    c2 = tmp;
13201  }
13202  if (coords[p2 + 1] > coords[p3 + 1]) {
13203    tmp = p2;
13204    p2 = p3;
13205    p3 = tmp;
13206    tmp = c2;
13207    c2 = c3;
13208    c3 = tmp;
13209  }
13210  if (coords[p1 + 1] > coords[p2 + 1]) {
13211    tmp = p1;
13212    p1 = p2;
13213    p2 = tmp;
13214    tmp = c1;
13215    c1 = c2;
13216    c2 = tmp;
13217  }
13218  const x1 = (coords[p1] + context.offsetX) * context.scaleX;
13219  const y1 = (coords[p1 + 1] + context.offsetY) * context.scaleY;
13220  const x2 = (coords[p2] + context.offsetX) * context.scaleX;
13221  const y2 = (coords[p2 + 1] + context.offsetY) * context.scaleY;
13222  const x3 = (coords[p3] + context.offsetX) * context.scaleX;
13223  const y3 = (coords[p3 + 1] + context.offsetY) * context.scaleY;
13224  if (y1 >= y3) {
13225    return;
13226  }
13227  const c1r = colors[c1],
13228    c1g = colors[c1 + 1],
13229    c1b = colors[c1 + 2];
13230  const c2r = colors[c2],
13231    c2g = colors[c2 + 1],
13232    c2b = colors[c2 + 2];
13233  const c3r = colors[c3],
13234    c3g = colors[c3 + 1],
13235    c3b = colors[c3 + 2];
13236  const minY = Math.round(y1),
13237    maxY = Math.round(y3);
13238  let xa, car, cag, cab;
13239  let xb, cbr, cbg, cbb;
13240  for (let y = minY; y <= maxY; y++) {
13241    if (y < y2) {
vendor: 4,267 bytes, lines 13242-13371
13242      const k = y < y1 ? 0 : (y1 - y) / (y1 - y2);
13243      xa = x1 - (x1 - x2) * k;
13244      car = c1r - (c1r - c2r) * k;
13245      cag = c1g - (c1g - c2g) * k;
13246      cab = c1b - (c1b - c2b) * k;
13247    } else {
13248      let k;
13249      if (y > y3) {
13250        k = 1;
13251      } else if (y2 === y3) {
13252        k = 0;
13253      } else {
13254        k = (y2 - y) / (y2 - y3);
13255      }
13256      xa = x2 - (x2 - x3) * k;
13257      car = c2r - (c2r - c3r) * k;
13258      cag = c2g - (c2g - c3g) * k;
13259      cab = c2b - (c2b - c3b) * k;
13260    }
13261    let k;
13262    if (y < y1) {
13263      k = 0;
13264    } else if (y > y3) {
13265      k = 1;
13266    } else {
13267      k = (y1 - y) / (y1 - y3);
13268    }
13269    xb = x1 - (x1 - x3) * k;
13270    cbr = c1r - (c1r - c3r) * k;
13271    cbg = c1g - (c1g - c3g) * k;
13272    cbb = c1b - (c1b - c3b) * k;
13273    const x1_ = Math.round(Math.min(xa, xb));
13274    const x2_ = Math.round(Math.max(xa, xb));
13275    let j = rowSize * y + x1_ * 4;
13276    for (let x = x1_; x <= x2_; x++) {
13277      k = (xa - x) / (xa - xb);
13278      if (k < 0) {
13279        k = 0;
13280      } else if (k > 1) {
13281        k = 1;
13282      }
13283      bytes[j++] = car - (car - cbr) * k | 0;
13284      bytes[j++] = cag - (cag - cbg) * k | 0;
13285      bytes[j++] = cab - (cab - cbb) * k | 0;
13286      bytes[j++] = 255;
13287    }
13288  }
13289}
13290function drawFigure(data, figure, context) {
13291  const ps = figure.coords;
13292  const cs = figure.colors;
13293  let i, ii;
13294  switch (figure.type) {
13295    case "lattice":
13296      const verticesPerRow = figure.verticesPerRow;
13297      const rows = Math.floor(ps.length / verticesPerRow) - 1;
13298      const cols = verticesPerRow - 1;
13299      for (i = 0; i < rows; i++) {
13300        let q = i * verticesPerRow;
13301        for (let j = 0; j < cols; j++, q++) {
13302          drawTriangle(data, context, ps[q], ps[q + 1], ps[q + verticesPerRow], cs[q], cs[q + 1], cs[q + verticesPerRow]);
13303          drawTriangle(data, context, ps[q + verticesPerRow + 1], ps[q + 1], ps[q + verticesPerRow], cs[q + verticesPerRow + 1], cs[q + 1], cs[q + verticesPerRow]);
13304        }
13305      }
13306      break;
13307    case "triangles":
13308      for (i = 0, ii = ps.length; i < ii; i += 3) {
13309        drawTriangle(data, context, ps[i], ps[i + 1], ps[i + 2], cs[i], cs[i + 1], cs[i + 2]);
13310      }
13311      break;
13312    default:
13313      throw new Error("illegal figure");
13314  }
13315}
13316class MeshShadingPattern extends BaseShadingPattern {
13317  constructor(IR) {
13318    super();
13319    this._coords = IR[2];
13320    this._colors = IR[3];
13321    this._figures = IR[4];
13322    this._bounds = IR[5];
13323    this._bbox = IR[7];
13324    this._background = IR[8];
13325    this.matrix = null;
13326  }
13327  _createMeshCanvas(combinedScale, backgroundColor, cachedCanvases) {
13328    const EXPECTED_SCALE = 1.1;
13329    const MAX_PATTERN_SIZE = 3000;
13330    const BORDER_SIZE = 2;
13331    const offsetX = Math.floor(this._bounds[0]);
13332    const offsetY = Math.floor(this._bounds[1]);
13333    const boundsWidth = Math.ceil(this._bounds[2]) - offsetX;
13334    const boundsHeight = Math.ceil(this._bounds[3]) - offsetY;
13335    const width = Math.min(Math.ceil(Math.abs(boundsWidth * combinedScale[0] * EXPECTED_SCALE)), MAX_PATTERN_SIZE);
13336    const height = Math.min(Math.ceil(Math.abs(boundsHeight * combinedScale[1] * EXPECTED_SCALE)), MAX_PATTERN_SIZE);
13337    const scaleX = boundsWidth / width;
13338    const scaleY = boundsHeight / height;
13339    const context = {
13340      coords: this._coords,
13341      colors: this._colors,
13342      offsetX: -offsetX,
13343      offsetY: -offsetY,
13344      scaleX: 1 / scaleX,
13345      scaleY: 1 / scaleY
13346    };
13347    const paddedWidth = width + BORDER_SIZE * 2;
13348    const paddedHeight = height + BORDER_SIZE * 2;
13349    const tmpCanvas = cachedCanvases.getCanvas("mesh", paddedWidth, paddedHeight, false);
13350    const tmpCtx = tmpCanvas.context;
13351    const data = tmpCtx.createImageData(width, height);
13352    if (backgroundColor) {
13353      const bytes = data.data;
13354      for (let i = 0, ii = bytes.length; i < ii; i += 4) {
13355        bytes[i] = backgroundColor[0];
13356        bytes[i + 1] = backgroundColor[1];
13357        bytes[i + 2] = backgroundColor[2];
13358        bytes[i + 3] = 255;
13359      }
13360    }
13361    for (const figure of this._figures) {
13362      drawFigure(data, figure, context);
13363    }
13364    tmpCtx.putImageData(data, BORDER_SIZE, BORDER_SIZE);
13365    const canvas = tmpCanvas.canvas;
13366    return {
13367      canvas,
13368      offsetX: offsetX - BORDER_SIZE * scaleX,
13369      offsetY: offsetY - BORDER_SIZE * scaleY,
13370      scaleX,
13371      scaleY
13372    };
13373  }
13374  getPattern(ctx, owner, inverse, pathType) {
13375    applyBoundingBox(ctx, this._bbox);
13376    let scale;
13377    if (pathType === PathType.SHADING) {
13378      scale = _util.Util.singularValueDecompose2dScale((0, _display_utils.getCurrentTransform)(ctx));
13379    } else {
13380      scale = _util.Util.singularValueDecompose2dScale(owner.baseTransform);
13381      if (this.matrix) {
13382        const matrixScale = _util.Util.singularValueDecompose2dScale(this.matrix);
13383        scale = [scale[0] * matrixScale[0], scale[1] * matrixScale[1]];
13384      }
13385    }
13386    const temporaryPatternCanvas = this._createMeshCanvas(scale, pathType === PathType.SHADING ? null : this._background, owner.cachedCanvases);
13387    if (pathType !== PathType.SHADING) {
13388      ctx.setTransform(...owner.baseTransform);
13389      if (this.matrix) {
13390        ctx.transform(...this.matrix);
13391      }
13392    }
13393    ctx.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY);
13394    ctx.scale(temporaryPatternCanvas.scaleX, temporaryPatternCanvas.scaleY);
13395    return ctx.createPattern(temporaryPatternCanvas.canvas, "no-repeat");
13396  }
13397}
13398class DummyShadingPattern extends BaseShadingPattern {
13399  getPattern() {
13400    return "hotpink";
13401  }
13402}
13403function getShadingPattern(IR) {
13404  switch (IR[0]) {
13405    case "RadialAxial":
13406      return new RadialAxialShadingPattern(IR);
13407    case "Mesh":
13408      return new MeshShadingPattern(IR);
13409    case "Dummy":
13410      return new DummyShadingPattern();
13411  }
13412  throw new Error(`Unknown IR type: ${IR[0]}`);
13413}
13414const PaintType = {
13415  COLORED: 1,
13416  UNCOLORED: 2
13417};
13418class TilingPattern {
13419  static MAX_PATTERN_SIZE = 3000;
13420  constructor(IR, color, ctx, canvasGraphicsFactory, baseTransform) {
13421    this.operatorList = IR[2];
13422    this.matrix = IR[3] || [1, 0, 0, 1, 0, 0];
13423    this.bbox = IR[4];
13424    this.xstep = IR[5];
13425    this.ystep = IR[6];
13426    this.paintType = IR[7];
13427    this.tilingType = IR[8];
13428    this.color = color;
13429    this.ctx = ctx;
13430    this.canvasGraphicsFactory = canvasGraphicsFactory;
13431    this.baseTransform = baseTransform;
13432  }
13433  createPatternCanvas(owner) {
13434    const operatorList = this.operatorList;
13435    const bbox = this.bbox;
13436    const xstep = this.xstep;
13437    const ystep = this.ystep;
13438    const paintType = this.paintType;
13439    const tilingType = this.tilingType;
13440    const color = this.color;
13441    const canvasGraphicsFactory = this.canvasGraphicsFactory;
13442    (0, _util.info)("TilingType: " + tilingType);
13443    const x0 = bbox[0],
13444      y0 = bbox[1],
13445      x1 = bbox[2],
13446      y1 = bbox[3];
13447    const matrixScale = _util.Util.singularValueDecompose2dScale(this.matrix);
13448    const curMatrixScale = _util.Util.singularValueDecompose2dScale(this.baseTransform);
13449    const combinedScale = [matrixScale[0] * curMatrixScale[0], matrixScale[1] * curMatrixScale[1]];
13450    const dimx = this.getSizeAndScale(xstep, this.ctx.canvas.width, combinedScale[0]);
13451    const dimy = this.getSizeAndScale(ystep, this.ctx.canvas.height, combinedScale[1]);
13452    const tmpCanvas = owner.cachedCanvases.getCanvas("pattern", dimx.size, dimy.size, true);
13453    const tmpCtx = tmpCanvas.context;
13454    const graphics = canvasGraphicsFactory.createCanvasGraphics(tmpCtx);
13455    graphics.groupLevel = owner.groupLevel;
13456    this.setFillAndStrokeStyleToContext(graphics, paintType, color);
13457    let adjustedX0 = x0;
13458    let adjustedY0 = y0;
13459    let adjustedX1 = x1;
13460    let adjustedY1 = y1;
13461    if (x0 < 0) {
13462      adjustedX0 = 0;
13463      adjustedX1 += Math.abs(x0);
13464    }
13465    if (y0 < 0) {
13466      adjustedY0 = 0;
13467      adjustedY1 += Math.abs(y0);
13468    }
13469    tmpCtx.translate(-(dimx.scale * adjustedX0), -(dimy.scale * adjustedY0));
13470    graphics.transform(dimx.scale, 0, 0, dimy.scale, 0, 0);
13471    tmpCtx.save();
13472    this.clipBbox(graphics, adjustedX0, adjustedY0, adjustedX1, adjustedY1);
13473    graphics.baseTransform = (0, _display_utils.getCurrentTransform)(graphics.ctx);
13474    graphics.executeOperatorList(operatorList);
13475    graphics.endDrawing();
13476    return {
13477      canvas: tmpCanvas.canvas,
13478      scaleX: dimx.scale,
13479      scaleY: dimy.scale,
13480      offsetX: adjustedX0,
13481      offsetY: adjustedY0
13482    };
13483  }
13484  getSizeAndScale(step, realOutputSize, scale) {
13485    step = Math.abs(step);
13486    const maxSize = Math.max(TilingPattern.MAX_PATTERN_SIZE, realOutputSize);
13487    let size = Math.ceil(step * scale);
13488    if (size >= maxSize) {
13489      size = maxSize;
13490    } else {
13491      scale = size / step;
13492    }
13493    return {
13494      scale,
13495      size
13496    };
13497  }
13498  clipBbox(graphics, x0, y0, x1, y1) {
13499    const bboxWidth = x1 - x0;
13500    const bboxHeight = y1 - y0;
13501    graphics.ctx.rect(x0, y0, bboxWidth, bboxHeight);
13502    graphics.current.updateRectMinMax((0, _display_utils.getCurrentTransform)(graphics.ctx), [x0, y0, x1, y1]);
13503    graphics.clip();
13504    graphics.endPath();
13505  }
13506  setFillAndStrokeStyleToContext(graphics, paintType, color) {
13507    const context = graphics.ctx,
13508      current = graphics.current;
13509    switch (paintType) {
13510      case PaintType.COLORED:
13511        const ctx = this.ctx;
13512        context.fillStyle = ctx.fillStyle;
13513        context.strokeStyle = ctx.strokeStyle;
13514        current.fillColor = ctx.fillStyle;
13515        current.strokeColor = ctx.strokeStyle;
13516        break;
13517      case PaintType.UNCOLORED:
13518        const cssColor = _util.Util.makeHexColor(color[0], color[1], color[2]);
13519        context.fillStyle = cssColor;
13520        context.strokeStyle = cssColor;
13521        current.fillColor = cssColor;
13522        current.strokeColor = cssColor;
13523        break;
13524      default:
13525        throw new _util.FormatError(`Unsupported paint type: ${paintType}`);
13526    }
13527  }
13528  getPattern(ctx, owner, inverse, pathType) {
13529    let matrix = inverse;
13530    if (pathType !== PathType.SHADING) {
13531      matrix = _util.Util.transform(matrix, owner.baseTransform);
13532      if (this.matrix) {
13533        matrix = _util.Util.transform(matrix, this.matrix);
13534      }
13535    }
13536    const temporaryPatternCanvas = this.createPatternCanvas(owner);
13537    let domMatrix = new DOMMatrix(matrix);
13538    domMatrix = domMatrix.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY);
13539    domMatrix = domMatrix.scale(1 / temporaryPatternCanvas.scaleX, 1 / temporaryPatternCanvas.scaleY);
13540    const pattern = ctx.createPattern(temporaryPatternCanvas.canvas, "repeat");
13541    pattern.setTransform(domMatrix);
13542    return pattern;
13543  }
13544}
13545exports.TilingPattern = TilingPattern;
13546
13547/***/ }),
13548/* 175 */
13549/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
13550
13551
13552
13553Object.defineProperty(exports, "__esModule", ({
13554  value: true
13555}));
13556exports.convertBlackAndWhiteToRGBA = convertBlackAndWhiteToRGBA;
13557exports.convertToRGBA = convertToRGBA;
13558exports.grayToRGBA = grayToRGBA;
13559__w_pdfjs_require__(93);
13560__w_pdfjs_require__(101);
13561__w_pdfjs_require__(102);
13562__w_pdfjs_require__(105);
13563__w_pdfjs_require__(107);
13564__w_pdfjs_require__(109);
13565__w_pdfjs_require__(113);
13566__w_pdfjs_require__(116);
13567__w_pdfjs_require__(123);
13568var _util = __w_pdfjs_require__(1);
13569function convertToRGBA(params) {
13570  switch (params.kind) {
13571    case _util.ImageKind.GRAYSCALE_1BPP:
13572      return convertBlackAndWhiteToRGBA(params);
13573    case _util.ImageKind.RGB_24BPP:
13574      return convertRGBToRGBA(params);
13575  }
13576  return null;
13577}
13578function convertBlackAndWhiteToRGBA(_ref) {
13579  let {
13580    src,
13581    srcPos = 0,
13582    dest,
13583    width,
13584    height,
13585    nonBlackColor = 0xffffffff,
13586    inverseDecode = false
13587  } = _ref;
13588  const black = _util.FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff;
13589  const [zeroMapping, oneMapping] = inverseDecode ? [nonBlackColor, black] : [black, nonBlackColor];
13590  const widthInSource = width >> 3;
13591  const widthRemainder = width & 7;
13592  const srcLength = src.length;
13593  dest = new Uint32Array(dest.buffer);
13594  let destPos = 0;
13595  for (let i = 0; i < height; i++) {
13596    for (const max = srcPos + widthInSource; srcPos < max; srcPos++) {
13597      const elem = srcPos < srcLength ? src[srcPos] : 255;
13598      dest[destPos++] = elem & 0b10000000 ? oneMapping : zeroMapping;
13599      dest[destPos++] = elem & 0b1000000 ? oneMapping : zeroMapping;
13600      dest[destPos++] = elem & 0b100000 ? oneMapping : zeroMapping;
13601      dest[destPos++] = elem & 0b10000 ? oneMapping : zeroMapping;
13602      dest[destPos++] = elem & 0b1000 ? oneMapping : zeroMapping;
13603      dest[destPos++] = elem & 0b100 ? oneMapping : zeroMapping;
13604      dest[destPos++] = elem & 0b10 ? oneMapping : zeroMapping;
13605      dest[destPos++] = elem & 0b1 ? oneMapping : zeroMapping;
13606    }
13607    if (widthRemainder === 0) {
13608      continue;
13609    }
13610    const elem = srcPos < srcLength ? src[srcPos++] : 255;
13611    for (let j = 0; j < widthRemainder; j++) {
13612      dest[destPos++] = elem & 1 << 7 - j ? oneMapping : zeroMapping;
13613    }
13614  }
13615  return {
13616    srcPos,
13617    destPos
13618  };
13619}
13620function convertRGBToRGBA(_ref2) {
13621  let {
13622    src,
13623    srcPos = 0,
13624    dest,
13625    destPos = 0,
13626    width,
13627    height
13628  } = _ref2;
13629  let i = 0;
13630  const len32 = src.length >> 2;
13631  const src32 = new Uint32Array(src.buffer, srcPos, len32);
13632  if (_util.FeatureTest.isLittleEndian) {
13633    for (; i < len32 - 2; i += 3, destPos += 4) {
13634      const s1 = src32[i];
13635      const s2 = src32[i + 1];
13636      const s3 = src32[i + 2];
13637      dest[destPos] = s1 | 0xff000000;
13638      dest[destPos + 1] = s1 >>> 24 | s2 << 8 | 0xff000000;
13639      dest[destPos + 2] = s2 >>> 16 | s3 << 16 | 0xff000000;
13640      dest[destPos + 3] = s3 >>> 8 | 0xff000000;
13641    }
13642    for (let j = i * 4, jj = src.length; j < jj; j += 3) {
13643      dest[destPos++] = src[j] | src[j + 1] << 8 | src[j + 2] << 16 | 0xff000000;
13644    }
13645  } else {
13646    for (; i < len32 - 2; i += 3, destPos += 4) {
13647      const s1 = src32[i];
13648      const s2 = src32[i + 1];
13649      const s3 = src32[i + 2];
13650      dest[destPos] = s1 | 0xff;
13651      dest[destPos + 1] = s1 << 24 | s2 >>> 8 | 0xff;
13652      dest[destPos + 2] = s2 << 16 | s3 >>> 16 | 0xff;
13653      dest[destPos + 3] = s3 << 8 | 0xff;
13654    }
13655    for (let j = i * 4, jj = src.length; j < jj; j += 3) {
13656      dest[destPos++] = src[j] << 24 | src[j + 1] << 16 | src[j + 2] << 8 | 0xff;
13657    }
13658  }
13659  return {
13660    srcPos,
13661    destPos
13662  };
13663}
13664function grayToRGBA(src, dest) {
13665  if (_util.FeatureTest.isLittleEndian) {
13666    for (let i = 0, ii = src.length; i < ii; i++) {
13667      dest[i] = src[i] * 0x10101 | 0xff000000;
13668    }
13669  } else {
13670    for (let i = 0, ii = src.length; i < ii; i++) {
13671      dest[i] = src[i] * 0x1010100 | 0x000000ff;
13672    }
13673  }
13674}
13675
13676/***/ }),
13677/* 176 */
13678/***/ ((__unused_webpack_module, exports) => {
13679
13680
13681
13682Object.defineProperty(exports, "__esModule", ({
13683  value: true
13684}));
13685exports.GlobalWorkerOptions = void 0;
13686const GlobalWorkerOptions = Object.create(null);
13687exports.GlobalWorkerOptions = GlobalWorkerOptions;
13688GlobalWorkerOptions.workerPort = null;
13689GlobalWorkerOptions.workerSrc = "";
13690
13691/***/ }),
13692/* 177 */
13693/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
13694
13695
13696
13697Object.defineProperty(exports, "__esModule", ({
13698  value: true
13699}));
13700exports.MessageHandler = void 0;
13701__w_pdfjs_require__(2);
13702var _util = __w_pdfjs_require__(1);
13703const CallbackKind = {
13704  UNKNOWN: 0,
13705  DATA: 1,
13706  ERROR: 2
13707};
13708const StreamKind = {
13709  UNKNOWN: 0,
13710  CANCEL: 1,
13711  CANCEL_COMPLETE: 2,
13712  CLOSE: 3,
13713  ENQUEUE: 4,
13714  ERROR: 5,
13715  PULL: 6,
13716  PULL_COMPLETE: 7,
13717  START_COMPLETE: 8
13718};
13719function wrapReason(reason) {
13720  if (!(reason instanceof Error || typeof reason === "object" && reason !== null)) {
13721    (0, _util.unreachable)('wrapReason: Expected "reason" to be a (possibly cloned) Error.');
13722  }
13723  switch (reason.name) {
13724    case "AbortException":
13725      return new _util.AbortException(reason.message);
13726    case "MissingPDFException":
13727      return new _util.MissingPDFException(reason.message);
13728    case "PasswordException":
13729      return new _util.PasswordException(reason.message, reason.code);
13730    case "UnexpectedResponseException":
13731      return new _util.UnexpectedResponseException(reason.message, reason.status);
13732    case "UnknownErrorException":
13733      return new _util.UnknownErrorException(reason.message, reason.details);
13734    default:
13735      return new _util.UnknownErrorException(reason.message, reason.toString());
13736  }
13737}
13738class MessageHandler {
13739  constructor(sourceName, targetName, comObj) {
13740    this.sourceName = sourceName;
13741    this.targetName = targetName;
13742    this.comObj = comObj;
13743    this.callbackId = 1;
13744    this.streamId = 1;
13745    this.streamSinks = Object.create(null);
13746    this.streamControllers = Object.create(null);
13747    this.callbackCapabilities = Object.create(null);
13748    this.actionHandler = Object.create(null);
13749    this._onComObjOnMessage = event => {
13750      const data = event.data;
13751      if (data.targetName !== this.sourceName) {
13752        return;
13753      }
13754      if (data.stream) {
13755        this.#processStreamMessage(data);
13756        return;
13757      }
13758      if (data.callback) {
13759        const callbackId = data.callbackId;
13760        const capability = this.callbackCapabilities[callbackId];
13761        if (!capability) {
13762          throw new Error(`Cannot resolve callback ${callbackId}`);
13763        }
13764        delete this.callbackCapabilities[callbackId];
13765        if (data.callback === CallbackKind.DATA) {
13766          capability.resolve(data.data);
13767        } else if (data.callback === CallbackKind.ERROR) {
13768          capability.reject(wrapReason(data.reason));
13769        } else {
13770          throw new Error("Unexpected callback case");
13771        }
13772        return;
13773      }
13774      const action = this.actionHandler[data.action];
13775      if (!action) {
13776        throw new Error(`Unknown action from worker: ${data.action}`);
13777      }
13778      if (data.callbackId) {
13779        const cbSourceName = this.sourceName;
13780        const cbTargetName = data.sourceName;
13781        new Promise(function (resolve) {
13782          resolve(action(data.data));
13783        }).then(function (result) {
13784          comObj.postMessage({
13785            sourceName: cbSourceName,
13786            targetName: cbTargetName,
13787            callback: CallbackKind.DATA,
13788            callbackId: data.callbackId,
13789            data: result
13790          });
13791        }, function (reason) {
13792          comObj.postMessage({
13793            sourceName: cbSourceName,
13794            targetName: cbTargetName,
13795            callback: CallbackKind.ERROR,
13796            callbackId: data.callbackId,
13797            reason: wrapReason(reason)
13798          });
13799        });
13800        return;
13801      }
13802      if (data.streamId) {
13803        this.#createStreamSink(data);
13804        return;
13805      }
13806      action(data.data);
13807    };
13808    comObj.addEventListener("message", this._onComObjOnMessage);
13809  }
13810  on(actionName, handler) {
13811    const ah = this.actionHandler;
13812    if (ah[actionName]) {
13813      throw new Error(`There is already an actionName called "${actionName}"`);
13814    }
13815    ah[actionName] = handler;
13816  }
13817  send(actionName, data, transfers) {
13818    this.comObj.postMessage({
13819      sourceName: this.sourceName,
13820      targetName: this.targetName,
13821      action: actionName,
13822      data
13823    }, transfers);
13824  }
13825  sendWithPromise(actionName, data, transfers) {
13826    const callbackId = this.callbackId++;
13827    const capability = new _util.PromiseCapability();
13828    this.callbackCapabilities[callbackId] = capability;
13829    try {
13830      this.comObj.postMessage({
13831        sourceName: this.sourceName,
13832        targetName: this.targetName,
13833        action: actionName,
13834        callbackId,
13835        data
13836      }, transfers);
13837    } catch (ex) {
13838      capability.reject(ex);
13839    }
13840    return capability.promise;
13841  }
13842  sendWithStream(actionName, data, queueingStrategy, transfers) {
13843    const streamId = this.streamId++,
13844      sourceName = this.sourceName,
13845      targetName = this.targetName,
13846      comObj = this.comObj;
13847    return new ReadableStream({
13848      start: controller => {
13849        const startCapability = new _util.PromiseCapability();
13850        this.streamControllers[streamId] = {
13851          controller,
13852          startCall: startCapability,
13853          pullCall: null,
13854          cancelCall: null,
13855          isClosed: false
13856        };
13857        comObj.postMessage({
13858          sourceName,
13859          targetName,
13860          action: actionName,
13861          streamId,
13862          data,
13863          desiredSize: controller.desiredSize
13864        }, transfers);
13865        return startCapability.promise;
13866      },
13867      pull: controller => {
13868        const pullCapability = new _util.PromiseCapability();
13869        this.streamControllers[streamId].pullCall = pullCapability;
13870        comObj.postMessage({
13871          sourceName,
13872          targetName,
13873          stream: StreamKind.PULL,
13874          streamId,
13875          desiredSize: controller.desiredSize
13876        });
13877        return pullCapability.promise;
13878      },
13879      cancel: reason => {
13880        (0, _util.assert)(reason instanceof Error, "cancel must have a valid reason");
13881        const cancelCapability = new _util.PromiseCapability();
13882        this.streamControllers[streamId].cancelCall = cancelCapability;
13883        this.streamControllers[streamId].isClosed = true;
13884        comObj.postMessage({
13885          sourceName,
13886          targetName,
13887          stream: StreamKind.CANCEL,
13888          streamId,
13889          reason: wrapReason(reason)
13890        });
13891        return cancelCapability.promise;
13892      }
13893    }, queueingStrategy);
13894  }
13895  #createStreamSink(data) {
13896    const streamId = data.streamId,
13897      sourceName = this.sourceName,
13898      targetName = data.sourceName,
13899      comObj = this.comObj;
13900    const self = this,
13901      action = this.actionHandler[data.action];
13902    const streamSink = {
13903      enqueue(chunk) {
13904        let size = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
13905        let transfers = arguments.length > 2 ? arguments[2] : undefined;
13906        if (this.isCancelled) {
13907          return;
13908        }
13909        const lastDesiredSize = this.desiredSize;
13910        this.desiredSize -= size;
13911        if (lastDesiredSize > 0 && this.desiredSize <= 0) {
13912          this.sinkCapability = new _util.PromiseCapability();
13913          this.ready = this.sinkCapability.promise;
13914        }
13915        comObj.postMessage({
13916          sourceName,
13917          targetName,
13918          stream: StreamKind.ENQUEUE,
13919          streamId,
13920          chunk
13921        }, transfers);
13922      },
13923      close() {
13924        if (this.isCancelled) {
13925          return;
13926        }
13927        this.isCancelled = true;
13928        comObj.postMessage({
13929          sourceName,
13930          targetName,
13931          stream: StreamKind.CLOSE,
13932          streamId
13933        });
13934        delete self.streamSinks[streamId];
13935      },
13936      error(reason) {
13937        (0, _util.assert)(reason instanceof Error, "error must have a valid reason");
13938        if (this.isCancelled) {
13939          return;
13940        }
13941        this.isCancelled = true;
13942        comObj.postMessage({
13943          sourceName,
13944          targetName,
13945          stream: StreamKind.ERROR,
13946          streamId,
13947          reason: wrapReason(reason)
13948        });
13949      },
13950      sinkCapability: new _util.PromiseCapability(),
13951      onPull: null,
13952      onCancel: null,
13953      isCancelled: false,
13954      desiredSize: data.desiredSize,
13955      ready: null
13956    };
13957    streamSink.sinkCapability.resolve();
13958    streamSink.ready = streamSink.sinkCapability.promise;
13959    this.streamSinks[streamId] = streamSink;
13960    new Promise(function (resolve) {
13961      resolve(action(data.data, streamSink));
13962    }).then(function () {
13963      comObj.postMessage({
13964        sourceName,
13965        targetName,
13966        stream: StreamKind.START_COMPLETE,
13967        streamId,
13968        success: true
13969      });
13970    }, function (reason) {
13971      comObj.postMessage({
13972        sourceName,
13973        targetName,
13974        stream: StreamKind.START_COMPLETE,
13975        streamId,
13976        reason: wrapReason(reason)
13977      });
13978    });
13979  }
13980  #processStreamMessage(data) {
13981    const streamId = data.streamId,
13982      sourceName = this.sourceName,
13983      targetName = data.sourceName,
13984      comObj = this.comObj;
13985    const streamController = this.streamControllers[streamId],
13986      streamSink = this.streamSinks[streamId];
13987    switch (data.stream) {
13988      case StreamKind.START_COMPLETE:
13989        if (data.success) {
13990          streamController.startCall.resolve();
13991        } else {
13992          streamController.startCall.reject(wrapReason(data.reason));
13993        }
13994        break;
13995      case StreamKind.PULL_COMPLETE:
13996        if (data.success) {
13997          streamController.pullCall.resolve();
13998        } else {
13999          streamController.pullCall.reject(wrapReason(data.reason));
14000        }
14001        break;
14002      case StreamKind.PULL:
14003        if (!streamSink) {
14004          comObj.postMessage({
14005            sourceName,
14006            targetName,
14007            stream: StreamKind.PULL_COMPLETE,
14008            streamId,
14009            success: true
14010          });
14011          break;
14012        }
14013        if (streamSink.desiredSize <= 0 && data.desiredSize > 0) {
14014          streamSink.sinkCapability.resolve();
14015        }
14016        streamSink.desiredSize = data.desiredSize;
14017        new Promise(function (resolve) {
14018          resolve(streamSink.onPull?.());
14019        }).then(function () {
14020          comObj.postMessage({
14021            sourceName,
14022            targetName,
14023            stream: StreamKind.PULL_COMPLETE,
14024            streamId,
14025            success: true
14026          });
14027        }, function (reason) {
14028          comObj.postMessage({
14029            sourceName,
14030            targetName,
14031            stream: StreamKind.PULL_COMPLETE,
14032            streamId,
14033            reason: wrapReason(reason)
14034          });
14035        });
14036        break;
14037      case StreamKind.ENQUEUE:
14038        (0, _util.assert)(streamController, "enqueue should have stream controller");
14039        if (streamController.isClosed) {
14040          break;
14041        }
14042        streamController.controller.enqueue(data.chunk);
14043        break;
14044      case StreamKind.CLOSE:
14045        (0, _util.assert)(streamController, "close should have stream controller");
14046        if (streamController.isClosed) {
14047          break;
14048        }
14049        streamController.isClosed = true;
14050        streamController.controller.close();
14051        this.#deleteStreamController(streamController, streamId);
14052        break;
14053      case StreamKind.ERROR:
14054        (0, _util.assert)(streamController, "error should have stream controller");
14055        streamController.controller.error(wrapReason(data.reason));
14056        this.#deleteStreamController(streamController, streamId);
14057        break;
14058      case StreamKind.CANCEL_COMPLETE:
14059        if (data.success) {
14060          streamController.cancelCall.resolve();
14061        } else {
14062          streamController.cancelCall.reject(wrapReason(data.reason));
14063        }
14064        this.#deleteStreamController(streamController, streamId);
14065        break;
14066      case StreamKind.CANCEL:
14067        if (!streamSink) {
14068          break;
14069        }
14070        new Promise(function (resolve) {
14071          resolve(streamSink.onCancel?.(wrapReason(data.reason)));
14072        }).then(function () {
14073          comObj.postMessage({
14074            sourceName,
14075            targetName,
14076            stream: StreamKind.CANCEL_COMPLETE,
14077            streamId,
14078            success: true
14079          });
14080        }, function (reason) {
14081          comObj.postMessage({
14082            sourceName,
14083            targetName,
14084            stream: StreamKind.CANCEL_COMPLETE,
14085            streamId,
14086            reason: wrapReason(reason)
14087          });
14088        });
14089        streamSink.sinkCapability.reject(wrapReason(data.reason));
14090        streamSink.isCancelled = true;
14091        delete this.streamSinks[streamId];
14092        break;
14093      default:
14094        throw new Error("Unexpected stream case");
14095    }
14096  }
14097  async #deleteStreamController(streamController, streamId) {
14098    await Promise.allSettled([streamController.startCall?.promise, streamController.pullCall?.promise, streamController.cancelCall?.promise]);
14099    delete this.streamControllers[streamId];
14100  }
14101  destroy() {
14102    this.comObj.removeEventListener("message", this._onComObjOnMessage);
14103  }
14104}
14105exports.MessageHandler = MessageHandler;
14106
14107/***/ }),
14108/* 178 */
14109/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
14110
14111
14112
14113Object.defineProperty(exports, "__esModule", ({
14114  value: true
14115}));
14116exports.Metadata = void 0;
14117var _util = __w_pdfjs_require__(1);
14118class Metadata {
14119  #metadataMap;
14120  #data;
14121  constructor(_ref) {
14122    let {
14123      parsedData,
14124      rawData
14125    } = _ref;
14126    this.#metadataMap = parsedData;
14127    this.#data = rawData;
14128  }
14129  getRaw() {
14130    return this.#data;
14131  }
14132  get(name) {
14133    return this.#metadataMap.get(name) ?? null;
14134  }
14135  getAll() {
14136    return (0, _util.objectFromMap)(this.#metadataMap);
14137  }
14138  has(name) {
14139    return this.#metadataMap.has(name);
14140  }
14141}
14142exports.Metadata = Metadata;
14143
14144/***/ }),
14145/* 179 */
14146/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
14147
14148
14149
14150Object.defineProperty(exports, "__esModule", ({
14151  value: true
14152}));
14153exports.OptionalContentConfig = void 0;
14154var _util = __w_pdfjs_require__(1);
14155var _murmurhash = __w_pdfjs_require__(170);
14156const INTERNAL = Symbol("INTERNAL");
14157class OptionalContentGroup {
14158  #visible = true;
14159  constructor(name, intent) {
14160    this.name = name;
14161    this.intent = intent;
14162  }
14163  get visible() {
14164    return this.#visible;
14165  }
14166  _setVisible(internal, visible) {
14167    if (internal !== INTERNAL) {
14168      (0, _util.unreachable)("Internal method `_setVisible` called.");
14169    }
14170    this.#visible = visible;
14171  }
14172}
14173class OptionalContentConfig {
14174  #cachedGetHash = null;
14175  #groups = new Map();
14176  #initialHash = null;
14177  #order = null;
14178  constructor(data) {
14179    this.name = null;
14180    this.creator = null;
14181    if (data === null) {
14182      return;
14183    }
14184    this.name = data.name;
14185    this.creator = data.creator;
14186    this.#order = data.order;
14187    for (const group of data.groups) {
14188      this.#groups.set(group.id, new OptionalContentGroup(group.name, group.intent));
14189    }
14190    if (data.baseState === "OFF") {
14191      for (const group of this.#groups.values()) {
14192        group._setVisible(INTERNAL, false);
14193      }
14194    }
14195    for (const on of data.on) {
14196      this.#groups.get(on)._setVisible(INTERNAL, true);
14197    }
14198    for (const off of data.off) {
14199      this.#groups.get(off)._setVisible(INTERNAL, false);
14200    }
14201    this.#initialHash = this.getHash();
14202  }
14203  #evaluateVisibilityExpression(array) {
14204    const length = array.length;
14205    if (length < 2) {
14206      return true;
14207    }
14208    const operator = array[0];
14209    for (let i = 1; i < length; i++) {
14210      const element = array[i];
14211      let state;
14212      if (Array.isArray(element)) {
14213        state = this.#evaluateVisibilityExpression(element);
14214      } else if (this.#groups.has(element)) {
14215        state = this.#groups.get(element).visible;
14216      } else {
14217        (0, _util.warn)(`Optional content group not found: ${element}`);
14218        return true;
14219      }
14220      switch (operator) {
14221        case "And":
14222          if (!state) {
14223            return false;
14224          }
14225          break;
14226        case "Or":
14227          if (state) {
14228            return true;
14229          }
14230          break;
14231        case "Not":
14232          return !state;
14233        default:
14234          return true;
14235      }
14236    }
14237    return operator === "And";
14238  }
14239  isVisible(group) {
14240    if (this.#groups.size === 0) {
14241      return true;
14242    }
14243    if (!group) {
14244      (0, _util.warn)("Optional content group not defined.");
14245      return true;
14246    }
14247    if (group.type === "OCG") {
14248      if (!this.#groups.has(group.id)) {
14249        (0, _util.warn)(`Optional content group not found: ${group.id}`);
14250        return true;
14251      }
14252      return this.#groups.get(group.id).visible;
14253    } else if (group.type === "OCMD") {
14254      if (group.expression) {
14255        return this.#evaluateVisibilityExpression(group.expression);
14256      }
14257      if (!group.policy || group.policy === "AnyOn") {
14258        for (const id of group.ids) {
14259          if (!this.#groups.has(id)) {
14260            (0, _util.warn)(`Optional content group not found: ${id}`);
14261            return true;
14262          }
14263          if (this.#groups.get(id).visible) {
14264            return true;
14265          }
14266        }
14267        return false;
14268      } else if (group.policy === "AllOn") {
14269        for (const id of group.ids) {
14270          if (!this.#groups.has(id)) {
14271            (0, _util.warn)(`Optional content group not found: ${id}`);
14272            return true;
14273          }
14274          if (!this.#groups.get(id).visible) {
14275            return false;
14276          }
14277        }
14278        return true;
14279      } else if (group.policy === "AnyOff") {
14280        for (const id of group.ids) {
14281          if (!this.#groups.has(id)) {
14282            (0, _util.warn)(`Optional content group not found: ${id}`);
14283            return true;
14284          }
14285          if (!this.#groups.get(id).visible) {
14286            return true;
14287          }
14288        }
14289        return false;
14290      } else if (group.policy === "AllOff") {
14291        for (const id of group.ids) {
14292          if (!this.#groups.has(id)) {
14293            (0, _util.warn)(`Optional content group not found: ${id}`);
14294            return true;
14295          }
14296          if (this.#groups.get(id).visible) {
14297            return false;
14298          }
14299        }
14300        return true;
14301      }
14302      (0, _util.warn)(`Unknown optional content policy ${group.policy}.`);
14303      return true;
14304    }
14305    (0, _util.warn)(`Unknown group type ${group.type}.`);
14306    return true;
14307  }
14308  setVisibility(id) {
14309    let visible = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
14310    if (!this.#groups.has(id)) {
14311      (0, _util.warn)(`Optional content group not found: ${id}`);
14312      return;
14313    }
14314    this.#groups.get(id)._setVisible(INTERNAL, !!visible);
14315    this.#cachedGetHash = null;
14316  }
14317  get hasInitialVisibility() {
14318    return this.#initialHash === null || this.getHash() === this.#initialHash;
14319  }
14320  getOrder() {
14321    if (!this.#groups.size) {
14322      return null;
14323    }
14324    if (this.#order) {
14325      return this.#order.slice();
14326    }
14327    return [...this.#groups.keys()];
14328  }
14329  getGroups() {
14330    return this.#groups.size > 0 ? (0, _util.objectFromMap)(this.#groups) : null;
14331  }
14332  getGroup(id) {
14333    return this.#groups.get(id) || null;
14334  }
14335  getHash() {
14336    if (this.#cachedGetHash !== null) {
14337      return this.#cachedGetHash;
14338    }
14339    const hash = new _murmurhash.MurmurHash3_64();
14340    for (const [id, group] of this.#groups) {
14341      hash.update(`${id}:${group.visible}`);
14342    }
14343    return this.#cachedGetHash = hash.hexdigest();
14344  }
14345}
14346exports.OptionalContentConfig = OptionalContentConfig;
14347
14348/***/ }),
14349/* 180 */
14350/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
14351
14352
14353
14354Object.defineProperty(exports, "__esModule", ({
14355  value: true
14356}));
14357exports.PDFDataTransportStream = void 0;
14358__w_pdfjs_require__(93);
14359__w_pdfjs_require__(101);
14360__w_pdfjs_require__(102);
14361__w_pdfjs_require__(105);
14362__w_pdfjs_require__(107);
14363__w_pdfjs_require__(109);
14364__w_pdfjs_require__(113);
14365__w_pdfjs_require__(116);
14366__w_pdfjs_require__(123);
14367__w_pdfjs_require__(89);
14368var _util = __w_pdfjs_require__(1);
14369var _display_utils = __w_pdfjs_require__(168);
14370class PDFDataTransportStream {
14371  constructor(_ref, pdfDataRangeTransport) {
14372    let {
14373      length,
14374      initialData,
14375      progressiveDone = false,
14376      contentDispositionFilename = null,
14377      disableRange = false,
14378      disableStream = false
14379    } = _ref;
14380    (0, _util.assert)(pdfDataRangeTransport, 'PDFDataTransportStream - missing required "pdfDataRangeTransport" argument.');
14381    this._queuedChunks = [];
14382    this._progressiveDone = progressiveDone;
14383    this._contentDispositionFilename = contentDispositionFilename;
14384    if (initialData?.length > 0) {
14385      const buffer = initialData instanceof Uint8Array && initialData.byteLength === initialData.buffer.byteLength ? initialData.buffer : new Uint8Array(initialData).buffer;
14386      this._queuedChunks.push(buffer);
14387    }
14388    this._pdfDataRangeTransport = pdfDataRangeTransport;
14389    this._isStreamingSupported = !disableStream;
14390    this._isRangeSupported = !disableRange;
14391    this._contentLength = length;
14392    this._fullRequestReader = null;
14393    this._rangeReaders = [];
14394    this._pdfDataRangeTransport.addRangeListener((begin, chunk) => {
14395      this._onReceiveData({
14396        begin,
14397        chunk
14398      });
14399    });
14400    this._pdfDataRangeTransport.addProgressListener((loaded, total) => {
14401      this._onProgress({
14402        loaded,
14403        total
14404      });
14405    });
14406    this._pdfDataRangeTransport.addProgressiveReadListener(chunk => {
14407      this._onReceiveData({
14408        chunk
14409      });
14410    });
14411    this._pdfDataRangeTransport.addProgressiveDoneListener(() => {
14412      this._onProgressiveDone();
14413    });
14414    this._pdfDataRangeTransport.transportReady();
14415  }
14416  _onReceiveData(_ref2) {
14417    let {
14418      begin,
14419      chunk
14420    } = _ref2;
14421    const buffer = chunk instanceof Uint8Array && chunk.byteLength === chunk.buffer.byteLength ? chunk.buffer : new Uint8Array(chunk).buffer;
14422    if (begin === undefined) {
14423      if (this._fullRequestReader) {
14424        this._fullRequestReader._enqueue(buffer);
14425      } else {
14426        this._queuedChunks.push(buffer);
14427      }
14428    } else {
14429      const found = this._rangeReaders.some(function (rangeReader) {
14430        if (rangeReader._begin !== begin) {
14431          return false;
14432        }
14433        rangeReader._enqueue(buffer);
14434        return true;
14435      });
14436      (0, _util.assert)(found, "_onReceiveData - no `PDFDataTransportStreamRangeReader` instance found.");
14437    }
14438  }
14439  get _progressiveDataLength() {
14440    return this._fullRequestReader?._loaded ?? 0;
14441  }
14442  _onProgress(evt) {
14443    if (evt.total === undefined) {
14444      this._rangeReaders[0]?.onProgress?.({
14445        loaded: evt.loaded
14446      });
14447    } else {
14448      this._fullRequestReader?.onProgress?.({
14449        loaded: evt.loaded,
14450        total: evt.total
14451      });
14452    }
14453  }
14454  _onProgressiveDone() {
14455    this._fullRequestReader?.progressiveDone();
14456    this._progressiveDone = true;
14457  }
14458  _removeRangeReader(reader) {
14459    const i = this._rangeReaders.indexOf(reader);
14460    if (i >= 0) {
14461      this._rangeReaders.splice(i, 1);
14462    }
14463  }
14464  getFullReader() {
14465    (0, _util.assert)(!this._fullRequestReader, "PDFDataTransportStream.getFullReader can only be called once.");
14466    const queuedChunks = this._queuedChunks;
14467    this._queuedChunks = null;
14468    return new PDFDataTransportStreamReader(this, queuedChunks, this._progressiveDone, this._contentDispositionFilename);
14469  }
14470  getRangeReader(begin, end) {
14471    if (end <= this._progressiveDataLength) {
14472      return null;
14473    }
14474    const reader = new PDFDataTransportStreamRangeReader(this, begin, end);
14475    this._pdfDataRangeTransport.requestDataRange(begin, end);
14476    this._rangeReaders.push(reader);
14477    return reader;
14478  }
14479  cancelAllRequests(reason) {
14480    this._fullRequestReader?.cancel(reason);
14481    for (const reader of this._rangeReaders.slice(0)) {
14482      reader.cancel(reason);
14483    }
14484    this._pdfDataRangeTransport.abort();
14485  }
14486}
14487exports.PDFDataTransportStream = PDFDataTransportStream;
14488class PDFDataTransportStreamReader {
14489  constructor(stream, queuedChunks) {
14490    let progressiveDone = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
14491    let contentDispositionFilename = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
14492    this._stream = stream;
14493    this._done = progressiveDone || false;
14494    this._filename = (0, _display_utils.isPdfFile)(contentDispositionFilename) ? contentDispositionFilename : null;
14495    this._queuedChunks = queuedChunks || [];
14496    this._loaded = 0;
14497    for (const chunk of this._queuedChunks) {
14498      this._loaded += chunk.byteLength;
14499    }
14500    this._requests = [];
14501    this._headersReady = Promise.resolve();
14502    stream._fullRequestReader = this;
14503    this.onProgress = null;
14504  }
14505  _enqueue(chunk) {
14506    if (this._done) {
14507      return;
14508    }
14509    if (this._requests.length > 0) {
14510      const requestCapability = this._requests.shift();
14511      requestCapability.resolve({
14512        value: chunk,
14513        done: false
14514      });
14515    } else {
14516      this._queuedChunks.push(chunk);
14517    }
14518    this._loaded += chunk.byteLength;
14519  }
14520  get headersReady() {
14521    return this._headersReady;
14522  }
14523  get filename() {
14524    return this._filename;
14525  }
14526  get isRangeSupported() {
14527    return this._stream._isRangeSupported;
14528  }
14529  get isStreamingSupported() {
14530    return this._stream._isStreamingSupported;
14531  }
14532  get contentLength() {
14533    return this._stream._contentLength;
14534  }
14535  async read() {
14536    if (this._queuedChunks.length > 0) {
14537      const chunk = this._queuedChunks.shift();
14538      return {
14539        value: chunk,
14540        done: false
14541      };
14542    }
14543    if (this._done) {
14544      return {
14545        value: undefined,
14546        done: true
14547      };
14548    }
14549    const requestCapability = new _util.PromiseCapability();
14550    this._requests.push(requestCapability);
14551    return requestCapability.promise;
14552  }
14553  cancel(reason) {
14554    this._done = true;
14555    for (const requestCapability of this._requests) {
14556      requestCapability.resolve({
14557        value: undefined,
14558        done: true
14559      });
14560    }
14561    this._requests.length = 0;
14562  }
14563  progressiveDone() {
14564    if (this._done) {
14565      return;
14566    }
14567    this._done = true;
14568  }
14569}
14570class PDFDataTransportStreamRangeReader {
14571  constructor(stream, begin, end) {
14572    this._stream = stream;
14573    this._begin = begin;
14574    this._end = end;
14575    this._queuedChunk = null;
14576    this._requests = [];
14577    this._done = false;
14578    this.onProgress = null;
14579  }
14580  _enqueue(chunk) {
14581    if (this._done) {
14582      return;
14583    }
14584    if (this._requests.length === 0) {
14585      this._queuedChunk = chunk;
14586    } else {
14587      const requestsCapability = this._requests.shift();
14588      requestsCapability.resolve({
14589        value: chunk,
14590        done: false
14591      });
14592      for (const requestCapability of this._requests) {
14593        requestCapability.resolve({
14594          value: undefined,
14595          done: true
14596        });
14597      }
14598      this._requests.length = 0;
14599    }
14600    this._done = true;
14601    this._stream._removeRangeReader(this);
14602  }
14603  get isStreamingSupported() {
14604    return false;
14605  }
14606  async read() {
14607    if (this._queuedChunk) {
14608      const chunk = this._queuedChunk;
14609      this._queuedChunk = null;
14610      return {
14611        value: chunk,
14612        done: false
14613      };
14614    }
14615    if (this._done) {
14616      return {
14617        value: undefined,
14618        done: true
14619      };
14620    }
14621    const requestCapability = new _util.PromiseCapability();
14622    this._requests.push(requestCapability);
14623    return requestCapability.promise;
14624  }
14625  cancel(reason) {
14626    this._done = true;
14627    for (const requestCapability of this._requests) {
14628      requestCapability.resolve({
14629        value: undefined,
14630        done: true
14631      });
14632    }
14633    this._requests.length = 0;
14634    this._stream._removeRangeReader(this);
14635  }
14636}
14637
14638/***/ }),
14639/* 181 */
14640/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
14641
14642
14643
14644Object.defineProperty(exports, "__esModule", ({
14645  value: true
14646}));
14647exports.PDFFetchStream = void 0;
14648__w_pdfjs_require__(93);
14649__w_pdfjs_require__(101);
14650__w_pdfjs_require__(102);
14651__w_pdfjs_require__(105);
14652__w_pdfjs_require__(107);
14653__w_pdfjs_require__(109);
14654__w_pdfjs_require__(113);
14655__w_pdfjs_require__(116);
14656__w_pdfjs_require__(123);
14657__w_pdfjs_require__(89);
14658var _util = __w_pdfjs_require__(1);
14659var _network_utils = __w_pdfjs_require__(182);
14660;
14661function createFetchOptions(headers, withCredentials, abortController) {
14662  return {
14663    method: "GET",
14664    headers,
14665    signal: abortController.signal,
14666    mode: "cors",
14667    credentials: withCredentials ? "include" : "same-origin",
14668    redirect: "follow"
14669  };
14670}
14671function createHeaders(httpHeaders) {
14672  const headers = new Headers();
14673  for (const property in httpHeaders) {
14674    const value = httpHeaders[property];
14675    if (value === undefined) {
14676      continue;
14677    }
14678    headers.append(property, value);
14679  }
14680  return headers;
14681}
14682function getArrayBuffer(val) {
14683  if (val instanceof Uint8Array) {
14684    return val.buffer;
14685  }
14686  if (val instanceof ArrayBuffer) {
14687    return val;
14688  }
14689  (0, _util.warn)(`getArrayBuffer - unexpected data format: ${val}`);
14690  return new Uint8Array(val).buffer;
14691}
14692class PDFFetchStream {
14693  constructor(source) {
14694    this.source = source;
14695    this.isHttp = /^https?:/i.test(source.url);
14696    this.httpHeaders = this.isHttp && source.httpHeaders || {};
14697    this._fullRequestReader = null;
14698    this._rangeRequestReaders = [];
14699  }
14700  get _progressiveDataLength() {
14701    return this._fullRequestReader?._loaded ?? 0;
14702  }
14703  getFullReader() {
14704    (0, _util.assert)(!this._fullRequestReader, "PDFFetchStream.getFullReader can only be called once.");
14705    this._fullRequestReader = new PDFFetchStreamReader(this);
14706    return this._fullRequestReader;
14707  }
14708  getRangeReader(begin, end) {
14709    if (end <= this._progressiveDataLength) {
14710      return null;
14711    }
14712    const reader = new PDFFetchStreamRangeReader(this, begin, end);
14713    this._rangeRequestReaders.push(reader);
14714    return reader;
14715  }
14716  cancelAllRequests(reason) {
14717    this._fullRequestReader?.cancel(reason);
14718    for (const reader of this._rangeRequestReaders.slice(0)) {
14719      reader.cancel(reason);
14720    }
14721  }
14722}
14723exports.PDFFetchStream = PDFFetchStream;
14724class PDFFetchStreamReader {
14725  constructor(stream) {
14726    this._stream = stream;
14727    this._reader = null;
14728    this._loaded = 0;
14729    this._filename = null;
14730    const source = stream.source;
14731    this._withCredentials = source.withCredentials || false;
14732    this._contentLength = source.length;
14733    this._headersCapability = new _util.PromiseCapability();
14734    this._disableRange = source.disableRange || false;
14735    this._rangeChunkSize = source.rangeChunkSize;
14736    if (!this._rangeChunkSize && !this._disableRange) {
14737      this._disableRange = true;
14738    }
14739    this._abortController = new AbortController();
14740    this._isStreamingSupported = !source.disableStream;
14741    this._isRangeSupported = !source.disableRange;
14742    this._headers = createHeaders(this._stream.httpHeaders);
14743    const url = source.url;
14744    fetch(url, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then(response => {
14745      if (!(0, _network_utils.validateResponseStatus)(response.status)) {
14746        throw (0, _network_utils.createResponseStatusError)(response.status, url);
14747      }
14748      this._reader = response.body.getReader();
14749      this._headersCapability.resolve();
14750      const getResponseHeader = name => {
14751        return response.headers.get(name);
14752      };
14753      const {
14754        allowRangeRequests,
14755        suggestedLength
14756      } = (0, _network_utils.validateRangeRequestCapabilities)({
14757        getResponseHeader,
14758        isHttp: this._stream.isHttp,
14759        rangeChunkSize: this._rangeChunkSize,
14760        disableRange: this._disableRange
14761      });
14762      this._isRangeSupported = allowRangeRequests;
14763      this._contentLength = suggestedLength || this._contentLength;
14764      this._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader);
14765      if (!this._isStreamingSupported && this._isRangeSupported) {
14766        this.cancel(new _util.AbortException("Streaming is disabled."));
14767      }
14768    }).catch(this._headersCapability.reject);
14769    this.onProgress = null;
14770  }
14771  get headersReady() {
14772    return this._headersCapability.promise;
14773  }
14774  get filename() {
14775    return this._filename;
14776  }
14777  get contentLength() {
14778    return this._contentLength;
14779  }
14780  get isRangeSupported() {
14781    return this._isRangeSupported;
14782  }
14783  get isStreamingSupported() {
14784    return this._isStreamingSupported;
14785  }
14786  async read() {
14787    await this._headersCapability.promise;
14788    const {
14789      value,
14790      done
14791    } = await this._reader.read();
14792    if (done) {
14793      return {
14794        value,
14795        done
14796      };
14797    }
14798    this._loaded += value.byteLength;
14799    this.onProgress?.({
14800      loaded: this._loaded,
14801      total: this._contentLength
14802    });
14803    return {
14804      value: getArrayBuffer(value),
14805      done: false
14806    };
14807  }
14808  cancel(reason) {
14809    this._reader?.cancel(reason);
14810    this._abortController.abort();
14811  }
14812}
14813class PDFFetchStreamRangeReader {
14814  constructor(stream, begin, end) {
14815    this._stream = stream;
14816    this._reader = null;
14817    this._loaded = 0;
14818    const source = stream.source;
14819    this._withCredentials = source.withCredentials || false;
14820    this._readCapability = new _util.PromiseCapability();
14821    this._isStreamingSupported = !source.disableStream;
14822    this._abortController = new AbortController();
14823    this._headers = createHeaders(this._stream.httpHeaders);
14824    this._headers.append("Range", `bytes=${begin}
14824-${end - 1}`);
14825    const url = source.url;
14826    fetch(url, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then(response => {
14827      if (!(0, _network_utils.validateResponseStatus)(response.status)) {
14828        throw (0, _network_utils.createResponseStatusError)(response.status, url);
14829      }
14830      this._readCapability.resolve();
14831      this._reader = response.body.getReader();
14832    }).catch(this._readCapability.reject);
14833    this.onProgress = null;
14834  }
14835  get isStreamingSupported() {
14836    return this._isStreamingSupported;
14837  }
14838  async read() {
14839    await this._readCapability.promise;
14840    const {
14841      value,
14842      done
14843    } = await this._reader.read();
14844    if (done) {
14845      return {
14846        value,
14847        done
14848      };
14849    }
14850    this._loaded += value.byteLength;
14851    this.onProgress?.({
14852      loaded: this._loaded
14853    });
14854    return {
14855      value: getArrayBuffer(value),
14856      done: false
14857    };
14858  }
14859  cancel(reason) {
14860    this._reader?.cancel(reason);
14861    this._abortController.abort();
14862  }
14863}
14864
14865/***/ }),
14866/* 182 */
14867/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
14868
14869
14870
14871Object.defineProperty(exports, "__esModule", ({
14872  value: true
14873}));
14874exports.createResponseStatusError = createResponseStatusError;
14875exports.extractFilenameFromHeader = extractFilenameFromHeader;
14876exports.validateRangeRequestCapabilities = validateRangeRequestCapabilities;
14877exports.validateResponseStatus = validateResponseStatus;
14878var _util = __w_pdfjs_require__(1);
14879var _content_disposition = __w_pdfjs_require__(183);
14880var _display_utils = __w_pdfjs_require__(168);
14881function validateRangeRequestCapabilities(_ref) {
14882  let {
14883    getResponseHeader,
14884    isHttp,
14885    rangeChunkSize,
14886    disableRange
14887  } = _ref;
14888  const returnValues = {
14889    allowRangeRequests: false,
14890    suggestedLength: undefined
14891  };
14892  const length = parseInt(getResponseHeader("Content-Length"), 10);
14893  if (!Number.isInteger(length)) {
14894    return returnValues;
14895  }
14896  returnValues.suggestedLength = length;
14897  if (length <= 2 * rangeChunkSize) {
14898    return returnValues;
14899  }
14900  if (disableRange || !isHttp) {
14901    return returnValues;
14902  }
14903  if (getResponseHeader("Accept-Ranges") !== "bytes") {
14904    return returnValues;
14905  }
14906  const contentEncoding = getResponseHeader("Content-Encoding") || "identity";
14907  if (contentEncoding !== "identity") {
14908    return returnValues;
14909  }
14910  returnValues.allowRangeRequests = true;
14911  return returnValues;
14912}
14913function extractFilenameFromHeader(getResponseHeader) {
14914  const contentDisposition = getResponseHeader("Content-Disposition");
14915  if (contentDisposition) {
14916    let filename = (0, _content_disposition.getFilenameFromContentDispositionHeader)(contentDisposition);
14917    if (filename.includes("%")) {
14918      try {
14919        filename = decodeURIComponent(filename);
14920      } catch {}
14921    }
14922    if ((0, _display_utils.isPdfFile)(filename)) {
14923      return filename;
14924    }
14925  }
14926  return null;
14927}
14928function createResponseStatusError(status, url) {
14929  if (status === 404 || status === 0 && url.startsWith("file:")) {
14930    return new _util.MissingPDFException('Missing PDF "' + url + '".');
14931  }
14932  return new _util.UnexpectedResponseException(`Unexpected server response (${status}) while retrieving PDF "${url}".`, status);
14933}
14934function validateResponseStatus(status) {
14935  return status === 200 || status === 206;
14936}
14937
14938/***/ }),
14939/* 183 */
14940/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
14941
14942
14943
14944Object.defineProperty(exports, "__esModule", ({
14945  value: true
14946}));
14947exports.getFilenameFromContentDispositionHeader = getFilenameFromContentDispositionHeader;
14948__w_pdfjs_require__(89);
14949__w_pdfjs_require__(149);
14950var _util = __w_pdfjs_require__(1);
14951function getFilenameFromContentDispositionHeader(contentDisposition) {
14952  let needsEncodingFixup = true;
14953  let tmp = toParamRegExp("filename\\*", "i").exec(contentDisposition);
14954  if (tmp) {
14955    tmp = tmp[1];
14956    let filename = rfc2616unquote(tmp);
14957    filename = unescape(filename);
14958    filename = rfc5987decode(filename);
14959    filename = rfc2047decode(filename);
14960    return fixupEncoding(filename);
14961  }
14962  tmp = rfc2231getparam(contentDisposition);
14963  if (tmp) {
14964    const filename = rfc2047decode(tmp);
14965    return fixupEncoding(filename);
14966  }
14967  tmp = toParamRegExp("filename", "i").exec(contentDisposition);
14968  if (tmp) {
14969    tmp = tmp[1];
14970    let filename = rfc2616unquote(tmp);
14971    filename = rfc2047decode(filename);
14972    return fixupEncoding(filename);
14973  }
14974  function toParamRegExp(attributePattern, flags) {
14975    return new RegExp("(?:^|;)\\s*" + attributePattern + "\\s*=\\s*" + "(" + '[^";\\s][^;\\s]*' + "|" + '"(?:[^"\\\\]|\\\\"?)+"?' + ")", flags);
14976  }
14977  function textdecode(encoding, value) {
14978    if (encoding) {
14979      if (!/^[\x00-\xFF]+$/.test(value)) {
14980        return value;
14981      }
14982      try {
14983        const decoder = new TextDecoder(encoding, {
14984          fatal: true
14985        });
14986        const buffer = (0, _util.stringToBytes)(value);
14987        value = decoder.decode(buffer);
14988        needsEncodingFixup = false;
14989      } catch {}
14990    }
14991    return value;
14992  }
14993  function fixupEncoding(value) {
14994    if (needsEncodingFixup && /[\x80-\xff]/.test(value)) {
14995      value = textdecode("utf-8", value);
14996      if (needsEncodingFixup) {
14997        value = textdecode("iso-8859-1", value);
14998      }
14999    }
15000    return value;
15001  }
15002  function rfc2231getparam(contentDispositionStr) {
15003    const matches = [];
15004    let match;
15005    const iter = toParamRegExp("filename\\*((?!0\\d)\\d+)(\\*?)", "ig");
15006    while ((match = iter.exec(contentDispositionStr)) !== null) {
15007      let [, n, quot, part] = match;
15008      n = parseInt(n, 10);
15009      if (n in matches) {
15010        if (n === 0) {
15011          break;
15012        }
15013        continue;
15014      }
15015      matches[n] = [quot, part];
15016    }
15017    const parts = [];
15018    for (let n = 0; n < matches.length; ++n) {
15019      if (!(n in matches)) {
15020        break;
15021      }
15022      let [quot, part] = matches[n];
15023      part = rfc2616unquote(part);
15024      if (quot) {
15025        part = unescape(part);
15026        if (n === 0) {
15027          part = rfc5987decode(part);
15028        }
15029      }
15030      parts.push(part);
15031    }
15032    return parts.join("");
15033  }
15034  function rfc2616unquote(value) {
15035    if (value.startsWith('"')) {
15036      const parts = value.slice(1).split('\\"');
15037      for (let i = 0; i < parts.length; ++i) {
15038        const quotindex = parts[i].indexOf('"');
15039        if (quotindex !== -1) {
15040          parts[i] = parts[i].slice(0, quotindex);
15041          parts.length = i + 1;
15042        }
15043        parts[i] = parts[i].replaceAll(/\\(.)/g, "$1");
15044      }
15045      value = parts.join('"');
15046    }
15047    return value;
15048  }
15049  function rfc5987decode(extvalue) {
15050    const encodingend = extvalue.indexOf("'");
15051    if (encodingend === -1) {
15052      return extvalue;
15053    }
15054    const encoding = extvalue.slice(0, encodingend);
15055    const langvalue = extvalue.slice(encodingend + 1);
15056    const value = langvalue.replace(/^[^']*'/, "");
15057    return textdecode(encoding, value);
15058  }
15059  function rfc2047decode(value) {
15060    if (!value.startsWith("=?") || /[\x00-\x19\x80-\xff]/.test(value)) {
15061      return value;
15062    }
15063    return value.replaceAll(/=\?([\w-]*)\?([QqBb])\?((?:[^?]|\?(?!=))*)\?=/g, function (matches, charset, encoding, text) {
15064      if (encoding === "q" || encoding === "Q") {
15065        text = text.replaceAll("_", " ");
15066        text = text.replaceAll(/=([0-9a-fA-F]{2})/g, function (match, hex) {
15067          return String.fromCharCode(parseInt(hex, 16));
15068        });
15069        return textdecode(charset, text);
15070      }
15071      try {
15072        text = atob(text);
15073      } catch {}
15074      return textdecode(charset, text);
15075    });
15076  }
15077  return "";
15078}
15079
15080/***/ }),
15081/* 184 */
15082/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
15083
15084
15085
15086Object.defineProperty(exports, "__esModule", ({
15087  value: true
15088}));
15089exports.PDFNetworkStream = void 0;
15090__w_pdfjs_require__(89);
15091var _util = __w_pdfjs_require__(1);
15092var _network_utils = __w_pdfjs_require__(182);
15093;
15094const OK_RESPONSE = 200;
15095const PARTIAL_CONTENT_RESPONSE = 206;
15096function getArrayBuffer(xhr) {
15097  const data = xhr.response;
15098  if (typeof data !== "string") {
15099    return data;
15100  }
15101  return (0, _util.stringToBytes)(data).buffer;
15102}
15103class NetworkManager {
15104  constructor(url) {
15105    let args = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
15106    this.url = url;
15107    this.isHttp = /^https?:/i.test(url);
15108    this.httpHeaders = this.isHttp && args.httpHeaders || Object.create(null);
15109    this.withCredentials = args.withCredentials || false;
15110    this.currXhrId = 0;
15111    this.pendingRequests = Object.create(null);
15112  }
15113  requestRange(begin, end, listeners) {
15114    const args = {
15115      begin,
15116      end
15117    };
15118    for (const prop in listeners) {
15119      args[prop] = listeners[prop];
15120    }
15121    return this.request(args);
15122  }
15123  requestFull(listeners) {
15124    return this.request(listeners);
15125  }
15126  request(args) {
15127    const xhr = new XMLHttpRequest();
15128    const xhrId = this.currXhrId++;
15129    const pendingRequest = this.pendingRequests[xhrId] = {
15130      xhr
15131    };
15132    xhr.open("GET", this.url);
15133    xhr.withCredentials = this.withCredentials;
15134    for (const property in this.httpHeaders) {
15135      const value = this.httpHeaders[property];
15136      if (value === undefined) {
15137        continue;
15138      }
15139      xhr.setRequestHeader(property, value);
15140    }
15141    if (this.isHttp && "begin" in args && "end" in args) {
15142      xhr.setRequestHeader("Range", `bytes=${args.begin}-${args.end - 1}`);
15143      pendingRequest.expectedStatus = PARTIAL_CONTENT_RESPONSE;
15144    } else {
15145      pendingRequest.expectedStatus = OK_RESPONSE;
15146    }
15147    xhr.responseType = "arraybuffer";
15148    if (args.onError) {
15149      xhr.onerror = function (evt) {
15150        args.onError(xhr.status);
15151      };
15152    }
15153    xhr.onreadystatechange = this.onStateChange.bind(this, xhrId);
15154    xhr.onprogress = this.onProgress.bind(this, xhrId);
15155    pendingRequest.onHeadersReceived = args.onHeadersReceived;
15156    pendingRequest.onDone = args.onDone;
15157    pendingRequest.onError = args.onError;
15158    pendingRequest.onProgress = args.onProgress;
15159    xhr.send(null);
15160    return xhrId;
15161  }
15162  onProgress(xhrId, evt) {
15163    const pendingRequest = this.pendingRequests[xhrId];
15164    if (!pendingRequest) {
15165      return;
15166    }
15167    pendingRequest.onProgress?.(evt);
15168  }
15169  onStateChange(xhrId, evt) {
15170    const pendingRequest = this.pendingRequests[xhrId];
15171    if (!pendingRequest) {
15172      return;
15173    }
15174    const xhr = pendingRequest.xhr;
15175    if (xhr.readyState >= 2 && pendingRequest.onHeadersReceived) {
15176      pendingRequest.onHeadersReceived();
15177      delete pendingRequest.onHeadersReceived;
15178    }
15179    if (xhr.readyState !== 4) {
15180      return;
15181    }
15182    if (!(xhrId in this.pendingRequests)) {
15183      return;
15184    }
15185    delete this.pendingRequests[xhrId];
15186    if (xhr.status === 0 && this.isHttp) {
15187      pendingRequest.onError?.(xhr.status);
15188      return;
15189    }
15190    const xhrStatus = xhr.status || OK_RESPONSE;
15191    const ok_response_on_range_request = xhrStatus === OK_RESPONSE && pendingRequest.expectedStatus === PARTIAL_CONTENT_RESPONSE;
15192    if (!ok_response_on_range_request && xhrStatus !== pendingRequest.expectedStatus) {
15193      pendingRequest.onError?.(xhr.status);
15194      return;
15195    }
15196    const chunk = getArrayBuffer(xhr);
15197    if (xhrStatus === PARTIAL_CONTENT_RESPONSE) {
15198      const rangeHeader = xhr.getResponseHeader("Content-Range");
15199      const matches = /bytes (\d+)-(\d+)\/(\d+)/.exec(rangeHeader);
15200      pendingRequest.onDone({
15201        begin: parseInt(matches[1], 10),
15202        chunk
15203      });
15204    } else if (chunk) {
15205      pendingRequest.onDone({
15206        begin: 0,
15207        chunk
15208      });
15209    } else {
15210      pendingRequest.onError?.(xhr.status);
15211    }
15212  }
15213  getRequestXhr(xhrId) {
15214    return this.pendingRequests[xhrId].xhr;
15215  }
15216  isPendingRequest(xhrId) {
15217    return xhrId in this.pendingRequests;
15218  }
15219  abortRequest(xhrId) {
15220    const xhr = this.pendingRequests[xhrId].xhr;
15221    delete this.pendingRequests[xhrId];
15222    xhr.abort();
15223  }
15224}
15225class PDFNetworkStream {
15226  constructor(source) {
15227    this._source = source;
15228    this._manager = new NetworkManager(source.url, {
15229      httpHeaders: source.httpHeaders,
15230      withCredentials: source.withCredentials
15231    });
15232    this._rangeChunkSize = source.rangeChunkSize;
15233    this._fullRequestReader = null;
15234    this._rangeRequestReaders = [];
15235  }
15236  _onRangeRequestReaderClosed(reader) {
15237    const i = this._rangeRequestReaders.indexOf(reader);
15238    if (i >= 0) {
15239      this._rangeRequestReaders.splice(i, 1);
15240    }
15241  }
15242  getFullReader() {
15243    (0, _util.assert)(!this._fullRequestReader, "PDFNetworkStream.getFullReader can only be called once.");
15244    this._fullRequestReader = new PDFNetworkStreamFullRequestReader(this._manager, this._source);
15245    return this._fullRequestReader;
15246  }
15247  getRangeReader(begin, end) {
15248    const reader = new PDFNetworkStreamRangeRequestReader(this._manager, begin, end);
15249    reader.onClosed = this._onRangeRequestReaderClosed.bind(this);
15250    this._rangeRequestReaders.push(reader);
15251    return reader;
15252  }
15253  cancelAllRequests(reason) {
15254    this._fullRequestReader?.cancel(reason);
15255    for (const reader of this._rangeRequestReaders.slice(0)) {
15256      reader.cancel(reason);
15257    }
15258  }
15259}
15260exports.PDFNetworkStream = PDFNetworkStream;
15261class PDFNetworkStreamFullRequestReader {
15262  constructor(manager, source) {
15263    this._manager = manager;
15264    const args = {
15265      onHeadersReceived: this._onHeadersReceived.bind(this),
15266      onDone: this._onDone.bind(this),
15267      onError: this._onError.bind(this),
15268      onProgress: this._onProgress.bind(this)
15269    };
15270    this._url = source.url;
15271    this._fullRequestId = manager.requestFull(args);
15272    this._headersReceivedCapability = new _util.PromiseCapability();
15273    this._disableRange = source.disableRange || false;
15274    this._contentLength = source.length;
15275    this._rangeChunkSize = source.rangeChunkSize;
15276    if (!this._rangeChunkSize && !this._disableRange) {
15277      this._disableRange = true;
15278    }
15279    this._isStreamingSupported = false;
15280    this._isRangeSupported = false;
15281    this._cachedChunks = [];
15282    this._requests = [];
15283    this._done = false;
15284    this._storedError = undefined;
15285    this._filename = null;
15286    this.onProgress = null;
15287  }
15288  _onHeadersReceived() {
15289    const fullRequestXhrId = this._fullRequestId;
15290    const fullRequestXhr = this._manager.getRequestXhr(fullRequestXhrId);
15291    const getResponseHeader = name => {
15292      return fullRequestXhr.getResponseHeader(name);
15293    };
15294    const {
15295      allowRangeRequests,
15296      suggestedLength
15297    } = (0, _network_utils.validateRangeRequestCapabilities)({
15298      getResponseHeader,
15299      isHttp: this._manager.isHttp,
15300      rangeChunkSize: this._rangeChunkSize,
15301      disableRange: this._disableRange
15302    });
15303    if (allowRangeRequests) {
15304      this._isRangeSupported = true;
15305    }
15306    this._contentLength = suggestedLength || this._contentLength;
15307    this._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader);
15308    if (this._isRangeSupported) {
15309      this._manager.abortRequest(fullRequestXhrId);
15310    }
15311    this._headersReceivedCapability.resolve();
15312  }
15313  _onDone(data) {
15314    if (data) {
15315      if (this._requests.length > 0) {
15316        const requestCapability = this._requests.shift();
15317        requestCapability.resolve({
15318          value: data.chunk,
15319          done: false
15320        });
15321      } else {
15322        this._cachedChunks.push(data.chunk);
15323      }
15324    }
15325    this._done = true;
15326    if (this._cachedChunks.length > 0) {
15327      return;
15328    }
15329    for (const requestCapability of this._requests) {
15330      requestCapability.resolve({
15331        value: undefined,
15332        done: true
15333      });
15334    }
15335    this._requests.length = 0;
15336  }
15337  _onError(status) {
15338    this._storedError = (0, _network_utils.createResponseStatusError)(status, this._url);
15339    this._headersReceivedCapability.reject(this._storedError);
15340    for (const requestCapability of this._requests) {
15341      requestCapability.reject(this._storedError);
15342    }
15343    this._requests.length = 0;
15344    this._cachedChunks.length = 0;
15345  }
15346  _onProgress(evt) {
15347    this.onProgress?.({
15348      loaded: evt.loaded,
15349      total: evt.lengthComputable ? evt.total : this._contentLength
15350    });
15351  }
15352  get filename() {
15353    return this._filename;
15354  }
15355  get isRangeSupported() {
15356    return this._isRangeSupported;
15357  }
15358  get isStreamingSupported() {
15359    return this._isStreamingSupported;
15360  }
15361  get contentLength() {
15362    return this._contentLength;
15363  }
15364  get headersReady() {
15365    return this._headersReceivedCapability.promise;
15366  }
15367  async read() {
15368    if (this._storedError) {
15369      throw this._storedError;
15370    }
15371    if (this._cachedChunks.length > 0) {
15372      const chunk = this._cachedChunks.shift();
15373      return {
15374        value: chunk,
15375        done: false
15376      };
15377    }
15378    if (this._done) {
15379      return {
15380        value: undefined,
15381        done: true
15382      };
15383    }
15384    const requestCapability = new _util.PromiseCapability();
15385    this._requests.push(requestCapability);
15386    return requestCapability.promise;
15387  }
15388  cancel(reason) {
15389    this._done = true;
15390    this._headersReceivedCapability.reject(reason);
15391    for (const requestCapability of this._requests) {
15392      requestCapability.resolve({
15393        value: undefined,
15394        done: true
15395      });
15396    }
15397    this._requests.length = 0;
15398    if (this._manager.isPendingRequest(this._fullRequestId)) {
15399      this._manager.abortRequest(this._fullRequestId);
15400    }
15401    this._fullRequestReader = null;
15402  }
15403}
15404class PDFNetworkStreamRangeRequestReader {
15405  constructor(manager, begin, end) {
15406    this._manager = manager;
15407    const args = {
15408      onDone: this._onDone.bind(this),
15409      onError: this._onError.bind(this),
15410      onProgress: this._onProgress.bind(this)
15411    };
15412    this._url = manager.url;
15413    this._requestId = manager.requestRange(begin, end, args);
15414    this._requests = [];
15415    this._queuedChunk = null;
15416    this._done = false;
15417    this._storedError = undefined;
15418    this.onProgress = null;
15419    this.onClosed = null;
15420  }
15421  _close() {
15422    this.onClosed?.(this);
15423  }
15424  _onDone(data) {
15425    const chunk = data.chunk;
15426    if (this._requests.length > 0) {
15427      const requestCapability = this._requests.shift();
15428      requestCapability.resolve({
15429        value: chunk,
15430        done: false
15431      });
15432    } else {
15433      this._queuedChunk = chunk;
15434    }
15435    this._done = true;
15436    for (const requestCapability of this._requests) {
15437      requestCapability.resolve({
15438        value: undefined,
15439        done: true
15440      });
15441    }
15442    this._requests.length = 0;
15443    this._close();
15444  }
15445  _onError(status) {
15446    this._storedError = (0, _network_utils.createResponseStatusError)(status, this._url);
15447    for (const requestCapability of this._requests) {
15448      requestCapability.reject(this._storedError);
15449    }
15450    this._requests.length = 0;
15451    this._queuedChunk = null;
15452  }
15453  _onProgress(evt) {
15454    if (!this.isStreamingSupported) {
15455      this.onProgress?.({
15456        loaded: evt.loaded
15457      });
15458    }
15459  }
15460  get isStreamingSupported() {
15461    return false;
15462  }
15463  async read() {
15464    if (this._storedError) {
15465      throw this._storedError;
15466    }
15467    if (this._queuedChunk !== null) {
15468      const chunk = this._queuedChunk;
15469      this._queuedChunk = null;
15470      return {
15471        value: chunk,
15472        done: false
15473      };
15474    }
15475    if (this._done) {
15476      return {
15477        value: undefined,
15478        done: true
15479      };
15480    }
15481    const requestCapability = new _util.PromiseCapability();
15482    this._requests.push(requestCapability);
15483    return requestCapability.promise;
15484  }
15485  cancel(reason) {
15486    this._done = true;
15487    for (const requestCapability of this._requests) {
15488      requestCapability.resolve({
15489        value: undefined,
15490        done: true
15491      });
15492    }
15493    this._requests.length = 0;
15494    if (this._manager.isPendingRequest(this._requestId)) {
15495      this._manager.abortRequest(this._requestId);
15496    }
15497    this._close();
15498  }
15499}
15500
15501/***/ }),
15502/* 185 */
15503/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
15504
15505
15506
15507Object.defineProperty(exports, "__esModule", ({
15508  value: true
15509}));
15510exports.PDFNodeStream = void 0;
15511__w_pdfjs_require__(89);
15512__w_pdfjs_require__(93);
15513__w_pdfjs_require__(101);
15514__w_pdfjs_require__(102);
15515__w_pdfjs_require__(105);
15516__w_pdfjs_require__(107);
15517__w_pdfjs_require__(109);
15518__w_pdfjs_require__(113);
15519__w_pdfjs_require__(116);
15520__w_pdfjs_require__(123);
15521var _util = __w_pdfjs_require__(1);
15522var _network_utils = __w_pdfjs_require__(182);
15523;
15524const fileUriRegex = /^file:\/\/\/[a-zA-Z]:\//;
15525function parseUrl(sourceUrl) {
15526  const url = require("url");
15527  const parsedUrl = url.parse(sourceUrl);
15528  if (parsedUrl.protocol === "file:" || parsedUrl.host) {
15529    return parsedUrl;
15530  }
15531  if (/^[a-z]:[/\\]/i.test(sourceUrl)) {
15532    return url.parse(`file:///${sourceUrl}`);
15533  }
15534  if (!parsedUrl.host) {
15535    parsedUrl.protocol = "file:";
15536  }
15537  return parsedUrl;
15538}
15539class PDFNodeStream {
15540  constructor(source) {
15541    this.source = source;
15542    this.url = parseUrl(source.url);
15543    this.isHttp = this.url.protocol === "http:" || this.url.protocol === "https:";
15544    this.isFsUrl = this.url.protocol === "file:";
15545    this.httpHeaders = this.isHttp && source.httpHeaders || {};
15546    this._fullRequestReader = null;
15547    this._rangeRequestReaders = [];
15548  }
15549  get _progressiveDataLength() {
15550    return this._fullRequestReader?._loaded ?? 0;
15551  }
15552  getFullReader() {
15553    (0, _util.assert)(!this._fullRequestReader, "PDFNodeStream.getFullReader can only be called once.");
15554    this._fullRequestReader = this.isFsUrl ? new PDFNodeStreamFsFullReader(this) : new PDFNodeStreamFullReader(this);
15555    return this._fullRequestReader;
15556  }
15557  getRangeReader(start, end) {
15558    if (end <= this._progressiveDataLength) {
15559      return null;
15560    }
15561    const rangeReader = this.isFsUrl ? new PDFNodeStreamFsRangeReader(this, start, end) : new PDFNodeStreamRangeReader(this, start, end);
15562    this._rangeRequestReaders.push(rangeReader);
15563    return rangeReader;
15564  }
15565  cancelAllRequests(reason) {
15566    this._fullRequestReader?.cancel(reason);
15567    for (const reader of this._rangeRequestReaders.slice(0)) {
15568      reader.cancel(reason);
15569    }
15570  }
15571}
15572exports.PDFNodeStream = PDFNodeStream;
15573class BaseFullReader {
15574  constructor(stream) {
15575    this._url = stream.url;
15576    this._done = false;
15577    this._storedError = null;
15578    this.onProgress = null;
15579    const source = stream.source;
15580    this._contentLength = source.length;
15581    this._loaded = 0;
15582    this._filename = null;
15583    this._disableRange = source.disableRange || false;
15584    this._rangeChunkSize = source.rangeChunkSize;
15585    if (!this._rangeChunkSize && !this._disableRange) {
15586      this._disableRange = true;
15587    }
15588    this._isStreamingSupported = !source.disableStream;
15589    this._isRangeSupported = !source.disableRange;
15590    this._readableStream = null;
15591    this._readCapability = new _util.PromiseCapability();
15592    this._headersCapability = new _util.PromiseCapability();
15593  }
15594  get headersReady() {
15595    return this._headersCapability.promise;
15596  }
15597  get filename() {
15598    return this._filename;
15599  }
15600  get contentLength() {
15601    return this._contentLength;
15602  }
15603  get isRangeSupported() {
15604    return this._isRangeSupported;
15605  }
15606  get isStreamingSupported() {
15607    return this._isStreamingSupported;
15608  }
15609  async read() {
15610    await this._readCapability.promise;
15611    if (this._done) {
15612      return {
15613        value: undefined,
15614        done: true
15615      };
15616    }
15617    if (this._storedError) {
15618      throw this._storedError;
15619    }
15620    const chunk = this._readableStream.read();
15621    if (chunk === null) {
15622      this._readCapability = new _util.PromiseCapability();
15623      return this.read();
15624    }
15625    this._loaded += chunk.length;
15626    this.onProgress?.({
15627      loaded: this._loaded,
15628      total: this._contentLength
15629    });
15630    const buffer = new Uint8Array(chunk).buffer;
15631    return {
15632      value: buffer,
15633      done: false
15634    };
15635  }
15636  cancel(reason) {
15637    if (!this._readableStream) {
15638      this._error(reason);
15639      return;
15640    }
15641    this._readableStream.destroy(reason);
15642  }
15643  _error(reason) {
15644    this._storedError = reason;
15645    this._readCapability.resolve();
15646  }
15647  _setReadableStream(readableStream) {
15648    this._readableStream = readableStream;
15649    readableStream.on("readable", () => {
15650      this._readCapability.resolve();
15651    });
15652    readableStream.on("end", () => {
15653      readableStream.destroy();
15654      this._done = true;
15655      this._readCapability.resolve();
15656    });
15657    readableStream.on("error", reason => {
15658      this._error(reason);
15659    });
15660    if (!this._isStreamingSupported && this._isRangeSupported) {
15661      this._error(new _util.AbortException("streaming is disabled"));
15662    }
15663    if (this._storedError) {
15664      this._readableStream.destroy(this._storedError);
15665    }
15666  }
15667}
15668class BaseRangeReader {
15669  constructor(stream) {
15670    this._url = stream.url;
15671    this._done = false;
15672    this._storedError = null;
15673    this.onProgress = null;
15674    this._loaded = 0;
15675    this._readableStream = null;
15676    this._readCapability = new _util.PromiseCapability();
15677    const source = stream.source;
15678    this._isStreamingSupported = !source.disableStream;
15679  }
15680  get isStreamingSupported() {
15681    return this._isStreamingSupported;
15682  }
15683  async read() {
15684    await this._readCapability.promise;
15685    if (this._done) {
15686      return {
15687        value: undefined,
15688        done: true
15689      };
15690    }
15691    if (this._storedError) {
15692      throw this._storedError;
15693    }
15694    const chunk = this._readableStream.read();
15695    if (chunk === null) {
15696      this._readCapability = new _util.PromiseCapability();
15697      return this.read();
15698    }
15699    this._loaded += chunk.length;
15700    this.onProgress?.({
15701      loaded: this._loaded
15702    });
15703    const buffer = new Uint8Array(chunk).buffer;
15704    return {
15705      value: buffer,
15706      done: false
15707    };
15708  }
15709  cancel(reason) {
15710    if (!this._readableStream) {
15711      this._error(reason);
15712      return;
15713    }
15714    this._readableStream.destroy(reason);
15715  }
15716  _error(reason) {
15717    this._storedError = reason;
15718    this._readCapability.resolve();
15719  }
15720  _setReadableStream(readableStream) {
15721    this._readableStream = readableStream;
15722    readableStream.on("readable", () => {
15723      this._readCapability.resolve();
15724    });
15725    readableStream.on("end", () => {
15726      readableStream.destroy();
15727      this._done = true;
15728      this._readCapability.resolve();
15729    });
15730    readableStream.on("error", reason => {
15731      this._error(reason);
15732    });
15733    if (this._storedError) {
15734      this._readableStream.destroy(this._storedError);
15735    }
15736  }
15737}
15738function createRequestOptions(parsedUrl, headers) {
15739  return {
15740    protocol: parsedUrl.protocol,
15741    auth: parsedUrl.auth,
15742    host: parsedUrl.hostname,
15743    port: parsedUrl.port,
15744    path: parsedUrl.path,
15745    method: "GET",
15746    headers
15747  };
15748}
15749class PDFNodeStreamFullReader extends BaseFullReader {
15750  constructor(stream) {
15751    super(stream);
15752    const handleResponse = response => {
15753      if (response.statusCode === 404) {
15754        const error = new _util.MissingPDFException(`Missing PDF "${this._url}".`);
15755        this._storedError = error;
15756        this._headersCapability.reject(error);
15757        return;
15758      }
15759      this._headersCapability.resolve();
15760      this._setReadableStream(response);
15761      const getResponseHeader = name => {
15762        return this._readableStream.headers[name.toLowerCase()];
15763      };
15764      const {
15765        allowRangeRequests,
15766        suggestedLength
15767      } = (0, _network_utils.validateRangeRequestCapabilities)({
15768        getResponseHeader,
15769        isHttp: stream.isHttp,
15770        rangeChunkSize: this._rangeChunkSize,
15771        disableRange: this._disableRange
15772      });
15773      this._isRangeSupported = allowRangeRequests;
15774      this._contentLength = suggestedLength || this._contentLength;
15775      this._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader);
15776    };
15777    this._request = null;
15778    if (this._url.protocol === "http:") {
15779      const http = require("http");
15780      this._request = http.request(createRequestOptions(this._url, stream.httpHeaders), handleResponse);
15781    } else {
15782      const https = require("https");
15783      this._request = https.request(createRequestOptions(this._url, stream.httpHeaders), handleResponse);
15784    }
15785    this._request.on("error", reason => {
15786      this._storedError = reason;
15787      this._headersCapability.reject(reason);
15788    });
15789    this._request.end();
15790  }
15791}
15792class PDFNodeStreamRangeReader extends BaseRangeReader {
15793  constructor(stream, start, end) {
15794    super(stream);
15795    this._httpHeaders = {};
15796    for (const property in stream.httpHeaders) {
15797      const value = stream.httpHeaders[property];
15798      if (value === undefined) {
15799        continue;
15800      }
15801      this._httpHeaders[property] = value;
15802    }
15803    this._httpHeaders.Range = `bytes=${start}-${end - 1}`;
15804    const handleResponse = response => {
15805      if (response.statusCode === 404) {
15806        const error = new _util.MissingPDFException(`Missing PDF "${this._url}".`);
15807        this._storedError = error;
15808        return;
15809      }
15810      this._setReadableStream(response);
15811    };
15812    this._request = null;
15813    if (this._url.protocol === "http:") {
15814      const http = require("http");
15815      this._request = http.request(createRequestOptions(this._url, this._httpHeaders), handleResponse);
15816    } else {
15817      const https = require("https");
15818      this._request = https.request(createRequestOptions(this._url, this._httpHeaders), handleResponse);
15819    }
15820    this._request.on("error", reason => {
15821      this._storedError = reason;
15822    });
15823    this._request.end();
15824  }
15825}
15826class PDFNodeStreamFsFullReader extends BaseFullReader {
15827  constructor(stream) {
15828    super(stream);
15829    let path = decodeURIComponent(this._url.path);
15830    if (fileUriRegex.test(this._url.href)) {
15831      path = path.replace(/^\//, "");
15832    }
15833    const fs = require("fs");
15834    fs.lstat(path, (error, stat) => {
15835      if (error) {
15836        if (error.code === "ENOENT") {
15837          error = new _util.MissingPDFException(`Missing PDF "${path}".`);
15838        }
15839        this._storedError = error;
15840        this._headersCapability.reject(error);
15841        return;
15842      }
15843      this._contentLength = stat.size;
15844      this._setReadableStream(fs.createReadStream(path));
15845      this._headersCapability.resolve();
15846    });
15847  }
15848}
15849class PDFNodeStreamFsRangeReader extends BaseRangeReader {
15850  constructor(stream, start, end) {
15851    super(stream);
15852    let path = decodeURIComponent(this._url.path);
15853    if (fileUriRegex.test(this._url.href)) {
15854      path = path.replace(/^\//, "");
15855    }
15856    const fs = require("fs");
15857    this._setReadableStream(fs.createReadStream(path, {
15858      start,
15859      end: end - 1
15860    }));
15861  }
15862}
15863
15864/***/ }),
15865/* 186 */
15866/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
15867
15868
15869
15870Object.defineProperty(exports, "__esModule", ({
15871  value: true
15872}));
15873exports.SVGGraphics = void 0;
15874__w_pdfjs_require__(84);
15875__w_pdfjs_require__(86);
15876__w_pdfjs_require__(87);
15877__w_pdfjs_require__(93);
15878__w_pdfjs_require__(101);
15879__w_pdfjs_require__(102);
15880__w_pdfjs_require__(105);
15881__w_pdfjs_require__(107);
15882__w_pdfjs_require__(109);
15883__w_pdfjs_require__(113);
15884__w_pdfjs_require__(116);
15885__w_pdfjs_require__(123);
15886__w_pdfjs_require__(2);
15887__w_pdfjs_require__(89);
15888__w_pdfjs_require__(187);
15889var _display_utils = __w_pdfjs_require__(168);
15890var _util = __w_pdfjs_require__(1);
15891;
15892const SVG_DEFAULTS = {
15893  fontStyle: "normal",
15894  fontWeight: "normal",
15895  fillColor: "#000000"
15896};
15897const XML_NS = "http://www.w3.org/XML/1998/namespace";
15898const XLINK_NS = "http://www.w3.org/1999/xlink";
15899const LINE_CAP_STYLES = ["butt", "round", "square"];
15900const LINE_JOIN_STYLES = ["miter", "round", "bevel"];
15901const createObjectURL = function (data) {
15902  let contentType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
15903  let forceDataSchema = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
15904  if (URL.createObjectURL && typeof Blob !== "undefined" && !forceDataSchema) {
15905    return URL.createObjectURL(new Blob([data], {
15906      type: contentType
15907    }));
15908  }
15909  const digits = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
15910  let buffer = `data:${contentType};base64,`;
15911  for (let i = 0, ii = data.length; i < ii; i += 3) {
15912    const b1 = data[i] & 0xff;
15913    const b2 = data[i + 1] & 0xff;
15914    const b3 = data[i + 2] & 0xff;
15915    const d1 = b1 >> 2,
15916      d2 = (b1 & 3) << 4 | b2 >> 4;
15917    const d3 = i + 1 < ii ? (b2 & 0xf) << 2 | b3 >> 6 : 64;
15918    const d4 = i + 2 < ii ? b3 & 0x3f : 64;
15919    buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4];
15920  }
15921  return buffer;
15922};
15923const convertImgDataToPng = function () {
15924  const PNG_HEADER = new Uint8Array([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]);
15925  const CHUNK_WRAPPER_SIZE = 12;
15926  const crcTable = new Int32Array(256);
15927  for (let i = 0; i < 256; i++) {
15928    let c = i;
15929    for (let h = 0; h < 8; h++) {
15930      c = c & 1 ? 0xedb88320 ^ c >> 1 & 0x7fffffff : c >> 1 & 0x7fffffff;
15931    }
15932    crcTable[i] = c;
15933  }
15934  function crc32(data, start, end) {
15935    let crc = -1;
15936    for (let i = start; i < end; i++) {
15937      const a = (crc ^ data[i]) & 0xff;
15938      const b = crcTable[a];
15939      crc = crc >>> 8 ^ b;
15940    }
15941    return crc ^ -1;
15942  }
15943  function writePngChunk(type, body, data, offset) {
15944    let p = offset;
15945    const len = body.length;
15946    data[p] = len >> 24 & 0xff;
15947    data[p + 1] = len >> 16 & 0xff;
15948    data[p + 2] = len >> 8 & 0xff;
15949    data[p + 3] = len & 0xff;
15950    p += 4;
15951    data[p] = type.charCodeAt(0) & 0xff;
15952    data[p + 1] = type.charCodeAt(1) & 0xff;
15953    data[p + 2] = type.charCodeAt(2) & 0xff;
15954    data[p + 3] = type.charCodeAt(3) & 0xff;
15955    p += 4;
15956    data.set(body, p);
15957    p += body.length;
15958    const crc = crc32(data, offset + 4, p);
15959    data[p] = crc >> 24 & 0xff;
15960    data[p + 1] = crc >> 16 & 0xff;
15961    data[p + 2] = crc >> 8 & 0xff;
15962    data[p + 3] = crc & 0xff;
15963  }
15964  function adler32(data, start, end) {
15965    let a = 1;
15966    let b = 0;
15967    for (let i = start; i < end; ++i) {
15968      a = (a + (data[i] & 0xff)) % 65521;
15969      b = (b + a) % 65521;
15970    }
15971    return b << 16 | a;
15972  }
15973  function deflateSync(literals) {
15974    if (!_util.isNodeJS) {
15975      return deflateSyncUncompressed(literals);
15976    }
15977    try {
15978      const input = parseInt(process.versions.node) >= 8 ? literals : Buffer.from(literals);
15979      const output = require("zlib").deflateSync(input, {
15980        level: 9
15981      });
15982      return output instanceof Uint8Array ? output : new Uint8Array(output);
15983    } catch (e) {
15984      (0, _util.warn)("Not compressing PNG because zlib.deflateSync is unavailable: " + e);
15985    }
15986    return deflateSyncUncompressed(literals);
15987  }
15988  function deflateSyncUncompressed(literals) {
15989    let len = literals.length;
15990    const maxBlockLength = 0xffff;
15991    const deflateBlocks = Math.ceil(len / maxBlockLength);
15992    const idat = new Uint8Array(2 + len + deflateBlocks * 5 + 4);
15993    let pi = 0;
15994    idat[pi++] = 0x78;
15995    idat[pi++] = 0x9c;
15996    let pos = 0;
15997    while (len > maxBlockLength) {
15998      idat[pi++] = 0x00;
15999      idat[pi++] = 0xff;
16000      idat[pi++] = 0xff;
16001      idat[pi++] = 0x00;
16002      idat[pi++] = 0x00;
16003      idat.set(literals.subarray(pos, pos + maxBlockLength), pi);
16004      pi += maxBlockLength;
16005      pos += maxBlockLength;
16006      len -= maxBlockLength;
16007    }
16008    idat[pi++] = 0x01;
16009    idat[pi++] = len & 0xff;
16010    idat[pi++] = len >> 8 & 0xff;
16011    idat[pi++] = ~len & 0xffff & 0xff;
16012    idat[pi++] = (~len & 0xffff) >> 8 & 0xff;
16013    idat.set(literals.subarray(pos), pi);
16014    pi += literals.length - pos;
16015    const adler = adler32(literals, 0, literals.length);
16016    idat[pi++] = adler >> 24 & 0xff;
16017    idat[pi++] = adler >> 16 & 0xff;
16018    idat[pi++] = adler >> 8 & 0xff;
16019    idat[pi++] = adler & 0xff;
16020    return idat;
16021  }
16022  function encode(imgData, kind, forceDataSchema, isMask) {
16023    const width = imgData.width;
16024    const height = imgData.height;
16025    let bitDepth, colorType, lineSize;
16026    const bytes = imgData.data;
16027    switch (kind) {
16028      case _util.ImageKind.GRAYSCALE_1BPP:
16029        colorType = 0;
16030        bitDepth = 1;
16031        lineSize = width + 7 >> 3;
16032        break;
16033      case _util.ImageKind.RGB_24BPP:
16034        colorType = 2;
16035        bitDepth = 8;
16036        lineSize = width * 3;
16037        break;
16038      case _util.ImageKind.RGBA_32BPP:
16039        colorType = 6;
16040        bitDepth = 8;
16041        lineSize = width * 4;
16042        break;
16043      default:
16044        throw new Error("invalid format");
16045    }
16046    const literals = new Uint8Array((1 + lineSize) * height);
16047    let offsetLiterals = 0,
16048      offsetBytes = 0;
16049    for (let y = 0; y < height; ++y) {
16050      literals[offsetLiterals++] = 0;
16051      literals.set(bytes.subarray(offsetBytes, offsetBytes + lineSize), offsetLiterals);
16052      offsetBytes += lineSize;
16053      offsetLiterals += lineSize;
16054    }
16055    if (kind === _util.ImageKind.GRAYSCALE_1BPP && isMask) {
16056      offsetLiterals = 0;
16057      for (let y = 0; y < height; y++) {
16058        offsetLiterals++;
16059        for (let i = 0; i < lineSize; i++) {
16060          literals[offsetLiterals++] ^= 0xff;
16061        }
16062      }
16063    }
16064    const ihdr = new Uint8Array([width >> 24 & 0xff, width >> 16 & 0xff, width >> 8 & 0xff, width & 0xff, height >> 24 & 0xff, height >> 16 & 0xff, height >> 8 & 0xff, height & 0xff, bitDepth, colorType, 0x00, 0x00, 0x00]);
16065    const idat = deflateSync(literals);
16066    const pngLength = PNG_HEADER.length + CHUNK_WRAPPER_SIZE * 3 + ihdr.length + idat.length;
16067    const data = new Uint8Array(pngLength);
16068    let offset = 0;
16069    data.set(PNG_HEADER, offset);
16070    offset += PNG_HEADER.length;
16071    writePngChunk("IHDR", ihdr, data, offset);
16072    offset += CHUNK_WRAPPER_SIZE + ihdr.length;
16073    writePngChunk("IDATA", idat, data, offset);
16074    offset += CHUNK_WRAPPER_SIZE + idat.length;
16075    writePngChunk("IEND", new Uint8Array(0), data, offset);
16076    return createObjectURL(data, "image/png", forceDataSchema);
16077  }
16078  return function convertImgDataToPng(imgData, forceDataSchema, isMask) {
16079    const kind = imgData.kind === undefined ? _util.ImageKind.GRAYSCALE_1BPP : imgData.kind;
16080    return encode(imgData, kind, forceDataSchema, isMask);
16081  };
16082}();
16083class SVGExtraState {
16084  constructor() {
16085    this.fontSizeScale = 1;
16086    this.fontWeight = SVG_DEFAULTS.fontWeight;
16087    this.fontSize = 0;
16088    this.textMatrix = _util.IDENTITY_MATRIX;
16089    this.fontMatrix = _util.FONT_IDENTITY_MATRIX;
16090    this.leading = 0;
16091    this.textRenderingMode = _util.TextRenderingMode.FILL;
16092    this.textMatrixScale = 1;
16093    this.x = 0;
16094    this.y = 0;
16095    this.lineX = 0;
16096    this.lineY = 0;
16097    this.charSpacing = 0;
16098    this.wordSpacing = 0;
16099    this.textHScale = 1;
16100    this.textRise = 0;
16101    this.fillColor = SVG_DEFAULTS.fillColor;
16102    this.strokeColor = "#000000";
16103    this.fillAlpha = 1;
16104    this.strokeAlpha = 1;
16105    this.lineWidth = 1;
16106    this.lineJoin = "";
16107    this.lineCap = "";
16108    this.miterLimit = 0;
16109    this.dashArray = [];
16110    this.dashPhase = 0;
16111    this.dependencies = [];
16112    this.activeClipUrl = null;
16113    this.clipGroup = null;
16114    this.maskId = "";
16115  }
16116  clone() {
16117    return Object.create(this);
16118  }
16119  setCurrentPoint(x, y) {
16120    this.x = x;
16121    this.y = y;
16122  }
16123}
16124function opListToTree(opList) {
16125  let opTree = [];
16126  const tmp = [];
16127  for (const opListElement of opList) {
16128    if (opListElement.fn === "save") {
16129      opTree.push({
16130        fnId: 92,
16131        fn: "group",
16132        items: []
16133      });
16134      tmp.push(opTree);
16135      opTree = opTree.at(-1).items;
16136      continue;
16137    }
16138    if (opListElement.fn === "restore") {
16139      opTree = tmp.pop();
16140    } else {
16141      opTree.push(opListElement);
16142    }
16143  }
16144  return opTree;
16145}
16146function pf(value) {
16147  if (Number.isInteger(value)) {
16148    return value.toString();
16149  }
16150  const s = value.toFixed(10);
16151  let i = s.length - 1;
16152  if (s[i] !== "0") {
16153    return s;
16154  }
16155  do {
16156    i--;
16157  } while (s[i] === "0");
16158  return s.substring(0, s[i] === "." ? i : i + 1);
16159}
16160function pm(m) {
16161  if (m[4] === 0 && m[5] === 0) {
16162    if (m[1] === 0 && m[2] === 0) {
16163      if (m[0] === 1 && m[3] === 1) {
16164        return "";
16165      }
16166      return `scale(${pf(m[0])} ${pf(m[3])})`;
16167    }
16168    if (m[0] === m[3] && m[1] === -m[2]) {
16169      const a = Math.acos(m[0]) * 180 / Math.PI;
16170      return `rotate(${pf(a)})`;
16171    }
16172  } else if (m[0] === 1 && m[1] === 0 && m[2] === 0 && m[3] === 1) {
16173    return `translate(${pf(m[4])} ${pf(m[5])})`;
16174  }
16175  return `matrix(${pf(m[0])} ${pf(m[1])} ${pf(m[2])} ${pf(m[3])} ${pf(m[4])} ` + `${pf(m[5])})`;
16176}
16177let clipCount = 0;
16178let maskCount = 0;
16179let shadingCount = 0;
16180class SVGGraphics {
16181  constructor(commonObjs, objs) {
16182    let forceDataSchema = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
16183    (0, _display_utils.deprecated)("The SVG back-end is no longer maintained and *may* be removed in the future.");
16184    this.svgFactory = new _display_utils.DOMSVGFactory();
16185    this.current = new SVGExtraState();
16186    this.transformMatrix = _util.IDENTITY_MATRIX;
16187    this.transformStack = [];
16188    this.extraStack = [];
16189    this.commonObjs = commonObjs;
16190    this.objs = objs;
16191    this.pendingClip = null;
16192    this.pendingEOFill = false;
16193    this.embedFonts = false;
16194    this.embeddedFonts = Object.create(null);
16195    this.cssStyle = null;
16196    this.forceDataSchema = !!forceDataSchema;
16197    this._operatorIdMapping = [];
16198    for (const op in _util.OPS) {
16199      this._operatorIdMapping[_util.OPS[op]] = op;
16200    }
16201  }
16202  getObject(data) {
16203    let fallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
16204    if (typeof data === "string") {
16205      return data.startsWith("g_") ? this.commonObjs.get(data) : this.objs.get(data);
16206    }
16207    return fallback;
16208  }
16209  save() {
16210    this.transformStack.push(this.transformMatrix);
16211    const old = this.current;
16212    this.extraStack.push(old);
16213    this.current = old.clone();
16214  }
16215  restore() {
16216    this.transformMatrix = this.transformStack.pop();
16217    this.current = this.extraStack.pop();
16218    this.pendingClip = null;
16219    this.tgrp = null;
16220  }
16221  group(items) {
16222    this.save();
16223    this.executeOpTree(items);
16224    this.restore();
16225  }
16226  loadDependencies(operatorList) {
16227    const fnArray = operatorList.fnArray;
16228    const argsArray = operatorList.argsArray;
16229    for (let i = 0, ii = fnArray.length; i < ii; i++) {
16230      if (fnArray[i] !== _util.OPS.dependency) {
16231        continue;
16232      }
16233      for (const obj of argsArray[i]) {
16234        const objsPool = obj.startsWith("g_") ? this.commonObjs : this.objs;
16235        const promise = new Promise(resolve => {
16236          objsPool.get(obj, resolve);
16237        });
16238        this.current.dependencies.push(promise);
16239      }
16240    }
16241    return Promise.all(this.current.dependencies);
16242  }
16243  transform(a, b, c, d, e, f) {
16244    const transformMatrix = [a, b, c, d, e, f];
16245    this.transformMatrix = _util.Util.transform(this.transformMatrix, transformMatrix);
16246    this.tgrp = null;
16247  }
16248  getSVG(operatorList, viewport) {
16249    this.viewport = viewport;
16250    const svgElement = this._initialize(viewport);
16251    return this.loadDependencies(operatorList).then(() => {
16252      this.transformMatrix = _util.IDENTITY_MATRIX;
16253      this.executeOpTree(this.convertOpList(operatorList));
16254      return svgElement;
16255    });
16256  }
16257  convertOpList(operatorList) {
16258    const operatorIdMapping = this._operatorIdMapping;
16259    const argsArray = operatorList.argsArray;
16260    const fnArray = operatorList.fnArray;
16261    const opList = [];
16262    for (let i = 0, ii = fnArray.length; i < ii; i++) {
16263      const fnId = fnArray[i];
16264      opList.push({
16265        fnId,
16266        fn: operatorIdMapping[fnId],
16267        args: argsArray[i]
16268      });
16269    }
16270    return opListToTree(opList);
16271  }
16272  executeOpTree(opTree) {
16273    for (const opTreeElement of opTree) {
16274      const fn = opTreeElement.fn;
16275      const fnId = opTreeElement.fnId;
16276      const args = opTreeElement.args;
16277      switch (fnId | 0) {
16278        case _util.OPS.beginText:
16279          this.beginText();
16280          break;
16281        case _util.OPS.dependency:
16282          break;
16283        case _util.OPS.setLeading:
16284          this.setLeading(args);
16285          break;
16286        case _util.OPS.setLeadingMoveText:
16287          this.setLeadingMoveText(args[0], args[1]);
16288          break;
16289        case _util.OPS.setFont:
16290          this.setFont(args);
16291          break;
16292        case _util.OPS.showText:
16293          this.showText(args[0]);
16294          break;
16295        case _util.OPS.showSpacedText:
16296          this.showText(args[0]);
16297          break;
16298        case _util.OPS.endText:
16299          this.endText();
16300          break;
16301        case _util.OPS.moveText:
16302          this.moveText(args[0], args[1]);
16303          break;
16304        case _util.OPS.setCharSpacing:
16305          this.setCharSpacing(args[0]);
16306          break;
16307        case _util.OPS.setWordSpacing:
16308          this.setWordSpacing(args[0]);
16309          break;
16310        case _util.OPS.setHScale:
16311          this.setHScale(args[0]);
16312          break;
16313        case _util.OPS.setTextMatrix:
16314          this.setTextMatrix(args[0], args[1], args[2], args[3], args[4], args[5]);
16315          break;
16316        case _util.OPS.setTextRise:
16317          this.setTextRise(args[0]);
16318          break;
16319        case _util.OPS.setTextRenderingMode:
16320          this.setTextRenderingMode(args[0]);
16321          break;
16322        case _util.OPS.setLineWidth:
16323          this.setLineWidth(args[0]);
16324          break;
16325        case _util.OPS.setLineJoin:
16326          this.setLineJoin(args[0]);
16327          break;
16328        case _util.OPS.setLineCap:
16329          this.setLineCap(args[0]);
16330          break;
16331        case _util.OPS.setMiterLimit:
16332          this.setMiterLimit(args[0]);
16333          break;
16334        case _util.OPS.setFillRGBColor:
16335          this.setFillRGBColor(args[0], args[1], args[2]);
16336          break;
16337        case _util.OPS.setStrokeRGBColor:
16338          this.setStrokeRGBColor(args[0], args[1], args[2]);
16339          break;
16340        case _util.OPS.setStrokeColorN:
16341          this.setStrokeColorN(args);
16342          break;
16343        case _util.OPS.setFillColorN:
16344          this.setFillColorN(args);
16345          break;
16346        case _util.OPS.shadingFill:
16347          this.shadingFill(args[0]);
16348          break;
16349        case _util.OPS.setDash:
16350          this.setDash(args[0], args[1]);
16351          break;
16352        case _util.OPS.setRenderingIntent:
16353          this.setRenderingIntent(args[0]);
16354          break;
16355        case _util.OPS.setFlatness:
16356          this.setFlatness(args[0]);
16357          break;
16358        case _util.OPS.setGState:
16359          this.setGState(args[0]);
16360          break;
16361        case _util.OPS.fill:
16362          this.fill();
16363          break;
16364        case _util.OPS.eoFill:
16365          this.eoFill();
16366          break;
16367        case _util.OPS.stroke:
16368          this.stroke();
16369          break;
16370        case _util.OPS.fillStroke:
16371          this.fillStroke();
16372          break;
16373        case _util.OPS.eoFillStroke:
16374          this.eoFillStroke();
16375          break;
16376        case _util.OPS.clip:
16377          this.clip("nonzero");
16378          break;
16379        case _util.OPS.eoClip:
16380          this.clip("evenodd");
16381          break;
16382        case _util.OPS.paintSolidColorImageMask:
16383          this.paintSolidColorImageMask();
16384          break;
16385        case _util.OPS.paintImageXObject:
16386          this.paintImageXObject(args[0]);
16387          break;
16388        case _util.OPS.paintInlineImageXObject:
16389          this.paintInlineImageXObject(args[0]);
16390          break;
16391        case _util.OPS.paintImageMaskXObject:
16392          this.paintImageMaskXObject(args[0]);
16393          break;
16394        case _util.OPS.paintFormXObjectBegin:
16395          this.paintFormXObjectBegin(args[0], args[1]);
16396          break;
16397        case _util.OPS.paintFormXObjectEnd:
16398          this.paintFormXObjectEnd();
16399          break;
16400        case _util.OPS.closePath:
16401          this.closePath();
16402          break;
16403        case _util.OPS.closeStroke:
16404          this.closeStroke();
16405          break;
16406        case _util.OPS.closeFillStroke:
16407          this.closeFillStroke();
16408          break;
16409        case _util.OPS.closeEOFillStroke:
16410          this.closeEOFillStroke();
16411          break;
16412        case _util.OPS.nextLine:
16413          this.nextLine();
16414          break;
16415        case _util.OPS.transform:
16416          this.transform(args[0], args[1], args[2], args[3], args[4], args[5]);
16417          break;
16418        case _util.OPS.constructPath:
16419          this.constructPath(args[0], args[1]);
16420          break;
16421        case _util.OPS.endPath:
16422          this.endPath();
16423          break;
16424        case 92:
16425          this.group(opTreeElement.items);
16426          break;
16427        default:
16428          (0, _util.warn)(`Unimplemented operator ${fn}`);
16429          break;
16430      }
16431    }
16432  }
16433  setWordSpacing(wordSpacing) {
16434    this.current.wordSpacing = wordSpacing;
16435  }
16436  setCharSpacing(charSpacing) {
16437    this.current.charSpacing = charSpacing;
16438  }
16439  nextLine() {
16440    this.moveText(0, this.current.leading);
16441  }
16442  setTextMatrix(a, b, c, d, e, f) {
16443    const current = this.current;
16444    current.textMatrix = current.lineMatrix = [a, b, c, d, e, f];
16445    current.textMatrixScale = Math.hypot(a, b);
16446    current.x = current.lineX = 0;
16447    current.y = current.lineY = 0;
16448    current.xcoords = [];
16449    current.ycoords = [];
16450    current.tspan = this.svgFactory.createElement("svg:tspan");
16451    current.tspan.setAttributeNS(null, "font-family", current.fontFamily);
16452    current.tspan.setAttributeNS(null, "font-size", `${pf(current.fontSize)}px`);
16453    current.tspan.setAttributeNS(null, "y", pf(-current.y));
16454    current.txtElement = this.svgFactory.createElement("svg:text");
16455    current.txtElement.append(current.tspan);
16456  }
16457  beginText() {
16458    const current = this.current;
16459    current.x = current.lineX = 0;
16460    current.y = current.lineY = 0;
16461    current.textMatrix = _util.IDENTITY_MATRIX;
16462    current.lineMatrix = _util.IDENTITY_MATRIX;
16463    current.textMatrixScale = 1;
16464    current.tspan = this.svgFactory.createElement("svg:tspan");
16465    current.txtElement = this.svgFactory.createElement("svg:text");
16466    current.txtgrp = this.svgFactory.createElement("svg:g");
16467    current.xcoords = [];
16468    current.ycoords = [];
16469  }
16470  moveText(x, y) {
16471    const current = this.current;
16472    current.x = current.lineX += x;
16473    current.y = current.lineY += y;
16474    current.xcoords = [];
16475    current.ycoords = [];
16476    current.tspan = this.svgFactory.createElement("svg:tspan");
16477    current.tspan.setAttributeNS(null, "font-family", current.fontFamily);
16478    current.tspan.setAttributeNS(null, "font-size", `${pf(current.fontSize)}px`);
16479    current.tspan.setAttributeNS(null, "y", pf(-current.y));
16480  }
16481  showText(glyphs) {
16482    const current = this.current;
16483    const font = current.font;
16484    const fontSize = current.fontSize;
16485    if (fontSize === 0) {
16486      return;
16487    }
16488    const fontSizeScale = current.fontSizeScale;
16489    const charSpacing = current.charSpacing;
16490    const wordSpacing = current.wordSpacing;
16491    const fontDirection = current.fontDirection;
16492    const textHScale = current.textHScale * fontDirection;
16493    const vertical = font.vertical;
16494    const spacingDir = vertical ? 1 : -1;
16495    const defaultVMetrics = font.defaultVMetrics;
16496    const widthAdvanceScale = fontSize * current.fontMatrix[0];
16497    let x = 0;
16498    for (const glyph of glyphs) {
16499      if (glyph === null) {
16500        x += fontDirection * wordSpacing;
16501        continue;
16502      }
16502 else if (typeof glyph === "number") {
16503        x += spacingDir * glyph * fontSize / 1000;
16504        continue;
16505      }
16506      const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;
16507      const character = glyph.fontChar;
16508      let scaledX, scaledY;
16509      let width = glyph.width;
16510      if (vertical) {
16511        let vx;
16512        const vmetric = glyph.vmetric || defaultVMetrics;
16513        vx = glyph.vmetric ? vmetric[1] : width * 0.5;
16514        vx = -vx * widthAdvanceScale;
16515        const vy = vmetric[2] * widthAdvanceScale;
16516        width = vmetric ? -vmetric[0] : width;
16517        scaledX = vx / fontSizeScale;
16518        scaledY = (x + vy) / fontSizeScale;
16519      } else {
16520        scaledX = x / fontSizeScale;
16521        scaledY = 0;
16522      }
16523      if (glyph.isInFont || font.missingFile) {
16524        current.xcoords.push(current.x + scaledX);
16525        if (vertical) {
16526          current.ycoords.push(-current.y + scaledY);
16527        }
16528        current.tspan.textContent += character;
16529      } else {}
16530      const charWidth = vertical ? width * widthAdvanceScale - spacing * fontDirection : width * widthAdvanceScale + spacing * fontDirection;
16531      x += charWidth;
16532    }
16533    current.tspan.setAttributeNS(null, "x", current.xcoords.map(pf).join(" "));
16534    if (vertical) {
16535      current.tspan.setAttributeNS(null, "y", current.ycoords.map(pf).join(" "));
16536    } else {
16537      current.tspan.setAttributeNS(null, "y", pf(-current.y));
16538    }
16539    if (vertical) {
16540      current.y -= x;
16541    } else {
16542      current.x += x * textHScale;
16543    }
16544    current.tspan.setAttributeNS(null, "font-family", current.fontFamily);
16545    current.tspan.setAttributeNS(null, "font-size", `${pf(current.fontSize)}px`);
16546    if (current.fontStyle !== SVG_DEFAULTS.fontStyle) {
16547      current.tspan.setAttributeNS(null, "font-style", current.fontStyle);
16548    }
16549    if (current.fontWeight !== SVG_DEFAULTS.fontWeight) {
16550      current.tspan.setAttributeNS(null, "font-weight", current.fontWeight);
16551    }
16552    const fillStrokeMode = current.textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK;
16553    if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {
16554      if (current.fillColor !== SVG_DEFAULTS.fillColor) {
16555        current.tspan.setAttributeNS(null, "fill", current.fillColor);
16556      }
16557      if (current.fillAlpha < 1) {
16558        current.tspan.setAttributeNS(null, "fill-opacity", current.fillAlpha);
16559      }
16560    } else if (current.textRenderingMode === _util.TextRenderingMode.ADD_TO_PATH) {
16561      current.tspan.setAttributeNS(null, "fill", "transparent");
16562    } else {
16563      current.tspan.setAttributeNS(null, "fill", "none");
16564    }
16565    if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {
16566      const lineWidthScale = 1 / (current.textMatrixScale || 1);
16567      this._setStrokeAttributes(current.tspan, lineWidthScale);
16568    }
16569    let textMatrix = current.textMatrix;
16570    if (current.textRise !== 0) {
16571      textMatrix = textMatrix.slice();
16572      textMatrix[5] += current.textRise;
16573    }
16574    current.txtElement.setAttributeNS(null, "transform", `${pm(textMatrix)} scale(${pf(textHScale)}, -1)`);
16575    current.txtElement.setAttributeNS(XML_NS, "xml:space", "preserve");
16576    current.txtElement.append(current.tspan);
16577    current.txtgrp.append(current.txtElement);
16578    this._ensureTransformGroup().append(current.txtElement);
16579  }
16580  setLeadingMoveText(x, y) {
16581    this.setLeading(-y);
16582    this.moveText(x, y);
16583  }
16584  addFontStyle(fontObj) {
16585    if (!fontObj.data) {
16586      throw new Error("addFontStyle: No font data available, " + 'ensure that the "fontExtraProperties" API parameter is set.');
16587    }
16588    if (!this.cssStyle) {
16589      this.cssStyle = this.svgFactory.createElement("svg:style");
16590      this.cssStyle.setAttributeNS(null, "type", "text/css");
16591      this.defs.append(this.cssStyle);
16592    }
16593    const url = createObjectURL(fontObj.data, fontObj.mimetype, this.forceDataSchema);
16594    this.cssStyle.textContent += `@font-face { font-family: "${fontObj.loadedName}";` + ` src: url(${url}); }\n`;
16595  }
16596  setFont(details) {
16597    const current = this.current;
16598    const fontObj = this.commonObjs.get(details[0]);
16599    let size = details[1];
16600    current.font = fontObj;
16601    if (this.embedFonts && !fontObj.missingFile && !this.embeddedFonts[fontObj.loadedName]) {
16602      this.addFontStyle(fontObj);
16603      this.embeddedFonts[fontObj.loadedName] = fontObj;
16604    }
16605    current.fontMatrix = fontObj.fontMatrix || _util.FONT_IDENTITY_MATRIX;
16606    let bold = "normal";
16607    if (fontObj.black) {
16608      bold = "900";
16609    } else if (fontObj.bold) {
16610      bold = "bold";
16611    }
16612    const italic = fontObj.italic ? "italic" : "normal";
16613    if (size < 0) {
16614      size = -size;
16615      current.fontDirection = -1;
16616    } else {
16617      current.fontDirection = 1;
16618    }
16619    current.fontSize = size;
16620    current.fontFamily = fontObj.loadedName;
16621    current.fontWeight = bold;
16622    current.fontStyle = italic;
16623    current.tspan = this.svgFactory.createElement("svg:tspan");
16624    current.tspan.setAttributeNS(null, "y", pf(-current.y));
16625    current.xcoords = [];
16626    current.ycoords = [];
16627  }
16628  endText() {
16629    const current = this.current;
16630    if (current.textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG && current.txtElement?.hasChildNodes()) {
16631      current.element = current.txtElement;
16632      this.clip("nonzero");
16633      this.endPath();
16634    }
16635  }
16636  setLineWidth(width) {
16637    if (width > 0) {
16638      this.current.lineWidth = width;
16639    }
16640  }
16641  setLineCap(style) {
16642    this.current.lineCap = LINE_CAP_STYLES[style];
16643  }
16644  setLineJoin(style) {
16645    this.current.lineJoin = LINE_JOIN_STYLES[style];
16646  }
16647  setMiterLimit(limit) {
16648    this.current.miterLimit = limit;
16649  }
16650  setStrokeAlpha(strokeAlpha) {
16651    this.current.strokeAlpha = strokeAlpha;
16652  }
16653  setStrokeRGBColor(r, g, b) {
16654    this.current.strokeColor = _util.Util.makeHexColor(r, g, b);
16655  }
16656  setFillAlpha(fillAlpha) {
16657    this.current.fillAlpha = fillAlpha;
16658  }
16659  setFillRGBColor(r, g, b) {
16660    this.current.fillColor = _util.Util.makeHexColor(r, g, b);
16661    this.current.tspan = this.svgFactory.createElement("svg:tspan");
16662    this.current.xcoords = [];
16663    this.current.ycoords = [];
16664  }
16665  setStrokeColorN(args) {
16666    this.current.strokeColor = this._makeColorN_Pattern(args);
16667  }
16668  setFillColorN(args) {
16669    this.current.fillColor = this._makeColorN_Pattern(args);
16670  }
16671  shadingFill(args) {
16672    const {
16673      width,
16674      height
16675    } = this.viewport;
16676    const inv = _util.Util.inverseTransform(this.transformMatrix);
16677    const [x0, y0, x1, y1] = _util.Util.getAxialAlignedBoundingBox([0, 0, width, height], inv);
16678    const rect = this.svgFactory.createElement("svg:rect");
16679    rect.setAttributeNS(null, "x", x0);
16680    rect.setAttributeNS(null, "y", y0);
16681    rect.setAttributeNS(null, "width", x1 - x0);
16682    rect.setAttributeNS(null, "height", y1 - y0);
16683    rect.setAttributeNS(null, "fill", this._makeShadingPattern(args));
16684    if (this.current.fillAlpha < 1) {
16685      rect.setAttributeNS(null, "fill-opacity", this.current.fillAlpha);
16686    }
16687    this._ensureTransformGroup().append(rect);
16688  }
16689  _makeColorN_Pattern(args) {
16690    if (args[0] === "TilingPattern") {
16691      return this._makeTilingPattern(args);
16692    }
16693    return this._makeShadingPattern(args);
16694  }
16695  _makeTilingPattern(args) {
16696    const color = args[1];
16697    const operatorList = args[2];
16698    const matrix = args[3] || _util.IDENTITY_MATRIX;
16699    const [x0, y0, x1, y1] = args[4];
16700    const xstep = args[5];
16701    const ystep = args[6];
16702    const paintType = args[7];
16703    const tilingId = `shading${shadingCount++}`;
16704    const [tx0, ty0, tx1, ty1] = _util.Util.normalizeRect([..._util.Util.applyTransform([x0, y0
16704], matrix), ..._util.Util.applyTransform([x1, y1], matrix)]);
16705    const [xscale, yscale] = _util.Util.singularValueDecompose2dScale(matrix);
16706    const txstep = xstep * xscale;
16707    const tystep = ystep * yscale;
16708    const tiling = this.svgFactory.createElement("svg:pattern");
16709    tiling.setAttributeNS(null, "id", tilingId);
16710    tiling.setAttributeNS(null, "patternUnits", "userSpaceOnUse");
16711    tiling.setAttributeNS(null, "width", txstep);
16712    tiling.setAttributeNS(null, "height", tystep);
16713    tiling.setAttributeNS(null, "x", `${tx0}`);
16714    tiling.setAttributeNS(null, "y", `${ty0}`);
16715    const svg = this.svg;
16716    const transformMatrix = this.transformMatrix;
16717    const fillColor = this.current.fillColor;
16718    const strokeColor = this.current.strokeColor;
16719    const bbox = this.svgFactory.create(tx1 - tx0, ty1 - ty0);
16720    this.svg = bbox;
16721    this.transformMatrix = matrix;
16722    if (paintType === 2) {
16723      const cssColor = _util.Util.makeHexColor(...color);
16724      this.current.fillColor = cssColor;
16725      this.current.strokeColor = cssColor;
16726    }
16727    this.executeOpTree(this.convertOpList(operatorList));
16728    this.svg = svg;
16729    this.transformMatrix = transformMatrix;
16730    this.current.fillColor = fillColor;
16731    this.current.strokeColor = strokeColor;
16732    tiling.append(bbox.childNodes[0]);
16733    this.defs.append(tiling);
16734    return `url(#${tilingId})`;
16735  }
16736  _makeShadingPattern(args) {
16737    if (typeof args === "string") {
16738      args = this.objs.get(args);
16739    }
16740    switch (args[0]) {
16741      case "RadialAxial":
16742        const shadingId = `shading${shadingCount++}`;
16743        const colorStops = args[3];
16744        let gradient;
16745        switch (args[1]) {
16746          case "axial":
16747            const point0 = args[4];
16748            const point1 = args[5];
16749            gradient = this.svgFactory.createElement("svg:linearGradient");
16750            gradient.setAttributeNS(null, "id", shadingId);
16751            gradient.setAttributeNS(null, "gradientUnits", "userSpaceOnUse");
16752            gradient.setAttributeNS(null, "x1", point0[0]);
16753            gradient.setAttributeNS(null, "y1", point0[1]);
16754            gradient.setAttributeNS(null, "x2", point1[0]);
16755            gradient.setAttributeNS(null, "y2", point1[1]);
16756            break;
16757          case "radial":
16758            const focalPoint = args[4];
16759            const circlePoint = args[5];
16760            const focalRadius = args[6];
16761            const circleRadius = args[7];
16762            gradient = this.svgFactory.createElement("svg:radialGradient");
16763            gradient.setAttributeNS(null, "id", shadingId);
16764            gradient.setAttributeNS(null, "gradientUnits", "userSpaceOnUse");
16765            gradient.setAttributeNS(null, "cx", circlePoint[0]);
16766            gradient.setAttributeNS(null, "cy", circlePoint[1]);
16767            gradient.setAttributeNS(null, "r", circleRadius);
16768            gradient.setAttributeNS(null, "fx", focalPoint[0]);
16769            gradient.setAttributeNS(null, "fy", focalPoint[1]);
16770            gradient.setAttributeNS(null, "fr", focalRadius);
16771            break;
16772          default:
16773            throw new Error(`Unknown RadialAxial type: ${args[1]}`);
16774        }
16775        for (const colorStop of colorStops) {
16776          const stop = this.svgFactory.createElement("svg:stop");
16777          stop.setAttributeNS(null, "offset", colorStop[0]);
16778          stop.setAttributeNS(null, "stop-color", colorStop[1]);
16779          gradient.append(stop);
16780        }
16781        this.defs.append(gradient);
16782        return `url(#${shadingId})`;
16783      case "Mesh":
16784        (0, _util.warn)("Unimplemented pattern Mesh");
16785        return null;
16786      case "Dummy":
16787        return "hotpink";
16788      default:
16789        throw new Error(`Unknown IR type: ${args[0]}`);
16790    }
16791  }
16792  setDash(dashArray, dashPhase) {
16793    this.current.dashArray = dashArray;
16794    this.current.dashPhase = dashPhase;
16795  }
16796  constructPath(ops, args) {
16797    const current = this.current;
16798    let x = current.x,
16799      y = current.y;
16800    let d = [];
16801    let j = 0;
16802    for (const op of ops) {
16803      switch (op | 0) {
16804        case _util.OPS.rectangle:
16805          x = args[j++];
16806          y = args[j++];
16807          const width = args[j++];
16808          const height = args[j++];
16809          const xw = x + width;
16810          const yh = y + height;
16811          d.push("M", pf(x), pf(y), "L", pf(xw), pf(y), "L", pf(xw), pf(yh), "L", pf(x), pf(yh), "Z");
16812          break;
16813        case _util.OPS.moveTo:
16814          x = args[j++];
16815          y = args[j++];
16816          d.push("M", pf(x), pf(y));
16817          break;
16818        case _util.OPS.lineTo:
16819          x = args[j++];
16820          y = args[j++];
16821          d.push("L", pf(x), pf(y));
16822          break;
16823        case _util.OPS.curveTo:
16824          x = args[j + 4];
16825          y = args[j + 5];
16826          d.push("C", pf(args[j]), pf(args[j + 1]), pf(args[j + 2]), pf(args[j + 3]), pf(x), pf(y));
16827          j += 6;
16828          break;
16829        case _util.OPS.curveTo2:
16830          d.push("C", pf(x), pf(y), pf(args[j]), pf(args[j + 1]), pf(args[j + 2]), pf(args[j + 3]));
16831          x = args[j + 2];
16832          y = args[j + 3];
16833          j += 4;
16834          break;
16835        case _util.OPS.curveTo3:
16836          x = args[j + 2];
16837          y = args[j + 3];
16838          d.push("C", pf(args[j]), pf(args[j + 1]), pf(x), pf(y), pf(x), pf(y));
16839          j += 4;
16840          break;
16841        case _util.OPS.closePath:
16842          d.push("Z");
16843          break;
16844      }
16845    }
16846    d = d.join(" ");
16847    if (current.path && ops.length > 0 && ops[0] !== _util.OPS.rectangle && ops[0] !== _util.OPS.moveTo) {
16848      d = current.path.getAttributeNS(null, "d") + d;
16849    } else {
16850      current.path = this.svgFactory.createElement("svg:path");
16851      this._ensureTransformGroup().append(current.path);
16852    }
16853    current.path.setAttributeNS(null, "d", d);
16854    current.path.setAttributeNS(null, "fill", "none");
16855    current.element = current.path;
16856    current.setCurrentPoint(x, y);
16857  }
16858  endPath() {
16859    const current = this.current;
16860    current.path = null;
16861    if (!this.pendingClip) {
16862      return;
16863    }
16864    if (!current.element) {
16865      this.pendingClip = null;
16866      return;
16867    }
16868    const clipId = `clippath${clipCount++}`;
16869    const clipPath = this.svgFactory.createElement("svg:clipPath");
16870    clipPath.setAttributeNS(null, "id", clipId);
16871    clipPath.setAttributeNS(null, "transform", pm(this.transformMatrix));
16872    const clipElement = current.element.cloneNode(true);
16873    if (this.pendingClip === "evenodd") {
16874      clipElement.setAttributeNS(null, "clip-rule", "evenodd");
16875    } else {
16876      clipElement.setAttributeNS(null, "clip-rule", "nonzero");
16877    }
16878    this.pendingClip = null;
16879    clipPath.append(clipElement);
16880    this.defs.append(clipPath);
16881    if (current.activeClipUrl) {
16882      current.clipGroup = null;
16883      for (const prev of this.extraStack) {
16884        prev.clipGroup = null;
16885      }
16886      clipPath.setAttributeNS(null, "clip-path", current.activeClipUrl);
16887    }
16888    current.activeClipUrl = `url(#${clipId})`;
16889    this.tgrp = null;
16890  }
16891  clip(type) {
16892    this.pendingClip = type;
16893  }
16894  closePath() {
16895    const current = this.current;
16896    if (current.path) {
16897      const d = `${current.path.getAttributeNS(null, "d")}Z`;
16898      current.path.setAttributeNS(null, "d", d);
16899    }
16900  }
16901  setLeading(leading) {
16902    this.current.leading = -leading;
16903  }
16904  setTextRise(textRise) {
16905    this.current.textRise = textRise;
16906  }
16907  setTextRenderingMode(textRenderingMode) {
16908    this.current.textRenderingMode = textRenderingMode;
16909  }
16910  setHScale(scale) {
16911    this.current.textHScale = scale / 100;
16912  }
16913  setRenderingIntent(intent) {}
16914  setFlatness(flatness) {}
16915  setGState(states) {
16916    for (const [key, value] of states) {
16917      switch (key) {
16918        case "LW":
16919          this.setLineWidth(value);
16920          break;
16921        case "LC":
16922          this.setLineCap(value);
16923          break;
16924        case "LJ":
16925          this.setLineJoin(value);
16926          break;
16927        case "ML":
16928          this.setMiterLimit(value);
16929          break;
16930        case "D":
16931          this.setDash(value[0], value[1]);
16932          break;
16933        case "RI":
16934          this.setRenderingIntent(value);
16935          break;
16936        case "FL":
16937          this.setFlatness(value);
16938          break;
16939        case "Font":
16940          this.setFont(value);
16941          break;
16942        case "CA":
16943          this.setStrokeAlpha(value);
16944          break;
16945        case "ca":
16946          this.setFillAlpha(value);
16947          break;
16948        default:
16949          (0, _util.warn)(`Unimplemented graphic state operator ${key}`);
16950          break;
16951      }
16952    }
16953  }
16954  fill() {
16955    const current = this.current;
16956    if (current.element) {
16957      current.element.setAttributeNS(null, "fill", current.fillColor);
16958      current.element.setAttributeNS(null, "fill-opacity", current.fillAlpha);
16959      this.endPath();
16960    }
16961  }
16962  stroke() {
16963    const current = this.current;
16964    if (current.element) {
16965      this._setStrokeAttributes(current.element);
16966      current.element.setAttributeNS(null, "fill", "none");
16967      this.endPath();
16968    }
16969  }
16970  _setStrokeAttributes(element) {
16971    let lineWidthScale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
16972    const current = this.current;
16973    let dashArray = current.dashArray;
16974    if (lineWidthScale !== 1 && dashArray.length > 0) {
16975      dashArray = dashArray.map(function (value) {
16976        return lineWidthScale * value;
16977      });
16978    }
16979    element.setAttributeNS(null, "stroke", current.strokeColor);
16980    element.setAttributeNS(null, "stroke-opacity", current.strokeAlpha);
16981    element.setAttributeNS(null, "stroke-miterlimit", pf(current.miterLimit));
16982    element.setAttributeNS(null, "stroke-linecap", current.lineCap);
16983    element.setAttributeNS(null, "stroke-linejoin", current.lineJoin);
16984    element.setAttributeNS(null, "stroke-width", pf(lineWidthScale * current.lineWidth) + "px");
16985    element.setAttributeNS(null, "stroke-dasharray", dashArray.map(pf).join(" "));
16986    element.setAttributeNS(null, "stroke-dashoffset", pf(lineWidthScale * current.dashPhase) + "px");
16987  }
16988  eoFill() {
16989    this.current.element?.setAttributeNS(null, "fill-rule", "evenodd");
16990    this.fill();
16991  }
16992  fillStroke() {
16993    this.stroke();
16994    this.fill();
16995  }
16996  eoFillStroke() {
16997    this.current.element?.setAttributeNS(null, "fill-rule", "evenodd");
16998    this.fillStroke();
16999  }
17000  closeStroke() {
17001    this.closePath();
17002    this.stroke();
17003  }
17004  closeFillStroke() {
17005    this.closePath();
17006    this.fillStroke();
17007  }
17008  closeEOFillStroke() {
17009    this.closePath();
17010    this.eoFillStroke();
17011  }
17012  paintSolidColorImageMask() {
17013    const rect = this.svgFactory.createElement("svg:rect");
17014    rect.setAttributeNS(null, "x", "0");
17015    rect.setAttributeNS(null, "y", "0");
17016    rect.setAttributeNS(null, "width", "1px");
17017    rect.setAttributeNS(null, "height", "1px");
17018    rect.setAttributeNS(null, "fill", this.current.fillColor);
17019    this._ensureTransformGroup().append(rect);
17020  }
17021  paintImageXObject(objId) {
17022    const imgData = this.getObject(objId);
17023    if (!imgData) {
17024      (0, _util.warn)(`Dependent image with object ID ${objId} is not ready yet`);
17025      return;
17026    }
17027    this.paintInlineImageXObject(imgData);
17028  }
17029  paintInlineImageXObject(imgData, mask) {
17030    const width = imgData.width;
17031    const height = imgData.height;
17032    const imgSrc = convertImgDataToPng(imgData, this.forceDataSchema, !!mask);
17033    const cliprect = this.svgFactory.createElement("svg:rect");
17034    cliprect.setAttributeNS(null, "x", "0");
17035    cliprect.setAttributeNS(null, "y", "0");
17036    cliprect.setAttributeNS(null, "width", pf(width));
17037    cliprect.setAttributeNS(null, "height", pf(height));
17038    this.current.element = cliprect;
17039    this.clip("nonzero");
17040    const imgEl = this.svgFactory.createElement("svg:image");
17041    imgEl.setAttributeNS(XLINK_NS, "xlink:href", imgSrc);
17042    imgEl.setAttributeNS(null, "x", "0");
17043    imgEl.setAttributeNS(null, "y", pf(-height));
17044    imgEl.setAttributeNS(null, "width", pf(width) + "px");
17045    imgEl.setAttributeNS(null, "height", pf(height) + "px");
17046    imgEl.setAttributeNS(null, "transform", `scale(${pf(1 / width)} ${pf(-1 / height)})`);
17047    if (mask) {
17048      mask.append(imgEl);
17049    } else {
17050      this._ensureTransformGroup().append(imgEl);
17051    }
17052  }
17053  paintImageMaskXObject(img) {
17054    const imgData = this.getObject(img.data, img);
17055    if (imgData.bitmap) {
17056      (0, _util.warn)("paintImageMaskXObject: ImageBitmap support is not implemented, " + "ensure that the `isOffscreenCanvasSupported` API parameter is disabled.");
17057      return;
17058    }
17059    const current = this.current;
17060    const width = imgData.width;
17061    const height = imgData.height;
17062    const fillColor = current.fillColor;
17063    current.maskId = `mask${maskCount++}`;
17064    const mask = this.svgFactory.createElement("svg:mask");
17065    mask.setAttributeNS(null, "id", current.maskId);
17066    const rect = this.svgFactory.createElement("svg:rect");
17067    rect.setAttributeNS(null, "x", "0");
17068    rect.setAttributeNS(null, "y", "0");
17069    rect.setAttributeNS(null, "width", pf(width));
17070    rect.setAttributeNS(null, "height", pf(height));
17071    rect.setAttributeNS(null, "fill", fillColor);
17072    rect.setAttributeNS(null, "mask", `url(#${current.maskId})`);
17073    this.defs.append(mask);
17074    this._ensureTransformGroup().append(rect);
17075    this.paintInlineImageXObject(imgData, mask);
17076  }
17077  paintFormXObjectBegin(matrix, bbox) {
17078    if (Array.isArray(matrix) && matrix.length === 6) {
17079      this.transform(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]);
17080    }
17081    if (bbox) {
17082      const width = bbox[2] - bbox[0];
17083      const height = bbox[3] - bbox[1];
17084      const cliprect = this.svgFactory.createElement("svg:rect");
17085      cliprect.setAttributeNS(null, "x", bbox[0]);
17086      cliprect.setAttributeNS(null, "y", bbox[1]);
17087      cliprect.setAttributeNS(null, "width", pf(width));
17088      cliprect.setAttributeNS(null, "height", pf(height));
17089      this.current.element = cliprect;
17090      this.clip("nonzero");
17091      this.endPath();
17092    }
17093  }
17094  paintFormXObjectEnd() {}
17095  _initialize(viewport) {
17096    const svg = this.svgFactory.create(viewport.width, viewport.height);
17097    const definitions = this.svgFactory.createElement("svg:defs");
17098    svg.append(definitions);
17099    this.defs = definitions;
17100    const rootGroup = this.svgFactory.createElement("svg:g");
17101    rootGroup.setAttributeNS(null, "transform", pm(viewport.transform));
17102    svg.append(rootGroup);
17103    this.svg = rootGroup;
17104    return svg;
17105  }
17106  _ensureClipGroup() {
17107    if (!this.current.clipGroup) {
17108      const clipGroup = this.svgFactory.createElement("svg:g");
17109      clipGroup.setAttributeNS(null, "clip-path", this.current.activeClipUrl);
17110      this.svg.append(clipGroup);
17111      this.current.clipGroup = clipGroup;
17112    }
17113    return this.current.clipGroup;
17114  }
17115  _ensureTransformGroup() {
17116    if (!this.tgrp) {
17117      this.tgrp = this.svgFactory.createElement("svg:g");
17118      this.tgrp.setAttributeNS(null, "transform", pm(this.transformMatrix));
17119      if (this.current.activeClipUrl) {
17120        this._ensureClipGroup().append(this.tgrp);
17121      } else {
17122        this.svg.append(this.tgrp);
17123      }
17124    }
17125    return this.tgrp;
17126  }
17127}
17128exports.SVGGraphics = SVGGraphics;
17129
17130/***/ }),
17131/* 187 */
17132/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {
17133
17134
17135var $ = __w_pdfjs_require__(3);
17136var $group = __w_pdfjs_require__(188);
17137var addToUnscopables = __w_pdfjs_require__(193);
17138$({
17139 target: 'Array',
17140 proto: true
17141}, {
17142 group: function group(callbackfn) {
17143  var thisArg = arguments.length > 1 ? arguments[1] : undefined;
17144  return $group(this, callbackfn, thisArg);
17145 }
17146});
17147addToUnscopables('group');
17148
17149/***/ }),
17150/* 188 */
17151/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
17152
17153
17154var bind = __w_pdfjs_require__(99);
17155var uncurryThis = __w_pdfjs_require__(14);
17156var IndexedObject = __w_pdfjs_require__(13);
17157var toObject = __w_pdfjs_require__(40);
17158var toPropertyKey = __w_pdfjs_require__(18);
17159var lengthOfArrayLike = __w_pdfjs_require__(64);
17160var objectCreate = __w_pdfjs_require__(189);
17161var arrayFromConstructorAndList = __w_pdfjs_require__(108);
17162var $Array = Array;
17163var push = uncurryThis([].push);
17164module.exports = function ($this, callbackfn, that, specificConstructor) {
17165 var O = toObject($this);
17166 var self = IndexedObject(O);
17167 var boundFunction = bind(callbackfn, that);
17168 var target = objectCreate(null);
17169 var length = lengthOfArrayLike(self);
17170 var index = 0;
17171 var Constructor, key, value;
17172 for (; length > index; index++) {
17173  value = self[index];
17174  key = toPropertyKey(boundFunction(value, index, O));
17175  if (key in target)
17176   push(target[key], value);
17177  else
17178   target[key] = [value];
17179 }
17180 if (specificConstructor) {
17181  Constructor = specificConstructor(O);
17182  if (Constructor !== $Array) {
17183   for (key in target)
17184    target[key] = arrayFromConstructorAndList(Constructor, target[key]);
17185  }
17186 }
17187 return target;
17188};
17189
17190/***/ }),
17191/* 189 */
17192/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
17193
17194
17195var anObject = __w_pdfjs_require__(47);
17196var definePropertiesModule = __w_pdfjs_require__(190);
17197var enumBugKeys = __w_pdfjs_require__(66);
17198var hiddenKeys = __w_pdfjs_require__(55);
17199var html = __w_pdfjs_require__(192);
17200var documentCreateElement = __w_pdfjs_require__(43);
17201var sharedKey = __w_pdfjs_require__(54);
17202var GT = '>';
17203var LT = '<';
17204var PROTOTYPE = 'prototype';
17205var SCRIPT = 'script';
17206var IE_PROTO = sharedKey('IE_PROTO');
17207var EmptyConstructor = function () {
17208};
17209var scriptTag = function (content) {
17210 return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;
17211};
17212var NullProtoObjectViaActiveX = function (activeXDocument) {
17213 activeXDocument.write(scriptTag(''));
17214 activeXDocument.close();
17215 var temp = activeXDocument.parentWindow.Object;
17216 activeXDocument = null;
17217 return temp;
17218};
17219var NullProtoObjectViaIFrame = function () {
17220 var iframe = documentCreateElement('iframe');
17221 var JS = 'java' + SCRIPT + ':';
17222 var iframeDocument;
17223 iframe.style.display = 'none';
17224 html.appendChild(iframe);
17225 iframe.src = String(JS);
17226 iframeDocument = iframe.contentWindow.document;
17227 iframeDocument.open();
17228 iframeDocument.write(scriptTag('document.F=Object'));
17229 iframeDocument.close();
17230 return iframeDocument.F;
17231};
17232var activeXDocument;
17233var NullProtoObject = function () {
17234 try {
17235  activeXDocument = new ActiveXObject('htmlfile');
17236 } catch (error) {
17237 }
17238 NullProtoObject = typeof document != 'undefined' ? document.domain && activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame() : NullProtoObjectViaActiveX(activeXDocument);
17239 var length = enumBugKeys.length;
17240 while (length--)
17241  delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];
17242 return NullProtoObject();
17243};
17244hiddenKeys[IE_PROTO] = true;
17245module.exports = Object.create || function create(O, Properties) {
17246 var result;
17247 if (O !== null) {
17248  EmptyConstructor[PROTOTYPE] = anObject(O);
17249  result = new EmptyConstructor();
17250  EmptyConstructor[PROTOTYPE] = null;
17251  result[IE_PROTO] = O;
17252 } else
17253  result = NullProtoObject();
17254 return Properties === undefined ? result : definePropertiesModule.f(result, Properties);
17255};
17256
17257/***/ }),
17258/* 190 */
17259/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
17260
17261
17262var DESCRIPTORS = __w_pdfjs_require__(6);
17263var V8_PROTOTYPE_DEFINE_BUG = __w_pdfjs_require__(46);
17264var definePropertyModule = __w_pdfjs_require__(45);
17265var anObject = __w_pdfjs_require__(47);
17266var toIndexedObject = __w_pdfjs_require__(12);
17267var objectKeys = __w_pdfjs_require__(191);
17268exports.f = DESCRIPTORS && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) {
17269 anObject(O);
17270 var props = toIndexedObject(Properties);
17271 var keys = objectKeys(Properties);
17272 var length = keys.length;
17273 var index = 0;
17274 var key;
17275 while (length > index)
17276  definePropertyModule.f(O, key = keys[index++], props[key]);
17277 return O;
17278};
17279
17280/***/ }),
17281/* 191 */
17282/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
17283
17284
17285var internalObjectKeys = __w_pdfjs_require__(59);
17286var enumBugKeys = __w_pdfjs_require__(66);
17287module.exports = Object.keys || function keys(O) {
17288 return internalObjectKeys(O, enumBugKeys);
17289};
17290
17291/***/ }),
17292/* 192 */
17293/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
17294
17295
17296var getBuiltIn = __w_pdfjs_require__(24);
17297module.exports = getBuiltIn('document', 'documentElement');
17298
17299/***/ }),
17300/* 193 */
17301/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
17302
17303
17304var wellKnownSymbol = __w_pdfjs_require__(34);
17305var create = __w_pdfjs_require__(189);
17306var defineProperty = (__w_pdfjs_require__(45).f);
17307var UNSCOPABLES = wellKnownSymbol('unscopables');
17308var ArrayPrototype = Array.prototype;
17309if (ArrayPrototype[UNSCOPABLES] === undefined) {
17310 defineProperty(ArrayPrototype, UNSCOPABLES, {
17311  configurable: true,
17312  value: create(null)
17313 });
17314}
17315module.exports = function (key) {
17316 ArrayPrototype[UNSCOPABLES][key] = true;
17317};
17318
17319/***/ }),
17320/* 194 */
17321/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
17322
17323
17324
17325Object.defineProperty(exports, "__esModule", ({
17326  value: true
17327}));
17328exports.XfaText = void 0;
17329__w_pdfjs_require__(89);
17330class XfaText {
17331  static textContent(xfa) {
17332    const items = [];
17333    const output = {
17334      items,
17335      styles: Object.create(null)
17336    };
17337    function walk(node) {
17338      if (!node) {
17339        return;
17340      }
17341      let str = null;
17342      const name = node.name;
17343      if (name === "#text") {
17344        str = node.value;
17345      } else if (!XfaText.shouldBuildText(name)) {
17346        return;
17347      } else if (node?.attributes?.textContent) {
17348        str = node.attributes.textContent;
17349      } else if (node.value) {
17350        str = node.value;
17351      }
17352      if (str !== null) {
17353        items.push({
17354          str
17355        });
17356      }
17357      if (!node.children) {
17358        return;
17359      }
17360      for (const child of node.children) {
17361        walk(child);
17362      }
17363    }
17364    walk(xfa);
17365    return output;
17366  }
17367  static shouldBuildText(name) {
17368    return !(name === "textarea" || name === "input" || name === "option" || name === "select");
17369  }
17370}
17371exports.XfaText = XfaText;
17372
17373/***/ }),
17374/* 195 */
17375/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
17376
17377
17378
17379Object.defineProperty(exports, "__esModule", ({
17380  value: true
17381}));
17382exports.TextLayerRenderTask = void 0;
17383exports.renderTextLayer = renderTextLayer;
17384exports.updateTextLayer = updateTextLayer;
17385__w_pdfjs_require__(89);
17386__w_pdfjs_require__(2);
17387var _util = __w_pdfjs_require__(1);
17388var _display_utils = __w_pdfjs_require__(168);
17389const MAX_TEXT_DIVS_TO_RENDER = 100000;
17390const DEFAULT_FONT_SIZE = 30;
17391const DEFAULT_FONT_ASCENT = 0.8;
17392const ascentCache = new Map();
17393function getCtx(size, isOffscreenCanvasSupported) {
17394  let ctx;
17395  if (isOffscreenCanvasSupported && _util.FeatureTest.isOffscreenCanvasSupported) {
17396    ctx = new OffscreenCanvas(size, size).getContext("2d", {
17397      alpha: false
17398    });
17399  } else {
17400    const canvas = document.createElement("canvas");
17401    canvas.width = canvas.height = size;
17402    ctx = canvas.getContext("2d", {
17403      alpha: false
17404    });
17405  }
17406  return ctx;
17407}
17408function getAscent(fontFamily, isOffscreenCanvasSupported) {
17409  const cachedAscent = ascentCache.get(fontFamily);
17410  if (cachedAscent) {
17411    return cachedAscent;
17412  }
17413  const ctx = getCtx(DEFAULT_FONT_SIZE, isOffscreenCanvasSupported);
17414  ctx.font = `${DEFAULT_FONT_SIZE}px ${fontFamily}`;
17415  const metrics = ctx.measureText("");
17416  let ascent = metrics.fontBoundingBoxAscent;
17417  let descent = Math.abs(metrics.fontBoundingBoxDescent);
17418  if (ascent) {
17419    const ratio = ascent / (ascent + descent);
17420    ascentCache.set(fontFamily, ratio);
17421    ctx.canvas.width = ctx.canvas.height = 0;
17422    return ratio;
17423  }
17424  ctx.strokeStyle = "red";
17425  ctx.clearRect(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE);
17426  ctx.strokeText("g", 0, 0);
17427  let pixels = ctx.getImageData(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE).data;
17428  descent = 0;
17429  for (let i = pixels.length - 1 - 3; i >= 0; i -= 4) {
17430    if (pixels[i] > 0) {
17431      descent = Math.ceil(i / 4 / DEFAULT_FONT_SIZE);
17432      break;
17433    }
17434  }
17435  ctx.clearRect(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE);
17436  ctx.strokeText("A", 0, DEFAULT_FONT_SIZE);
17437  pixels = ctx.getImageData(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE).data;
17438  ascent = 0;
17439  for (let i = 0, ii = pixels.length; i < ii; i += 4) {
17440    if (pixels[i] > 0) {
17441      ascent = DEFAULT_FONT_SIZE - Math.floor(i / 4 / DEFAULT_FONT_SIZE);
17442      break;
17443    }
17444  }
17445  ctx.canvas.width = ctx.canvas.height = 0;
17446  if (ascent) {
17447    const ratio = ascent / (ascent + descent);
17448    ascentCache.set(fontFamily, ratio);
17449    return ratio;
17450  }
17451  ascentCache.set(fontFamily, DEFAULT_FONT_ASCENT);
17452  return DEFAULT_FONT_ASCENT;
17453}
17454function appendText(task, geom, styles) {
17455  const textDiv = document.createElement("span");
17456  const textDivProperties = {
17457    angle: 0,
17458    canvasWidth: 0,
17459    hasText: geom.str !== "",
17460    hasEOL: geom.hasEOL,
17461    fontSize: 0
17462  };
17463  task._textDivs.push(textDiv);
17464  const tx = _util.Util.transform(task._transform, geom.transform);
17465  let angle = Math.atan2(tx[1], tx[0]);
17466  const style = styles[geom.fontName];
17467  if (style.vertical) {
17468    angle += Math.PI / 2;
17469  }
17470  const fontHeight = Math.hypot(tx[2], tx[3]);
17471  const fontAscent = fontHeight * getAscent(style.fontFamily, task._isOffscreenCanvasSupported);
17472  let left, top;
17473  if (angle === 0) {
17474    left = tx[4];
17475    top = tx[5] - fontAscent;
17476  } else {
17477    left = tx[4] + fontAscent * Math.sin(angle);
17478    top = tx[5] - fontAscent * Math.cos(angle);
17479  }
17480  const scaleFactorStr = "calc(var(--scale-factor)*";
17481  const divStyle = textDiv.style;
17482  if (task._container === task._rootContainer) {
17483    divStyle.left = `${(100 * left / task._pageWidth).toFixed(2)}%`;
17484    divStyle.top = `${(100 * top / task._pageHeight).toFixed(2)}%`;
17485  } else {
17486    divStyle.left = `${scaleFactorStr}${left.toFixed(2)}px)`;
17487    divStyle.top = `${scaleFactorStr}${top.toFixed(2)}px)`;
17488  }
17489  divStyle.fontSize = `${scaleFactorStr}${fontHeight.toFixed(2)}px)`;
17490  divStyle.fontFamily = style.fontFamily;
17491  textDivProperties.fontSize = fontHeight;
17492  textDiv.setAttribute("role", "presentation");
17493  textDiv.textContent = geom.str;
17494  textDiv.dir = geom.dir;
17495  if (task._fontInspectorEnabled) {
17496    textDiv.dataset.fontName = geom.fontName;
17497  }
17498  if (angle !== 0) {
17499    textDivProperties.angle = angle * (180 / Math.PI);
17500  }
17501  let shouldScaleText = false;
17502  if (geom.str.length > 1) {
17503    shouldScaleText = true;
17504  } else if (geom.str !== " " && geom.transform[0] !== geom.transform[3]) {
17505    const absScaleX = Math.abs(geom.transform[0]),
17506      absScaleY = Math.abs(geom.transform[3]);
17507    if (absScaleX !== absScaleY && Math.max(absScaleX, absScaleY) / Math.min(absScaleX, absScaleY) > 1.5) {
17508      shouldScaleText = true;
17509    }
17510  }
17511  if (shouldScaleText) {
17512    textDivProperties.canvasWidth = style.vertical ? geom.height : geom.width;
17513  }
17514  task._textDivProperties.set(textDiv, textDivProperties);
17515  if (task._isReadableStream) {
17516    task._layoutText(textDiv);
17517  }
17518}
17519function layout(params) {
17520  const {
17521    div,
17522    scale,
17523    properties,
17524    ctx,
17525    prevFontSize,
17526    prevFontFamily
17527  } = params;
17528  const {
17529    style
17530  } = div;
17531  let transform = "";
17532  if (properties.canvasWidth !== 0 && properties.hasText) {
17533    const {
17534      fontFamily
17535    } = style;
17536    const {
17537      canvasWidth,
17538      fontSize
17539    } = properties;
17540    if (prevFontSize !== fontSize || prevFontFamily !== fontFamily) {
17541      ctx.font = `${fontSize * scale}px ${fontFamily}`;
17542      params.prevFontSize = fontSize;
17543      params.prevFontFamily = fontFamily;
17544    }
17545    const {
17546      width
17547    } = ctx.measureText(div.textContent);
17548    if (width > 0) {
17549      transform = `scaleX(${canvasWidth * scale / width})`;
17550    }
17551  }
17552  if (properties.angle !== 0) {
17553    transform = `rotate(${properties.angle}deg) ${transform}`;
17554  }
17555  if (transform.length > 0) {
17556    style.transform = transform;
17557  }
17558}
17559function render(task) {
17560  if (task._canceled) {
17561    return;
17562  }
17563  const textDivs = task._textDivs;
17564  const capability = task._capability;
17565  const textDivsLength = textDivs.length;
17566  if (textDivsLength > MAX_TEXT_DIVS_TO_RENDER) {
17567    capability.resolve();
17568    return;
17569  }
17570  if (!task._isReadableStream) {
17571    for (const textDiv of textDivs) {
17572      task._layoutText(textDiv);
17573    }
17574  }
17575  capability.resolve();
17576}
17577class TextLayerRenderTask {
17578  constructor(_ref) {
17579    let {
17580      textContentSource,
17581      container,
17582      viewport,
17583      textDivs,
17584      textDivProperties,
17585      textContentItemsStr,
17586      isOffscreenCanvasSupported
17587    } = _ref;
17588    this._textContentSource = textContentSource;
17589    this._isReadableStream = textContentSource instanceof ReadableStream;
17590    this._container = this._rootContainer = container;
17591    this._textDivs = textDivs || [];
17592    this._textContentItemsStr = textContentItemsStr || [];
17593    this._isOffscreenCanvasSupported = isOffscreenCanvasSupported;
17594    this._fontInspectorEnabled = !!globalThis.FontInspector?.enabled;
17595    this._reader = null;
17596    this._textDivProperties = textDivProperties || new WeakMap();
17597    this._canceled = false;
17598    this._capability = new _util.PromiseCapability();
17599    this._layoutTextParams = {
17600      prevFontSize: null,
17601      prevFontFamily: null,
17602      div: null,
17603      scale: viewport.scale * (globalThis.devicePixelRatio || 1),
17604      properties: null,
17605      ctx: getCtx(0, isOffscreenCanvasSupported)
17606    };
17607    const {
17608      pageWidth,
17609      pageHeight,
17610      pageX,
17611      pageY
17612    } = viewport.rawDims;
17613    this._transform = [1, 0, 0, -1, -pageX, pageY + pageHeight];
17614    this._pageWidth = pageWidth;
17615    this._pageHeight = pageHeight;
17616    (0, _display_utils.setLayerDimensions)(container, viewport);
17617    this._capability.promise.finally(() => {
17618      this._layoutTextParams = null;
17619    }).catch(() => {});
17620  }
17621  get promise() {
17622    return this._capability.promise;
17623  }
17624  cancel() {
17625    this._canceled = true;
17626    if (this._reader) {
17627      this._reader.cancel(new _util.AbortException("TextLayer task cancelled.")).catch(() => {});
17628      this._reader = null;
17629    }
17630    this._capability.reject(new _util.AbortException("TextLayer task cancelled."));
17631  }
17632  _processItems(items, styleCache) {
17633    for (const item of items) {
17634      if (item.str === undefined) {
17635        if (item.type === "beginMarkedContentProps" || item.type === "beginMarkedContent") {
17636          const parent = this._container;
17637          this._container = document.createElement("span");
17638          this._container.classList.add("markedContent");
17639          if (item.id !== null) {
17640            this._container.setAttribute("id", `${item.id}`);
17641          }
17642          parent.append(this._container);
17643        } else if (item.type === "endMarkedContent") {
17644          this._container = this._container.parentNode;
17645        }
17646        continue;
17647      }
17648      this._textContentItemsStr.push(item.str);
17649      appendText(this, item, styleCache);
17650    }
17651  }
17652  _layoutText(textDiv) {
17653    const textDivProperties = this._layoutTextParams.properties = this._textDivProperties.get(textDiv);
17654    this._layoutTextParams.div = textDiv;
17655    layout(this._layoutTextParams);
17656    if (textDivProperties.hasText) {
17657      this._container.append(textDiv);
17658    }
17659    if (textDivProperties.hasEOL) {
17660      const br = document.createElement("br");
17661      br.setAttribute("role", "presentation");
17662      this._container.append(br);
17663    }
17664  }
17665  _render() {
17666    const capability = new _util.PromiseCapability();
17667    let styleCache = Object.create(null);
17668    if (this._isReadableStream) {
17669      const pump = () => {
17670        this._reader.read().then(_ref2 => {
17671          let {
17672            value,
17673            done
17674          } = _ref2;
17675          if (done) {
17676            capability.resolve();
17677            return;
17678          }
17679          Object.assign(styleCache, value.styles);
17680          this._processItems(value.items, styleCache);
17681          pump();
17682        }, capability.reject);
17683      };
17684      this._reader = this._textContentSource.getReader();
17685      pump();
17686    } else if (this._textContentSource) {
17687      const {
17688        items,
17689        styles
17690      } = this._textContentSource;
17691      this._processItems(items, styles);
17692      capability.resolve();
17693    } else {
17694      throw new Error('No "textContentSource" parameter specified.');
17695    }
17696    capability.promise.then(() => {
17697      styleCache = null;
17698      render(this);
17699    }, this._capability.reject);
17700  }
17701}
17702exports.TextLayerRenderTask = TextLayerRenderTask;
17703function renderTextLayer(params) {
17704  if (!params.textContentSource && (params.textContent || params.textContentStream)) {
17705    (0, _display_utils.deprecated)("The TextLayerRender `textContent`/`textContentStream` parameters " + "will be removed in the future, please use `textContentSource` instead.");
17706    params.textContentSource = params.textContent || params.textContentStream;
17707  }
17708  const {
17709    container,
17710    viewport
17711  }
17711 = params;
17712  const style = getComputedStyle(container);
17713  const visibility = style.getPropertyValue("visibility");
17714  const scaleFactor = parseFloat(style.getPropertyValue("--scale-factor"));
17715  if (visibility === "visible" && (!scaleFactor || Math.abs(scaleFactor - viewport.scale) > 1e-5)) {
17716    console.error("The `--scale-factor` CSS-variable must be set, " + "to the same value as `viewport.scale`, " + "either on the `container`-element itself or higher up in the DOM.");
17717  }
17718  const task = new TextLayerRenderTask(params);
17719  task._render();
17720  return task;
17721}
17722function updateTextLayer(_ref3) {
17723  let {
17724    container,
17725    viewport,
17726    textDivs,
17727    textDivProperties,
17728    isOffscreenCanvasSupported,
17729    mustRotate = true,
17730    mustRescale = true
17731  } = _ref3;
17732  if (mustRotate) {
17733    (0, _display_utils.setLayerDimensions)(container, {
17734      rotation: viewport.rotation
17735    });
17736  }
17737  if (mustRescale) {
17738    const ctx = getCtx(0, isOffscreenCanvasSupported);
17739    const scale = viewport.scale * (globalThis.devicePixelRatio || 1);
17740    const params = {
17741      prevFontSize: null,
17742      prevFontFamily: null,
17743      div: null,
17744      scale,
17745      properties: null,
17746      ctx
17747    };
17748    for (const div of textDivs) {
17749      params.properties = textDivProperties.get(div);
17750      params.div = div;
17751      layout(params);
17752    }
17753  }
17754}
17755
17756/***/ }),
17757/* 196 */
17758/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
17759
17760
17761
17762Object.defineProperty(exports, "__esModule", ({
17763  value: true
17764}));
17765exports.AnnotationEditorLayer = void 0;
17766__w_pdfjs_require__(125);
17767__w_pdfjs_require__(136);
17768__w_pdfjs_require__(138);
17769__w_pdfjs_require__(141);
17770__w_pdfjs_require__(143);
17771__w_pdfjs_require__(145);
17772__w_pdfjs_require__(147);
17773var _util = __w_pdfjs_require__(1);
17774var _editor = __w_pdfjs_require__(164);
17775var _freetext = __w_pdfjs_require__(197);
17776var _ink = __w_pdfjs_require__(202);
17777var _display_utils = __w_pdfjs_require__(168);
17778var _stamp = __w_pdfjs_require__(203);
17779class AnnotationEditorLayer {
17780  #accessibilityManager;
17781  #allowClick = false;
17782  #annotationLayer = null;
17783  #boundPointerup = this.pointerup.bind(this);
17784  #boundPointerdown = this.pointerdown.bind(this);
17785  #editors = new Map();
17786  #hadPointerDown = false;
17787  #isCleaningUp = false;
17788  #isDisabling = false;
17789  #uiManager;
17790  static _initialized = false;
17791  constructor(_ref) {
17792    let {
17793      uiManager,
17794      pageIndex,
17795      div,
17796      accessibilityManager,
17797      annotationLayer,
17798      viewport,
17799      l10n
17800    } = _ref;
17801    const editorTypes = [_freetext.FreeTextEditor, _ink.InkEditor, _stamp.StampEditor];
17802    if (!AnnotationEditorLayer._initialized) {
17803      AnnotationEditorLayer._initialized = true;
17804      for (const editorType of editorTypes) {
17805        editorType.initialize(l10n);
17806      }
17807    }
17808    uiManager.registerEditorTypes(editorTypes);
17809    this.#uiManager = uiManager;
17810    this.pageIndex = pageIndex;
17811    this.div = div;
17812    this.#accessibilityManager = accessibilityManager;
17813    this.#annotationLayer = annotationLayer;
17814    this.viewport = viewport;
17815    this.#uiManager.addLayer(this);
17816  }
17817  get isEmpty() {
17818    return this.#editors.size === 0;
17819  }
17820  updateToolbar(mode) {
17821    this.#uiManager.updateToolbar(mode);
17822  }
17823  updateMode() {
17824    let mode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.#uiManager.getMode();
17825    this.#cleanup();
17826    if (mode === _util.AnnotationEditorType.INK) {
17827      this.addInkEditorIfNeeded(false);
17828      this.disableClick();
17829    } else {
17830      this.enableClick();
17831    }
17832    if (mode !== _util.AnnotationEditorType.NONE) {
17833      this.div.classList.toggle("freeTextEditing", mode === _util.AnnotationEditorType.FREETEXT);
17834      this.div.classList.toggle("inkEditing", mode === _util.AnnotationEditorType.INK);
17835      this.div.classList.toggle("stampEditing", mode === _util.AnnotationEditorType.STAMP);
17836      this.div.hidden = false;
17837    }
17838  }
17839  addInkEditorIfNeeded(isCommitting) {
17840    if (!isCommitting && this.#uiManager.getMode() !== _util.AnnotationEditorType.INK) {
17841      return;
17842    }
17843    if (!isCommitting) {
17844      for (const editor of this.#editors.values()) {
17845        if (editor.isEmpty()) {
17846          editor.setInBackground();
17847          return;
17848        }
17849      }
17850    }
17851    const editor = this.#createAndAddNewEditor({
17852      offsetX: 0,
17853      offsetY: 0
17854    }, false);
17855    editor.setInBackground();
17856  }
17857  setEditingState(isEditing) {
17858    this.#uiManager.setEditingState(isEditing);
17859  }
17860  addCommands(params) {
17861    this.#uiManager.addCommands(params);
17862  }
17863  enable() {
17864    this.div.style.pointerEvents = "auto";
17865    const annotationElementIds = new Set();
17866    for (const editor of this.#editors.values()) {
17867      editor.enableEditing();
17868      if (editor.annotationElementId) {
17869        annotationElementIds.add(editor.annotationElementId);
17870      }
17871    }
17872    if (!this.#annotationLayer) {
17873      return;
17874    }
17875    const editables = this.#annotationLayer.getEditableAnnotations();
17876    for (const editable of editables) {
17877      editable.hide();
17878      if (this.#uiManager.isDeletedAnnotationElement(editable.data.id)) {
17879        continue;
17880      }
17881      if (annotationElementIds.has(editable.data.id)) {
17882        continue;
17883      }
17884      const editor = this.deserialize(editable);
17885      if (!editor) {
17886        continue;
17887      }
17888      this.addOrRebuild(editor);
17889      editor.enableEditing();
17890    }
17891  }
17892  disable() {
17893    this.#isDisabling = true;
17894    this.div.style.pointerEvents = "none";
17895    const hiddenAnnotationIds = new Set();
17896    for (const editor of this.#editors.values()) {
17897      editor.disableEditing();
17898      if (!editor.annotationElementId || editor.serialize() !== null) {
17899        hiddenAnnotationIds.add(editor.annotationElementId);
17900        continue;
17901      }
17902      this.getEditableAnnotation(editor.annotationElementId)?.show();
17903      editor.remove();
17904    }
17905    if (this.#annotationLayer) {
17906      const editables = this.#annotationLayer.getEditableAnnotations();
17907      for (const editable of editables) {
17908        const {
17909          id
17910        } = editable.data;
17911        if (hiddenAnnotationIds.has(id) || this.#uiManager.isDeletedAnnotationElement(id)) {
17912          continue;
17913        }
17914        editable.show();
17915      }
17916    }
17917    this.#cleanup();
17918    if (this.isEmpty) {
17919      this.div.hidden = true;
17920    }
17921    this.#isDisabling = false;
17922  }
17923  getEditableAnnotation(id) {
17924    return this.#annotationLayer?.getEditableAnnotation(id) || null;
17925  }
17926  setActiveEditor(editor) {
17927    const currentActive = this.#uiManager.getActive();
17928    if (currentActive === editor) {
17929      return;
17930    }
17931    this.#uiManager.setActiveEditor(editor);
17932  }
17933  enableClick() {
17934    this.div.addEventListener("pointerdown", this.#boundPointerdown);
17935    this.div.addEventListener("pointerup", this.#boundPointerup);
17936  }
17937  disableClick() {
17938    this.div.removeEventListener("pointerdown", this.#boundPointerdown);
17939    this.div.removeEventListener("pointerup", this.#boundPointerup);
17940  }
17941  attach(editor) {
17942    this.#editors.set(editor.id, editor);
17943    const {
17944      annotationElementId
17945    } = editor;
17946    if (annotationElementId && this.#uiManager.isDeletedAnnotationElement(annotationElementId)) {
17947      this.#uiManager.removeDeletedAnnotationElement(editor);
17948    }
17949  }
17950  detach(editor) {
17951    this.#editors.delete(editor.id);
17952    this.#accessibilityManager?.removePointerInTextLayer(editor.contentDiv);
17953    if (!this.#isDisabling && editor.annotationElementId) {
17954      this.#uiManager.addDeletedAnnotationElement(editor);
17955    }
17956  }
17957  remove(editor) {
17958    this.detach(editor);
17959    this.#uiManager.removeEditor(editor);
17960    if (editor.div.contains(document.activeElement)) {
17961      setTimeout(() => {
17962        this.#uiManager.focusMainContainer();
17963      }, 0);
17964    }
17965    editor.div.remove();
17966    editor.isAttachedToDOM = false;
17967    if (!this.#isCleaningUp) {
17968      this.addInkEditorIfNeeded(false);
17969    }
17970  }
17971  changeParent(editor) {
17972    if (editor.parent === this) {
17973      return;
17974    }
17975    if (editor.annotationElementId) {
17976      this.#uiManager.addDeletedAnnotationElement(editor.annotationElementId);
17977      _editor.AnnotationEditor.deleteAnnotationElement(editor);
17978      editor.annotationElementId = null;
17979    }
17980    this.attach(editor);
17981    editor.parent?.detach(editor);
17982    editor.setParent(this);
17983    if (editor.div && editor.isAttachedToDOM) {
17984      editor.div.remove();
17985      this.div.append(editor.div);
17986    }
17987  }
17988  add(editor) {
17989    this.changeParent(editor);
17990    this.#uiManager.addEditor(editor);
17991    this.attach(editor);
17992    if (!editor.isAttachedToDOM) {
17993      const div = editor.render();
17994      this.div.append(div);
17995      editor.isAttachedToDOM = true;
17996    }
17997    editor.fixAndSetPosition();
17998    editor.onceAdded();
17999    this.#uiManager.addToAnnotationStorage(editor);
18000  }
18001  moveEditorInDOM(editor) {
18002    if (!editor.isAttachedToDOM) {
18003      return;
18004    }
18005    const {
18006      activeElement
18007    } = document;
18008    if (editor.div.contains(activeElement)) {
18009      editor._focusEventsAllowed = false;
18010      setTimeout(() => {
18011        if (!editor.div.contains(document.activeElement)) {
18012          editor.div.addEventListener("focusin", () => {
18013            editor._focusEventsAllowed = true;
18014          }, {
18015            once: true
18016          });
18017          activeElement.focus();
18018        } else {
18019          editor._focusEventsAllowed = true;
18020        }
18021      }, 0);
18022    }
18023    editor._structTreeParentId = this.#accessibilityManager?.moveElementInDOM(this.div, editor.div, editor.contentDiv, true);
18024  }
18025  addOrRebuild(editor) {
18026    if (editor.needsToBeRebuilt()) {
18027      editor.rebuild();
18028    } else {
18029      this.add(editor);
18030    }
18031  }
18032  addUndoableEditor(editor) {
18033    const cmd = () => editor._uiManager.rebuild(editor);
18034    const undo = () => {
18035      editor.remove();
18036    };
18037    this.addCommands({
18038      cmd,
18039      undo,
18040      mustExec: false
18041    });
18042  }
18043  getNextId() {
18044    return this.#uiManager.getId();
18045  }
18046  #createNewEditor(params) {
18047    switch (this.#uiManager.getMode()) {
18048      case _util.AnnotationEditorType.FREETEXT:
18049        return new _freetext.FreeTextEditor(params);
18050      case _util.AnnotationEditorType.INK:
18051        return new _ink.InkEditor(params);
18052      case _util.AnnotationEditorType.STAMP:
18053        return new _stamp.StampEditor(params);
18054    }
18055    return null;
18056  }
18057  pasteEditor(mode, params) {
18058    this.#uiManager.updateToolbar(mode);
18059    this.#uiManager.updateMode(mode);
18060    const {
18061      offsetX,
18062      offsetY
18063    } = this.#getCenterPoint();
18064    const id = this.getNextId();
18065    const editor = this.#createNewEditor({
18066      parent: this,
18067      id,
18068      x: offsetX,
18069      y: offsetY,
18070      uiManager: this.#uiManager,
18071      isCentered: true,
18072      ...params
18073    });
18074    if (editor) {
18075      this.add(editor);
18076    }
18077  }
18078  deserialize(data) {
18079    switch (data.annotationType ?? data.annotationEditorType) {
18080      case _util.AnnotationEditorType.FREETEXT:
18081        return _freetext.FreeTextEditor.deserialize(data, this, this.#uiManager);
18082      case _util.AnnotationEditorType.INK:
18083        return _ink.InkEditor.deserialize(data, this, this.#uiManager);
18084      case _util.AnnotationEditorType.STAMP:
18085        return _stamp.StampEditor.deserialize(data, this, this.#uiManager);
18086    }
18087    return null;
18088  }
18089  #createAndAddNewEditor(event, isCentered) {
18090    const id = this.getNextId();
18091    const editor = this.#createNewEditor({
18092      parent: this,
18093      id,
18094      x: event.offsetX,
18095      y: event.offsetY,
18096      uiManager: this.#uiManager,
18097      isCentered
18098    });
18099    if (editor) {
18100      this.add(editor);
18101    }
18102    return editor;
18103  }
18104  #getCenterPoint() {
18105    const {
18106      x,
18107      y,
18108      width,
18109      height
18110    } = this.div.getBoundingClientRect();
18111    const tlX = Math.max(0, x);
18112    const tlY = Math.max(0, y);
18113    const brX = Math.min(window.innerWidth, x + width);
18114    const brY = Math.min(window.innerHeight, y + height);
18115    const centerX = (tlX + brX) / 2 - x;
18116    const centerY = (tlY + brY) / 2 - y;
18117    const [offsetX, offsetY] = this.viewport.rotation % 180 === 0 ? [centerX, centerY] : [centerY, centerX];
18118    return {
18119      offsetX,
18120      offsetY
18121    };
18122  }
18123  addNewEditor() {
18124    this.#createAndAddNewEditor(this.#getCenterPoint(), true);
18125  }
18126  setSelected(editor) {
18127    this.#uiManager.setSelected(editor);
18128  }
18129  toggleSelected(editor) {
18130    this.#uiManager.toggleSelected(editor);
18131  }
18132  isSelected(editor) {
18133    return this.#uiManager.isSelected(editor);
18134  }
18135  unselect(editor) {
18136    this.#uiManager.unselect(editor);
18137  }
18138  pointerup(event) {
18139    const {
18140      isMac
18141    } = _util.FeatureTest.platform;
18142    if (event.button !== 0 || event.ctrlKey && isMac) {
18143      return;
18144    }
18145    if (event.target !== this.div) {
18146      return;
18147    }
18148    if (!this.#hadPointerDown) {
18149      return;
18150    }
18151    this.#hadPointerDown = false;
18152    if (!this.#allowClick) {
18153      this.#allowClick = true;
18154      return;
18155    }
18156    if (this.#uiManager.getMode() === _util.AnnotationEditorType.STAMP) {
18157      this.#uiManager.unselectAll();
18158      return;
18159    }
18160    this.#createAndAddNewEditor(event, false);
18161  }
18162  pointerdown(event) {
18163    if (this.#hadPointerDown) {
18164      this.#hadPointerDown = false;
18165      return;
18166    }
18167    const {
18168      isMac
18169    } = _util.FeatureTest.platform;
18170    if (event.button !== 0 || event.ctrlKey && isMac) {
18171      return;
18172    }
18173    if (event.target !== this.div) {
18174      return;
18175    }
18176    this.#hadPointerDown = true;
18177    const editor = this.#uiManager.getActive();
18178    this.#allowClick = !editor || editor.isEmpty();
18179  }
18180  findNewParent(editor, x, y) {
18181    const layer = this.#uiManager.findParent(x, y);
18182    if (layer === null || layer === this) {
18183      return false;
18184    }
18185    layer.changeParent(editor);
18186    return true;
18187  }
18188  destroy() {
18189    if (this.#uiManager.getActive()?.parent === this) {
18190      this.#uiManager.commitOrRemove();
18191      this.#uiManager.setActiveEditor(null);
18192    }
18193    for (const editor of this.#editors.values()) {
18194      this.#accessibilityManager?.removePointerInTextLayer(editor.contentDiv);
18195      editor.setParent(null);
18196      editor.isAttachedToDOM = false;
18197      editor.div.remove();
18198    }
18199    this.div = null;
18200    this.#editors.clear();
18201    this.#uiManager.removeLayer(this);
18202  }
18203  #cleanup() {
18204    this.#isCleaningUp = true;
18205    for (const editor of this.#editors.values()) {
18206      if (editor.isEmpty()) {
18207        editor.remove();
18208      }
18209    }
18210    this.#isCleaningUp = false;
18211  }
18212  render(_ref2) {
18213    let {
18214      viewport
18215    } = _ref2;
18216    this.viewport = viewport;
18217    (0, _display_utils.setLayerDimensions)(this.div, viewport);
18218    for (const editor of this.#uiManager.getEditors(this.pageIndex)) {
18219      this.add(editor);
18220    }
18221    this.updateMode();
18222  }
18223  update(_ref3) {
18224    let {
18225      viewport
18226    } = _ref3;
18227    this.#uiManager.commitOrRemove();
18228    this.viewport = viewport;
18229    (0, _display_utils.setLayerDimensions)(this.div, {
18230      rotation: viewport.rotation
18231    });
18232    this.updateMode();
18233  }
18234  get pageDimensions() {
18235    const {
18236      pageWidth,
18237      pageHeight
18238    } = this.viewport.rawDims;
18239    return [pageWidth, pageHeight];
18240  }
18241}
18242exports.AnnotationEditorLayer = AnnotationEditorLayer;
18243
18244/***/ }),
18245/* 197 */
18246/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
18247
18248
18249
18250Object.defineProperty(exports, "__esModule", ({
18251  value: true
18252}));
18253exports.FreeTextEditor = void 0;
18254__w_pdfjs_require__(89);
18255var _util = __w_pdfjs_require__(1);
18256var _tools = __w_pdfjs_require__(165);
18257var _editor = __w_pdfjs_require__(164);
18258var _annotation_layer = __w_pdfjs_require__(198);
18259class FreeTextEditor extends _editor.AnnotationEditor {
18260  #boundEditorDivBlur = this.editorDivBlur.bind(this);
18261  #boundEditorDivFocus = this.editorDivFocus.bind(this);
18262  #boundEditorDivInput = this.editorDivInput.bind(this);
18263  #boundEditorDivKeydown = this.editorDivKeydown.bind(this);
18264  #color;
18265  #content = "";
18266  #editorDivId = `${this.id}-editor`;
18267  #fontSize;
18268  #initialData = null;
18269  static _freeTextDefaultContent = "";
18270  static _internalPadding = 0;
18271  static _defaultColor = null;
18272  static _defaultFontSize = 10;
18273  static get _keyboardManager() {
18274    const proto = FreeTextEditor.prototype;
18275    const arrowChecker = self => self.isEmpty();
18276    const small = _tools.AnnotationEditorUIManager.TRANSLATE_SMALL;
18277    const big = _tools.AnnotationEditorUIManager.TRANSLATE_BIG;
18278    return (0, _util.shadow)(this, "_keyboardManager", new _tools.KeyboardManager([[["ctrl+s", "mac+meta+s", "ctrl+p", "mac+meta+p"], proto.commitOrRemove, {
18279      bubbles: true
18280    }], [["ctrl+Enter", "mac+meta+Enter", "Escape", "mac+Escape"], proto.commitOrRemove], [["ArrowLeft", "mac+ArrowLeft"], proto._translateEmpty, {
18281      args: [-small, 0],
18282      checker: arrowChecker
18283    }], [["ctrl+ArrowLeft", "mac+shift+ArrowLeft"], proto._translateEmpty, {
18284      args: [-big, 0],
18285      checker: arrowChecker
18286    }], [["ArrowRight", "mac+ArrowRight"], proto._translateEmpty, {
18287      args: [small, 0],
18288      checker: arrowChecker
18289    }], [["ctrl+ArrowRight", "mac+shift+ArrowRight"], proto._translateEmpty, {
18290      args: [big, 0],
18291      checker: arrowChecker
18292    }], [["ArrowUp", "mac+ArrowUp"], proto._translateEmpty, {
18293      args: [0, -small],
18294      checker: arrowChecker
18295    }], [["ctrl+ArrowUp", "mac+shift+ArrowUp"], proto._translateEmpty, {
18296      args: [0, -big],
18297      checker: arrowChecker
18298    }], [["ArrowDown", "mac+ArrowDown"], proto._translateEmpty, {
18299      args: [0, small],
18300      checker: arrowChecker
18301    }], [["ctrl+ArrowDown", "mac+shift+ArrowDown"], proto._translateEmpty, {
18302      args: [0, big],
18303      checker: arrowChecker
18304    }]]));
18305  }
18306  static _type = "freetext";
18307  constructor(params) {
18308    super({
18309      ...params,
18310      name: "freeTextEditor"
18311    });
18312    this.#color = params.color || FreeTextEditor._defaultColor || _editor.AnnotationEditor._defaultLineColor;
18313    this.#fontSize = params.fontSize || FreeTextEditor._defaultFontSize;
18314  }
18315  static initialize(l10n) {
18316    _editor.AnnotationEditor.initialize(l10n, {
18317      strings: ["free_text2_default_content", "editor_free_text2_aria_label"]
18318    });
18319    const style = getComputedStyle(document.documentElement);
18320    this._internalPadding = parseFloat(style.getPropertyValue("--freetext-padding"));
18321  }
18322  static updateDefaultParams(type, value) {
18323    switch (type) {
18324      case _util.AnnotationEditorParamsType.FREETEXT_SIZE:
18325        FreeTextEditor._defaultFontSize = value;
18326        break;
18327      case _util.AnnotationEditorParamsType.FREETEXT_COLOR:
18328        FreeTextEditor._defaultColor = value;
18329        break;
18330    }
18331  }
18332  updateParams(type, value) {
18333    switch (type) {
18334      case _util.AnnotationEditorParamsType.FREETEXT_SIZE:
18335        this.#updateFontSize(value);
18336        break;
18337      case _util.AnnotationEditorParamsType.FREETEXT_COLOR:
18338        this.#updateColor(value);
18339        break;
18340    }
18341  }
18342  static get defaultPropertiesToUpdate() {
18343    return [[_util.AnnotationEditorParamsType.FREETEXT_SIZE, FreeTextEditor._defaultFontSize], [_util.AnnotationEditorParamsType.FREETEXT_COLOR, FreeTextEditor._defaultColor || _editor.AnnotationEditor._defaultLineColor]];
18344  }
18345  get propertiesToUpdate() {
18346    return [[_util.AnnotationEditorParamsType.FREETEXT_SIZE, this.#fontSize], [_util.AnnotationEditorParamsType.FREETEXT_COLOR, this.#color]];
18347  }
18348  #updateFontSize(fontSize) {
18349    const setFontsize = size => {
18350      this.editorDiv.style.fontSize = `calc(${size}px * var(--scale-factor))`;
18351      this.translate(0, -(size - this.#fontSize) * this.parentScale);
18352      this.#fontSize = size;
18353      this.#setEditorDimensions();
18354    };
18355    const savedFontsize = this.#fontSize;
18356    this.addCommands({
18357      cmd: () => {
18358        setFontsize(fontSize);
18359      },
18360      undo: () => {
18361        setFontsize(savedFontsize);
18362      },
18363      mustExec: true,
18364      type: _util.AnnotationEditorParamsType.FREETEXT_SIZE,
18365      overwriteIfSameType: true,
18366      keepUndo: true
18367    });
18368  }
18369  #updateColor(color) {
18370    const savedColor = this.#color;
18371    this.addCommands({
18372      cmd: () => {
18373        this.#color = this.editorDiv.style.color = color;
18374      },
18375      undo: () => {
18376        this.#color = this.editorDiv.style.color = savedColor;
18377      },
18378      mustExec: true,
18379      type: _util.AnnotationEditorParamsType.FREETEXT_COLOR,
18380      overwriteIfSameType: true,
18381      keepUndo: true
18382    });
18383  }
18384  _translateEmpty(x, y) {
18385    this._uiManager.translateSelectedEditors(x, y, true);
18386  }
18387  getInitialTranslation() {
18388    const scale = this.parentScale;
18389    return [-FreeTextEditor._internalPadding * scale, -(FreeTextEditor._internalPadding + this.#fontSize) * scale];
18390  }
18391  rebuild() {
18392    if (!this.parent) {
18393      return;
18394    }
18395    super.rebuild();
18396    if (this.div === null) {
18397      return;
18398    }
18399    if (!this.isAttachedToDOM) {
18400      this.parent.add(this);
18401    }
18402  }
18403  enableEditMode() {
18404    if (this.isInEditMode()) {
18405      return;
18406    }
18407    this.parent.setEditingState(false);
18408    this.parent.updateToolbar(_util.AnnotationEditorType.FREETEXT);
18409    super.enableEditMode();
18410    this.overlayDiv.classList.remove("enabled");
18411    this.editorDiv.contentEditable = true;
18412    this._isDraggable = false;
18413    this.div.removeAttribute("aria-activedescendant");
18414    this.editorDiv.addEventListener("keydown", this.#boundEditorDivKeydown);
18415    this.editorDiv.addEventListener("focus", this.#boundEditorDivFocus);
18416    this.editorDiv.addEventListener("blur", this.#boundEditorDivBlur);
18417    this.editorDiv.addEventListener("input", this.#boundEditorDivInput);
18418  }
18419  disableEditMode() {
18420    if (!this.isInEditMode()) {
18421      return;
18422    }
18423    this.parent.setEditingState(true);
18424    super.disableEditMode();
18425    this.overlayDiv.classList.add("enabled");
18426    this.editorDiv.contentEditable = false;
18427    this.div.setAttribute("aria-activedescendant", this.#editorDivId);
18428    this._isDraggable = true;
18429    this.editorDiv.removeEventListener("keydown", this.#boundEditorDivKeydown);
18430    this.editorDiv.removeEventListener("focus", this.#boundEditorDivFocus);
18431    this.editorDiv.removeEventListener("blur", this.#boundEditorDivBlur);
18432    this.editorDiv.removeEventListener("input", this.#boundEditorDivInput);
18433    this.div.focus({
18434      preventScroll: true
18435    });
18436    this.isEditing = false;
18437    this.parent.div.classList.add("freeTextEditing");
18438  }
18439  focusin(event) {
18440    if (!this._focusEventsAllowed) {
18441      return;
18442    }
18443    super.focusin(event);
18444    if (event.target !== this.editorDiv) {
18445      this.editorDiv.focus();
18446    }
18447  }
18448  onceAdded() {
18449    if (this.width) {
18450      this.#cheatInitialRect();
18451      return;
18452    }
18453    this.enableEditMode();
18454    this.editorDiv.focus();
18455    if (this._initialOptions?.isCentered) {
18456      this.center();
18457    }
18458    this._initialOptions = null;
18459  }
18460  isEmpty() {
18461    return !this.editorDiv || this.editorDiv.innerText.trim() === "";
18462  }
18463  remove() {
18464    this.isEditing = false;
18465    if (this.parent) {
18466      this.parent.setEditingState(true);
18467      this.parent.div.classList.add("freeTextEditing");
18468    }
18469    super.remove();
18470  }
18471  #extractText() {
18472    const divs = this.editorDiv.getElementsByTagName("div");
18473    if (divs.length === 0) {
18474      return this.editorDiv.innerText;
18475    }
18476    const buffer = [];
18477    for (const div of divs) {
18478      buffer.push(div.innerText.replace(/\r\n?|\n/, ""));
18479    }
18480    return buffer.join("\n");
18481  }
18482  #setEditorDimensions() {
18483    const [parentWidth, parentHeight] = this.parentDimensions;
18484    let rect;
18485    if (this.isAttachedToDOM) {
18486      rect = this.div.getBoundingClientRect();
18487    } else {
18488      const {
18489        currentLayer,
18490        div
18491      } = this;
18492      const savedDisplay = div.style.display;
18493      div.style.display = "hidden";
18494      currentLayer.div.append(this.div);
18495      rect = div.getBoundingClientRect();
18496      div.remove();
18497      div.style.display = savedDisplay;
18498    }
18499    if (this.rotation % 180 === this.parentRotation % 180) {
18500      this.width = rect.width / parentWidth;
18501      this.height = rect.height / parentHeight;
18502    } else {
18503      this.width = rect.height / parentWidth;
18504      this.height = rect.width / parentHeight;
18505    }
18506    this.fixAndSetPosition();
18507  }
18508  commit() {
18509    if (!this.isInEditMode()) {
18510      return;
18511    }
18512    super.commit();
18513    this.disableEditMode();
18514    const savedText = this.#content;
18515    const newText = this.#content = this.#extractText().trimEnd();
18516    if (savedText === newText) {
18517      return;
18518    }
18519    const setText = text => {
18520      this.#content = text;
18521      if (!text) {
18522        this.remove();
18523        return;
18524      }
18525      this.#setContent();
18526      this._uiManager.rebuild(this);
18527      this.#setEditorDimensions();
18528    };
18529    this.addCommands({
18530      cmd: () => {
18531        setText(newText);
18532      },
18533      undo: () => {
18534        setText(savedText);
18535      },
18536      mustExec: false
18537    });
18538    this.#setEditorDimensions();
18539  }
18540  shouldGetKeyboardEvents() {
18541    return this.isInEditMode();
18542  }
18543  enterInEditMode() {
18544    this.enableEditMode();
18545    this.editorDiv.focus();
18546  }
18547  dblclick(event) {
18548    this.enterInEditMode();
18549  }
18550  keydown(event) {
18551    if (event.target === this.div && event.key === "Enter") {
18552      this.enterInEditMode();
18553      event.preventDefault();
18554    }
18555  }
18556  editorDivKeydown(event) {
18557    FreeTextEditor._keyboardManager.exec(this, event);
18558  }
18559  editorDivFocus(event) {
18560    this.isEditing = true;
18561  }
18562  editorDivBlur(event) {
18563    this.isEditing = false;
18564  }
18565  editorDivInput(event) {
18566    this.parent.div.classList.toggle("freeTextEditing", this.isEmpty());
18567  }
18568  disableEditing() {
18569    this.editorDiv.setAttribute("role", "comment");
18570    this.editorDiv.removeAttribute("aria-multiline");
18571  }
18572  enableEditing() {
18573    this.editorDiv.setAttribute("role", "textbox");
18574    this.editorDiv.setAttribute("aria-multiline", true);
18575  }
18576  render() {
18577    if (this.div) {
18578      return this.div;
18579    }
18580    let baseX, baseY;
18581    if (this.width) {
18582      baseX = this.x;
18583      baseY = this.y;
18584    }
18585    super.render();
18586    this.editorDiv = document.createElement("div");
18587    this.editorDiv.className = "internal";
18588    this.editorDiv.setAttribute("id", this.#editorDivId);
18589    this.enableEditing();
18590    _editor.AnnotationEditor._l10nPromise.get("editor_free_text2_aria_label").then(msg => this.editorDiv?.setAttribute("aria-label", msg));
18591    _editor.AnnotationEditor._l10nPromise.get("free_text2_default_content").then(msg => this.editorDiv?.setAttribute("default-content", msg));
18592    this.editorDiv.contentEditable = true;
18593    const {
18594      style
18595    } = this.editorDiv;
18596    style.fontSize = `calc(${this.#fontSize}px * var(--scale-factor))`;
18597    style.color = this.#color;
18598    this.div.append(this.editorDiv);
18599    this.overlayDiv = document.createElement("div");
18600    this.overlayDiv.classList.add("overlay", "enabled");
18601    this.div.append(this.overlayDiv);
18602    (0, _tools.bindEvents)(this, this.div, ["dblclick", "keydown"]);
18603    if (this.width) {
18604      const [parentWidth, parentHeight] = this.parentDimensions;
18605      if (this.annotationElementId) {
18606        const {
18607          position
18608        } = this.#initialData;
18609        let [tx, ty] = this.getInitialTranslation();
18610        [tx, ty] = this.pageTranslationToScreen(tx, ty);
18611        const [pageWidth, pageHeight] = this.pageDimensions;
18612        const [pageX, pageY] = this.pageTranslation;
18613        let posX, posY;
18614        switch (this.rotation) {
18615          case 0:
18616            posX = baseX + (position[0] - pageX) / pageWidth;
18617            posY = baseY + this.height - (position[1] - pageY) / pageHeight;
18618            break;
18619          case 90:
18620            posX = baseX + (position[0] - pageX) / pageWidth;
18621            posY = baseY - (position[1] - pageY) / pageHeight;
18622            [tx, ty] = [ty, -tx];
18623            break;
18624          case 180:
18625            posX = baseX - this.width + (position[0] - pageX) / pageWidth;
18626            posY = baseY - (position[1] - pageY) / pageHeight;
18627            [tx, ty] = [-tx, -ty];
18628            break;
18629          case 270:
18630            posX = baseX + (position[0] - pageX - this.height * pageHeight) / pageWidth;
18631            posY = baseY + (position[1] - pageY - this.width * pageWidth) / pageHeight;
18632            [tx, ty] = [-ty, tx];
18633            break;
18634        }
18635        this.setAt(posX * parentWidth, posY * parentHeight, tx, ty);
18636      } else {
18637        this.setAt(baseX * parentWidth, baseY * parentHeight, this.width * parentWidth, this.height * parentHeight);
18638      }
18639      this.#setContent();
18640      this._isDraggable = true;
18641      this.editorDiv.contentEditable = false;
18642    } else {
18643      this._isDraggable = false;
18644      this.editorDiv.contentEditable = true;
18645    }
18646    return this.div;
18647  }
18648  #setContent() {
18649    this.editorDiv.replaceChildren();
18650    if (!this.#content) {
18651      return;
18652    }
18653    for (const line of this.#content.split("\n")) {
18654      const div = document.createElement("div");
18655      div.append(line ? document.createTextNode(line) : document.createElement("br"));
18656      this.editorDiv.append(div);
18657    }
18658  }
18659  get contentDiv() {
18660    return this.editorDiv;
18661  }
18662  static deserialize(data, parent, uiManager) {
18663    let initialData = null;
18664    if (data instanceof _annotation_layer.FreeTextAnnotationElement) {
18665      const {
18666        data: {
18667          defaultAppearanceData: {
18668            fontSize,
18669            fontColor
18670          },
18671          rect,
18672          rotation,
18673          id
18674        },
18675        textContent,
18676        textPosition,
18677        parent: {
18678          page: {
18679            pageNumber
18680          }
18681        }
18682      } = data;
18683      if (!textContent || textContent.length === 0) {
18684        return null;
18685      }
18686      initialData = data = {
18687        annotationType: _util.AnnotationEditorType.FREETEXT,
18688        color: Array.from(fontColor),
18689        fontSize,
18690        value: textContent.join("\n"),
18691        position: textPosition,
18692        pageIndex: pageNumber - 1,
18693        rect,
18694        rotation,
18695        id,
18696        deleted: false
18697      };
18698    }
18699    const editor = super.deserialize(data, parent, uiManager);
18700    editor.#fontSize = data.fontSize;
18701    editor.#color = _util.Util.makeHexColor(...data.color);
18702    editor.#content = data.value;
18703    editor.annotationElementId = data.id || null;
18704    editor.#initialData = initialData;
18705    return editor;
18706  }
18707  serialize() {
18708    let isForCopying = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
18709    if (this.isEmpty()) {
18710      return null;
18711    }
18712    if (this.deleted) {
18713      return {
18714        pageIndex: this.pageIndex,
18715        id: this.annotationElementId,
18716        deleted: true
18717      };
18718    }
18719    const padding = FreeTextEditor._internalPadding * this.parentScale;
18720    const rect = this.getRect(padding, padding);
18721    const color = _editor.AnnotationEditor._colorManager.convert(this.isAttachedToDOM ? getComputedStyle(this.editorDiv).color : this.#color);
18722    const serialized = {
18723      annotationType: _util.AnnotationEditorType.FREETEXT,
18724      color,
18725      fontSize: this.#fontSize,
18726      value: this.#content,
18727      pageIndex: this.pageIndex,
18728      rect,
18729      rotation: this.rotation,
18730      structTreeParentId: this._structTreeParentId
18731    };
18732    if (isForCopying) {
18733      return serialized;
18734    }
18735    if (this.annotationElementId && !this.#hasElementChanged(serialized)) {
18736      return null;
18737    }
18738    serialized.id = this.annotationElementId;
18739    return serialized;
18740  }
18741  #hasElementChanged(serialized) {
18742    const {
18743      value,
18744      fontSize,
18745      color,
18746      rect,
18747      pageIndex
18748    } = this.#initialData;
18749    return serialized.value !== value || serialized.fontSize !== fontSize || serialized.rect.some((x, i) => Math.abs(x - rect[i]) >= 1) || serialized.color.some((c, i) => c !== color[i]) || serialized.pageIndex !== pageIndex;
18750  }
18751  #cheatInitialRect() {
18752    let delayed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
18753    if (!this.annotationElementId) {
18754      return;
18755    }
18756    this.#setEditorDimensions();
18757    if (!delayed && (this.width === 0 || this.height === 0)) {
18758      setTimeout(() => this.#cheatInitialRect(true), 0);
18759      return;
18760    }
18761    const padding = FreeTextEditor._internalPadding * this.parentScale;
18762    this.#initialData.rect = this.getRect(padding, padding);
18763  }
18764}
18765exports.FreeTextEditor = FreeTextEditor;
18766
18767/***/ }),
18768/* 198 */
18769/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
18770
18771
18772
18773Object.defineProperty(exports, "__esModule", ({
18774  value: true
18775}));
18776exports.StampAnnotationElement = exports.InkAnnotationElement = exports.FreeTextAnnotationElement = exports.AnnotationLayer = void 0;
18777__w_pdfjs_require__(89);
18778__w_pdfjs_require__(125);
18779__w_pdfjs_require__(136);
18780__w_pdfjs_require__(138);
18781__w_pdfjs_require__(141);
18782__w_pdfjs_require__(143);
18783__w_pdfjs_require__(145);
18784__w_pdfjs_require__(147);
18785var _util = __w_pdfjs_require__(1);
18786var _display_utils = __w_pdfjs_require__(168);
18787var _annotation_storage = __w_pdfjs_require__(163);
18788var _scripting_utils = __w_pdfjs_require__(199);
18789var _displayL10n_utils = __w_pdfjs_require__(200);
18790var _xfa_layer = __w_pdfjs_require__(201);
18791const DEFAULT_TAB_INDEX = 1000;
18792const DEFAULT_FONT_SIZE = 9;
18793const GetElementsByNameSet = new WeakSet();
18794function getRectDims(rect) {
18795  return {
18796    width: rect[2] - rect[0],
18797    height: rect[3] - rect[1]
18798  };
18799}
18800class AnnotationElementFactory {
18801  static create(parameters) {
18802    const subtype = parameters.data.annotationType;
18803    switch (subtype) {
18804      case _util.AnnotationType.LINK:
18805        return new LinkAnnotationElement(parameters);
18806      case _util.AnnotationType.TEXT:
18807        return new TextAnnotationElement(parameters);
18808      case _util.AnnotationType.WIDGET:
18809        const fieldType = parameters.data.fieldType;
18810        switch (fieldType) {
18811          case "Tx":
18812            return new TextWidgetAnnotationElement(parameters);
18813          case "Btn":
18814            if (parameters.data.radioButton) {
18815              return new RadioButtonWidgetAnnotationElement(parameters);
18816            } else if (parameters.data.checkBox) {
18817              return new CheckboxWidgetAnnotationElement(parameters);
18818            }
18819            return new PushButtonWidgetAnnotationElement(parameters);
18820          case "Ch":
18821            return new ChoiceWidgetAnnotationElement(parameters);
18822          case "Sig":
18823            return new SignatureWidgetAnnotationElement(parameters);
18824        }
18825        return new WidgetAnnotationElement(parameters);
18826      case _util.AnnotationType.POPUP:
18827        return new PopupAnnotationElement(parameters);
18828      case _util.AnnotationType.FREETEXT:
18829        return new FreeTextAnnotationElement(parameters);
18830      case _util.AnnotationType.LINE:
18831        return new LineAnnotationElement(parameters);
18832      case _util.AnnotationType.SQUARE:
18833        return new SquareAnnotationElement(parameters);
18834      case _util.AnnotationType.CIRCLE:
18835        return new CircleAnnotationElement(parameters);
18836      case _util.AnnotationType.POLYLINE:
18837        return new PolylineAnnotationElement(parameters);
18838      case _util.AnnotationType.CARET:
18839        return new CaretAnnotationElement(parameters);
18840      case _util.AnnotationType.INK:
18841        return new InkAnnotationElement(parameters);
18842      case _util.AnnotationType.POLYGON:
18843        return new PolygonAnnotationElement(parameters);
18844      case _util.AnnotationType.HIGHLIGHT:
18845        return new HighlightAnnotationElement(parameters);
18846      case _util.AnnotationType.UNDERLINE:
18847        return new UnderlineAnnotationElement(parameters);
18848      case _util.AnnotationType.SQUIGGLY:
18849        return new SquigglyAnnotationElement(parameters);
18850      case _util.AnnotationType.STRIKEOUT:
18851        return new StrikeOutAnnotationElement(parameters);
18852      case _util.AnnotationType.STAMP:
18853        return new StampAnnotationElement(parameters);
18854      case _util.AnnotationType.FILEATTACHMENT:
18855        return new FileAttachmentAnnotationElement(parameters);
18856      default:
18857        return new AnnotationElement(parameters);
18858    }
18859  }
18860}
18861class AnnotationElement {
18862  #hasBorder = false;
18863  constructor(parameters) {
18864    let {
18865      isRenderable = false,
18866      ignoreBorder = false,
18867      createQuadrilaterals = false
18868    } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
18869    this.isRenderable = isRenderable;
18870    this.data = parameters.data;
18871    this.layer = parameters.layer;
18872    this.linkService = parameters.linkService;
18873    this.downloadManager = parameters.downloadManager;
18874    this.imageResourcesPath = parameters.imageResourcesPath;
18875    this.renderForms = parameters.renderForms;
18876    this.svgFactory = parameters.svgFactory;
18877    this.annotationStorage = parameters.annotationStorage;
18878    this.enableScripting = parameters.enableScripting;
18879    this.hasJSActions = parameters.hasJSActions;
18880    this._fieldObjects = parameters.fieldObjects;
18881    this.parent = parameters.parent;
18882    if (isRenderable) {
18883      this.container = this._createContainer(ignoreBorder);
18884    }
18885    if (createQuadrilaterals) {
18886      this._createQuadrilaterals();
18887    }
18888  }
18889  static _hasPopupData(_ref) {
18890    let {
18891      titleObj,
18892      contentsObj,
18893      richText
18894    } = _ref;
18895    return !!(titleObj?.str || contentsObj?.str || richText?.str);
18896  }
18897  get hasPopupData() {
18898    return AnnotationElement._hasPopupData(this.data);
18899  }
18900  _createContainer(ignoreBorder) {
18901    const {
18902      data,
18903      parent: {
18904        page,
18905        viewport
18906      }
18907    } = this;
18908    const container = document.createElement("section");
18909    container.setAttribute("data-annotation-id", data.id);
18910    if (!(this instanceof WidgetAnnotationElement)) {
18911      container.tabIndex = DEFAULT_TAB_INDEX;
18912    }
18913    container.style.zIndex = this.parent.zIndex++;
18914    if (this.data.popupRef) {
18915      container.setAttribute("aria-haspopup", "dialog");
18916    }
18917    if (data.noRotate) {
18918      container.classList.add("norotate");
18919    }
18920    const {
18921      pageWidth,
18922      pageHeight,
18923      pageX,
18924      pageY
18925    } = viewport.rawDims;
18926    if (!data.rect || this instanceof PopupAnnotationElement) {
18927      const {
18928        rotation
18929      } = data;
18930      if (!data.hasOwnCanvas && rotation !== 0) {
18931        this.setRotation(rotation, container);
18932      }
18933      return container;
18934    }
18935    const {
18936      width,
18937      height
18938    } = getRectDims(data.rect);
18939    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]]);
18940    if (!ignoreBorder && data.borderStyle.width > 0) {
18941      container.style.borderWidth = `${data.borderStyle.width}px`;
18942      const horizontalRadius = data.borderStyle.horizontalCornerRadius;
18943      const verticalRadius = data.borderStyle.verticalCornerRadius;
18944      if (horizontalRadius > 0 || verticalRadius > 0) {
18945        const radius = `calc(${horizontalRadius}px * var(--scale-factor)) / calc(${verticalRadius}px * var(--scale-factor))`;
18946        container.style.borderRadius = radius;
18947      } else if (this instanceof RadioButtonWidgetAnnotationElement) {
18948        const radius = `calc(${width}px * var(--scale-factor)) / calc(${height}px * var(--scale-factor))`;
18949        container.style.borderRadius = radius;
18950      }
18951      switch (data.borderStyle.style) {
18952        case _util.AnnotationBorderStyleType.SOLID:
18953          container.style.borderStyle = "solid";
18954          break;
18955        case _util.AnnotationBorderStyleType.DASHED:
18956          container.style.borderStyle = "dashed";
18957          break;
18958        case _util.AnnotationBorderStyleType.BEVELED:
18959          (0, _util.warn)("Unimplemented border style: beveled");
18960          break;
18961        case _util.AnnotationBorderStyleType.INSET:
18962          (0, _util.warn)("Unimplemented border style: inset");
18963          break;
18964        case _util.AnnotationBorderStyleType.UNDERLINE:
18965          container.style.borderBottomStyle = "solid";
18966          break;
18967        default:
18968          break;
18969      }
18970      const borderColor = data.borderColor || null;
18971      if (borderColor) {
18972        this.#hasBorder = true;
18973        container.style.borderColor = _util.Util.makeHexColor(borderColor[0] | 0, borderColor[1] | 0, borderColor[2] | 0);
18974      } else {
18975        container.style.borderWidth = 0;
18976      }
18977    }
18978    container.style.left = `${100 * (rect[0] - pageX) / pageWidth}%`;
18979    container.style.top = `${100 * (rect[1] - pageY) / pageHeight}%`;
18980    const {
18981      rotation
18982    } = data;
18983    if (data.hasOwnCanvas || rotation === 0) {
18984      container.style.width = `${100 * width / pageWidth}%`;
18985      container.style.height = `${100 * height / pageHeight}%`;
18986    } else {
18987      this.setRotation(rotation, container);
18988    }
18989    return container;
18990  }
18991  setRotation(angle) {
18992    let container = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.container;
18993    if (!this.data.rect) {
18994      return;
18995    }
18996    const {
18997      pageWidth,
18998      pageHeight
18999    } = this.parent.viewport.rawDims;
19000    const {
19001      width,
19002      height
19003    } = getRectDims(this.data.rect);
19004    let elementWidth, elementHeight;
19005    if (angle % 180 === 0) {
19006      elementWidth = 100 * width / pageWidth;
19007      elementHeight = 100 * height / pageHeight;
19008    } else {
19009      elementWidth = 100 * height / pageWidth;
19010      elementHeight = 100 * width / pageHeight;
19011    }
19012    container.style.width = `${elementWidth}%`;
19013    container.style.height = `${elementHeight}%`;
19014    container.setAttribute("data-main-rotation", (360 - angle) % 360);
19015  }
19016  get _commonActions() {
19017    const setColor = (jsName, styleName, event) => {
19018      const color = event.detail[jsName];
19019      const colorType = color[0];
19020      const colorArray = color.slice(1);
19021      event.target.style[styleName] = _scripting_utils.ColorConverters[`${colorType}_HTML`](colorArray);
19022      this.annotationStorage.setValue(this.data.id, {
19023        [styleName]: _scripting_utils.ColorConverters[`${colorType}_rgb`](colorArray)
19024      });
19025    };
19026    return (0, _util.shadow)(this, "_commonActions", {
19027      display: event => {
19028        const {
19029          display
19030        } = event.detail;
19031        const hidden = display % 2 === 1;
19032        this.container.style.visibility = hidden ? "hidden" : "visible";
19033        this.annotationStorage.setValue(this.data.id, {
19034          noView: hidden,
19035          noPrint: display === 1 || display === 2
19036        });
19037      },
19038      print: event => {
19039        this.annotationStorage.setValue(this.data.id, {
19040          noPrint: !event.detail.print
19041        });
19042      },
19043      hidden: event => {
19044        const {
19045          hidden
19046        } = event.detail;
19047        this.container.style.visibility = hidden ? "hidden" : "visible";
19048        this.annotationStorage.setValue(this.data.id, {
19049          noPrint: hidden,
19050          noView: hidden
19051        });
19052      },
19053      focus: event => {
19054        setTimeout(() => event.target.focus({
19055          preventScroll: false
19056        }), 0);
19057      },
19058      userName: event => {
19059        event.target.title = event.detail.userName;
19060      },
19061      readonly: event => {
19062        event.target.disabled = event.detail.readonly;
19063      },
19064      required: event => {
19065        this._setRequired(event.target, event.detail.required);
19066      },
19067      bgColor: event => {
19068        setColor("bgColor", "backgroundColor", event);
19069      },
19070      fillColor: event => {
19071        setColor("fillColor", "backgroundColor", event);
19072      },
19073      fgColor: event => {
19074        setColor("fgColor", "color", event);
19075      },
19076      textColor: event => {
19077        setColor("textColor", "color", event);
19078      },
19079      borderColor: event => {
19080        setColor("borderColor", "borderColor", event);
19081      },
19082      strokeColor: event => {
19083        setColor("strokeColor", "borderColor", event);
19084      },
19085      rotation: event => {
19086        const angle = event.detail.rotation;
19087        this.setRotation(angle);
19088        this.annotationStorage.setValue(this.data.id, {
19089          rotation: angle
19090        });
19091      }
19092    });
19093  }
19094  _dispatchEventFromSandbox(actions, jsEvent) {
19095    const commonActions = this._commonActions;
19096    for (const name of Object.keys(jsEvent.detail)) {
19097      const action = actions[name] || commonActions[name];
19098      action?.(jsEvent);
19099    }
19100  }
19101  _setDefaultPropertiesFromJS(element) {
19102    if (!this.enableScripting) {
19103      return;
19104    }
19105    const storedData = this.annotationStorage.getRawValue(this.data.id);
19106    if (!storedData) {
19107      return;
19108    }
19109    const commonActions = this._commonActions;
19110    for (const [actionName, detail] of Object.entries(storedData)) {
19111      const action = commonActions[actionName];
19112      if (action) {
19113        const eventProxy = {
19114          detail: {
19115            [actionName]: detail
19116          },
19117          target: element
19118        };
19119        action(eventProxy);
19120        delete storedData[actionName];
19121      }
19122    }
19123  }
19124  _createQuadrilaterals() {
19125    if (!this.container) {
19126      return;
19127    }
19128    const {
19129      quadPoints
19130    } = this.data;
19131    if (!quadPoints) {
19132      return;
19133    }
19134    const [rectBlX, rectBlY, rectTrX, rectTrY] = this.data.rect;
19135    if (quadPoints.length === 1) {
19136      const [, {
19137        x: trX,
19138        y: trY
19139      }, {
19140        x: blX,
19141        y: blY
19142      }] = quadPoints[0];
19143      if (rectTrX === trX && rectTrY === trY && rectBlX === blX && rectBlY === blY) {
19144        return;
19145      }
19146    }
19147    const {
19148      style
19149    } = this.container;
19150    let svgBuffer;
19151    if (this.#hasBorder) {
19152      const {
19153        borderColor,
19154        borderWidth
19155      } = style;
19156      style.borderWidth = 0;
19157      svgBuffer = ["url('data:image/svg+xml;utf8,", `<svg xmlns="http://www.w3.org/2000/svg"`, ` preserveAspectRatio="none" viewBox="0 0 1 1">`, `<g fill="transparent" stroke="${borderColor}" stroke-width="${borderWidth}">`];
19158      this.container.classList.add("hasBorder");
19159    }
19160    const width = rectTrX - rectBlX;
19161    const height = rectTrY - rectBlY;
19162    const {
19163      svgFactory
19164    } = this;
19165    const svg = svgFactory.createElement("svg");
19166    svg.classList.add("quadrilateralsContainer");
19167    svg.setAttribute("width", 0);
19168    svg.setAttribute("height", 0);
19169    const defs = svgFactory.createElement("defs");
19170    svg.append(defs);
19171    const clipPath = svgFactory.createElement("clipPath");
19172    const id = `clippath_${this.data.id}`;
19173    clipPath.setAttribute("id", id);
19174    clipPath.setAttribute("clipPathUnits", "objectBoundingBox");
19175    defs.append(clipPath);
19176    for (const [, {
19177      x: trX,
19178      y: trY
19179    }, {
19180      x: blX,
19181      y: blY
19182    }] of quadPoints) {
19183      const rect = svgFactory.createElement("rect");
19184      const x = (blX - rectBlX) / width;
19185      const y = (rectTrY - trY) / height;
19186      const rectWidth = (trX - blX) / width;
19187      const rectHeight = (trY - blY) / height;
19188      rect.setAttribute("x", x);
19189      rect.setAttribute("y", y);
19190      rect.setAttribute("width", rectWidth);
19191      rect.setAttribute("height", rectHeight);
19192      clipPath.append(rect);
19193      svgBuffer?.push(`<rect vector-effect="non-scaling-stroke" x="${x}" y="${y}" width="${rectWidth}" height="${rectHeight}"/>`);
19194    }
19195    if (this.#hasBorder) {
19196      svgBuffer.push(`</g></svg>')`);
19197      style.backgroundImage = svgBuffer.join("");
19198    }
19199    this.container.append(svg);
19200    this.container.style.clipPath = `url(#${id})`;
19201  }
19202  _createPopup() {
19203    const {
19204      container,
19205      data
19206    } = this;
19207    container.setAttribute("aria-haspopup", "dialog");
19208    const popup = new PopupAnnotationElement({
19209      data: {
19210        color: data.color,
19211        titleObj: data.titleObj,
19212        modificationDate: data.modificationDate,
19213        contentsObj: data.contentsObj,
19214        richText: data.richText,
19215        parentRect: data.rect,
19216        borderStyle: 0,
19217        id: `popup_${data.id}`,
19218        rotation: data.rotation
19219      },
19220      parent: this.parent,
19221      elements: [this]
19222    });
19223    this.parent.div.append(popup.render());
19224  }
19225  render() {
19226    (0, _util.unreachable)("Abstract method `AnnotationElement.render` called");
19227  }
19228  _getElementsByName(name) {
19229    let skipId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
19230    const fields = [];
19231    if (this._fieldObjects) {
19232      const fieldObj = this._fieldObjects[name];
19233      if (fieldObj) {
19234        for (const {
19235          page,
19236          id,
19237          exportValues
19238        } of fieldObj) {
19239          if (page === -1) {
19240            continue;
19241          }
19242          if (id === skipId) {
19243            continue;
19244          }
19245          const exportValue = typeof exportValues === "string" ? exportValues : null;
19246          const domElement = document.querySelector(`[data-element-id="${id}"]`);
19247          if (domElement && !GetElementsByNameSet.has(domElement)) {
19248            (0, _util.warn)(`_getElementsByName - element not allowed: ${id}`);
19249            continue;
19250          }
19251          fields.push({
19252            id,
19253            exportValue,
19254            domElement
19255          });
19256        }
19257      }
19258      return fields;
19259    }
19260    for (const domElement of document.getElementsByName(name)) {
19261      const {
19262        exportValue
19263      } = domElement;
19264      const id = domElement.getAttribute("data-element-id");
19265      if (id === skipId) {
19266        continue;
19267      }
19268      if (!GetElementsByNameSet.has(domElement)) {
19269        continue;
19270      }
19271      fields.push({
19272        id,
19273        exportValue,
19274        domElement
19275      });
19276    }
19277    return fields;
19278  }
19279  show() {
19280    if (this.container) {
19281      this.container.hidden = false;
19282    }
19283    this.popup?.maybeShow();
19284  }
19285  hide() {
19286    if (this.container) {
19287      this.container.hidden = true;
19288    }
19289    this.popup?.forceHide();
19290  }
19291  getElementsToTriggerPopup() {
19292    return this.container;
19293  }
19294  addHighlightArea() {
19295    const triggers = this.getElementsToTriggerPopup();
19296    if (Array.isArray(triggers)) {
19297      for (const element of triggers) {
19298        element.classList.add("highlightArea");
19299      }
19300    } else {
19301      triggers.classList.add("highlightArea");
19302    }
19303  }
19304  _editOnDoubleClick() {
19305    const {
19306      annotationEditorType: mode,
19307      data: {
19308        id: editId
19309      }
19310    } = this;
19311    this.container.addEventListener("dblclick", () => {
19312      this.linkService.eventBus?.dispatch("switchannotationeditormode", {
19313        source: this,
19314        mode,
19315        editId
19316      });
19317    });
19318  }
19319}
19320class LinkAnnotationElement extends AnnotationElement {
19321  constructor(parameters) {
19322    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
19323    super(parameters, {
19324      isRenderable: true,
19325      ignoreBorder: !!options?.ignoreBorder,
19326      createQuadrilaterals: true
19327    });
19328    this.isTooltipOnly = parameters.data.isTooltipOnly;
19329  }
19330  render() {
19331    const {
19332      data,
19333      linkService
19334    } = this;
19335    const link = document.createElement("a");
19336    link.setAttribute("data-element-id", data.id);
19337    let isBound = false;
vendor: 5,924 bytes, lines 19338-19534
19338    if (data.url) {
19339      linkService.addLinkAttributes(link, data.url, data.newWindow);
19340      isBound = true;
19341    } else if (data.action) {
19342      this._bindNamedAction(link, data.action);
19343      isBound = true;
19344    } else if (data.attachment) {
19345      this._bindAttachment(link, data.attachment);
19346      isBound = true;
19347    } else if (data.setOCGState) {
19348      this.#bindSetOCGState(link, data.setOCGState);
19349      isBound = true;
19350    } else if (data.dest) {
19351      this._bindLink(link, data.dest);
19352      isBound = true;
19353    } else {
19354      if (data.actions && (data.actions.Action || data.actions["Mouse Up"] || data.actions["Mouse Down"]) && this.enableScripting && this.hasJSActions) {
19355        this._bindJSAction(link, data);
19356        isBound = true;
19357      }
19358      if (data.resetForm) {
19359        this._bindResetFormAction(link, data.resetForm);
19360        isBound = true;
19361      } else if (this.isTooltipOnly && !isBound) {
19362        this._bindLink(link, "");
19363        isBound = true;
19364      }
19365    }
19366    this.container.classList.add("linkAnnotation");
19367    if (isBound) {
19368      this.container.append(link);
19369    }
19370    return this.container;
19371  }
19372  #setInternalLink() {
19373    this.container.setAttribute("data-internal-link", "");
19374  }
19375  _bindLink(link, destination) {
19376    link.href = this.linkService.getDestinationHash(destination);
19377    link.onclick = () => {
19378      if (destination) {
19379        this.linkService.goToDestination(destination);
19380      }
19381      return false;
19382    };
19383    if (destination || destination === "") {
19384      this.#setInternalLink();
19385    }
19386  }
19387  _bindNamedAction(link, action) {
19388    link.href = this.linkService.getAnchorUrl("");
19389    link.onclick = () => {
19390      this.linkService.executeNamedAction(action);
19391      return false;
19392    };
19393    this.#setInternalLink();
19394  }
19395  _bindAttachment(link, attachment) {
19396    link.href = this.linkService.getAnchorUrl("");
19397    link.onclick = () => {
19398      this.downloadManager?.openOrDownloadData(this.container, attachment.content, attachment.filename);
19399      return false;
19400    };
19401    this.#setInternalLink();
19402  }
19403  #bindSetOCGState(link, action) {
19404    link.href = this.linkService.getAnchorUrl("");
19405    link.onclick = () => {
19406      this.linkService.executeSetOCGState(action);
19407      return false;
19408    };
19409    this.#setInternalLink();
19410  }
19411  _bindJSAction(link, data) {
19412    link.href = this.linkService.getAnchorUrl("");
19413    const map = new Map([["Action", "onclick"], ["Mouse Up", "onmouseup"], ["Mouse Down", "onmousedown"]]);
19414    for (const name of Object.keys(data.actions)) {
19415      const jsName = map.get(name);
19416      if (!jsName) {
19417        continue;
19418      }
19419      link[jsName] = () => {
19420        this.linkService.eventBus?.dispatch("dispatcheventinsandbox", {
19421          source: this,
19422          detail: {
19423            id: data.id,
19424            name
19425          }
19426        });
19427        return false;
19428      };
19429    }
19430    if (!link.onclick) {
19431      link.onclick = () => false;
19432    }
19433    this.#setInternalLink();
19434  }
19435  _bindResetFormAction(link, resetForm) {
19436    const otherClickAction = link.onclick;
19437    if (!otherClickAction) {
19438      link.href = this.linkService.getAnchorUrl("");
19439    }
19440    this.#setInternalLink();
19441    if (!this._fieldObjects) {
19442      (0, _util.warn)(`_bindResetFormAction - "resetForm" action not supported, ` + "ensure that the `fieldObjects` parameter is provided.");
19443      if (!otherClickAction) {
19444        link.onclick = () => false;
19445      }
19446      return;
19447    }
19448    link.onclick = () => {
19449      otherClickAction?.();
19450      const {
19451        fields: resetFormFields,
19452        refs: resetFormRefs,
19453        include
19454      } = resetForm;
19455      const allFields = [];
19456      if (resetFormFields.length !== 0 || resetFormRefs.length !== 0) {
19457        const fieldIds = new Set(resetFormRefs);
19458        for (const fieldName of resetFormFields) {
19459          const fields = this._fieldObjects[fieldName] || [];
19460          for (const {
19461            id
19462          } of fields) {
19463            fieldIds.add(id);
19464          }
19465        }
19466        for (const fields of Object.values(this._fieldObjects)) {
19467          for (const field of fields) {
19468            if (fieldIds.has(field.id) === include) {
19469              allFields.push(field);
19470            }
19471          }
19472        }
19473      } else {
19474        for (const fields of Object.values(this._fieldObjects)) {
19475          allFields.push(...fields);
19476        }
19477      }
19478      const storage = this.annotationStorage;
19479      const allIds = [];
19480      for (const field of allFields) {
19481        const {
19482          id
19483        } = field;
19484        allIds.push(id);
19485        switch (field.type) {
19486          case "text":
19487            {
19488              const value = field.defaultValue || "";
19489              storage.setValue(id, {
19490                value
19491              });
19492              break;
19493            }
19494          case "checkbox":
19495          case "radiobutton":
19496            {
19497              const value = field.defaultValue === field.exportValues;
19498              storage.setValue(id, {
19499                value
19500              });
19501              break;
19502            }
19503          case "combobox":
19504          case "listbox":
19505            {
19506              const value = field.defaultValue || "";
19507              storage.setValue(id, {
19508                value
19509              });
19510              break;
19511            }
19512          default:
19513            continue;
19514        }
19515        const domElement = document.querySelector(`[data-element-id="${id}"]`);
19516        if (!domElement) {
19517          continue;
19518        } else if (!GetElementsByNameSet.has(domElement)) {
19519          (0, _util.warn)(`_bindResetFormAction - element not allowed: ${id}`);
19520          continue;
19521        }
19522        domElement.dispatchEvent(new Event("resetform"));
19523      }
19524      if (this.enableScripting) {
19525        this.linkService.eventBus?.dispatch("dispatcheventinsandbox", {
19526          source: this,
19527          detail: {
19528            id: "app",
19529            ids: allIds,
19530            name: "ResetForm"
19531          }
19532        });
19533      }
19534      return false;
19535    };
19536  }
19537}
19538class TextAnnotationElement extends AnnotationElement {
19539  constructor(parameters) {
19540    super(parameters, {
19541      isRenderable: true
19542    });
19543  }
19544  render() {
19545    this.container.classList.add("textAnnotation");
19546    const image = document.createElement("img");
19547    image.src = this.imageResourcesPath + "annotation-" + this.data.name.toLowerCase() + ".svg";
19548    image.alt = "[{{type}} Annotation]";
19549    image.dataset.l10nId = "text_annotation_type";
19550    image.dataset.l10nArgs = JSON.stringify({
19551      type: this.data.name
19552    });
19553    if (!this.data.popupRef && this.hasPopupData) {
19554      this._createPopup();
19555    }
19556    this.container.append(image);
19557    return this.container;
19558  }
19559}
19560class WidgetAnnotationElement extends AnnotationElement {
19561  render() {
19562    if (this.data.alternativeText) {
19563      this.container.title = this.data.alternativeText;
19564    }
19565    return this.container;
19566  }
19567  showElementAndHideCanvas(element) {
19568    if (this.data.hasOwnCanvas) {
19569      if (element.previousSibling?.nodeName === "CANVAS") {
19570        element.previousSibling.hidden = true;
19571      }
19572      element.hidden = false;
19573    }
19574  }
19575  _getKeyModifier(event) {
19576    const {
19577      isWin,
19578      isMac
19579    } = _util.FeatureTest.platform;
19580    return isWin && event.ctrlKey || isMac && event.metaKey;
19581  }
19582  _setEventListener(element, elementData, baseName, eventName, valueGetter) {
19583    if (baseName.includes("mouse")) {
19584      element.addEventListener(baseName, event => {
19585        this.linkService.eventBus?.dispatch("dispatcheventinsandbox", {
19586          source: this,
19587          detail: {
19588            id: this.data.id,
19589            name: eventName,
19590            value: valueGetter(event),
19591            shift: event.shiftKey,
19592            modifier: this._getKeyModifier(event)
19593          }
19594        });
19595      });
19596    } else {
19597      element.addEventListener(baseName, event => {
19598        if (baseName === "blur") {
19599          if (!elementData.focused || !event.relatedTarget) {
19600            return;
19601          }
19602          elementData.focused = false;
19603        } else if (baseName === "focus") {
19604          if (elementData.focused) {
19605            return;
19606          }
19607          elementData.focused = true;
19608        }
19609        if (!valueGetter) {
19610          return;
19611        }
19612        this.linkService.eventBus?.dispatch("dispatcheventinsandbox", {
19613          source: this,
19614          detail: {
19615            id: this.data.id,
19616            name: eventName,
19617            value: valueGetter(event)
19618          }
19619        });
19620      });
19621    }
19622  }
19623  _setEventListeners(element, elementData, names, getter) {
19624    for (const [baseName, eventName] of names) {
19625      if (eventName === "Action" || this.data.actions?.[eventName]) {
19626        if (eventName === "Focus" || eventName === "Blur") {
19627          elementData ||= {
19628            focused: false
19629          };
19630        }
19631        this._setEventListener(element, elementData, baseName, eventName, getter);
19632        if (eventName === "Focus" && !this.data.actions?.Blur) {
19633          this._setEventListener(element, elementData, "blur", "Blur", null);
19634        } else if (eventName === "Blur" && !this.data.actions?.Focus) {
19635          this._setEventListener(element, elementData, "focus", "Focus", null);
19636        }
19637      }
19638    }
19639  }
19640  _setBackgroundColor(element) {
19641    const color = this.data.backgroundColor || null;
19642    element.style.backgroundColor = color === null ? "transparent" : _util.Util.makeHexColor(color[0], color[1], color[2]);
19643  }
19644  _setTextStyle(element) {
19645    const TEXT_ALIGNMENT = ["left", "center", "right"];
19646    const {
19647      fontColor
19648    } = this.data.defaultAppearanceData;
19649    const fontSize = this.data.defaultAppearanceData.fontSize || DEFAULT_FONT_SIZE;
19650    const style = element.style;
vendor: 26,111 bytes, lines 19651-20383
19651    let computedFontSize;
19652    const BORDER_SIZE = 2;
19653    const roundToOneDecimal = x => Math.round(10 * x) / 10;
19654    if (this.data.multiLine) {
19655      const height = Math.abs(this.data.rect[3] - this.data.rect[1] - BORDER_SIZE);
19656      const numberOfLines = Math.round(height / (_util.LINE_FACTOR * fontSize)) || 1;
19657      const lineHeight = height / numberOfLines;
19658      computedFontSize = Math.min(fontSize, roundToOneDecimal(lineHeight / _util.LINE_FACTOR));
19659    } else {
19660      const height = Math.abs(this.data.rect[3] - this.data.rect[1] - BORDER_SIZE);
19661      computedFontSize = Math.min(fontSize, roundToOneDecimal(height / _util.LINE_FACTOR));
19662    }
19663    style.fontSize = `calc(${computedFontSize}px * var(--scale-factor))`;
19664    style.color = _util.Util.makeHexColor(fontColor[0], fontColor[1], fontColor[2]);
19665    if (this.data.textAlignment !== null) {
19666      style.textAlign = TEXT_ALIGNMENT[this.data.textAlignment];
19667    }
19668  }
19669  _setRequired(element, isRequired) {
19670    if (isRequired) {
19671      element.setAttribute("required", true);
19672    } else {
19673      element.removeAttribute("required");
19674    }
19675    element.setAttribute("aria-required", isRequired);
19676  }
19677}
19678class TextWidgetAnnotationElement extends WidgetAnnotationElement {
19679  constructor(parameters) {
19680    const isRenderable = parameters.renderForms || !parameters.data.hasAppearance && !!parameters.data.fieldValue;
19681    super(parameters, {
19682      isRenderable
19683    });
19684  }
19685  setPropertyOnSiblings(base, key, value, keyInStorage) {
19686    const storage = this.annotationStorage;
19687    for (const element of this._getElementsByName(base.name, base.id)) {
19688      if (element.domElement) {
19689        element.domElement[key] = value;
19690      }
19691      storage.setValue(element.id, {
19692        [keyInStorage]: value
19693      });
19694    }
19695  }
19696  render() {
19697    const storage = this.annotationStorage;
19698    const id = this.data.id;
19699    this.container.classList.add("textWidgetAnnotation");
19700    let element = null;
19701    if (this.renderForms) {
19702      const storedData = storage.getValue(id, {
19703        value: this.data.fieldValue
19704      });
19705      let textContent = storedData.value || "";
19706      const maxLen = storage.getValue(id, {
19707        charLimit: this.data.maxLen
19708      }).charLimit;
19709      if (maxLen && textContent.length > maxLen) {
19710        textContent = textContent.slice(0, maxLen);
19711      }
19712      let fieldFormattedValues = storedData.formattedValue || this.data.textContent?.join("\n") || null;
19713      if (fieldFormattedValues && this.data.comb) {
19714        fieldFormattedValues = fieldFormattedValues.replaceAll(/\s+/g, "");
19715      }
19716      const elementData = {
19717        userValue: textContent,
19718        formattedValue: fieldFormattedValues,
19719        lastCommittedValue: null,
19720        commitKey: 1,
19721        focused: false
19722      };
19723      if (this.data.multiLine) {
19724        element = document.createElement("textarea");
19725        element.textContent = fieldFormattedValues ?? textContent;
19726        if (this.data.doNotScroll) {
19727          element.style.overflowY = "hidden";
19728        }
19729      } else {
19730        element = document.createElement("input");
19731        element.type = "text";
19732        element.setAttribute("value", fieldFormattedValues ?? textContent);
19733        if (this.data.doNotScroll) {
19734          element.style.overflowX = "hidden";
19735        }
19736      }
19737      if (this.data.hasOwnCanvas) {
19738        element.hidden = true;
19739      }
19740      GetElementsByNameSet.add(element);
19741      element.setAttribute("data-element-id", id);
19742      element.disabled = this.data.readOnly;
19743      element.name = this.data.fieldName;
19744      element.tabIndex = DEFAULT_TAB_INDEX;
19745      this._setRequired(element, this.data.required);
19746      if (maxLen) {
19747        element.maxLength = maxLen;
19748      }
19749      element.addEventListener("input", event => {
19750        storage.setValue(id, {
19751          value: event.target.value
19752        });
19753        this.setPropertyOnSiblings(element, "value", event.target.value, "value");
19754        elementData.formattedValue = null;
19755      });
19756      element.addEventListener("resetform", event => {
19757        const defaultValue = this.data.defaultFieldValue ?? "";
19758        element.value = elementData.userValue = defaultValue;
19759        elementData.formattedValue = null;
19760      });
19761      let blurListener = event => {
19762        const {
19763          formattedValue
19764        } = elementData;
19765        if (formattedValue !== null && formattedValue !== undefined) {
19766          event.target.value = formattedValue;
19767        }
19768        event.target.scrollLeft = 0;
19769      };
19770      if (this.enableScripting && this.hasJSActions) {
19771        element.addEventListener("focus", event => {
19772          if (elementData.focused) {
19773            return;
19774          }
19775          const {
19776            target
19777          } = event;
19778          if (elementData.userValue) {
19779            target.value = elementData.userValue;
19780          }
19781          elementData.lastCommittedValue = target.value;
19782          elementData.commitKey = 1;
19783          elementData.focused = true;
19784        });
19785        element.addEventListener("updatefromsandbox", jsEvent => {
19786          this.showElementAndHideCanvas(jsEvent.target);
19787          const actions = {
19788            value(event) {
19789              elementData.userValue = event.detail.value ?? "";
19790              storage.setValue(id, {
19791                value: elementData.userValue.toString()
19792              });
19793              event.target.value = elementData.userValue;
19794            },
19795            formattedValue(event) {
19796              const {
19797                formattedValue
19798              } = event.detail;
19799              elementData.formattedValue = formattedValue;
19800              if (formattedValue !== null && formattedValue !== undefined && event.target !== document.activeElement) {
19801                event.target.value = formattedValue;
19802              }
19803              storage.setValue(id, {
19804                formattedValue
19805              });
19806            },
19807            selRange(event) {
19808              event.target.setSelectionRange(...event.detail.selRange);
19809            },
19810            charLimit: event => {
19811              const {
19812                charLimit
19813              } = event.detail;
19814              const {
19815                target
19816              } = event;
19817              if (charLimit === 0) {
19818                target.removeAttribute("maxLength");
19819                return;
19820              }
19821              target.setAttribute("maxLength", charLimit);
19822              let value = elementData.userValue;
19823              if (!value || value.length <= charLimit) {
19824                return;
19825              }
19826              value = value.slice(0, charLimit);
19827              target.value = elementData.userValue = value;
19828              storage.setValue(id, {
19829                value
19830              });
19831              this.linkService.eventBus?.dispatch("dispatcheventinsandbox", {
19832                source: this,
19833                detail: {
19834                  id,
19835                  name: "Keystroke",
19836                  value,
19837                  willCommit: true,
19838                  commitKey: 1,
19839                  selStart: target.selectionStart,
19840                  selEnd: target.selectionEnd
19841                }
19842              });
19843            }
19844          };
19845          this._dispatchEventFromSandbox(actions, jsEvent);
19846        });
19847        element.addEventListener("keydown", event => {
19848          elementData.commitKey = 1;
19849          let commitKey = -1;
19850          if (event.key === "Escape") {
19851            commitKey = 0;
19852          } else if (event.key === "Enter" && !this.data.multiLine) {
19853            commitKey = 2;
19854          } else if (event.key === "Tab") {
19855            elementData.commitKey = 3;
19856          }
19857          if (commitKey === -1) {
19858            return;
19859          }
19860          const {
19861            value
19862          } = event.target;
19863          if (elementData.lastCommittedValue === value) {
19864            return;
19865          }
19866          elementData.lastCommittedValue = value;
19867          elementData.userValue = value;
19868          this.linkService.eventBus?.dispatch("dispatcheventinsandbox", {
19869            source: this,
19870            detail: {
19871              id,
19872              name: "Keystroke",
19873              value,
19874              willCommit: true,
19875              commitKey,
19876              selStart: event.target.selectionStart,
19877              selEnd: event.target.selectionEnd
19878            }
19879          });
19880        });
19881        const _blurListener = blurListener;
19882        blurListener = null;
19883        element.addEventListener("blur", event => {
19884          if (!elementData.focused || !event.relatedTarget) {
19885            return;
19886          }
19887          elementData.focused = false;
19888          const {
19889            value
19890          } = event.target;
19891          elementData.userValue = value;
19892          if (elementData.lastCommittedValue !== value) {
19893            this.linkService.eventBus?.dispatch("dispatcheventinsandbox", {
19894              source: this,
19895              detail: {
19896                id,
19897                name: "Keystroke",
19898                value,
19899                willCommit: true,
19900                commitKey: elementData.commitKey,
19901                selStart: event.target.selectionStart,
19902                selEnd: event.target.selectionEnd
19903              }
19904            });
19905          }
19906          _blurListener(event);
19907        });
19908        if (this.data.actions?.Keystroke) {
19909          element.addEventListener("beforeinput", event => {
19910            elementData.lastCommittedValue = null;
19911            const {
19912              data,
19913              target
19914            } = event;
19915            const {
19916              value,
19917              selectionStart,
19918              selectionEnd
19919            } = target;
19920            let selStart = selectionStart,
19921              selEnd = selectionEnd;
19922            switch (event.inputType) {
19923              case "deleteWordBackward":
19924                {
19925                  const match = value.substring(0, selectionStart).match(/\w*[^\w]*$/);
19926                  if (match) {
19927                    selStart -= match[0].length;
19928                  }
19929                  break;
19930                }
19931              case "deleteWordForward":
19932                {
19933                  const match = value.substring(selectionStart).match(/^[^\w]*\w*/);
19934                  if (match) {
19935                    selEnd += match[0].length;
19936                  }
19937                  break;
19938                }
19939              case "deleteContentBackward":
19940                if (selectionStart === selectionEnd) {
19941                  selStart -= 1;
19942                }
19943                break;
19944              case "deleteContentForward":
19945                if (selectionStart === selectionEnd) {
19946                  selEnd += 1;
19947                }
19948                break;
19949            }
19950            event.preventDefault();
19951            this.linkService.eventBus?.dispatch("dispatcheventinsandbox", {
19952              source: this,
19953              detail: {
19954                id,
19955                name: "Keystroke",
19956                value,
19957                change: data || "",
19958                willCommit: false,
19959                selStart,
19960                selEnd
19961              }
19962            });
19963          });
19964        }
19965        this._setEventListeners(element, elementData, [["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], event => event.target.value);
19966      }
19967      if (blurListener) {
19968        element.addEventListener("blur", blurListener);
19969      }
19970      if (this.data.comb) {
19971        const fieldWidth = this.data.rect[2] - this.data.rect[0];
19972        const combWidth = fieldWidth / maxLen;
19973        element.classList.add("comb");
19974        element.style.letterSpacing = `calc(${combWidth}px * var(--scale-factor) - 1ch)`;
19975      }
19976    } else {
19977      element = document.createElement("div");
19978      element.textContent = this.data.fieldValue;
19979      element.style.verticalAlign = "middle";
19980      element.style.display = "table-cell";
19981    }
19982    this._setTextStyle(element);
19983    this._setBackgroundColor(element);
19984    this._setDefaultPropertiesFromJS(element);
19985    this.container.append(element);
19986    return this.container;
19987  }
19988}
19989class SignatureWidgetAnnotationElement extends WidgetAnnotationElement {
19990  constructor(parameters) {
19991    super(parameters, {
19992      isRenderable: !!parameters.data.hasOwnCanvas
19993    });
19994  }
19995}
19996class CheckboxWidgetAnnotationElement extends WidgetAnnotationElement {
19997  constructor(parameters) {
19998    super(parameters, {
19999      isRenderable: parameters.renderForms
20000    });
20001  }
20002  render() {
20003    const storage = this.annotationStorage;
20004    const data = this.data;
20005    const id = data.id;
20006    let value = storage.getValue(id, {
20007      value: data.exportValue === data.fieldValue
20008    }).value;
20009    if (typeof value === "string") {
20010      value = value !== "Off";
20011      storage.setValue(id, {
20012        value
20013      });
20014    }
20015    this.container.classList.add("buttonWidgetAnnotation", "checkBox");
20016    const element = document.createElement("input");
20017    GetElementsByNameSet.add(element);
20018    element.setAttribute("data-element-id", id);
20019    element.disabled = data.readOnly;
20020    this._setRequired(element, this.data.required);
20021    element.type = "checkbox";
20022    element.name = data.fieldName;
20023    if (value) {
20024      element.setAttribute("checked", true);
20025    }
20026    element.setAttribute("exportValue", data.exportValue);
20027    element.tabIndex = DEFAULT_TAB_INDEX;
20028    element.addEventListener("change", event => {
20029      const {
20030        name,
20031        checked
20032      } = event.target;
20033      for (const checkbox of this._getElementsByName(name, id)) {
20034        const curChecked = checked && checkbox.exportValue === data.exportValue;
20035        if (checkbox.domElement) {
20036          checkbox.domElement.checked = curChecked;
20037        }
20038        storage.setValue(checkbox.id, {
20039          value: curChecked
20040        });
20041      }
20042      storage.setValue(id, {
20043        value: checked
20044      });
20045    });
20046    element.addEventListener("resetform", event => {
20047      const defaultValue = data.defaultFieldValue || "Off";
20048      event.target.checked = defaultValue === data.exportValue;
20049    });
20050    if (this.enableScripting && this.hasJSActions) {
20051      element.addEventListener("updatefromsandbox", jsEvent => {
20052        const actions = {
20053          value(event) {
20054            event.target.checked = event.detail.value !== "Off";
20055            storage.setValue(id, {
20056              value: event.target.checked
20057            });
20058          }
20059        };
20060        this._dispatchEventFromSandbox(actions, jsEvent);
20061      });
20062      this._setEventListeners(element, null, [["change", "Validate"], ["change", "Action"], ["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], event => event.target.checked);
20063    }
20064    this._setBackgroundColor(element);
20065    this._setDefaultPropertiesFromJS(element);
20066    this.container.append(element);
20067    return this.container;
20068  }
20069}
20070class RadioButtonWidgetAnnotationElement extends WidgetAnnotationElement {
20071  constructor(parameters) {
20072    super(parameters, {
20073      isRenderable: parameters.renderForms
20074    });
20075  }
20076  render() {
20077    this.container.classList.add("buttonWidgetAnnotation", "radioButton");
20078    const storage = this.annotationStorage;
20079    const data = this.data;
20080    const id = data.id;
20081    let value = storage.getValue(id, {
20082      value: data.fieldValue === data.buttonValue
20083    }).value;
20084    if (typeof value === "string") {
20085      value = value !== data.buttonValue;
20086      storage.setValue(id, {
20087        value
20088      });
20089    }
20090    const element = document.createElement("input");
20091    GetElementsByNameSet.add(element);
20092    element.setAttribute("data-element-id", id);
20093    element.disabled = data.readOnly;
20094    this._setRequired(element, this.data.required);
20095    element.type = "radio";
20096    element.name = data.fieldName;
20097    if (value) {
20098      element.setAttribute("checked", true);
20099    }
20100    element.tabIndex = DEFAULT_TAB_INDEX;
20101    element.addEventListener("change", event => {
20102      const {
20103        name,
20104        checked
20105      } = event.target;
20106      for (const radio of this._getElementsByName(name, id)) {
20107        storage.setValue(radio.id, {
20108          value: false
20109        });
20110      }
20111      storage.setValue(id, {
20112        value: checked
20113      });
20114    });
20115    element.addEventListener("resetform", event => {
20116      const defaultValue = data.defaultFieldValue;
20117      event.target.checked = defaultValue !== null && defaultValue !== undefined && defaultValue === data.buttonValue;
20118    });
20119    if (this.enableScripting && this.hasJSActions) {
20120      const pdfButtonValue = data.buttonValue;
20121      element.addEventListener("updatefromsandbox", jsEvent => {
20122        const actions = {
20123          value: event => {
20124            const checked = pdfButtonValue === event.detail.value;
20125            for (const radio of this._getElementsByName(event.target.name)) {
20126              const curChecked = checked && radio.id === id;
20127              if (radio.domElement) {
20128                radio.domElement.checked = curChecked;
20129              }
20130              storage.setValue(radio.id, {
20131                value: curChecked
20132              });
20133            }
20134          }
20135        };
20136        this._dispatchEventFromSandbox(actions, jsEvent);
20137      });
20138      this._setEventListeners(element, null, [["change", "Validate"], ["change", "Action"], ["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], event => event.target.checked);
20139    }
20140    this._setBackgroundColor(element);
20141    this._setDefaultPropertiesFromJS(element);
20142    this.container.append(element);
20143    return this.container;
20144  }
20145}
20146class PushButtonWidgetAnnotationElement extends LinkAnnotationElement {
20147  constructor(parameters) {
20148    super(parameters, {
20149      ignoreBorder: parameters.data.hasAppearance
20150    });
20151  }
20152  render() {
20153    const container = super.render();
20154    container.classList.add("buttonWidgetAnnotation", "pushButton");
20155    if (this.data.alternativeText) {
20156      container.title = this.data.alternativeText;
20157    }
20158    const linkElement = container.lastChild;
20159    if (this.enableScripting && this.hasJSActions && linkElement) {
20160      this._setDefaultPropertiesFromJS(linkElement);
20161      linkElement.addEventListener("updatefromsandbox", jsEvent => {
20162        this._dispatchEventFromSandbox({}, jsEvent);
20163      });
20164    }
20165    return container;
20166  }
20167}
20168class ChoiceWidgetAnnotationElement extends WidgetAnnotationElement {
20169  constructor(parameters) {
20170    super(parameters, {
20171      isRenderable: parameters.renderForms
20172    });
20173  }
20174  render() {
20175    this.container.classList.add("choiceWidgetAnnotation");
20176    const storage = this.annotationStorage;
20177    const id = this.data.id;
20178    const storedData = storage.getValue(id, {
20179      value: this.data.fieldValue
20180    });
20181    const selectElement = document.createElement("select");
20182    GetElementsByNameSet.add(selectElement);
20183    selectElement.setAttribute("data-element-id", id);
20184    selectElement.disabled = this.data.readOnly;
20185    this._setRequired(selectElement, this.data.required);
20186    selectElement.name = this.data.fieldName;
20187    selectElement.tabIndex = DEFAULT_TAB_INDEX;
20188    let addAnEmptyEntry = this.data.combo && this.data.options.length > 0;
20189    if (!this.data.combo) {
20190      selectElement.size = this.data.options.length;
20191      if (this.data.multiSelect) {
20192        selectElement.multiple = true;
20193      }
20194    }
20195    selectElement.addEventListener("resetform", event => {
20196      const defaultValue = this.data.defaultFieldValue;
20197      for (const option of selectElement.options) {
20198        option.selected = option.value === defaultValue;
20199      }
20200    });
20201    for (const option of this.data.options) {
20202      const optionElement = document.createElement("option");
20203      optionElement.textContent = option.displayValue;
20204      optionElement.value = option.exportValue;
20205      if (storedData.value.includes(option.exportValue)) {
20206        optionElement.setAttribute("selected", true);
20207        addAnEmptyEntry = false;
20208      }
20209      selectElement.append(optionElement);
20210    }
20211    let removeEmptyEntry = null;
20212    if (addAnEmptyEntry) {
20213      const noneOptionElement = document.createElement("option");
20214      noneOptionElement.value = " ";
20215      noneOptionElement.setAttribute("hidden", true);
20216      noneOptionElement.setAttribute("selected", true);
20217      selectElement.prepend(noneOptionElement);
20218      removeEmptyEntry = () => {
20219        noneOptionElement.remove();
20220        selectElement.removeEventListener("input", removeEmptyEntry);
20221        removeEmptyEntry = null;
20222      };
20223      selectElement.addEventListener("input", removeEmptyEntry);
20224    }
20225    const getValue = isExport => {
20226      const name = isExport ? "value" : "textContent";
20227      const {
20228        options,
20229        multiple
20230      } = selectElement;
20231      if (!multiple) {
20232        return options.selectedIndex === -1 ? null : options[options.selectedIndex][name];
20233      }
20234      return Array.prototype.filter.call(options, option => option.selected).map(option => option[name]);
20235    };
20236    let selectedValues = getValue(false);
20237    const getItems = event => {
20238      const options = event.target.options;
20239      return Array.prototype.map.call(options, option => {
20240        return {
20241          displayValue: option.textContent,
20242          exportValue: option.value
20243        };
20244      });
20245    };
20246    if (this.enableScripting && this.hasJSActions) {
20247      selectElement.addEventListener("updatefromsandbox", jsEvent => {
20248        const actions = {
20249          value(event) {
20250            removeEmptyEntry?.();
20251            const value = event.detail.value;
20252            const values = new Set(Array.isArray(value) ? value : [value]);
20253            for (const option of selectElement.options) {
20254              option.selected = values.has(option.value);
20255            }
20256            storage.setValue(id, {
20257              value: getValue(true)
20258            });
20259            selectedValues = getValue(false);
20260          },
20261          multipleSelection(event) {
20262            selectElement.multiple = true;
20263          },
20264          remove(event) {
20265            const options = selectElement.options;
20266            const index = event.detail.remove;
20267            options[index].selected = false;
20268            selectElement.remove(index);
20269            if (options.length > 0) {
20270              const i = Array.prototype.findIndex.call(options, option => option.selected);
20271              if (i === -1) {
20272                options[0].selected = true;
20273              }
20274            }
20275            storage.setValue(id, {
20276              value: getValue(true),
20277              items: getItems(event)
20278            });
20279            selectedValues = getValue(false);
20280          },
20281          clear(event) {
20282            while (selectElement.length !== 0) {
20283              selectElement.remove(0);
20284            }
20285            storage.setValue(id, {
20286              value: null,
20287              items: []
20288            });
20289            selectedValues = getValue(false);
20290          },
20291          insert(event) {
20292            const {
20293              index,
20294              displayValue,
20295              exportValue
20296            } = event.detail.insert;
20297            const selectChild = selectElement.children[index];
20298            const optionElement = document.createElement("option");
20299            optionElement.textContent = displayValue;
20300            optionElement.value = exportValue;
20301            if (selectChild) {
20302              selectChild.before(optionElement);
20303            } else {
20304              selectElement.append(optionElement);
20305            }
20306            storage.setValue(id, {
20307              value: getValue(true),
20308              items: getItems(event)
20309            });
20310            selectedValues = getValue(false);
20311          },
20312          items(event) {
20313            const {
20314              items
20315            } = event.detail;
20316            while (selectElement.length !== 0) {
20317              selectElement.remove(0);
20318            }
20319            for (const item of items) {
20320              const {
20321                displayValue,
20322                exportValue
20323              } = item;
20324              const optionElement = document.createElement("option");
20325              optionElement.textContent = displayValue;
20326              optionElement.value = exportValue;
20327              selectElement.append(optionElement);
20328            }
20329            if (selectElement.options.length > 0) {
20330              selectElement.options[0].selected = true;
20331            }
20332            storage.setValue(id, {
20333              value: getValue(true),
20334              items: getItems(event)
20335            });
20336            selectedValues = getValue(false);
20337          },
20338          indices(event) {
20339            const indices = new Set(event.detail.indices);
20340            for (const option of event.target.options) {
20341              option.selected = indices.has(option.index);
20342            }
20343            storage.setValue(id, {
20344              value: getValue(true)
20345            });
20346            selectedValues = getValue(false);
20347          },
20348          editable(event) {
20349            event.target.disabled = !event.detail.editable;
20350          }
20351        };
20352        this._dispatchEventFromSandbox(actions, jsEvent);
20353      });
20354      selectElement.addEventListener("input", event => {
20355        const exportValue = getValue(true);
20356        storage.setValue(id, {
20357          value: exportValue
20358        });
20359        event.preventDefault();
20360        this.linkService.eventBus?.dispatch("dispatcheventinsandbox", {
20361          source: this,
20362          detail: {
20363            id,
20364            name: "Keystroke",
20365            value: selectedValues,
20366            changeEx: exportValue,
20367            willCommit: false,
20368            commitKey: 1,
20369            keyDown: false
20370          }
20371        });
20372      });
20373      this._setEventListeners(selectElement, null, [["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"], ["input", "Action"], ["input", "Validate"]], event => event.target.value);
20374    } else {
20375      selectElement.addEventListener("input", function (event) {
20376        storage.setValue(id, {
20377          value: getValue(true)
20378        });
20379      });
20380    }
20381    if (this.data.combo) {
20382      this._setTextStyle(selectElement);
20383    } else {}
20384    this._setBackgroundColor(selectElement);
20385    this._setDefaultPropertiesFromJS(selectElement);
20386    this.container.append(selectElement);
20387    return this.container;
20388  }
20389}
20390class PopupAnnotationElement extends AnnotationElement {
20391  constructor(parameters) {
20392    const {
20393      data,
20394      elements
20395    } = parameters;
20396    super(parameters, {
20397      isRenderable: AnnotationElement._hasPopupData(data)
20398    });
20399    this.elements = elements;
20400  }
20401  render() {
20402    this.container.classList.add("popupAnnotation");
20403    const popup = new PopupElement({
20404      container: this.container,
20405      color: this.data.color,
20406      titleObj: this.data.titleObj,
20407      modificationDate: this.data.modificationDate,
20408      contentsObj: this.data.contentsObj,
20409      richText: this.data.richText,
20410      rect: this.data.rect,
20411      parentRect: this.data.parentRect || null,
20412      parent: this.parent,
20413      elements: this.elements,
20414      open: this.data.open
20415    });
20416    const elementIds = [];
20417    for (const element of this.elements) {
20418      element.popup = popup;
20419      elementIds.push(element.data.id);
20420      element.addHighlightArea();
20421    }
20422    this.container.setAttribute("aria-controls", elementIds.map(id => `${_util.AnnotationPrefix}${id}`).join(","));
20423    return this.container;
20424  }
20425}
20426class PopupElement {
20427  #dateTimePromise = null;
20428  #boundKeyDown = this.#keyDown.bind(this);
20429  #boundHide = this.#hide.bind(this);
20430  #boundShow = this.#show.bind(this);
20431  #boundToggle = this.#toggle.bind(this);
20432  #color = null;
20433  #container = null;
20434  #contentsObj = null;
20435  #elements = null;
20436  #parent = null;
20437  #parentRect = null;
20438  #pinned = false;
20439  #popup = null;
20440  #rect = null;
20441  #richText = null;
20442  #titleObj = null;
20443  #wasVisible = false;
20444  constructor(_ref2) {
20445    let {
20446      container,
20447      color,
20448      elements,
20449      titleObj,
20450      modificationDate,
20451      contentsObj,
20452      richText,
20453      parent,
20454      rect,
20455      parentRect,
20456      open
20457    } = _ref2;
20458    this.#container = container;
20459    this.#titleObj = titleObj;
20460    this.#contentsObj = contentsObj;
20461    this.#richText = richText;
20462    this.#parent = parent;
20463    this.#color = color;
20464    this.#rect = rect;
20465    this.#parentRect = parentRect;
20466    this.#elements = elements;
20467    const dateObject = _display_utils.PDFDateString.toDateObject(modificationDate);
20468    if (dateObject) {
20469      this.#dateTimePromise = parent.l10n.get("annotation_date_string", {
20470        date: dateObject.toLocaleDateString(),
20471        time: dateObject.toLocaleTimeString()
20472      });
20473    }
20474    this.trigger = elements.flatMap(e => e.getElementsToTriggerPopup());
20475    for (const element of this.trigger) {
20476      element.addEventListener("click", this.#boundToggle);
20477      element.addEventListener("mouseenter", this.#boundShow);
20478      element.addEventListener("mouseleave", this.#boundHide);
20479      element.classList.add("popupTriggerArea");
20480    }
20481    for (const element of elements) {
20482      element.container?.addEventListener("keydown", this.#boundKeyDown);
20483    }
20484    this.#container.hidden = true;
20485    if (open) {
20486      this.#toggle();
20487    }
20488  }
20489  render() {
20490    if (this.#popup) {
20491      return;
20492    }
20493    const {
20494      page: {
20495        view
20496      },
20497      viewport: {
20498        rawDims: {
20499          pageWidth,
20500          pageHeight,
20501          pageX,
20502          pageY
20503        }
20504      }
20505    } = this.#parent;
20506    const popup = this.#popup = document.createElement("div");
20507    popup.className = "popup";
20508    if (this.#color) {
20509      const baseColor = popup.style.outlineColor = _util.Util.makeHexColor(...this.#color);
20510      if (CSS.supports("background-color", "color-mix(in srgb, red 30%, white)")) {
20511        popup.style.backgroundColor = `color-mix(in srgb, ${baseColor} 30%, white)`;
20512      } else {
20513        const BACKGROUND_ENLIGHT = 0.7;
20514        popup.style.backgroundColor = _util.Util.makeHexColor(...this.#color.map(c => Math.floor(BACKGROUND_ENLIGHT * (255 - c) + c)));
20515      }
20516    }
20517    const header = document.createElement("span");
20518    header.className = "header";
20519    const title = document.createElement("h1");
20520    header.append(title);
20521    ({
20522      dir: title.dir,
20523      str: title.textContent
20524    } = this.#titleObj);
20525    popup.append(header);
20526    if (this.#dateTimePromise) {
20527      const modificationDate = document.createElement("span");
20528      modificationDate.classList.add("popupDate");
20529      this.#dateTimePromise.then(localized => {
20530        modificationDate.textContent = localized;
20531      });
20532      header.append(modificationDate);
20533    }
20534    const contentsObj = this.#contentsObj;
20535    const richText = this.#richText;
20536    if (richText?.str && (!contentsObj?.str || contentsObj.str === richText.str)) {
20537      _xfa_layer.XfaLayer.render({
20538        xfaHtml: richText.html,
20539        intent: "richText",
20540        div: popup
20541      });
20542      popup.lastChild.classList.add("richText", "popupContent");
20543    } else {
20544      const contents = this._formatContents(contentsObj);
20545      popup.append(contents);
20546    }
20547    let useParentRect = !!this.#parentRect;
20548    let rect = useParentRect ? this.#parentRect : this.#rect;
20549    for (const element of this.#elements) {
20550      if (!rect || _util.Util.intersect(element.data.rect, rect) !== null) {
20551        rect = element.data.rect;
20552        useParentRect = true;
20553        break;
20554      }
20555    }
20556    const normalizedRect = _util.Util.normalizeRect([rect[0], view[3] - rect[1] + view[
vendor: 7,809 bytes, lines 20556-20810
205561], rect[2], view[3] - rect[3] + view[1]]);
20557    const HORIZONTAL_SPACE_AFTER_ANNOTATION = 5;
20558    const parentWidth = useParentRect ? rect[2] - rect[0] + HORIZONTAL_SPACE_AFTER_ANNOTATION : 0;
20559    const popupLeft = normalizedRect[0] + parentWidth;
20560    const popupTop = normalizedRect[1];
20561    const {
20562      style
20563    } = this.#container;
20564    style.left = `${100 * (popupLeft - pageX) / pageWidth}%`;
20565    style.top = `${100 * (popupTop - pageY) / pageHeight}%`;
20566    this.#container.append(popup);
20567  }
20568  _formatContents(_ref3) {
20569    let {
20570      str,
20571      dir
20572    } = _ref3;
20573    const p = document.createElement("p");
20574    p.classList.add("popupContent");
20575    p.dir = dir;
20576    const lines = str.split(/(?:\r\n?|\n)/);
20577    for (let i = 0, ii = lines.length; i < ii; ++i) {
20578      const line = lines[i];
20579      p.append(document.createTextNode(line));
20580      if (i < ii - 1) {
20581        p.append(document.createElement("br"));
20582      }
20583    }
20584    return p;
20585  }
20586  #keyDown(event) {
20587    if (event.altKey || event.shiftKey || event.ctrlKey || event.metaKey) {
20588      return;
20589    }
20590    if (event.key === "Enter" || event.key === "Escape" && this.#pinned) {
20591      this.#toggle();
20592    }
20593  }
20594  #toggle() {
20595    this.#pinned = !this.#pinned;
20596    if (this.#pinned) {
20597      this.#show();
20598      this.#container.addEventListener("click", this.#boundToggle);
20599      this.#container.addEventListener("keydown", this.#boundKeyDown);
20600    } else {
20601      this.#hide();
20602      this.#container.removeEventListener("click", this.#boundToggle);
20603      this.#container.removeEventListener("keydown", this.#boundKeyDown);
20604    }
20605  }
20606  #show() {
20607    if (!this.#popup) {
20608      this.render();
20609    }
20610    if (!this.isVisible) {
20611      this.#container.hidden = false;
20612      this.#container.style.zIndex = parseInt(this.#container.style.zIndex) + 1000;
20613    } else if (this.#pinned) {
20614      this.#container.classList.add("focused");
20615    }
20616  }
20617  #hide() {
20618    this.#container.classList.remove("focused");
20619    if (this.#pinned || !this.isVisible) {
20620      return;
20621    }
20622    this.#container.hidden = true;
20623    this.#container.style.zIndex = parseInt(this.#container.style.zIndex) - 1000;
20624  }
20625  forceHide() {
20626    this.#wasVisible = this.isVisible;
20627    if (!this.#wasVisible) {
20628      return;
20629    }
20630    this.#container.hidden = true;
20631  }
20632  maybeShow() {
20633    if (!this.#wasVisible) {
20634      return;
20635    }
20636    this.#wasVisible = false;
20637    this.#container.hidden = false;
20638  }
20639  get isVisible() {
20640    return this.#container.hidden === false;
20641  }
20642}
20643class FreeTextAnnotationElement extends AnnotationElement {
20644  constructor(parameters) {
20645    super(parameters, {
20646      isRenderable: true,
20647      ignoreBorder: true
20648    });
20649    this.textContent = parameters.data.textContent;
20650    this.textPosition = parameters.data.textPosition;
20651    this.annotationEditorType = _util.AnnotationEditorType.FREETEXT;
20652  }
20653  render() {
20654    this.container.classList.add("freeTextAnnotation");
20655    if (this.textContent) {
20656      const content = document.createElement("div");
20657      content.classList.add("annotationTextContent");
20658      content.setAttribute("role", "comment");
20659      for (const line of this.textContent) {
20660        const lineSpan = document.createElement("span");
20661        lineSpan.textContent = line;
20662        content.append(lineSpan);
20663      }
20664      this.container.append(content);
20665    }
20666    if (!this.data.popupRef && this.hasPopupData) {
20667      this._createPopup();
20668    }
20669    this._editOnDoubleClick();
20670    return this.container;
20671  }
20672}
20673exports.FreeTextAnnotationElement = FreeTextAnnotationElement;
20674class LineAnnotationElement extends AnnotationElement {
20675  #line = null;
20676  constructor(parameters) {
20677    super(parameters, {
20678      isRenderable: true,
20679      ignoreBorder: true
20680    });
20681  }
20682  render() {
20683    this.container.classList.add("lineAnnotation");
20684    const data = this.data;
20685    const {
20686      width,
20687      height
20688    } = getRectDims(data.rect);
20689    const svg = this.svgFactory.create(width, height, true);
20690    const line = this.#line = this.svgFactory.createElement("svg:line");
20691    line.setAttribute("x1", data.rect[2] - data.lineCoordinates[0]);
20692    line.setAttribute("y1", data.rect[3] - data.lineCoordinates[1]);
20693    line.setAttribute("x2", data.rect[2] - data.lineCoordinates[2]);
20694    line.setAttribute("y2", data.rect[3] - data.lineCoordinates[3]);
20695    line.setAttribute("stroke-width", data.borderStyle.width || 1);
20696    line.setAttribute("stroke", "transparent");
20697    line.setAttribute("fill", "transparent");
20698    svg.append(line);
20699    this.container.append(svg);
20700    if (!data.popupRef && this.hasPopupData) {
20701      this._createPopup();
20702    }
20703    return this.container;
20704  }
20705  getElementsToTriggerPopup() {
20706    return this.#line;
20707  }
20708  addHighlightArea() {
20709    this.container.classList.add("highlightArea");
20710  }
20711}
20712class SquareAnnotationElement extends AnnotationElement {
20713  #square = null;
20714  constructor(parameters) {
20715    super(parameters, {
20716      isRenderable: true,
20717      ignoreBorder: true
20718    });
20719  }
20720  render() {
20721    this.container.classList.add("squareAnnotation");
20722    const data = this.data;
20723    const {
20724      width,
20725      height
20726    } = getRectDims(data.rect);
20727    const svg = this.svgFactory.create(width, height, true);
20728    const borderWidth = data.borderStyle.width;
20729    const square = this.#square = this.svgFactory.createElement("svg:rect");
20730    square.setAttribute("x", borderWidth / 2);
20731    square.setAttribute("y", borderWidth / 2);
20732    square.setAttribute("width", width - borderWidth);
20733    square.setAttribute("height", height - borderWidth);
20734    square.setAttribute("stroke-width", borderWidth || 1);
20735    square.setAttribute("stroke", "transparent");
20736    square.setAttribute("fill", "transparent");
20737    svg.append(square);
20738    this.container.append(svg);
20739    if (!data.popupRef && this.hasPopupData) {
20740      this._createPopup();
20741    }
20742    return this.container;
20743  }
20744  getElementsToTriggerPopup() {
20745    return this.#square;
20746  }
20747  addHighlightArea() {
20748    this.container.classList.add("highlightArea");
20749  }
20750}
20751class CircleAnnotationElement extends AnnotationElement {
20752  #circle = null;
20753  constructor(parameters) {
20754    super(parameters, {
20755      isRenderable: true,
20756      ignoreBorder: true
20757    });
20758  }
20759  render() {
20760    this.container.classList.add("circleAnnotation");
20761    const data = this.data;
20762    const {
20763      width,
20764      height
20765    } = getRectDims(data.rect);
20766    const svg = this.svgFactory.create(width, height, true);
20767    const borderWidth = data.borderStyle.width;
20768    const circle = this.#circle = this.svgFactory.createElement("svg:ellipse");
20769    circle.setAttribute("cx", width / 2);
20770    circle.setAttribute("cy", height / 2);
20771    circle.setAttribute("rx", width / 2 - borderWidth / 2);
20772    circle.setAttribute("ry", height / 2 - borderWidth / 2);
20773    circle.setAttribute("stroke-width", borderWidth || 1);
20774    circle.setAttribute("stroke", "transparent");
20775    circle.setAttribute("fill", "transparent");
20776    svg.append(circle);
20777    this.container.append(svg);
20778    if (!data.popupRef && this.hasPopupData) {
20779      this._createPopup();
20780    }
20781    return this.container;
20782  }
20783  getElementsToTriggerPopup() {
20784    return this.#circle;
20785  }
20786  addHighlightArea() {
20787    this.container.classList.add("highlightArea");
20788  }
20789}
20790class PolylineAnnotationElement extends AnnotationElement {
20791  #polyline = null;
20792  constructor(parameters) {
20793    super(parameters, {
20794      isRenderable: true,
20795      ignoreBorder: true
20796    });
20797    this.containerClassName = "polylineAnnotation";
20798    this.svgElementName = "svg:polyline";
20799  }
20800  render() {
20801    this.container.classList.add(this.containerClassName);
20802    const data = this.data;
20803    const {
20804      width,
20805      height
20806    } = getRectDims(data.rect);
20807    const svg = this.svgFactory.create(width, height, true);
20808    let points = [];
20809    for (const coordinate of data.vertices) {
20810      const x = coordinate.x - data.rect[0];
20811      const y = data.rect[3] - coordinate.y;
20812      points.push(x + "," + y);
20813    }
20814    points = points.join(" ");
20815    const polyline = this.#polyline = this.svgFactory.createElement(this.svgElementName);
20816    polyline.setAttribute("points", points);
20817    polyline.setAttribute("stroke-width", data.borderStyle.width || 1);
20818    polyline.setAttribute("stroke", "transparent");
20819    polyline.setAttribute("fill", "transparent");
20820    svg.append(polyline);
20821    this.container.append(svg);
20822    if (!data.popupRef && this.hasPopupData) {
20823      this._createPopup();
20824    }
20825    return this.container;
20826  }
20827  getElementsToTriggerPopup() {
20828    return this.#polyline;
20829  }
20830  addHighlightArea() {
20831    this.container.classList.add("highlightArea");
20832  }
20833}
20834class PolygonAnnotationElement extends PolylineAnnotationElement {
20835  constructor(parameters) {
20836    super(parameters);
20837    this.containerClassName = "polygonAnnotation";
20838    this.svgElementName = "svg:polygon";
20839  }
20840}
20841class CaretAnnotationElement extends AnnotationElement {
20842  constructor(parameters) {
20843    super(parameters, {
20844      isRenderable: true,
20845      ignoreBorder: true
20846    });
20847  }
20848  render() {
20849    this.container.classList.add("caretAnnotation");
20850    if (!this.data.popupRef && this.hasPopupData) {
20851      this._createPopup();
20852    }
20853    return this.container;
20854  }
20855}
20856class InkAnnotationElement extends AnnotationElement {
20857  #polylines = [];
20858  constructor(parameters) {
20859    super(parameters, {
20860      isRenderable: true,
20861      ignoreBorder: true
20862    });
20863    this.containerClassName = "inkAnnotation";
20864    this.svgElementName = "svg:polyline";
20865    this.annotationEditorType = _util.AnnotationEditorType.INK;
20866  }
20867  render() {
20868    this.container.classList.add(this.containerClassName);
20869    const data = this.data;
20870    const {
20871      width,
20872      height
20873    } = getRectDims(data.rect);
20874    const svg = this.svgFactory.create(width, height, true);
20875    for (const inkList of data.inkLists) {
20876      let points = [];
20877      for (const coordinate of inkList) {
20878        const x = coordinate.x - data.rect[0];
20879        const y = data.rect[3] - coordinate.y;
20880        points.push(`${x},${y}`);
20881      }
20882      points = points.join(" ");
20883      const polyline = this.svgFactory.createElement(this.svgElementName);
20884      this.#polylines.push(polyline);
20885      polyline.setAttribute("points", points);
20886      polyline.setAttribute("stroke-width", data.borderStyle.width || 1);
20887      polyline.setAttribute("stroke", "transparent");
20888      polyline.setAttribute("fill", "transparent");
20889      if (!data.popupRef && this.hasPopupData) {
20890        this._createPopup();
20891      }
20892      svg.append(polyline);
20893    }
20894    this.container.append(svg);
20895    return this.container;
20896  }
20897  getElementsToTriggerPopup() {
20898    return this.#polylines;
20899  }
20900  addHighlightArea() {
20901    this.container.classList.add("highlightArea");
20902  }
20903}
20904exports.InkAnnotationElement = InkAnnotationElement;
20905class HighlightAnnotationElement extends AnnotationElement {
20906  constructor(parameters) {
20907    super(parameters, {
20908      isRenderable: true,
20909      ignoreBorder: true,
20910      createQuadrilaterals: true
20911    });
20912  }
20913  render() {
20914    if (!this.data.popupRef && this.hasPopupData) {
20915      this._createPopup();
20916    }
20917    this.container.classList.add("highlightAnnotation");
20918    return this.container;
20919  }
20920}
20921class UnderlineAnnotationElement extends AnnotationElement {
20922  constructor(parameters) {
20923    super(parameters, {
20924      isRenderable: true,
20925      ignoreBorder: true,
20926      createQuadrilaterals: true
20927    });
20928  }
20929  render() {
20930    if (!this.data.popupRef && this.hasPopupData) {
20931      this._createPopup();
20932    }
20933    this.container.classList.add("underlineAnnotation");
20934    return this.container;
20935  }
20936}
20937class SquigglyAnnotationElement extends AnnotationElement {
20938  constructor(parameters) {
20939    super(parameters, {
20940      isRenderable: true,
20941      ignoreBorder: true,
20942      createQuadrilaterals: true
20943    });
20944  }
20945  render() {
20946    if (!this.data.popupRef && this.hasPopupData) {
20947      this._createPopup();
20948    }
20949    this.container.classList.add("squigglyAnnotation");
20950    return this.container;
20951  }
20952}
20953class StrikeOutAnnotationElement extends AnnotationElement {
20954  constructor(parameters) {
20955    super(parameters, {
20956      isRenderable: true,
20957      ignoreBorder: true,
20958      createQuadrilaterals: true
20959    });
20960  }
20961  render() {
20962    if (!this.data.popupRef && this.hasPopupData) {
20963      this._createPopup();
20964    }
20965    this.container.classList.add("strikeoutAnnotation");
20966    return this.container;
20967  }
20968}
20969class StampAnnotationElement extends AnnotationElement {
20970  constructor(parameters) {
20971    super(parameters, {
20972      isRenderable: true,
20973      ignoreBorder: true
20974    });
20975  }
20976  render() {
20977    this.container.classList.add("stampAnnotation");
20978    if (!this.data.popupRef && this.hasPopupData) {
20979      this._createPopup();
20980    }
20981    return this.container;
20982  }
20983}
20984exports.StampAnnotationElement = StampAnnotationElement;
20985class FileAttachmentAnnotationElement extends AnnotationElement {
20986  #trigger = null;
20987  constructor(parameters) {
20988    super(parameters, {
20989      isRenderable: true
20990    });
20991    const {
20992      filename,
20993      content
20994    } = this.data.file;
20995    this.filename = (0, _display_utils.getFilenameFromUrl)(filename, true);
20996    this.content = content;
20997    this.linkService.eventBus?.dispatch("fileattachmentannotation", {
20998      source: this,
20999      filename,
21000      content
21001    });
21002  }
21003  render() {
21004    this.container.classList.add("fileAttachmentAnnotation");
21005    const {
21006      container,
21007      data
21008    } = this;
21009    let trigger;
21010    if (data.hasAppearance || data.fillAlpha === 0) {
21011      trigger = document.createElement("div");
21012    } else {
21013      trigger = document.createElement("img");
21014      trigger.src = `${this.imageResourcesPath}annotation-${/paperclip/i.test(data.name) ? "paperclip" : "pushpin"}.svg`;
21015      if (data.fillAlpha && data.fillAlpha < 1) {
21016        trigger.style = `filter: opacity(${Math.round(data.fillAlpha * 100)}%);`;
21017      }
21018    }
21019    trigger.addEventListener("dblclick", this.#download.bind(this));
21020    this.#trigger = trigger;
21021    const {
21022      isMac
21023    } = _util.FeatureTest.platform;
21024    container.addEventListener("keydown", evt => {
21025      if (evt.key === "Enter" && (isMac ? evt.metaKey : evt.ctrlKey)) {
21026        this.#download();
21027      }
21028    });
21029    if (!data.popupRef && this.hasPopupData) {
21030      this._createPopup();
21031    } else {
21032      trigger.classList.add("popupTriggerArea");
21033    }
21034    container.append(trigger);
21035    return container;
21036  }
21037  getElementsToTriggerPopup() {
21038    return this.#trigger;
21039  }
21040  addHighlightArea() {
21041    this.container.classList.add("highlightArea");
21042  }
21043  #download() {
21044    this.downloadManager?.openOrDownloadData(this.container, this.content, this.filename);
21045  }
21046}
21047class AnnotationLayer {
21048  #accessibilityManager = null;
21049  #annotationCanvasMap = null;
21050  #editableAnnotations = new Map();
21051  constructor(_ref4) {
21052    let {
21053      div,
21054      accessibilityManager,
21055      annotationCanvasMap,
21056      l10n,
21057      page,
21058      viewport
21059    } = _ref4;
21060    this.div = div;
21061    this.#accessibilityManager = accessibilityManager;
21062    this.#annotationCanvasMap = annotationCanvasMap;
21063    this.l10n = l10n;
21064    this.page = page;
21065    this.viewport = viewport;
21066    this.zIndex = 0;
21067    this.l10n ||= _displayL10n_utils.NullL10n;
21068  }
21069  #appendElement(element, id) {
21070    const contentElement = element.firstChild || element;
21071    contentElement.id = `${_util.AnnotationPrefix}${id}`;
21072    this.div.append(element);
21073    this.#accessibilityManager?.moveElementInDOM(this.div, element, contentElement, false);
21074  }
21075  async render(params) {
21076    const {
21077      annotations
21078    } = params;
21079    const layer = this.div;
21080    (0, _display_utils.setLayerDimensions)(layer, this.viewport);
21081    const popupToElements = new Map();
21082    const elementParams = {
21083      data: null,
21084      layer,
21085      linkService: params.linkService,
21086      downloadManager: params.downloadManager,
21087      imageResourcesPath: params.imageResourcesPath || "",
21088      renderForms: params.renderForms !== false,
21089      svgFactory: new _display_utils.DOMSVGFactory(),
21090      annotationStorage: params.annotationStorage || new _annotation_storage.AnnotationStorage(),
21091      enableScripting: params.enableScripting === true,
21092      hasJSActions: params.hasJSActions,
21093      fieldObjects: params.fieldObjects,
21094      parent: this,
21095      elements: null
21096    };
21097    for (const data of annotations) {
21098      if (data.noHTML) {
21099        continue;
21100      }
21101      const isPopupAnnotation = data.annotationType === _util.AnnotationType.POPUP;
21102      if (!isPopupAnnotation) {
21103        const {
21104          width,
21105          height
21106        } = getRectDims(data.rect);
21107        if (width <= 0 || height <= 0) {
21108          continue;
21109        }
21110      } else {
21111        const elements = popupToElements.get(data.id);
21112        if (!elements) {
21113          continue;
21114        }
21115        elementParams.elements = elements;
21116      }
21117      elementParams.data = data;
21118      const element = AnnotationElementFactory.create(elementParams);
21119      if (!element.isRenderable) {
21120        continue;
21121      }
21122      if (!isPopupAnnotation && data.popupRef) {
21123        const elements = popupToElements.get(data.popupRef);
21124        if (!elements) {
21125          popupToElements.set(data.popupRef, [element]);
21126        } else {
21127          elements.push(element);
21128        }
21129      }
21130      if (element.annotationEditorType > 0) {
21131        this.#editableAnnotations.set(element.data.id, element);
21132      }
21133      const rendered = element.render();
21134      if (data.hidden) {
21135        rendered.style.visibility = "hidden";
21136      }
21137      this.#appendElement(rendered, data.id);
21138    }
21139    this.#setAnnotationCanvasMap();
21140    await this.l10n.translate(layer);
21141  }
21142  update(_ref5) {
21143    let {
21144      viewport
21145    } = _ref5;
21146    const layer = this.div;
21147    this.viewport = viewport;
21148    (0, _display_utils.setLayerDimensions)(layer, {
21149      rotation: viewport.rotation
21150    });
21151    this.#setAnnotationCanvasMap();
21152    layer.hidden = false;
21153  }
21154  #setAnnotationCanvasMap() {
21155    if (!this.#annotationCanvasMap) {
21156      return;
21157    }
21158    const layer = this.div;
21159    for (const [id, canvas] of this.#annotationCanvasMap) {
21160      const element = layer.querySelector(`[data-annotation-id="${id}"]`);
21161      if (!element) {
21162        continue;
21163      }
21164      const {
21165        firstChild
21166      } = element;
21167      if (!firstChild) {
21168        element.append(canvas);
21169      } else if (firstChild.nodeName === "CANVAS") {
21170        firstChild.replaceWith(canvas);
21171      } else {
21172        firstChild.before(canvas);
21173      }
21174    }
21175    this.#annotationCanvasMap.clear();
21176  }
21177  getEditableAnnotations() {
21178    return Array.from(this.#editableAnnotations.values());
21179  }
21180  getEditableAnnotation(id) {
21181    return this.#editableAnnotations.get(id);
21182  }
21183}
21184exports.AnnotationLayer = AnnotationLayer;
21185
21186/***/ }),
21187/* 199 */
21188/***/ ((__unused_webpack_module, exports) => {
21189
21190
21191
21192Object.defineProperty(exports, "__esModule", ({
21193  value: true
21194}));
21195exports.ColorConverters = void 0;
21196function makeColorComp(n) {
21197  return Math.floor(Math.max(0, Math.min(1, n)) * 255).toString(16).padStart(2, "0");
21198}
21199function scaleAndClamp(x) {
21200  return Math.max(0, Math.min(255, 255 * x));
21201}
21202class ColorConverters {
21203  static CMYK_G(_ref) {
21204    let [c, y, m, k] = _ref;
21205    return ["G", 1 - Math.min(1, 0.3 * c + 0.59 * m + 0.11 * y + k)];
21206  }
21207  static G_CMYK(_ref2) {
21208    let [g] = _ref2;
21209    return ["CMYK", 0, 0, 0, 1 - g];
21210  }
21211  static G_RGB(_ref3) {
21212    let [g] = _ref3;
21213    return ["RGB", g, g, g];
21214  }
21215  static G_rgb(_ref4) {
21216    let [g] = _ref4;
21217    g = scaleAndClamp(g);
21218    return [g, g, g];
21219  }
21220  static G_HTML(_ref5) {
21221    let [g] = _ref5;
21222    const G = makeColorComp(g);
21223    return `#${G}${G}${G}`;
21224  }
21225  static RGB_G(_ref6) {
21226    let [r, g, b] = _ref6;
21227    return ["G", 0.3 * r + 0.59 * g + 0.11 * b];
21228  }
21229  static RGB_rgb(color) {
21230    return color.map(scaleAndClamp);
21231  }
21232  static RGB_HTML(color) {
21233    return `#${color.map(makeColorComp).join("")}`;
21234  }
21235  static T_HTML() {
21236    return "#00000000";
21237  }
21238  static T_rgb() {
21239    return [null];
21240  }
21241  static CMYK_RGB(_ref7) {
21242    let [c, y, m, k] = _ref7;
21243    return ["RGB", 1 - Math.min(1, c + k), 1 - Math.min(1, m + k), 1 - Math.min(1, y + k)];
21244  }
21245  static CMYK_rgb(_ref8) {
21246    let [c, y, m, k] = _ref8;
21247    return [scaleAndClamp(1 - Math.min(1, c + k)), scaleAndClamp(1 - Math.min(1, m + k)), scaleAndClamp(1 - Math.min(1, y + k))];
21248  }
21249  static CMYK_HTML(components) {
21250    const rgb = this.CMYK_RGB(components).slice(1);
21251    return this.RGB_HTML(rgb);
21252  }
21253  static RGB_CMYK(_ref9) {
21254    let [r, g, b] = _ref9;
21255    const c = 1 - r;
21256    const m = 1 - g;
21257    const y = 1 - b;
21258    const k = Math.min(c, m, y);
21259    return ["CMYK", c, m, y, k];
21260  }
21261}
21262exports.ColorConverters = ColorConverters;
21263
21264/***/ }),
21265/* 200 */
21266/***/ ((__unused_webpack_module, exports) => {
21267
21268
21269
21270Object.defineProperty(exports, "__esModule", ({
21271  value: true
21272}));
21273exports.NullL10n = void 0;
21274exports.getL10nFallback = getL10nFallback;
21275const DEFAULT_L10N_STRINGS = {
21276  of_pages: "of {{pagesCount}}",
21277  page_of_pages: "({{pageNumber}} of {{pagesCount}})",
21278  document_properties_kb: "{{size_kb}} KB ({{size_b}} bytes)",
21279  document_properties_mb: "{{size_mb}} MB ({{size_b}} bytes)",
21280  document_properties_date_string: "{{date}}, {{time}}",
21281  document_properties_page_size_unit_inches: "in",
21282  document_properties_page_size_unit_millimeters: "mm",
21283  document_properties_page_size_orientation_portrait: "portrait",
21284  document_properties_page_size_orientation_landscape: "landscape",
21285  document_properties_page_size_name_a3: "A3",
21286  document_properties_page_size_name_a4: "A4",
21287  document_properties_page_size_name_letter: "Letter",
21288  document_properties_page_size_name_legal: "Legal",
21289  document_properties_page_size_dimension_string: "{{width}} × {{height}} {{unit}} ({{orientation}})",
21290  document_properties_page_size_dimension_name_string: "{{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})",
21291  document_properties_linearized_yes: "Yes",
21292  document_properties_linearized_no: "No",
21293  additional_layers: "Additional Layers",
21294  page_landmark: "Page {{page}}",
21295  thumb_page_title: "Page {{page}}",
21296  thumb_page_canvas: "Thumbnail of Page {{page}}",
21297  find_reached_top: "Reached top of document, continued from bottom",
21298  find_reached_bottom: "Reached end of document, continued from top",
21299  "find_match_count[one]": "{{current}} of {{total}} match",
21300  "find_match_count[other]": "{{current}} of {{total}} matches",
21301  "find_match_count_limit[one]": "More than {{limit}} match",
21302  "find_match_count_limit[other]": "More than {{limit}} matches",
21303  find_not_found: "Phrase not found",
21304  page_scale_width: "Page Width",
21305  page_scale_fit: "Page Fit",
21306  page_scale_auto: "Automatic Zoom",
21307  page_scale_actual: "Actual Size",
21308  page_scale_percent: "{{scale}}%",
21309  loading_error: "An error occurred while loading the PDF.",
21310  invalid_file_error: "Invalid or corrupted PDF file.",
21311  missing_file_error: "Missing PDF file.",
21312  unexpected_response_error: "Unexpected server response.",
21313  rendering_error: "An error occurred while rendering the page.",
21314  annotation_date_string: "{{date}}, {{time}}",
21315  printing_not_supported: "Warning: Printing is not fully supported by this browser.",
21316  printing_not_ready: "Warning: The PDF is not fully loaded for printing.",
21317  web_fonts_disabled: "Web fonts are disabled: unable to use embedded PDF fonts.",
21318  free_text2_default_content: "Start typing…",
21319  editor_free_text2_aria_label: "Text Editor",
21320  editor_ink2_aria_label: "Draw Editor",
21321  editor_ink_canvas_aria_label: "User-created image",
21322  editor_alt_text_button_label: "Alt text",
21323  editor_alt_text_edit_button_label: "Edit alt text",
21324  editor_alt_text_decorative_tooltip: "Marked as decorative"
21325};
21326{
21327  DEFAULT_L10N_STRINGS.print_progress_percent = "{{progress}}%";
21328}
21329function getL10nFallback(key, args) {
21330  switch (key) {
21331    case "find_match_count":
21332      key = `find_match_count[${args.total === 1 ? "one" : "other"}]`;
21333      break;
21334    case "find_match_count_limit":
21335      key = `find_match_count_limit[${args.limit === 1 ? "one" : "other"}]`;
21336      break;
21337  }
21338  return DEFAULT_L10N_STRINGS[key] || "";
21339}
21340function formatL10nValue(text, args) {
21341  if (!args) {
21342    return text;
21343  }
21344  return text.replaceAll(/\{\{\s*(\w+)\s*\}\}/g, (all, name) => {
21345    return name in args ? args[name] : "{{" + name + "}}";
21346  });
21347}
21348const NullL10n = {
21349  async getLanguage() {
21350    return "en-us";
21351  },
21352  async getDirection() {
21353    return "ltr";
21354  },
21355  async get(key) {
21356    let args = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
21357    let fallback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : getL10nFallback(key, args);
21358    return formatL10nValue(fallback, args);
21359  },
21360  async translate(element) {}
21361};
21362exports.NullL10n = NullL10n;
21363
21364/***/ }),
21365/* 201 */
21366/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
21367
21368
21369
21370Object.defineProperty(exports, "__esModule", ({
21371  value: true
21372}));
21373exports.XfaLayer = void 0;
21374__w_pdfjs_require__(89);
21375var _xfa_text = __w_pdfjs_require__(194);
21376class XfaLayer {
21377  static setupStorage(html, id, element, storage, intent) {
21378    const storedData = storage.getValue(id, {
21379      value: null
21380    });
21381    switch (element.name) {
21382      case "textarea":
21383        if (storedData.value !== null) {
21384          html.textContent = storedData.value;
21385        }
21386        if (intent === "print") {
21387          break;
21388        }
21389        html.addEventListener("input", event => {
21390          storage.setValue(id, {
21391            value: event.target.value
21392          });
21393        });
21394        break;
21395      case "input":
21396        if (element.attributes.type === "radio" || element.attributes.type === "checkbox") {
21397          if (storedData.value === element.attributes.xfaOn) {
21398            html.setAttribute("checked", true);
21399          } else if (storedData.value === element.attributes.xfaOff) {
21400            html.removeAttribute("checked");
21401          }
21402          if (intent === "print") {
21403            break;
21404          }
21405          html.addEventListener("change", event => {
21406            storage.setValue(id, {
21407              value: event.target.checked ? event.target.getAttribute("xfaOn") : event.target.getAttribute("xfaOff")
21408            });
21409          });
21410        } else {
21411          if (storedData.value !== null) {
21412            html.setAttribute("value", storedData.value);
21413          }
21414          if (intent === "print") {
21415            break;
21416          }
21417          html.addEventListener("input", event => {
21418            storage.setValue(id, {
21419              value: event.target.value
21420            });
21421          });
21422        }
21423        break;
21424      case "select":
21425        if (storedData.value !== null) {
21426          html.setAttribute("value", storedData.value);
21427          for (const option of element.children) {
21428            if (option.attributes.value === storedData.value) {
21429              option.attributes.selected = true;
21430            } else if (option.attributes.hasOwnProperty("selected")) {
21431              delete option.attributes.selected;
21432            }
21433          }
21434        }
21435        html.addEventListener("input", event => {
21436          const options = event.target.options;
21437          const value = options.selectedIndex === -1 ? "" : options[options.selectedIndex].value;
21438          storage.setValue(id, {
21439            value
21440          });
21441        });
21442        break;
21443    }
21444  }
21445  static setAttributes(_ref) {
21446    let {
21447      html,
21448      element,
21449      storage = null,
21450      intent,
21451      linkService
21452    } = _ref;
21453    const {
21454      attributes
21455    } = element;
21456    const isHTMLAnchorElement = html instanceof HTMLAnchorElement;
21457    if (attributes.type === "radio") {
21458      attributes.name = `${attributes.name}-${intent}`;
21459    }
21460    for (const [key, value] of Object.entries(attributes)) {
21461      if (value === null || value === undefined) {
21462        continue;
21463      }
21464      switch (key) {
21465        case "class":
21466          if (value.length) {
21467            html.setAttribute(key, value.join(" "));
21468          }
21469          break;
21470        case "dataId":
21471          break;
21472        case "id":
21473          html.setAttribute("data-element-id", value);
21474          break;
21475        case "style":
21476          Object.assign(html.style, value);
21477          break;
21478        case "textContent":
21479          html.textContent = value;
21480          break;
21481        default:
21482          if (!isHTMLAnchorElement || key !== "href" && key !== "newWindow") {
21483            html.setAttribute(key, value);
21484          }
21485      }
21486    }
21487    if (isHTMLAnchorElement) {
21488      linkService.addLinkAttributes(html, attributes.href, attributes.newWindow);
21489    }
21490    if (storage && attributes.dataId) {
21491      this.setupStorage(html, attributes.dataId, element, storage);
21492    }
21493  }
21494  static render(parameters) {
21495    const storage = parameters.annotationStorage;
21496    const linkService = parameters.linkService;
21497    const root = parameters.xfaHtml;
21498    const intent = parameters.intent || "display";
21499    const rootHtml = document.createElement(root.name);
21500    if (root.attributes) {
21501      this.setAttributes({
21502        html: rootHtml,
21503        element: root,
21504        intent,
21505        linkService
21506      });
21507    }
21508    const stack = [[root, -1, rootHtml]];
21509    const rootDiv = parameters.div;
21510    rootDiv.append(rootHtml);
21511    if (parameters.viewport) {
21512      const transform = `matrix(${parameters.viewport.transform.join(",")})`;
21513      rootDiv.style.transform = transform;
21514    }
21515    if (intent !== "richText") {
21516      rootDiv.setAttribute("class", "xfaLayer xfaFont");
21517    }
21518    const textDivs = [];
21519    while (stack.length > 0) {
21520      const [parent, i, html] = stack.at(-1);
21521      if (i + 1 === parent.children.length) {
21522        stack.pop();
21523        continue;
21524      }
21525      const child = parent.children[++stack.at(-1)[1]];
21526      if (child === null) {
21527        continue;
21528      }
21529      const {
21530        name
21531      } = child;
21532      if (name === "#text") {
21533        const node = document.createTextNode(child.value);
21534        textDivs.push(node);
21535        html.append(node);
21536        continue;
21537      }
21538      const childHtml = child?.attributes?.xmlns ? document.createElementNS(child.attributes.xmlns, name) : document.createElement(name);
21539      html.append(childHtml);
21540      if (child.attributes) {
21541        this.setAttributes({
21542          html: childHtml,
21543          element: child,
21544          storage,
21545          intent,
21546          linkService
21547        });
21548      }
21549      if (child.children && child.children.length > 0) {
21550        stack.push([child, -1, childHtml]);
21551      } else if (child.value) {
21552        const node = document.createTextNode(child.value);
21553        if (_xfa_text.XfaText.shouldBuildText(name)) {
21554          textDivs.push(node);
21555        }
21556        childHtml.append(node);
21557      }
21558    }
21559    for (const el of rootDiv.querySelectorAll(".xfaNonInteractive input, .xfaNonInteractive textarea")) {
21560      el.setAttribute("readOnly", true);
21561    }
21562    return {
21563      textDivs
21564    };
21565  }
21566  static update(parameters) {
21567    const transform = `matrix(${parameters.viewport.transform.join(",")})`;
21568    parameters.div.style.transform = transform;
21569    parameters.div.hidden = false;
21570  }
21571}
21572exports.XfaLayer = XfaLayer;
21573
21574/***/ }),
21575/* 202 */
21576/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
21577
21578
21579
21580Object.defineProperty(exports, "__esModule", ({
21581  value: true
21582}));
21583exports.InkEditor = void 0;
21584__w_pdfjs_require__(89);
21585__w_pdfjs_require__(2);
21586var _util = __w_pdfjs_require__(1);
21587var _editor = __w_pdfjs_require__(164);
21588var _annotation_layer = __w_pdfjs_require__(198);
21589var _display_utils = __w_pdfjs_require__(168);
21590var _tools = __w_pdfjs_require__(165);
21591class InkEditor extends _editor.AnnotationEditor {
21592  #baseHeight = 0;
21593  #baseWidth = 0;
21594  #boundCanvasPointermove = this.canvasPointermove.bind(this);
21595  #boundCanvasPointerleave = this.canvasPointerleave.bind(this);
21596  #boundCanvasPointerup = this.canvasPointerup.bind(this);
21597  #boundCanvasPointerdown = this.canvasPointerdown.bind(this);
21598  #currentPath2D = new Path2D();
21599  #disableEditing = false;
21600  #hasSomethingToDraw = false;
21601  #isCanvasInitialized = false;
21602  #observer = null;
21603  #realWidth = 0;
21604  #realHeight = 0;
21605  #requestFrameCallback = null;
21606  static _defaultColor = null;
21607  static _defaultOpacity = 1;
21608  static _defaultThickness = 1;
21609  static _type = "ink";
21610  constructor(params) {
21611    super({
21612      ...params,
21613      name: "inkEditor"
21614    });
21615    this.color = params.color || null;
21616    this.thickness = params.thickness || null;
21617    this.opacity = params.opacity || null;
21618    this.paths = [];
21619    this.bezierPath2D = [];
21620    this.allRawPaths = [];
21621    this.currentPath = [];
21622    this.scaleFactor = 1;
21623    this.translationX = this.translationY = 0;
21624    this.x = 0;
21625    this.y = 0;
21626    this._willKeepAspectRatio = true;
21627  }
21628  static initialize(l10n) {
21629    _editor.AnnotationEditor.initialize(l10n, {
21630      strings: ["editor_ink_canvas_aria_label", "editor_ink2_aria_label"]
21631    });
21632  }
21633  static updateDefaultParams(type, value) {
21634    switch (type) {
21635      case _util.AnnotationEditorParamsType.INK_THICKNESS:
21636        InkEditor._defaultThickness = value;
21637        break;
21638      case _util.AnnotationEditorParamsType.INK_COLOR:
21639        InkEditor._defaultColor = value;
21640        break;
21641      case _util.AnnotationEditorParamsType.INK_OPACITY:
21642        InkEditor._defaultOpacity = value / 100;
21643        break;
21644    }
21645  }
21646  updateParams(type, value) {
21647    switch (type) {
21648      case _util.AnnotationEditorParamsType.INK_THICKNESS:
21649        this.#updateThickness(value);
21650        break;
21651      case _util.AnnotationEditorParamsType.INK_COLOR:
21652        this.#updateColor(value);
21653        break;
21654      case _util.AnnotationEditorParamsType.INK_OPACITY:
21655        this.#updateOpacity(value);
21656        break;
21657    }
21658  }
21659  static get defaultPropertiesToUpdate() {
21660    return [[_util.AnnotationEditorParamsType.INK_THICKNESS, InkEditor._defaultThickness], [_util.AnnotationEditorParamsType.INK_COLOR, InkEditor._defaultColor || _editor.AnnotationEditor._defaultLineColor], [_util.AnnotationEditorParamsType.INK_OPACITY, Math.round(InkEditor._defaultOpacity * 100)]];
21661  }
21662  get propertiesToUpdate() {
21663    return [[_util.AnnotationEditorParamsType.INK_THICKNESS, this.thickness || InkEditor._defaultThickness], [_util.AnnotationEditorParamsType.INK_COLOR, this.color || InkEditor._defaultColor || _editor.AnnotationEditor._defaultLineColor], [_util.AnnotationEditorParamsType.INK_OPACITY, Math.round(100 * (this.opacity ?? InkEditor._defaultOpacity))]];
21664  }
21665  #updateThickness(thickness) {
21666    const savedThickness = this.thickness;
21667    this.addCommands({
21668      cmd: () => {
21669        this.thickness = thickness;
21670        this.#fitToContent();
21671      },
21672      undo: () => {
21673        this.thickness = savedThickness;
21674        this.#fitToContent();
21675      },
21676      mustExec: true,
21677      type: _util.AnnotationEditorParamsType.INK_THICKNESS,
21678      overwriteIfSameType: true,
21679      keepUndo: true
21680    });
21681  }
21682  #updateColor(color) {
21683    const savedColor = this.color;
21684    this.addCommands({
21685      cmd: () => {
21686        this.color = color;
21687        this.#redraw();
21688      },
21689      undo: () => {
21690        this.color = savedColor;
21691        this.#redraw();
21692      },
21693      mustExec: true,
21694      type: _util.AnnotationEditorParamsType.INK_COLOR,
21695      overwriteIfSameType: true,
21696      keepUndo: true
21697    });
21698  }
21699  #updateOpacity(opacity) {
21700    opacity /= 100;
21701    const savedOpacity = this.opacity;
21702    this.addCommands({
21703      cmd: () => {
21704        this.opacity = opacity;
21705        this.#redraw();
21706      },
21707      undo: () => {
21708        this.opacity = savedOpacity;
21709        this.#redraw();
21710      },
21711      mustExec: true,
21712      type: _util.AnnotationEditorParamsType.INK_OPACITY,
21713      overwriteIfSameType: true,
21714      keepUndo: true
21715    });
21716  }
21717  rebuild() {
21718    if (!this.parent) {
21719      return;
21720    }
21721    super.rebuild();
21722    if (this.div === null) {
21723      return;
21724    }
21725    if (!this.canvas) {
21726      this.#createCanvas();
21727      this.#createObserver();
21728    }
21729    if (!this.isAttachedToDOM) {
21730      this.parent.add(this);
21731      this.#setCanvasDims();
21732    }
21733    this.#fitToContent();
21734  }
21735  remove() {
21736    if (this.canvas === null) {
21737      return;
21738    }
21739    if (!this.isEmpty()) {
21740      this.commit();
21741    }
21742    this.canvas.width = this.canvas.height = 0;
21743    this.canvas.remove();
21744    this.canvas = null;
21745    this.#observer.disconnect();
21746    this.#observer = null;
21747    super.remove();
21748  }
21749  setParent(parent) {
21750    if (!this.parent && parent) {
21751      this._uiManager.removeShouldRescale(this);
21752    } else if (this.parent && parent === null) {
21753      this._uiManager.addShouldRescale(this);
21754    }
21755    super.setParent(parent);
21756  }
21757  onScaleChanging() {
21758    const [parentWidth, parentHeight] = this.parentDimensions;
21759    const width = this.width * parentWidth;
21760    const height = this.height * parentHeight;
21761    this.setDimensions(width, height);
21762  }
21763  enableEditMode() {
21764    if (this.#disableEditing || this.canvas === null) {
21765      return;
21766    }
21767    super.enableEditMode();
21768    this._isDraggable = false;
21769    this.canvas.addEventListener("pointerdown", this.#boundCanvasPointerdown);
21770  }
21771  disableEditMode() {
21772    if (!this.isInEditMode() || this.canvas === null) {
21773      return;
21774    }
21775    super.disableEditMode();
21776    this._isDraggable = !this.isEmpty();
21777    this.div.classList.remove("editing");
21778    this.canvas.removeEventListener("pointerdown", this.#boundCanvasPointerdown);
21779  }
21780  onceAdded() {
21781    this._isDraggable = !this.isEmpty();
21782  }
21783  isEmpty() {
21784    return this.paths.length === 0 || this.paths.length === 1 && this.paths[0].length === 0;
21785  }
21786  #getInitialBBox() {
21787    const {
21788      parentRotation,
21789      parentDimensions: [width, height]
21790    } = this;
21791    switch (parentRotation) {
21792      case 90:
21793        return [0, height, height, width];
21794      case 180:
21795        return [width, height, width, height];
21796      case 270:
21797        return [width, 0, height, width];
21798      default:
21799        return [0, 0, width, height];
21800    }
21801  }
21802  #setStroke() {
21803    const {
21804      ctx,
21805      color,
21806      opacity,
21807      thickness,
21808      parentScale,
21809      scaleFactor
21810    } = this;
21811    ctx.lineWidth = thickness * parentScale / scaleFactor;
21812    ctx.lineCap = "round";
21813    ctx.lineJoin = "round";
21814    ctx.miterLimit = 10;
21815    ctx.strokeStyle = `${color}${(0, _tools.opacityToHex)(opacity)}`;
21816  }
21817  #startDrawing(x, y) {
21818    this.canvas.addEventListener("contextmenu", _display_utils.noContextMenu);
21819    this.canvas.addEventListener("pointerleave", this.#boundCanvasPointerleave);
21820    this.canvas.addEventListener("pointermove", this.#boundCanvasPointermove);
21821    this.canvas.addEventListener("pointerup", this.#boundCanvasPointerup);
21822    this.canvas.removeEventListener("pointerdown", this.#boundCanvasPointerdown);
21823    this.isEditing = true;
21824    if (!this.#isCanvasInitialized) {
21825      this.#isCanvasInitialized = true;
21826      this.#setCanvasDims();
21827      this.thickness ||= InkEditor._defaultThickness;
21828      this.color ||= InkEditor._defaultColor || _editor.AnnotationEditor._defaultLineColor;
21829      this.opacity ??= InkEditor._defaultOpacity;
21830    }
21831    this.currentPath.push([x, y]);
21832    this.#hasSomethingToDraw = false;
21833    this.#setStroke();
21834    this.#requestFrameCallback = () => {
21835      this.#drawPoints();
21836      if (this.#requestFrameCallback) {
21837        window.requestAnimationFrame(this.#requestFrameCallback);
21838      }
21839    };
21840    window.requestAnimationFrame(this.#requestFrameCallback);
21841  }
21842  #draw(x, y) {
21843    const [lastX, lastY] = this.currentPath.at(-1);
21844    if (this.currentPath.length > 1 && x === lastX && y === lastY) {
21845      return;
21846    }
21847    const currentPath = this.currentPath;
21848    let path2D = this.#currentPath2D;
21849    currentPath.push([x, y]);
21850    this.#hasSomethingToDraw = true;
21851    if (currentPath.length <= 2) {
21852      path2D.moveTo(...currentPath[0]);
21853      path2D.lineTo(x, y);
21854      return;
21855    }
21856    if (currentPath.length === 3) {
21857      this.#currentPath2D = path2D = new Path2D();
21858      path2D.moveTo(...currentPath[0]);
21859    }
21860    this.#makeBezierCurve(path2D, ...currentPath.at(-3), ...currentPath.at(-2), x, y);
21861  }
21862  #endPath() {
21863    if (this.currentPath.length === 0) {
21864      return;
21865    }
21866    const lastPoint = this.currentPath.at(-1);
21867    this.#currentPath2D.lineTo(...lastPoint);
21868  }
21869  #stopDrawing(x, y) {
21870    this.#requestFrameCallback = null;
21871    x = Math.min(Math.max(x, 0), this.canvas.width);
21872    y = Math.min(Math.max(y, 0), this.canvas.height);
21873    this.#draw(x, y);
21874    this.#endPath();
21875    let bezier;
21876    if (this.currentPath.length !== 1) {
21877      bezier = this.#generateBezierPoints();
21878    } else {
21879      const xy = [x, y];
21880      bezier = [[xy, xy.slice(), xy.slice(), xy]];
21881    }
21882    const path2D = this.#currentPath2D;
21883    const currentPath = this.currentPath;
21884    this.currentPath = [];
21885    this.#currentPath2D = new Path2D();
21886    const cmd = () => {
21887      this.allRawPaths.push(currentPath);
21888      this.paths.push(bezier);
21889      this.bezierPath2D.push(path2D);
21890      this.rebuild();
21891    };
21892    const undo = () => {
21893      this.allRawPaths.pop();
21894      this.paths.pop();
21895      this.bezierPath2D.pop();
21896      if (this.paths.length === 0) {
21897        this.remove();
21898      } else {
21899        if (!this.canvas) {
21900          this.#createCanvas();
21901          this.#createObserver();
21902        }
21903        this.#fitToContent();
21904      }
21905    };
21906    this.addCommands({
21907      cmd,
21908      undo,
21909      mustExec: true
21910    });
21911  }
21912  #drawPoints() {
21913    if (!this.#hasSomethingToDraw) {
21914      return;
21915    }
21916    this.#hasSomethingToDraw = false;
21917    const thickness = Math.ceil(this.thickness * this.parentScale);
21918    const lastPoints = this.currentPath.slice(-3);
21919    const x = lastPoints.map(xy => xy[0]);
21920    const y = lastPoints.map(xy => xy[1]);
21921    const xMin = Math.min(...x) - thickness;
21922    const xMax = Math.max(...x) + thickness;
21923    const yMin = Math.min(...y) - thickness;
21924    const yMax = Math.max(...y) + thickness;
21925    const {
21926      ctx
21927    } = this;
21928    ctx.save();
21929    ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);
21930    for (const path of this.bezierPath2D) {
21931      ctx.stroke(path);
21932    }
21933    ctx.stroke(this.#currentPath2D);
21934    ctx.restore();
21935  }
21936  #makeBezierCurve(path2D, x0, y0, x1, y1, x2, y2) {
21937    const prevX = (x0 + x1) / 2;
21938    const prevY = (y0 + y1) / 2;
21939    const x3 = (x1 + x2) / 2;
21940    const y3 = (y1 + y2) / 2;
21941    path2D.bezierCurveTo(prevX + 2 * (x1 - prevX) / 3, prevY + 2 * (y1 - prevY) / 3, x3 + 2 * (x1 - x3) / 3, y3 + 2 * (y1 - y3) / 3, x3, y3);
21942  }
21943  #generateBezierPoints() {
21944    const path = this.currentPath;
21945    if (path.length <= 2) {
21946      return [[path[0], path[0], path.at(-1), path.at(-1)]];
21947    }
21948    const bezierPoints = [];
21949    let i;
21950    let [x0, y0] = path[0];
21951    for (i = 1; i < path.length - 2; i++) {
21952      const [x1, y1] = path[i];
21953      const [x2, y2] = path[i + 1];
21954      const x3 = (x1 + x2) / 2;
21955      const y3 = (y1 + y2) / 2;
21956      const control1 = [x0 + 2 * (x1 - x0) / 3, y0 + 2 * (y1 - y0) / 3];
21957      const control2 = [x3 + 2 * (x1 - x3) / 3, y3 + 2 * (y1 - y3) / 3];
21958      bezierPoints.push([[x0, y0], control1, control2, [x3, y3]]);
21959      [x0, y0] = [x3, y3];
21960    }
21961    const [x1, y1] = path[i];
21962    const [x2, y2] = path[i + 1];
21963    const control1 = [x0 + 2 * (x1 - x0) / 3, y0 + 2 * (y1 - y0) / 3];
21964    const control2 = [x2 + 2 * (x1 - x2) / 3, y2 + 2 * (y1 - y2) / 3];
21965    bezierPoints.push([[x0, y0], control1, control2, [x2, y2]]);
21966    return bezierPoints;
21967  }
21968  #redraw() {
21969    if (this.isEmpty()) {
21970      this.#updateTransform();
21971      return;
21972    }
21973    this.#setStroke();
21974    const {
21975      canvas,
21976      ctx
21977    } = this;
21978    ctx.setTransform(1, 0, 0, 1, 0, 0);
21979    ctx.clearRect(0, 0, canvas.width, canvas.height);
21980    this.#updateTransform();
21981    for (const path of this.bezierPath2D) {
21982      ctx.stroke(path);
21983    }
21984  }
21985  commit() {
21986    if (this.#disableEditing) {
21987      return;
21988    }
21989    super.commit();
21990    this.isEditing = false;
21991    this.disableEditMode();
21992    this.setInForeground();
21993    this.#disableEditing = true;
21994    this.div.classList.add("disabled");
21995    this.#fitToContent(true);
21996    this.makeResizable();
21997    this.parent.addInkEditorIfNeeded(true);
21998    this.moveInDOM();
21999    this.div.focus({
22000      preventScroll: true
22001    });
22002  }
22003  focusin(event) {
22004    if (!this._focusEventsAllowed) {
22005      return;
22006    }
22007    super.focusin(event);
22008    this.enableEditMode();
22009  }
22010  canvasPointerdown(event) {
22011    if (event.button !== 0 || !this.isInEditMode() || this.#disableEditing) {
22012      return;
22013    }
22014    this.setInForeground();
22015    event.preventDefault();
22016    if (event.type !== "mouse") {
22017      this.div.focus();
22018    }
22019    this.#startDrawing(event.offsetX, event.offsetY);
22020  }
22021  canvasPointermove(event) {
22022    event.preventDefault();
22023    this.#draw(event.offsetX, event.offsetY);
22024  }
22025  canvasPointerup(event) {
22026    event.preventDefault();
22027    this.#endDrawing(event);
22028  }
22029  canvasPointerleave(event) {
22030    this.#endDrawing(event);
22031  }
22032  #endDrawing(event) {
22033    this.canvas.removeEventListener("pointerleave", this.#boundCanvasPointerleave);
22034    this.canvas.removeEventListener("pointermove", this.#boundCanvasPointermove);
22035    this.canvas.removeEventListener("pointerup", this.#boundCanvasPointerup);
22036    this.canvas.addEventListener("pointerdown", this.#boundCanvasPointerdown);
22037    setTimeout(() => {
22038      this.canvas.removeEventListener("contextmenu", _display_utils.noContextMenu);
22039    }, 10);
22040    this.#stopDrawing(event.offsetX, event.offsetY);
22041    this.addToAnnotationStorage();
22042    this.setInBackground();
22043  }
22044  #createCanvas() {
22045    this.canvas = document.createElement("canvas");
22046    this.canvas.width = this.canvas.height = 0;
22047    this.canvas.className = "inkEditorCanvas";
22048    _editor.AnnotationEditor._l10nPromise.get("editor_ink_canvas_aria_label").then(msg => this.canvas?.setAttribute("aria-label", msg));
22049    this.div.append(this.canvas);
22050    this.ctx = this.canvas.getContext("2d");
22051  }
22052  #createObserver() {
22053    this.#observer = new ResizeObserver(entries => {
22054      const rect = entries[0].contentRect;
22055      if (rect.width && rect.height) {
22056        this.setDimensions(rect.width, rect.height);
22057      }
22058    });
22059    this.#observer.observe(this.div);
22060  }
22061  get isResizable() {
22062    return !this.isEmpty() && this.#disableEditing;
22063  }
22064  render() {
22065    if (this.div) {
22066      return this.div;
22067    }
22068    let baseX, baseY;
22069    if (this.width) {
22070      baseX = this.x;
22071      baseY = this.y;
22072    }
22073    super.render();
22074    _editor.AnnotationEditor._l10nPromise.get("editor_ink2_aria_label").then(msg => this.div?.setAttribute("aria-label", msg));
22075    const [x, y, w, h] = this.#getInitialBBox();
22076    this.setAt(x, y, 0, 0);
22077    this.setDims(w, h);
22078    this.#createCanvas();
22079    if (this.width) {
22080      const [parentWidth, parentHeight] = this.parentDimensions;
22081      this.setAspectRatio(this.width * parentWidth, this.height * parentHeight);
22082      this.setAt(baseX * parentWidth, baseY * parentHeight, this.width * parentWidth, this.height * parentHeight);
22083      this.#isCanvasInitialized = true;
22084      this.#setCanvasDims();
22085      this.setDims(this.width * parentWidth, this.height * parentHeight);
22086      this.#redraw();
22087      this.div.classList.add("disabled");
22088    } else {
22089      this.div.classList.add("editing");
22090      this.enableEditMode();
22091    }
22092    this.#createObserver();
22093    return this.div;
22094  }
22095  #setCanvasDims() {
22096    if (!this.#isCanvasInitialized) {
22097      return;
22098    }
22099    const [parentWidth, parentHeight] = this.parentDimensions;
22100    this.canvas.width = Math.ceil(this.width * parentWidth);
22101    this.canvas.height = Math.ceil(this.height * parentHeight);
22102    this.#updateTransform();
22103  }
22104  setDimensions(width, height) {
22105    const roundedWidth = Math.round(width);
22106    const roundedHeight = Math.round(height);
22107    if (this.#realWidth === roundedWidth && this.#realHeight === roundedHeight) {
22108      return;
22109    }
22110    this.#realWidth = roundedWidth;
22111    this.#realHeight = roundedHeight;
22112    this.canvas.style.visibility = "hidden";
22113    const [parentWidth, parentHeight] = this.parentDimensions;
22114    this.width = width / parentWidth;
22115    this.height = height / parentHeight;
22116    this.fixAndSetPosition();
22117    if (this.#disableEditing) {
22118      this.#setScaleFactor(width, height);
22119    }
22120    this.#setCanvasDims();
22121    this.#redraw();
22122    this.canvas.style.visibility = "visible";
22123    this.fixDims();
22124  }
22125  #setScaleFactor(width, height) {
22126    const padding = this.#getPadding();
22127    const scaleFactorW = (width - padding) / this.#baseWidth;
22128    const scaleFactorH = (height - padding) / this.#baseHeight;
22129    this.scaleFactor = Math.min(scaleFactorW, scaleFactorH);
22130  }
22131  #updateTransform() {
22132    const padding = this.#getPadding() / 2;
22133    this.ctx.setTransform(this.scaleFactor, 0, 0, this.scaleFactor, this.translationX * this.scaleFactor + padding, this.translationY * this.scaleFactor + padding);
22134  }
22135  static #buildPath2D(bezier) {
22136    const path2D = new Path2D();
22137    for (let i = 0, ii = bezier.length; i < ii; i++) {
22138      const [first, control1, control2, second] = bezier[i];
22139      if (i === 0) {
22140        path2D.moveTo(...first);
22141      }
22142      path2D.bezierCurveTo(control1[0], control1[1], control2[0], control2[1], second[0], second[1]);
22143    }
22144    return path2D;
22145  }
22146  static #toPDFCoordinates(points, rect, rotation) {
22147    const [blX, blY, trX, trY] = rect;
22148    switch (rotation) {
22149      case 0:
22150        for (let i = 0, ii = points.length; i < ii; i += 2) {
22151          points[i] += blX;
22152          points[i + 1] = trY - points[i + 1];
22153        }
22154        break;
22155      case 90:
22156        for (let i = 0, ii = points.length; i < ii; i += 2) {
22157          const x = points[i];
22158          points[i] = points[i + 1] + blX;
22159          points[i + 1] = x + blY;
22160        }
22161        break;
22162      case 180:
22163        for (let i = 0, ii = points.length; i < ii; i += 2) {
22164          points[i] = trX - points[i];
22165          points[i + 1] += blY;
22166        }
22167        break;
22168      case 270:
22169        for (let i = 0, ii = points.length; i < ii; i += 2) {
22170          const x = points[i];
22171          points[i] = trX - points[i + 1];
22172          points[i + 1] = trY - x;
22173        }
22174        break;
22175      default:
22176        throw new Error("Invalid rotation");
22177    }
22178    return points;
22179  }
22180  static #fromPDFCoordinates(points, rect, rotation) {
22181    const [blX, blY, trX, trY] = rect;
22182    switch (rotation) {
22183      case 0:
22184        for (let i = 0, ii = points.length; i < ii; i += 2) {
22185          points[i] -= blX;
22186          points[i + 1] = trY - points[i + 1];
22187        }
22188        break;
22189      case 90:
22190        for (let i = 0, ii = points.length; i < ii; i += 2) {
22191          const x = points[i];
22192          points[i] = points[i + 1] - blY;
22193          points[i + 1] = x - blX;
22194        }
22195        break;
22196      case 180:
22197        for (let i = 0, ii = points.length; i < ii; i += 2) {
22198          points[i] = trX - points[i];
22199          points[i + 1] -= blY;
22200        }
22201        break;
22202      case 270:
22203        for (let i = 0, ii = points.length; i < ii; i += 2) {
22204          const x = points[i];
22205          points[i] = trY - points[i + 1];
22206          points[i + 1] = trX - x;
22207        }
22208        break;
22209      default:
22210        throw new Error("Invalid rotation");
22211    }
22212    return points;
22213  }
22214  #serializePaths(s, tx, ty, rect) {
22215    const paths = [];
22216    const padding = this.thickness / 2;
22217    const shiftX = s * tx + padding;
22218    const shiftY = s * ty + padding;
22219    for (const bezier of this.paths) {
22220      const buffer = [];
22221      const points = [];
22222      for (let j = 0, jj = bezier.length; j < jj; j++) {
22223        const [first, control1, control2, second] = bezier[j];
22224        const p10 = s * first[0] + shiftX;
22225        const p11 = s * first[1] + shiftY;
22226        const p20 = s * control1[0] + shiftX;
22227        const p21 = s * control1[1] + shiftY;
22228        const p30 = s * control2[0] + shiftX;
22229        const p31 = s * control2[1] + shiftY;
22230        const p40 = s * second[0] + shiftX;
22231        const p41 = s * second[1] + shiftY;
22232        if (j === 0) {
22233          buffer.push(p10, p11);
22234          points.push(p10, p11);
22235        }
22236        buffer.push(p20, p21, p30, p31, p40, p41);
22237        points.push(p20, p21);
22238        if (j === jj - 1) {
22239          points.push(p40, p41);
22240        }
22241      }
22242      paths.push({
22243        bezier: InkEditor.#toPDFCoordinates(buffer, rect, this.rotation),
22244        points: InkEditor.#toPDFCoordinates(points, rect, this.rotation)
22245      });
22246    }
22247    return paths;
22248  }
22249  #getBbox() {
22250    let xMin = Infinity;
22251    let xMax = -Infinity;
22252    let yMin = Infinity;
22253    let yMax = -Infinity;
22254    for (const path of this.paths) {
22255      for (const [first, control1, control2, second] of path) {
22256        const bbox = _util.Util.bezierBoundingBox(...first, ...control1, ...control2, ...second);
22257        xMin = Math.min(xMin, bbox[0]);
22258        yMin = Math.min(yMin, bbox[1]);
22259        xMax = Math.max(xMax, bbox[2]);
22260        yMax = Math.max(yMax, bbox[3]);
22261      }
22262    }
22263    return [xMin, yMin, xMax, yMax];
22264  }
22265  #getPadding() {
22266    return this.#disableEditing ? Math.ceil(this.thickness * this.parentScale) : 0;
22267  }
22268  #fitToContent() {
22269    let firstTime = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
22270    if (this.isEmpty()) {
22271      return;
22272    }
22273    if (!this.#disableEditing) {
22274      this.#redraw();
22275      return;
22276    }
22277    const bbox = this.#getBbox();
22278    const padding = this.#getPadding();
22279    this.#baseWidth = Math.max(_editor.AnnotationEditor.MIN_SIZE, bbox[2] - bbox[0]);
22280    this.#baseHeight = Math.max(_editor.AnnotationEditor.MIN_SIZE, bbox[3] - bbox[1]);
22281    const width = Math.ceil(padding + this.#baseWidth * this.scaleFactor);
22282    const height = Math.ceil(padding + this.#baseHeight * this.scaleFactor);
22283    const [parentWidth, parentHeight] = this.parentDimensions;
22284    this.width = width / parentWidth;
22285    this.height = height / parentHeight;
22286    this.setAspectRatio(width, height);
22287    const prevTranslationX = this.translationX;
22288    const prevTranslationY = this.translationY;
22289    this.translationX = -bbox[0];
22290    this.translationY = -bbox[1];
22291    this.#setCanvasDims();
22292    this.#redraw();
22293    this.#realWidth = width;
22294    this.#realHeight = height;
22295    this.setDims(width, height);
22296    const unscaledPadding = firstTime ? padding / this.scaleFactor / 2 : 0;
22297    this.translate(prevTranslationX - this.translationX - unscaledPadding, prevTranslationY - this.translationY - unscaledPadding);
22298  }
22299  static deserialize(data, parent, uiManager) {
22300    if (data instanceof _annotation_layer.InkAnnotationElement) {
22301      return null;
22302    }
22303    const editor = super.deserialize(data, parent, uiManager);
22304    editor.thickness = data.thickness;
22305    editor.color = _util.Util.makeHexColor(...data.color);
22306    editor.opacity = data.opacity;
22307    const [pageWidth, pageHeight] = editor.pageDimensions;
22308    const width = editor.width * pageWidth;
22309    const height = editor.height * pageHeight;
22310    const scaleFactor = editor.parentScale;
22311    const padding = data.thickness / 2;
22312    editor.#disableEditing = true;
22313    editor.#realWidth = Math.round(width);
22314    editor.#realHeight = Math.round(height);
22315    const {
22316      paths,
22317      rect,
22318      rotation
22319    } = data;
22320    for (let {
22321      bezier
22322    } of paths) {
22323      bezier = InkEditor.#fromPDFCoordinates(bezier, rect, rotation);
22324      const path = [];
22325      editor.paths.push(path);
22326      let p0 = scaleFactor * (bezier[0] - padding);
22327      let p1 = scaleFactor * (bezier[1] - padding);
22328      for (let i = 2, ii = bezier.length; i < ii; i += 6) {
22329        const p10 = scaleFactor * (bezier[i] - padding);
22330        const p11 = scaleFactor * (bezier[i + 1] - padding);
22331        const p20 = scaleFactor * (bezier[i + 2] - padding);
22332        const p21 = scaleFactor * (bezier[i + 3] - padding);
22333        const p30 = scaleFactor * (bezier[i + 4] - padding);
22334        const p31 = scaleFactor * (bezier[i + 5] - padding);
22335        path.push([[p0, p1], [p10, p11], [p20, p21], [p30, p31]]);
22336        p0 = p30;
22337        p1 = p31;
22338      }
22339      const path2D = this.#buildPath2D(path);
22340      editor.bezierPath2D.push(path2D);
22341    }
22342    const bbox = editor.#getBbox();
22343    editor.#baseWidth = Math.max(_editor.AnnotationEditor.MIN_SIZE, bbox[2] - bbox[0]);
22344    editor.#baseHeight = Math.max(_editor.AnnotationEditor.MIN_SIZE, bbox[3] - bbox[1]);
22345    editor.#setScaleFactor(width, height);
22346    return editor;
22347  }
22348  serialize() {
22349    if (this.isEmpty()) {
22350      return null;
22351    }
22352    const rect = this.getRect(0, 0);
22353    const color = _editor.AnnotationEditor._colorManager.convert(this.ctx.strokeStyle);
22354    return {
22355      annotationType: _util.AnnotationEditorType.INK,
22356      color,
22357      thickness: this.thickness,
22358      opacity: this.opacity,
22359      paths: this.#serializePaths(this.scaleFactor / this.parentScale, this.translationX, this.translationY, rect),
22360      pageIndex: this.pageIndex,
22361      rect,
22362      rotation: this.rotation,
22363      structTreeParentId: this._structTreeParentId
22364    };
22365  }
22366}
22367exports.InkEditor = InkEditor;
22368
22369/***/ }),
22370/* 203 */
22371/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
22372
22373
22374
22375Object.defineProperty(exports, "__esModule", ({
22376  value: true
22377}));
22378exports.StampEditor = void 0;
22379__w_pdfjs_require__(149);
22380__w_pdfjs_require__(152);
22381var _util = __w_pdfjs_require__(1);
22382var _editor = __w_pdfjs_require__(164);
22383var _display_utils = __w_pdfjs_require__(168);
22384var _annotation_layer = __w_pdfjs_require__(198);
22385class StampEditor extends _editor.AnnotationEditor {
22386  #bitmap = null;
22387  #bitmapId = null;
22388  #bitmapPromise = null;
22389  #bitmapUrl = null;
22390  #bitmapFile = null;
22391  #canvas = null;
22392  #observer = null;
22393  #resizeTimeoutId = null;
22394  #isSvg = false;
22395  #hasBeenAddedInUndoStack = false;
22396  static _type = "stamp";
22397  constructor(params) {
22398    super({
22399      ...params,
22400      name: "stampEditor"
22401    });
22402    this.#bitmapUrl = params.bitmapUrl;
22403    this.#bitmapFile = params.bitmapFile;
22404  }
22405  static initialize(l10n) {
22406    _editor.AnnotationEditor.initialize(l10n);
22407  }
22408  static get supportedTypes() {
22409    const types = ["apng", "avif", "bmp", "gif", "jpeg", "png", "svg+xml", "webp", "x-icon"];
22410    return (0, _util.shadow)(this, "supportedTypes", types.map(type => `image/${type}`));
22411  }
22412  static get supportedTypesStr() {
22413    return (0, _util.shadow)(this, "supportedTypesStr", this.supportedTypes.join(","));
22414  }
22415  static isHandlingMimeForPasting(mime) {
22416    return this.supportedTypes.includes(mime);
22417  }
22418  static paste(item, parent) {
22419    parent.pasteEditor(_util.AnnotationEditorType.STAMP, {
22420      bitmapFile: item.getAsFile()
22421    });
22422  }
22423  #getBitmapFetched(data) {
22424    let fromId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
22425    if (!data) {
22426      this.remove();
22427      return;
22428    }
22429    this.#bitmap = data.bitmap;
22430    if (!fromId) {
22431      this.#bitmapId = data.id;
22432      this.#isSvg = data.isSvg;
22433    }
22434    this.#createCanvas();
22435  }
22436  #getBitmapDone() {
22437    this.#bitmapPromise = null;
22438    this._uiManager.enableWaiting(false);
22439    if (this.#canvas) {
22440      this.div.focus();
22441    }
22442  }
22443  #getBitmap() {
22444    if (this.#bitmapId) {
22445      this._uiManager.enableWaiting(true);
22446      this._uiManager.imageManager.getFromId(this.#bitmapId).then(data => this.#getBitmapFetched(data, true)).finally(() => this.#getBitmapDone());
22447      return;
22448    }
22449    if (this.#bitmapUrl) {
22450      const url = this.#bitmapUrl;
22451      this.#bitmapUrl = null;
22452      this._uiManager.enableWaiting(true);
22453      this.#bitmapPromise = this._uiManager.imageManager.getFromUrl(url).then(data => this.#getBitmapFetched(data)).finally(() => this.#getBitmapDone());
22454      return;
22455    }
22456    if (this.#bitmapFile) {
22457      const file = this.#bitmapFile;
22458      this.#bitmapFile = null;
22459      this._uiManager.enableWaiting(true);
22460      this.#bitmapPromise = this._uiManager.imageManager.getFromFile(file).then(data => this.#getBitmapFetched(data)).finally(() => this.#getBitmapDone());
22461      return;
22462    }
22463    const input = document.createElement("input");
22464    input.type = "file";
22465    input.accept = StampEditor.supportedTypesStr;
22466    this.#bitmapPromise = new Promise(resolve => {
22467      input.addEventListener("change", async () => {
22468        if (!input.files || input.files.length === 0) {
22469          this.remove();
22470        } else {
22471          this._uiManager.enableWaiting(true);
22472          const data = await this._uiManager.imageManager.getFromFile(input.files[0]);
22473          this.#getBitmapFetched(data);
22474        }
22475        resolve();
22476      });
22477      input.addEventListener("cancel", () => {
22478        this.remove();
22479        resolve();
22480      });
22481    }).finally(() => this.#getBitmapDone());
22482    input.click();
22483  }
22484  remove() {
22485    if (this.#bitmapId) {
22486      this.#bitmap = null;
22487      this._uiManager.imageManager.deleteId(this.#bitmapId);
22488      this.#canvas?.remove();
22489      this.#canvas = null;
22490      this.#observer?.disconnect();
22491      this.#observer = null;
22492    }
22493    super.remove();
22494  }
22495  rebuild() {
22496    if (!this.parent) {
22497      if (this.#bitmapId) {
22498        this.#getBitmap();
22499      }
22500      return;
22501    }
22502    super.rebuild();
22503    if (this.div === null) {
22504      return;
22505    }
22506    if (this.#bitmapId) {
22507      this.#getBitmap();
22508    }
22509    if (!this.isAttachedToDOM) {
22510      this.parent.add(this);
22511    }
22512  }
22513  onceAdded() {
22514    this._isDraggable = true;
22515    this.div.focus();
22516  }
22517  isEmpty() {
22518    return !(this.#bitmapPromise || this.#bitmap || this.#bitmapUrl || this.#bitmapFile);
22519  }
22520  get isResizable() {
22521    return true;
22522  }
22523  render() {
22524    if (this.div) {
22525      return this.div;
22526    }
22527    let baseX, baseY;
22528    if (this.width) {
22529      baseX = this.x;
22530      baseY = this.y;
22531    }
22532    super.render();
22533    this.div.hidden = true;
22534    if (this.#bitmap) {
22535      this.#createCanvas();
22536    } else {
22537      this.#getBitmap();
22538    }
22539    if (this.width) {
22540      const [parentWidth, parentHeight] = this.parentDimensions;
22541      this.setAt(baseX * parentWidth, baseY * parentHeight, this.width * parentWidth, this.height * parentHeight);
22542    }
22543    return this.div;
22544  }
22545  #createCanvas() {
22546    const {
22547      div
22548    } = this;
22549    let {
22550      width,
22551      height
22552    } = this.#bitmap;
22553    const [pageWidth, pageHeight] = this.pageDimensions;
22554    const MAX_RATIO = 0.75;
22555    if (this.width) {
22556      width = this.width * pageWidth;
22557      height = this.height * pageHeight;
22558    } else if (width > MAX_RATIO * pageWidth || height > MAX_RATIO * pageHeight) {
22559      const factor = Math.min(MAX_RATIO * pageWidth / width, MAX_RATIO * pageHeight / height);
22560      width *= factor;
22561      height *= factor;
22562    }
22563    const [parentWidth, parentHeight] = this.parentDimensions;
22564    this.setDims(width * parentWidth / pageWidth, height * parentHeight / pageHeight);
22565    this._uiManager.enableWaiting(false);
22566    const canvas = this.#canvas = document.createElement("canvas");
22567    div.append(canvas);
22568    div.hidden = false;
22569    this.#drawBitmap(width, height);
22570    this.#createObserver();
22571    if (!this.#hasBeenAddedInUndoStack) {
22572      this.parent.addUndoableEditor(this);
22573      this.#hasBeenAddedInUndoStack = true;
22574    }
22575    this._uiManager._eventBus.dispatch("reporttelemetry", {
22576      source: this,
22577      details: {
22578        type: "editing",
22579        subtype: this.editorType,
22580        data: {
22581          action: "inserted_image"
22582        }
22583      }
22584    });
22585    this.addAltTextButton();
22586  }
22587  #setDimensions(width, height) {
22588    const [parentWidth, parentHeight] = this.parentDimensions;
22589    this.width = width / parentWidth;
22590    this.height = height / parentHeight;
22591    this.setDims(width, height);
22592    if (this._initialOptions?.isCentered) {
22593      this.center();
22594    } else {
22595      this.fixAndSetPosition();
22596    }
22597    this._initialOptions = null;
22598    if (this.#resizeTimeoutId !== null) {
22599      clearTimeout(this.#resizeTimeoutId);
22600    }
22601    const TIME_TO_WAIT = 200;
22602    this.#resizeTimeoutId = setTimeout(() => {
22603      this.#resizeTimeoutId = null;
22604      this.#drawBitmap(width, height);
22605    }, TIME_TO_WAIT);
22606  }
22607  #scaleBitmap(width, height) {
22608    const {
22609      width: bitmapWidth,
22610      height: bitmapHeight
22611    } = this.#bitmap;
22612    let newWidth = bitmapWidth;
22613    let newHeight = bitmapHeight;
22614    let bitmap = this.#bitmap;
22615    while (newWidth > 2 * width || newHeight > 2 * height) {
22616      const prevWidth = newWidth;
22617      const prevHeight = newHeight;
22618      if (newWidth > 2 * width) {
22619        newWidth = newWidth >= 16384 ? Math.floor(newWidth / 2) - 1 : Math.ceil(newWidth / 2);
22620      }
22621      if (newHeight > 2 * height) {
22622        newHeight = newHeight >= 16384 ? Math.floor(newHeight / 2) - 1 : Math.ceil(newHeight / 2);
22623      }
22624      const offscreen = new OffscreenCanvas(newWidth, newHeight);
22625      const ctx = offscreen.getContext("2d");
22626      ctx.drawImage(bitmap, 0, 0, prevWidth, prevHeight, 0, 0, newWidth, newHeight);
22627      bitmap = offscreen.transferToImageBitmap();
22628    }
22629    return bitmap;
22630  }
22631  #drawBitmap(width, height) {
22632    width = Math.ceil(width);
22633    height = Math.ceil(height);
22634    const canvas = this.#canvas;
22635    if (!canvas || canvas.width === width && canvas.height === height) {
22636      return;
22637    }
22638    canvas.width = width;
22639    canvas.height = height;
22640    const bitmap = this.#isSvg ? this.#bitmap : this.#scaleBitmap(width, height);
22641    const ctx = canvas.getContext("2d");
22642    ctx.filter = this._uiManager.hcmFilter;
22643    ctx.drawImage(bitmap, 0, 0, bitmap.width, bitmap.height, 0, 0, width, height);
22644  }
22645  #serializeBitmap(toUrl) {
22646    if (toUrl) {
22647      if (this.#isSvg) {
22648        const url = this._uiManager.imageManager.getSvgUrl(this.#bitmapId);
22649        if (url) {
22650          return url;
22651        }
22652      }
22653      const canvas = document.createElement("canvas");
22654      ({
22655        width: canvas.width,
22656        height: canvas.height
22657      } = this.#bitmap);
22658      const ctx = canvas.getContext("2d");
22659      ctx.drawImage(this.#bitmap, 0, 0);
22660      return canvas.toDataURL();
22661    }
22662    if (this.#isSvg) {
22663      const [pageWidth, pageHeight] = this.pageDimensions;
22664      const width = Math.round(this.width * pageWidth * _display_utils.PixelsPerInch.PDF_TO_CSS_UNITS);
22665      const height = Math.round(this.height * pageHeight * _display_utils.PixelsPerInch.PDF_TO_CSS_UNITS);
22666      const offscreen = new OffscreenCanvas(width, height);
22667      const ctx = offscreen.getContext("2d");
22668      ctx.drawImage(this.#bitmap, 0, 0, this.#bitmap.width, this.#bitmap.height, 0, 0, width, height);
22669      return offscreen.transferToImageBitmap();
22670    }
22671    return structuredClone(this.#bitmap);
22672  }
22673  #createObserver() {
22674    this.#observer = new ResizeObserver(entries => {
22675      const rect = entries[0].contentRect;
22676      if (rect.width && rect.height) {
22677        this.#setDimensions(rect.width, rect.height);
22678      }
22679    });
22680    this.#observer.observe(this.div);
22681  }
22682  static deserialize(data, parent, uiManager) {
22683    if (data instanceof _annotation_layer.StampAnnotationElement) {
22684      return null;
22685    }
22686    const editor = super.deserialize(data, parent, uiManager);
22687    const {
22688      rect,
22689      bitmapUrl,
22690      bitmapId,
22691      isSvg,
22692      accessibilityData
22693    } = data;
22694    if (bitmapId && uiManager.imageManager.isValidId(bitmapId)) {
22695      editor.#bitmapId = bitmapId;
22696    } else {
22697      editor.#bitmapUrl = bitmapUrl;
22698    }
22699    editor.#isSvg = isSvg;
22700    const [parentWidth, parentHeight] = editor.pageDimensions;
22701    editor.width = (rect[2] - rect[0]) / parentWidth;
22702    editor.height = (rect[3] - rect[1]) / parentHeight;
22703    if (accessibilityData) {
22704      editor.altTextData = accessibilityData;
22705    }
22706    return editor;
22707  }
22708  serialize() {
22709    let isForCopying = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
22710    let context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
22711    if (this.isEmpty()) {
22712      return null;
22713    }
22714    const serialized = {
22715      annotationType: _util.AnnotationEditorType.STAMP,
22716      bitmapId: this.#bitmapId,
22717      pageIndex: this.pageIndex,
22718      rect: this.getRect(0, 0),
22719      rotation: this.rotation,
22720      isSvg: this.#isSvg,
22721      structTreeParentId: this._structTreeParentId
22722    };
22723    if (isForCopying) {
22724      serialized.bitmapUrl = this.#serializeBitmap(true);
22725      serialized.accessibilityData = this.altTextData;
22726      return serialized;
22727    }
22728    const {
22729      decorative,
22730      altText
22731    } = this.altTextData;
22732    if (!decorative && altText) {
22733      serialized.accessibilityData = {
22734        type: "Figure",
22735        alt: altText
22736      };
22737    }
22738    if (context === null) {
22739      return serialized;
22740    }
22741    context.stamps ||= new Map();
22742    const area = this.#isSvg ? (serialized.rect[2] - serialized.rect[0]) * (serialized.rect[3] - serialized.rect[1]) : null;
22743    if (!context.stamps.has(this.#bitmapId)) {
22744      context.stamps.set(this.#bitmapId, {
22745        area,
22746        serialized
22747      });
22748      serialized.bitmap = this.#serializeBitmap(false);
22749    } else if (this.#isSvg) {
22750      const prevData = context.stamps.get(this.#bitmapId);
22751      if (area > prevData.area) {
22752        prevData.area = area;
22753        prevData.serialized.bitmap.close();
22754        prevData.serialized.bitmap = this.#serializeBitmap(false);
22755      }
22756    }
22757    return serialized;
22758  }
22759}
22760exports.StampEditor = StampEditor;
22761
22762/***/ })
22763/******/ 	]);
22764
22765
22766/************************************************************************/
22767/******/ 	// The module cache
22768/******/ 	var __webpack_module_cache__ = {};
22769/******/
22770/******/ 	// The require function
22771/******/ 	function __w_pdfjs_require__(moduleId) {
22772/******/ 		// Check if module is in cache
22773/******/ 		var cachedModule = __webpack_module_cache__[moduleId];
22774/******/ 		if (cachedModule !== undefined) {
22775/******/ 			return cachedModule.exports;
22776/******/ 		}
22777/******/ 		// Create a new module (and put it into the cache)
22778/******/ 		var module = __webpack_module_cache__[moduleId] = {
22779/******/ 			// no module.id needed
22780/******/ 			// no module.loaded needed
22781/******/ 			exports: {}
22782/******/ 		};
22783/******/
22784/******/ 		// Execute the module function
22785/******/ 		__webpack_modules__[moduleId].call(module.exports, module, module.exports, __w_pdfjs_require__);
22786/******/
22787/******/ 		// Return the exports of the module
22788/******/ 		return module.exports;
22789/******/ 	}
22790/******/
22791/************************************************************************/
22792var __webpack_exports__ = {};
22793// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
22794(() => {
22795var exports = __webpack_exports__;
22796
22797
22798Object.defineProperty(exports, "__esModule", ({
22799  value: true
22800}));
22801Object.defineProperty(exports, "AbortException", ({
22802  enumerable: true,
22803  get: function () {
22804    return _util.AbortException;
22805  }
22806}));
22807Object.defineProperty(exports, "AnnotationEditorLayer", ({
22808  enumerable: true,
22809  get: function () {
22810    return _annotation_editor_layer.AnnotationEditorLayer;
22811  }
22812}));
22813Object.defineProperty(exports, "AnnotationEditorParamsType", ({
22814  enumerable: true,
22815  get: function () {
22816    return _util.AnnotationEditorParamsType;
22817  }
22818}));
22819Object.defineProperty(exports, "AnnotationEditorType", ({
22820  enumerable: true,
22821  get: function () {
22822    return _util.AnnotationEditorType;
22823  }
22824}));
22825Object.defineProperty(exports, "AnnotationEditorUIManager", ({
22826  enumerable: true,
22827  get: function () {
22828    return _tools.AnnotationEditorUIManager;
22829  }
22830}));
22831Object.defineProperty(exports, "AnnotationLayer", ({
22832  enumerable: true,
22833  get: function () {
22834    return _annotation_layer.AnnotationLayer;
22835  }
22836}));
22837Object.defineProperty(exports, "AnnotationMode", ({
22838  enumerable: true,
22839  get: function () {
22840    return _util.AnnotationMode;
22841  }
22842}));
22843Object.defineProperty(exports, "CMapCompressionType", ({
22844  enumerable: true,
22845  get: function () {
22846    return _util.CMapCompressionType;
22847  }
22848}));
22849Object.defineProperty(exports, "DOMSVGFactory", ({
22850  enumerable: true,
22851  get: function () {
22852    return _display_utils.DOMSVGFactory;
22853  }
22854}));
22855Object.defineProperty(exports, "FeatureTest", ({
22856  enumerable: true,
22857  get: function () {
22858    return _util.FeatureTest;
22859  }
22860}));
22861Object.defineProperty(exports, "GlobalWorkerOptions", ({
22862  enumerable: true,
22863  get: function () {
22864    return _worker_options.GlobalWorkerOptions;
22865  }
22866}));
22867Object.defineProperty(exports, "ImageKind", ({
22868  enumerable: true,
22869  get: function () {
22870    return _util.ImageKind;
22871  }
22872}));
22873Object.defineProperty(exports, "InvalidPDFException", ({
22874  enumerable: true,
22875  get: function () {
22876    return _util.InvalidPDFException;
22877  }
22878}));
22879Object.defineProperty(exports, "MissingPDFException", ({
22880  enumerable: true,
22881  get: function () {
22882    return _util.MissingPDFException;
22883  }
22884}));
22885Object.defineProperty(exports, "OPS", ({
22886  enumerable: true,
22887  get: function () {
22888    return _util.OPS;
22889  }
22890}));
22891Object.defineProperty(exports, "PDFDataRangeTransport", ({
22892  enumerable: true,
22893  get: function () {
22894    return _api.PDFDataRangeTransport;
22895  }
22896}));
22897Object.defineProperty(exports, "PDFDateString", ({
22898  enumerable: true,
22899  get: function () {
22900    return _display_utils.PDFDateString;
22901  }
22902}));
22903Object.defineProperty(exports, "PDFWorker", ({
22904  enumerable: true,
22905  get: function () {
22906    return _api.PDFWorker;
22907  }
22908}));
22909Object.defineProperty(exports, "PasswordResponses", ({
22910  enumerable: true,
22911  get: function () {
22912    return _util.PasswordResponses;
22913  }
22914}));
22915Object.defineProperty(exports, "PermissionFlag", ({
22916  enumerable: true,
22917  get: function () {
22918    return _util.PermissionFlag;
22919  }
22920}));
22921Object.defineProperty(exports, "PixelsPerInch", ({
22922  enumerable: true,
22923  get: function () {
22924    return _display_utils.PixelsPerInch;
22925  }
22926}));
22927Object.defineProperty(exports, "PromiseCapability", ({
22928  enumerable: true,
22929  get: function () {
22930    return _util.PromiseCapability;
22931  }
22932}));
22933Object.defineProperty(exports, "RenderingCancelledException", ({
22934  enumerable: true,
22935  get: function () {
22936    return _display_utils.RenderingCancelledException;
22937  }
22938}));
22939Object.defineProperty(exports, "SVGGraphics", ({
22940  enumerable: true,
22941  get: function () {
22942    return _api.SVGGraphics;
22943  }
22944}));
22945Object.defineProperty(exports, "UnexpectedResponseException", ({
22946  enumerable: true,
22947  get: function () {
22948    return _util.UnexpectedResponseException;
22949  }
22950}));
22951Object.defineProperty(exports, "Util", ({
22952  enumerable: true,
22953  get: function () {
22954    return _util.Util;
22955  }
22956}));
22957Object.defineProperty(exports, "VerbosityLevel", ({
22958  enumerable: true,
22959  get: function () {
22960    return _util.VerbosityLevel;
22961  }
22962}));
22963Object.defineProperty(exports, "XfaLayer", ({
22964  enumerable: true,
22965  get: function () {
22966    return _xfa_layer.XfaLayer;
22967  }
22968}));
22969Object.defineProperty(exports, "build", ({
22970  enumerable: true,
22971  get: function () {
22972    return _api.build;
22973  }
22974}));
22975Object.defineProperty(exports, "createValidAbsoluteUrl", ({
22976  enumerable: true,
22977  get: function () {
22978    return _util.createValidAbsoluteUrl;
22979  }
22980}));
22981Object.defineProperty(exports, "getDocument", ({
22982  enumerable: true,
22983  get: function () {
22984    return _api.getDocument;
22985  }
22986}));
22987Object.defineProperty(exports, "getFilenameFromUrl", ({
22988  enumerable: true,
22989  get: function () {
22990    return _display_utils.getFilenameFromUrl;
22991  }
22992}));
22993Object.defineProperty(exports, "getPdfFilenameFromUrl", ({
22994  enumerable: true,
22995  get: function () {
22996    return _display_utils.getPdfFilenameFromUrl;
22997  }
22998}));
22999Object.defineProperty(exports, "getXfaPageViewport", ({
23000  enumerable: true,
23001  get: function () {
23002    return _display_utils.getXfaPageViewport;
23003  }
23004}));
23005Object.defineProperty(exports, "isDataScheme", ({
23006  enumerable: true,
23007  get: function () {
23008    return _display_utils.isDataScheme;
23009  }
23010}));
23011Object.defineProperty(exports, "isPdfFile", ({
23012  enumerable: true,
23013  get: function () {
23014    return _display_utils.isPdfFile;
23015  }
23016}));
23017Object.defineProperty(exports, "loadScript", ({
23018  enumerable: true,
23019  get: function () {
23020    return _display_utils.loadScript;
23021  }
23022}));
23023Object.defineProperty(exports, "noContextMenu", ({
23024  enumerable: true,
23025  get: function () {
23026    return _display_utils.noContextMenu;
23027  }
23028}));
23029Object.defineProperty(exports, "normalizeUnicode", ({
23030  enumerable: true,
23031  get: function () {
23032    return _util.normalizeUnicode;
23033  }
23034}));
23035Object.defineProperty(exports, "renderTextLayer", ({
23036  enumerable: true,
23037  get: function () {
23038    return _text_layer.renderTextLayer;
23039  }
23040}));
23041Object.defineProperty(exports, "setLayerDimensions", ({
23042  enumerable: true,
23043  get: function () {
23044    return _display_utils.setLayerDimensions;
23045  }
23046}));
23047Object.defineProperty(exports, "shadow", ({
23048  enumerable: true,
23049  get: function () {
23050    return _util.shadow;
23051  }
23052}));
23053Object.defineProperty(exports, "updateTextLayer", ({
23054  enumerable: true,
23055  get: function () {
23056    return _text_layer.updateTextLayer;
23057  }
23058}));
23059Object.defineProperty(exports, "version", ({
23060  enumerable: true,
23061  get: function () {
23062    return _api.version;
23063  }
23064}));
23065var _util = __w_pdfjs_require__(1);
23066var _api = __w_pdfjs_require__(124);
23067var _display_utils = __w_pdfjs_require__(168);
23068var _text_layer = __w_pdfjs_require__(195);
23069var _annotation_editor_layer = __w_pdfjs_require__(196);
23070var _tools = __w_pdfjs_require__(165);
23071var _annotation_layer = __w_pdfjs_require__(198);
23072var _worker_options = __w_pdfjs_require__(176);
23073var _xfa_layer = __w_pdfjs_require__(201);
23074const pdfjsVersion = '3.11.174';
23075const pdfjsBuild = 'ce8716743';
23076})();
23077
23078/******/ 	return __webpack_exports__;
23079/******/ })()
23080;
23081});
23082//# sourceMappingURL=pdf.js.map

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.